public function __construct($l = FALSE) { parent::__construct('lineasfacturasprov'); if (!isset(self::$facturas)) { self::$facturas = array(); } if (!isset(self::$albaranes)) { self::$albaranes = array(); } if ($l) { $this->idlinea = $this->intval($l['idlinea']); $this->idfactura = $this->intval($l['idfactura']); $this->idalbaran = $this->intval($l['idalbaran']); $this->referencia = $l['referencia']; $this->descripcion = $l['descripcion']; $this->cantidad = floatval($l['cantidad']); $this->pvpunitario = floatval($l['pvpunitario']); $this->pvpsindto = floatval($l['pvpsindto']); $this->dtopor = floatval($l['dtopor']); $this->dtolineal = floatval($l['dtolineal']); $this->pvptotal = floatval($l['pvptotal']); $this->codimpuesto = $l['codimpuesto']; $this->iva = floatval($l['iva']); $this->recargo = floatval($l['recargo']); $this->irpf = floatval($l['irpf']); } else { $this->idlinea = NULL; $this->idfactura = NULL; $this->idalbaran = NULL; $this->referencia = ''; $this->descripcion = ''; $this->cantidad = 0; $this->pvpunitario = 0; $this->pvpsindto = 0; $this->dtopor = 0; $this->dtolineal = 0; $this->pvptotal = 0; $this->codimpuesto = NULL; $this->iva = 0; $this->recargo = 0; $this->irpf = 0; } }
public function full_test($duplicados = TRUE) { $status = TRUE; /// comprobamos las líneas $neto = 0; $iva = 0; $irpf = 0; $recargo = 0; foreach ($this->get_lineas() as $l) { if (!$l->test()) { $status = FALSE; } $neto += $l->pvptotal; $iva += $l->pvptotal * $l->iva / 100; $irpf += $l->pvptotal * $l->irpf / 100; $recargo += $l->pvptotal * $l->recargo / 100; } $neto = round($neto, FS_NF0); $iva = round($iva, FS_NF0); $irpf = round($irpf, FS_NF0); $recargo = round($recargo, FS_NF0); $total = $neto + $iva - $irpf + $recargo; if (!$this->floatcmp($this->neto, $neto, FS_NF0, TRUE)) { $this->new_error_msg("Valor neto de " . FS_ALBARAN . " incorrecto. Valor correcto: " . $neto); $status = FALSE; } else { if (!$this->floatcmp($this->totaliva, $iva, FS_NF0, TRUE)) { $this->new_error_msg("Valor totaliva de " . FS_ALBARAN . " incorrecto. Valor correcto: " . $iva); $status = FALSE; } else { if (!$this->floatcmp($this->totalirpf, $irpf, FS_NF0, TRUE)) { $this->new_error_msg("Valor totalirpf de " . FS_ALBARAN . " incorrecto. Valor correcto: " . $irpf); $status = FALSE; } else { if (!$this->floatcmp($this->totalrecargo, $recargo, FS_NF0, TRUE)) { $this->new_error_msg("Valor totalrecargo de " . FS_ALBARAN . " incorrecto. Valor correcto: " . $recargo); $status = FALSE; } else { if (!$this->floatcmp($this->total, $total, FS_NF0, TRUE)) { $this->new_error_msg("Valor total de " . FS_ALBARAN . " incorrecto. Valor correcto: " . $total); $status = FALSE; } else { if (!$this->floatcmp($this->totaleuros, $this->total * $this->tasaconv, FS_NF0, TRUE)) { $this->new_error_msg("Valor totaleuros de " . FS_ALBARAN . " incorrecto.\n Valor correcto: " . round($this->total * $this->tasaconv, FS_NF0)); $status = FALSE; } } } } } } /// comprobamos las facturas asociadas $linea_factura = new linea_factura_proveedor(); $facturas = $linea_factura->facturas_from_albaran($this->idalbaran); if ($facturas) { if (count($facturas) > 1) { $msg = "Este " . FS_ALBARAN . " esta asociado a las siguientes facturas (y no debería):"; foreach ($facturas as $f) { $msg .= " <a href='" . $f->url() . "'>" . $f->codigo . "</a>"; } $this->new_error_msg($msg); $status = FALSE; } else { if ($facturas[0]->idfactura != $this->idfactura) { $this->new_error_msg("Este " . FS_ALBARAN . " esta asociado a una <a href='" . $this->factura_url() . "'>factura</a> incorrecta. La correcta es <a href='" . $facturas[0]->url() . "'>esta</a>."); $status = FALSE; } } } else { if (isset($this->idfactura)) { $this->new_error_msg("Este " . FS_ALBARAN . " esta asociado a una <a href='" . $this->factura_url() . "'>factura</a> incorrecta."); $status = FALSE; } } if ($status and $duplicados) { /// comprobamos si es un duplicado $albaranes = $this->db->select("SELECT * FROM " . $this->table_name . " WHERE fecha = " . $this->var2str($this->fecha) . "\n AND codproveedor = " . $this->var2str($this->codproveedor) . " AND total = " . $this->var2str($this->total) . "\n AND codagente = " . $this->var2str($this->codagente) . " AND numproveedor = " . $this->var2str($this->numproveedor) . "\n AND observaciones = " . $this->var2str($this->observaciones) . " AND idalbaran != " . $this->var2str($this->idalbaran) . ";"); if ($albaranes) { foreach ($albaranes as $alb) { /// comprobamos las líneas $aux = $this->db->select("SELECT referencia FROM lineasalbaranesprov WHERE\n idalbaran = " . $this->var2str($this->idalbaran) . "\n AND referencia NOT IN (SELECT referencia FROM lineasalbaranesprov\n WHERE idalbaran = " . $this->var2str($alb['idalbaran']) . ");"); if (!$aux) { $this->new_error_msg("Este " . FS_ALBARAN . " es un posible duplicado de\n <a href='index.php?page=compras_albaran&id=" . $alb['idalbaran'] . "'>este otro</a>.\n Si no lo es, para evitar este mensaje, simplemente modifica las observaciones."); $status = FALSE; } } } } return $status; }
public function buscar_lineas() { /// cambiamos la plantilla HTML $this->template = 'ajax/compras_lineas_facturas'; $this->buscar_lineas = $_POST['buscar_lineas']; $linea = new linea_factura_proveedor(); $this->lineas = $linea->search($this->buscar_lineas); }
private function generar_factura($albaranes) { $continuar = TRUE; $factura = new factura_proveedor(); $factura->codagente = $this->user->codagente; $factura->codalmacen = $albaranes[0]->codalmacen; $factura->coddivisa = $albaranes[0]->coddivisa; $factura->tasaconv = $albaranes[0]->tasaconv; $factura->codejercicio = $albaranes[0]->codejercicio; $factura->codpago = $albaranes[0]->codpago; $factura->codserie = $albaranes[0]->codserie; $factura->irpf = $albaranes[0]->irpf; $factura->numproveedor = $albaranes[0]->numproveedor; $factura->observaciones = $albaranes[0]->observaciones; /// comprobamos la forma de pago para saber si hay que marcar la factura como pagada $formapago = $this->forma_pago->get($factura->codpago); if ($formapago) { if ($formapago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } } /// obtenemos los datos actualizados del proveedor $proveedor = $this->proveedor->get($albaranes[0]->codproveedor); if ($proveedor) { $factura->cifnif = $proveedor->cifnif; $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $proveedor->razonsocial; } /// calculamos neto e iva foreach ($albaranes as $alb) { foreach ($alb->get_lineas() as $l) { $factura->neto += $l->pvptotal; $factura->totaliva += $l->pvptotal * $l->iva / 100; $factura->totalirpf += $l->pvptotal * $l->irpf / 100; $factura->totalrecargo += $l->pvptotal * $l->recargo / 100; } } /// 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; /// asignamos la mejor fecha posible, pero dentro del ejercicio $ejercicio = new ejercicio(); $eje0 = $ejercicio->get($factura->codejercicio); $factura->fecha = $eje0->get_best_fecha($factura->fecha); $regularizacion = new regularizacion_iva(); if (!$eje0->abierto()) { $this->new_error_msg('El ejercicio ' . $eje0->codejercicio . ' está cerrado.'); } else { if ($regularizacion->get_fecha_inside($factura->fecha)) { /* * comprobamos que la fecha de la factura no esté dentro de un periodo de * IVA regularizado. */ $this->new_error_msg('El IVA de ese periodo ya ha sido regularizado. No se pueden añadir más facturas en esa fecha.'); } else { if ($factura->save()) { foreach ($albaranes as $alb) { foreach ($alb->get_lineas() as $l) { $n = new linea_factura_proveedor(); $n->idalbaran = $alb->idalbaran; $n->idfactura = $factura->idfactura; $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()) { $continuar = FALSE; $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! "); break; } } } if ($continuar) { foreach ($albaranes as $alb) { $alb->idfactura = $factura->idfactura; $alb->ptefactura = FALSE; if (!$alb->save()) { $this->new_error_msg("¡Imposible vincular el " . FS_ALBARAN . " con la nueva factura!"); $continuar = FALSE; break; } } if ($continuar) { $this->generar_asiento($factura); } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } }
private function generar_factura() { $factura = new factura_proveedor(); $factura->cifnif = $this->albaran->cifnif; $factura->codalmacen = $this->albaran->codalmacen; $factura->coddivisa = $this->albaran->coddivisa; $factura->tasaconv = $this->albaran->tasaconv; $factura->codpago = $this->albaran->codpago; $factura->codproveedor = $this->albaran->codproveedor; $factura->codserie = $this->albaran->codserie; $factura->irpf = $this->albaran->irpf; $factura->neto = $this->albaran->neto; $factura->nombre = $this->albaran->nombre; $factura->numproveedor = $this->albaran->numproveedor; $factura->observaciones = $this->albaran->observaciones; $factura->total = $this->albaran->total; $factura->totalirpf = $this->albaran->totalirpf; $factura->totaliva = $this->albaran->totaliva; $factura->totalrecargo = $this->albaran->totalrecargo; $factura->codagente = $this->albaran->codagente; /// asignamos el ejercicio que corresponde a la fecha elegida $eje0 = $this->ejercicio->get_by_fecha($_POST['facturar']); if ($eje0) { $factura->codejercicio = $eje0->codejercicio; $factura->set_fecha_hora($_POST['facturar'], $factura->hora); } /// comprobamos la forma de pago para saber si hay que marcar la factura como pagada $forma0 = new forma_pago(); $formapago = $forma0->get($factura->codpago); if ($formapago) { if ($formapago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } } $regularizacion = new regularizacion_iva(); if (!$eje0) { $this->new_error_msg("Ejercicio no encontrado o está cerrado."); } else { if (!$eje0->abierto()) { $this->new_error_msg("El ejercicio está cerrado."); } else { if ($regularizacion->get_fecha_inside($factura->fecha)) { $this->new_error_msg("El " . FS_IVA . " de ese periodo ya ha sido regularizado. No se pueden añadir más facturas en esa fecha."); } else { if ($factura->save()) { $continuar = TRUE; foreach ($this->albaran->get_lineas() as $l) { $linea = new linea_factura_proveedor(); $linea->cantidad = $l->cantidad; $linea->codimpuesto = $l->codimpuesto; $linea->descripcion = $l->descripcion; $linea->dtopor = $l->dtopor; $linea->idalbaran = $l->idalbaran; $linea->idfactura = $factura->idfactura; $linea->irpf = $l->irpf; $linea->iva = $l->iva; $linea->pvpsindto = $l->pvpsindto; $linea->pvptotal = $l->pvptotal; $linea->pvpunitario = $l->pvpunitario; $linea->recargo = $l->recargo; $linea->referencia = $l->referencia; if (!$linea->save()) { $continuar = FALSE; $this->new_error_msg("¡Imposible guardar la línea el artículo " . $linea->referencia . "! "); break; } } if ($continuar) { $this->albaran->idfactura = $factura->idfactura; $this->albaran->ptefactura = FALSE; if ($this->albaran->save()) { $this->generar_asiento($factura); } else { $this->new_error_msg("¡Imposible vincular el " . FS_ALBARAN . " con la nueva factura!"); if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } } }
/** * Devuelve las líneas de la factura. * @return line_factura_proveedor */ public function get_lineas() { $linea = new linea_factura_proveedor(); return $linea->all_from_factura($this->idfactura); }
private function nueva_factura_proveedor() { $continuar = TRUE; $proveedor = $this->proveedor->get($_POST['proveedor']); if (!$proveedor) { $this->new_error_msg('Proveedor 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 o está cerrado.'); $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; } $factura = new factura_proveedor(); 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; } if ($continuar) { $factura->codejercicio = $ejercicio->codejercicio; $factura->codserie = $serie->codserie; $factura->set_fecha_hora($_POST['fecha'], $_POST['hora']); $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $_POST['nombre']; $factura->cifnif = $_POST['cifnif']; $factura->codalmacen = $almacen->codalmacen; $factura->codpago = $forma_pago->codpago; $factura->coddivisa = $divisa->coddivisa; $factura->tasaconv = $divisa->tasaconv_compra; if ($_POST['tasaconv'] != '') { $factura->tasaconv = floatval($_POST['tasaconv']); } $factura->codagente = $this->agente->codagente; $factura->numproveedor = $_POST['numproveedor']; $factura->observaciones = $_POST['observaciones']; if ($forma_pago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } $regularizacion = new regularizacion_iva(); if ($regularizacion->get_fecha_inside($factura->fecha)) { $this->new_error_msg("El " . FS_IVA . " de ese periodo ya ha sido regularizado. No se pueden añadir más facturas en esa fecha."); } else { if ($factura->save()) { $art0 = new articulo(); $n = floatval($_POST['numlineas']); for ($i = 0; $i < $n; $i++) { if (isset($_POST['referencia_' . $i])) { $linea = new linea_factura_proveedor(); $linea->idfactura = $factura->idfactura; $linea->descripcion = $_POST['desc_' . $i]; if (!$serie->siniva and $proveedor->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) { 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); } 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; if ($linea->irpf > $factura->irpf) { $factura->irpf = $linea->irpf; } } else { $this->new_error_msg("¡Imposible guardar la linea con referencia: " . $linea->referencia); $continuar = FALSE; } } } if ($continuar) { /// 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()) { $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); if ($_POST['redir'] == 'TRUE') { header('Location: ' . $factura->url()); } } else { $this->new_error_msg("¡Imposible actualizar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { if ($factura->delete()) { $this->new_message("Factura eliminada correctamente."); } else { $this->new_error_msg("¡Imposible eliminar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } }
private function generar_factura_proveedor($albaranes) { $continuar = TRUE; $factura = new factura_proveedor(); $factura->codalmacen = $albaranes[0]->codalmacen; $factura->coddivisa = $albaranes[0]->coddivisa; $factura->tasaconv = $albaranes[0]->tasaconv; $factura->codpago = $albaranes[0]->codpago; $factura->codserie = $albaranes[0]->codserie; $factura->irpf = $albaranes[0]->irpf; $factura->numproveedor = $albaranes[0]->numproveedor; $factura->observaciones = $albaranes[0]->observaciones; /// asignamos fecha y ejercicio usando la del albarán if ($_REQUEST['fecha'] == 'albaran') { $eje0 = $this->ejercicio->get($albaranes[0]->codejercicio); if ($eje0) { if ($eje0->abierto()) { $factura->codejercicio = $albaranes[0]->codejercicio; $factura->set_fecha_hora($albaranes[0]->fecha, $albaranes[0]->hora); } } } /** * Si se ha elegido fecha de hoy o no se ha podido usar la del albarán porque * el ejercicio estaba cerrado, asignamos ejercicio para hoy y usamos la mejor * fecha y hora. */ if (is_null($factura->codejercicio)) { $eje0 = $this->ejercicio->get_by_fecha($factura->fecha); if ($eje0) { $factura->codejercicio = $eje0->codejercicio; $factura->set_fecha_hora($factura->fecha, $factura->hora); } } /// obtenemos los datos actualizados del proveedor $proveedor = $this->proveedor->get($albaranes[0]->codproveedor); if ($proveedor) { $factura->cifnif = $proveedor->cifnif; $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $proveedor->razonsocial; } /// calculamos neto e iva foreach ($albaranes as $alb) { foreach ($alb->get_lineas() as $l) { $factura->neto += $l->pvptotal; $factura->totaliva += $l->pvptotal * $l->iva / 100; $factura->totalirpf += $l->pvptotal * $l->irpf / 100; $factura->totalrecargo += $l->pvptotal * $l->recargo / 100; } } /// 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 (!$eje0) { $this->new_error_msg("Ningún ejercicio encontrado."); } else { if (!$eje0->abierto()) { $this->new_error_msg('El ejercicio ' . $eje0->codejercicio . ' está cerrado.'); } else { if ($this->regularizacion->get_fecha_inside($factura->fecha)) { /* * comprobamos que la fecha de la factura no esté dentro de un periodo de * IVA regularizado. */ $this->new_error_msg('El IVA de ese periodo ya ha sido regularizado. No se pueden añadir más facturas en esa fecha.'); } else { if ($factura->save()) { foreach ($albaranes as $alb) { foreach ($alb->get_lineas() as $l) { $n = new linea_factura_proveedor(); $n->idalbaran = $alb->idalbaran; $n->idfactura = $factura->idfactura; $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()) { $continuar = FALSE; $this->new_error_msg("¡Imposible guardar la línea el artículo " . $n->referencia . "! "); break; } } } if ($continuar) { foreach ($albaranes as $alb) { $alb->idfactura = $factura->idfactura; $alb->ptefactura = FALSE; if (!$alb->save()) { $this->new_error_msg("¡Imposible vincular el " . FS_ALBARAN . " con la nueva factura!"); $continuar = FALSE; break; } } if ($continuar) { $this->generar_asiento_proveedor($factura); $this->total++; } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { if ($factura->delete()) { $this->new_error_msg("La factura se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar la factura!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } } }
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!"); } } }
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; } $almacen = $this->almacen->get($_POST['almacen']); if ($almacen) { $this->save_codalmacen($almacen->codalmacen); } else { $this->new_error_msg('Almacén no encontrado.'); $continuar = FALSE; } $eje0 = new ejercicio(); $ejercicio = $eje0->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->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; } $factura = new factura_proveedor(); 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; } if ($continuar) { $factura->fecha = $_POST['fecha']; $factura->hora = $_POST['hora']; $factura->codproveedor = $proveedor->codproveedor; $factura->nombre = $proveedor->nombrecomercial; $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; $factura->codagente = $this->agente->codagente; $factura->numproveedor = $_POST['numproveedor']; $factura->observaciones = $_POST['observaciones']; $factura->irpf = $serie->irpf; if ($forma_pago->genrecibos == 'Pagados') { $factura->pagada = TRUE; } foreach ($proveedor->get_direcciones() as $d) { if ($d->domfacturacion) { $factura->codproveedor = $proveedor->codproveedor; $factura->cifnif = $proveedor->cifnif; $factura->nombre = $proveedor->nombrecomercial; $factura->apartado = $d->apartado; $factura->ciudad = $d->ciudad; $factura->coddir = $d->id; $factura->codpais = $d->codpais; $factura->codpostal = $d->codpostal; $factura->direccion = $d->direccion; $factura->provincia = $d->provincia; break; } } if (is_null($factura->codproveedor)) { $this->new_error_msg("No hay ninguna dirección asociada al proveedor."); } else { if ($factura->save()) { $art0 = new articulo(); $n = floatval($_POST['numlineas']); for ($i = 0; $i < $n; $i++) { if (isset($_POST['referencia_' . $i])) { $articulo = $art0->get($_POST['referencia_' . $i]); if ($articulo) { $linea = new linea_factura_proveedor(); $linea->idfactura = $factura->idfactura; $linea->referencia = $articulo->referencia; $linea->descripcion = $_POST['desc_' . $i]; $linea->irpf = $factura->irpf; if (!$serie->siniva and $proveedor->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->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]); if ($linea->save()) { /// sumamos al stock $articulo->sum_stock($factura->codalmacen, $linea->cantidad); if ($articulo->costemedio == 0) { $articulo->costemedio = $linea->pvptotal / $linea->cantidad; $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; } } else { $this->new_error_msg("Artículo no encontrado: " . $_POST['referencia_' . $i]); $continuar = FALSE; } } } if ($continuar) { /// 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.01) { $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()) { $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); } else { $this->new_error_msg("¡Imposible actualizar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { if ($factura->delete()) { $this->new_message("Factura eliminada correctamente."); } else { $this->new_error_msg("¡Imposible eliminar la <a href='" . $factura->url() . "'>factura</a>!"); } } } else { $this->new_error_msg("¡Imposible guardar la factura!"); } } } }
public function rectificar_factura() { $serie = $this->serie->get($_POST['codserie']); if (!$serie) { $this->new_error_msg('Serie no encontrada.'); $continuar = FALSE; } $motivo = \filter_input(INPUT_POST, 'motivo'); $motivo_anulacion = $this->ncf_tipo_anulacion->get($motivo); $monto0 = \filter_input(INPUT_POST, 'monto'); $monto = $monto0 > 0 ? $monto0 * -1 : $monto0; $impuesto0 = \filter_input(INPUT_POST, 'codimpuesto'); $impuesto = $impuesto0 > 0 ? $impuesto0 * -1 : $impuesto0; $monto_total = \filter_input(INPUT_POST, 'monto_total'); $fecha = \filter_input(INPUT_POST, 'fecha'); $irpf = 0; $recargo = 0; $factura = clone $this->factura; $factura->idfactura = NULL; $factura->numero = NULL; $factura->numproveedor = $_POST['numproveedor']; $factura->codigo = NULL; $factura->idasiento = NULL; $factura->idfacturarect = $this->factura->idfactura; $factura->codigorect = $this->factura->codigo; $factura->fecha = $fecha; $factura->neto = round($monto, FS_NF0); $factura->totaliva = round($monto * ($impuesto / 100), FS_NF0) * -1; $factura->totalirpf = round($irpf, FS_NF0); $factura->totalrecargo = round($recargo, FS_NF0); $factura->total = $factura->neto + $factura->totaliva - $factura->totalirpf + $factura->totalrecargo; $factura->observaciones = ucfirst(FS_FACTURA_RECTIFICATIVA) . " por rectificación contable de la " . ucfirst(FS_FACTURA) . ": " . $factura->codigorect; if ($factura->save()) { $linea = new linea_factura_proveedor(); $linea->idfactura = $factura->idfactura; $linea->descripcion = "Rectificación de importe"; if (!$serie->siniva and $this->cliente->regimeniva != 'Exento') { $imp0 = $this->impuesto->get_by_iva($impuesto); $linea->codimpuesto = $imp0 ? $imp0->codimpuesto : NULL; $linea->iva = $impuesto > 0 ? floatval($impuesto) : floatval($impuesto * -1); $linea->recargo = floatval($recargo); } $linea->irpf = floatval($irpf); $linea->pvpunitario = $monto > 0 ? floatval($monto) : floatval($monto * -1); $linea->cantidad = -1; $linea->dtopor = 0; $linea->pvpsindto = $linea->pvpunitario * $linea->cantidad; $linea->pvptotal = floatval($monto); if ($linea->save()) { $factura->get_lineas_iva(); $this->generar_asiento($factura); $this->new_message("<a href='" . $factura->url() . "'>Factura</a> guardada correctamente con número NCF: " . $_POST['numproveedor']); $this->new_change('Factura Cliente ' . $factura->codigo, $factura->url(), TRUE); } } }
/** * Genera el asiento contable para una factura de CRÉDITO de compra. * Devuelve TRUE si el asiento se ha generado correctamente, False en caso contrario. * Si genera el asiento, este es accesible desde $this->asiento. * @param type $factura */ public function generar_asiento_compra_credito(&$factura) { $ok = FALSE; $this->asiento = FALSE; $proveedor0 = new proveedor(); $subcuenta_prov = FALSE; $proveedor = $proveedor0->get($factura->codproveedor); if ($proveedor) { /// Obtengo subcuenta proveedor $subcuenta_prov = $proveedor->get_subcuenta($factura->codejercicio); } if (!$subcuenta_prov) { $eje0 = $this->ejercicio->get($factura->codejercicio); $this->new_message("No se ha podido generar una subcuenta para el proveedor\n <a href='" . $eje0->url() . "'>¿Has importado los datos del ejercicio?</a>"); if (!$this->soloasiento) { $this->new_message("Aun así la <a href='" . $factura->url() . "'>factura</a> se ha generado correctamente,\n pero sin asiento contable."); } } else { $asiento = new asiento(); $asiento->codejercicio = $factura->codejercicio; $asiento->concepto = "Factura de compra " . $factura->codigo . " - " . $factura->nombre; $asiento->documento = $factura->codigo; $asiento->editable = TRUE; $asiento->fecha = $factura->fecha; $asiento->importe = $factura->total; $asiento->tipodocumento = "Ingreso proveedor"; if ($asiento->save()) { $asiento_correcto = TRUE; $subcuenta = new subcuenta(); /////// Acá se genera la partida con cada subcuenta $subcuenta_compras = $subcuenta->get_cuentaesp('COMPRA', $asiento->codejercicio); //////////////////////////////////////////////////////////////////////////////////////// if ($subcuenta_compras and $asiento_correcto) { $partida2 = new partida(); $partida2->idasiento = $asiento->idasiento; $partida2->concepto = $asiento->concepto; $partida2->idsubcuenta = $subcuenta_prov->idsubcuenta; $partida2->codsubcuenta = $subcuenta_prov->codsubcuenta; ///////// Proveedor compra debe //////////////////////// $partida2->debe = $factura->neto; $partida2->coddivisa = $factura->coddivisa; $partida2->tasaconv = $factura->tasaconv; $partida2->codserie = $factura->codserie; if (!$partida2->save()) { $asiento_correcto = FALSE; $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida2->codsubcuenta . "!"); } } ///////////////////////////////////////////////////////////////////////////////////////// /// generamos una partida por cada impuesto $subcuenta_iva = $subcuenta->get_cuentaesp('IVASOP', $asiento->codejercicio); foreach ($factura->get_lineas_iva() as $li) { if ($subcuenta_iva and $asiento_correcto) { $partida1 = new partida(); $partida1->idasiento = $asiento->idasiento; $partida1->concepto = $asiento->concepto; $partida1->idsubcuenta = $subcuenta_iva->idsubcuenta; $partida1->codsubcuenta = $subcuenta_iva->codsubcuenta; $partida1->debe = $li->totaliva; $partida1->idcontrapartida = $subcuenta_prov->idsubcuenta; $partida1->codcontrapartida = $subcuenta_prov->codsubcuenta; $partida1->cifnif = $proveedor->cifnif; $partida1->documento = $asiento->documento; $partida1->tipodocumento = $asiento->tipodocumento; $partida1->codserie = $factura->codserie; $partida1->factura = $factura->numero; $partida1->baseimponible = $li->neto; $partida1->iva = $li->iva; $partida1->coddivisa = $factura->coddivisa; $partida1->tasaconv = $factura->tasaconv; if (!$partida1->save()) { $asiento_correcto = FALSE; $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida1->codsubcuenta . "!"); } if ($li->recargo != 0) { $partida11 = new partida(); $partida11->idasiento = $asiento->idasiento; $partida11->concepto = $asiento->concepto; $partida11->idsubcuenta = $subcuenta_iva->idsubcuenta; $partida11->codsubcuenta = $subcuenta_iva->codsubcuenta; $partida11->debe = $li->totalrecargo; $partida11->idcontrapartida = $subcuenta_prov->idsubcuenta; $partida11->codcontrapartida = $subcuenta_prov->codsubcuenta; $partida11->cifnif = $proveedor->cifnif; $partida11->documento = $asiento->documento; $partida11->tipodocumento = $asiento->tipodocumento; $partida11->codserie = $factura->codserie; $partida11->factura = $factura->numero; $partida11->baseimponible = $li->neto; $partida11->recargo = $li->recargo; $partida11->coddivisa = $factura->coddivisa; $partida11->tasaconv = $factura->tasaconv; if (!$partida11->save()) { $asiento_correcto = FALSE; $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida11->codsubcuenta . "!"); } } } } ///////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// /// Separa las subcuentas de las facturas y crea los asientos ////////////////////////////////////////////////////////// $partida0 = new partida(); $lineas_f = new linea_factura_proveedor(); $lineas_fact = $lineas_f->all_from_factura($factura->idfactura); for ($i = 0; $i < count($lineas_fact); $i++) { $total_sub = 0; $finaliza = 0; $subcuenta1 = $lineas_fact[$i]->codsubcuenta; $idsubcuen = $lineas_fact[$i]->idsubcuenta; for ($j = 0; $j < $i; $j++) { if ($subcuenta1 == $lineas_fact[$j]->codsubcuenta) { $finaliza = 1; } } if ($finaliza == 0) { for ($k = 0; $k < count($lineas_fact); $k++) { if ($subcuenta1 == $lineas_fact[$k]->codsubcuenta) { $total_sub = $total_sub + $lineas_fact[$k]->pvptotal; } } $partida0->idasiento = $asiento->idasiento; $partida0->concepto = $asiento->concepto; $partida0->idsubcuenta = $idsubcuen; $partida0->codsubcuenta = $subcuenta1; /////////// Proveedor haber ///////// $partida0->haber = $total_sub; $partida0->coddivisa = $factura->coddivisa; $partida0->tasaconv = $factura->tasaconv; $partida0->codserie = $factura->codserie; if (!$partida0->save()) { $asiento_correcto = FALSE; $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida0->codsubcuenta . "!"); } } } ///////////////////////////////////////////////////////// //////////////////////////////////////////////////////// ///////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////// /// ¿IRPF? if ($factura->totalirpf != 0 and $asiento_correcto) { $subcuenta_irpf = $subcuenta->get_cuentaesp('IRPFPR', $asiento->codejercicio); if ($subcuenta_irpf) { $partida3 = new partida(); $partida3->idasiento = $asiento->idasiento; $partida3->concepto = $asiento->concepto; $partida3->idsubcuenta = $subcuenta_irpf->idsubcuenta; $partida3->codsubcuenta = $subcuenta_irpf->codsubcuenta; $partida3->haber = $factura->totalirpf; $partida3->coddivisa = $factura->coddivisa; $partida3->tasaconv = $factura->tasaconv; $partida3->codserie = $factura->codserie; if (!$partida3->save()) { $asiento_correcto = FALSE; $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida3->codsubcuenta . "!"); } } } if ($asiento_correcto) { $factura->idasiento = $asiento->idasiento; if ($factura->save()) { $ok = TRUE; $this->asiento = $asiento; } else { $this->new_error_msg("¡Imposible añadir el asiento a la factura!"); } } else { if ($asiento->delete()) { $this->new_message("El asiento se ha borrado."); } else { $this->new_error_msg("¡Imposible borrar el asiento!"); } } } } return $ok; }