private function nueva_factura_proveedor() { $continuar = TRUE; $proveedor = $this->proveedor->get($_POST['proveedor']); if ($proveedor) { $this->save_codproveedor($proveedor->codproveedor); } else { $this->new_error_msg('Proveedor no encontrado.'); $continuar = FALSE; } if (isset($_POST['almacen'])) { $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($almacen->codalmacen); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } } $factura = new factura_proveedor(); $eje0 = new ejercicio(); $ejercicio = $eje0->get_by_fecha($_POST['fecha']); if ($ejercicio) { $this->save_codejercicio($ejercicio->codejercicio); } else { $this->autorizar_factura = 1; // $this->new_error_msg('Ejercicio no encontrado.1'); header('Location: ' . $factura->url_list() . '&nueva=2'); $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($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 ($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="' . $factura->url() . '">Facturas</a> para ver si la factura se ha guardado correctamente.'); $continuar = FALSE; } $a = strlen(substr($_POST['fecha'], 6)); if ($a != 4) { $continuar = FALSE; } if ($continuar) { $factura->fecha = $_POST['fecha']; $fecha_factura = $_POST['fecha']; $factura->hora = $_POST['hora']; $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $proveedor->razonsocial; $factura->idpagodevol = 0; $factura->cifnif = $proveedor->cifnif; $factura->codalmacen = $almacen->codalmacen; $factura->codejercicio = $ejercicio->codejercicio; $factura->codserie = $serie->codserie; $factura->codpago = $forma_pago->codpago; $factura->coddivisa = $divisa->coddivisa; $factura->tasaconv = $divisa->tasaconv_compra; $factura->tipo = $_POST['tipo']; $factura->cai = $_POST['cai']; $factura->caivence = $_POST['caivence']; if ($_POST['tasaconv'] != '') { $factura->tasaconv = floatval($_POST['tasaconv']); } $factura->codagente = $this->agente->codagente; $factura->numproveedor = $_POST['tipo'] . '/' . $_POST['numproveedor']; $factura->observaciones = $_POST['observaciones']; $factura->irpf = $serie->irpf; if ($forma_pago->genrecibos == 'Pagados') { // $factura->pagada = TRUE; } if ($factura->save()) { $art0 = new articulo(); $inventario = new inventario(); $n = floatval($_POST['numlineas']); for ($i = 0; $i < $n; $i++) { if (isset($_POST['referencia_' . $i])) { $linea = new linea_factura_proveedor(); $linea->idfactura = $factura->idfactura; $this->id_factura = $factura->idfactura; $linea->descripcion = $_POST['desc_' . $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]); $postot = strlen($_POST['subcuenta_' . $i]); $poscad = strpos($_POST['subcuenta_' . $i], '/'); $posid = strpos($_POST['subcuenta_' . $i], '%'); $subcuencod = substr($_POST['subcuenta_' . $i], 0, $poscad); $subcuendes = substr($_POST['subcuenta_' . $i], $poscad + 1, $posid - $postot); $idsubcuen = substr($_POST['subcuenta_' . $i], $posid + 1); $linea->codsubcuenta = $subcuencod; $linea->subcuentadesc = $subcuendes; $linea->idsubcuenta = $idsubcuen; $articulo = $art0->get($_POST['referencia_' . $i]); //////////////////////////////////////////////////////////////////////// //// GUARDA subcuenta en articulo cuando se carga la factura //////////////////////////////////////////////////// $artval = $this->artsubcuentas->get_ref($_POST['referencia_' . $i]); if ($artval != $subcuencod || $subcuencod == NULL) { if ($_POST['tipo'] == 'B' || $_POST['tipo'] == 'F' || $_POST['tipo'] == 'T' || $_POST['tipo'] == 'Q' || $_POST['tipo'] == 'C' || $_POST['tipo'] == 'D') { $this->artsubcuentas->guarda_subcuenta_comp($_POST['referencia_' . $i], $subcuencod, $subcuendes); } else { $this->artsubcuentas->guarda_subcuenta_dev($_POST['referencia_' . $i], $subcuencod, $subcuendes); } } ////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// if ($articulo) { $linea->referencia = $articulo->referencia; } if ($linea->save()) { if ($articulo) { if (isset($_POST['costemedio'])) { if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; } else { $articulo->costemedio = $articulo->get_costemedio(); if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; } } $this->actualizar_precio_proveedor($factura->codproveedor, $linea); } if (isset($_POST['stock'])) { $articulo->sum_stock($factura->codalmacen, $linea->cantidad); if ($articulo) { $inventario->inventario_agregar($factura->codalmacen, $linea->referencia, $linea->cantidad, $linea->pvpunitario); } } else { if (isset($_POST['costemedio'])) { $articulo->save(); } } } $factura->neto += $linea->pvptotal; $factura->totaliva += $linea->pvptotal * $linea->iva / 100; $factura->totalirpf += $linea->pvptotal * $linea->irpf / 100; $factura->totalrecargo += $linea->pvptotal * $linea->recargo / 100; } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } } if ($continuar) { $factura->fecha = $fecha_factura; /// redondeamos $factura->neto = round($factura->neto, FS_NF0); $factura->totaliva = round($factura->totaliva, FS_NF0); $factura->totalirpf = round($factura->totalirpf, FS_NF0); $factura->totalrecargo = round($factura->totalrecargo, FS_NF0); $factura->total = $factura->neto + $factura->totaliva - $factura->totalirpf + $factura->totalrecargo; if (abs(floatval($_POST['atotal']) - $factura->total) >= 0.02) { $this->new_error_msg("El total difiere entre el controlador y la vista (" . $factura->total . " frente a " . $_POST['atotal'] . "). Debes informar del error."); $factura->delete(); } else { if ($factura->save()) { ///////// GENERA ASIENTO // $this->generar_asiento($factura); // $this->new_message("<a href='".$factura->url()."'>Factura</a> guardada correctamente."); // $this->new_change('Factura Proveedor '.$factura->codigo, $factura->url(), TRUE); $this->autorizar_factura = 1; $this->new_error_msg('Factura Guardada'); if ($_POST['redir'] == 'TRUE') { header('Location: ' . $factura->url_list() . '&nueva=1'); } } else { $this->new_error_msg("¡Imposible actualizar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { $this->new_message("Factura eliminada correctamente."); } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } }