public function __construct($l = FALSE)
 {
     parent::__construct('lineasalbaranescli');
     if (!isset(self::$albaranes)) {
         self::$albaranes = array();
     }
     if ($l) {
         $this->idlinea = $this->intval($l['idlinea']);
         $this->idalbaran = $this->intval($l['idalbaran']);
         $this->referencia = $l['referencia'];
         $this->descripcion = $l['descripcion'];
         $this->cantidad = floatval($l['cantidad']);
         $this->dtopor = floatval($l['dtopor']);
         $this->dtolineal = floatval($l['dtolineal']);
         $this->codimpuesto = $l['codimpuesto'];
         $this->iva = floatval($l['iva']);
         $this->pvptotal = floatval($l['pvptotal']);
         $this->pvpsindto = floatval($l['pvpsindto']);
         $this->pvpunitario = floatval($l['pvpunitario']);
         $this->irpf = floatval($l['irpf']);
         $this->recargo = floatval($l['recargo']);
     } else {
         $this->idlinea = NULL;
         $this->idalbaran = NULL;
         $this->referencia = '';
         $this->descripcion = '';
         $this->cantidad = 0;
         $this->dtopor = 0;
         $this->dtolineal = 0;
         $this->codimpuesto = NULL;
         $this->iva = 0;
         $this->pvptotal = 0;
         $this->pvpsindto = 0;
         $this->pvpunitario = 0;
         $this->irpf = 0;
         $this->recargo = 0;
     }
 }
 private function nuevo_albaran_cliente()
 {
     $continuar = TRUE;
     $cliente = $this->cliente->get($_POST['cliente']);
     if (!$cliente) {
         $this->new_error_msg('Cliente no encontrado.');
         $continuar = FALSE;
     }
     $almacen = $this->almacen->get($_POST['almacen']);
     if ($almacen) {
         $this->save_codalmacen($_POST['almacen']);
     } else {
         $this->new_error_msg('Almacén no encontrado.');
         $continuar = FALSE;
     }
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($_POST['fecha']);
     if (!$ejercicio) {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $serie = $this->serie->get($_POST['serie']);
     if (!$serie) {
         $this->new_error_msg('Serie no encontrada.');
         $continuar = FALSE;
     }
     $forma_pago = $this->forma_pago->get($_POST['forma_pago']);
     if ($forma_pago) {
         $this->save_codpago($_POST['forma_pago']);
     } else {
         $this->new_error_msg('Forma de pago no encontrada.');
         $continuar = FALSE;
     }
     $divisa = $this->divisa->get($_POST['divisa']);
     if (!$divisa) {
         $this->new_error_msg('Divisa no encontrada.');
         $continuar = FALSE;
     }
     $albaran = new albaran_cliente();
     if ($this->duplicated_petition($_POST['petition_id'])) {
         $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón guardar
            y se han enviado dos peticiones. Mira en <a href="' . $albaran->url() . '">' . FS_ALBARANES . '</a>
            para ver si el ' . FS_ALBARAN . ' se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if ($continuar) {
         $albaran->fecha = $_POST['fecha'];
         $albaran->hora = $_POST['hora'];
         $albaran->codalmacen = $almacen->codalmacen;
         $albaran->codejercicio = $ejercicio->codejercicio;
         $albaran->codserie = $serie->codserie;
         $albaran->codpago = $forma_pago->codpago;
         $albaran->coddivisa = $divisa->coddivisa;
         $albaran->tasaconv = $divisa->tasaconv;
         if ($_POST['tasaconv'] != '') {
             $albaran->tasaconv = floatval($_POST['tasaconv']);
         }
         $albaran->codagente = $this->agente->codagente;
         $albaran->numero2 = $_POST['numero2'];
         $albaran->observaciones = $_POST['observaciones'];
         $albaran->irpf = $serie->irpf;
         $albaran->porcomision = $this->agente->porcomision;
         $albaran->codcliente = $cliente->codcliente;
         $albaran->cifnif = $cliente->cifnif;
         $albaran->nombrecliente = $cliente->razonsocial;
         $albaran->ciudad = $_POST['ciudad'];
         $albaran->codpais = $_POST['codpais'];
         $albaran->codpostal = $_POST['codpostal'];
         $albaran->direccion = $_POST['direccion'];
         $albaran->provincia = $_POST['provincia'];
         if ($albaran->save()) {
             $art0 = new articulo();
             $n = floatval($_POST['numlineas']);
             for ($i = 0; $i <= $n; $i++) {
                 if (isset($_POST['referencia_' . $i])) {
                     $linea = new linea_albaran_cliente();
                     $linea->idalbaran = $albaran->idalbaran;
                     $linea->descripcion = $_POST['desc_' . $i];
                     if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                         $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $i]);
                         if ($imp0) {
                             $linea->codimpuesto = $imp0->codimpuesto;
                             $linea->iva = floatval($_POST['iva_' . $i]);
                             $linea->recargo = floatval($_POST['recargo_' . $i]);
                         } else {
                             $linea->iva = floatval($_POST['iva_' . $i]);
                             $linea->recargo = floatval($_POST['recargo_' . $i]);
                         }
                     }
                     $linea->irpf = floatval($_POST['irpf_' . $i]);
                     $linea->pvpunitario = floatval($_POST['pvp_' . $i]);
                     $linea->cantidad = floatval($_POST['cantidad_' . $i]);
                     $linea->dtopor = floatval($_POST['dto_' . $i]);
                     $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                     $linea->pvptotal = floatval($_POST['neto_' . $i]);
                     $articulo = $art0->get($_POST['referencia_' . $i]);
                     if ($articulo) {
                         $linea->referencia = $articulo->referencia;
                     }
                     if ($linea->save()) {
                         if ($articulo and isset($_POST['stock'])) {
                             /// descontamos del stock
                             $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;
                     }
                 }
             }
             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 (abs(floatval($_POST['atotal']) - $albaran->total) >= 0.02) {
                     $this->new_error_msg("El total difiere entre la vista y el controlador (" . $_POST['atotal'] . " frente a " . $albaran->total . "). Debes informar del error.");
                     $albaran->delete();
                 } else {
                     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);
                         if ($_POST['redir'] == 'TRUE') {
                             header('Location: ' . $albaran->url());
                         }
                     } else {
                         $this->new_error_msg("¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                     }
                 }
             } else {
                 if ($albaran->delete()) {
                     $this->new_message(FS_ALBARAN . " eliminado correctamente.");
                 } else {
                     $this->new_error_msg("¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                 }
             }
         } else {
             $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
         }
     }
 }
 public function buscar_lineas()
 {
     /// cambiamos la plantilla HTML
     $this->template = 'ajax/ventas_lineas_albaranes';
     $this->buscar_lineas = $_POST['buscar_lineas'];
     $linea = new linea_albaran_cliente();
     if (isset($_POST['codcliente'])) {
         $this->lineas = $linea->search_from_cliente2($_POST['codcliente'], $this->buscar_lineas, $_POST['buscar_lineas_o'], $this->offset);
     } else {
         $this->lineas = $linea->search($this->buscar_lineas, $this->offset);
     }
 }
Example #4
0
 public function get_lineas()
 {
     $linea = new linea_albaran_cliente();
     return $linea->all_from_albaran($this->idalbaran);
 }
 private function agrupar_pedidos()
 {
     $continuar = TRUE;
     $albaran = new albaran_cliente();
     $albaran_rellenado = FALSE;
     $art0 = new articulo();
     $num = 0;
     foreach ($this->resultados as $ped) {
         foreach ($ped->get_lineas() as $lin) {
             if (!isset($_POST['idl_' . $num]) or !$continuar) {
             } else {
                 if ($lin->idlinea == intval($_POST['idl_' . $num])) {
                     if (!$albaran_rellenado) {
                         $albaran->codagente = $this->user->codagente;
                         $albaran->codalmacen = $ped->codalmacen;
                         $albaran->coddivisa = $ped->coddivisa;
                         $albaran->tasaconv = $ped->tasaconv;
                         $albaran->codejercicio = $ped->codejercicio;
                         $albaran->codpago = $ped->codpago;
                         $albaran->codserie = $ped->codserie;
                         $albaran->irpf = $ped->irpf;
                         $albaran->cifnif = $this->cliente->cifnif;
                         $albaran->codcliente = $this->cliente->codcliente;
                         $albaran->nombrecliente = $this->cliente->razonsocial;
                         $albaran->apartado = '';
                         $albaran->ciudad = '';
                         $albaran->codpais = $this->empresa->codpais;
                         $albaran->codpostal = '';
                         $albaran->direccion = '';
                         $albaran->provincia = '';
                         foreach ($this->cliente->get_direcciones() as $dir) {
                             if ($dir->domfacturacion) {
                                 $albaran->apartado = $dir->apartado;
                                 $albaran->ciudad = $dir->ciudad;
                                 $albaran->coddir = $dir->id;
                                 $albaran->codpais = $dir->codpais;
                                 $albaran->codpostal = $dir->codpostal;
                                 $albaran->direccion = $dir->direccion;
                                 $albaran->provincia = $dir->provincia;
                                 break;
                             }
                         }
                         if (!$albaran->save()) {
                             $continuar = FALSE;
                             $this->new_error_msg('Error al agrupar el pedido.');
                         }
                         $albaran_rellenado = TRUE;
                     }
                     $linea = new linea_albaran_cliente();
                     $linea->idalbaran = $albaran->idalbaran;
                     $linea->idpedido = $ped->idpedido;
                     $linea->idlineapedido = $lin->idlinea;
                     $linea->referencia = $lin->referencia;
                     $linea->descripcion = $lin->descripcion;
                     $linea->cantidad = floatval($_POST['cantidad_' . $num]);
                     $linea->pvpunitario = $lin->pvpunitario;
                     $linea->codimpuesto = $lin->codimpuesto;
                     $linea->dtopor = $lin->dtopor;
                     $linea->irpf = $lin->irpf;
                     $linea->iva = $lin->iva;
                     $linea->recargo = $lin->recargo;
                     $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                     $linea->pvptotal = $linea->pvpunitario * $linea->cantidad * (100 - $linea->dtopor) / 100;
                     if ($linea->save()) {
                         /// desconamos el stock
                         $articulo = $art0->get($linea->referencia);
                         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;
                     }
                 }
             }
             $num++;
         }
         if (isset($_POST['aprobado'])) {
             if (in_array($ped->idpedido, $_POST['aprobado'])) {
                 $ped->editable = FALSE;
                 $ped->idalbaran = $albaran->idalbaran;
                 $ped->status = 1;
                 $ped->save();
             }
         }
     }
     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> generado correctamente.');
         } else {
             $this->new_error_msg('Error al generar el ' . FS_ALBARAN);
             $albaran->delete();
         }
     } else {
         if (!is_null($albaran->idalbaran)) {
             $albaran->delete();
         }
     }
 }
 private function generar_albaran()
 {
     $albaran = new albaran_cliente();
     $albaran->apartado = $this->pedido->apartado;
     $albaran->automatica = TRUE;
     $albaran->cifnif = $this->pedido->cifnif;
     $albaran->ciudad = $this->pedido->ciudad;
     $albaran->codagente = $this->pedido->codagente;
     $albaran->codalmacen = $this->pedido->codalmacen;
     $albaran->codcliente = $this->pedido->codcliente;
     $albaran->coddir = $this->pedido->coddir;
     $albaran->coddivisa = $this->pedido->coddivisa;
     $albaran->tasaconv = $this->pedido->tasaconv;
     $albaran->codpago = $this->pedido->codpago;
     $albaran->codpais = $this->pedido->codpais;
     $albaran->codpostal = $this->pedido->codpostal;
     $albaran->codserie = $this->pedido->codserie;
     $albaran->direccion = $this->pedido->direccion;
     $albaran->editable = TRUE;
     $albaran->neto = $this->pedido->neto;
     $albaran->nombrecliente = $this->pedido->nombrecliente;
     $albaran->observaciones = $this->pedido->observaciones;
     $albaran->provincia = $this->pedido->provincia;
     $albaran->total = $this->pedido->total;
     $albaran->totaliva = $this->pedido->totaliva;
     $albaran->numero2 = $this->pedido->numero2;
     $albaran->irpf = $this->pedido->irpf;
     $albaran->porcomision = $this->pedido->porcomision;
     $albaran->recfinanciero = $this->pedido->recfinanciero;
     $albaran->totalirpf = $this->pedido->totalirpf;
     $albaran->totalrecargo = $this->pedido->totalrecargo;
     /**
      * Obtenemos el ejercicio para la fecha de hoy (puede que
      * no sea el mismo ejercicio que el del pedido, por ejemplo
      * si hemos cambiado de año)
      */
     $eje0 = $this->ejercicio->get_by_fecha($albaran->fecha);
     $albaran->codejercicio = $eje0->codejercicio;
     $regularizacion = new regularizacion_iva();
     if (!$eje0->abierto()) {
         $this->new_error_msg("El ejercicio está cerrado.");
     } else {
         if ($regularizacion->get_fecha_inside($albaran->fecha)) {
             $this->new_error_msg("El IVA de ese periodo ya ha sido regularizado. No se pueden añadir más " . FS_ALBARANES . " en esa fecha.");
         } else {
             if ($albaran->save()) {
                 $continuar = TRUE;
                 $art0 = new articulo();
                 foreach ($this->pedido->get_lineas() as $l) {
                     $n = new linea_albaran_cliente();
                     $n->idpedido = $l->idpedido;
                     $n->idalbaran = $albaran->idalbaran;
                     $n->cantidad = $l->cantidad;
                     $n->codimpuesto = $l->codimpuesto;
                     $n->descripcion = $l->descripcion;
                     $n->dtolineal = $l->dtolineal;
                     $n->dtopor = $l->dtopor;
                     $n->irpf = $l->irpf;
                     $n->iva = $l->iva;
                     $n->pvpsindto = $l->pvpsindto;
                     $n->pvptotal = $l->pvptotal;
                     $n->pvpunitario = $l->pvpunitario;
                     $n->recargo = $l->recargo;
                     $n->referencia = $l->referencia;
                     if ($n->save()) {
                         /// descontamos del stock
                         if (!is_null($n->referencia)) {
                             $articulo = $art0->get($n->referencia);
                             $articulo->sum_stock($albaran->codalmacen, 0 - $l->cantidad);
                         }
                     } else {
                         $continuar = FALSE;
                         $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! ");
                         break;
                     }
                 }
                 if ($continuar) {
                     $this->pedido->idalbaran = $albaran->idalbaran;
                     $this->pedido->editable = FALSE;
                     if ($this->pedido->save()) {
                         $this->new_message("<a href='" . $albaran->url() . "'>" . ucfirst(FS_ALBARAN) . '</a> generado correctamente.');
                     } else {
                         $this->new_error_msg("¡Imposible vincular el " . FS_PEDIDO . " con el nuevo " . FS_ALBARAN . "!");
                         if ($albaran->delete()) {
                             $this->new_error_msg("El " . FS_ALBARAN . " se ha borrado.");
                         } else {
                             $this->new_error_msg("¡Imposible borrar el " . FS_ALBARAN . "!");
                         }
                     }
                 } else {
                     if ($albaran->delete()) {
                         $this->new_error_msg("El " . FS_ALBARAN . " se ha borrado.");
                     } else {
                         $this->new_error_msg("¡Imposible borrar el " . FS_ALBARAN . "!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
             }
         }
     }
 }
 private function nuevo_albaran_cliente($p)
 {
     // print_r($p);
     $continuar = TRUE;
     $respuesta = "";
     $cliente = $this->cliente->get($p['cliente']);
     if (!$cliente) {
         $respuesta .= 'Cliente no encontrado.';
         $continuar = FALSE;
     }
     $almacen = $this->almacen->get($p['almacen']);
     if ($almacen) {
     } else {
         $respuesta .= 'Almacén no encontrado.';
         $continuar = FALSE;
     }
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($p['fecha'], FALSE);
     if (!$ejercicio) {
         $respuesta .= 'Ejercicio no encontrado.';
         $continuar = FALSE;
     }
     $serie = $this->serie->get($p['serie']);
     if (!$serie) {
         $respuesta .= 'Serie no encontrada.';
         $continuar = FALSE;
     }
     $forma_pago = $this->forma_pago->get($p['forma_pago']);
     if ($forma_pago) {
     } else {
         $respuesta .= 'Forma de pago no encontrada.';
         $continuar = FALSE;
     }
     $divisa = $this->divisa->get($p['divisa']);
     if (!$divisa) {
         $respuesta .= 'Divisa no encontrada.';
         $continuar = FALSE;
     }
     $albaran = new albaran_cliente();
     if ($continuar) {
         $albaran->fecha = $p['fecha'];
         $albaran->hora = $p['hora'];
         $albaran->codalmacen = $almacen->codalmacen;
         $albaran->codejercicio = $ejercicio->codejercicio;
         $albaran->codserie = $serie->codserie;
         $albaran->codpago = $forma_pago->codpago;
         $albaran->coddivisa = $divisa->coddivisa;
         $albaran->tasaconv = $divisa->tasaconv;
         $albaran->codagente = $this->agente->codagente;
         $albaran->numero2 = $p['numero2'];
         $albaran->observaciones = $p['observaciones'];
         $albaran->porcomision = $this->agente->porcomision;
         $albaran->codcliente = $cliente->codcliente;
         $albaran->cifnif = $cliente->cifnif;
         $albaran->nombrecliente = $cliente->nombre;
         $direccion = array();
         foreach ($cliente->get_direcciones() as $dir) {
             if ($dir->domfacturacion) {
                 $direccion = $dir;
                 break;
             }
         }
         $albaran->ciudad = $direccion->ciudad;
         $albaran->codpais = $direccion->codpais;
         $albaran->codpostal = $direccion->codpostal;
         $albaran->direccion = $direccion->direccion;
         $albaran->provincia = $direccion->provincia;
         if ($albaran->save()) {
             $art0 = new articulo();
             $n = floatval($p['numlineas']);
             for ($i = 0; $i <= $n; $i++) {
                 if (isset($p['referencia_' . $i])) {
                     $linea = new linea_albaran_cliente();
                     $linea->idalbaran = $albaran->idalbaran;
                     $linea->descripcion = $p['desc_' . $i];
                     if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                         $imp0 = $this->impuesto->get_by_iva($p['iva_' . $i]);
                         if ($imp0) {
                             $linea->codimpuesto = $imp0->codimpuesto;
                             $linea->iva = floatval($p['iva_' . $i]);
                             $linea->recargo = floatval($p['recargo_' . $i]);
                         } else {
                             $linea->iva = floatval($p['iva_' . $i]);
                             $linea->recargo = floatval($p['recargo_' . $i]);
                         }
                     }
                     $linea->irpf = floatval($p['irpf_' . $i]);
                     $linea->pvpunitario = floatval($p['pvp_' . $i]);
                     $linea->cantidad = floatval($p['cantidad_' . $i]);
                     $linea->dtopor = floatval($p['dto_' . $i]);
                     $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                     $linea->pvptotal = floatval($p['neto_' . $i]);
                     $articulo = $art0->get($p['referencia_' . $i]);
                     if ($articulo) {
                         $linea->referencia = $articulo->referencia;
                     }
                     if ($linea->save()) {
                         if ($articulo and isset($p['stock'])) {
                             /// descontamos del stock
                             $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;
                         if ($linea->irpf > $albaran->irpf) {
                             $albaran->irpf = $linea->irpf;
                         }
                     } else {
                         $respuesta .= "¡Imposible guardar la linea con referencia: " . $linea->referencia;
                         $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()) {
                     $respuesta .= "Albarán correcto";
                 } else {
                     $respuesta .= "¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!";
                 }
             } else {
                 if ($albaran->delete()) {
                     $respuesta .= FS_ALBARAN . " eliminado correctamente.";
                 } else {
                     $respuesta .= "¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!";
                 }
             }
         } else {
             $respuesta .= "¡Imposible guardar el " . FS_ALBARAN . "!";
         }
     }
     return $respuesta;
 }
Example #8
0
 private function modificar()
 {
     $error = FALSE;
     $this->albaran->numero2 = $_POST['numero2'];
     $this->albaran->observaciones = $_POST['observaciones'];
     if ($this->albaran->ptefactura) {
         $eje0 = $this->ejercicio->get_by_fecha($_POST['fecha']);
         if ($eje0->codejercicio == $this->albaran->codejercicio) {
             $this->albaran->fecha = $_POST['fecha'];
             $this->albaran->hora = $_POST['hora'];
         } else {
             $error = TRUE;
             $this->new_error_msg('La fecha seleccionada está fuere del rando del ejercicio ' . $this->albaran->codejercicio . '. Si deseas asignar la fecha ' . $_POST['fecha'] . ' pulsa <a href="' . $this->url() . '&forze_fecha=' . $_POST['fecha'] . '">aquí</a>' . ' y se asignará un nuevo código y un nuevo número al ' . FS_ALBARAN . '.');
         }
         /// ¿cambiamos el cliente?
         if ($_POST['cliente'] != $this->albaran->codcliente) {
             $cliente = $this->cliente->get($_POST['cliente']);
             if ($cliente) {
                 foreach ($cliente->get_direcciones() as $d) {
                     if ($d->domfacturacion) {
                         $this->albaran->codcliente = $cliente->codcliente;
                         $this->albaran->cifnif = $cliente->cifnif;
                         $this->albaran->nombrecliente = $cliente->razonsocial;
                         $this->albaran->apartado = $d->apartado;
                         $this->albaran->ciudad = $d->ciudad;
                         $this->albaran->coddir = $d->id;
                         $this->albaran->codpais = $d->codpais;
                         $this->albaran->codpostal = $d->codpostal;
                         $this->albaran->direccion = $d->direccion;
                         $this->albaran->provincia = $d->provincia;
                         break;
                     }
                 }
             } else {
                 die('No se ha encontrado el cliente.');
             }
         } else {
             $this->albaran->nombrecliente = $_POST['nombrecliente'];
             $this->albaran->cifnif = $_POST['cifnif'];
             $this->albaran->codpais = $_POST['codpais'];
             $this->albaran->provincia = $_POST['provincia'];
             $this->albaran->ciudad = $_POST['ciudad'];
             $this->albaran->codpostal = $_POST['codpostal'];
             $this->albaran->direccion = $_POST['direccion'];
             $cliente = $this->cliente->get($this->albaran->codcliente);
         }
         $serie = $this->serie->get($this->albaran->codserie);
         /// ¿cambiamos la serie?
         if ($_POST['serie'] != $this->albaran->codserie) {
             $serie2 = $this->serie->get($_POST['serie']);
             if ($serie2) {
                 $this->albaran->codserie = $serie2->codserie;
                 $this->albaran->irpf = $serie2->irpf;
                 $this->albaran->new_codigo();
                 $serie = $serie2;
             }
         }
         $this->albaran->codpago = $_POST['forma_pago'];
         /// ¿Cambiamos la divisa?
         if ($_POST['divisa'] != $this->albaran->coddivisa) {
             $divisa = $this->divisa->get($_POST['divisa']);
             if ($divisa) {
                 $this->albaran->coddivisa = $divisa->coddivisa;
                 $this->albaran->tasaconv = $divisa->tasaconv;
             }
         } else {
             if ($_POST['tasaconv'] != '') {
                 $this->albaran->tasaconv = floatval($_POST['tasaconv']);
             }
         }
         if (isset($_POST['numlineas'])) {
             $numlineas = intval($_POST['numlineas']);
             $this->albaran->neto = 0;
             $this->albaran->totaliva = 0;
             $this->albaran->totalirpf = 0;
             $this->albaran->totalrecargo = 0;
             $lineas = $this->albaran->get_lineas();
             $articulo = new articulo();
             /// eliminamos las líneas que no encontremos en el $_POST
             foreach ($lineas as $l) {
                 $encontrada = FALSE;
                 for ($num = 0; $num <= $numlineas; $num++) {
                     if (isset($_POST['idlinea_' . $num])) {
                         if ($l->idlinea == intval($_POST['idlinea_' . $num])) {
                             $encontrada = TRUE;
                             break;
                         }
                     }
                 }
                 if (!$encontrada) {
                     if ($l->delete()) {
                         /// actualizamos el stock
                         $art0 = $articulo->get($l->referencia);
                         if ($art0) {
                             $art0->sum_stock($this->albaran->codalmacen, $l->cantidad);
                         }
                     } else {
                         $this->new_error_msg("¡Imposible eliminar la línea del artículo " . $l->referencia . "!");
                     }
                 }
             }
             /// modificamos y/o añadimos las demás líneas
             for ($num = 0; $num <= $numlineas; $num++) {
                 $encontrada = FALSE;
                 if (isset($_POST['idlinea_' . $num])) {
                     foreach ($lineas as $k => $value) {
                         /// modificamos la línea
                         if ($value->idlinea == intval($_POST['idlinea_' . $num])) {
                             $encontrada = TRUE;
                             $cantidad_old = $value->cantidad;
                             $lineas[$k]->cantidad = floatval($_POST['cantidad_' . $num]);
                             $lineas[$k]->pvpunitario = floatval($_POST['pvp_' . $num]);
                             $lineas[$k]->dtopor = floatval($_POST['dto_' . $num]);
                             $lineas[$k]->pvpsindto = $value->cantidad * $value->pvpunitario;
                             $lineas[$k]->pvptotal = $value->cantidad * $value->pvpunitario * (100 - $value->dtopor) / 100;
                             $lineas[$k]->descripcion = $_POST['desc_' . $num];
                             $lineas[$k]->codimpuesto = NULL;
                             $lineas[$k]->iva = 0;
                             $lineas[$k]->recargo = 0;
                             $lineas[$k]->irpf = floatval($_POST['irpf_' . $num]);
                             if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                                 $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $num]);
                                 if ($imp0) {
                                     $lineas[$k]->codimpuesto = $imp0->codimpuesto;
                                 }
                                 $lineas[$k]->iva = floatval($_POST['iva_' . $num]);
                                 $lineas[$k]->recargo = floatval($_POST['recargo_' . $num]);
                             }
                             if ($lineas[$k]->save()) {
                                 $this->albaran->neto += $value->pvptotal;
                                 $this->albaran->totaliva += $value->pvptotal * $value->iva / 100;
                                 $this->albaran->totalirpf += $value->pvptotal * $value->irpf / 100;
                                 $this->albaran->totalrecargo += $value->pvptotal * $value->recargo / 100;
                                 if ($lineas[$k]->cantidad != $cantidad_old) {
                                     /// actualizamos el stock
                                     $art0 = $articulo->get($value->referencia);
                                     if ($art0) {
                                         $art0->sum_stock($this->albaran->codalmacen, $cantidad_old - $lineas[$k]->cantidad);
                                     }
                                 }
                             } else {
                                 $this->new_error_msg("¡Imposible modificar la línea del artículo " . $value->referencia . "!");
                             }
                             break;
                         }
                     }
                     /// añadimos la línea
                     if (!$encontrada and intval($_POST['idlinea_' . $num]) == -1 and isset($_POST['referencia_' . $num])) {
                         $linea = new linea_albaran_cliente();
                         $linea->idalbaran = $this->albaran->idalbaran;
                         $linea->descripcion = $_POST['desc_' . $num];
                         if (!$serie->siniva and $cliente->regimeniva != 'Exento') {
                             $imp0 = $this->impuesto->get_by_iva($_POST['iva_' . $num]);
                             if ($imp0) {
                                 $linea->codimpuesto = $imp0->codimpuesto;
                             }
                             $linea->iva = floatval($_POST['iva_' . $num]);
                             $linea->recargo = floatval($_POST['recargo_' . $num]);
                         }
                         $linea->irpf = floatval($_POST['irpf_' . $num]);
                         $linea->cantidad = floatval($_POST['cantidad_' . $num]);
                         $linea->pvpunitario = floatval($_POST['pvp_' . $num]);
                         $linea->dtopor = floatval($_POST['dto_' . $num]);
                         $linea->pvpsindto = $linea->cantidad * $linea->pvpunitario;
                         $linea->pvptotal = $linea->cantidad * $linea->pvpunitario * (100 - $linea->dtopor) / 100;
                         $art0 = $articulo->get($_POST['referencia_' . $num]);
                         if ($art0) {
                             $linea->referencia = $art0->referencia;
                         }
                         if ($linea->save()) {
                             if ($art0) {
                                 /// actualizamos el stock
                                 $art0->sum_stock($this->albaran->codalmacen, 0 - $linea->cantidad);
                             }
                             $this->albaran->neto += $linea->pvptotal;
                             $this->albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                             $this->albaran->totalirpf += $linea->pvptotal * $linea->irpf / 100;
                             $this->albaran->totalrecargo += $linea->pvptotal * $linea->recargo / 100;
                         } else {
                             $this->new_error_msg("¡Imposible guardar la línea del artículo " . $linea->referencia . "!");
                         }
                     }
                 }
             }
             /// redondeamos
             $this->albaran->neto = round($this->albaran->neto, FS_NF0);
             $this->albaran->totaliva = round($this->albaran->totaliva, FS_NF0);
             $this->albaran->totalirpf = round($this->albaran->totalirpf, FS_NF0);
             $this->albaran->totalrecargo = round($this->albaran->totalrecargo, FS_NF0);
             $this->albaran->total = $this->albaran->neto + $this->albaran->totaliva - $this->albaran->totalirpf + $this->albaran->totalrecargo;
             if (abs(floatval($_POST['atotal']) - $this->albaran->total) >= 0.02) {
                 $this->new_error_msg("El total difiere entre el controlador y la vista (" . $this->albaran->total . " frente a " . $_POST['atotal'] . "). Debes informar del error.");
             }
         }
     }
     if ($this->albaran->save()) {
         if (!$error) {
             $this->new_message(ucfirst(FS_ALBARAN) . " modificado correctamente.");
         }
         $this->new_change(ucfirst(FS_ALBARAN) . ' Cliente ' . $this->albaran->codigo, $this->albaran->url());
     } else {
         $this->new_error_msg("¡Imposible modificar el " . FS_ALBARAN . "!");
     }
 }
Example #9
0
 private function generar_albaran()
 {
     $albaran = new albaran_cliente();
     $albaran->apartado = $this->pedido->apartado;
     $albaran->cifnif = $this->pedido->cifnif;
     $albaran->ciudad = $this->pedido->ciudad;
     $albaran->codagente = $this->pedido->codagente;
     $albaran->codalmacen = $this->pedido->codalmacen;
     $albaran->codcliente = $this->pedido->codcliente;
     $albaran->coddir = $this->pedido->coddir;
     $albaran->coddivisa = $this->pedido->coddivisa;
     $albaran->tasaconv = $this->pedido->tasaconv;
     $albaran->codpago = $this->pedido->codpago;
     $albaran->codpais = $this->pedido->codpais;
     $albaran->codpostal = $this->pedido->codpostal;
     $albaran->codserie = $this->pedido->codserie;
     $albaran->direccion = $this->pedido->direccion;
     $albaran->neto = $this->pedido->neto;
     $albaran->nombrecliente = $this->pedido->nombrecliente;
     $albaran->observaciones = $this->pedido->observaciones;
     $albaran->provincia = $this->pedido->provincia;
     $albaran->total = $this->pedido->total;
     $albaran->totaliva = $this->pedido->totaliva;
     $albaran->numero2 = $this->pedido->numero2;
     $albaran->irpf = $this->pedido->irpf;
     $albaran->porcomision = $this->pedido->porcomision;
     $albaran->totalirpf = $this->pedido->totalirpf;
     $albaran->totalrecargo = $this->pedido->totalrecargo;
     if (isset($_POST['facturar'])) {
         $albaran->fecha = $_POST['facturar'];
     }
     /**
      * Obtenemos el ejercicio para la fecha de hoy (puede que
      * no sea el mismo ejercicio que el del pedido, por ejemplo
      * si hemos cambiado de año)
      */
     $eje0 = $this->ejercicio->get_by_fecha($albaran->fecha, FALSE);
     if ($eje0) {
         $albaran->codejercicio = $eje0->codejercicio;
     }
     if (!$eje0) {
         $this->new_error_msg("Ejercicio no encontrado.");
     } else {
         if (!$eje0->abierto()) {
             $this->new_error_msg("El ejercicio está cerrado.");
         } else {
             if ($albaran->save()) {
                 $continuar = TRUE;
                 $art0 = new articulo();
                 foreach ($this->pedido->get_lineas() as $l) {
                     $n = new linea_albaran_cliente();
                     $n->idlineapedido = $l->idlinea;
                     $n->idpedido = $l->idpedido;
                     $n->idalbaran = $albaran->idalbaran;
                     $n->cantidad = $l->cantidad;
                     $n->codimpuesto = $l->codimpuesto;
                     $n->descripcion = $l->descripcion;
                     $n->dtopor = $l->dtopor;
                     $n->irpf = $l->irpf;
                     $n->iva = $l->iva;
                     $n->pvpsindto = $l->pvpsindto;
                     $n->pvptotal = $l->pvptotal;
                     $n->pvpunitario = $l->pvpunitario;
                     $n->recargo = $l->recargo;
                     $n->referencia = $l->referencia;
                     if ($n->save()) {
                         /// descontamos del stock
                         if (!is_null($n->referencia)) {
                             $articulo = $art0->get($n->referencia);
                             if ($articulo) {
                                 $articulo->sum_stock($albaran->codalmacen, 0 - $l->cantidad);
                             }
                         }
                     } else {
                         $continuar = FALSE;
                         $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! ");
                         break;
                     }
                 }
                 if ($continuar) {
                     $this->pedido->idalbaran = $albaran->idalbaran;
                     if ($this->pedido->save()) {
                         $this->new_message("<a href='" . $albaran->url() . "'>" . ucfirst(FS_ALBARAN) . '</a> generado correctamente.');
                         if (isset($_POST['facturar'])) {
                             header('Location: ' . $albaran->url() . '&facturar=' . $_POST['facturar'] . '&petid=' . $this->random_string());
                         }
                     } else {
                         $this->new_error_msg("¡Imposible vincular el " . FS_PEDIDO . " con el nuevo " . FS_ALBARAN . "!");
                         if ($albaran->delete()) {
                             $this->new_error_msg("El " . FS_ALBARAN . " se ha borrado.");
                         } else {
                             $this->new_error_msg("¡Imposible borrar el " . FS_ALBARAN . "!");
                         }
                     }
                 } else {
                     if ($albaran->delete()) {
                         $this->new_error_msg("El " . FS_ALBARAN . " se ha borrado.");
                     } else {
                         $this->new_error_msg("¡Imposible borrar el " . FS_ALBARAN . "!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
             }
         }
     }
 }
Example #10
0
 public function get_lineas_albaran_cli($offset = 0, $limit = FS_ITEM_LIMIT)
 {
     $linea = new linea_albaran_cliente();
     return $linea->all_from_articulo($this->referencia, $offset, $limit);
 }
Example #11
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 #12
0
 private function generar_albaran()
 {
     $albaran = new albaran_cliente();
     $albaran->apartado = $this->servicio->apartado;
     $albaran->cifnif = $this->servicio->cifnif;
     $albaran->ciudad = $this->servicio->ciudad;
     $albaran->codagente = $this->servicio->codagente;
     if ($this->servicio->codalmacen) {
         $albaran->codalmacen = $this->servicio->codalmacen;
     } else {
         $albaran->codalmacen = $this->empresa->codalmacen;
     }
     $albaran->codcliente = $this->servicio->codcliente;
     $albaran->coddir = $this->servicio->coddir;
     $albaran->coddivisa = $this->servicio->coddivisa;
     $albaran->tasaconv = $this->servicio->tasaconv;
     $albaran->codpago = $this->servicio->codpago;
     $albaran->codpais = $this->servicio->codpais;
     $albaran->codpostal = $this->servicio->codpostal;
     $albaran->codserie = $this->servicio->codserie;
     $albaran->direccion = $this->servicio->direccion;
     $albaran->neto = $this->servicio->neto;
     $albaran->nombrecliente = $this->servicio->nombrecliente;
     $albaran->observaciones = $this->servicio->observaciones;
     $albaran->provincia = $this->servicio->provincia;
     $albaran->total = $this->servicio->total;
     $albaran->totaliva = $this->servicio->totaliva;
     $albaran->numero2 = $this->servicio->numero2;
     $albaran->irpf = $this->servicio->irpf;
     $albaran->porcomision = $this->servicio->porcomision;
     $albaran->totalirpf = $this->servicio->totalirpf;
     $albaran->totalrecargo = $this->servicio->totalrecargo;
     /**
      * Obtenemos el ejercicio para la fecha de hoy (puede que
      * no sea el mismo ejercicio que el del servicio, por ejemplo
      * si hemos cambiado de año)
      */
     $eje0 = $this->ejercicio->get_by_fecha($albaran->fecha);
     $albaran->codejercicio = $eje0->codejercicio;
     if (!$eje0) {
         $this->new_error_msg("Ejercicio no encontrado.");
     } else {
         if (!$eje0->abierto()) {
             $this->new_error_msg("El ejercicio está cerrado.");
         } else {
             if ($albaran->save()) {
                 $this->new_message("El " . FS_ALBARAN . " " . $albaran->codigo . " ha sido creado correctamente.");
                 $continuar = TRUE;
                 $art0 = new articulo();
                 $i = 0;
                 foreach ($this->servicio->get_lineas() as $l) {
                     $n = new linea_albaran_cliente();
                     $n->idalbaran = $albaran->idalbaran;
                     $n->cantidad = $l->cantidad;
                     $n->codimpuesto = $l->codimpuesto;
                     $n->descripcion = $l->descripcion;
                     if ($i == 0) {
                         if ($this->setup['servicios_linea'] && $this->setup['servicios_linea1']) {
                             $n->descripcion .= "\n";
                             if ($this->setup['servicios_material_linea']) {
                                 $n->descripcion .= $this->setup['st_material'] . ": " . $this->servicio->material . "\n";
                             }
                             if ($this->setup['servicios_material_estado_linea']) {
                                 $n->descripcion .= $this->setup['st_material_estado'] . ": " . $this->servicio->material_estado . "\n";
                             }
                             if ($this->setup['servicios_accesorios_linea']) {
                                 $n->descripcion .= $this->setup['st_accesorios'] . ": " . $this->servicio->accesorios . "\n";
                             }
                             if ($this->setup['servicios_descripcion_linea']) {
                                 $n->descripcion .= $this->setup['st_descripcion'] . ": " . $this->servicio->descripcion . "\n";
                             }
                             if ($this->setup['servicios_solucion_linea']) {
                                 $n->descripcion .= $this->setup['st_solucion'] . ": " . $this->servicio->solucion . "\n";
                             }
                             if ($this->setup['servicios_fechainicio_linea']) {
                                 $n->descripcion .= $this->setup['st_fechainicio'] . ": " . $this->servicio->fechainicio . "   ";
                             }
                             if ($this->setup['servicios_fechafin_linea']) {
                                 $n->descripcion .= $this->setup['st_fechafin'] . ": " . $this->servicio->fechafin . "   ";
                             }
                             if ($this->setup['servicios_garantia_linea']) {
                                 $n->descripcion .= $this->setup['st_garantia'] . ": " . $this->servicio->garantia . "\n";
                             }
                         }
                     }
                     $n->dtopor = $l->dtopor;
                     $n->irpf = $l->irpf;
                     $n->iva = $l->iva;
                     $n->pvpsindto = $l->pvpsindto;
                     $n->pvptotal = $l->pvptotal;
                     $n->pvpunitario = $l->pvpunitario;
                     $n->recargo = $l->recargo;
                     $n->referencia = $l->referencia;
                     $i++;
                     if ($n->save()) {
                         /// descontamos del stock
                         if (!is_null($n->referencia)) {
                             $articulo = $art0->get($n->referencia);
                             if ($articulo) {
                                 $articulo->sum_stock($albaran->codalmacen, 0 - $l->cantidad);
                             }
                         }
                     } else {
                         $continuar = FALSE;
                         $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! ");
                         break;
                     }
                 }
                 if ($this->setup['servicios_linea'] && !$this->setup['servicios_linea1']) {
                     /// generamos la linea con detalles del servicio
                     if ($this->setup['servicios_linea']) {
                         $ns = new linea_albaran_cliente();
                         $ns->idalbaran = $albaran->idalbaran;
                         $ns->cantidad = '0';
                         /// usamos el impuestos por defecto
                         $imp0 = new impuesto();
                         foreach ($imp0->all() as $imp) {
                             if ($imp->is_default()) {
                                 $ns->codimpuesto = $imp->codimpuesto;
                                 $ns->iva = $imp->iva;
                             }
                         }
                         $ns->descripcion = FS_SERVICIO . ": " . $this->servicio->codigo . " Fecha: " . $this->servicio->fecha . "\n";
                         if ($this->setup['servicios_material_linea']) {
                             $ns->descripcion .= $this->setup['st_material'] . ": " . $this->servicio->material . "\n";
                         }
                         if ($this->setup['servicios_material_estado_linea']) {
                             $ns->descripcion .= $this->setup['st_material_estado'] . ": " . $this->servicio->material_estado . "\n";
                         }
                         if ($this->setup['servicios_accesorios_linea']) {
                             $ns->descripcion .= $this->setup['st_accesorios'] . ": " . $this->servicio->accesorios . "\n";
                         }
                         if ($this->setup['servicios_descripcion_linea']) {
                             $ns->descripcion .= $this->setup['st_descripcion'] . ": " . $this->servicio->descripcion . "\n";
                         }
                         if ($this->setup['servicios_solucion_linea']) {
                             $ns->descripcion .= $this->setup['st_solucion'] . ": " . $this->servicio->solucion . "\n";
                         }
                         if ($this->setup['servicios_fechainicio_linea']) {
                             $ns->descripcion .= $this->setup['st_fechainicio'] . ": " . $this->servicio->fechainicio . "   ";
                         }
                         if ($this->setup['servicios_fechafin_linea']) {
                             $ns->descripcion .= $this->setup['st_fechafin'] . ": " . $this->servicio->fechafin . "   ";
                         }
                         if ($this->setup['servicios_garantia_linea']) {
                             $ns->descripcion .= $this->setup['st_garantia'] . ": " . $this->servicio->garantia . "\n";
                         }
                         $ns->dtopor = '0';
                         $ns->irpf = '0';
                         $ns->pvpsindto = '0';
                         $ns->pvptotal = '0';
                         $ns->pvpunitario = '0';
                         $ns->recargo = '0';
                         $ns->referencia = '';
                         $ns->save();
                     }
                 }
                 if ($continuar) {
                     $this->servicio->idalbaran = $albaran->idalbaran;
                 } else {
                     if ($albaran->delete()) {
                         $this->new_error_msg("El " . FS_ALBARAN . " se ha borrado.");
                     } else {
                         $this->new_error_msg("¡Imposible borrar el " . FS_ALBARAN . "!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
             }
         }
     }
 }
 private function nuevo_albaran_cliente()
 {
     $continuar = TRUE;
     $cliente = $this->cliente->get($_POST['cliente']);
     if ($cliente) {
         $this->save_codcliente($cliente->codcliente);
     } else {
         $this->new_error_msg('Cliente no encontrado.');
         $continuar = FALSE;
     }
     $almacen = $this->almacen->get($_POST['almacen']);
     if ($almacen) {
         $this->save_codalmacen($almacen->codalmacen);
     } else {
         $this->new_error_msg('Almacén no encontrado.');
         $continuar = FALSE;
     }
     $ejercicio = $this->ejercicio->get_by_fecha($_POST['fecha']);
     if ($ejercicio) {
         $this->save_codejercicio($ejercicio->codejercicio);
     } else {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $serie = $this->serie->get($_POST['serie']);
     if ($serie) {
         $this->save_codserie($serie->codserie);
     } else {
         $this->new_error_msg('Serie no encontrada.');
         $continuar = FALSE;
     }
     $forma_pago = $this->forma_pago->get($_POST['forma_pago']);
     if ($forma_pago) {
         $this->save_codpago($forma_pago->codpago);
     } else {
         $this->new_error_msg('Forma de pago no encontrada.');
         $continuar = FALSE;
     }
     $divisa = $this->divisa->get($_POST['divisa']);
     if ($divisa) {
         $this->save_coddivisa($divisa->coddivisa);
     } else {
         $this->new_error_msg('Divisa no encontrada.');
         $continuar = FALSE;
     }
     if (isset($_POST['imprimir_desc'])) {
         $this->imprimir_descripciones = TRUE;
         setcookie('imprimir_desc', TRUE, time() + FS_COOKIES_EXPIRE);
     } else {
         $this->imprimir_descripciones = FALSE;
         setcookie('imprimir_desc', FALSE, time() - FS_COOKIES_EXPIRE);
     }
     if (isset($_POST['imprimir_obs'])) {
         $this->imprimir_observaciones = TRUE;
         setcookie('imprimir_obs', TRUE, time() + FS_COOKIES_EXPIRE);
     } else {
         $this->imprimir_observaciones = FALSE;
         setcookie('imprimir_obs', FALSE, time() - FS_COOKIES_EXPIRE);
     }
     $albaran = new albaran_cliente();
     if ($this->duplicated_petition($_POST['petition_id'])) {
         $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón Guardar
            y se han enviado dos peticiones. Mira en <a href="' . $albaran->url() . '">' . FS_ALBARANES . '</a>
            para ver si el ' . FS_ALBARAN . ' se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if ($continuar) {
         $albaran->fecha = $_POST['fecha'];
         $albaran->codalmacen = $almacen->codalmacen;
         $albaran->codejercicio = $ejercicio->codejercicio;
         $albaran->codserie = $serie->codserie;
         $albaran->codpago = $forma_pago->codpago;
         $albaran->coddivisa = $divisa->coddivisa;
         $albaran->tasaconv = $divisa->tasaconv;
         $albaran->codagente = $this->agente->codagente;
         $albaran->observaciones = $_POST['observaciones'];
         $albaran->numero2 = $_POST['numero2'];
         $albaran->irpf = $serie->irpf;
         $albaran->porcomision = $this->agente->porcomision;
         foreach ($cliente->get_direcciones() as $d) {
             if ($d->domfacturacion) {
                 $albaran->codcliente = $cliente->codcliente;
                 $albaran->cifnif = $cliente->cifnif;
                 $albaran->nombrecliente = $cliente->nombrecomercial;
                 $albaran->apartado = $d->apartado;
                 $albaran->ciudad = $d->ciudad;
                 $albaran->coddir = $d->id;
                 $albaran->codpais = $d->codpais;
                 $albaran->codpostal = $d->codpostal;
                 $albaran->direccion = $d->direccion;
                 $albaran->provincia = $d->provincia;
                 break;
             }
         }
         if (is_null($albaran->codcliente)) {
             $this->new_error_msg("No hay ninguna dirección asociada al cliente.");
         } else {
             if ($albaran->save()) {
                 $n = floatval($_POST['numlineas']);
                 for ($i = 1; $i <= $n; $i++) {
                     if (isset($_POST['referencia_' . $i])) {
                         $articulo = $this->articulo->get($_POST['referencia_' . $i]);
                         if ($articulo) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->referencia = $articulo->referencia;
                             $linea->descripcion = $_POST['desc_' . $i];
                             if (!$serie->siniva or $cliente->regimeniva != 'Exento') {
                                 $linea->codimpuesto = $articulo->codimpuesto;
                                 $linea->iva = floatval($_POST['iva_' . $i]);
                                 $linea->recargo = floatval($_POST['recargo_' . $i]);
                             }
                             if ($linea->iva > 0) {
                                 $linea->irpf = $albaran->irpf;
                             }
                             $linea->pvpunitario = floatval($_POST['pvp_' . $i]);
                             $linea->cantidad = floatval($_POST['cantidad_' . $i]);
                             $linea->dtopor = floatval($_POST['dto_' . $i]);
                             $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             $linea->pvptotal = floatval($_POST['total_' . $i]);
                             if ($linea->save()) {
                                 /// descontamos del stock
                                 $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;
                             }
                         } else {
                             $this->new_error_msg("Artículo no encontrado: " . $_POST['referencia_' . $i]);
                             $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() . "'>" . FS_ALBARAN . "</a> guardado correctamente.");
                         $this->imprimir_ticket($albaran, floatval($_POST['num_tickets']));
                         /// actualizamos la caja
                         $this->caja->dinero_fin += $albaran->total;
                         $this->caja->tickets += 1;
                         $this->caja->ip = $_SERVER['REMOTE_ADDR'];
                         if (!$this->caja->save()) {
                             $this->new_error_msg("¡Imposible actualizar la caja!");
                         }
                     } else {
                         $this->new_error_msg("¡Imposible actualizar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                     }
                 } else {
                     if ($albaran->delete()) {
                         $this->new_message(FS_ALBARAN . " eliminado correctamente.");
                     } else {
                         $this->new_error_msg("¡Imposible eliminar el <a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a>!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
             }
         }
     }
 }
Example #14
0
 private function generar_albaran()
 {
     $albaran = new albaran_cliente();
     $albaran->apartado = $this->servicio->apartado;
     $albaran->cifnif = $this->servicio->cifnif;
     $albaran->ciudad = $this->servicio->ciudad;
     $albaran->codagente = $this->servicio->codagente;
     if ($this->servicio->codalmacen != '') {
         $albaran->codalmacen = $this->servicio->codalmacen;
     } else {
         $albaran->codalmacen = $this->empresa->codalmacen;
     }
     $albaran->codcliente = $this->servicio->codcliente;
     $albaran->coddir = $this->servicio->coddir;
     $albaran->coddivisa = $this->servicio->coddivisa;
     $albaran->tasaconv = $this->servicio->tasaconv;
     $albaran->codpago = $this->servicio->codpago;
     $albaran->codpais = $this->servicio->codpais;
     $albaran->codpostal = $this->servicio->codpostal;
     $albaran->codserie = $this->servicio->codserie;
     $albaran->direccion = $this->servicio->direccion;
     $albaran->neto = $this->servicio->neto;
     $albaran->nombrecliente = $this->servicio->nombrecliente;
     $albaran->observaciones = "Servicio: " . $this->servicio->codigo . " | Fecha: " . $this->servicio->fecha . "\nDescripcion: " . $this->servicio->descripcion . "\nSolución: " . $this->servicio->solucion . "\nObservaciones: " . $this->servicio->observaciones;
     $albaran->provincia = $this->servicio->provincia;
     $albaran->total = $this->servicio->total;
     $albaran->totaliva = $this->servicio->totaliva;
     $albaran->numero2 = $this->servicio->numero2;
     $albaran->irpf = $this->servicio->irpf;
     $albaran->porcomision = $this->servicio->porcomision;
     $albaran->totalirpf = $this->servicio->totalirpf;
     $albaran->totalrecargo = $this->servicio->totalrecargo;
     /**
      * Obtenemos el ejercicio para la fecha de hoy (puede que
      * no sea el mismo ejercicio que el del servicio, por ejemplo
      * si hemos cambiado de año)
      */
     $eje0 = $this->ejercicio->get_by_fecha($albaran->fecha);
     $albaran->codejercicio = $eje0->codejercicio;
     if (!$eje0) {
         $this->new_error_msg("Ejercicio no encontrado.");
     } else {
         if (!$eje0->abierto()) {
             $this->new_error_msg("El ejercicio está cerrado.");
         } else {
             if ($albaran->save()) {
                 $continuar = TRUE;
                 $art0 = new articulo();
                 foreach ($this->servicio->get_lineas() as $l) {
                     $n = new linea_albaran_cliente();
                     $n->idlineaservicio = $l->idlinea;
                     $n->idservicio = $l->idservicio;
                     $n->idalbaran = $albaran->idalbaran;
                     $n->cantidad = $l->cantidad;
                     $n->codimpuesto = $l->codimpuesto;
                     $n->descripcion = $l->descripcion;
                     $n->dtopor = $l->dtopor;
                     $n->irpf = $l->irpf;
                     $n->iva = $l->iva;
                     $n->pvpsindto = $l->pvpsindto;
                     $n->pvptotal = $l->pvptotal;
                     $n->pvpunitario = $l->pvpunitario;
                     $n->recargo = $l->recargo;
                     $n->referencia = $l->referencia;
                     if ($n->save()) {
                         /// descontamos del stock
                         if (!is_null($n->referencia)) {
                             $articulo = $art0->get($n->referencia);
                             if ($articulo) {
                                 $articulo->sum_stock($albaran->codalmacen, 0 - $l->cantidad);
                             }
                         }
                     } else {
                         $continuar = FALSE;
                         $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! ");
                         break;
                     }
                 }
                 if ($continuar) {
                     $this->servicio->idalbaran = $albaran->idalbaran;
                 } else {
                     if ($albaran->delete()) {
                         $this->new_error_msg("El " . FS_ALBARAN . " se ha borrado.");
                     } else {
                         $this->new_error_msg("¡Imposible borrar el " . FS_ALBARAN . "!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
             }
         }
     }
 }
 private function delete_factura()
 {
     $delete = \filter_input(INPUT_GET, 'delete');
     $fact = $this->factura->get($delete);
     $motivo = \filter_input(INPUT_POST, 'motivo');
     $fecha = \filter_input(INPUT_POST, 'fecha');
     $motivo_anulacion = $this->ncf_tipo_anulacion->get($motivo);
     if ($fact) {
         $albaranes = new albaran_cliente();
         /// ¿Sumamos stock?
         $art0 = new articulo();
         foreach ($fact->get_lineas() as $linea) {
             if (is_null($linea->idalbaran)) {
                 $articulo = $art0->get($linea->referencia);
                 if ($articulo) {
                     $articulo->sum_stock($fact->codalmacen, $linea->cantidad);
                 }
             } else {
                 $idalbaran = $linea->idalbaran;
             }
         }
         if ($idalbaran) {
             $albaran0 = $albaranes->get($idalbaran);
             $new_albaran = clone $albaran0;
             $new_albaran->idalbaran = null;
             $new_albaran->idfactura = null;
             $new_albaran->observaciones = ucfirst(FS_ALBARAN) . " " . $albaran0->codigo . " anulado por eliminación de la factura asociada " . $fact->codigo;
             $new_albaran->fecha = $fecha;
             $new_albaran->neto = $new_albaran->neto * -1;
             $new_albaran->total = $new_albaran->total * -1;
             $new_albaran->totaliva = $new_albaran->totaliva * -1;
             $new_albaran->hora = \date('H:i:s');
             if ($new_albaran->save()) {
                 $linea0 = new linea_albaran_cliente();
                 $new_albaran_lineas = $linea0->all_from_albaran($idalbaran);
                 foreach ($new_albaran_lineas as $linea) {
                     $linea->idalbaran = $new_albaran->idalbaran;
                     $linea->idfactura = null;
                     $linea->idlinea = null;
                     $linea->cantidad = $linea->cantidad * -1;
                     $linea->pvptotal = $linea->pvptotal * -1;
                     $linea->pvpsindto = $linea->pvpsindto * -1;
                     $linea->save();
                 }
             }
         }
         $ncf0 = $this->ncf_ventas->get_ncf($this->empresa->id, $fact->idfactura, $fact->codcliente);
         $ncf0->motivo = $motivo_anulacion->codigo . " " . $motivo_anulacion->descripcion;
         $ncf0->estado = FALSE;
         $ncf0->usuario_modificacion = $this->user->nick;
         $ncf0->fecha_modificacion = Date('d-m-Y H:i:s');
         if ($ncf0->anular()) {
             $asiento_factura = new asiento_factura();
             $asiento_factura->soloasiento = TRUE;
             $fact_rectifica = $fact->idfacturarect;
             $factrectifica = !empty($fact->idfacturarect) ? $fact_rectifica : 'NULL';
             $fact->idfacturarect = $ncf0->tipo_comprobante == '04' ? null : $fact->idfactura;
             if ($asiento_factura->generar_asiento_venta($fact)) {
                 $this->db->exec("UPDATE facturascli set observaciones = '" . ucfirst(FS_FACTURA) . " eliminada por: " . $motivo_anulacion->descripcion . "', anulada = true, pagada = true, neto = 0, total = 0, totalirpf = 0, totaleuros = 0, totaliva = 0, idfacturarect = " . $factrectifica . " where idfactura = " . $fact->idfactura . ";");
                 $this->db->exec("DELETE FROM lineasivafactcli where idfactura = " . $fact->idfactura);
                 $fact_lineas = new linea_factura_cliente();
                 $lineas_fact = $fact_lineas->all_from_factura($fact->idfactura);
                 foreach ($lineas_fact as $linea) {
                     $linea->delete();
                 }
                 $fact->get_lineas_iva();
                 $this->new_message("<a href='" . $asiento_factura->asiento->url() . "'>Asiento</a> reversado correctamente.");
             }
             $this->new_message("<a href='" . $fact->url() . "'>Factura</a> cambiada a estado anulada por error correctamente.");
         } else {
             $this->new_error_msg("¡Imposible eliminar la factura!");
         }
     } else {
         $this->new_error_msg("Factura no encontrada.");
     }
 }
 private function guardar_ticket()
 {
     $continuar = TRUE;
     $ejercicio = new ejercicio();
     $ejercicio = $ejercicio->get_by_fecha($this->today());
     if ($ejercicio) {
         $this->save_codejercicio($ejercicio->codejercicio);
     } else {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $divisa = new divisa();
     $divisa = $divisa->get($this->empresa->coddivisa);
     $albaran = new albaran_cliente();
     if ($this->duplicated_petition($_POST['petition_id'])) {
         $this->new_error_msg('Petición duplicada. Has hecho doble clic sobre el botón Guardar
            y se han enviado dos peticiones. Mira en <a href="' . $albaran->url() . '">' . FS_ALBARANES . '</a>
            para ver si el ' . FS_ALBARAN . ' se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if (isset($_POST['total2'])) {
         $total = floatval($_POST['total2']);
         if ($this->clan->limite - $total - $this->clan->gastado() < 0) {
             $continuar = FALSE;
             $this->new_error_msg('El cliente ha superado el límite de gasto.');
         }
     } else {
         $continuar = FALSE;
         $this->new_error_msg('Falta el total del ' . FS_ALBARAN);
     }
     if ($continuar) {
         $albaran->codalmacen = $this->empresa->codalmacen;
         $albaran->codejercicio = $ejercicio->codejercicio;
         $albaran->codserie = $this->empresa->codserie;
         $albaran->codpago = $this->empresa->codpago;
         $albaran->coddivisa = $divisa->coddivisa;
         $albaran->tasaconv = $divisa->tasaconv;
         $albaran->codagente = $this->agente->codagente;
         $albaran->observaciones = $_POST['observaciones'];
         foreach ($this->cliente->get_direcciones() as $d) {
             if ($d->domfacturacion) {
                 $albaran->codcliente = $this->cliente->codcliente;
                 $albaran->cifnif = $this->cliente->cifnif;
                 $albaran->nombrecliente = $this->cliente->nombrecomercial;
                 $albaran->apartado = $d->apartado;
                 $albaran->ciudad = $d->ciudad;
                 $albaran->coddir = $d->id;
                 $albaran->codpais = $d->codpais;
                 $albaran->codpostal = $d->codpostal;
                 $albaran->direccion = $d->direccion;
                 $albaran->provincia = $d->provincia;
                 break;
             }
         }
         if (is_null($albaran->codcliente)) {
             $this->new_error_msg("No hay ninguna dirección asociada al cliente.");
         } else {
             if ($albaran->save()) {
                 $articulo = new articulo();
                 $n = floatval($_POST['numlineas']);
                 for ($i = 0; $i < $n; $i++) {
                     if (isset($_POST['referencia_' . $i])) {
                         $art0 = $articulo->get($_POST['referencia_' . $i]);
                         if ($art0) {
                             $linea = new linea_albaran_cliente();
                             $linea->idalbaran = $albaran->idalbaran;
                             $linea->referencia = $art0->referencia;
                             $linea->descripcion = $art0->descripcion;
                             $linea->codimpuesto = $art0->codimpuesto;
                             $linea->iva = floatval($_POST['iva_' . $i]);
                             $linea->pvpunitario = floatval($_POST['pvp_' . $i]);
                             $linea->cantidad = floatval($_POST['cantidad_' . $i]);
                             $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad;
                             $linea->pvptotal = $linea->pvpunitario * $linea->cantidad;
                             if ($linea->save()) {
                                 /// descontamos del stock
                                 $art0->sum_stock($albaran->codalmacen, 0 - $linea->cantidad);
                                 $albaran->neto += $linea->pvptotal;
                                 $albaran->totaliva += $linea->pvptotal * $linea->iva / 100;
                             } else {
                                 $this->new_error_msg("¡Imposible guardar la línea con referencia: " . $linea->referencia);
                                 $continuar = FALSE;
                             }
                         } else {
                             $this->new_error_msg("Artículo no encontrado: " . $_POST['referencia_' . $i]);
                             $continuar = FALSE;
                         }
                     }
                 }
                 if ($continuar) {
                     /// redondeamos
                     $albaran->neto = round($albaran->neto, 2);
                     $albaran->totaliva = round($albaran->totaliva, 2);
                     $albaran->total = $albaran->neto + $albaran->totaliva;
                     if ($albaran->save()) {
                         $this->new_message("<a href='" . $albaran->url() . "'>" . FS_ALBARAN . "</a> guardado correctamente.");
                         $this->imprimir_ticket($albaran);
                         /// actualizamos la caja
                         $this->caja->dinero_fin += $albaran->total;
                         $this->caja->tickets += 1;
                         $this->caja->ip = $_SERVER['REMOTE_ADDR'];
                         if (!$this->caja->save()) {
                             $this->new_error_msg("¡Imposible actualizar la caja!");
                         }
                     } else {
                         $this->new_error_msg("¡Imposible actualizar el " . FS_ALBARAN . "!");
                     }
                 } else {
                     if ($albaran->delete()) {
                         $this->new_message(FS_ALBARAN . " eliminado correctamente.");
                     } else {
                         $this->new_error_msg("¡Imposible eliminar el " . FS_ALBARAN . "!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el " . FS_ALBARAN . "!");
             }
         }
     }
 }