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 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 . "!"); } } }
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; }
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 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 . "!"); } } } }
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. ' . '<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>'); }
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; $this->new_error_msg('ha entrado por lo menos en el albaran'); $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 = 0; $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."); /// actualizamos la caja $this->caja->dinero_fin += $albaran->total; $this->caja->tickets += 1; 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 . "!"); } } } }
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 . "!"); } } } }