/**
  *
  *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());
 }
Example #2
0
$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();
Example #3
0
 private static function UltimoCorteCaja(VO $caja)
 {
     $c = CorteDeCajaDAO::search(new CorteDeCaja(array("id_caja" => $caja->getIdCaja())));
     return sizeof($c) == 0 ? NULL : $c[0];
 }