<?php

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

    /**
     * Executes index action
     *
     * @param sfRequest $request A request object
     */
    public function executeList(sfWebRequest $request) {

        $this->logMessage("---function executeList");
        $this->logMessage("---BEGIN Logging request");

        $status = 0;

        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");




        $records = array();

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

        /*
         * Formato de fecha
         */
        //Sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD HH24:MI:SS" 
EOD;
        //Ejecutar SQL
        CN_TABLE::executeSQL($sql);

        try {

            //Campos de log
            $usuario_log = $request['username'];

            $id_anhos = $request['id_anhos'];
            $id_meses = $request['id_meses'];

            $fechaAnterior = CN_TABLE::fechaAnterior($id_anhos, $id_meses);
            $id_anhos_ant = $fechaAnterior['id_anhos'];
            $id_meses_ant = $fechaAnterior['id_meses'];

            /**
             * Validar mes a proyectar
             */
            $sql = <<<EOD
select * 
from RVSP_CRONOGRAMA_SERVICIO
where
id_anhos = $id_anhos
and id_meses = $id_meses
EOD;
            $records = CN_TABLE::executeSQL($sql);
            if (count($records) > 0) {
                throw new Exception("Ya existen registros para la proyección del mes y año seleccionado, verificar.");
            }


            /**
             * Validar mes anterior proyectado
             */
            $sql = <<<EOD
select * 
from RVSP_CRONOGRAMA_SERVICIO
where
id_anhos = $id_anhos_ant
and id_meses = $id_meses_ant
EOD;
            $records = CN_TABLE::executeSQL($sql);
            if (count($records) == 0) {
                throw new Exception("Falta registros de cronograma mes anterior, verificar.");
            }


            /**
             * RVSP_CRONOGRAMA_SERVICIO
             * Suma dias segun mes anterior - 20210407::LAVILA
             */ 
            $sql = <<<EOD
insert into RVSP_CRONOGRAMA_SERVICIO(
ID_CRONOGRAMA_SERVICIO,
ID_ANHOS,
ID_MESES,
id_cen_op,
ID_TIPO_SERVICIO,
ID_EMPRESA,
REFERENCIA,
ID_RESPONSABLE,
ID_COORDINADOR,
FECHA_DESDE,
FECHA_HASTA,
USUARIO_LOG,
FECHA_LOG
)

select
null as ID_CRONOGRAMA_SERVICIO,
$id_anhos as ID_ANHOS,
$id_meses as ID_MESES,
id_cen_op,
ID_TIPO_SERVICIO,
ID_EMPRESA,
REFERENCIA,
ID_RESPONSABLE,
ID_COORDINADOR,
FECHA_DESDE + to_number( to_char( LAST_DAY( to_date('01/'|| $id_meses_ant || '/' || $id_anhos_ant ,'dd/mm/yyyy') ) ,'dd') ) as FECHA_DESDE,
FECHA_HASTA + to_number( to_char( LAST_DAY( to_date('01/'|| $id_meses_ant || '/' || $id_anhos_ant ,'dd/mm/yyyy') ) ,'dd') ) as FECHA_HASTA,
'$usuario_log' as USUARIO_LOG,
trunc(sysdate) as FECHA_LOG

from RVSP_CRONOGRAMA_SERVICIO

where
ID_ANHOS = $id_anhos_ant  
and ID_MESES = $id_meses_ant 
EOD;
            $this->conn->execute($sql);


            $this->conn->commit();
            $this->status = 0;
            $this->list_data = $records;
            $this->logMessage("[cronograma_proyectar] Exitoso.");
        } catch (Exception $e) {

            /*
             * ROLLBACK DE TODAS LAS TRANSACCIONES EN CASO DE QUE OCURRA ALGUN ERROR
             */
            $this->conn->rollback();
            $this->status = 1;
            $this->mensajeError = "[cronograma_proyectar] Validación: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[cronograma_proyectar] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

}
