<?php

/**
 * add_all_prod_desc actions.
 *
 * @package    cartera
 * @subpackage add_all_prod_desc
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class add_all_prod_descActions extends sfActions
{
    public $conn;
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {
    $this->forward('default', 'module');
  }
  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");


        //leer variables gwt


        $id_descuento_prod = $request['id_descuento_prod'];
        $porcentaje = $request['porc_desc'];

        //Leer los filtros que vienen de GWT
        $codigo=' ';
        if(!empty($request['codigo'])){
            $codigo= "and upper(ca_producto.codigo) like UPPER('%".$request['codigo']."%')";
        }
        $descripcion=' ';
        if(!empty($request['descripcion'])){
            $descripcion="and upper(ca_producto.descripcion) like UPPER('%".$request['descripcion']."%')";
        }
        $centro_operacion=' ';
        if(!empty($request['id_cen_op'])){
            $centro_operacion=" and id_cen_op=".$request['id_cen_op'];
        }
        
        
        $this->conn = Doctrine_Manager::getInstance()->getCurrentConnection();
        $this->conn->beginTransaction();
        /*
         * Manejo de errores
         */
        try {

            //SE realiza el insert de los articulos que no se encuentren ya en el detalle de producto con el porcentaje General
            $sql = <<<EOD
            insert into CA_DESCUENTO_PROD_DET (ID_DESCUENTO_PROD,ID_PRODUCTO,PORC_DESC) 
            select $id_descuento_prod as ID_DESCUENTO_PROD,ID_PRODUCTO,$porcentaje as PORCENTAJE from ca_producto left join CA_PRODUCTOS_INV_CON_V
            on ca_producto.codigo=CA_PRODUCTOS_INV_CON_V.codigo_elemento        
            where id_producto not in (select id_producto from CA_DESCUENTO_PROD_DET where ID_DESCUENTO_PROD=$id_descuento_prod)  
            $codigo  
            $descripcion
            $centro_operacion
EOD;
            
            CN_TABLE::executeSQL($sql, true);

            //COMMIT DE TODAS LAS TRANSACCIONES

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