<?php

/**
 * com_trans_contra_prog_ta actions.
 *
 * @package    controlComisiones
 * @subpackage com_trans_contra_prog_ta
 * @author     Manuel Enrique Paredes Lopez
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class com_trans_contra_prog_taActions extends sfQuery
{
  /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'COM_TRANS_CONTRA_PROG_TA',
        'COM_TRANS_CONTRA_PASAJERO',
        'COM_TRANS_CONTRATADO',
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'COM_TRANS_CONTRATADO, LEFT'=>
        array(
            'id_trans_contratado' => 'COM_TRANS_CONTRA_PROG_TA'
        ),
        'COM_TRANS_CONTRA_PASAJERO, LEFT'=>
        array(
            'id_trans_contra_pasajero' => 'COM_TRANS_CONTRA_PROG_TA'
        ),
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'COM_TRANS_CONTRA_PROG_TA' =>
        array(
            'id_trans_contra_prog_ta'  => 'id_trans_contra_prog_ta',
            'id_trans_contra_pasajero' => 'id_trans_contra_pasajero',
            'id_trans_contratado'      => 'id_trans_contratado',
            'id_mes'                   => 'id_mes',
            'id_anho'                  => 'id_anho',
            'id_tipo_tramite'          => 'id_tipo_tramite',
            'valor_tiquete'            => 'valor_tiquete',
            'num_tiquete'              => 'num_tiquete',
            'aerolinea'                => 'aerolinea',
            'adjunto'                  => 'adjunto',
            'justificacion_cancelado'  => 'justificacion_cancelado',
            'id_usuario_cancelado'     => 'id_usuario_cancelado',
            'estado_prog_ta'           => 'estado_prog_ta',
            'fecha_log'                => 'fecha_log',
            'usuario_log'              => 'usuario_log',
        ),
        'COM_TRANS_CONTRA_PASAJERO' =>
        array(
            'lider'                     =>  'lider',
            'celular'                   =>  'celular',
            'nitocc'                    =>  'nitocc',
        ),
        'COM_TRANS_CONTRATADO'  =>
        array(
            'num_solicitud'             =>  'num_solicitud',
        ),
    ); //por cada tabla especificar los campos del select

    /*
     * OPCIONES DE FILTRO:
     *
     * LIKEALLPLUS- busqueda comparativa de la cadena dividida por los espacios en blanco en cualquier posición
     * LIKEALL - busqueda comparativa de la cadena en cualquier posición
     * LIKE - busqueda en la cadena que inicie por la variable de filtro
     *
     * _filtroNull / para filtro de not null o null - type debe ser is - para todas las variables
     * TYPE NULL / para filtro de not null o null con el valor de campo desde gwt
     * EJEMPLO: 'titular' => array('NULL' => array('titular')),
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'COM_TRANS_CONTRA_PROG_TA' => array(
            'id_trans_contra_prog_ta,a' => array('!=' => array(-1)),
            'id_trans_contra_prog_ta,b' => array('=' => array('id_trans_contra_prog_ta')),
            'id_trans_contra_pasajero' => array('=' => array('id_trans_contra_pasajero')),
            'id_trans_contratado' => array('=' => array('id_trans_contratado')),
            'estado_prog_ta' => array('IN' => array('estado_general')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(); // filtros de condicion or
//    protected $query_qualifier = 'DISTINCT'; //Variable para el sql para eliminar filas repetidas
    protected $fields_orderBy = array(
        'id_trans_contra_prog_ta'
    ); //campos para el ordenamiento de la consulta
//    protected $table_field_obligatory = array('id_debito'); //campos obligatorios de filtro - estan en el request

    /*
     * Variables manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Area';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;



    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_trans_contra_prog_ta'; //identificador de la tabla - solo si es un dato no llave compuesta
    protected $id_names = array('id_trans_contra_prog_ta'); //llave primaria
    protected $field_names = array('id_trans_contra_pasajero','id_trans_contratado','id_mes','id_anho','id_tipo_tramite',
    'valor_tiquete','num_tiquete','aerolinea','adjunto','justificacion_cancelado','id_usuario_cancelado','estado_prog_ta',
    'fecha_log','usuario_log'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'COM_TRANS_CONTRA_PROG_TA'; //tabla en la cual se aplican los cambios
    protected $has_activo = false; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS - CARTERA
    protected $has_vigencia = false; //si posee vigencia
    protected $has_cen_op = false; //si posee centro de operacion
    protected $has_id_cia = false; //si posee compañia
    protected $has_secuencia = false; //si posee secuencia la tabla - true si es por tabla, false - trigger
//    protected $en_mayuscula = true; // si se pone, se puede poner en mayucula con true y en minuscula con false, de lo contrario la pone tal cual la BD


    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_trans_contra_prog_ta'; //identificador unico de la tabla
    //false - Registrar log para list - consultar
    protected $log_list = false;
    //false - Registrar log para add - update - remove
    protected $log_crud = false;

    /**
     * Construccion de observacion perzonalizada
     * 
     * Toda variable para tomarla del request con el formato:
     * &request-variable&
     * 
     * false - observacion por defecto
     *
     * @var string 
     */
    protected $observacion_list = false;
    protected $observacion_add = false;
    protected $observacion_update = false;
    protected $observacion_remove = false;

    // Validate
    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Add
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;
        if (isset($request['justificacion_cancelado'])){
            $request['id_usuario_cancelado'] = $request['usuario_log'];
            
        }
        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Remove
     *
     * @param sfWebRequest $request
     * @return array 
     */
    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Acciones anteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function preprocessRequest($Action, sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            $request['estado_prog']=1;
            $request['usuario_log']=$request['id_username'];
            $request['fecha_log'] = CN_TABLE::fechaSistema();

        }

        //accion update
        if ($Action == "UPDATE") {
            $request['usuario_log']=$request['id_username'];
            $request['fecha_log'] = CN_TABLE::fechaSistema();
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    /**
     * Acciones posteriores a la original
     * 
     * return sfWebRequest Changed Request with additional parameters.
     * 
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest 
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);
        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
       	/*
         * (SGC-1, ANM-2, SGR-3, CYC-4, COL-5, INCI-6, LOCAL-7)
         */
        $array = sfYaml::load(dirname(__FILE__) . '/../../../config/app-gwt.yml');

        $int = 0;
        foreach ($array as $routeName => $routeData) {
            //echo $routeName . "\n";
            if ('entidad_cliente' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadCliente = $value;
                    }
                }
            }
            if ('entidad_nombre' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $entidadNombre = $value;
                    }
                }
            }
            if ('correoEnvio' == $routeName) {
                foreach ($routeData as $key => $value) {
                    //echo $value . "\n";
                    if ($key == 'value') {
                        $correoEnvio = $value;
                    }
                }
            }
            /*  if ('jasper_url' == $routeName) {
              foreach ($routeData as $key => $value) {
              //echo $value . "\n";
              if ($key == 'value') {
              $url_jasper = $value;
              }
              }
              } */
            $int++;
        }

        if ($entidadCliente == 2){
        	                $logger->info("Envio correo a los comisionados.");

                $id_trans_contra_prog_ta = "" . $list_data_post[0]['id_trans_contra_prog_ta'];
                //$id_trans_contra_pasajero = $request['id_trans_contra_pasajero'];
                $sql = <<<EOD
SELECT 
tab0.id_trans_contra_prog_ta as id_trans_contra_prog_ta,
tab0.valor_tiquete,
tab0.aerolinea,
tab0.num_tiquete,
tab0.adjunto,
tab1.email,
tab1.razsoc,                                    
tab1.nitocc, 
tab1.email,
tab1.nitocc as num_doc, 
'$correoEnvio' as email_envio,
'La presente es para informar sobre la expedición de boleto aéreo para ' || tab1.razsoc || ' con cedula de ciudadania ' || tab1.nitocc || ', comprado a la aerolinea ' || tab0.aerolinea || ', con número de tiquete ' || tab0.num_tiquete || '.' as mensaje_extra,
'' as mensaje,
'' as mensaje_firma     
FROM COM_TRANS_CONTRA_PROG_TA tab0
LEFT JOIN COM_TRANS_CONTRA_PASAJERO tab ON tab.id_trans_contra_pasajero=tab0.id_trans_contra_pasajero
LEFT JOIN TERCEROS tab1 ON to_char(tab.nitocc)=to_char(tab1.nitocc)                              
WHERE 1=1 AND tab0.id_trans_contra_prog_ta = $id_trans_contra_prog_ta
EOD;
                $result = CN_TABLE::executeSQL($sql);


                $planeacion = "" . $result[0]['completo_planea'];
                $subject = "ASUNTO: EXPEDICION DE TIQUETE AEREO";


                $emailp = $result[0]['email'];

                $report_params['mensaje'] = $result[0]['mensaje_extra'];
                //$prefijo = $records[0]['prefijo'];
                $mensaje_extra = $result[0]['mensaje_extra'];

                //Ejemplo de la persona que se envia el correo: 
                //123;1;pepito perez;correo@gmal.com
                //DATOS RESPONSABLE
                $num_doc = $result[0]['num_doc'];
                $id_tipo_doc = 1;
                $razon_soc = $result[0]['razsoc'];
                $correo = 'paola.velasco@anm.gov.co';
                $datos_usuario = array(
                    '0' => $num_doc . ';' . $id_tipo_doc . ';' . $razon_soc . ';' . $correo
                );


                $currentUri = '';

                $adjunto = true;
                $progress_key = $request['comando'] . $request['username'];

                $entidad_cliente = $entidadCliente;
                $entidad_nombre = $entidadNombre;
                $addAddress = true;
                $ruta = getcwd() . "/uploads/boletos_aereos";

                $array_adjuntos = array(
                	$result[0]['adjunto'] => $result[0]['adjunto']
                );
                $logger->info("Subject: " . $subject);

                CN_TABLE::envioCorreo($report_params, $datos_usuario, $subject, $currentUri, $ruta, $adjunto, $progress_key, $array_adjuntos, $entidad_cliente, $entidad_nombre, $addAddress);
	
        	} 
        }

        //accion update
        if ($Action == "UPDATE") {

        	if (isset($list_data_post[0]['justificacion_cancelado'])) {
        		$justificacion_cancelado = $list_data_post[0]['justificacion_cancelado'];
			$id_usuario_cancelado    = $list_data_post[0]['id_usuario_cancelado'];
			$id_trans_contra_prog_ta = $list_data_post[0]['id_trans_contra_prog_ta'];
                        $fecha_log               = $list_data_post[0]['fecha_log'];
			$this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
		        $this->conn->beginTransaction();	
                $sql = <<<EOD
                INSERT INTO COM_TRANS_CONTRA_PROG_LOG
		(ID_LOG,ID_TRANS_CONTRA_PROG_TA,JUSTIFICACION_CANCELADO,ID_USUARIO_CANCELADO,FECHA_LOG)
		VALUES(NULL,'$id_trans_contra_prog_ta','$justificacion_cancelado','$id_usuario_cancelado',to_date('$fecha_log','YYYY-MM-DD HH24:MI:SS'))
EOD;
			$this->conn->execute($sql);
		        $this->conn->commit();



        	}

            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }
}
