<?php

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

    /**
     * Llenar la tabla no_rh_dp_mf con los datos de cargos por fecha y novedades
     *
     * @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();

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

        try {

            /*
             * Variables de filtro
             */
            $id_rh_dp_mf = 1;
            //Periodo
            $id_periodo = $request['id_periodo'];
            $num_doc = $request['num_doc'];
            $id_tipo_doc = 1;

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

            /*
             * Valida si es funciones historico - 20140606
             */
            if ($estado_hist == 1) {
                $this->logMessage("[no_rh_dp_mf] Entro a generar no_rh_dp_mf.");

                /**
                 * Borrar tabla
                 */
                //sentencia sql
                $sql = <<<EOD
delete from NO_RH_DP_MF 
EOD;
                //ejecuta y obtiene el resultado del sql
                CN_TABLE::executeSQL($sql);


                /**
                 * Recorre los nombramientos para el funcionario
                 */
                //Sql
                $sql = <<<EOD
select 
* 
from no_nombramiento
where num_doc = $num_doc
order by
fecha_nombra
EOD;

                //Ejecutar SQL
                $record = CN_TABLE::executeSQL($sql);

                //recorre los nombramientos
                foreach ($record as $value) {
                    $id_dp = $value['id_dp'];
                    $fecha_ingreso = $value['fecha_ingreso'];
                    $id_sa_niv2 = $value['id_sa_niv2'];

                    /**
                     * insert NO_RH_DP_MF para cada cargo
                     */
                    //sentencia sql
                    $sql = <<<EOD
Insert into NO_RH_DP_MF (ID_RH_DP_MF,ID_TIPO_DOC,NUM_DOC,ID_DP,ID_EA,
    ID_SA_NIV2,FECHA_INI,FECHA_FIN) 
        values ($id_rh_dp_mf, $id_tipo_doc, $num_doc, $id_dp, null, $id_sa_niv2,
            to_date('$fecha_ingreso','YYYY-MM-DD'), to_date('','YYYY-MM-DD')) 
EOD;
                    //ejecuta y obtiene el resultado del sql
                    CN_TABLE::executeSQL($sql);
                    $id_rh_dp_mf = $id_rh_dp_mf + 1;

                    /**
                     * Recorre novedade de personal
                     */
                    //Sql
                    $sql = <<<EOD
select 
* 
from no_novedad_personal
where num_doc = $num_doc
order by
fecha_inicial 
EOD;

                    //Ejecutar SQL
                    $record_nov = CN_TABLE::executeSQL($sql);

                    $id_dp_ant = 0;
                    //recorre las novedades
                    foreach ($record_nov as $value_nov) {
                        $id_novedad = $value_nov ['id_novedad'];
                        $fecha_inicial = $value_nov ['fecha_inicial'];
                        $fecha_terminacion = $value_nov ['fecha_terminacion'];
                        $id_dp_ini = $value_nov ['id_dp_ini'];
                        $id_dp_fin = $value_nov ['id_dp_fin'];

                        //novedad de encargo
                        if ($id_novedad == 3 || $id_novedad == 7) {
                            $id_dp_ant = $id_dp_ini; //id_dp antes del encargo

                            /**
                             * actualiza el registro anterior
                             */
                            //sentencia sql
                            $sql = <<<EOD
update NO_RH_DP_MF set FECHA_FIN = to_date('$fecha_inicial','YYYY-MM-DD')-1 where id_rh_dp_mf = ($id_rh_dp_mf - 1 )
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);

                            /*
                             * Crea un nuevo registro en NO_RH_DP_MF
                             */
                            //sentencia sql
                            $sql = <<<EOD
Insert into NO_RH_DP_MF (ID_RH_DP_MF,ID_TIPO_DOC,NUM_DOC,ID_DP,ID_EA,
    ID_SA_NIV2,FECHA_INI,FECHA_FIN) 
        values ($id_rh_dp_mf, $id_tipo_doc, $num_doc, $id_dp_fin, null, $id_sa_niv2,
            to_date('$fecha_inicial','YYYY-MM-DD'), to_date('','YYYY-MM-DD')) 
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);
                            $id_rh_dp_mf = $id_rh_dp_mf + 1;
                        }
                        //novedad de terminacion
                        if ($id_novedad == 4) {

                            /**
                             * actualiza el registro anterior
                             */
                            //sentencia sql
                            $sql = <<<EOD
update NO_RH_DP_MF set FECHA_FIN = to_date('$fecha_terminacion','YYYY-MM-DD') where id_rh_dp_mf = ($id_rh_dp_mf - 1 )
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);

                            /*
                             * Crea un nuevo registro en NO_RH_DP_MF
                             * id_dp del encargo anterior
                             */
                            //sentencia sql
                            $sql = <<<EOD
Insert into NO_RH_DP_MF (ID_RH_DP_MF,ID_TIPO_DOC,NUM_DOC,ID_DP,ID_EA,
    ID_SA_NIV2,FECHA_INI,FECHA_FIN) 
        values ($id_rh_dp_mf, $id_tipo_doc, $num_doc, $id_dp_ant, null, $id_sa_niv2,
            to_date('$fecha_terminacion','YYYY-MM-DD')+1, to_date('','YYYY-MM-DD')) 
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);
                            $id_rh_dp_mf = $id_rh_dp_mf + 1;
                        }
                        //novedad de retiro
                        if ($id_novedad == 1) {
                            /**
                             * actualiza el registro anterior
                             */
                            //sentencia sql
                            $sql = <<<EOD
update NO_RH_DP_MF set FECHA_FIN = to_date('$fecha_terminacion','YYYY-MM-DD') where id_rh_dp_mf = ($id_rh_dp_mf - 1 )
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);
                        }
                        //novedad de ascenso
                        if ($id_novedad == 2) {
                            /**
                             * actualiza el registro anterior
                             */
                            //sentencia sql
                            $sql = <<<EOD
update NO_RH_DP_MF set FECHA_FIN = to_date('$fecha_inicial','YYYY-MM-DD')-1 where id_rh_dp_mf = ($id_rh_dp_mf - 1 )
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);

                            /*
                             * Crea un nuevo registro en NO_RH_DP_MF
                             * id_dp del encargo anterior
                             */
                            //sentencia sql
                            $sql = <<<EOD
Insert into NO_RH_DP_MF (ID_RH_DP_MF,ID_TIPO_DOC,NUM_DOC,ID_DP,ID_EA,
    ID_SA_NIV2,FECHA_INI,FECHA_FIN) 
        values ($id_rh_dp_mf, $id_tipo_doc, $num_doc, $id_dp_fin, null, $id_sa_niv2,
            to_date('$fecha_inicial','YYYY-MM-DD'), to_date('','YYYY-MM-DD')) 
EOD;
                            //ejecuta y obtiene el resultado del sql
                            CN_TABLE::executeSQL($sql);
                            $id_rh_dp_mf = $id_rh_dp_mf + 1;
                        }
                    }//fin novedades
                    
                    
                    /*
                     * Actializar tipo de nombramiento
                     */
                    
                    
                    
                }//fin nombramientos
            }


            /*
             * COMMIT DE TODAS LAS TRANSACCIONES
             */
            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[no_rh_dp_mf] Datos exitosos.");
        } catch (Exception $e) {

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

}
