<?php

/**
 * ext actions.
 *
 * @package    inventario
 * @subpackage ext
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class extActions 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 {



            //Scripts de extension

            $sql = <<<EOD
   
 
select * from ca_titulo_etapa where actual=1 and estado=1 order by id_titulo, id_etapa


EOD;

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


            foreach ($records as $value) {

                $id_titulo = $value['id_titulo'];
                $id_titulo_etapa = $value['id_titulo_etapa'];
                $id_etapa = $value['id_etapa'];
                $anualidades = $value['anualidades'];

                $sql = <<<EOD
   
 
select nvl(sum(estado),0) as estado_sum from ca_anual_etapa where id_titulo_etapa=$id_titulo_etapa


EOD;

                $records = CN_TABLE::executeSQL($sql, true);
                $estado = $records[0]['estado_sum'];

                 //no hay posibles liquidaciones, revisar por casos
                if ($estado == 0) {
                   
                    

                    $sql = <<<EOD
   
 
select nvl(sum(liquidado),0) as anu_sum from ca_anual_etapa where id_titulo_etapa=$id_titulo_etapa


EOD;

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

                    $anu_sum = $records[0]['anu_sum'];

                    //1. Ya se liquidaron todas las posibles anualidades?, de no ser así puede haber un fallo
                    if ($anualidades != $anu_sum) {
                        //Posible fallo
                         $this->logMessage("VER CASO TITULO: $id_titulo - TITULO ETAPA ($id_titulo_etapa)");
                    }
                }


             
            }



            //COMMIT DE TODAS LAS TRANSACCIONES

            $this->conn->commit();
            $this->status = 0;
            $this->list_data = array();
            $this->logMessage("[EXT_ADD] 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 = "[EXT_ADD] Ocurrio un error: " . $e->getMessage();
            $this->list_data = array();
            $this->logMessage("[EXT_ADD] ERROR!");
            $this->logMessage($e->getMessage());
        }
    }

    // Validate
    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Add
     *
     * @param sfWebRequest $request
     * @return array
     */
    protected function validateAdd(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Update
     *
     * @param sfWebRequest $request
     * @return array
     */
    protected function validateUpdate(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Ejecuta una validación previa a la ejecución de una operación tipo Remove
     *
     * @param sfWebRequest $request
     * @return array
     */
    protected function validateRemove(sfWebRequest $request) {

        //valor por defecto
        $errors = null;

        /*
         *  Validar la operación, ya sea por SQL
         */

        /*
         *  Generar errores en $errors
         */

        return $errors;
    }

    /**
     * Acciones anteriores a la original
     *
     * return sfWebRequest Changed Request with additional parameters.
     *
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest
     */
    protected function preprocessRequest($Action, sfWebRequest $request) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a preprocessRequest");

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }
        /* else{
          $request['id_vigencia'] = date('Y');
          $logger->info("bbbbbbbbbbbbbbbbbbbbbbbbbbbbEntro a preprocessRequest");

          } */

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

    /**
     * Acciones posteriores a la original
      and id_tipo_movimiento =  $id_tipo_movimiento
     *
     * return sfWebRequest Changed Request with additional parameters.
     *
     * @param type $Action ( ADD, UPDATE, REMOVE )
     * @param sfWebRequest $request
     * @return \sfWebRequest
     */
    protected function postprocessRequest($Action, sfWebRequest $request, $list_data_post) {

        /*
         * Se instancia la clase del manejo del log
         */
        $logger = sfContext::getInstance()->getLogger();
        $logger->info("Entro a postprocessRequest - " . $list_data_post);

        /*
         * Procesar Request
         */
        //accion add
        if ($Action == "ADD") {
            
        }

        //accion update
        if ($Action == "UPDATE") {
            
        }

        //accion remove
        if ($Action == "REMOVE") {
            
        }

        return $request;
    }

}
