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);
         }
     }
 }