<?php

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

    /**
     * Executes index action
     *
     * @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");

        //portal web - validar el retorno del json - 20170724
        $tag_portal_web = 0;

        try {

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

            //INTERFACES CONTABLES - Código para ejecución Live de Interfaces Contables
            //Llama al método para ejecutar las interfaces contables desde el CN_TABLE
            //Se agrega la información para hacer el llamado a Interfaces Contables
            //Se setea la fecha de ejecución de la interfaz con la fecha del movimiento
            $fechaEjecucion = date($request['fecha_proceso']);
            $this->logMessage("Fecha Movimiento: " . $fechaEjecucion);
            //Captura del id del usuario - maeter
            $idUserName = $request['id_mae_ter'];
            $this->logMessage("Id Mater: " . $idUserName);
            //Id de la Compañía
            $idCia = sfConfig::get('app_idCiaInterfazContable');
            $this->logMessage("Configuracion Compañia: " . $idCia);
            //Tipo de movimiento a Evaluar
            $movimientoInventario = str_replace("-.-", " ", $request['mov_ejecutado']);
            $this->logMessage("Tipo de movimiento: " . $movimientoInventario);
            //Id del movimiento ejecutado:
            //MOdificación - Revisa si esta o no seteado el id del movimiento para procesar en bloque o individual
            if (isset($request['id_movimiento'])) {
                $idMovimientoContable = $request['id_movimiento'];
            } else {
                $idMovimientoContable = 0;
            }
            $this->logMessage("Id Movimiento: " . $idMovimientoContable);
            $this->logMessage("Llama a el método de Interfaces Contables");

            $id_tag = 0;
            switch ($movimientoInventario) {
                case "Notas Credito":
                    if ($idMovimientoContable != 0 && $idMovimientoContable != -1) {
                        //Llamado a las nuevas interfaces - 20170911
                        $respuestaInterfaz = CN_TABLE::callInterfazContableExecute($fechaEjecucion, $idUserName, $idCia, $movimientoInventario, $idMovimientoContable, 1);
                        $respuestaInterfaz = CN_TABLE::callInterfazContableExecute($fechaEjecucion, $idUserName, $idCia, $movimientoInventario, $idMovimientoContable, 2);
                    } elseif ($idMovimientoContable == -1) {
                        $idMovimientoContable = 0;
                        //Llamado a las nuevas interfaces - 20190816
                        $respuestaInterfaz = CN_TABLE::callInterfazContableExecute($fechaEjecucion, $idUserName, $idCia, $movimientoInventario, $idMovimientoContable, 1);
                        $respuestaInterfaz = CN_TABLE::callInterfazContableExecute($fechaEjecucion, $idUserName, $idCia, $movimientoInventario, $idMovimientoContable, $id_tag);
                    }
                    break;
                case "Notas Debito":
                    //Setea los valores de acuerdo a la operación
                    if ($idMovimientoContable != 0) {
                        //Llamado a las nuevas interfaces - 20170911
                        $respuestaInterfaz = CN_TABLE::callInterfazContableExecute($fechaEjecucion, $idUserName, $idCia, $movimientoInventario, $idMovimientoContable, 1);
                    }
                    break;
            }


            //Se hace el llamado al método de Interfaces Contables que se encuentra en CN_TABLE 
            $respuestaInterfaz = CN_TABLE::callInterfazContableExecute($fechaEjecucion, $idUserName, $idCia, $movimientoInventario, $idMovimientoContable, $id_tag);
            if ($tag_portal_web == 1) {
                die();
            }
            //Transforma el JSON en array para capturar los datos
            $arrayRespuestaInterfaz = json_decode($respuestaInterfaz, true);
            //Verifica el status, si es diferente de 0, ocurrio un error al subir la interfaz y debe reportarlo
            if ($arrayRespuestaInterfaz['response']['status'] != 0) {
                $mensaje = $arrayRespuestaInterfaz['response']['data'];
                $this->status = 3;
                $a = $mensaje[0]['mensaje'];
                $b = htmlspecialchars($a, ENT_QUOTES);
                $this->mensajeError = $b;
            } else {
                $this->logMessage("Ejecuta correctamente la interfaz contable");
                $this->logMessage("Estatus de ejecución::" . $arrayRespuestaInterfaz['response']['status']);
                $this->logMessage(print_r($arrayRespuestaInterfaz));
            }
            $this->list_data = array();
            if ($tag_portal_web == 1) {
                die();
            }
        } catch (Exception $e) {
            $this->status = 1;
            $this->mensajeError = "[INTERFAZ CONTABLE] ERROR!!!";
            $this->list_data = array();
            $this->logMessage("[INTERFAZ CONTABLE] ERROR!!!");
            $this->logMessage($e->getMessage());
            if ($tag_portal_web == 1) {
                die();
            }
        }
    }

}
