<?php

/**
 * webservice_update_debito actions.
 * 
 * Link PRUEBA:: http://soporte14.sofhouse.net/cartera/web/api_dev.php/api/webservice_update_debito/add.json?id_debito=139617&pin=132465789
 *
 * @package    cartera
 * @subpackage webservice_update_debito
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class webservice_update_debitoActions 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 {

            //Cargar parametricas
            $sql = <<<EOD
select * from ca_parametrica@CAN.ANM.LOCAL
where 
alias = 'id_punto_venta'  
EOD;

            $result = CN_TABLE::executeSQL($sql);
            if (count($result) > 0) {
                $id_punto_venta = $result[0]['valor']; //ca_parametrica
            }


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

            //Variables por defecto para el registro de log
            $id_tabla = $id_debito;
            $id_vigencia = 'null';
            $id_cen_op = 'null';
            $id_cia = 'null';

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

            //  1- CONSULTAR, 2- ACTUALIZAR, 3 - ADICIONAR, 4 - ELIMINAR, 5 - ANULAR
            $id_ope_bd = 2;
            //id del maestro tercero
            $id_mae_ter_log = 1;
            $usuario = 'admin';
            $comando = 'webservice_update_debito';
            //construir observacion
            $observacion = "'Se ingreso a generar actualizacion debito desde servicio web webservice_update_debito'";

            //Manejo de errores
            //Variables obligatorias
            $id_anhos = date('Y');
            $fecha_proceso = CN_TABLE::fechaSistema();
            //registro de consulta en tabla de log- la observacion puede o no enviarse ($request, $id_ope_bd, $id_mae_bd, $observacion)
            CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter_log, $usuario, $comando, $observacion, $id_punto_venta);


            //Consultar obligacion (id_anual_etapa)
            $sql = <<<EOD
select 
tab0.*

from ca_debito tab0                    
                    
where tab0.id_debito = $id_debito                     
EOD;

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

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

            //Consultar vista

            $sql = <<<EOD
select * from v_pago_obligaciones_titulo@CAN.ANM.LOCAL tab0 
where id_debito = $id_debito            
EOD;

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

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

                $valor_bruto = $records[0]['saldo_actual'];
                $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 
tab0.id_debito, 
tab0.id_anhos, 
nvl(cod_bar,0) as cod_bar

from ca_debito tab0                    
                    
where tab0.id_debito = $id_debito  
EOD;


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

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

                    $id_debito = $records[0]['id_debito'];
                    $id_anhos = $records[0]['id_anhos'];
                    $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_DEBITO_PIN_HIST
  (
    ID_DEBITO_PIN_HIST,
    ID_DEBITO,
    ID_ANHOS,
    COD_BAR
  )
  VALUES
  (
    null,
    $id_debito,
    $id_anhos,
    $cod_bar_anterior
  )          
EOD;


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

                    $sql = <<<EOD
UPDATE CA_DEBITO
SET COD_BAR = '$pin',
FECHA_ACTIVACION_PIN = sysdate
WHERE id_debito = $id_debito and id_anhos = $id_anhos                     
EOD;

                    $this->conn->execute($sql);
                } else {
                    throw new Exception("Debito 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 DEBITO] 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 DEBITO] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[UPDATE PIN DEBITO] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
