protected function process()
 {
     $this->show_fs_toolbar = FALSE;
     $fsvar = new fs_var();
     $cron_vars = $fsvar->array_get(array('cron_exists' => FALSE, 'cron_lock' => FALSE, 'cron_error' => FALSE));
     if (isset($_GET['fix'])) {
         $cron_vars['cron_error'] = FALSE;
         $cron_vars['cron_lock'] = FALSE;
         $fsvar->array_save($cron_vars);
     }
     if (!$cron_vars['cron_exists']) {
         $this->new_advice('Nunca se ha ejecutado el cron, te perderás algunas características interesantes de FacturaScripts.');
     } else {
         if ($cron_vars['cron_error']) {
             $this->new_error_msg('Parece que ha habido un error con el cron. Haz clic <a href="' . $this->url() . '&fix=TRUE">aquí</a> para corregirlo.');
         } else {
             if ($cron_vars['cron_lock']) {
                 $this->new_advice('Se está ejecutando el cron.');
             }
         }
     }
     if (isset($_GET['clean_cache'])) {
         /// borramos los archivos php del directorio tmp
         foreach (scandir(getcwd() . '/tmp') as $f) {
             if (substr($f, -4) == '.php') {
                 unlink('tmp/' . $f);
             }
         }
         if ($this->cache->clean()) {
             $this->new_message("Cache limpiada correctamente.");
         }
     }
     if (FS_LCD != '') {
         $fpt = new fs_printer(FS_LCD);
         $fpt->add(chr(12) . $fpt->center_text('The cake is', 20));
         $fpt->add($fpt->center_text('a lie!', 20));
         $fpt->imprimir();
     }
 }
 private function imprimir_ticket($albaran, $num_tickets = 1, $cajon = TRUE)
 {
     $fpt = new fs_printer();
     if ($cajon) {
         $fpt->abrir_cajon();
     }
     while ($num_tickets > 0) {
         $linea = "\nTicket: " . $albaran->codigo;
         $linea .= " " . $albaran->fecha;
         $linea .= " " . $albaran->show_hora(FALSE) . "\n";
         $fpt->add($linea);
         $fpt->add("Cliente: " . $albaran->nombrecliente . "\n");
         $fpt->add("Empleado: " . $albaran->codagente . "\n\n");
         if ($this->imprimir_observaciones) {
             $fpt->add('Observaciones: ' . $albaran->observaciones . "\n\n");
         }
         $fpt->add(sprintf("%3s", "Ud.") . " " . sprintf("%-25s", "Articulo") . " " . sprintf("%10s", "TOTAL") . "\n");
         $fpt->add(sprintf("%3s", "---") . " " . sprintf("%-25s", "-------------------------") . " " . sprintf("%10s", "----------") . "\n");
         foreach ($albaran->get_lineas() as $col) {
             if ($this->imprimir_descripciones) {
                 $linea = sprintf("%3s", $col->cantidad) . " " . sprintf("%-25s", substr($col->descripcion, 0, 24)) . " " . sprintf("%10s", $this->show_numero($col->total_iva())) . "\n";
             } else {
                 $linea = sprintf("%3s", $col->cantidad) . " " . sprintf("%-25s", $col->referencia) . " " . sprintf("%10s", $this->show_numero($col->total_iva())) . "\n";
             }
             $fpt->add($linea);
         }
         $linea = "----------------------------------------\n" . $fpt->center_text("IVA: " . $this->show_precio($albaran->totaliva, $albaran->coddivisa, FALSE) . '   ' . "Total: " . $this->show_precio($albaran->total, $albaran->coddivisa, FALSE)) . "\n\n\n\n";
         $fpt->add($linea);
         $fpt->add_big($fpt->center_text($this->empresa->nombre, 16) . "\n");
         if ($this->empresa->lema != '') {
             $fpt->add($fpt->center_text($this->empresa->lema) . "\n\n");
         } else {
             $fpt->add("\n");
         }
         $fpt->add($fpt->center_text($this->empresa->direccion . " - " . $this->empresa->ciudad) . "\n");
         $fpt->add($fpt->center_text("CIF: " . $this->empresa->cifnif) . chr(27) . chr(105) . "\n\n");
         /// corta el papel
         if ($this->empresa->horario != '') {
             $fpt->add($fpt->center_text($this->empresa->horario) . "\n");
         }
         $fpt->imprimir();
         $num_tickets--;
     }
 }
 private function imprimir_ticket($num_tickets = 2)
 {
     $fpt = new fs_printer();
     $fpt->abrir_cajon();
     while ($num_tickets > 0) {
         $linea = "\nTicket: " . $this->albaran->codigo;
         $linea .= " " . $this->albaran->fecha;
         $linea .= " " . $this->albaran->show_hora(FALSE) . "\n";
         $fpt->add($linea);
         $fpt->add("Cliente: " . $this->albaran->nombrecliente . "\n");
         $fpt->add("Agente: " . $this->albaran->codagente . "\n\n");
         $fpt->add(sprintf("%3s", "Ud.") . " " . sprintf("%-25s", "Articulo") . " " . sprintf("%10s", "TOTAL") . "\n");
         $fpt->add(sprintf("%3s", "---") . " " . sprintf("%-25s", "-------------------------") . " " . sprintf("%10s", "----------") . "\n");
         foreach ($this->albaran->get_lineas() as $col) {
             $linea = sprintf("%3s", $col->cantidad) . " " . sprintf("%-25s", $col->referencia) . " " . sprintf("%10s", $this->show_numero($col->total_iva())) . "\n";
             $fpt->add($linea);
         }
         $linea = "----------------------------------------\n" . $fpt->center_text("IVA: " . $this->show_precio($this->albaran->totaliva, $this->albaran->coddivisa, FALSE) . "   " . "Total: " . $this->show_precio($this->albaran->total, $this->albaran->coddivisa, FALSE)) . "\n\n";
         if (isset($_POST['efectivo'])) {
             $linea .= $fpt->center_text("Efectivo..........: " . sprintf("%12s", $this->show_precio($_POST['efectivo'], $this->albaran->coddivisa, FALSE))) . "\n";
         }
         if (isset($_POST['cambio'])) {
             $linea .= $fpt->center_text("Cambio............: " . sprintf("%12s", $this->show_precio($_POST['cambio'], $this->albaran->coddivisa, FALSE))) . "\n";
         }
         $linea .= "\n\n\n";
         $fpt->add($linea);
         $fpt->add_big($fpt->center_text($this->empresa->nombre, 16) . "\n");
         $fpt->add($fpt->center_text($this->empresa->lema) . "\n\n");
         $fpt->add($fpt->center_text($this->empresa->direccion . " - " . $this->empresa->ciudad) . "\n");
         $fpt->add($fpt->center_text("CIF: " . $this->empresa->cifnif) . chr(27) . chr(105) . "\n\n");
         /// corta el papel
         $fpt->add($fpt->center_text($this->empresa->horario) . "\n");
         $fpt->imprimir();
         $num_tickets--;
     }
 }
 private function cerrar_caja()
 {
     $this->caja->fecha_fin = Date('d-m-Y H:i:s');
     if ($this->caja->save()) {
         $fpt = new fs_printer();
         $fpt->add_big("\nCIERRE DE CAJA:\n");
         $fpt->add("Empleado: " . $this->user->codagente . " " . $this->agente->get_fullname() . "\n");
         $fpt->add("Caja: " . $this->caja->fs_id . "\n");
         $fpt->add("Fecha inicial: " . $this->caja->fecha_inicial . "\n");
         $fpt->add("Dinero inicial: " . $this->show_precio($this->caja->dinero_inicial, FALSE, FALSE) . "\n");
         $fpt->add("Fecha fin: " . $this->caja->show_fecha_fin() . "\n");
         $fpt->add("Dinero fin: " . $this->show_precio($this->caja->dinero_fin, FALSE, FALSE) . "\n");
         $fpt->add("Diferencia: " . $this->show_precio($this->caja->diferencia(), FALSE, FALSE) . "\n");
         $fpt->add("Tickets: " . $this->caja->tickets . "\n\n");
         $fpt->add("Dinero pesado:\n\n\n");
         $fpt->add("Observaciones:\n\n\n\n");
         $fpt->add("Firma:\n\n\n\n\n\n\n");
         /// encabezado común para los tickets
         $fpt->add_big($fpt->center_text($this->empresa->nombre, 16) . "\n");
         $fpt->add($fpt->center_text($this->empresa->lema) . "\n\n");
         $fpt->add($fpt->center_text($this->empresa->direccion . " - " . $this->empresa->ciudad) . "\n");
         $fpt->add($fpt->center_text("CIF: " . $this->empresa->cifnif) . chr(27) . chr(105) . "\n\n");
         /// corta el papel
         $fpt->add($fpt->center_text($this->empresa->horario) . "\n");
         $fpt->imprimir();
         $fpt->abrir_cajon();
         /// recargamos la página
         header('location: ' . $this->url());
     } else {
         $this->new_error_msg("¡Imposible cerrar la caja!");
     }
 }
 private function borrar_ticket()
 {
     $albaran = new albaran_cliente();
     $alb = $albaran->get_by_codigo($_GET['delete']);
     if ($alb) {
         if ($alb->ptefactura) {
             /// imprimimos
             $fpt = new fs_printer();
             $fpt->add(chr(27) . chr(64));
             $fpt->add("----------------------------------------\n");
             $fpt->add($fpt->center_text('*** TICKET BORRADO ***', 42) . "\n");
             $fpt->add("----------------------------------------\n");
             $fpt->imprimir();
             unset($fpt);
             $this->imprimir_ticket($alb);
             /// actualizamos el stock
             $articulo = new articulo();
             foreach ($alb->get_lineas() as $linea) {
                 $art0 = $articulo->get($linea->referencia);
                 if ($art0) {
                     $art0->sum_stock($alb->codalmacen, $linea->cantidad);
                     $art0->save();
                 }
             }
             if ($alb->delete()) {
                 $this->new_message("Ticket " . $_GET['delete'] . " borrado correctamente.");
                 /// actualizamos la caja
                 $this->caja->dinero_fin -= $alb->total;
                 $this->caja->tickets -= 1;
                 if (!$this->caja->save()) {
                     $this->new_error_msg("¡Imposible actualizar la caja!");
                 }
             } else {
                 $this->new_error_msg("¡Imposible borrar el ticket " . $_GET['delete'] . "!");
             }
         } else {
             $this->new_error_msg('No se ha podido borrar este ' . FS_ALBARAN . ' porque ya está facturado.');
         }
     } else {
         $this->new_error_msg("Ticket no encontrado.");
     }
 }