<?php

/**
 * update_pin_recibo actions.
 *
 * @package    canon
 * @subpackage update_pin_recibo
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class update_pin_reciboActions extends sfActions {

    public $conn;

    /**
     * Metodo list de accesos
     *
     * @param sfRequest $request A request object
     */
    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();
        /*
         * Manejo de errores
         */
        try {


            /*
             * INPUTS
             */

            if (isset($request['id_obligacion']) && isset($request['pin'])) {
                $id_obligacion = $request['id_obligacion'];
                $pin = $request['pin'];
            } else {
                throw new Exception("Falta alguno de los parámetros obligatorios (id_obligacion, pin)");
            }

            // Solo registra log la primera vez de consulta
            //Operaciones: 1-CONSULTAR, 2-ACTUALIZAR, 3-ADICIONAR, 4-ELIMINAR, 5-ANULAR
            $id_ope_bd = 2;
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('ca_recibo');
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            $sql = CN_TABLE::registrarLog($request, $id_ope_bd, $id_mae_bd, "Actualización del PIN $pin con numero de obligacion $id_obligacion");


            //Consultar obligacion (id_anual_etapa)
            $sql = <<<EOD
 
            select tit.cod_titulo, tit.id_titulo 
            from ca_anual_etapa ae 
            join rmn_titulo tit on ae.id_titulo=tit.id_titulo
            where id_anual_etapa=$id_obligacion
                    
EOD;

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

            if (count($records) != 0) {
                $id_titulo = $records[0]['id_titulo'];
            } else {
                throw new Exception("El id de la obligacion es invalido");
            }

            //Consultar vista

            $sql = <<<EOD
 
select * from V_PAGO_FINANCIERA where id_obligacion=$id_obligacion             
                    
            
EOD;

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

            if (count($records) != 0) {

                $valor_bruto = $records[0]['valor'];
                $valor_interes = $records[0]['valor_intereses'];
                $valor_total = $records[0]['valor_total'];
                $dias_mora = $records[0]['dias_mora'];

                //Traer datos de recibo

                $sql = <<<EOD

select id_recibo, vigencia, nvl(cod_bar,0) as cod_bar from ca_recibo 
where ID_DET_LIQ_CANON  = (SELECT ID_DET_LIQ_CANON FROM CA_DET_LIQ_CANON WHERE ID_ANUAL_ETAPA=$id_obligacion AND APROBADO=1 AND ANULADO=0)
AND VIG_LIQ = (SELECT VIGENCIA FROM CA_DET_LIQ_CANON WHERE ID_ANUAL_ETAPA=$id_obligacion AND APROBADO=1 AND ANULADO=0)
                        

EOD;


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

                if (count($records) != 0) {

                    $id_recibo = $records[0]['id_recibo'];
                    $vigencia = $records[0]['vigencia'];
                    $cod_bar_anterior = $records[0]['cod_bar'];


                    if ($cod_bar_anterior != 0) {
                        //Guardar valor anterior tabla de recibos - pines historicos

                        $sql = <<<EOD

 
INSERT
INTO CA_RECIBO_PIN_HIST
  (
    ID_RECIBO_PIN_HIST,
    ID_RECIBO,
    VIGENCIA,
    COD_BAR
  )
  VALUES
  (
    null,
    $id_recibo,
    $vigencia,
    $cod_bar_anterior
  )                        

EOD;


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

                    $sql = <<<EOD

                    
UPDATE CA_RECIBO
SET COD_BAR             ='$pin',
VALOR_BRUTO = $valor_bruto,
VALOR_INTERES = $valor_interes,
VALOR_TOTAL = $valor_total,
DIAS_MORA = $dias_mora,
FECHA_ACTIVACION_PIN = sysdate
WHERE id_recibo=$id_recibo and vigencia=$vigencia 
                    
EOD;

                    $this->conn->execute($sql);
                } else {
                    throw new Exception("Recibo invalido");
                }
            } else {
                throw new Exception("No es posible activar el PIN");
            }

            //COMMIT DE TODAS LAS TRANSACCIONES
            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[UPDATE PIN RECIBO] Consulta exitosa");
        } catch (Exception $e) {
            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();
            $this->status = 1;
            $this->mensajeError = "[UPDATE PIN RECIBO] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[UPDATE PIN RECIBO] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

    public function executeRemove(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();
        /*
         * Manejo de errores
         */
        try {

            /*
             * INPUTS
             */

            if (isset($request['id_obligacion'])) {
                $id_obligacion = $request['id_obligacion'];
            } else {
                throw new Exception("Falta alguno de los parámetros obligatorios (id_obligacion)");
            }

            // Solo registra log la primera vez de consulta
            //Operaciones: 1-CONSULTAR, 2-ACTUALIZAR, 3-ADICIONAR, 4-ELIMINAR, 5-ANULAR
            $id_ope_bd = 5;
            //obtener id maestro tabla
            $id_mae_bd = CN_TABLE::consultarIdTablaBD('ca_recibo');
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            $sql = CN_TABLE::registrarLog($request, $id_ope_bd, $id_mae_bd, "Anulacion del PIN $pin con numero de obligacion $id_obligacion");


            $sql = <<<EOD

                    
UPDATE CA_RECIBO
SET COD_BAR =NULL,
VALOR_BRUTO = NULL,
VALOR_INTERES = NULL,
VALOR_TOTAL = NULL,
DIAS_MORA = NULL,
FECHA_ACTIVACION_PIN = NULL
WHERE ID_DET_LIQ_CANON  =(SELECT ID_DET_LIQ_CANON FROM CA_DET_LIQ_CANON WHERE ID_ANUAL_ETAPA=$id_obligacion AND APROBADO=1 AND ANULADO=0)
AND VIG_LIQ            =(SELECT VIGENCIA FROM CA_DET_LIQ_CANON WHERE ID_ANUAL_ETAPA=$id_obligacion AND APROBADO=1 AND ANULADO=0)
                    
EOD;

            CN_TABLE::executeSQL($sql, true);


            //COMMIT DE TODAS LAS TRANSACCIONES
            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[REMOVE PIN RECIBO] Consulta exitosa");
        } catch (Exception $e) {
            //ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
            $this->conn->rollback();
            $this->status = 1;
            $this->mensajeError = "[REMOVE PIN RECIBO] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[REMOVE PIN RECIBO] 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;
    }

}
