<?php

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

    protected $table_names = array(
        'CA_DEBITO_BORRADOR',
        'CA_DEBITO_REF',
        'CA_PUNTO_VENTA',
        'CA_EJE_CUE_VEN_PUNTO',
        'CA_TIPO_DEBITO',
        'RE_MINERAL',
        'INTERCEROS_V',
        'CA_TIP_MON',
        'USUARIO',
        'CA_DEBITO_BORR_DETALLE',
        'CA_PRODUCTO'
    ); //tablas para construir el sql, por medio de joins
    protected $table_join_ids = array(
        'CA_DEBITO_REF,LEFT' =>
        array(
            'id_debito' => 'CA_DEBITO_BORRADOR'
        ),
        'CA_PUNTO_VENTA' =>
        array(
            'id_punto_venta' => 'CA_DEBITO_BORRADOR'
        ),
        'CA_TIPO_DEBITO' =>
        array(
            'id_tipo_debito' => 'CA_DEBITO_BORRADOR'
        ),
        'CA_TIP_MON' =>
        array(
            'id_tip_mon' => 'CA_DEBITO_BORRADOR'
        ),
        'RE_MINERAL,LEFT' =>
        array(
            'id_referencia1-id_mineral' => 'CA_DEBITO_REF'
        ),
        'INTERCEROS_V' =>
        array(
            'id_mae_ter' => 'CA_DEBITO_BORRADOR'
        ),
        'CA_EJE_CUE_VEN_PUNTO,LEFT' =>
        array(
            'id_mae_ter_ven-id_mae_ter' => 'CA_DEBITO_BORRADOR'
        ),
        'USUARIO,LEFT' =>
        array(
            'usuariolog-username' => 'CA_DEBITO_BORRADOR'
        ),
        'CA_DEBITO_BORR_DETALLE' =>
        array(
            'id_debito' => 'CA_DEBITO_BORRADOR'
        ),
        'CA_PRODUCTO' =>
        array(
            'id_producto' => 'CA_DEBITO_BORR_DETALLE'
        )
    ); //si posee tablas para joins, identificar la relacion de los campos con las tablas
    protected $fields = array(
        'CA_DEBITO_BORRADOR' =>
        array(
            'id_debito' => 'id_debito',
            'id_anhos' => 'id_anhos',
            'id_punto_venta' => 'id_punto_venta',
            'id_tipo_debito' => 'id_tipo_debito',
            'sec_debito' => 'sec_debito',
            'id_mae_ter' => 'id_mae_ter',
            'fecha_proceso' => 'fecha_proceso',
            'fecha_vencimiento' => 'fecha_vencimiento',
            'dias_pago' => 'dias_pago',
            'valor_bruto' => 'valor_bruto',
            'valor_iva' => 'valor_iva',
            'valor_dcto' => 'valor_dcto',
            'porcen_dcto' => 'porcen_dcto',
            'valor_total' => 'valor_total',
            'id_mae_ter_ven' => 'id_mae_ter_ven',
            'observaciones' => 'observaciones',
            'id_tip_mon' => 'id_tip_mon',
            'valor_moneda' => 'valor_moneda',
            'trm_debito' => 'trm_debito',
            'estado' => 'estado',
            'fecha_anu' => 'fecha_anu',
            'motivo_anu' => 'motivo_anu',
            'periodo_ini' => 'periodo_ini',
            'periodo_fin' => 'periodo_fin',
            'usuariolog' => 'usuariolog',
            'id_pr_tipo_ingre' => 'id_pr_tipo_ingre',
            'orden_servicio' => 'orden_servicio',
            'id_interceros_contacto' => 'id_interceros_contacto',
            'id_tipo_factura' => 'id_tipo_factura',
            'usuario_anu' => 'usuario_anu'
        ),
        'CA_DEBITO_REF' =>
        array(
            'id_referencia1' => 'id_referencia1',
            'id_referencia2' => 'id_referencia2',
            'id_referencia2,||,id_referencia1' => 'titulo_minero'
        ),
        'CA_PUNTO_VENTA' =>
        array(
            'nombre' => 'punto_venta'
        ),
        'CA_TIPO_DEBITO' =>
        array(
            'descripcion' => 'tipo_debito'
        ),
        'CA_TIP_MON' =>
        array(
            'codigo' => 'codigo_tm',
            'descripcion' => 'tipo_moneda',
            'simbolo' => 'simbolo',
            'local' => 'local',
            'abrev_fac' => 'abrev_fac'
        ),
        'RE_MINERAL' =>
        array(
            'cod_mineral,||,descripcion' => 'mineral',
            'cod_mineral,||, ,||,descripcion' => 'mineral_completo'
        ),
        'INTERCEROS_V' =>
        array(
            'num_doc' => 'num_doc',
            'razon_soc' => 'razon_soc',
            'num_doc,||, - ,||,razon_soc' => 'tercero',
            'num_doc,||, - ,||,papellido,||,  ,||,sapellido,||, ,||,pnombre,||, ,||,snombre' => 'nombre_completo',
        ),
        'CA_EJE_CUE_VEN_PUNTO' =>
        array(
            'num_doc' => 'num_doc_ven',
            'razon_soc' => 'razon_soc_ven',
            'num_doc,||, - ,||,razon_soc' => 'vendedor'
        ),
        'USUARIO' =>
        array(
            'num_doc' => 'num_doc_usuario',
            'nombre,||, ,||,apellido' => 'nombre_usuario',
            'num_doc,||, - ,||,nombre,||, ,||,apellido' => 'completo_usuario'
        )
    ); //por cada tabla especificar los campos del select
    protected $table_field_conditions = array(
        'CA_DEBITO_BORRADOR' => array(
//            'id_debito,a' => array('!=' => array(-1)),
            'id_debito' => array('=' => array('id_debito')),
            'id_anhos' => array('=' => array('id_anhos')),
            'id_punto_venta' => array('=' => array('id_punto_venta')),
            'id_tipo_debito' => array('=' => array('id_tipo_debito')),
            'id_tipo_factura' => array('=' => array('id_tipo_factura')),
            'sec_debito' => array('LIKE' => array('sec_debito')),
            'id_mae_ter' => array('=' => array('id_mae_ter')),
            'fecha_proceso' => array('BETWEENFECHA' => array('fecha_ini', 'fecha_fin')),
            'fecha_anu' => array('BETWEENFECHA' => array('fecha_ini_anu', 'fecha_fin_anu')),
            'id_mae_ter_ven' => array('=' => array('id_mae_ter_ven')),
            'id_tip_mon' => array('=' => array('id_tip_mon')),
            'estado' => array('=' => array('estado')),
            'valor_total,a' => array('>=' => array('valor_ini')),
            'valor_total,b' => array('<=' => array('valor_fin')),
            'valor_total,c' => array('=' => array('valor_exacto')),
            'id_interceros_contacto' => array('=' => array('id_interceros_contacto')),
            'rownum,start' => array('>' => array('_startRow')),
            'rownum,end' => array('<=' => array('_endRow'))
        ),
        'CA_DEBITO_REF' => array(
            'id_referencia2' => array('=' => array('id_referencia2')),
        ),
        'CA_PRODUCTO' => array(
            'aplica_intereses' => array('=' => array('aplica_intereses')),
        )
    ); //por cada tabla se dan los campos, opcion de filtro y variable que entra para los posibles filtros
    protected $table_field_or_conditions = array(
        'CA_DEBITO_BORRADOR' => array(
            'id_tipo_debito,a' => array('=' => array('tipo_debito_a')),
            'id_tipo_debito,b' => array('=' => array('tipo_debito_b')),
            'id_tipo_debito,c' => array('=' => array('tipo_debito_c'))
        )
    ); // filtros de condicion or
    protected $query_qualifier = 'DISTINCT'; //eliminar filas repetivas de consulta sql
    protected $fields_orderBy = array(
        'id_anhos', 'sec_debito'
    ); //campos para el ordenamiento de la consulta

    /*
     * Variables manejo de log
     */
    //true - consulta de administracion
    protected $is_admin = false;
    //true - la tabla principal de busqueda no es una vista
    protected $is_filtro = true;


    /*
     * ------------VARIABLES PARA SERVICIO DE SUMATORIA - SUM
     *
     */
    protected $summatory_data = array(
        'CA_DEBITO_BORRADOR' => array(
            'fields' => array(
                'case  when estado = 1 then valor_bruto  else 0 end#valor_bruto',
                'case  when estado = 1 then valor_iva  else 0 end#valor_iva',
                'case  when estado = 1 then valor_dcto  else 0 end#valor_dcto',
                'case  when estado = 1 then valor_total  else 0 end#valor_total',
                'case  when estado = 1 then valor_moneda  else 0 end#valor_moneda',
                'trm_debito'),
            'labels' => array('id_anhos,Total'),
            'count' => 'sec_debito'
        ),
    ); //se especifica por tabla los campos de suma y condiciones de filtro


    /*
     * ------------VARIABLES PARA SERVICIOS CRUD
     */
    protected $id_name = 'id_debito'; //identificador de la tabla
    protected $id_names = array('id_debito'); //llave primaria
    protected $field_names = array('id_anhos', 'id_punto_venta', 'id_tipo_debito', 'sec_debito', 'id_mae_ter', 'fecha_proceso', 'fecha_vencimiento', 'dias_pago',
        'valor_bruto', 'valor_iva', 'valor_dcto', 'porcen_dcto', 'valor_total', 'id_mae_ter_ven', 'observaciones', 'id_tip_mon', 'valor_moneda', 'trm_debito',
        'estado', 'fecha_anu', 'motivo_anu', 'periodo_ini', 'periodo_fin', 'usuariolog', 'id_pr_tipo_ingre', 'orden_servicio', 'id_interceros_contacto', 'id_tipo_factura', 'usuario_anu'); //campos de la tabla, sin la llave primaria
    protected $table_name = 'CA_DEBITO_BORRADOR'; //tabla en la cual se aplican los cambios
    protected $has_activo = true; //si posee campo en la tabla de nombre activo ---- ESTADO PARA REGALIAS
    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 = true; //si posee secuencia la tabla


    /*
     * Manejo de registro log
     */
    protected $id_unico = 'id_debito'; //identificador unico de la tabla

    /**
     * Metodo para add debito
     *
     * @param sfWebRequest $request
     */

    public function executeAdd(sfWebRequest $request) {

        //Revisar que sea post
        //$this->forward404Unless($request->isMethod('post'));
        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------/  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();
        $this->logMessage("---Inicio Transaccion");
        //manejo de errores
        try {

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

            //variables obligatorias
            if (isset($request['id_anhos'])) {
                $id_anhos = $request['id_anhos'];
            } else {
                $id_anhos = date('Y');
            }
            $id_punto_venta = $request['id_punto_venta'];
            $id_tipo_debito = $request['id_tipo_debito'];
            $id_mae_ter = $request['id_mae_ter'];
            $fecha_proceso = $request['fecha_proceso'];
//            $fecha_proceso = CN_TABLE::fechaSistema();
            $fecha_vencimiento = $request['fecha_vence'];
            $dias_pago = $request['dias_pago'];
            $valor_bruto = $request['valor_bruto'];
            $valor_iva = $request['valor_iva'];
            $valor_total = $request['valor_total'];
            $valor_moneda = $request['valor_moneda'];
            $trm_debito = $request['trm_debito'];


            //validar username
            if (isset($request['username'])) {
                $username = $request['username'];
            } else {
                if (isset($request['username_log'])) {
                    $username = $request['username_log'];
                } else {
                    $username = "Sin Identificar";
                }
            }



            //variables NO obligatorias
            $id_mae_ter_ven = 'null';
            if (isset($request['id_mae_ter_ven'])) {
                $id_mae_ter_ven = $request['id_mae_ter_ven'];
            }
            $id_tip_mon = 'null';
            if (isset($request['id_tip_mon'])) {
                $id_tip_mon = $request['id_tip_mon'];
            }
            $observaciones = 'null';
            if (isset($request['observaciones'])) {
                $observaciones = "'" . $request['observaciones'] . "'";
            }
            $id_pr_tipo_ingre = 'null';
            if (isset($request['id_pr_tipo_ingre'])) {
                $id_pr_tipo_ingre = $request['id_pr_tipo_ingre'];
            }


            $valor_dcto = 0;
            if (isset($request['$valor_dcto'])) {
                $valor_dcto = $request['$valor_dcto'];
            }
            $porcen_dcto = 0;
            if (isset($request['porcen_dcto'])) {
                $porcen_dcto = $request['porcen_dcto'];
            }
            //Incidente #4896, nuevo tipo de factura BIP - 20161101
            $orden_servicio = 'null';
            if (isset($request['orden_servicio'])) {
                $orden_servicio = "'" . $request['orden_servicio'] . "'";
            }
            //Incidente #4896, nuevo id_interceros_contacto - 20161108
            $id_interceros_contacto = 'null';
            if (isset($request['id_interceros_contacto'])) {
                $id_interceros_contacto = $request['id_interceros_contacto'];
            }
            $id_tipo_factura = '1';
            if (isset($request['id_tipo_factura'])) {
                $id_tipo_factura = $request['id_tipo_factura'];
            }

            $tiene_referencias = false;
            //varialbes de referencias
            $id_referencia1 = 'null';
            if (isset($request['id_referencia1'])) {
                $tiene_referencias = true;
                $id_referencia1 = $request['id_referencia1'];
            }

            $id_referencia2 = 'null';
            if (isset($request['id_referencia2'])) {
                $tiene_referencias = true;
                $id_referencia2 = $request['id_referencia2'];
            }

            /*
             * OBTENER SECUENCIA PARA EL DEBITO
             * si no esta creada crearla
             * 
             */
            //sentencia sql
            $sec_debito = 0;

            /*
             * VALIDAR SI SE GUARDAN LOS PERIODOS DEL DEBITO
             */
            $periodo_ini = 'null';
            $periodo_fin = 'null';
            if ($tiene_referencias) {

                if (isset($request['periodo_ini'])) {
                    $periodo_ini = " to_date('" . $request['periodo_ini'] . "','yyyy-mm-dd') ";
                }
                if (isset($request['periodo_fin'])) {
                    $periodo_fin = " to_date('" . $request['periodo_fin'] . "','yyyy-mm-dd') ";
                }
            }

            //Si email_web no es vacio lo guarda en el debito y lo toma para abaco - 20190322
            $email_web = "";
            if (isset($request['email_web'])) {
                $email_web = $request['email_web'];
            }


            //sentencia sql ingresar CA_DEBITO_BORRADOR
            $sql = <<<EOD
Insert into CA_DEBITO_BORRADOR
    (ID_DEBITO,ID_ANHOS,ID_PUNTO_VENTA,ID_TIPO_DEBITO,SEC_DEBITO,ID_MAE_TER,FECHA_PROCESO,
        DIAS_PAGO,VALOR_BRUTO,VALOR_IVA,VALOR_DCTO,PORCEN_DCTO,VALOR_TOTAL,ID_MAE_TER_VEN,
            OBSERVACIONES,ID_TIP_MON,VALOR_MONEDA,TRM_DEBITO,ESTADO,FECHA_ANU,MOTIVO_ANU,
                PERIODO_INI,PERIODO_FIN,USUARIOLOG,ID_PR_TIPO_INGRE,FECHA_VENCIMIENTO,ORDEN_SERVICIO,ID_INTERCEROS_CONTACTO,ID_TIPO_FACTURA,EMAIL_WEB)
    values (null,$id_anhos,$id_punto_venta,$id_tipo_debito,$sec_debito,$id_mae_ter,to_date('$fecha_proceso','yyyy-mm-dd'),
        $dias_pago,$valor_bruto,$valor_iva,$valor_dcto,$porcen_dcto,$valor_total,$id_mae_ter_ven,
                        $observaciones,$id_tip_mon,$valor_moneda,$trm_debito,1,null,null,
                        $periodo_ini,$periodo_fin,'$username', $id_pr_tipo_ingre,to_date('$fecha_vencimiento','yyyy-mm-dd'),$orden_servicio,$id_interceros_contacto,$id_tipo_factura,'$email_web')
EOD;

            //ejecuta el sql
            //CN_TABLE::executeSQL($sql);
            $this->conn->execute($sql);
            $this->conn->commit();
            $this->logMessage("---Commit");
            $this->logMessage("---Inserto registo factura borrador");

            /*
             * INICIO CREAR TRM
             */
            /*if (isset($request['crear_trm'])) {
                if ($request['crear_trm'] == "true") {

                    $this->logMessage("[DEBITO] Crear registro TRM.");

                    //sentencia sql
                    $sql = <<<EOD
Insert into CA_TRM ( ID_TRM, ID_TIP_MON, FECHA_TRM, VALOR_TRM)
    values ( null, $id_tip_mon, to_date('$fecha_proceso','yyyy-mm-dd'), $trm_debito)
EOD;
                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);
                } else {

                    $this->logMessage("[DEBITO] No Crear registro TRM.");
                }
            }*/
            /*
             * FIN CREAR TRM
             */

            // ultimo registro insertado CA_DEBITO_BORRADOR
            $sql = <<<EOD
select * from CA_DEBITO_BORRADOR
where id_debito = (
      select
      max (id_debito) as id_debito
      --id_debito
      from CA_DEBITO_BORRADOR
      where
      id_anhos = $id_anhos
      AND id_punto_venta = $id_punto_venta
      AND id_tipo_debito = $id_tipo_debito
      AND sec_debito = 0
)
and id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_debito = $id_tipo_debito
EOD;
            //ejecuta y obtiene el resultado del sql
            $resultado = CN_TABLE::executeSQL($sql);
//            $this->logMessage("SQL DEBITO nueva. " . $sql);

            /*
             * Verifica que sea un registro para insertar las referencias del debito
             * y vienen registros para las referenciass
             */
            if (count($resultado) == 1) {

                $id_debito = $resultado[0]['id_debito'];

                }
                /*
                 * FIN registro saldo nuevo por vencimiento
                 */

            $this->list_data = $resultado;
            $this->logMessage("Total filas: " . count($resultado));
        } catch (Exception $e) {
            
            $this->logMessage("--Rollback");
            $this->conn->rollback();

            $this->status = 1;
            $this->mensajeError = "ERROR!!!";
            $this->list_data = array();
            $this->logMessage("ERROR!!!");
            $this->logMessage($e->getMessage());
        }
    }

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

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

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

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

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

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

        return $request;
    }

}
