<?php

/**
 * debito_completo actions.
 *
 * @package    cartera
 * @subpackage debito_completo
 * @author     lavila
 * @version    SVN: $Id: actions.class.php 23810 2015-09-16
 */
class debito_completoActions extends sfActions {

    public $observaciones = "";

    /**
     * Metodo pra la creacion de tercero- debito - debito detalle, 
     * se deja transaccional, para que haga todo completo.
     * Verifica el tercero y lo crea ne no existir
     * Crea la cabecera del debito
     * Crea el detalle del debito
     * Retorna el debito creado
     *
     * @param sfRequest $request A request object
     */
    public function executeList(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");

        /**
         * Abrir nueva conexion con la Base de Datos
         */
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();

        /*
         * Manejo de errores
         */
        try {

            $id_mae_ter = 0;

            /*
             * Variables de filtro
             */
            $num_doc = $request['num_doc'];

            //sentencia sql
            $sql = <<<EOD
SELECT * FROM INTERCEROS  WHERE num_doc = '$num_doc' order by id_mae_ter
EOD;
            //ejecuta el sql
            $resultado = CN_TABLE::executeSQL($sql);

            /*
             * Verificar tercero existe
             */
            if (count($resultado) > 0) {
                $this->logMessage("[DEBITO_COMPLETO] El Tercero existe.");

                $id_mae_ter = $resultado[0]['id_mae_ter'];
            } else {
                $this->logMessage("[DEBITO_COMPLETO] El Tercero No existe.");

                //Obligatorias
                $id_nat_jur = $request['id_nat_jur'];
                $id_tip_ter = $request['id_tip_ter'];
                $id_tipo_doc = $request['id_tipo_doc'];

                //Opcionales
                $razon_soc = "null";
                if (isset($request['razon_soc'])) {
                    if ($request['razon_soc'] != "null" && $request['razon_soc'] != null && $request['razon_soc'] != '') {
                        $razon_soc = "'" . $request['razon_soc'] . "'";
                    }
                }
                $pnombre = "null";
                if (isset($request['pnombre'])) {
                    if ($request['pnombre'] != "null" && $request['pnombre'] != null && $request['pnombre'] != '') {
                        $pnombre = "'" . $request['pnombre'] . "'";
                    }
                }
                $papellido = "null";
                if (isset($request['papellido'])) {
                    if ($request['papellido'] != "null" && $request['papellido'] != null && $request['papellido'] != '') {
                        $papellido = "'" . $request['papellido'] . "'";
                    }
                }
                $sapellido = "null";
                if (isset($request['sapellido'])) {
                    if ($request['sapellido'] != "null" && $request['sapellido'] != null && $request['sapellido'] != '') {
                        $sapellido = "'" . $request['sapellido'] . "'";
                    }
                }


                /*
                 * insert into INTERCEROS (id_mae_ter,id_nat_jur,id_tip_ter,id_tipo_doc,num_doc,codigo,razon_soc,cam_com,pnombre,snombre,estado_ter,
                 * fecha_doc,papellido,sapellido,nmatricula,nmatriculamer,profesion,dv,objetivo) 
                 * values (1,22,1,1,'1',null,'OTROS R.C',null,null,null,null,null,null,null,null,null,null,null,null);
                 */
                /*
                 * Se deja por defecto el tercero como 1 - activo - 20150414
                 */

                //sentencia sql
                $sql = <<<EOD
insert into INTERCEROS (id_mae_ter,id_nat_jur,id_tip_ter,id_tipo_doc,num_doc,codigo,razon_soc,cam_com,pnombre,snombre,estado_ter,fecha_doc,papellido,sapellido,nmatricula,nmatriculamer,profesion,dv,objetivo) 
values (null,$id_nat_jur,$id_tip_ter,$id_tipo_doc,'$num_doc',null,$razon_soc,null,$pnombre,null,1,null,$papellido,$sapellido,null,null,null,null,null) 
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);

                $this->logMessage("[DEBITO_COMPLETO] OK. Tercero con num_doc: " . $num_doc . " creado.");

                //sentencia sql
                $sql = <<<EOD
SELECT * FROM INTERCEROS  WHERE num_doc = '$num_doc' order by id_mae_ter
EOD;
                //ejecuta el sql
                $resultado = CN_TABLE::executeSQL($sql);

                $id_mae_ter = $resultado[0]['id_mae_ter'];
            }


            /**
             * Llamar al metodo de crear el debito
             */
            $resultado = array();
            /*
             * Variables obligatorias
             */
//            $id_anhos = $request['id_anhos'];
            $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_vence_rec fecha de vencimiento de canon para los debitos - 20130920
            $fecha_vence_rec = $request['fecha_vence_rec'];
            $dias_pago = $request['dias_pago'];
            $valor_bruto = $request['valor_bruto'];
            $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'];
            }
            $valor_iva = 0;
            if (isset($request['valor_iva'])) {
                $valor_iva = $request['valor_iva'];
            }


            /*
             * Varialbes de referencias
             */
            $tiene_referencias = false;
            $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
            $sql = <<<EOD
SELECT * FROM ca_consecutivo_deb
WHERE id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_debito = $id_tipo_debito
EOD;

            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            /*
             * Validar si hay registro de secuencia debito
             */
            if (count($result) == 1) {

                //valores de la secuencia debito
                $sec_debito = $result[0]['consecutivo'] + 1;
                $this->logMessage("[DEBITO_COMPLETO] La secuencia = " . $sec_debito);
            } else {

                $sec_debito = 1;
                $this->logMessage("[DEBITO_COMPLETO] La secuencia = " . $sec_debito);
            }

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

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


            //sentencia sql ingresar CA_DEBITO
            $sql = <<<EOD
Insert into CA_DEBITO
    (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)
    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_vence_rec','yyyy-mm-dd'))
EOD;

            //ejecuta el sql
            $this->conn->execute($sql);

            /*
             * INICIO ACTUALIZAR SECUENCIA DEBITO
             */
            if (count($result) == 1) {
                $this->logMessage("[DEBITO_COMPLETO] La secuencia existe.");

                //valores de la secuencia debito
                $sec_debito = $result[0]['consecutivo'] + 1;
                $id_consecutivo_deb = $result[0]['id_consecutivo_deb'];

                //sentencia sql actualizar valores  de secuencia debito
                $sql = <<<EOD
UPDATE CA_CONSECUTIVO_DEB SET consecutivo = $sec_debito  WHERE id_consecutivo_deb = $id_consecutivo_deb
EOD;

                //ejecuta el sql
                $this->conn->execute($sql);

                $this->logMessage("[DEBITO_COMPLETO] SQL de actualizacion secuencia debito: " . $sql);
            } else {
                $this->logMessage("[DEBITO_COMPLETO] La secuencia NO existe.");

                $sec_debito = 1;

                //sentencia sql
                $sql = <<<EOD
Insert into CA_CONSECUTIVO_DEB (ID_CONSECUTIVO_DEB,ID_TIPO_DEBITO,ID_ANHOS,ID_PUNTO_VENTA,CONSECUTIVO) 
                values ( null, $id_tipo_debito, $id_anhos, $id_punto_venta, $sec_debito)
EOD;
                //ejecuta el sql
                $this->conn->execute($sql);

                $this->logMessage("[DEBITO_COMPLETO] SQL de creacion secuencia debito: " . $sql);
            }

            /*
             * FIN ACTUALIZAR SECUENCIA DEBITO
             */

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

                    $this->logMessage("[DEBITO_COMPLETO] 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
                    $this->conn->execute($sql);
                } else {

                    $this->logMessage("[DEBITO_COMPLETO] No Crear registro TRM.");
                }
            }

            /**
             * Ultimo registro insertado CA_DEBITO
             */
            $sql = <<<EOD
select * from CA_DEBITO
where id_debito = (
      select
      --max (id_debito)
      id_debito
      from CA_DEBITO
      where
      id_anhos = $id_anhos
      AND id_punto_venta = $id_punto_venta
      AND id_tipo_debito = $id_tipo_debito
      AND sec_debito = (
              SELECT CONSECUTIVO
              FROM ca_consecutivo_deb
              WHERE id_anhos = $id_anhos
              AND id_punto_venta = $id_punto_venta
              AND id_tipo_debito = $id_tipo_debito
      )
)
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) > 0) {

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

                /*
                 * INICIO registro saldo nuevo por vencimiento
                 */ {

                    //obtener vencimiento nuevo
                    //sentencia sql
                    $sql = <<<EOD
SELECT * FROM CA_VENCIMIENTOS
WHERE id_debito = $id_debito
EOD;

                    //ejecuta el sql
                    $result = CN_TABLE::executeSQL($sql);

                    //validar si hay registro de VENCIMIENTO
                    if (count($result) == 1) {

                        //valores de VENCIMIENTO
                        $id_vencimiento = $result[0]['id_vencimiento'];
                        $valor = $result[0]['valor'];

                        //registrar saldo nuevo
                        //sentencia sql
                        $sql = <<<EOD
Insert Into Ca_Saldos (Id_Debito, Id_Vencimiento, Id_Anhos, Id_Meses, Saldo_Anterior, Debitos_Mes, Creditos_Mes, Saldo_Actual)
    Values ( $id_debito, $id_vencimiento, $id_anhos,  Extract(Month From to_date('$fecha_proceso','yyyy-mm-dd') ), 0, $valor, 0, $valor)
EOD;
                        //ejecuta el sql
                        CN_TABLE::executeSQL($sql);
                        $this->logMessage("[DEBITO_COMPLETO] SQL de creacion saldo vencimientos: " . $sql);
                    } else {

                        $mensaje = "[DEBITO_COMPLETO] El vencimiento no existe.";
                        $this->status = 1;
                        $this->mensajeError = $mensaje;
                        $this->logMessage($mensaje);
                    }
                }
                /*
                 * FIN registro saldo nuevo por vencimiento
                 */

                /*
                 * INICIO variables por defecto para el registro de log
                 */ {
                    //obtiene el valor para su identificador unico
                    $id_tabla = $id_debito;

                    //validar vigencia
                    $id_vigencia = 'null';
                    if ($this->has_vigencia) {
                        if (isset($request['id_anhos'])) {
                            $id_vigencia = $request['id_anhos'];
                        }
                    }

                    //validar centro de operacion
                    $id_cen_op = 'null';
                    if ($this->has_cen_op) {
                        if (isset($request['id_cen_op'])) {
                            $id_cen_op = $request['id_cen_op'];
                        }
                    }

                    $id_cia = 'null';
                    if ($this->has_id_cia) {
                        if (isset($request['id_cia'])) {
                            $id_cia = $request['id_cia'];
                        }
                    }

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

                    //3 - indica operacion de adicionar de registro
                    $id_ope_bd = 3;

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

                    //el username desde qebsafiERP
                    $usuario = 'admin';
                    if (isset($request['username'])) {
                        if ($request['username'] != '') {
                            $usuario = $request['username'];
                        }
                    } elseif (isset($request['username_log'])) {
                        if ($request['username_log'] != '') {
                            $usuario = $request['username_log'];
                        }
                    }
                    //Obtener id_mae_ter por usuario
                    //sentencia sql
                    $sql = <<<EOD
select * from INTERCEROS where num_doc = (select num_doc from usuario where username = '$usuario') 
EOD;
                    //ejecuta el sql
                    $rec = CN_TABLE::executeSQL($sql);
                    if (count($rec) > 0) {
                        $id_mae_ter = $rec[0]['id_mae_ter'];
                    }


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

                    /*
                     * Construir observacion
                     */
                    $observacion = "'Se adiciono id_debito : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";


                    $id_punto_venta_log = 'null';
                    if (isset($request['punto_venta_log'])) {
                        $id_punto_venta_log = $request['punto_venta_log'];
                    }
                }
                /*
                 * FNI variables por defecto para el registro de log
                 */

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $id_punto_venta_log);

                if ($tiene_referencias) {
                    //sentencia sql
                    $sql = <<<EOD
Insert into CA_DEBITO_REF values ( $id_debito, $id_referencia1, '$id_referencia2')
EOD;
                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);
                    $this->logMessage("[DEBITO_COMPLETO] SQL de las referencias del debito: " . $sql);
                }
            }

            $this->logMessage("[DEBITO_COMPLETO] Total filas: " . count($resultado));


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

            /**
             * Llamar al metodo de crear el debito
             */
            /*
             * Variables Obligatorias
             */
            $id_producto = $request['id_producto'];
            $cantidad = $request['cantidad'];
            $valor_unitario = $request['valor_unitario'];
            $valor_total = $request['valor_total'];

            /*
             * Variables Opcionales
             */
            $observaciones = 'null';
            if (isset($request['observaciones'])) {
                $observaciones = "'" . $request['observaciones'] . "'";
            }

            $valor_iva = 0;
            if (isset($request['valor_iva'])) {
                $valor_iva = $request['valor_iva'];
            }

            $porcen_dcto = 0;
            if (isset($request['porcen_dcto'])) {
                $porcen_dcto = $request['porcen_dcto'];
            }

            $valor_dcto = 0;
            if (isset($request['valor_dcto'])) {
                $valor_dcto = $request['valor_dcto'];
            }

            $por_iva = 0;
            if (isset($request['por_iva'])) {
                $por_iva = $request['por_iva'];
            }
            /*
             * Registro debito detalle
             */
            $sql = <<<EOD
Insert into CA_DEBITO_DETALLE 
(ID_DEBITO_DETALLE,ID_DEBITO,ID_PRODUCTO,CANTIDAD,VALOR_UNITARIO,VALOR_IVA,VALOR_DCTO,PORCEN_DCTO,VALOR_TOTAL,OBSERVACIONES,POR_IVA) 
values ( null, $id_debito, $id_producto, $cantidad, 
            $valor_unitario, $valor_iva, $valor_dcto, $porcen_dcto, $valor_total, $observaciones, $por_iva ) 
EOD;
            //ejecuta el sql
            $this->conn->execute($sql);

            $this->logMessage("[DEBITO_COMPLETO] Se registro debito detalle.");

            $this->list_data = $resultado;
            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();
            $this->logMessage("[DEBITO_COMPLETO] OK. Registros creados correctamente.");
        } catch (Exception $e) {

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

            $mensaje = "[DEBITO_COMPLETO] ERROR al Generar la debito completo. !!!";

            $this->logMessage($mensaje);
            $this->logMessage("state 2");
            $this->logMessage("Code " . $e->getCode());
            $this->logMessage("Message " . $e->getMessage());

            $this->status = 2;
            $this->mensajeError = $mensaje;
            $this->list_data = array(
                array(
                    'Code' => $e->getCode(),
                    'Message' => $e->getMessage(),
                    'Line' => $e->getLine(),
                    'Trace' => $e->getTraceAsString(),
                    'mensaje' => $mensaje
                )
            );
        }
    }

    /**
     * Metodo pra la creacion de tercero- debito - debito detalle, 
     * se deja transaccional, para que haga todo completo.
     * Verifica el tercero y lo crea ne no existir
     * Crea la cabecera del debito
     * Crea el detale del debito
     * Retorna el debito creado
     *
     * @param sfRequest $request A request object
     */
    public function executeList2(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");


        /*
         * Manejo de errores
         */
        try {

            $id_mae_ter = 0;

            /*
             * Variables de filtro
             */
            $num_doc = $request['num_doc'];

            //sentencia sql
            $sql = <<<EOD
SELECT * FROM INTERCEROS  WHERE num_doc = '$num_doc' order by id_mae_ter
EOD;
            //ejecuta el sql
            $resultado = CN_TABLE::executeSQL($sql);

            /*
             * Verificar tercero existe
             */
            if (count($resultado) > 0) {
                $this->logMessage("[DEBITO_COMPLETO] El Tercero existe.");

                $id_mae_ter = $resultado[0]['id_mae_ter'];
            } else {
                $this->logMessage("[DEBITO_COMPLETO] El Tercero No existe.");

                //Obligatorias
                $id_nat_jur = $request['id_nat_jur'];
                $id_tip_ter = $request['id_tip_ter'];
                $id_tipo_doc = $request['id_tipo_doc'];

                //Opcionales
                $razon_soc = "null";
                if (isset($request['razon_soc'])) {
                    if ($request['razon_soc'] != "null" && $request['razon_soc'] != null && $request['razon_soc'] != '') {
                        $razon_soc = "'" . $request['razon_soc'] . "'";
                    }
                }
                $pnombre = "null";
                if (isset($request['pnombre'])) {
                    if ($request['pnombre'] != "null" && $request['pnombre'] != null && $request['pnombre'] != '') {
                        $pnombre = "'" . $request['pnombre'] . "'";
                    }
                }
                $papellido = "null";
                if (isset($request['papellido'])) {
                    if ($request['papellido'] != "null" && $request['papellido'] != null && $request['papellido'] != '') {
                        $papellido = "'" . $request['papellido'] . "'";
                    }
                }
                $sapellido = "null";
                if (isset($request['sapellido'])) {
                    if ($request['sapellido'] != "null" && $request['sapellido'] != null && $request['sapellido'] != '') {
                        $sapellido = "'" . $request['sapellido'] . "'";
                    }
                }


                /*
                 * insert into INTERCEROS (id_mae_ter,id_nat_jur,id_tip_ter,id_tipo_doc,num_doc,codigo,razon_soc,cam_com,pnombre,snombre,estado_ter,
                 * fecha_doc,papellido,sapellido,nmatricula,nmatriculamer,profesion,dv,objetivo) 
                 * values (1,22,1,1,'1',null,'OTROS R.C',null,null,null,null,null,null,null,null,null,null,null,null);
                 */
                /*
                 * Se deja por defecto el tercero como 1 - activo - 20150414
                 */

                //sentencia sql
                $sql = <<<EOD
insert into INTERCEROS (id_mae_ter,id_nat_jur,id_tip_ter,id_tipo_doc,num_doc,codigo,razon_soc,cam_com,pnombre,snombre,estado_ter,fecha_doc,papellido,sapellido,nmatricula,nmatriculamer,profesion,dv,objetivo) 
values (null,$id_nat_jur,$id_tip_ter,$id_tipo_doc,'$num_doc',null,$razon_soc,null,$pnombre,null,1,null,$papellido,$sapellido,null,null,null,null,null) 
EOD;
                //ejecuta el sql
                CN_TABLE::executeSQL($sql);

                $this->logMessage("[DEBITO_COMPLETO] OK. Tercero con num_doc: " . $num_doc . " creado.");

                //sentencia sql
                $sql = <<<EOD
SELECT * FROM INTERCEROS  WHERE num_doc = '$num_doc' order by id_mae_ter
EOD;
                //ejecuta el sql
                $resultado = CN_TABLE::executeSQL($sql);

                $id_mae_ter = $resultado[0]['id_mae_ter'];
            }


            /**
             * Llamar al metodo de crear el debito
             */
            $resultado = array();
            $resultado = $this->crearDebito($id_mae_ter, $request);

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

            /**
             * Llamar al metodo de crear el debito
             */
            $this->crearDebitoDetalle($id_debito, $request);

            $this->list_data = $resultado;
            $this->logMessage("[DEBITO_COMPLETO] OK. Registros creados correctamente.");
        } catch (Exception $e) {

            $mensaje = "[DEBITO_COMPLETO] ERROR!!!";

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

    /**
     * Crear debito
     * 
     * @param type $id_mae_ter
     * @param sfWebRequest $request
     * @return type 
     */
    public function crearDebito($id_mae_ter, sfWebRequest $request) {

        /*
         * Manejo de errores
         */
        try {

            /*
             * Variables obligatorias
             */
//            $id_anhos = $request['id_anhos'];
            $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_vence_rec fecha de vencimiento de canon para los debitos - 20130920
            $fecha_vence_rec = $request['fecha_vence_rec'];
            $dias_pago = $request['dias_pago'];
            $valor_bruto = $request['valor_bruto'];
            $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'];
            }
            $valor_iva = 0;
            if (isset($request['valor_iva'])) {
                $valor_iva = $request['valor_iva'];
            }


            /*
             * Varialbes de referencias
             */
            $tiene_referencias = false;
            $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
            $sql = <<<EOD
SELECT * FROM ca_consecutivo_deb
WHERE id_anhos = $id_anhos
AND id_punto_venta = $id_punto_venta
AND id_tipo_debito = $id_tipo_debito
EOD;

            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            /*
             * Validar si hay registro de secuencia debito
             */
            if (count($result) == 1) {

                //valores de la secuencia debito
                $sec_debito = $result[0]['consecutivo'] + 1;
                $this->logMessage("[DEBITO_COMPLETO] La secuencia = " . $sec_debito);
            } else {

                $sec_debito = 1;
                $this->logMessage("[DEBITO_COMPLETO] La secuencia = " . $sec_debito);
            }

            /*
             * 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'])) {
                    if ($request['periodo_fin'] != 'null' && $request['periodo_fin'] != '' && $request['periodo_fin'] != null) {
                        $periodo_fin = " to_date('" . $request['periodo_fin'] . "','yyyy-mm-dd') ";
                    }
                }
            }


            //sentencia sql ingresar CA_DEBITO
            $sql = <<<EOD
Insert into CA_DEBITO
    (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)
    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_vence_rec','yyyy-mm-dd'))
EOD;

            //ejecuta el sql
            CN_TABLE::executeSQL($sql);

            /*
             * INICIO ACTUALIZAR SECUENCIA DEBITO
             */
            if (count($result) == 1) {
                $this->logMessage("[DEBITO_COMPLETO] La secuencia existe.");

                //valores de la secuencia debito
                $sec_debito = $result[0]['consecutivo'] + 1;
                $id_consecutivo_deb = $result[0]['id_consecutivo_deb'];

                //sentencia sql actualizar valores  de secuencia debito
                $sql = <<<EOD
UPDATE CA_CONSECUTIVO_DEB SET consecutivo = $sec_debito  WHERE id_consecutivo_deb = $id_consecutivo_deb
EOD;

                //ejecuta el sql
                CN_TABLE::executeSQL($sql);
                $this->logMessage("[DEBITO_COMPLETO] SQL de actualizacion secuencia debito: " . $sql);
            } else {
                $this->logMessage("[DEBITO_COMPLETO] La secuencia NO existe.");

                $sec_debito = 1;

                //sentencia sql
                $sql = <<<EOD
Insert into CA_CONSECUTIVO_DEB (ID_CONSECUTIVO_DEB,ID_TIPO_DEBITO,ID_ANHOS,ID_PUNTO_VENTA,CONSECUTIVO) 
                values ( null, $id_tipo_debito, $id_anhos, $id_punto_venta, $sec_debito)
EOD;
                //ejecuta el sql
                CN_TABLE::executeSQL($sql);
                $this->logMessage("[DEBITO_COMPLETO] SQL de creacion secuencia debito: " . $sql);
            }

            /*
             * FIN ACTUALIZAR SECUENCIA DEBITO
             */

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

                    $this->logMessage("[DEBITO_COMPLETO] 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_COMPLETO] No Crear registro TRM.");
                }
            }

            /**
             * Ultimo registro insertado CA_DEBITO
             */
            $sql = <<<EOD
select * from CA_DEBITO
where id_debito = (
      select
      --max (id_debito)
      id_debito
      from CA_DEBITO
      where
      id_anhos = $id_anhos
      AND id_punto_venta = $id_punto_venta
      AND id_tipo_debito = $id_tipo_debito
      AND sec_debito = (
              SELECT CONSECUTIVO
              FROM ca_consecutivo_deb
              WHERE id_anhos = $id_anhos
              AND id_punto_venta = $id_punto_venta
              AND id_tipo_debito = $id_tipo_debito
      )
)
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) > 0) {

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

                /*
                 * INICIO registro saldo nuevo por vencimiento
                 */ {

                    //obtener vencimiento nuevo
                    //sentencia sql
                    $sql = <<<EOD
SELECT * FROM CA_VENCIMIENTOS
WHERE id_debito = $id_debito
EOD;

                    //ejecuta el sql
                    $result = CN_TABLE::executeSQL($sql);

                    //validar si hay registro de VENCIMIENTO
                    if (count($result) == 1) {

                        //valores de VENCIMIENTO
                        $id_vencimiento = $result[0]['id_vencimiento'];
                        $valor = $result[0]['valor'];

                        //registrar saldo nuevo
                        //sentencia sql
                        $sql = <<<EOD
Insert Into Ca_Saldos (Id_Debito, Id_Vencimiento, Id_Anhos, Id_Meses, Saldo_Anterior, Debitos_Mes, Creditos_Mes, Saldo_Actual)
    Values ( $id_debito, $id_vencimiento, $id_anhos,  Extract(Month From to_date('$fecha_proceso','yyyy-mm-dd') ), 0, $valor, 0, $valor)
EOD;
                        //ejecuta el sql
                        CN_TABLE::executeSQL($sql);
                        $this->logMessage("[DEBITO_COMPLETO] SQL de creacion saldo vencimientos: " . $sql);
                    } else {

                        $mensaje = "[DEBITO_COMPLETO] El vencimiento no existe.";
                        $this->status = 1;
                        $this->mensajeError = $mensaje;
                        $this->logMessage($mensaje);
                    }
                }
                /*
                 * FIN registro saldo nuevo por vencimiento
                 */

                /*
                 * INICIO variables por defecto para el registro de log
                 */ {
                    //obtiene el valor para su identificador unico
                    $id_tabla = $id_debito;

                    //validar vigencia
                    $id_vigencia = 'null';
                    if ($this->has_vigencia) {
                        if (isset($request['id_anhos'])) {
                            $id_vigencia = $request['id_anhos'];
                        }
                    }

                    //validar centro de operacion
                    $id_cen_op = 'null';
                    if ($this->has_cen_op) {
                        if (isset($request['id_cen_op'])) {
                            $id_cen_op = $request['id_cen_op'];
                        }
                    }

                    $id_cia = 'null';
                    if ($this->has_id_cia) {
                        if (isset($request['id_cia'])) {
                            $id_cia = $request['id_cia'];
                        }
                    }

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

                    //3 - indica operacion de adicionar de registro
                    $id_ope_bd = 3;

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

                    //el username desde qebsafiERP
                    $usuario = 'admin';
                    if (isset($request['username'])) {
                        if ($request['username'] != '') {
                            $usuario = $request['username'];
                        }
                    } elseif (isset($request['username_log'])) {
                        if ($request['username_log'] != '') {
                            $usuario = $request['username_log'];
                        }
                    }
                    //Obtener id_mae_ter por usuario
                    //sentencia sql
                    $sql = <<<EOD
select * from INTERCEROS where num_doc = (select num_doc from usuario where username = '$usuario') 
EOD;
                    //ejecuta el sql
                    $rec = CN_TABLE::executeSQL($sql);
                    if (count($rec) > 0) {
                        $id_mae_ter = $rec[0]['id_mae_ter'];
                    }


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

                    /*
                     * Construir observacion
                     */
                    $observacion = "'Se adiciono id_debito : " . $id_tabla . " desde la funcionalidad: " . $comando . "'";


                    $id_punto_venta_log = 'null';
                    if (isset($request['punto_venta_log'])) {
                        $id_punto_venta_log = $request['punto_venta_log'];
                    }
                }
                /*
                 * FNI variables por defecto para el registro de log
                 */

                /*
                 * registro de consulta en tabla de log
                 */
                $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion, $id_punto_venta_log);

                if ($tiene_referencias) {
                    //sentencia sql
                    $sql = <<<EOD
Insert into CA_DEBITO_REF values ( $id_debito, $id_referencia1, '$id_referencia2')
EOD;
                    //ejecuta el sql
                    CN_TABLE::executeSQL($sql);
                    $this->logMessage("[DEBITO_COMPLETO] SQL de las referencias del debito: " . $sql);
                }
            }

            $this->logMessage("[DEBITO_COMPLETO] Total filas: " . count($resultado));
            return $resultado;
        } catch (Exception $e) {

            $this->status = 1;
            $this->mensajeError = "[DEBITO_COMPLETO] ERROR!!!";
            $this->logMessage("[DEBITO_COMPLETO] ERROR!!!");
            $this->logMessage($e->getMessage());
            return array();
        }
    }

    /**
     * Crear debito detalle
     * 
     * @param type $id_debito
     * @param sfWebRequest $request 
     */
    public function crearDebitoDetalle($id_debito, sfWebRequest $request) {

        /*
         * Manejo de errores
         */
        try {

            /*
             * Variables Obligatorias
             */
            $id_producto = $request['id_producto'];
            $cantidad = $request['cantidad'];
            $valor_unitario = $request['valor_unitario'];
            $valor_total = $request['valor_total'];

            /*
             * Variables Opcionales
             */
            $observaciones = 'null';
            if (isset($request['observaciones'])) {
                $observaciones = "'" . $request['observaciones'] . "'";
            }

            $valor_iva = 0;
            if (isset($request['valor_iva'])) {
                $valor_iva = $request['valor_iva'];
            }

            $porcen_dcto = 0;
            if (isset($request['porcen_dcto'])) {
                $porcen_dcto = $request['porcen_dcto'];
            }

            $valor_dcto = 0;
            if (isset($request['valor_dcto'])) {
                $valor_dcto = $request['valor_dcto'];
            }

            $por_iva = 0;
            if (isset($request['por_iva'])) {
                $por_iva = $request['por_iva'];
            }
            /*
             * Registro debito detalle
             */
            $sql = <<<EOD
Insert into CA_DEBITO_DETALLE 
(ID_DEBITO_DETALLE,ID_DEBITO,ID_PRODUCTO,CANTIDAD,VALOR_UNITARIO,VALOR_IVA,VALOR_DCTO,PORCEN_DCTO,VALOR_TOTAL,OBSERVACIONES,POR_IVA) 
values ( null, $id_debito, $id_producto, $cantidad, 
            $valor_unitario, $valor_iva, $valor_dcto, $porcen_dcto, $valor_total, $observaciones, $por_iva ) 
EOD;
            //ejecuta el sql
            CN_TABLE::executeSQL($sql);
            $this->logMessage("[DEBITO_COMPLETO] Se registro debito detalle.");
        } catch (Exception $e) {

            $this->status = 1;
            $this->mensajeError = "[DEBITO_COMPLETO] ERROR!!!";
            $this->list_data = array();
            $this->logMessage("[DEBITO_COMPLETO] 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;
    }

}
