protected function private_core()
 {
     $this->desde = Date('01-m-Y');
     if (isset($_POST['desde'])) {
         $this->desde = $_POST['desde'];
     }
     $this->hasta = Date('d-m-Y');
     if (isset($_POST['hasta'])) {
         $this->hasta = $_POST['hasta'];
     }
     $this->cliente = FALSE;
     $this->codcliente = FALSE;
     if (!isset($_POST['todos']) and isset($_POST['codcliente'])) {
         $this->codcliente = $_POST['codcliente'];
         $cli0 = new cliente();
         $this->cliente = $cli0->get($this->codcliente);
     }
     $this->serie = new serie();
     $this->codserie = FALSE;
     if (isset($_POST['codserie'])) {
         $this->codserie = $_POST['codserie'];
     }
     if (isset($_REQUEST['buscar_cliente'])) {
         $this->buscar_cliente();
     } else {
         if (in_array('tesoreria', $GLOBALS['plugins'])) {
             $this->new_error_msg('Si usas el <b>plugin Tesorería</b> no puedes usar este' . ' asistente para pagar todas las facturas.');
         } else {
             if (isset($_POST['idfactura'])) {
                 /// ¿Marcamos ya las facturas?
                 $num = 0;
                 $asi0 = new asiento();
                 $asifac = new asiento_factura();
                 $fact0 = new factura_cliente();
                 foreach ($_POST['idfactura'] as $id) {
                     $factura = $fact0->get($id);
                     if ($factura) {
                         $asiento = $asi0->get($factura->idasiento);
                         if ($asiento) {
                             $factura->idasientop = $asifac->generar_asiento_pago($asiento, $factura->codpago);
                             if ($factura->idasientop) {
                                 $factura->pagada = TRUE;
                                 if ($factura->save()) {
                                     $num++;
                                 }
                             }
                         } else {
                             $factura->pagada = TRUE;
                             if ($factura->save()) {
                                 $num++;
                             }
                         }
                     }
                 }
                 foreach ($asifac->errors as $err) {
                     $this->new_error_msg($err);
                 }
                 $this->new_message($num . ' facturas marcadas como pagadas, estas son las siguientes.');
             } else {
                 $this->share_extensions();
             }
         }
     }
     $this->resultados = FALSE;
     if (isset($_POST['desde'])) {
         $this->resultados = $this->buscar_facturas();
     }
 }
 private function pagar($pagada = TRUE)
 {
     /// ¿Hay asiento?
     if (is_null($this->factura->idasiento)) {
         $this->factura->pagada = $pagada;
         $this->factura->save();
     } else {
         if (!$pagada and $this->factura->pagada) {
             /// marcar como impagada
             $this->factura->pagada = FALSE;
             /// ¿Eliminamos el asiento de pago?
             $as1 = new asiento();
             $asiento = $as1->get($this->factura->idasientop);
             if ($asiento) {
                 $asiento->delete();
                 $this->new_message('Asiento de pago eliminado.');
             }
             $this->factura->idasientop = NULL;
             if ($this->factura->save()) {
                 $this->new_message('Factura marcada como impagada.');
             } else {
                 $this->new_error_msg('Error al modificar la factura.');
             }
         } else {
             if ($pagada and !$this->factura->pagada) {
                 /// marcar como pagada
                 $asiento = $this->factura->get_asiento();
                 if ($asiento) {
                     /// nos aseguramos que el cliente tenga subcuenta en el ejercicio actual
                     $subcli = FALSE;
                     $eje = $this->ejercicio->get_by_fecha($this->today());
                     if ($eje) {
                         $subcli = $this->cliente->get_subcuenta($eje->codejercicio);
                     }
                     $asiento_factura = new asiento_factura();
                     $this->factura->idasientop = $asiento_factura->generar_asiento_pago($asiento, $this->factura->codpago, $this->today(), $subcli);
                     if ($this->factura->idasientop) {
                         $this->factura->pagada = TRUE;
                         if ($this->factura->save()) {
                             $this->new_message('<a href="' . $this->factura->asiento_pago_url() . '">Asiento de pago</a> generado.');
                         } else {
                             $this->new_error_msg('Error al marcar la factura como pagada.');
                         }
                     }
                     foreach ($asiento_factura->errors as $err) {
                         $this->new_error_msg($err);
                     }
                 } else {
                     $this->new_error_msg('No se ha encontrado el asiento de la factura.');
                 }
             }
         }
     }
 }