/**
  * 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;
 }
 public function stats_series($tabla = 'facturasprov')
 {
     $stats = array();
     $serie0 = new serie();
     $sql = "select codserie,sum(totaleuros) as total from " . $tabla . " group by codserie order by total desc;";
     $data = $this->db->select($sql);
     if ($data) {
         foreach ($data as $d) {
             $serie = $serie0->get($d['codserie']);
             if ($serie) {
                 $stats[] = array('txt' => $serie->descripcion, 'total' => round(abs($this->euro_convert(floatval($d['total']))), FS_NF0));
             } else {
                 $stats[] = array('txt' => $d['codserie'], 'total' => round(abs($this->euro_convert(floatval($d['total']))), FS_NF0));
             }
         }
     }
     return $stats;
 }
 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;
 }
Example #4
0
 private function sync()
 {
     $continuar = TRUE;
     $art0 = new articulo();
     $ej0 = new ejercicio();
     $serie0 = new serie();
     $div0 = new divisa();
     foreach (array_reverse($this->pedidos) as $ped) {
         $data = $this->db->select("SELECT * FROM albaranescli WHERE numero2 = " . $art0->var2str($this->order_numero2($ped->order_number)) . ";");
         if (!$data and $continuar and $ped->status == 'completed') {
             $albaran = new albaran_cliente();
             $albaran->numero2 = $this->order_numero2($ped->order_number);
             $albaran->fecha = Date('d-m-Y', strtotime($ped->created_at));
             $albaran->hora = Date('H:i:s', strtotime($ped->created_at));
             $albaran->observaciones = 'Este pedido ha sido importado con la demo de woocommerce, por eso no se ha asignado el cliente.';
             $albaran->cifnif = '';
             $albaran->direccion = '';
             $ejercicio = $ej0->get_by_fecha($albaran->fecha);
             if ($ejercicio) {
                 $albaran->codejercicio = $ejercicio->codejercicio;
                 $serie = $serie0->get($this->setup['wooc_serie']);
                 if ($serie) {
                     $albaran->codserie = $serie->codserie;
                     $albaran->irpf = $serie->irpf;
                     $albaran->codalmacen = $this->setup['wooc_alm'];
                     $divisa = $div0->get($this->empresa->coddivisa);
                     if ($divisa) {
                         $albaran->coddivisa = $divisa->coddivisa;
                         $albaran->tasaconv = $divisa->tasaconv;
                     }
                     $albaran->codpago = $this->empresa->codpago;
                     if ($albaran->save()) {
                         foreach ($ped->line_items as $l) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->referencia = $l->sku;
                             $linea->descripcion = $l->name;
                             $linea->cantidad = $l->quantity;
                             $linea->irpf = $albaran->irpf;
                             $articulo = $art0->get($l->sku);
                             if ($articulo and !$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $linea->codimpuesto = $articulo->codimpuesto;
                                 $linea->iva = $articulo->get_iva();
                             }
                             $linea->pvpunitario = 100 * $l->total / $l->quantity / (100 + $linea->iva);
                             $linea->pvptotal = $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 /// descontamos del stock
                                 if ($articulo) {
                                     $articulo->sum_stock($albaran->codalmacen, 0 - $linea->cantidad);
                                 }
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia);
                                 $continuar = FALSE;
                             }
                         }
                         /// cupones
                         foreach ($ped->coupon_lines as $l) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->descripcion = 'Cupón: ' . $l->code;
                             $linea->cantidad = -1;
                             $linea->irpf = $albaran->irpf;
                             if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $impuesto = $this->impuesto->get($this->setup['wooc_imp']);
                                 if ($impuesto) {
                                     $linea->codimpuesto = $impuesto->codimpuesto;
                                     $linea->iva = $impuesto->iva;
                                 }
                             }
                             $linea->pvpunitario = 100 * floatval($l->amount) / (100 + $linea->iva);
                             $linea->pvptotal = $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                                 $albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                                 $albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la linea del cupón: " . $l->code);
                                 $continuar = FALSE;
                             }
                         }
                         if ($continuar) {
                             /// redondeamos
                             $albaran->neto = round($albaran->neto, FS_NF0);
                             $albaran->totaliva = round($albaran->totaliva, FS_NF0);
                             $albaran->totalirpf = round($albaran->totalirpf, FS_NF0);
                             $albaran->totalrecargo = round($albaran->totalrecargo, FS_NF0);
                             $albaran->total = $albaran->neto + $albaran->totaliva - $albaran->totalirpf + $albaran->totalrecargo;
                             if ($albaran->save()) {
                                 $this->new_message("<a href='" . $albaran->url() . "'>" . ucfirst(FS_ALBARAN) . "</a> guardado correctamente.");
                                 $this->new_change(ucfirst(FS_ALBARAN) . ' Cliente ' . $albaran->codigo, $albaran->url(), TRUE);
                             } else {
                                 $this->new_error_msg("¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                                 $continuar = FALSE;
                             }
                         } else {
                             if ($albaran->delete()) {
                                 $this->new_message(ucfirst(FS_ALBARAN) . " eliminado correctamente.");
                             } else {
                                 $this->new_error_msg("¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                                 $continuar = FALSE;
                             }
                         }
                     } else {
                         $this->new_error_msg('Error al guardar los datos del ' . FS_ALBARAN . ' ' . $ped->order_number);
                         $continuar = FALSE;
                     }
                 } else {
                     $this->new_error_msg('Imposible encontrar una serie para el ' . FS_ALBARAN . ' ' . $ped->order_number);
                     $continuar = FALSE;
                 }
             } else {
                 $this->new_error_msg('Imposible encontrar un ejercicio para el ' . FS_ALBARAN . ' ' . $ped->order_number);
                 $continuar = FALSE;
             }
             break;
         }
     }
     $this->new_advice('Esto es una demo. La versión completa importa todos los pedidos completados, incluyendo clientes y artículos. &nbsp; ' . '<a href="https://www.facturascripts.com/store/producto/plugin-woocommerce/" target="_blank">' . '<span class="glyphicon glyphicon-shopping-cart"></span> comprar la versión completa</a>');
 }
Example #5
0
 public function new_codigo()
 {
     $num = intval(FS_NFACTURA_CLI);
     /// definido en el config2
     // buscamos el número inicial para la serie
     $serie0 = new serie();
     if ($serie = $serie0->get($this->codserie)) {
         if ($this->codejercicio == $serie->codejercicio) {
             $num = $serie->numfactura;
         }
     }
     /// buscamos un hueco
     $encontrado = FALSE;
     $fecha = $this->fecha;
     $numeros = $this->db->select("SELECT " . $this->db->sql_to_int('numero') . " as numero,fecha\n         FROM " . $this->table_name . " WHERE codejercicio = " . $this->var2str($this->codejercicio) . " AND codserie = " . $this->var2str($this->codserie) . " ORDER BY numero ASC;");
     if ($numeros) {
         foreach ($numeros as $n) {
             if (intval($n['numero']) > $num) {
                 $encontrado = TRUE;
                 $fecha = Date('d-m-Y', strtotime($n['fecha']));
                 break;
             } else {
                 $num++;
             }
         }
     }
     if ($encontrado) {
         $this->numero = $num;
         $this->fecha = $fecha;
     } else {
         $this->numero = $num;
         /// nos guardamos la secuencia para abanq/eneboo
         $sec = new secuencia();
         $sec = $sec->get_by_params2($this->codejercicio, $this->codserie, 'nfacturacli');
         if ($sec) {
             if ($sec->valorout <= $this->numero) {
                 $sec->valorout = 1 + $this->numero;
                 $sec->save();
             }
         }
     }
     if (FS_NEW_CODIGO == 'eneboo') {
         $this->codigo = $this->codejercicio . sprintf('%02s', $this->codserie) . sprintf('%06s', $this->numero);
     } else {
         $this->codigo = 'FAC' . $this->codejercicio . $this->codserie . $this->numero;
     }
 }