<?php

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

    /**
     * Metodo para add movimiento banco
     *
     * @param sfWebRequest $request
     */
    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();

        //sentencia sql
        $sql = <<<EOD
ALTER SESSION SET NLS_DATE_FORMAT = "YYYY-MM-DD"
EOD;

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

        /*
         * variables log
         */
        //obtiene el valor para su identificador unico
        $id_tabla = 'null';
        if (isset($request['id_tabla'])) {
            $id_tabla = $request['id_tabla'];
        }
        $id_vigencia = 'null';
        $cen_op = 'null';
        $id_cia = 'null';

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

        //  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 = 'categoria_actuali_cont';
        //construir observacion
        $observacion = "'Se actualizo categorias de contratos, tabla de terceros.'";


        /**
         * Validar errores de procedimiento
         */
        try {
            // Registro de consulta en tabla de log
            $this->logMessage("[categoria_actuali_cont] " . $observacion . ".\n");

            CN_TABLE::registroTableLog($id_tabla, $id_ope_bd, $id_mae_bd, $id_mae_ter_log, $usuario, $comando, $observacion);

            $id_anhos = $request['id_anhos'];
            $whereCategoria = '';
            if (isset($request['id_categoria'])) {
                $id_categoria = $request['id_categoria'];
                $whereCategoria = 'and cat.id_categoria in (select co_categoria.id_categoria from co_categoria where cat.descripcion = (select max(cocat.descripcion) from co_categoria cocat where cocat.id_categoria = ' . $request['id_categoria'] . ')) ';
            }

            /**
             * Actualiza terceros, sueldos
             * Se debe aplicar la actualización de sueldos para todos los contratos donde la vigencia actual este dentro del rango de fecha de FECHA INICIO y FECHA FINAL
              Actualizar según la categoría del contratista.
              Actualizar en sueldos para comisiones en PGN y SGR, actualizando la fecha de actualización.
             */
            $sql = <<<EOD
select 
cat.*,
nvl( (select max(co_categoria.sueldo) from co_categoria where co_categoria.id_anhos = $id_anhos and co_categoria.descripcion = cat.descripcion) , cat.sueldo) as sueldo_actual,
con.id_contrato,
leg.fecha_inicio,
leg.fecha_terminacion,
contra.num_doc

from co_categoria cat

join co_contrato con
on con.id_categoria = cat.id_categoria

join co_contratista contra
on contra.id_contratista = con.id_contratista

join co_legaliza_contrato leg
on leg.id_contrato = con.id_contrato

where
1 = 1
$whereCategoria 
and 
(
  leg.fecha_inicio between to_date('01/01/$id_anhos', 'dd/mm/yyyy') and to_date('31/12/$id_anhos', 'dd/mm/yyyy')
  or 
  leg.fecha_terminacion between to_date('01/01/$id_anhos', 'dd/mm/yyyy') and to_date('31/12/$id_anhos', 'dd/mm/yyyy')
)

order by
con.id_anhos,
con.no_contrato
EOD;
            //ejecuta el sql
            $result = CN_TABLE::executeSQL($sql);

            foreach ($result as $value) {

                $sueldo = $value['sueldo_actual'];
                $nitocc = $value['num_doc'];


                $sql = <<<EOD
update terceros set sueldo = '$sueldo' where nitocc = '$nitocc'  
EOD;

                CN_TABLE::executeSQL($sql);
            }

            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();

            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[categoria_actuali_cont] Actualización exitosa");
        } catch (Exception $e) {

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

            $mensaje = "ERROR!!!";

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

            /*
             * Registro de tabla de log - 20170630
             * Registro de consulta en tabla de log 1 - CONSULTAR, 2 - ACTUALIZAR, 3 - ADICIONAR, 4	- ELIMINAR, 5 - ANULAR
             */
            $id_ope_bd = 2;
            $observacion = "'Se actualizo categorias de contratos, tabla de terceros.'";
            $this->logMessage("[categoria_actuali_cont] Exception:: " . $observacion . ".\n");
        }
    }

}
