public function indexAction() { if (!$this->idcaja) { $this->new_error_msg("Caja incorrecta"); } $this->caja = caja::get($this->idcaja); if ($this->caja) { $this->recibos = $this->caja->findRecibos(); } else { $this->recibos = array(); } }
/** * @param asiento $asiento * @param divisa $divisa * @param fs_controller $controller * * @return bool Status de la importacion de las cajas */ public static function importar_caja(asiento $asiento, divisa $divisa, fs_controller $controller) { $art = new articulo(); $continuar = true; /** @var caja[] $cajas_importadas */ $cajas_importadas = array(); foreach ($_POST['cajas'] as $idcaja) { $caja = caja::get($idcaja); // Lo primero que tiene que haber en el asiento es una linea con el monto de la caja importada // Cuando importe muchas, lo que va a haber es una sola linea con el total de cajas contabilidad_asiento::add_partida($asiento, $divisa, '110101001', array('debe' => $caja->dinero_fin, 'haber' => 0, 'comprobante' => '<a hreh="' . $caja->url() . '">Caja #' . $caja->id . '</a>,')); foreach ($caja->get_recibos() as $recibo) { $factura = $recibo->getFactura(); // Obtengo las lineas de la factura $lineas = $factura->get_lineas(); // Después de acuerdo a la forma de pago del recibo tengo que agregar el pago a cada una de las cuentas switch ($recibo->codpago) { case 'CONT': // TODO: Cuando es de contado, a que cuenta va? break; case 'DBT MACRO': contabilidad_asiento::add_partida($asiento, $divisa, '110103001', array('debe' => 0, 'haber' => $recibo->importe, 'comprobante' => '')); break; case 'DBT S. RIO': case 'CTA CTE': contabilidad_asiento::add_partida($asiento, $divisa, '110103006', array('debe' => 0, 'haber' => $recibo->importe, 'comprobante' => '')); break; case 'TRF': case 'CHQ': case 'DEP': contabilidad_asiento::add_partida($asiento, $divisa, '110103003', array('debe' => 0, 'haber' => $recibo->importe, 'comprobante' => '')); break; case 'TC': case 'TD': contabilidad_asiento::add_partida($asiento, $divisa, '1102010000', array('debe' => 0, 'haber' => $recibo->importe, 'comprobante' => '')); break; default: $controller->new_error_msg("La forma de pago no está configurada para ser importada!"); break; } // Después de eso viene la parte "compleja": // Si la factura del recibo está pagada if ($factura->pagada) { // El monto total de la factura es igual al del recibo? if ($recibo->importe === $factura->total) { // tomamos todos los articulos y los importamos de acuerdo a la subcuenta de venta // que está declarada en cada articulo (este es el caso "normal", como por ejemplo // el de las COMIDAS_PERSONAL foreach ($lineas as $linea) { $articulo = $art->get($linea->referencia); // Si no hay articulo tengo un grave problema if ($articulo && $articulo->codsubcuentaven) { contabilidad_asiento::add_partida($asiento, $divisa, $articulo->codsubcuentaven, array('debe' => 0, 'haber' => $linea->pvptotal, 'comprobante' => '')); } else { $controller->new_error_msg('La factura: <a href="' . $factura->url() . '">#' . $factura->numero . '</a> tiene un un artículo inexistente: ' . $linea->referencia . 'o el artículo no tiene configurada la cuenta a la que deve ser cargada'); } } } else { // Si la factura está paga pero los totales difieren // Eso quiere decir que los pagos están dispersos entre varias cajas, por lo que tengo que // importar solamente el monto del recibo // si el artículo que tiene soalemente es una reserva if (count($lineas) === 1 && $lineas[0]->referencia === 'Reserva') { // se agrega la partida a la subcuenta 210101003 contabilidad_asiento::add_partida($asiento, $divisa, '210101003', array('debe' => 0, 'haber' => $recibo->importe, 'comprobante' => '')); contabilidad_asiento::add_partida($asiento, $divisa, '410101001', array('debe' => 0, 'haber' => $factura->total, 'comprobante' => '')); } else { // No se que hacer en estos casos $controller->new_error_msg('La factura <a href="' . $factura->url() . '">#' . $factura->numero . '</a> está paga pero el importe está distribuido y contiene otros articulos que no' . ', por lo que no puede ser importada en un asiento contable por favor ignore la caja #' . $caja->id); $continuar = false; } } } else { // Si la factura no está paga y el artículo es una reserva // entonces los recibos van a la subcuenta 210101003 if (count($lineas) === 1 && $lineas[0]->referencia === 'Reserva') { contabilidad_asiento::add_partida($asiento, $divisa, '210101003', array('debe' => 0, 'haber' => $recibo->importe, 'comprobante' => '')); } else { //No se que hacer en estos casos $controller->new_error_msg('La factura <a href="' . $factura->url() . '">#' . $factura->numero . '</a> no está paga y contiene otros articulos que no son una reserva, por lo que no ' . ' puede ser importada en un asiento contable por favor ignore la caja #' . $caja->id); $continuar = false; } } } if ($continuar) { $cajas_importadas[] = $caja; } } // Si todas las cajas fueron importadas correctamente if ($continuar) { // Guardo las partidas asociadas al asiento en la BBDD foreach (contabilidad_asiento::$partidas as $subcuenta => $partida) { // Creamos una nueva partida $part = new partida(); // Cargamos los valores en la partida foreach ($partida as $name => $value) { if (property_exists($part, $name)) { $part->{$name} = $value; } } $part->referencia = 'Caja importada el ' . date('Y-m-d H:i:s') . ' por ' . $controller->user->get_agente()->get_fullname(); // Al guardar la partida se actualiza automáticamente los valores de la subcuenta // Y el monto del asiento if ($part->save()) { $continuar = $continuar && true; } else { $continuar = false; } } if ($continuar) { foreach ($cajas_importadas as $caja) { $caja->setIdAsiento($asiento->idasiento); if (!$caja->save()) { $controller->new_error_msg("Error al actualizar la caja #" . $caja->id); $continuar = $continuar && true; } else { $continuar = false; } } if ($continuar) { $controller->new_message('Cajas importada correctamente'); } else { $controller->new_error_msg('Hubo algún error al vincular el asiento con las cajas'); } } else { // Creo que acá tendría que hacer rollback de toda la transacción $controller->new_error_msg("Error al guardar una partida al asiento"); } } else { $controller->new_error_msg("Error al importar cajas"); } return $continuar; }
public function cerrarCajaAction() { if ($this->user->admin) { $caja2 = caja::get($_GET['cerrar']); if ($caja2 && !$caja2->fecha_fin) { $caja2->setEdit(); $caja2->fecha_fin = date('d-m-Y H:i:s'); if ($caja2->save()) { $this->new_message("Caja cerrada correctamente."); $this->indexAction(); } else { $this->new_error_msg("¡Imposible cerrar la caja!"); } } else { $this->new_error_msg("Caja no encontrada o caja ya cerrada."); } } else { $this->new_error_msg("Tienes que ser administrador para poder cerrar cajas."); } $this->indexAction(); }
private function importar_cajas($eje0, $div0) { foreach ($_POST['cajas'] as $idcaja) { $caja = caja::get($idcaja); $pagos = $caja->findRecibos(); foreach ($pagos as $pago) { var_dump($pago); } $caja->setIdAsiento($this->asiento->idasiento); if ($caja->save() && $this->asiento->save()) { $this->new_message('<a href="">Caja #' . $idcaja . '</a> importada correctamente'); } else { $this->new_error_msg('Error al importar la caja #' . $idcaja); } } }