Exemplo n.º 1
0
 /**
  * registro Apertura Caja
  * @param \Zend\ServiceManager\ServiceLocatorInterface $serviceLocator
  * @param \Tesoreria\Models\ERequest $request
  * @return \Tesoreria\Models\EResponse
  */
 public static function registroAperturaCaja($serviceLocator, $request)
 {
     $response = new EResponse();
     $params = array();
     $params["request"] = $request;
     $params = json_encode($params);
     $conexion = $serviceLocator->get(Constants::SCHEMA_1)->getDriver()->getConnection();
     $conexion->beginTransaction();
     try {
         self::init($serviceLocator);
         ExpLog::save($serviceLocator, $request->header->serieEquipo, Constants::LOG_ACTIVIDAD, "", "registro Apertura Caja", $params, "", $request->header->usuario);
         # si la terminal es abierta con mas dinero que el posee fisicamente,
         # corroboro el estado de efectivo de la tesoreria
         $maestroTerminal = self::$maestroBaseDao->getOneObject(array('codigo_alternativo' => $request->header->serieEquipo));
         $agencia = $maestroTerminal->getPadre($serviceLocator);
         $terminales = self::$maestroBaseDao->getAllObjects(array("padre" => $agencia->getId()));
         $tesoreria = null;
         $montoEnTesoreria = null;
         foreach ($terminales as $ter) {
             $usoTerminal = self::$usoDAMaestroDao->getOneObject(array("ma_ba_maestro" => $ter->getId(), "uso_dam_conf_da" => Constants::CONF_DA_TERMINAL_TESORERIA));
             if (!is_null($usoTerminal)) {
                 if ($usoTerminal->getValor() == 1) {
                     $condicion = 'owner = ' . $ter->getId();
                     $itemPesosTesoreria = ExpStoresProcedures::findItems($serviceLocator, Constants::MA_BA_PESOS, $condicion);
                     $montoEnTesoreria = (double) $itemPesosTesoreria[0]->it_cantidad;
                     $tesoreria = $ter;
                     break;
                 }
             }
         }
         if (is_null($tesoreria)) {
             $error = new Error();
             $error->mensaje = "La terminal no posee una tesoreria asociada.";
             $response->error = $error;
             return $response;
         }
         $montoApertura = (double) $request->monto_registracion;
         if ($montoApertura > $montoEnTesoreria) {
             $error = new Error();
             $error->mensaje = "La tesoreria no cuenta con el efectivo con el que desea abrir la caja.";
             $response->error = $error;
             return $response;
         }
         # 1.  Llamo a la apertura de la terminal en Siris, si la misma es exitosa entonces realizo la apertua en Tesoreria
         # 1. Realizo el cierre en SIRIS
         $newRequest = new ERequestHeader();
         $newRequest->secuencia = Constants::SEQ_0;
         $newRequest->serieEquipo = $request->header->serieEquipo;
         $newRequest->trxEquipo = "1";
         //$request->header->trxEquipo;
         $newRequest->usuario = $request->header->usuario;
         $newRequest->password = $request->header->password;
         $responseApertura = \Siris\Experts\ExpTerminal::openTerminal($serviceLocator, $newRequest);
         if (!is_null($responseApertura->error)) {
             throw new Exception("No se pudo realizar la apertura de la terminal en Siris");
         }
         $trxEquipo = ExpUsoDatosAdicionales::getNroTrxTerminal($serviceLocator, $maestroTerminal);
         $objRegistracion = ExpRegistracion::crearRegistracion($serviceLocator, Constants::PA_SIS_APERTURA_CAJA, $request, $trxEquipo);
         $result = ExpRegistracion::crearDetalle($serviceLocator, $objRegistracion, $request);
         // ----- Realizo la busqueda del item de pesos para la terminal en cuestion ------------- ///
         $condicion = 'owner = ' . $maestroTerminal->getId();
         $resultSetItemPesos = ExpStoresProcedures::findItems($serviceLocator, Constants::MA_BA_PESOS, $condicion);
         if (count($resultSetItemPesos) == 0) {
             throw new Exception("Error: el item de pesos de la terminal no ha sido encontrado");
         }
         $itemPesos = self::$itemDao->getOneObject(array('it_id' => $resultSetItemPesos[0]->it_id));
         // ----- Construyo el parametro de retorno de los items ------------- ///
         // Items de Pesos
         $paramItem1 = new ParamItems();
         $paramItem1->setNombre('Pesos');
         $paramItem1->setItems(array($itemPesos));
         // Seteo la variable para retornar
         $response->param_items = array($paramItem1);
         # 1. Debo cambiar el estado de la terminal para que la misma quede abierta
         # 1.1 Al $request que llega le agreo la información necesaria para poder grabar los cambios.
         # Configuracion de la terminal
         $valores = new \stdClass();
         $idConfTrx = Constants::CONF_DA_NRO_TRX_TERMINAL;
         $valores->{$idConfTrx} = $trxEquipo;
         $idConfEstado = Constants::CONF_DA_ESTADO_TERMINAL;
         $valores->{$idConfEstado} = Constants::MA_BA_ESTADO_ABIERTA;
         $paramDATerminal = ExpConfiguracion::getParamDatosAdicionalesMaestro($serviceLocator, Constants::MA_BA_AGENCIAS_PROPIAS, $valores, $maestroTerminal);
         $request->param_da = array($paramDATerminal);
         $responseActualizarMaestro = self::actualizarConfMaestro($serviceLocator, $request, true);
         if (!is_null($responseActualizarMaestro->error)) {
             throw new Exception("No se pudo actualizar la configuracion del maestro terminal");
         }
         $conexion->commit();
         $ticketAperturaSiris = $responseApertura->tickets;
         $ticketFinal = ExpTicket::getTicketCajaNoCuadrada($serviceLocator, "APERTURA", $objRegistracion, $ticketAperturaSiris);
         $response->param_tickets = $ticketFinal;
         return $response;
     } catch (Exception $e) {
         $conexion->rollback();
         ExpLog::save($serviceLocator, $request->header->serieEquipo, Constants::LOG_ERROR, "", "registro Apertura Caja", $params, $e->getMessage(), $request->header->usuario);
         $error = new Error();
         $error->setMensaje("Error: no se pudo realizar la apertura de caja.");
         $response->error = $error;
         return $response;
     }
 }
Exemplo n.º 2
0
 /**
  * Abrir caja
  * @param \Siris\Models\ERequestHeader $requestHeader
  * @return \Siris\Models\EResponse
  */
 public function openTerminal($requestHeader)
 {
     HttpLogin::login();
     return ExpTerminal::openTerminal($this->serviceLocator, $requestHeader);
 }