/** * 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; } }
/** * Abrir caja * @param \Siris\Models\ERequestHeader $requestHeader * @return \Siris\Models\EResponse */ public function openTerminal($requestHeader) { HttpLogin::login(); return ExpTerminal::openTerminal($this->serviceLocator, $requestHeader); }