Пример #1
0
 public function renumerar()
 {
     $ejercicio = new ejercicio();
     foreach ($ejercicio->all_abiertos() as $eje) {
         $posicion = 0;
         $numero = 1;
         $sql = '';
         $continuar = TRUE;
         $consulta = "SELECT idasiento,numero,fecha FROM " . $this->table_name . " WHERE codejercicio = '" . $eje->codejercicio . "'\n            ORDER BY codejercicio ASC, fecha ASC, idasiento ASC";
         $asientos = $this->db->select_limit($consulta, 1000, $posicion);
         while ($asientos and $continuar) {
             foreach ($asientos as $col) {
                 if ($col['numero'] != $numero) {
                     $sql .= "UPDATE " . $this->table_name . " SET numero = '" . $numero . "' WHERE idasiento = '" . $col['idasiento'] . "'; ";
                 }
                 $numero++;
             }
             $posicion += 1000;
             if ($sql != '') {
                 if (!$this->db->exec($sql)) {
                     $this->new_error_msg("Se ha producido un error mientras se\n                     renumeraban los asientos del ejercicio " . $eje->codejercicio);
                     $continuar = FALSE;
                 }
                 $sql = '';
             }
             $asientos = $this->db->select_limit($consulta, 1000, $posicion);
         }
     }
     return $continuar;
 }
 public function huecos()
 {
     $error = TRUE;
     $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error);
     if ($error) {
         $ejercicio = new ejercicio();
         foreach ($ejercicio->all_abiertos() as $eje) {
             $codserie = '';
             $num = intval(FS_NFACTURA_CLI);
             /// definido en el config2
             $numeros = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n               FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;");
             if ($numeros) {
                 foreach ($numeros as $n) {
                     if ($n['codserie'] != $codserie) {
                         $codserie = $n['codserie'];
                         $num = intval(FS_NFACTURA_CLI);
                         /// definido en el config2
                     }
                     if (intval($n['numero']) != $num) {
                         while ($num < intval($n['numero'])) {
                             $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($n['fecha'])), 'hora' => $n['hora']);
                             $num++;
                         }
                     }
                     $num++;
                 }
             }
         }
         $this->cache->set('factura_cliente_huecos', $huecolist, 3600);
     }
     return $huecolist;
 }
Пример #3
0
 /**
  * Devuelve un array con los huecos en la numeración.
  * @return type
  */
 public function huecos()
 {
     $error = TRUE;
     $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error);
     if ($error) {
         $ejercicio = new ejercicio();
         $serie = new serie();
         foreach ($ejercicio->all_abiertos() as $eje) {
             $codserie = '';
             $num = 1;
             $data = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n               FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;");
             if ($data) {
                 foreach ($data as $d) {
                     if ($d['codserie'] != $codserie) {
                         $codserie = $d['codserie'];
                         $num = 1;
                         $se = $serie->get($codserie);
                         if ($se) {
                             /// ¿Se ha definido un nº inicial de factura para esta serie y ejercicio?
                             if ($eje->codejercicio == $se->codejercicio) {
                                 $num = $se->numfactura;
                             }
                         }
                     }
                     if (intval($d['numero']) < $num) {
                         /**
                          * El número de la factura es menor que el inicial.
                          * El usuario ha cambiado el número inicial después de hacer
                          * facturas.
                          */
                     } else {
                         if (intval($d['numero']) == $num) {
                             /// el número es correcto, avanzamos
                             $num++;
                         } else {
                             /**
                              * Hemos encontrado un hueco y debemos usar el número y la fecha.
                              * La variable pasos permite dejar de añadir huecos al llegar a 100,
                              * así evitamos agotar la memoria en caso de error grave.
                              */
                             $pasos = 0;
                             while ($num < intval($d['numero']) and $pasos < 100) {
                                 $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($d['fecha'])), 'hora' => $d['hora']);
                                 $num++;
                                 $pasos++;
                             }
                             /// avanzamos uno más
                             $num++;
                         }
                     }
                 }
             }
         }
         $this->cache->set('factura_cliente_huecos', $huecolist, 3600);
     }
     return $huecolist;
 }
Пример #4
0
 public function huecos()
 {
     $error = TRUE;
     $huecolist = $this->cache->get_array2('factura_cliente_huecos', $error, TRUE);
     if ($error) {
         $ejercicio = new ejercicio();
         $serie = new serie();
         foreach ($ejercicio->all_abiertos() as $eje) {
             $codserie = '';
             $num = 1;
             $data = $this->db->select("SELECT codserie," . $this->db->sql_to_int('numero') . " as numero,fecha,hora\n               FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($eje->codejercicio) . " ORDER BY codserie ASC, numero ASC;");
             if ($data) {
                 foreach ($data as $d) {
                     if ($d['codserie'] != $codserie) {
                         $codserie = $d['codserie'];
                         $num = 1;
                         if (defined('FS_NFACTURA_CLI')) {
                             /// mantenemos compatibilidad con versiones anteriores
                             $num = intval(FS_NFACTURA_CLI);
                         }
                         $se = $serie->get($codserie);
                         if ($se) {
                             /// ¿Se ha definido un nº inicial de factura para esta serie y ejercicio?
                             if ($eje->codejercicio == $se->codejercicio) {
                                 $num = $se->numfactura;
                             }
                         }
                     }
                     if (intval($d['numero']) < $num) {
                         /**
                          * El número de la factura es menor que el inicial.
                          * El usuario ha cambiado el número inicial después de hacer
                          * facturas.
                          */
                     } else {
                         if (intval($d['numero']) == $num) {
                             /// el número es correcto, avanzamos
                             $num++;
                         } else {
                             /// Hemos encontrado un hueco y debemos usar el número y la fecha.
                             while ($num < intval($d['numero'])) {
                                 $huecolist[] = array('codigo' => $eje->codejercicio . sprintf('%02s', $codserie) . sprintf('%06s', $num), 'fecha' => Date('d-m-Y', strtotime($d['fecha'])), 'hora' => $d['hora']);
                                 $num++;
                             }
                             /// avanzamos uno más
                             $num++;
                         }
                     }
                 }
             }
         }
         $this->cache->set('factura_cliente_huecos', $huecolist, 3600, TRUE);
     }
     return $huecolist;
 }