예제 #1
0
 /**
  *
  *Valida si una maquina que realizara peticiones al servidor pertenece a una sucursal.
  *
  * @param billetes json Ids de billetes y sus cantidades con los que inicia esta caja
  * @param saldo float Saldo con el que empieza a funcionar la caja
  * @param client_token string El token generado por el POS client
  * @param control_billetes bool Si se quiere llevar el control de billetes en la caja
  * @param id_cajero int Id del cajero que iniciara en esta caja en caso de que no sea este el que abre la caja
  * @return detalles_sucursal json Si esta es una sucursal valida, detalles sucursal contiene un objeto con informacion sobre esta sucursal.
  **/
 public static function AbrirCaja($client_token, $control_billetes, $id_caja, $saldo, $billetes = null, $id_cajero = null)
 {
     Logger::log("Abriendo caja");
     //Se validan los parametros obtenidos
     $validar = self::validarParametrosCaja($id_caja, null, $client_token, null, null, $saldo, $control_billetes);
     if (is_string($validar)) {
         Logger::error($validar);
         throw new Exception($validar, 901);
     }
     $caja = CajaDAO::getByPK($id_caja);
     //verifica que la caja este activa
     if (!$caja->getActiva()) {
         Logger::error("La caja no esta activa y no puede ser abierta");
         throw new Exception("La caja no esta activa y no puede ser abierta", 901);
     }
     //verifica que la caja no este abierta
     if ($caja->getAbierta()) {
         Logger::warn("La caja ya ha sido abierta");
         throw new Exception("La caja ya ha sido abierta", 901);
     }
     //verifica que el id cajero exista en la base de datos
     if (!is_null($id_cajero)) {
         $cajero = UsuarioDAO::getByPK($id_cajero);
         if (is_null($cajero)) {
             Logger::error("El cajero con id " . $id_cajero . " no existe");
             throw new Excetion("El cajero no existe", 901);
         }
         if ($cajero->getIdRol() != 3) {
             Logger::error("El usuario obtenido como cajero no es un cajero, no tiene rol 3");
             throw new Exception("El usuario obtenido como cajero no es un cajero", 901);
         }
     }
     //Se declara la apertura de la caja
     $apertura_caja = new AperturaCaja();
     $apertura_caja->setIdCaja($id_caja);
     $apertura_caja->setFecha(time());
     $apertura_caja->setIdCajero($id_cajero);
     $apertura_caja->setSaldo($saldo);
     $caja->setAbierta(1);
     $caja->setSaldo($saldo);
     $caja->setControlBilletes($control_billetes);
     DAO::transBegin();
     try {
         //Inserta los billetes en la caja y guarda los cambios en apetura caja y caja
         //El acto de abrir una caja da por hecho que no tiene ningun billete, pues al cerrar la caja se vaciaron.
         CajaDAO::save($caja);
         CajasController::modificarCaja($id_caja, 1, $billetes, 0);
         AperturaCajaDAO::save($apertura_caja);
         if ($control_billetes) {
             $billete_apertura_caja = new BilleteAperturaCaja(array("id_apertura_caja" => $apertura_caja->getIdAperturaCaja()));
             $billetes = object_to_array($billetes);
             foreach ($billetes as $billete) {
                 $billete_apertura_caja->setIdBillete($billete["id_billete"]);
                 $billete_apertura_caja->setCantidad($billete["cantidad"]);
                 BilleteAperturaCajaDAO::save($billete_apertura_caja);
             }
         }
     } catch (Exception $e) {
         DAO::transRollback();
         Logger::error("No se pudo abrir la caja: " . $e, 901);
         if ($e->getCode() == 901) {
             throw new Exception("No se pudo abrir la caja: " . $e->getMessage(), 901);
         }
         throw new Exception("No se pudo abrir la caja", 901);
     }
     DAO::transEnd();
     Logger::log("Caja abierta exitosamente");
     return array("detalles_sucursal" => $apertura_caja->getIdAperturaCaja());
 }