/** * *Realiza un corte de caja. Este metodo reduce el dinero de la caja y va registrando el dinero acumulado de esa caja. Si faltase dinero se carga una deuda al cajero. La fecha sera tomada del servidor. El usuario sera tomado de la sesion. * * @param saldo_final float Saldo que se dejara en la caja para que continue realizando sus operaciones. * @param id_caja int Id de la caja a la que se le hace el corte * @param saldo_real float Saldo real encontrado en la caja * @param billetes_encontrados json Ids de billetes encontrados en la caja al hacer el corte * @param billetes_dejados json Ids de billetes dejados en la caja despues de hacer el corte * @param id_cajero int Id del cajero en caso de que no sea este el que realiza el corte * @param id_cajero_nuevo int Id del cajero que entrara despues de realizar el corte * @return id_corte_caja int Id generado por la insercion del nuevo corte **/ public static function CorteCaja($id_caja, $saldo_final, $saldo_real, $billetes_dejados = null, $billetes_encontrados = null, $id_cajero = null, $id_cajero_nuevo = null) { Logger::log("Realizando corte de caja"); //valida que la caja exista, que este abierta y que este activada $caja = CajaDAO::getByPK($id_caja); if (is_null($caja)) { Logger::error("La caja con id: " . $id_caja . " no existe"); throw new Exception("La caja con id: " . $id_caja . " no existe"); } if (!$caja->getActiva()) { Logger::error("La caja proporcionada no esta activa, no se le puede hacer un corte"); throw new Exception("La caja proporcionada no esta activa, no se le puede hacer un corte"); } if (!$caja->getAbierta()) { Logger::error("La caja proporcionada esta cerrada, no se pueden realizar movimientos a una caja cerrada"); throw new Exception("La caja proporcionada esta cerrada, no se pueden realizar movimientos a una caja cerrada"); } //se inicializa el registro de la tabla corte de caja $corte_de_caja = new CorteDeCaja(array("id_caja" => $id_caja, "id_cajero" => $id_cajero, "id_cajero_nuevo" => $id_cajero_nuevo, "fecha" => time(), "saldo_real" => $saldo_real, "saldo_esperado" => $caja->getSaldo(), "saldo_final" => $saldo_final)); DAO::transBegin(); try { //Se guarda el corte de caja y se modifica la caja, restandole los billetes encontrados y el saldo de la caja. CorteDeCajaDAO::save($corte_de_caja); CajasController::modificarCaja($id_caja, 0, $billetes_encontrados, $caja->getSaldo()); CajasController::modificarCaja($id_caja, 1, $billetes_dejados, $saldo_final); //Si se lleva control de billetes, se hac eun registro por cada tipo de billete encontrado. //Despues, se buscan los billetes que quedan en la caja entre los tipos de billetes encontrados, //si no se encuentran, se crea su registro. //Como los billetes ya han sido restados de la caja, los que queden con numeros positivos seran //aquellos que hagan falta, y los que queden en numeros negativos seran los que sobraran. if ($caja->getControlBilletes()) { $billete_corte_caja = new BilleteCorteCaja(array("id_corte_caja" => $corte_de_caja->getIdCorteDeCaja(), "cantidad_dejada" => 0, "cantidad_sobrante" => 0, "cantidad_faltante" => 0)); $billetes_encontrados = object_to_array($billetes_encontrados); foreach ($billetes_encontrados as $billete) { $billete_corte_caja->setIdBillete($billete["id_billete"]); $billete_corte_caja->setCantidadEncontrada($billete["cantidad"]); BilleteCorteCajaDAO::save($billete_corte_caja); } $billetes_caja = BilleteCajaDAO::search(new BilleteCaja(array("id_caja" => $id_caja))); foreach ($billetes_caja as $b_c) { $billete_corte_caja = BilleteCorteCajaDAO::getByPK($b_c->getIdBillete(), $corte_de_caja->getIdCorteDeCaja()); if (is_null($billete_corte_caja)) { $billete_corte_caja = new BilleteCorteCaja(array("id_billete" => $b_c->getIdBillete(), "id_corte_caja" => $corte_de_caja->getIdCorteDeCaja(), "cantidad_encontrada" => 0, "cantidad_dejada" => 0, "cantidad_sobrante" => 0, "cantidad_faltante" => 0)); } if ($b_c->getCantidad() < 0) { $billete_corte_caja->setCantidadSobrante($b_c->getCantidad()); } else { if ($b_c->getCantidad() > 0) { $billete_corte_caja->setCantidadFaltante($b_c->getCantidad() * -1); } else { continue; } } $b_c->setCantidad(0); BilleteCajaDAO::save($b_c); BilleteCorteCajaDAO::save($billete_corte_caja); } /* Fin del foreach */ //Si los billetes dejados despues del corte no son obtenidos y el saldo de la caja //no es cero, se arroja una excepcion. if (is_null($billetes_dejados) && $saldo_final != 0) { throw new Exception("No se encontro el parametro billetes_dejados cuando se esta llevando control de los billetes en esta caja y su saldo no quedara en 0"); } $billetes_dejados = object_to_array($billetes_dejados); //Por cada billete dejado se busca su registro en la tabla billete_corte_caja, si no existe se crea, //si existe, se actualiza su parametro cantidad_dejada foreach ($billetes_dejados as $b_d) { $billete_corte_caja = BilleteCorteCajaDAO::getByPK($b_d["id_billete"], $corte_de_caja->getIdCorteDeCaja()); if (is_null($billete_corte_caja)) { $billete_corte_caja = new BilleteCorteCaja(array("id_billete" => $b_d["id_billete"], "id_corte_caja" => $corte_de_caja->getIdCorteDeCaja(), "cantidad_encontrada" => 0, "cantidad_dejada" => 0, "cantidad_sobrante" => 0, "cantidad_faltante" => 0)); } $billete_corte_caja->setCantidadDejada($b_d["cantidad"]); BilleteCorteCajaDAO::save($billete_corte_caja); } } /* Fin if control billetes*/ } catch (Exception $e) { DAO::transRollback(); Logger::error("No se pudo realizar el corte de caja: " . $e); throw new Exception("No se pudo realizar el corte de caja"); } DAO::transEnd(); Logger::log("Corte de caja realizado correctamente"); return array("id_corte_caja" => $corte_de_caja->getIdCorteDeCaja()); }
$form->createComboBoxJoin("control_billetes", "control_billetes", array(array("id" => 0, "caption" => "No"), array("id" => 1, "caption" => "Si")), $esta_caja->getControlBilletes()); $form->createComboBoxJoin("abierta", "abierta", array(array("id" => 0, "caption" => "No"), array("id" => 1, "caption" => "Si")), $esta_caja->getAbierta()); $page->addComponent($form); if ($esta_caja->getControlBilletes()) { $page->addComponent(new TitleComponent("Billetes en esta caja", 3)); $tabla = new TableComponent(array("id_billete" => "Billete", "cantidad" => "Cantidad"), BilleteCajaDAO::search(new BilleteCaja(array("id_caja" => $_GET["cid"])))); function funcion_billete($id_billete) { return BilleteDAO::getByPK($id_billete) ? BilleteDAO::getByPK($id_billete)->getNombre() : "------"; } $tabla->addColRender("id_billete", "funcion_billete"); $tabla->addOnClick("id_billete", "(function(a){window.location = 'efectivo.billete.ver.php?bid='+a;})"); $page->addComponent($tabla); } $page->addComponent(new TitleComponent("Aperturas")); $tabla = new TableComponent(array("fecha" => "Fecha", "saldo" => "Saldo", "id_cajero" => "Cajero"), AperturaCajaDAO::search(new AperturaCaja(array("id_caja" => $_GET["cid"])))); function funcion_cajero($id_cajero) { return UsuarioDAO::getByPK($id_cajero) ? UsuarioDAO::getByPK($id_cajero)->getNombre() : "------"; } $tabla->addColRender("id_cajero", "funcion_cajero"); $page->addComponent($tabla); $page->addComponent(new TitleComponent("Cortes")); $tabla = new TableComponent(array("fecha" => "Fecha", "saldo_real" => "Saldo Encontrado", "saldo_esperado" => "Saldo Esperado", "saldo_final" => "Saldo Final", "id_cajero" => "Cajero"), CorteDeCajaDAO::search(new CorteDeCaja(array("id_caja" => $_GET["cid"])))); $tabla->addColRender("id_cajero", "funcion_cajero"); $page->addComponent($tabla); $page->addComponent(new TitleComponent("Cierres")); $tabla = new TableComponent(array("fecha" => "Fecha", "saldo_real" => "Saldo Encontrado", "saldo_esperado" => "Saldo Esperado", "id_cajero" => "Cajero"), CierreCajaDAO::search(new CierreCaja(array("id_caja" => $_GET["cid"])))); $tabla->addColRender("id_cajero", "funcion_cajero"); $page->addComponent($tabla); $page->render();
private static function UltimoCorteCaja(VO $caja) { $c = CorteDeCajaDAO::search(new CorteDeCaja(array("id_caja" => $caja->getIdCaja()))); return sizeof($c) == 0 ? NULL : $c[0]; }