<?php

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

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

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");



        /*
         * variables por defecto para el registro de log
         */
        $id_tabla = 'null';
        $id_vigencia = 'null';
        $id_cen_op = 'null';

        $id_cia = 'null';
        if (isset($request['id_cia'])) {
            $id_cia = $request['id_cia'];
        }

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

        //1 - indica operacion de consulta
        $id_ope_bd = 1;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        $usuario = 'admin';
        if (isset($request['username'])) {
            if (!is_null($request['username']) && $request['username'] != '') {
                $usuario = $request['username'];
            }
        }
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }
        $whereCenOp = ' ';
        $cen_op = '';
        if (isset($request['id_cen_op'])) {
            $cen_op = $request['id_cen_op'];
            $whereCenOp = 'and conper.id_cen_op = ' . $cen_op;
        }


        //obtener valores del request
        $cia = $request['id_cia'];

        //obtener las filas de control periodo por cenop, en orden de vigencia/periodo
        $sql = <<<EOD
select
conper.ID_PERIODO_CONTABLE,
conper.id_control_periodo,
conper.ID_VIGENCIA,
conper.id_cen_op,
conper.id_cia,
conper.ACTIVO,
CASE conper.ACTIVO
 WHEN 1 THEN 'Abierto'
 ELSE 'Cerrado'
end as estado,
percon.nom_periodo,
per.nom_cen_op,
per.descr_cen_op

FROM CN_CONTROL_PERIODO conper

join cn_centro_operacion per
on per.id_cen_op = conper.id_cen_op
and per.id_cia = conper.id_cia

join cn_periodo_contable percon
on percon.id_periodo_contable = conper.id_periodo_contable

WHERE conper.ID_CIA = $cia 
$whereCenOp

order by
conper.id_cen_op,
conper.id_vigencia DESC,
percon.id_periodo_contable DESC
EOD;

        //ejecutar sql
        $records = CN_TABLE::executeSQL($sql);

        //valida si hay valores
        if (count($records) > 0) {


            //construir observacion
            $observacion = "'Se consulto el cen_op: " . $cen_op . " en control periodo, desde la funcionalidad: " . $comando . "'";

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($id_tabla, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion);



            $this->list_data = $records;
        } else {
            $this->list_data = array();
        }
        //totales de filas y de consulta
        $this->logMessage('record_count = ' . count($records));
        $this->logMessage('total_record_count = ' . count($records));
        //valores de cabecera para el JSON
        $this->totalRows = count($records);
        $this->startRow = 0;
        $this->endRow = $this->startRow + count($records);
    }

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

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");


        /*
         * variables por defecto para el registro de log
         */
        $id_tabla = 'null';
        $id_vigencia = 'null';
        $id_cen_op = 'null';

        $id_cia = 'null';
        if (isset($request['id_cia'])) {
            $id_cia = $request['id_cia'];
        }

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

        //2 - indica operacion de adicion
        $id_ope_bd = 2;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        $usuario = 'admin';
        if (isset($request['username'])) {
            if (!is_null($request['username']) && $request['username'] != '') {
                $usuario = $request['username'];
            }
        }
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }


        //obtener variables del request
        $cia = $request['id_cia'];
        $whereCenOp = '';
        $cen_op = '';
        if (isset($request['id_cen_op'])) {
            $cen_op = $request['id_cen_op'];
            $whereCenOp = 'and conper.id_cen_op = ' . $cen_op;
        }

        //obtener usuario de ingreso
        $usuario = "sofhouse";
        if (isset($request["username"])) {
            $usuario = $request["username"];
        }

        /*
         * Recorrer centros de operacion
         */


        $sql = <<<EOD
select * from CN_CENTRO_OPERACION conper
where conper.ID_CIA = $cia
$whereCenOp
EOD;

        $rec = CN_TABLE::executeSQL($sql);

        foreach ($rec as $value) {

            $cen_op = $value['id_cen_op'];
            $whereCenOp = 'and conper.id_cen_op = ' . $value['id_cen_op'];


            //obtener los valores del control periodo por cenop
            $sql = <<<EOD
select
conper.ID_PERIODO_CONTABLE,
conper.id_control_periodo,
conper.ID_VIGENCIA,
conper.id_cen_op,
conper.id_cia,
conper.ACTIVO,
CASE conper.ACTIVO
 WHEN 1 THEN 'Abierto'
 ELSE 'Cerrado'
end as estado,
percon.nom_periodo,
per.nom_cen_op,
per.descr_cen_op

FROM CN_CONTROL_PERIODO conper

join cn_centro_operacion per
on per.id_cen_op = conper.id_cen_op
and per.id_cia = conper.id_cia

join cn_periodo_contable percon
on percon.id_periodo_contable = conper.id_periodo_contable

WHERE conper.ID_CIA = $cia 
$whereCenOp

order by
conper.id_cen_op,
conper.id_vigencia DESC,
percon.id_periodo_contable DESC
EOD;
            $periodos = CN_TABLE::executeSQL($sql);


            //Valida si esta vacio
            if (empty($periodos)) {

                $sql = <<<EOD
    select * from CN_TABLE_SEQ
    where ID_CIA = $cia
    and NOM_ENTIDAD = 'CN_CONTROL_PERIODO'
EOD;

                $seq = CN_TABLE::executeSQL($sql);
                $secuencia = $seq[0]['seq'] + 1;

                /*
                 * insertar nuevo control periodo
                 */
// ID_CONTROL_PERIODO     ID_VIGENCIA     ID_PERIODO_CONTABLE     ID_CEN_OP     ID_CIA     ACTIVO
                $sql = <<<EOD
     INSERT INTO CN_CONTROL_PERIODO VALUES ( $secuencia , 2010 , 13 , $cen_op , $cia , 1 )
EOD;

                CN_TABLE::executeSQL($sql);

                /*
                 * insertar registro en la tabla de log
                 */
                $sql = <<<EOD
     INSERT INTO CN_CONTROL_PERIODO_LOG VALUES (  '$usuario',  SYSDATE, 'Nuevo registro control periodo',$secuencia , 2010 , 13 , $cen_op , $cia , 1 )
EOD;

                CN_TABLE::executeSQL($sql);


//actualizar la secuencia en la tabla
                $sql = <<<EOD
    UPDATE CN_TABLE_SEQ
    SET SEQ = $secuencia
    where ID_CIA = $cia
    and NOM_ENTIDAD = 'CN_CONTROL_PERIODO'
EOD;

                CN_TABLE::executeSQL($sql);
            } else {

                $firstRow = $periodos[0];

                //valida ultimo periodo
                if ($firstRow['id_periodo_contable'] == 13) {

                    //Obtiene valores de la primera fila
                    $vig = $firstRow['id_vigencia'] + 1;
                    $per_cont = 1;

                    //consultar vigencia si existe
                    $sql = <<<EOD
    select * from CN_VIGENCIA
    where ID_VIGENCIA = $vig
EOD;
                    $rec = CN_TABLE::executeSQL($sql);

                    //si existe vigencia, se crea de no ser asi
                    if (count($rec) == 0) {
                        //insertar vigencia nueva
                        $sql = <<<EOD
     INSERT INTO CN_VIGENCIA VALUES ( $vig )
EOD;
                        //ejecuta sql
                        CN_TABLE::executeSQL($sql);
                    }


                    /*
                     * Insertar consecutivos del anho nuevo - 20130305
                     */
                    try {

                        //insertar vigencia nueva CN_CONTROL_CAD
                        $sql = <<<EOD
Insert into CN_TABLE_VIG_SEQ (NOM_ENTIDAD,ID_CIA,ID_VIGENCIA,SEQ) values ('CN_CONTROL_CAD','$cia','$vig','0') 
EOD;
                        //ejecuta sql
                        CN_TABLE::executeSQL($sql);
                    } catch (Exception $exc) {
//                    echo $exc->getTraceAsString();
                    }

                    try {
                        //insertar vigencia nueva CN_DOCUMENTO
                        $sql = <<<EOD
Insert into CN_TABLE_VIG_SEQ (NOM_ENTIDAD,ID_CIA,ID_VIGENCIA,SEQ) values ('CN_DOCUMENTO','$cia','$vig','0') 
EOD;
                        //ejecuta sql
                        CN_TABLE::executeSQL($sql);
                    } catch (Exception $exc) {
//                    echo $exc->getTraceAsString();
                    }

                    try {

                        //insertar vigencia nueva CN_MOVIMIENTO_CONTABLE
                        $sql = <<<EOD
Insert into CN_TABLE_VIG_SEQ (NOM_ENTIDAD,ID_CIA,ID_VIGENCIA,SEQ) values ('CN_MOVIMIENTO_CONTABLE','$cia','$vig','0') 
EOD;
                        //ejecuta sql
                        CN_TABLE::executeSQL($sql);
                    } catch (Exception $exc) {
//                    echo $exc->getTraceAsString();
                    }
                } else {

                    //Obtiene valores de la primera fila
                    $vig = $firstRow['id_vigencia'];
                    $per_cont = $firstRow['id_periodo_contable'] + 1;
                }

                //optener el numero de secuencia
                $sql = <<<EOD
    select * from CN_TABLE_SEQ
    where ID_CIA = $cia
    and NOM_ENTIDAD = 'CN_CONTROL_PERIODO'
EOD;

                $seq = CN_TABLE::executeSQL($sql);
                $secuencia = $seq[0]['seq'] + 1;

                /*
                 * insertar un nuevo rgistro
                 */
// ID_CONTROL_PERIODO     ID_VIGENCIA     ID_PERIODO_CONTABLE     ID_CEN_OP     ID_CIA     ACTIVO
                $sql = <<<EOD
     INSERT INTO CN_CONTROL_PERIODO VALUES ( $secuencia , $vig , $per_cont , $cen_op , $cia , 1 )
EOD;

                CN_TABLE::executeSQL($sql);


                /*
                 * insertar registro en la tabla de log
                 */
                $sql = <<<EOD
     INSERT INTO CN_CONTROL_PERIODO_LOG VALUES (  '$usuario',  SYSDATE, 'Nuevo registro control periodo',$secuencia , $vig , $per_cont , $cen_op , 1 , $cia )
EOD;

                CN_TABLE::executeSQL($sql);

//actualizar la tabla de secuencia
                $sql = <<<EOD
    UPDATE CN_TABLE_SEQ
    SET SEQ = $secuencia
    where ID_CIA = $cia
    and NOM_ENTIDAD = 'CN_CONTROL_PERIODO'
EOD;

                CN_TABLE::executeSQL($sql);
            }
        }



//traer el ultimo registro anexado
        $sql = <<<EOD
select
conper.ID_PERIODO_CONTABLE,
conper.id_control_periodo,
conper.ID_VIGENCIA,
conper.id_cen_op,
conper.id_cia,
conper.ACTIVO,
CASE conper.ACTIVO
 WHEN 1 THEN 'Abierto'
 ELSE 'Cerrado'
end as estado,
percon.nom_periodo,
per.nom_cen_op,
per.descr_cen_op

FROM CN_CONTROL_PERIODO conper

join cn_centro_operacion per
on per.id_cen_op = conper.id_cen_op
and per.id_cia = conper.id_cia

join cn_periodo_contable percon
on percon.id_periodo_contable = conper.id_periodo_contable

WHERE conper.ID_CIA = $cia 
$whereCenOp

order by
conper.id_cen_op,
conper.id_vigencia DESC,
percon.id_periodo_contable DESC  
EOD;
        //ejecutar la consulta sql
        $records = CN_TABLE::executeSQL($sql);

        //valida si hay valores
        if (count($records) > 0) {
            $rec = array($records[0]);


            //construir observacion
            $observacion = "'Se adiciono un id_control_periodo: " . $secuencia . " desde la funcionalidad: " . $comando . "'";

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($secuencia, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion);




            $this->list_data = $rec;
        } else {
            $this->list_data = array();
        }
        //totales de filas y de consulta
        $this->logMessage('record_count = ' . count($records));
        $this->logMessage('total_record_count = ' . count($records));
        //valores de cabecera para el JSON
        $this->totalRows = count($records);
        $this->startRow = 0;
        $this->endRow = $this->startRow + count($records);
    }

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

        //Guardar los parametros del request en el log
        $this->logMessage("---BEGIN Logging request");
        foreach ($request->getGetParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("--------------------------------------------------*  Ip: " . $_SERVER['REMOTE_ADDR']);
        foreach ($request->getPostParameters() as $key => $value) {
            $this->logMessage("request[$key] = $value");
        }
        $this->logMessage("---END Logging request");



        /*
         * variables por defecto para el registro de log
         */
        $id_tabla = 'null';
        $id_vigencia = 'null';
        $id_cen_op = 'null';

        $id_cia = 'null';
        if (isset($request['id_cia'])) {
            $id_cia = $request['id_cia'];
        }

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

        //3 - indica operacion de actualizacion
        $id_ope_bd = 3;

        //id del maestro tercero
        $id_mae_ter = 1;
        if (isset($request['id_username'])) {
            $id_mae_ter = $request['id_username'];
        }
        $usuario = 'admin';
        if (isset($request['username'])) {
            if (!is_null($request['username']) && $request['username'] != '') {
                $usuario = $request['username'];
            }
        }
        $comando = 'sin comando';
        if (isset($request['comando'])) {
            $comando = $request['comando'];
        }



        //obtener valores del request
        $cia = $request['id_cia'];
        $cen_op = $request['id_cen_op'];
        $control_periodo = $request['id_control_periodo'];
        $vigencia = $request['id_vigencia'];
        $periodo_contable = $request['id_periodo_contable'];
        $nom_periodo = $request['nom_periodo'];
        $nom_cen_op = $request['nom_cen_op'];

        //obtener usuario de ingreso
        $usuario = "sofhouse";
        if (isset($request["username"])) {
            $usuario = $request["username"];
        }

        $activo = $request['activo'];
        //cambio por valores numericos
        $activo_log = $activo = $activo == 'true' ? 0 : 1;

        //cambio de estado
        $estado = $activo == 1 ? 'Abierto' : 'Cerrado';

        //actualizar el control periodo seleccionado
        $sql = <<<EOD
UPDATE CN_CONTROL_PERIODO SET activo = $activo
WHERE id_control_periodo = $control_periodo
AND id_vigencia = $vigencia
AND id_periodo_contable = $periodo_contable
AND id_cen_op = $cen_op
AND id_cia = $cia 
EOD;

        //ejecutar sql
        CN_TABLE::executeSQL($sql);


        //cambio por bolean
        $activo = $activo == 1 ? 'true' : 'false';

        //consultar nombre periodo

        $sql = <<<EOD
SELECT * FROM CN_PERIODO_CONTABLE
WHERE id_periodo_contable = $periodo_contable
EOD;

        //ejecutar sql
        $rec = CN_TABLE::executeSQL($sql);
        $nom_periodo = $rec[0]['nom_periodo'];

        //construir fila de retorno
        $records[] = array(
            "id_periodo_contable" => $periodo_contable,
            "id_control_periodo" => $control_periodo,
            "id_vigencia" => $vigencia,
            "id_cen_op" => $cen_op,
            "id_cia" => $cia,
            "activo" => $activo,
            "estado" => $estado,
            "nom_periodo" => $nom_periodo,
            "nom_cen_op" => $nom_cen_op
        );

        /*
         * insertar registro en la tabla de log
         */
        $sql = <<<EOD
     INSERT INTO CN_CONTROL_PERIODO_LOG VALUES (  '$usuario',  SYSDATE, 'Modificacion estado control periodo',
        $control_periodo , $vigencia , $periodo_contable , $cen_op , $cia , $activo_log )
EOD;

        CN_TABLE::executeSQL($sql);

        //valida si hay valores
        if (count($records) > 0) {


            //construir observacion
            $observacion = "'Se actualizo estado para el id_control_periodo: " . $control_periodo . " desde la funcionalidad: " . $comando . "'";

            /*
             * registro de consulta en tabla de log
             */
            $sql = CN_TABLE::registroTableLog($control_periodo, $id_vigencia, $id_cen_op, $id_cia, $id_mae_bd, $id_ope_bd, $id_mae_ter, $usuario, $comando, $observacion);


            $this->list_data = $records;
        } else {
            $this->list_data = array();
        }
        //totales de filas y de consulta
        $this->logMessage('record_count = ' . count($records));
        $this->logMessage('total_record_count = ' . count($records));
        //valores de cabecera para el JSON
        $this->totalRows = count($records);
        $this->startRow = 0;
        $this->endRow = $this->startRow + count($records);
    }

}
