<?php

/**
 * aprob_deneg actions.
 *
 * @package    cobro_coactivo
 * @subpackage aprob_deneg
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class aprob_denegActions extends sfQuery {
    /*
     * ------------VARIABLES PARA SERVICIOS DE CONSULTA - LIST
     */

    protected $table_names = array(
        'CBR_APROB_DENEG',
        'CBR_REMISION_TITULO',
        'CBR_PAR',
        'CBR_REMISION_TIT_AGRUP_V',
        'CBR_RESOL_TIT_REMIS_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CBR_REMISION_TITULO' =>
        array(
            'id_remision_titulo' => 'CBR_APROB_DENEG'
        ),
        'CBR_PAR' =>
        array(
            'id_par' => 'CBR_REMISION_TITULO'
        ),
        'CBR_REMISION_TIT_AGRUP_V,LEFT' =>
        array(
            'id_remision_titulo' => 'CBR_REMISION_TITULO'
        ),
        'CBR_RESOL_TIT_REMIS_V,LEFT' =>
        array(
            'id_remision_titulo' => 'CBR_REMISION_TITULO'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CBR_APROB_DENEG' =>
        array(
            'id_aprob_deneg' => 'id_aprob_deneg',
            'id_remision_titulo' => 'id_remision_titulo',
            'fecha' => 'fecha',
            'observaciones' => 'observaciones',
            'adjunto' => 'adjunto',
            'aprobado' => 'aprobado',
            'fecha_log' => 'fecha_log',
            'usuario_log' => 'usuario_log',
            'actual' => 'actual'
        ),
        'CBR_REMISION_TITULO' =>
        array(
            'numero_remision' => 'numero_remision',
            'anho_remision' => 'anho_remision',
            'numero_correpondencia' => 'numero_correpondencia',
            'fecha_remision' => 'fecha_remision',
            'id_par' => 'id_par',
            'no_folios' => 'no_folios',
            'estado' => 'estado'
        ),
        'CBR_REMISION_TIT_AGRUP_V' =>
        array(
            'cod_titulo_det_agrup' => 'cod_titulo_det_agrup',
            'observaciones_det_agrup' => 'observaciones_det_agrup',
            'mineral_det_agrup' => 'mineral_det_agrup'
        ),
        'CBR_PAR' =>
        array(
            'descripcion' => 'descripcion_par'
        ),
        'CBR_RESOL_TIT_REMIS_V' =>
        array(
            'no_resolucion' => 'no_resolucion',
            'date_expedicion' => 'date_expedicion',
            'no_resolucion_det' => 'no_resolucion_det',
            'date_expedicion_det' => 'date_expedicion_det',
            'no_resolucion_text' => 'no_resolucion_text',
            'date_expedicion_text' => 'date_expedicion_text',
            'no_resolucion_text_completa' => 'no_resolucion_text_completa'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'anho_remision desc', 'numero_remision desc', 'actual desc', 'fecha desc', 'fecha_log desc'
    ); //campos para el ordenamiento de la consulta
    /*
     * 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
     *
     * rownum,start - rownum,end / estos campos para uso del Grid live GWT, numero fijo de filas de consulta
     */
    protected $table_field_conditions = array(
        'CBR_APROB_DENEG' =>
        array(
            'id_aprob_deneg,a' => array('!=' => array(-1)),
            'id_aprob_deneg,b' => array('=' => array('id_aprob_deneg')),
            'id_remision_titulo' => array('=' => array('id_remision_titulo')),
            'aprobado' => array('=' => array('aprobado')),
            'actual' => array('=' => array('actual')),
            'fecha' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'CBR_REMISION_TITULO' =>
        array(
            'id_par' => array('=' => array('id_par')),
            'numero_remision' => array('=' => array('numero_remision')),
            'anho_remision' => array('=' => array('anho_remision')),
            'numero_correpondencia' => array('=' => array('numero_correpondencia')),
            'estado' => array('=' => array('estado'))
        )
    ); //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
    /*
     * Variable manejo de log
     */
    //true - consulta de menu administracion
    protected $is_admin = true;
    //si es servicio para filtro agregar campo
//    protected $filtro = 'Perfiles';
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;
    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_aprob_deneg'; //identificador de la tabla
    protected $id_names = array('id_aprob_deneg'); //llave primaria
    protected $field_names = array('id_remision_titulo', 'fecha', 'observaciones', 'adjunto',
        'aprobado', 'usuario_log'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'CBR_APROB_DENEG'; //tabla en la cual se aplican los cambios 
    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_aprob_deneg'; //identificador unico de la tabla

    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") {

            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();

            try {

                $id_aprob_deneg = $list_data_post[0]['id_aprob_deneg'];
                $id_remision_titulo = $list_data_post[0]['id_remision_titulo'];
                $aprobado = $list_data_post[0]['aprobado'];


                /*
                 * variables por defecto para el registro de log
                 */
                $id_tabla = $id_remision_titulo;

                /*
                 * obtener id maestro tabla
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('CBR_REMISION_TITULO');

                /**
                  1	CONSULTAR
                  2	ACTUALIZAR
                  3	ADICIONAR
                  4	ELIMINAR
                  5	ANULAR
                 */
                $id_ope_bd = 2;

                //id del maestro tercero
                $id_mae_ter = 1;
                if (isset($request['id_username'])) {
                    $id_mae_ter = $request['id_username'];
                }

                //username
                $username = 'admin';
                if (isset($request['username'])) {
                    if (!is_null($request['username']) && $request['username'] != '') {
                        $username = $request['username'];
                    }
                }

                //comando de la funcionalidad
                $comando = 'sin comando';
                if (isset($request['comando'])) {
                    $comando = $request['comando'];
                }

                //construir observacion
                $observacion_log = "'Se actualizo tabla de remision titulo desde la funcionalidad: " . $comando . "'";

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter, $username, $comando, $observacion_log);


                //actualiza estado de la recepcion
                $sql = <<<EOD
UPDATE CBR_REMISION_TITULO SET ESTADO = nvl('$aprobado',0) WHERE ID_REMISION_TITULO = $id_remision_titulo
EOD;

                $this->conn->execute($sql);

                //inactiva aproodegen anterior - 20200225
                $sql = <<<EOD
update CBR_APROB_DENEG set actual = 0
where
id_remision_titulo = $id_remision_titulo 
and actual = 1 
and id_aprob_deneg != $id_aprob_deneg                         
EOD;
                $this->conn->execute($sql);


                /*
                 * (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;
                            }
                        }
                    }
                    $int++;
                }

                /**
                 * Envio correo al abogado si tiene y al usuario de registro
                 * Verificar que tenga correo y abogado - 20201027
                 */
                $this->logMessage("Envio correo al abogado si tiene");
                //Consulta datos envio correo
                //Sql
                $sql = <<<EOD
select 
apro.id_aprob_deneg,
apro.aprobado,
remi.numero_remision,
remi.anho_remision as id_anhos,
det.cod_titulo_det_agrup as cod_titulo,
ter.id_tipo_doc,
ter.num_doc,
ter.razon_soc,
abo.email as correo,
'$correoEnvio' as email_envio,
'' as mensaje_extra,
'' as mensaje_firma,
'Se realiza la ' || case when apro.aprobado = 1 then 'aprobación' else 'denegación' end || ' de los titulos mineros ' || det.cod_titulo_det_agrup  || ', verificar recepcion No.'|| remi.numero_remision || '-' || remi.anho_remision 
    || ', se envia correo a( '|| nvl(ter.num_doc,usu.num_doc) || '-' || nvl(ter.razon_soc,usu.nombre || ' ' || usu.nombre) ||' ).' as mensaje,
                        
--datos de envio
ter.num_doc as num_doc_env,
ter.id_tipo_doc as id_tipo_doc_env,
ter.razon_soc as razon_social_env,
abo.email as correo_env,

--datos de envio usuario
usu.num_doc as num_doc_usu,
usu.id_tipo_doc as id_tipo_doc_usu,
usu.nombre || ' ' || usu.nombre as razon_social_usu,
usu.email as correo_usu

from cbr_aprob_deneg apro

left join cbr_reparto repa
on repa.id_remision_titulo = apro.id_remision_titulo
and repa.estado = 1 

left join cbr_remision_titulo remi
on apro.id_remision_titulo = remi.id_remision_titulo

left join CBR_REMISION_TIT_AGRUP_V det
on det.id_remision_titulo = remi.id_remision_titulo

left join cbr_abogado abo
on abo.id_abogado = repa.id_abogado

left join interceros_v ter
on ter.id_mae_ter = abo.id_mae_ter

left join usuario usu
on usu.username = '$username'

where
apro.id_aprob_deneg = $id_aprob_deneg
and apro.actual = 1 
and abo.email is not null                         
EOD;
                //Ejecutar SQL
                $records = CN_TABLE::executeSQL($sql);

                $this->logMessage("Envio correo");

                if (count($records) > 0) {

                    $report_params = $records[0];
                    $cod_titulo = $records[0]['cod_titulo'];
                    $num_doc = $records[0]['num_doc'];
                    $numero_remision = $records[0]['numero_remision'];
                    $id_anhos = $records[0]['id_anhos'];

                    //Ejemplo de la persona que se envia el correo: 
                    //123;1;pepito perez;correo@gmal.com
                    $num_doc_env = $records[0]['num_doc_env'];
                    $id_tipo_doc_env = $records[0]['id_tipo_doc_env'];
                    $razon_social_env = $records[0]['razon_social_env'];
                    $correo_env = $records[0]['correo_env'];
                    $datos_usuario = array(
                        '0' => $num_doc_env . ';' . $id_tipo_doc_env . ';' . $razon_social_env . ';' . $correo_env
                    );

                    $subject = "Aprobacion AB - Recepcion No." . $numero_remision . "-" . $id_anhos . " de los Titulos: " . $cod_titulo;
                    $currentUri = '';
                    $ruta = '';
                    $adjunto = false;
                    $progress_key = $request['comando'] . $request['username'];
                    $array_adjuntos = array();
                    $entidad_cliente = $entidadCliente;
                    $entidad_nombre = $entidadNombre;
                    $addAddress = true;

                    $this->logMessage("Subject: " . $subject);

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

                    /**
                     * USUARIO
                     */
                    //Ejemplo de la persona que se envia el correo: 
                    //123;1;pepito perez;correo@gmal.com
                    $num_doc_usu = $records[0]['num_doc_usu'];
                    $id_tipo_doc_usu = $records[0]['id_tipo_doc_usu'];
                    $razon_social_usu = $records[0]['razon_social_usu'];
                    $correo_usu = $records[0]['correo_usu'];
                    $datos_usuario = array(
                        '0' => $num_doc_usu . ';' . $id_tipo_doc_usu . ';' . $razon_social_usu . ';' . $correo_usu
                    );

                    $subject = "Aprobacion - Recepcion No." . $numero_remision . "-" . $id_anhos . " de los Titulos: " . $cod_titulo;
                    $currentUri = '';
                    $ruta = '';
                    $adjunto = false;
                    $progress_key = $request['comando'] . $request['username'];
                    $array_adjuntos = array();
                    $entidad_cliente = $entidadCliente;
                    $entidad_nombre = $entidadNombre;
                    $addAddress = true;

                    $this->logMessage("Subject: " . $subject);

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

                $this->logMessage("FIN Envio correo");

                //construir observacion
                $observacion_log = "'Aprobacion de recepcion del proceso del asunto: " . $subject . "'";


                /*
                 * variables por defecto para el registro de log
                 */
                $id_tabla = $id_aprob_deneg;

                /*
                 * obtener id maestro tabla
                 */
                $id_mae_bd = CN_TABLE::consultarIdTablaBD('CBR_APROB_DENEG');

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter, $username, $comando, $observacion_log);


                //COMMIT DE TODAS LAS TRANSACCIONES
                $this->conn->commit();
            } catch (Exception $e) {

                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
            }
        }

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

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

            $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
            $this->conn->beginTransaction();
            try {

                $id_remision_titulo = $request['id_remision_titulo'];
                $aprobado = $request['aprobado'];

                $sql = <<<EOD
UPDATE CBR_REMISION_TITULO SET ESTADO = case when $aprobado = 0 then 1 else 0 end 
    WHERE ID_REMISION_TITULO = $id_remision_titulo
EOD;

                $this->conn->execute($sql);

                $sql = <<<EOD
update cbr_aprob_deneg set actual = 1
where
id_remision_titulo = $id_remision_titulo 
and id_aprob_deneg in (SELECT id_aprob_deneg 
    FROM cbr_aprob_deneg_ult_v 
        where id_remision_titulo = $id_remision_titulo) 
EOD;

                $this->conn->execute($sql);

                $this->conn->commit();
            } catch (Exception $e) {

                //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
                $this->conn->rollback();
            }
        }

        return $request;
    }

    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") {

            //Campos de log - 20200221
            $request['usuario_log'] = $request['id_username'];
        }

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

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

            $id_aprob_deneg = $request['id_aprob_deneg'];

            $sql = <<<EOD
select ID_APROB_DENEG,
ID_REMISION_TITULO,
FECHA,
OBSERVACIONES,
ADJUNTO,
APROBADO,
APROBADO as apro
from CBR_APROB_DENEG
where ID_APROB_DENEG = $id_aprob_deneg
EOD;

            $records = CN_TABLE::executeSQL($sql);

            $request['id_remision_titulo'] = $records[0]['id_remision_titulo'];
            $request['aprobado'] = $records[0]['apro'];
        }

        return $request;
    }

    protected function validateAdd(\sfWebRequest $request) {

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

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */
        $id_remision_titulo = $request['id_remision_titulo'];
        $aprobado = $request['aprobado'];

        if ($aprobado == "true") {
            $aprobado = 1;
        } else {
            $aprobado = 0;
        }

        /*
         *  Generar errores en $errors
         */
        //Mira si el estado actual es el que van a registrar - 20200225
        //sentencia sql
        $sql = <<<EOD
SELECT
    *
FROM cbr_aprob_deneg 
where 
id_remision_titulo = $id_remision_titulo 
EOD;
        //ejecuta el sql
        $records_cant = CN_TABLE::executeSQL($sql);

        //sentencia sql
        $sql = <<<EOD
SELECT
    *
FROM cbr_remision_titulo
where id_remision_titulo = $id_remision_titulo
and estado = $aprobado 
EOD;
        //ejecuta el sql
        $records_rend = CN_TABLE::executeSQL($sql);
        if (count($records_rend) > 0 && count($records_cant) > 0) {

            $text = "";
            if ($aprobado == 0) {
                $text = " no";
            }

            $errors['mensaje'] = "La recepción del titulo ya esta como" . $text . " aprobada, favor verificar.";
            $errors['servicio'] = "registro_concepto";
            $logger->info("La recepción del titulo ya esta como" . $text . " aprobada, favor verificar.");
        }

        return $errors;
    }

    protected function validateRemove(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    protected function validateUpdate(\sfWebRequest $request) {
        //valor por defecto
        $errors = null;

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

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

}
