<?php

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

    protected $table_names = array(
        'CBR_REPARTO',
        'CBR_REMISION_TITULO',
        'CBR_ABOGADO',
        'INTERCEROS_V',
        'CBR_TITULO_MINERO_V'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CBR_REMISION_TITULO' =>
        array(
            'id_remision_titulo' => 'CBR_REPARTO'
        ),
        'CBR_ABOGADO' =>
        array(
            'id_abogado' => 'CBR_REPARTO'
        ),
        'INTERCEROS_V' =>
        array(
            'id_mae_ter' => 'CBR_ABOGADO'
        ),
        'CBR_TITULO_MINERO_V,LEFT' =>
        array(
            'cod_titulo' => 'CBR_REMISION_TITULO'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CBR_REPARTO' =>
        array(
            'id_reparto' => 'id_reparto',
            'id_remision_titulo' => 'id_remision_titulo',
            'id_abogado' => 'id_abogado',
            'fecha_reparto' => 'fecha_reparto',
            'observaciones' => 'observaciones',
            'adjunto' => 'adjunto',
            'id_estado_proceso' => 'id_estado_proceso',
            'estado' => 'estado',
            'fecha_anu' => 'fecha_anu',
            'motivo_anu' => 'motivo_anu',
            'fecha_log' => 'fecha_log',
            'usuario_log' => 'usuario_log'
        ),
        'CBR_REMISION_TITULO' =>
        array(
            'numero_remision' => 'numero_remision',
            'anho_remision' => 'anho_remision',
            'fecha_remision' => 'fecha_remision',
            'cod_titulo' => 'cod_titulo'
        )
        ,
        'CBR_TITULO_MINERO_V' =>
        array(
            'titulo' => 'id_referencia2'
        ),
        'INTERCEROS_V' =>
        array(
            'num_doc' => 'num_doc_abogado',
            'razon_soc' => 'razon_soc_abogado'
        ),
        'CBR_TITULO_MINERO_V' =>
        array(
            'mineral' => 'mineral',
            'id_debito' => 'id_debito',
            'id_mineral' => 'id_mineral'
        )
    ); //por cada tabla especificar los campos del select
    protected $fields_orderBy = array(
        'fecha_reparto desc', 'fecha_log desc', 'num_doc_abogado'
    ); //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_REPARTO' =>
        array(
            'id_reparto,a' => array('!=' => array(-1)),
            'id_reparto,b' => array('=' => array('id_reparto')),
            'id_abogado' => array('=' => array('id_abogado')),
            'id_remision_titulo' => array('=' => array('id_remision_titulo')),
            'fecha_reparto' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'CBR_REMISION_TITULO' =>
        array(
            'cod_titulo' => array('=' => array('cod_titulo')),
            '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
    /*
     * 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_reparto'; //identificador de la tabla
    protected $id_names = array('id_reparto'); //llave primaria
    protected $field_names = array('id_remision_titulo', 'id_abogado', 'fecha_reparto',
        'observaciones', 'adjunto', 'usuario_log'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'CBR_REPARTO'; //tabla en la cual se aplican los cambios 
    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_reparto'; //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();

            /**
             * Envio correo abogado - 20200221
             */
            try {

                $id_reparto = $list_data_post[0]['id_reparto'];
                $id_remision_titulo = $list_data_post[0]['id_remision_titulo'];



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

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

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

                //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 reparto abogado 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);


                //inactiva abogado anterior
                $sql = <<<EOD
update cbr_reparto set estado = 0, 
fecha_anu = trunc(sysdate), motivo_anu = 'Asignación Nuevo Reparto'
where
id_remision_titulo = $id_remision_titulo 
and estado = 1 
and id_reparto != $id_reparto                        
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 apoyo si tiene, sino al supervisor
                 */
                $this->logMessage("Envio correo al apoyo si tiene, sino al supervisor");
                //Consulta datos envio correo
                //Sql
                $sql = <<<EOD
select 
repa.id_reparto,
remi.numero_remision,
remi.anho_remision as id_anhos,
remi.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 el reparto al abogado( '|| ter.num_doc || '-' || ter.razon_soc ||' ) del titulo minero ' || remi.cod_titulo  || ', verificar recepcion No.'|| remi.numero_remision || '-' || remi.anho_remision || '.' 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

from cbr_reparto repa

left join cbr_remision_titulo remi
on repa.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

where
repa.id_reparto = $id_reparto
and repa.estado = 1 
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 = "Reparto - Recepcion No." . $numero_remision . "-" . $id_anhos . " del Titulo: " . $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 = "'Reparto de abogado del proceso del asunto: " . $subject . "'";

                /*
                 * 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 $ex) {
                //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") {
            
        }

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

        return $request;
    }

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

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

        /*
         *  Generar errores en $errors
         */

        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;
    }

}
