public function get_partidas()
 {
     if (isset($this->idasiento)) {
         $partida = new partida();
         return $partida->all_from_asiento($this->idasiento);
     } else {
         return FALSE;
     }
 }
 private function libro_diario_csv($codeje)
 {
     $this->template = FALSE;
     header("content-type:application/csv;charset=UTF-8");
     header("Content-Disposition: attachment; filename=\"diario.csv\"");
     echo "asiento;fecha;subcuenta;concepto;debe;haber\n";
     $partida = new partida();
     $offset = 0;
     $partidas = $partida->full_from_ejercicio($codeje, $offset);
     while (count($partidas) > 0) {
         foreach ($partidas as $par) {
             echo $par['numero'] . ';' . $par['fecha'] . ';' . $par['codsubcuenta'] . ';' . $par['concepto'] . ';' . $par['debe'] . ';' . $par['haber'] . "\n";
             $offset++;
         }
         $partidas = $partida->full_from_ejercicio($codeje, $offset);
     }
 }
Example #3
0
 public function get_totales()
 {
     $part = new \partida();
     return $part->totales_from_subcuenta($this->idsubcuenta);
 }
Example #4
0
 public function full_from_subcuenta($id)
 {
     $plist = array();
     $sql = "SELECT a.numero,a.fecha,p.idpartida FROM co_asientos a, co_partidas p" . " WHERE a.idasiento = p.idasiento AND p.idsubcuenta = " . $this->var2str($id) . " ORDER BY a.numero ASC, p.idpartida ASC";
     $saldo = 0;
     $sum_debe = 0;
     $sum_haber = 0;
     $partida = new partida();
     $offset = 0;
     $data = $this->db->select_limit($sql, 100, $offset);
     while ($data) {
         foreach ($data as $po) {
             $aux = $partida->get($po['idpartida']);
             if ($aux) {
                 $aux->numero = intval($po['numero']);
                 $aux->fecha = Date('d-m-Y', strtotime($po['fecha']));
                 $saldo += $aux->debe - $aux->haber;
                 $sum_debe += $aux->debe;
                 $sum_haber += $aux->haber;
                 $aux->saldo = $saldo;
                 $aux->sum_debe = $sum_debe;
                 $aux->sum_haber = $sum_haber;
                 $plist[] = $aux;
             }
             $offset++;
         }
         $data = $this->db->select_limit($sql, 100, $offset);
     }
     return $plist;
 }
 private function nuevo_asiento_pago($importe, $coddivisa, $tasaconv)
 {
     $asiento = new asiento();
     $asiento->concepto = 'Pago facturas de ' . $this->proveedor->nombre;
     $asiento->editable = FALSE;
     $asiento->importe = $importe;
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($this->today());
     if ($ejercicio) {
         $asiento->codejercicio = $ejercicio->codejercicio;
     }
     $subcuenta_pro = $this->proveedor->get_subcuenta($ejercicio->codejercicio);
     $subc0 = new subcuenta();
     $subcaja = $subc0->get_cuentaesp('CAJA', $ejercicio->codejercicio);
     if (!$ejercicio) {
         $this->new_error_msg('Ningún ejercico encontrado.');
     } else {
         if (!$ejercicio->abierto()) {
             $this->new_error_msg('El ejercicio ' . $ejercicio->codejercicio . ' está cerrado.');
         } else {
             if (!$subcuenta_pro) {
                 $this->new_message("No se ha podido generar una subcuenta para el proveedor " . "<a href='" . $ejercicio->url() . "'>¿Has importado los datos del ejercicio?</a>");
             } else {
                 if (!$subcaja) {
                     $this->new_message("No se ha encontrado la subcuenta de caja " . "<a href='" . $ejercicio->url() . "'>¿Has importado los datos del ejercicio?</a>");
                 } else {
                     if ($asiento->save()) {
                         $partida1 = new partida();
                         $partida1->idasiento = $asiento->idasiento;
                         $partida1->concepto = $asiento->concepto;
                         $partida1->idsubcuenta = $subcuenta_pro->idsubcuenta;
                         $partida1->codsubcuenta = $subcuenta_pro->codsubcuenta;
                         $partida1->debe = $importe;
                         $partida1->coddivisa = $coddivisa;
                         $partida1->tasaconv = $tasaconv;
                         $partida1->codserie = $this->codserie;
                         $partida1->save();
                         $partida2 = new partida();
                         $partida2->idasiento = $asiento->idasiento;
                         $partida2->concepto = $asiento->concepto;
                         $partida2->idsubcuenta = $subcaja->idsubcuenta;
                         $partida2->codsubcuenta = $subcaja->codsubcuenta;
                         $partida2->haber = $importe;
                         $partida2->coddivisa = $coddivisa;
                         $partida2->tasaconv = $tasaconv;
                         $partida2->codserie = $this->codserie;
                         $partida2->save();
                         $this->new_message('<a href="' . $asiento->url() . '">Asiento de pago</a> generado.');
                     } else {
                         $this->new_error_msg('Error al guardar el asiento.');
                     }
                 }
             }
         }
     }
     return $asiento;
 }
 protected function private_core()
 {
     $this->ppage = $this->page->get('contabilidad_asientos');
     $this->asiento = new asiento();
     $this->concepto = new concepto_partida();
     $this->divisa = new divisa();
     $this->ejercicio = new ejercicio();
     $this->impuesto = new impuesto();
     $this->lineas = array();
     $this->subcuenta = new subcuenta();
     if (isset($_POST['fecha']) and isset($_POST['query'])) {
         $this->new_search();
     } else {
         if (isset($_POST['fecha']) and isset($_POST['concepto']) and isset($_POST['divisa'])) {
             $continuar = TRUE;
             $eje0 = $this->ejercicio->get_by_fecha($_POST['fecha']);
             if (!$eje0) {
                 $this->new_error_msg('Ejercicio no encontrado.');
                 $continuar = FALSE;
             }
             $div0 = $this->divisa->get($_POST['divisa']);
             if (!$div0) {
                 $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="' . $this->ppage->url() . '">asientos</a>
            para ver si el asiento se ha guardado correctamente.');
                 $continuar = FALSE;
             }
             if ($continuar) {
                 $this->asiento->codejercicio = $eje0->codejercicio;
                 $this->asiento->idconcepto = $_POST['idconceptopar'];
                 $this->asiento->concepto = $_POST['concepto'];
                 $this->asiento->fecha = $_POST['fecha'];
                 $this->asiento->importe = floatval($_POST['importe']);
                 if ($this->asiento->save()) {
                     $numlineas = intval($_POST['numlineas']);
                     for ($i = 1; $i <= $numlineas; $i++) {
                         if (isset($_POST['codsubcuenta_' . $i])) {
                             if ($_POST['codsubcuenta_' . $i] != '' and $continuar) {
                                 $sub0 = $this->subcuenta->get_by_codigo($_POST['codsubcuenta_' . $i], $eje0->codejercicio);
                                 if ($sub0) {
                                     $partida = new partida();
                                     $partida->idasiento = $this->asiento->idasiento;
                                     $partida->coddivisa = $div0->coddivisa;
                                     $partida->tasaconv = $div0->tasaconv;
                                     $partida->idsubcuenta = $sub0->idsubcuenta;
                                     $partida->codsubcuenta = $sub0->codsubcuenta;
                                     $partida->debe = floatval($_POST['debe_' . $i]);
                                     $partida->haber = floatval($_POST['haber_' . $i]);
                                     $partida->idconcepto = $this->asiento->idconcepto;
                                     $partida->concepto = $this->asiento->concepto;
                                     $partida->documento = $this->asiento->documento;
                                     $partida->tipodocumento = $this->asiento->tipodocumento;
                                     if (isset($_POST['codcontrapartida_' . $i])) {
                                         if ($_POST['codcontrapartida_' . $i] != '') {
                                             $subc1 = $this->subcuenta->get_by_codigo($_POST['codcontrapartida_' . $i], $eje0->codejercicio);
                                             if ($subc1) {
                                                 $partida->idcontrapartida = $subc1->idsubcuenta;
                                                 $partida->codcontrapartida = $subc1->codsubcuenta;
                                                 $partida->cifnif = $_POST['cifnif_' . $i];
                                                 $partida->iva = floatval($_POST['iva_' . $i]);
                                                 $partida->baseimponible = floatval($_POST['baseimp_' . $i]);
                                             } else {
                                                 $this->new_error_msg('Subcuenta ' . $_POST['codcontrapartida_' . $i] . ' no encontrada.');
                                                 $continuar = FALSE;
                                             }
                                         }
                                     }
                                     if (!$partida->save()) {
                                         $this->new_error_msg('Imposible guardar la partida de la subcuenta ' . $_POST['codsubcuenta_' . $i] . '.');
                                         $continuar = FALSE;
                                     }
                                 } else {
                                     $this->new_error_msg('Subcuenta ' . $_POST['codsubcuenta_' . $i] . ' no encontrada.');
                                     $continuar = FALSE;
                                 }
                             }
                         }
                     }
                     if ($continuar) {
                         $this->asiento->concepto = '';
                         $this->new_message("<a href='" . $this->asiento->url() . "'>Asiento</a> guardado correctamente!");
                         $this->new_change('Asiento ' . $this->asiento->numero, $this->asiento->url(), TRUE);
                         if ($_POST['redir'] == 'TRUE') {
                             header('Location: ' . $this->asiento->url());
                         }
                     } else {
                         if ($this->asiento->delete()) {
                             $this->new_error_msg("¡Error en alguna de las partidas! Se ha borrado el asiento.");
                         } else {
                             $this->new_error_msg("¡Error en alguna de las partidas! Además ha sido imposible borrar el asiento.");
                         }
                     }
                 } else {
                     $this->new_error_msg("¡Imposible guardar el asiento!");
                 }
             }
         } else {
             if (isset($_GET['copy'])) {
                 $copia = $this->asiento->get($_GET['copy']);
                 if ($copia) {
                     $this->asiento->concepto = $copia->concepto;
                     foreach ($copia->get_partidas() as $part) {
                         $subc = $this->subcuenta->get($part->idsubcuenta);
                         if ($subc) {
                             $part->desc_subcuenta = $subc->descripcion;
                             $part->saldo = $subc->saldo;
                         } else {
                             $part->desc_subcuenta = '';
                             $part->saldo = 0;
                         }
                         $this->lineas[] = $part;
                     }
                 } else {
                     $this->new_error_msg('Asiento no encontrado.');
                 }
             }
         }
     }
 }
Example #7
0
 public function get_partidas()
 {
     $partida = new partida();
     return $partida->all_from_asiento($this->idasiento);
 }
Example #8
0
 /**
  * 
  * @param recibo_cliente $recibo
  * @param pago_recibo_cliente $pago
  * @param ejercicio $ejercicio
  * @param subcuenta $subcli
  * @return type
  */
 private function nuevo_asiento_pago(&$recibo, &$pago, &$ejercicio, &$subcli)
 {
     $asiento = new asiento();
     $asiento->fecha = $pago->fecha;
     $asiento->codejercicio = $ejercicio->codejercicio;
     $asiento->editable = FALSE;
     $asiento->importe = $recibo->importe;
     if ($pago->tipo == 'Pago') {
         $asiento->concepto = 'Cobro recibo ' . $recibo->codigo . ' - ' . $recibo->nombrecliente;
     } else {
         $asiento->concepto = $pago->tipo . ' recibo ' . $recibo->codigo . ' - ' . $recibo->nombrecliente;
     }
     if (!$ejercicio->abierto()) {
         $this->new_error_msg('El ejercicio ' . $ejercicio->codejercicio . ' está cerrado.');
     } else {
         if ($asiento->save()) {
             $partida1 = new partida();
             $partida1->idasiento = $asiento->idasiento;
             $partida1->concepto = $asiento->concepto;
             $partida1->idsubcuenta = $subcli->idsubcuenta;
             $partida1->codsubcuenta = $subcli->codsubcuenta;
             $partida1->haber = $recibo->importe;
             $partida1->coddivisa = $recibo->coddivisa;
             $partida1->tasaconv = $recibo->tasaconv;
             $partida1->codserie = $recibo->codserie;
             $partida1->save();
             $partida2 = new partida();
             $partida2->idasiento = $asiento->idasiento;
             $partida2->concepto = $asiento->concepto;
             $partida2->idsubcuenta = $pago->idsubcuenta;
             $partida2->codsubcuenta = $pago->codsubcuenta;
             $partida2->debe = $recibo->importe;
             $partida2->coddivisa = $recibo->coddivisa;
             $partida2->tasaconv = $recibo->tasaconv;
             $partida2->codserie = $recibo->codserie;
             $partida2->save();
         } else {
             $this->new_error_msg('Error al guardar el asiento.');
         }
     }
     return $asiento->idasiento;
 }
Example #9
0
 /**
  * Genera el asiento contable para una factura de venta.
  * 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_venta(&$factura)
 {
     $ok = FALSE;
     $this->asiento = FALSE;
     $cliente0 = new cliente();
     $subcuenta_cli = FALSE;
     /// obtenemos las tasas de conversión, para las ocasiones en que la factura está en otra divisa
     $tasaconv = 1;
     $tasaconv2 = $factura->tasaconv;
     if ($factura->coddivisa != $this->empresa->coddivisa) {
         $div0 = new divisa();
         $divisa = $div0->get($this->empresa->coddivisa);
         if ($divisa) {
             $tasaconv = $divisa->tasaconv / $factura->tasaconv;
             $tasaconv2 = $divisa->tasaconv_compra;
         }
     }
     /// obtenemos el clientes y su subcuenta
     $cliente = $cliente0->get($factura->codcliente);
     if ($cliente) {
         $subcuenta_cli = $cliente->get_subcuenta($factura->codejercicio);
     }
     if (!$subcuenta_cli) {
         $eje0 = $this->ejercicio->get($factura->codejercicio);
         $this->new_message("No se ha podido generar una subcuenta para el cliente\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;
         if ($factura->idfacturarect) {
             $asiento->concepto = ucfirst(FS_FACTURA_RECTIFICATIVA) . " de " . $factura->codigo . " (ventas) - " . $factura->nombrecliente;
         } else {
             $asiento->concepto = "Factura de venta " . $factura->codigo . " - " . $factura->nombrecliente;
         }
         $asiento->documento = $factura->codigo;
         $asiento->editable = FALSE;
         $asiento->fecha = $factura->fecha;
         $asiento->importe = abs($factura->total * $tasaconv);
         $asiento->tipodocumento = 'Factura de cliente';
         if ($asiento->save()) {
             $asiento_correcto = TRUE;
             $subcuenta = new subcuenta();
             $partida0 = new partida();
             $partida0->idasiento = $asiento->idasiento;
             $partida0->concepto = $asiento->concepto;
             $partida0->idsubcuenta = $subcuenta_cli->idsubcuenta;
             $partida0->codsubcuenta = $subcuenta_cli->codsubcuenta;
             $partida0->debe = $factura->total * $tasaconv;
             $partida0->coddivisa = $this->empresa->coddivisa;
             $partida0->tasaconv = $tasaconv2;
             $partida0->codserie = $factura->codserie;
             if (!$partida0->save()) {
                 $asiento_correcto = FALSE;
                 $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida0->codsubcuenta . "!");
             }
             /// generamos una partida por cada impuesto
             foreach ($factura->get_lineas_iva() as $li) {
                 $subcuenta_iva = FALSE;
                 /// ¿El impuesto tiene una subcuenta específica?
                 if (isset($this->impuestos[$li->codimpuesto])) {
                     if ($this->impuestos[$li->codimpuesto]->codsubcuentarep) {
                         $subcuenta_iva = $subcuenta->get_by_codigo($this->impuestos[$li->codimpuesto]->codsubcuentarep, $asiento->codejercicio);
                     }
                 }
                 if (!$subcuenta_iva) {
                     $subcuenta_iva = $subcuenta->get_cuentaesp('IVAREP', $asiento->codejercicio);
                 }
                 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->haber = $li->totaliva * $tasaconv;
                     $partida1->idcontrapartida = $subcuenta_cli->idsubcuenta;
                     $partida1->codcontrapartida = $subcuenta_cli->codsubcuenta;
                     $partida1->cifnif = $cliente->cifnif;
                     $partida1->documento = $asiento->documento;
                     $partida1->tipodocumento = $asiento->tipodocumento;
                     $partida1->codserie = $factura->codserie;
                     $partida1->factura = $factura->numero;
                     $partida1->baseimponible = $li->neto * $tasaconv;
                     $partida1->iva = $li->iva;
                     $partida1->coddivisa = $this->empresa->coddivisa;
                     $partida1->tasaconv = $tasaconv2;
                     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->haber = $li->totalrecargo * $tasaconv;
                         $partida11->idcontrapartida = $subcuenta_cli->idsubcuenta;
                         $partida11->codcontrapartida = $subcuenta_cli->codsubcuenta;
                         $partida11->cifnif = $cliente->cifnif;
                         $partida11->documento = $asiento->documento;
                         $partida11->tipodocumento = $asiento->tipodocumento;
                         $partida11->codserie = $factura->codserie;
                         $partida11->factura = $factura->numero;
                         $partida11->baseimponible = $li->neto * $tasaconv;
                         $partida11->recargo = $li->recargo;
                         $partida11->coddivisa = $this->empresa->coddivisa;
                         $partida11->tasaconv = $tasaconv2;
                         if (!$partida11->save()) {
                             $asiento_correcto = FALSE;
                             $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida11->codsubcuenta . "!");
                         }
                     }
                 } else {
                     if (!$subcuenta_iva) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg('No se encuentra la subcuenta de ' . FS_IVA);
                     }
                 }
             }
             $subcuenta_ventas = $subcuenta->get_cuentaesp('VENTAS', $asiento->codejercicio);
             if ($subcuenta_ventas and $asiento_correcto) {
                 $partida2 = new partida();
                 $partida2->idasiento = $asiento->idasiento;
                 $partida2->concepto = $asiento->concepto;
                 $partida2->idsubcuenta = $subcuenta_ventas->idsubcuenta;
                 $partida2->codsubcuenta = $subcuenta_ventas->codsubcuenta;
                 $partida2->haber = $factura->neto * $tasaconv;
                 $partida2->coddivisa = $this->empresa->coddivisa;
                 $partida2->tasaconv = $tasaconv2;
                 $partida2->codserie = $factura->codserie;
                 if (!$partida2->save()) {
                     $asiento_correcto = FALSE;
                     $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida2->codsubcuenta . "!");
                 }
             } else {
                 if (!$subcuenta_ventas) {
                     $asiento_correcto = FALSE;
                     $this->new_error_msg('No se encuentra la subcuenta de ventas');
                 }
             }
             /// ¿IRPF?
             if ($factura->totalirpf != 0 and $asiento_correcto) {
                 $subcuenta_irpf = $subcuenta->get_cuentaesp('IRPF', $asiento->codejercicio);
                 if (!$subcuenta_irpf) {
                     $subcuenta_irpf = $subcuenta->get_by_codigo('4730000000', $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->debe = $factura->totalirpf * $tasaconv;
                     $partida3->coddivisa = $this->empresa->coddivisa;
                     $partida3->tasaconv = $tasaconv2;
                     $partida3->codserie = $factura->codserie;
                     if (!$partida3->save()) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida3->codsubcuenta . "!");
                     }
                 } else {
                     if (!$subcuenta_irpf) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg('No se encuentra la subcuenta de ' . FS_IRPF);
                     }
                 }
             }
             /// comprobamos si algún artículo tiene una subcuenta asociada
             if ($asiento_correcto) {
                 $partidaA = new partida();
                 $partidaA->idasiento = $asiento->idasiento;
                 $partidaA->concepto = $asiento->concepto;
                 $partidaA->coddivisa = $this->empresa->coddivisa;
                 $partidaA->tasaconv = $tasaconv2;
                 /// importe a restar a la partida2
                 $restar = 0;
                 /**
                  * Para cada artículo de la factura, buscamos su subcuenta de compra o compra con irpf
                  */
                 $ap = new articulo_propiedad();
                 foreach ($factura->get_lineas() as $lin) {
                     $subcart = FALSE;
                     $aprops = $ap->array_get($lin->referencia);
                     if (isset($aprops['codsubcuentaventa'])) {
                         $subcart = $subcuenta->get_by_codigo($aprops['codsubcuentaventa'], $factura->codejercicio);
                     }
                     if (!$subcart) {
                         /// no hay / no se encuentra ninguna subcuenta asignada al artículo
                     } else {
                         if ($subcart->idsubcuenta != $subcuenta_ventas->idsubcuenta) {
                             if (is_null($partidaA->idsubcuenta)) {
                                 $partidaA->idsubcuenta = $subcart->idsubcuenta;
                                 $partidaA->codsubcuenta = $subcart->codsubcuenta;
                                 $partidaA->haber = $lin->pvptotal * $tasaconv;
                             } else {
                                 if ($partidaA->idsubcuenta == $subcart->idsubcuenta) {
                                     $partidaA->haber += $lin->pvptotal * $tasaconv;
                                 } else {
                                     $partidaA->haber = round($partidaA->haber, FS_NF0);
                                     $restar += $partidaA->haber;
                                     if (!$partidaA->save()) {
                                         $asiento_correcto = FALSE;
                                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta del artículo " . $lin->referencia . "!");
                                     }
                                     $partidaA = new partida();
                                     $partidaA->idasiento = $asiento->idasiento;
                                     $partidaA->concepto = $asiento->concepto;
                                     $partidaA->idsubcuenta = $subcart->idsubcuenta;
                                     $partidaA->codsubcuenta = $subcart->codsubcuenta;
                                     $partidaA->haber = $lin->pvptotal * $tasaconv;
                                     $partidaA->coddivisa = $this->empresa->coddivisa;
                                     $partidaA->tasaconv = $tasaconv2;
                                 }
                             }
                         }
                     }
                 }
                 if ($partidaA->idsubcuenta and $partidaA->codsubcuenta) {
                     $partidaA->haber = round($partidaA->haber, FS_NF0);
                     $restar += $partidaA->haber;
                     if ($partidaA->save()) {
                         $partida2->haber -= $restar;
                         $partida2->save();
                     } else {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta del artículo " . $lin->referencia . "!");
                     }
                 }
             }
             if ($asiento_correcto) {
                 /// si es una factura rectificativa, invertimos los importes
                 if ($factura->idfacturarect) {
                     $this->invertir_asiento($asiento);
                 }
                 $factura->idasiento = $asiento->idasiento;
                 if ($factura->save()) {
                     $ok = $this->check_asiento($asiento);
                     if (!$ok) {
                         $this->new_error_msg('El asiento está descuadrado.');
                     }
                     $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!");
                 }
             }
         } else {
             $this->new_error_msg("¡Imposible guardar el asiento!");
         }
     }
     return $ok;
 }
 /**
  * Generamos un asiento de pago del asiento seleccionado.
  * @param asiento $asiento
  */
 public function generar_asiento_pago(&$asiento, $codpago = FALSE, $fecha = FALSE, $subclipro = FALSE)
 {
     $nasientop = new asiento();
     $nasientop->editable = FALSE;
     $nasientop->importe = $asiento->importe;
     $nasientop->tipodocumento = $asiento->tipodocumento;
     $nasientop->documento = $asiento->documento;
     if ($asiento->tipodocumento == 'Factura de cliente') {
         $nasientop->concepto = 'Cobro ' . $asiento->concepto;
     } else {
         $nasientop->concepto = 'Pago ' . $asiento->concepto;
     }
     if ($fecha) {
         $nasientop->fecha = $fecha;
     }
     /// asignamos la mejor fecha
     $eje = $this->ejercicio->get_by_fecha($nasientop->fecha);
     if ($eje) {
         $nasientop->codejercicio = $eje->codejercicio;
         $nasientop->fecha = $eje->get_best_fecha($nasientop->fecha);
     }
     /// necesitamos la subcuenta de caja
     $subcaja = $this->subcuenta->get_cuentaesp('CAJA', $nasientop->codejercicio);
     if ($codpago) {
         /**
          * Si nos han pasado una forma de pago, intentamos buscar la subcuenta
          * asociada a la cuenta bancaria.
          */
         $formap = $this->forma_pago->get($codpago);
         if ($formap) {
             if ($formap->codcuenta) {
                 $cuentab = $this->cuenta_banco->get($formap->codcuenta);
                 if ($cuentab) {
                     $subc = $this->subcuenta->get_by_codigo($cuentab->codsubcuenta, $nasientop->codejercicio);
                     if ($subc) {
                         $subcaja = $subc;
                     }
                 }
             }
         }
     }
     if (!$eje) {
         $this->new_error_msg('Ningún ejercico encontrado.');
     } else {
         if (!$eje->abierto()) {
             $this->new_error_msg('El ejercicio ' . $eje->codejercicio . ' está cerrado.');
         } else {
             if (!$subcaja) {
                 $this->new_error_msg('No se ha encontrado ninguna subcuenta de caja para el ejercicio ' . $eje->codejercicio . '. <a href="' . $eje->url() . '">¿Has importado los datos del ejercicio?</a>');
             } else {
                 if ($nasientop->save()) {
                     /// buscamos la partida que coincida con el importe
                     $encontrada = FALSE;
                     foreach ($asiento->get_partidas() as $par) {
                         if ($nasientop->floatcmp(abs($par->debe), $nasientop->importe, FS_NF0)) {
                             if (!$subclipro) {
                                 $subclipro = $this->subcuenta->get_by_codigo($par->codsubcuenta, $nasientop->codejercicio);
                             }
                             if ($subclipro) {
                                 $partida1 = new partida();
                                 $partida1->idasiento = $nasientop->idasiento;
                                 $partida1->concepto = $nasientop->concepto;
                                 $partida1->idsubcuenta = $subclipro->idsubcuenta;
                                 $partida1->codsubcuenta = $subclipro->codsubcuenta;
                                 $partida1->haber = $par->debe;
                                 $partida1->coddivisa = $par->coddivisa;
                                 $partida1->tasaconv = $par->tasaconv;
                                 $partida1->codserie = $par->codserie;
                                 $partida1->save();
                                 $partida2 = new partida();
                                 $partida2->idasiento = $nasientop->idasiento;
                                 $partida2->concepto = $nasientop->concepto;
                                 $partida2->idsubcuenta = $subcaja->idsubcuenta;
                                 $partida2->codsubcuenta = $subcaja->codsubcuenta;
                                 $partida2->debe = $par->debe;
                                 $partida2->coddivisa = $par->coddivisa;
                                 $partida2->tasaconv = $par->tasaconv;
                                 $partida2->codserie = $par->codserie;
                                 $partida2->save();
                                 $encontrada = TRUE;
                             } else {
                                 $this->new_error_msg('No se ha encontrado la subcuenta ' . $par->codsubcuenta . ' en el ejercicio ' . $nasientop->codejercicio);
                                 $nasientop->delete();
                             }
                             break;
                         } else {
                             if ($nasientop->floatcmp(abs($par->haber), $nasientop->importe, FS_NF0)) {
                                 if (!$subclipro) {
                                     $subclipro = $this->subcuenta->get_by_codigo($par->codsubcuenta, $nasientop->codejercicio);
                                 }
                                 if ($subclipro) {
                                     $partida1 = new partida();
                                     $partida1->idasiento = $nasientop->idasiento;
                                     $partida1->concepto = $nasientop->concepto;
                                     $partida1->idsubcuenta = $subclipro->idsubcuenta;
                                     $partida1->codsubcuenta = $subclipro->codsubcuenta;
                                     $partida1->debe = $par->haber;
                                     $partida1->coddivisa = $par->coddivisa;
                                     $partida1->tasaconv = $par->tasaconv;
                                     $partida1->codserie = $par->codserie;
                                     $partida1->save();
                                     $partida2 = new partida();
                                     $partida2->idasiento = $nasientop->idasiento;
                                     $partida2->concepto = $nasientop->concepto;
                                     $partida2->idsubcuenta = $subcaja->idsubcuenta;
                                     $partida2->codsubcuenta = $subcaja->codsubcuenta;
                                     $partida2->haber = $par->haber;
                                     $partida2->coddivisa = $par->coddivisa;
                                     $partida2->tasaconv = $par->tasaconv;
                                     $partida2->codserie = $par->codserie;
                                     $partida2->save();
                                     $encontrada = TRUE;
                                 } else {
                                     $this->new_error_msg('No se ha encontrado la subcuenta ' . $par->codsubcuenta . ' en el ejercicio ' . $nasientop->codejercicio);
                                     $nasientop->delete();
                                 }
                                 break;
                             }
                         }
                     }
                     if (!$encontrada) {
                         $this->new_error_msg('No se ha encontrado la partida necesaria para generar el asiento ' . $nasientop->concepto);
                         $nasientop->delete();
                         $nasientop->idasiento = NULL;
                     }
                 } else {
                     $this->new_error_msg('Error al guardar el asiento de pago.');
                 }
             }
         }
     }
     return $nasientop->idasiento;
 }
 public function generar_asiento_faltante(&$faltante, $ejercicio)
 {
     $ok = FALSE;
     $this->asiento = FALSE;
     $tipo = $faltante->estado;
     $conductor0 = new distribucion_conductores();
     $subcuenta_conductor = FALSE;
     $concepto = $tipo == 'pendiente' ? "Faltante " : "Pago Faltante ";
     $conductor = $conductor0->get($faltante->idempresa, $faltante->conductor);
     if ($conductor) {
         $subcuenta_conductor = $this->get_subcuenta($ejercicio);
     }
     if (!$subcuenta_conductor) {
         $eje0 = $this->ejercicio->get($ejercicio);
         return "No se ha podido generar una subcuenta para el conductor <a href='" . $eje0->url() . "'>¿Has importado los datos del ejercicio?</a>";
         if (!$this->soloasiento) {
             return "Aun así el <a href='" . $faltante->url() . "'>faltante</a> se ha generado correctamente, pero sin asiento contable.";
         }
     } else {
         $asiento = new asiento();
         $asiento->codejercicio = $ejercicio;
         $asiento->concepto = $concepto . $faltante->idrecibo . " - " . $faltante->nombreconductor;
         $asiento->documento = $faltante->idrecibo;
         $asiento->editable = FALSE;
         $asiento->fecha = $faltante->fecha;
         $asiento->importe = $faltante->importe;
         $asiento->tipodocumento = $concepto . ' Liquidacion';
         if ($asiento->save()) {
             $asiento_correcto = TRUE;
             $subcuenta = new subcuenta();
             $partida0 = new partida();
             $partida0->idasiento = $asiento->idasiento;
             $partida0->concepto = $asiento->concepto;
             $partida0->idsubcuenta = $subcuenta_conductor->idsubcuenta;
             $partida0->codsubcuenta = $subcuenta_conductor->codsubcuenta;
             if ($tipo == 'pendiente') {
                 $partida0->debe = $faltante->importe;
             } elseif ($tipo == 'pagado') {
                 $partida0->haber = $faltante->importe;
             }
             $partida0->coddivisa = $faltante->coddivisa;
             $partida0->tasaconv = 1;
             $partida0->codserie = NULL;
             if (!$partida0->save()) {
                 $asiento_correcto = FALSE;
             }
             if ($asiento_correcto) {
                 $faltante->idasiento = $asiento->idasiento;
                 $faltante->idsubcuenta = $partida0->idsubcuenta;
                 $faltante->codcuenta = $partida0->codsubcuenta;
                 if ($faltante->save()) {
                     $ok = TRUE;
                     $this->asiento = $asiento;
                 } else {
                     return "¡Imposible añadir el asiento al faltante!";
                 }
             } else {
                 if ($asiento->delete()) {
                     return "El asiento se ha borrado.";
                 } else {
                     return "¡Imposible borrar el asiento!";
                 }
             }
         } else {
             return "¡Imposible guardar el asiento!";
         }
     }
     return $ok;
 }
Example #12
0
if (!$partidas_iniciadas->isEmpty()) {
    echo "<h1>Partidas pendientes</h1>";
    $actual = $partidas_iniciadas->iterate();
    echo "<form action='/' method='post'>";
    echo "<div class='radios'>";
    while ($actual) {
        $numeroPartida = $partidas_iniciadas->getCurrent()->getId();
        echo "<label>Partida_{$numeroPartida}</label>";
        echo "<input type='radio' name='partida_ini' value='{$numeroPartida}' checked></input><br>";
        $actual = $partidas_iniciadas->iterate();
    }
    echo "</div>";
    echo "<input type='submit' class='submit' name='recuperar' value='recuperar'></input><br>";
    echo "</form>";
}
$partidas_acabadas = partida::getFinalizadas($usuario->getID());
if (!$partidas_acabadas->isEmpty()) {
    echo "<h1>Historico partidas</h1>";
    $actual = $partidas_acabadas->iterate();
    echo "<form action='/' method='post'>";
    echo "<div class='checks'>";
    while ($actual) {
        $numeroPartida = $partidas_acabadas->getCurrent()->getId();
        echo "<label>Partida_{$numeroPartida}</label>";
        echo "<input type='checkbox' name='partida_fin[{$numeroPartida}]' value='{$numeroPartida}'></input><br>";
        $actual = $partidas_acabadas->iterate();
    }
    echo "</div>";
    echo "<input type='submit' class='submit' name='resumenxml' value='ver resumen'></input><br>";
    echo "</form>";
}
 private function nuevo_asiento_modelo130()
 {
     $continuar = TRUE;
     $eje0 = $this->ejercicio->get_by_fecha($_POST['fecha']);
     if (!$eje0) {
         $this->new_error_msg('Ejercicio no encontrado.');
         $continuar = FALSE;
     }
     $div0 = $this->divisa->get($_POST['divisa']);
     if (!$div0) {
         $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="' . $this->ppage->url() . '">asientos</a>
            para ver si el asiento se ha guardado correctamente.');
         $continuar = FALSE;
     }
     if ($continuar) {
         $meses = array('', 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre');
         $codcaja = '5700000000';
         if (isset($_POST['banco130'])) {
             if ($_POST['banco130'] != '') {
                 $codcaja = $_POST['banco130'];
             }
         }
         /// asiento de cuota
         $asiento = new asiento();
         $asiento->codejercicio = $eje0->codejercicio;
         $asiento->concepto = 'Pago modelo 130 ' . $meses[intval(date('m', strtotime($_POST['fecha'])))];
         $asiento->fecha = $_POST['fecha'];
         $asiento->importe = floatval($_POST['modelo130']);
         if ($asiento->save()) {
             $subc = $this->subcuenta->get_by_codigo('4730000000', $eje0->codejercicio);
             if ($subc) {
                 $partida = new partida();
                 $partida->idasiento = $asiento->idasiento;
                 $partida->concepto = $asiento->concepto;
                 $partida->idsubcuenta = $subc->idsubcuenta;
                 $partida->codsubcuenta = $subc->codsubcuenta;
                 $partida->debe = $asiento->importe;
                 $partida->save();
             } else {
                 $this->new_error_msg('Subcuenta 4730000000 no encontrada.');
                 $continuar = FALSE;
             }
             $subc = $this->subcuenta->get_by_codigo($codcaja, $eje0->codejercicio);
             if ($subc) {
                 $partida = new partida();
                 $partida->idasiento = $asiento->idasiento;
                 $partida->concepto = $asiento->concepto;
                 $partida->idsubcuenta = $subc->idsubcuenta;
                 $partida->codsubcuenta = $subc->codsubcuenta;
                 $partida->haber = $asiento->importe;
                 $partida->save();
             } else {
                 $this->new_error_msg('Subcuenta ' . $codcaja . ' no encontrada.');
                 $continuar = FALSE;
             }
             if ($continuar) {
                 $this->new_message("<a href='" . $asiento->url() . "'>Asiento de pago</a> guardado correctamente!");
             } else {
                 if ($asiento->delete()) {
                     $this->new_error_msg("¡Error en alguna de las partidas! Se ha borrado el asiento.");
                 } else {
                     $this->new_error_msg("¡Error en alguna de las partidas! Además ha sido imposible borrar el asiento.");
                 }
             }
         } else {
             $this->new_error_msg("¡Imposible guardar el asiento!");
         }
     }
 }
 /**
  * Función auxiliar para generar el balance de sumas y saldos de un ejercicio y unas fechas concretas.
  * Este informe muestra los saldos (distintos de cero) de cada cuenta y subcuenta
  * por periodos, pero siempre excluyendo los asientos de cierre y pérdidas y ganancias.
  */
 public function sumas_y_saldos(&$pdf_doc, &$eje, $titulo, $fechaini, $fechafin, $excluir = FALSE, $np = TRUE)
 {
     $cuenta = new cuenta();
     $partida = new partida();
     /// metemos todo en una lista
     $auxlist = array();
     $offset = 0;
     $cuentas = $cuenta->all_from_ejercicio($eje->codejercicio, $offset);
     while (count($cuentas) > 0) {
         foreach ($cuentas as $c) {
             $subcuentas = $c->get_subcuentas();
             $debe = 0;
             $haber = 0;
             foreach ($subcuentas as $sc) {
                 $auxt = $partida->totales_from_subcuenta_fechas($sc->idsubcuenta, $fechaini, $fechafin, $excluir);
                 $debe += $auxt['debe'];
                 $haber += $auxt['haber'];
             }
             if ($debe != 0 or $haber != 0) {
                 $auxlist[] = array('cuenta' => TRUE, 'codigo' => $c->codcuenta, 'descripcion' => $c->descripcion, 'debe' => $debe, 'haber' => $haber, 'saldo' => $debe - $haber);
                 foreach ($subcuentas as $sc) {
                     $auxt = $partida->totales_from_subcuenta_fechas($sc->idsubcuenta, $fechaini, $fechafin, $excluir);
                     if ($auxt['debe'] != 0 or $auxt['haber'] != 0) {
                         $auxlist[] = array('cuenta' => FALSE, 'codigo' => $sc->codsubcuenta, 'descripcion' => $sc->descripcion, 'debe' => $auxt['debe'], 'haber' => $auxt['haber'], 'saldo' => $auxt['saldo']);
                     }
                 }
             }
             $offset++;
         }
         $cuentas = $cuenta->all_from_ejercicio($eje->codejercicio, $offset);
     }
     /// a partir de la lista generamos el documento
     $linea = 0;
     $tdebe = 0;
     $thaber = 0;
     while ($linea < count($auxlist)) {
         if ($linea > 0 or $np) {
             $pdf_doc->pdf->ezNewPage();
         }
         $pdf_doc->pdf->ezText($this->empresa->nombre . " - Balance de sumas y saldos " . $eje->year() . ' ' . $titulo . ".\n\n", 12);
         /// Creamos la tabla con las lineas
         $pdf_doc->new_table();
         $pdf_doc->add_table_header(array('subcuenta' => '<b>Cuenta</b>', 'descripcion' => '<b>Descripción</b>', 'debe' => '<b>Debe</b>', 'haber' => '<b>Haber</b>', 'saldo' => '<b>Saldo</b>'));
         for ($i = $linea; $i < min(array($linea + 48, count($auxlist))); $i++) {
             if ($auxlist[$i]['cuenta']) {
                 $a = '<b>';
                 $b = '</b>';
             } else {
                 $a = $b = '';
                 $tdebe += $auxlist[$i]['debe'];
                 $thaber += $auxlist[$i]['haber'];
             }
             $pdf_doc->add_table_row(array('subcuenta' => $a . $auxlist[$i]['codigo'] . $b, 'descripcion' => $a . substr($auxlist[$i]['descripcion'], 0, 50) . $b, 'debe' => $a . $this->show_numero($auxlist[$i]['debe']) . $b, 'haber' => $a . $this->show_numero($auxlist[$i]['haber']) . $b, 'saldo' => $a . $this->show_numero($auxlist[$i]['saldo']) . $b));
         }
         $linea += 48;
         /// añadimos las sumas de la línea actual
         $pdf_doc->add_table_row(array('subcuenta' => '', 'descripcion' => '<b>Suma y sigue</b>', 'debe' => '<b>' . $this->show_numero($tdebe) . '</b>', 'haber' => '<b>' . $this->show_numero($thaber) . '</b>', 'saldo' => '<b>' . $this->show_numero($tdebe - $thaber) . '</b>'));
         $pdf_doc->save_table(array('fontSize' => 9, 'cols' => array('debe' => array('justification' => 'right'), 'haber' => array('justification' => 'right'), 'saldo' => array('justification' => 'right')), 'width' => 540, 'shaded' => 0));
     }
 }
Example #15
0
 private function libro_diario(&$eje)
 {
     if ($eje) {
         if (!file_exists('tmp/' . FS_TMP_NAME . 'libro_diario')) {
             mkdir('tmp/' . FS_TMP_NAME . 'libro_diario');
         }
         if (!file_exists('tmp/' . FS_TMP_NAME . 'libro_diario/' . $eje->codejercicio . '.pdf')) {
             echo ' ' . $eje->codejercicio;
             $pdf_doc = new fs_pdf('a4', 'landscape', 'Courier');
             $pdf_doc->pdf->addInfo('Title', 'Libro diario de ' . $eje->codejercicio);
             $pdf_doc->pdf->addInfo('Subject', 'Libro mayor de ' . $eje->codejercicio);
             $pdf_doc->pdf->addInfo('Author', $this->empresa->nombre);
             $pdf_doc->pdf->ezStartPageNumbers(800, 10, 10, 'left', '{PAGENUM} de {TOTALPAGENUM}');
             $partida = new partida();
             $sum_debe = 0;
             $sum_haber = 0;
             /// leemos todas las partidas del ejercicio
             $lppag = 33;
             $lactual = 0;
             $lineas = $partida->full_from_ejercicio($eje->codejercicio, $lactual, $lppag);
             while (count($lineas) > 0) {
                 if ($lactual > 0) {
                     $pdf_doc->pdf->ezNewPage();
                     echo '+';
                 }
                 $pdf_doc->pdf->ezText($this->empresa->nombre . " - libro diario " . $eje->year() . "\n\n", 12);
                 /// Creamos la tabla con las lineas
                 $pdf_doc->new_table();
                 $pdf_doc->add_table_header(array('asiento' => '<b>Asiento</b>', 'fecha' => '<b>Fecha</b>', 'subcuenta' => '<b>Subcuenta</b>', 'concepto' => '<b>Concepto</b>', 'debe' => '<b>Debe</b>', 'haber' => '<b>Haber</b>'));
                 foreach ($lineas as $linea) {
                     $pdf_doc->add_table_row(array('asiento' => $linea['numero'], 'fecha' => $linea['fecha'], 'subcuenta' => $linea['codsubcuenta'] . ' ' . substr($linea['descripcion'], 0, 35), 'concepto' => substr($linea['concepto'], 0, 45), 'debe' => $this->show_numero($linea['debe']), 'haber' => $this->show_numero($linea['haber'])));
                     $sum_debe += floatval($linea['debe']);
                     $sum_haber += floatval($linea['haber']);
                     $lactual++;
                 }
                 /// añadimos las sumas de la línea actual
                 $pdf_doc->add_table_row(array('asiento' => '', 'fecha' => '', 'subcuenta' => '', 'concepto' => '', 'debe' => '<b>' . $this->show_numero($sum_debe) . '</b>', 'haber' => '<b>' . $this->show_numero($sum_haber) . '</b>'));
                 $pdf_doc->save_table(array('fontSize' => 9, 'cols' => array('debe' => array('justification' => 'right'), 'haber' => array('justification' => 'right')), 'width' => 780, 'shaded' => 0));
                 $lineas = $partida->full_from_ejercicio($eje->codejercicio, $lactual, $lppag);
             }
             $pdf_doc->save('tmp/' . FS_TMP_NAME . 'libro_diario/' . $eje->codejercicio . '.pdf');
         }
     }
 }
Example #16
0
     $partida->setId_user($usuario->getID());
     $partida->descubrePalabra($_POST['letra']);
     $jugada = new Jugada($partida->getId(), $partida->getId_user(), $_POST['letra'], $partida->getEstado_palabra());
     $jugada->persist();
     $view = 'partida';
     include 'vista/partida.php';
 } else {
     if (isset($_POST['stop'])) {
         $partida = $_SESSION['partida'];
         $persit = $partida->persit();
         unset($_SESSION['partida']);
         $view = 'conectado';
         include 'vista/conectado.php';
     } else {
         if (isset($_POST['recuperar'])) {
             $partida = partida::getPartida($_POST['partida_ini']);
             $_SESSION['partida'] = $partida;
             $view = 'partida';
             include 'vista/partida.php';
         } else {
             if (isset($_POST["resumenxml"])) {
                 $partidas = $_POST['partida_fin'];
                 $partidaxml = [];
                 foreach ($partidas as $k => $id_partida) {
                     $partidaxml[$k] = Jugada::getJugadas($id_partida);
                 }
                 $view = 'resumen';
                 include 'vista/resumen.php';
             } else {
                 if (isset($_SESSION['partida'])) {
                     $partida = $_SESSION['partida'];
 private function cerrar_ejercicio()
 {
     $this->new_message('Cerrando ejercicio...');
     $asiento = new asiento();
     $continuar = TRUE;
     if (isset($this->ejercicio->idasientopyg)) {
         $aspyg = $asiento->get($this->ejercicio->idasientopyg);
         if ($aspyg) {
             if (!$aspyg->delete()) {
                 $this->new_error_msg('Imposible eliminar el asiento de pérdidas y ganancias.');
                 $continuar = FALSE;
             }
         } else {
             $this->ejercicio->save();
         }
         /// al guardar ya comprueba los asientos especiales
     }
     if (isset($this->ejercicio->idasientocierre)) {
         $asc = $asiento->get($this->ejercicio->idasientocierre);
         if ($asc) {
             if (!$asc->delete()) {
                 $this->new_error_msg('Imposible eliminar el asiento de cierre.');
                 $continuar = FALSE;
             }
         } else {
             $this->ejercicio->save();
         }
         /// al guardar ya comprueba los asientos especiales
     }
     $siguiente_ejercicio = $this->ejercicio->get_by_fecha(Date('d-m-Y', strtotime($this->ejercicio->fechafin) + 24 * 3600));
     if (isset($siguiente_ejercicio->idasientoapertura)) {
         $asap = $asiento->get($siguiente_ejercicio->idasientoapertura);
         if ($asap) {
             if (!$asap->delete()) {
                 $this->new_error_msg('Imposible eliminar el asiento de apertura.');
                 $continuar = FALSE;
             }
         } else {
             $this->ejercicio->save();
         }
         /// al guardar ya comprueba los asientos especiales
     }
     if ($continuar) {
         $asiento_pyg = new asiento();
         $asiento_pyg->codejercicio = $this->ejercicio->codejercicio;
         $asiento_pyg->concepto = 'Regularización ejercicio ' . $this->ejercicio->nombre;
         $asiento_pyg->editable = FALSE;
         $asiento_pyg->fecha = $this->ejercicio->fechafin;
         if (!$asiento_pyg->save()) {
             $continuar = FALSE;
         }
     }
     if ($continuar) {
         $asiento_cierre = new asiento();
         $asiento_cierre->codejercicio = $this->ejercicio->codejercicio;
         $asiento_cierre->concepto = 'Asiento de cierre del ejercicio ' . $this->ejercicio->nombre;
         $asiento_cierre->editable = FALSE;
         $asiento_cierre->fecha = $this->ejercicio->fechafin;
         if (!$asiento_cierre->save()) {
             $continuar = FALSE;
         }
     }
     if ($continuar) {
         $asiento_apertura = new asiento();
         $asiento_apertura->codejercicio = $siguiente_ejercicio->codejercicio;
         $asiento_apertura->concepto = 'Asiento de apertura del ejercicio ' . $siguiente_ejercicio->nombre;
         $asiento_apertura->editable = FALSE;
         $asiento_apertura->fecha = $siguiente_ejercicio->fechainicio;
         if (!$asiento_apertura->save()) {
             $continuar = FALSE;
         }
     }
     if ($continuar) {
         /// actualizamos los saldos de las subcuentas:
         $subcuenta = new subcuenta();
         foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) {
             $sc->save();
         }
         /*
          * Abonamos y cargamos los saldos de las cuentas de los grupos 6 y 7,
          * la diferencia la enviamos a la cuenta 129.
          */
         $diferencia = 0;
         foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) {
             if (in_array(substr($sc->codcuenta, 0, 1), array('6', '7')) and $sc->tiene_saldo()) {
                 $ppyg = new partida();
                 $ppyg->idasiento = $asiento_pyg->idasiento;
                 $ppyg->concepto = $asiento_pyg->concepto;
                 $ppyg->idsubcuenta = $sc->idsubcuenta;
                 $ppyg->codsubcuenta = $sc->codsubcuenta;
                 if ($sc->saldo < 0) {
                     $ppyg->debe = abs($sc->saldo);
                 } else {
                     $ppyg->haber = $sc->saldo;
                 }
                 $diferencia += $ppyg->debe - $ppyg->haber;
                 $ppyg->coddivisa = $sc->coddivisa;
                 if (!$ppyg->save()) {
                     $continuar = FALSE;
                 }
             }
         }
         $cuenta = new cuenta();
         $cuenta_pyg = $cuenta->get_by_codigo('129', $this->ejercicio->codejercicio);
         if ($cuenta_pyg) {
             $subcuenta_pyg = FALSE;
             foreach ($cuenta_pyg->get_subcuentas() as $sc) {
                 $subcuenta_pyg = $sc;
                 break;
             }
             if ($subcuenta_pyg) {
                 $ppyg = new partida();
                 $ppyg->idasiento = $asiento_pyg->idasiento;
                 $ppyg->concepto = $asiento_pyg->concepto;
                 $ppyg->idsubcuenta = $subcuenta_pyg->idsubcuenta;
                 $ppyg->codsubcuenta = $subcuenta_pyg->codsubcuenta;
                 $ppyg->haber = $diferencia;
                 $ppyg->coddivisa = $sc->coddivisa;
                 if (!$ppyg->save()) {
                     $continuar = FALSE;
                 }
             } else {
                 $this->new_error_msg('No se encuentra una subcuenta para la cuenta 129.');
                 $continuar = FALSE;
             }
         } else {
             $this->new_error_msg('No se encuentra la cuenta 129.');
             $continuar = FALSE;
         }
         /*
          * Generamos los asientos de cierre y apertura
          */
         foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) {
             if ($sc->tiene_saldo()) {
                 $pac = new partida();
                 $pac->idasiento = $asiento_cierre->idasiento;
                 $pac->concepto = $asiento_cierre->concepto;
                 $pac->idsubcuenta = $sc->idsubcuenta;
                 $pac->codsubcuenta = $sc->codsubcuenta;
                 if ($sc->saldo < 0) {
                     $pac->debe = abs($sc->saldo);
                 } else {
                     $pac->haber = $sc->saldo;
                 }
                 $pac->coddivisa = $sc->coddivisa;
                 if (!$pac->save()) {
                     $continuar = FALSE;
                 }
                 if ($sc->codcuenta == '129') {
                     $nsc = $subcuenta->get_by_codigo('1200000000', $siguiente_ejercicio->codejercicio, TRUE);
                 } else {
                     $nsc = $subcuenta->get_by_codigo($sc->codsubcuenta, $siguiente_ejercicio->codejercicio, TRUE);
                 }
                 if ($nsc) {
                     $paa = new partida();
                     $paa->idasiento = $asiento_apertura->idasiento;
                     $paa->concepto = $asiento_apertura->concepto;
                     $paa->idsubcuenta = $nsc->idsubcuenta;
                     $paa->codsubcuenta = $nsc->codsubcuenta;
                     if ($sc->saldo > 0) {
                         $paa->debe = round($sc->saldo, FS_NF0);
                     } else {
                         $paa->haber = round(abs($sc->saldo), FS_NF0);
                     }
                     $paa->coddivisa = $nsc->coddivisa;
                     if (!$paa->save()) {
                         $continuar = FALSE;
                     }
                 } else {
                     $continuar = FALSE;
                 }
             }
         }
         /// comprobamos los nuevos asientos
         $total = 0;
         foreach ($asiento_pyg->get_partidas() as $part) {
             $total += $part->debe - $part->haber;
         }
         if (abs($total) >= 0.01) {
             $continuar = FALSE;
             $this->new_error_msg('Asiento de pérdidas y ganancias descuadrado.');
         }
         $total = 0;
         foreach ($asiento_cierre->get_partidas() as $part) {
             $total += $part->debe - $part->haber;
         }
         if (abs($total) >= 0.01) {
             $continuar = FALSE;
             $this->new_error_msg('Asiento de cierre descuadrado.');
         }
         $total = 0;
         foreach ($asiento_apertura->get_partidas() as $part) {
             $total += $part->debe - $part->haber;
         }
         if (abs($total) >= 0.01) {
             $subcuenta_redondeo = $subcuenta->get_by_codigo('6780000000', $asiento_apertura->codejercicio);
             if ($subcuenta) {
                 $npaa = new partida();
                 $npaa->idasiento = $asiento_apertura->idasiento;
                 $npaa->concepto = $asiento_apertura->concepto;
                 $npaa->idsubcuenta = $subcuenta_redondeo->idsubcuenta;
                 $npaa->codsubcuenta = $subcuenta_redondeo->codsubcuenta;
                 $npaa->coddivisa = $subcuenta_redondeo->coddivisa;
                 if ($total > 0) {
                     $npaa->haber = $total;
                 } else {
                     $npaa->debe = $total;
                 }
                 $npaa->save();
             } else {
                 $continuar = FALSE;
                 $this->new_error_msg('Asiento de apertura descuadrado.');
             }
         }
         /// cerramos el ejercicio
         if ($continuar) {
             $this->ejercicio->estado = 'CERRADO';
             $this->ejercicio->idasientopyg = $asiento_pyg->idasiento;
             $this->ejercicio->idasientocierre = $asiento_cierre->idasiento;
             if ($this->ejercicio->save()) {
                 $this->new_message('Ejercicio cerrado correctamente.');
             } else {
                 $this->new_error_msg('Error al cerrar el ejercicio.');
             }
             $siguiente_ejercicio->idasientoapertura = $asiento_apertura->idasiento;
             if (!$siguiente_ejercicio->save()) {
                 $this->new_error_msg('Error al modificar el siguiente ejercicio.');
             }
         } else {
             $this->new_error_msg('Error al generar los asientos.');
             if ($asiento_pyg->delete()) {
                 $this->new_message('Asiento de pérdidas y ganancias eliminado.');
             } else {
                 $this->new_error_msg('Imposible eliminar el asiento de pérdidas y ganancias.');
             }
             if ($asiento_cierre->delete()) {
                 $this->new_message('Asiento de cierre eliminado.');
             } else {
                 $this->new_error_msg('Imposible eliminar el asiento de cierre.');
             }
             if ($asiento_apertura->delete()) {
                 $this->new_message('Asiento de apertura eliminado.');
             } else {
                 $this->new_error_msg('Imposible eliminar el asiento de apertura.');
             }
         }
     }
 }
 public function actualiza_importe($idasiento)
 {
     $sum_importe = 0;
     $importe_partida = new partida();
     $importe = $importe_partida->get_idasiento($idasiento);
     foreach ($importe as $ext) {
         $sum_importe = $sum_importe + $ext['debe'];
     }
     $sql = "UPDATE " . $this->table_name . " SET importe = " . $this->var2str($sum_importe) . " WHERE idasiento = " . $this->var2str($idasiento) . ";";
     $this->db->exec($sql);
     return TRUE;
 }
 private function modificar()
 {
     /// obtenemos el ejercicio para poder acotar la fecha
     $eje0 = $this->ejercicio->get($this->asiento->codejercicio);
     if ($eje0) {
         $this->asiento->fecha = $eje0->get_best_fecha($_POST['fecha']);
     } else {
         $this->new_error_msg('No se encuentra el ejercicio asociado al asiento.');
     }
     $this->asiento->concepto = $_POST['concepto'];
     $this->asiento->importe = floatval($_POST['importe']);
     /// obtenemos la divisa de las partidas
     $div0 = $this->divisa->get($_POST['divisa']);
     if ($div0) {
         $this->save_coddivisa($div0->coddivisa);
     }
     if (!$eje0 or !$div0) {
         $this->new_error_msg('Imposible modificar el asiento.');
     } else {
         if ($this->asiento->save()) {
             $continuar = TRUE;
             $numlineas = intval($_POST['numlineas']);
             /// eliminamos las partidas que faltan
             foreach ($this->asiento->get_partidas() as $pa) {
                 $encontrada = FALSE;
                 for ($i = 1; $i <= $numlineas; $i++) {
                     if (isset($_POST['idpartida_' . $i])) {
                         if (intval($_POST['idpartida_' . $i]) == $pa->idpartida) {
                             $encontrada = TRUE;
                             break;
                         }
                     }
                 }
                 if (!$encontrada) {
                     if (!$pa->delete()) {
                         $this->new_error_msg('Imposible eliminar la línea debe=' . $pa->debe . ' haber=' . $pa->haber);
                         $continuar = FALSE;
                         break;
                     }
                 }
             }
             /// añadimos y modificamos
             $npartida = new partida();
             for ($i = 1; $i <= $numlineas; $i++) {
                 if (isset($_POST['idpartida_' . $i])) {
                     if ($_POST['idpartida_' . $i] == '-1') {
                         $partida = new partida();
                     } else {
                         $partida = $npartida->get($_POST['idpartida_' . $i]);
                         if (!$partida) {
                             $this->new_error_msg('Partida de ' . $_POST['codsubcuenta_' . $i] . ' no encontrada.');
                             $continuar = FALSE;
                         }
                     }
                     if ($continuar) {
                         /// añadimos
                         $sub0 = $this->subcuenta->get_by_codigo($_POST['codsubcuenta_' . $i], $eje0->codejercicio);
                         if ($sub0) {
                             $partida->idasiento = $this->asiento->idasiento;
                             $partida->coddivisa = $div0->coddivisa;
                             $partida->tasaconv = $div0->tasaconv;
                             $partida->idsubcuenta = $sub0->idsubcuenta;
                             $partida->codsubcuenta = $sub0->codsubcuenta;
                             $partida->debe = floatval($_POST['debe_' . $i]);
                             $partida->haber = floatval($_POST['haber_' . $i]);
                             $partida->idconcepto = $this->asiento->idconcepto;
                             $partida->concepto = $this->asiento->concepto;
                             $partida->documento = $this->asiento->documento;
                             $partida->tipodocumento = $this->asiento->tipodocumento;
                             if (isset($_POST['codcontrapartida_' . $i])) {
                                 if ($_POST['codcontrapartida_' . $i] != '') {
                                     $subc1 = $this->subcuenta->get_by_codigo($_POST['codcontrapartida_' . $i], $eje0->codejercicio);
                                     if ($subc1) {
                                         $partida->idcontrapartida = $subc1->idsubcuenta;
                                         $partida->codcontrapartida = $subc1->codsubcuenta;
                                         $partida->cifnif = $_POST['cifnif_' . $i];
                                         $partida->iva = floatval($_POST['iva_' . $i]);
                                         $partida->baseimponible = floatval($_POST['baseimp_' . $i]);
                                     } else {
                                         $this->new_error_msg('Subcuenta ' . $_POST['codcontrapartida_' . $i] . ' no encontrada.');
                                         $continuar = FALSE;
                                     }
                                 }
                             }
                             if (!$partida->save()) {
                                 $this->new_error_msg('Imposible guardar la partida de la subcuenta ' . $_POST['codsubcuenta_' . $i] . '.');
                                 $continuar = FALSE;
                             }
                         } else {
                             $this->new_error_msg('Subcuenta ' . $_POST['codsubcuenta_' . $i] . ' no encontrada.');
                             $continuar = FALSE;
                         }
                     } else {
                         break;
                     }
                 }
             }
             if ($continuar) {
                 $this->new_message('Asiento modificado correctamente.');
                 $this->new_change('Asiento ' . $this->asiento->numero, $this->asiento->url());
             }
         } else {
             $this->new_error_msg('Imposible modificar el asiento.');
         }
     }
 }
 /**
  * Genera el asiento contable para una factura de venta.
  * 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_venta(&$factura)
 {
     $ok = FALSE;
     $this->asiento = FALSE;
     $cliente0 = new cliente();
     $subcuenta_cli = FALSE;
     $cliente = $cliente0->get($factura->codcliente);
     if ($cliente) {
         $subcuenta_cli = $cliente->get_subcuenta($factura->codejercicio);
     }
     if ($factura->totalirpf != 0 or $factura->totalrecargo != 0) {
         $this->new_error_msg('Todavía no se pueden generar asientos de facturas con IRPF o recargo.');
     } else {
         if (!$subcuenta_cli) {
             $eje0 = $this->ejercicio->get($factura->codejercicio);
             $this->new_message("No se ha podido generar una subcuenta para el cliente\n            <a href='" . $eje0->url() . "'>¿Has importado los datos del ejercicio?</a>\n            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 venta " . $factura->codigo . " - " . $factura->nombrecliente;
             $asiento->documento = $factura->codigo;
             $asiento->editable = FALSE;
             $asiento->fecha = $factura->fecha;
             $asiento->importe = $factura->total;
             $asiento->tipodocumento = 'Factura de cliente';
             if ($asiento->save()) {
                 $asiento_correcto = TRUE;
                 $subcuenta = new subcuenta();
                 $partida0 = new partida();
                 $partida0->idasiento = $asiento->idasiento;
                 $partida0->concepto = $asiento->concepto;
                 $partida0->idsubcuenta = $subcuenta_cli->idsubcuenta;
                 $partida0->codsubcuenta = $subcuenta_cli->codsubcuenta;
                 $partida0->debe = $factura->total;
                 $partida0->coddivisa = $factura->coddivisa;
                 $partida0->tasaconv = $factura->tasaconv;
                 if (!$partida0->save()) {
                     $asiento_correcto = FALSE;
                     $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida0->codsubcuenta . "!");
                 }
                 /// generamos una partida por cada impuesto
                 $subcuenta_iva = $subcuenta->get_cuentaesp('IVAREP', $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->haber = $li->totaliva;
                         $partida1->idcontrapartida = $subcuenta_cli->idsubcuenta;
                         $partida1->codcontrapartida = $subcuenta_cli->codsubcuenta;
                         $partida1->cifnif = $cliente->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 . "!");
                         }
                     }
                 }
                 $subcuenta_ventas = $subcuenta->get_cuentaesp('VENTAS', $asiento->codejercicio);
                 if ($subcuenta_ventas and $asiento_correcto) {
                     $partida2 = new partida();
                     $partida2->idasiento = $asiento->idasiento;
                     $partida2->concepto = $asiento->concepto;
                     $partida2->idsubcuenta = $subcuenta_ventas->idsubcuenta;
                     $partida2->codsubcuenta = $subcuenta_ventas->codsubcuenta;
                     $partida2->haber = $factura->neto;
                     $partida2->coddivisa = $factura->coddivisa;
                     $partida2->tasaconv = $factura->tasaconv;
                     if (!$partida2->save()) {
                         $asiento_correcto = FALSE;
                         $this->new_error_msg("¡Imposible generar la partida para la subcuenta " . $partida2->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!");
                     }
                 }
             } else {
                 $this->new_error_msg("¡Imposible guardar el asiento!");
             }
         }
     }
     return $ok;
 }
Example #21
0
 public function full_from_subcuenta($id)
 {
     $plist = array();
     $ordenadas = $this->db->select("SELECT a.numero,a.fecha,p.idpartida FROM co_asientos a, co_partidas p\n         WHERE a.idasiento = p.idasiento AND p.idsubcuenta = " . $this->var2str($id) . " ORDER BY a.numero ASC, p.idpartida ASC;");
     if ($ordenadas) {
         $partida = new partida();
         $saldo = 0;
         $sum_debe = 0;
         $sum_haber = 0;
         foreach ($ordenadas as $po) {
             $aux = $partida->get($po['idpartida']);
             if ($aux) {
                 $aux->numero = intval($po['numero']);
                 $aux->fecha = Date('d-m-Y', strtotime($po['fecha']));
                 $saldo += $aux->debe - $aux->haber;
                 $sum_debe += $aux->debe;
                 $sum_haber += $aux->haber;
                 $aux->saldo = $saldo;
                 $aux->sum_debe = $sum_debe;
                 $aux->sum_haber = $sum_haber;
                 $plist[] = $aux;
             }
         }
     }
     return $plist;
 }
 private function guardar_regiva()
 {
     $asiento = new asiento();
     $ejercicio = new ejercicio();
     $subcuenta = new subcuenta();
     $eje0 = $ejercicio->get_by_fecha($_POST['desde'], TRUE);
     if ($eje0) {
         $continuar = TRUE;
         $saldo = 0;
         /// guardamos el asiento
         $asiento->codejercicio = $eje0->codejercicio;
         $asiento->concepto = 'REGULARIZACIÓN IVA ' . $_POST['periodo'];
         $asiento->fecha = $_POST['hasta'];
         $asiento->editable = FALSE;
         if (!$asiento->save()) {
             $this->new_error_msg('Imposible guardar el asiento.');
             $continuar = FALSE;
         }
         /// obtenemos el IVA soportado
         $scta_ivasop = $subcuenta->get_cuentaesp('IVASOP', $eje0->codejercicio);
         if ($scta_ivasop) {
             $par0 = new partida();
             $par0->idasiento = $asiento->idasiento;
             $par0->concepto = $asiento->concepto;
             $par0->coddivisa = $scta_ivasop->coddivisa;
             $par0->tasaconv = $scta_ivasop->tasaconv();
             $par0->codsubcuenta = $scta_ivasop->codsubcuenta;
             $par0->idsubcuenta = $scta_ivasop->idsubcuenta;
             $tot_sop = $par0->totales_from_subcuenta_fechas($scta_ivasop->idsubcuenta, $_POST['desde'], $_POST['hasta']);
             /// invertimos el debe y el haber
             $par0->debe = $tot_sop['haber'];
             $par0->haber = $tot_sop['debe'];
             $saldo += $tot_sop['haber'] - $tot_sop['debe'];
             if (!$par0->save()) {
                 $this->new_error_msg('Error al guardar la partida de la subcuenta de IVA soportado.');
                 $continuar = FALSE;
             }
         } else {
             $this->new_error_msg('Subcuenta de IVA soportado no encontrada.');
             $continuar = FALSE;
         }
         /// obtenemos el IVA repercutido
         $scta_ivarep = $subcuenta->get_cuentaesp('IVAREP', $eje0->codejercicio);
         if ($scta_ivarep) {
             $par1 = new partida();
             $par1->idasiento = $asiento->idasiento;
             $par1->concepto = $asiento->concepto;
             $par1->coddivisa = $scta_ivarep->coddivisa;
             $par1->tasaconv = $scta_ivarep->tasaconv();
             $par1->codsubcuenta = $scta_ivarep->codsubcuenta;
             $par1->idsubcuenta = $scta_ivarep->idsubcuenta;
             $tot_rep = $par1->totales_from_subcuenta_fechas($scta_ivarep->idsubcuenta, $_POST['desde'], $_POST['hasta']);
             /// invertimos el debe y el haber
             $par1->debe = $tot_rep['haber'];
             $par1->haber = $tot_rep['debe'];
             $saldo += $tot_rep['haber'] - $tot_rep['debe'];
             if (!$par1->save()) {
                 $this->new_error_msg('Error al guardar la partida de la subcuenta de IVA repercutido.');
                 $continuar = FALSE;
             }
         } else {
             $this->new_error_msg('Subcuenta de IVA repercutido no encontrada.');
             $continuar = FALSE;
         }
         if ($continuar) {
             if ($saldo > 0) {
                 $scta_ivaacr = $subcuenta->get_cuentaesp('IVAACR', $eje0->codejercicio);
                 if ($scta_ivaacr) {
                     $par2 = new partida();
                     $par2->idasiento = $asiento->idasiento;
                     $par2->concepto = $asiento->concepto;
                     $par2->coddivisa = $scta_ivaacr->coddivisa;
                     $par2->tasaconv = $scta_ivaacr->tasaconv();
                     $par2->codsubcuenta = $scta_ivaacr->codsubcuenta;
                     $par2->idsubcuenta = $scta_ivaacr->idsubcuenta;
                     $par2->debe = 0;
                     $par2->haber = $saldo;
                     if (!$par2->save()) {
                         $this->new_error_msg('Error al guardar la partida de la subcuenta de acreedor por IVA.');
                         $continuar = FALSE;
                     }
                 } else {
                     $this->new_error_msg('No se encuentra la subcuenta acreedora por IVA.');
                 }
             } else {
                 if ($saldo < 0) {
                     $scta_ivadeu = $subcuenta->get_cuentaesp('IVADEU', $eje0->codejercicio);
                     if ($scta_ivadeu) {
                         $par2 = new partida();
                         $par2->idasiento = $asiento->idasiento;
                         $par2->concepto = $asiento->concepto;
                         $par2->coddivisa = $scta_ivadeu->coddivisa;
                         $par2->tasaconv = $scta_ivadeu->tasaconv();
                         $par2->codsubcuenta = $scta_ivadeu->codsubcuenta;
                         $par2->idsubcuenta = $scta_ivadeu->idsubcuenta;
                         $par2->debe = abs($saldo);
                         $par2->haber = 0;
                         if (!$par2->save()) {
                             $this->new_error_msg('Error al guardar la partida de la subcuenta deudora por IVA.');
                             $continuar = FALSE;
                         }
                     } else {
                         $this->new_error_msg('No se encuentra la subcuenta deudora por IVA.');
                     }
                 }
             }
         } else {
             $this->new_error_msg('Error al leer las subcuentas.');
         }
         if ($continuar) {
             $this->regiva = new regularizacion_iva();
             $this->regiva->codejercicio = $eje0->codejercicio;
             $this->regiva->fechaasiento = $asiento->fecha;
             $this->regiva->fechafin = $_POST['hasta'];
             $this->regiva->fechainicio = $_POST['desde'];
             $this->regiva->idasiento = $asiento->idasiento;
             $this->regiva->periodo = $_POST['periodo'];
             if ($this->regiva->save()) {
                 $this->new_message('<a href="#" onclick="full_regiva(\'' . $this->regiva->idregiva . '\')">Regularización</a>
               guardada correctamente.');
             } else {
                 if ($asiento->delete()) {
                     $this->new_error_msg('Error al guardar la regularización. Se ha eliminado el asiento.');
                 } else {
                     $this->new_error_msg('Error al guardar la regularización. No se ha podido eliminar el asiento.');
                 }
             }
         }
     } else {
         $this->new_error_msg('El ejercicio está cerrado.');
     }
 }
 private function modificar()
 {
     /// obtenemos el ejercicio para poder acotar la fecha
     $eje0 = $this->ejercicio->get($this->asiento->codejercicio);
     if ($eje0) {
         $this->asiento->fecha = $eje0->get_best_fecha($_POST['fecha']);
     } else {
         $this->new_error_msg('No se encuentra el ejercicio asociado al asiento.');
     }
     $this->asiento->concepto = $_POST['concepto'];
     $this->asiento->tipodocumento = $_POST['concepto'];
     $this->asiento->cambio_concepto();
     $this->asiento->importe = floatval($_POST['importe']);
     /// obtenemos la divisa de las partidas
     $div0 = $this->divisa->get($_POST['divisa']);
     if ($div0) {
         $this->save_coddivisa($div0->coddivisa);
     }
     if (!$eje0 or !$div0) {
         $this->new_error_msg('Imposible modificar el asiento.');
     } else {
         if ($this->asiento->save()) {
             $continuar = TRUE;
             $numlineas = intval($_POST['numlineas']);
             //  $this->asiento->tipodocumento = $this->asiento->concepto;
             /// eliminamos las partidas que faltan
             foreach ($this->asiento->get_partidas() as $pa) {
                 $encontrada = FALSE;
                 for ($i = 1; $i <= $numlineas; $i++) {
                     if (isset($_POST['idpartida_' . $i])) {
                         if (intval($_POST['idpartida_' . $i]) == $pa->idpartida) {
                             $encontrada = TRUE;
                             break;
                         }
                     }
                 }
                 if (!$encontrada) {
                     if (!$pa->delete()) {
                         $this->new_error_msg('Imposible eliminar la línea debe=' . $pa->debe . ' haber=' . $pa->haber);
                         $continuar = FALSE;
                         break;
                     }
                 }
             }
             /// añadimos y modificamos
             $npartida = new partida();
             for ($i = 1; $i <= $numlineas; $i++) {
                 if (isset($_POST['idpartida_' . $i])) {
                     if ($_POST['idpartida_' . $i] == '-1') {
                         /// las nuevas líneas llevan idpartida = -1
                         $partida = new partida();
                     } else {
                         $partida = $npartida->get($_POST['idpartida_' . $i]);
                         if (!$partida) {
                             $this->new_error_msg('Partida de ' . $_POST['codsubcuenta_' . $i] . ' no encontrada.');
                             $continuar = FALSE;
                         }
                     }
                     // borra la partida para poner nuevos valores
                     $partida->delete();
                     if ($continuar) {
                         /// añadimos
                         $sub0 = $this->subcuenta->get_by_codigo($_POST['codsubcuenta_' . $i], $eje0->codejercicio);
                         if ($sub0) {
                             $partida->idasiento = $this->asiento->idasiento;
                             $partida->coddivisa = $div0->coddivisa;
                             $partida->tasaconv = $div0->tasaconv;
                             $partida->idsubcuenta = $_POST['idsubcuenta_' . $i];
                             $partida->codsubcuenta = $_POST['codsubcuenta_' . $i];
                             $partida->debe = floatval($_POST['debe_' . $i]);
                             $partida->haber = floatval($_POST['haber_' . $i]);
                             $partida->idconcepto = $this->asiento->idconcepto;
                             $partida->concepto = $this->asiento->concepto;
                             $partida->documento = $this->asiento->documento;
                             $partida->tipodocumento = $this->asiento->tipodocumento;
                             $partida->comprobante = $_POST['comp_' . $i];
                             $partida->referencia = $_POST['ref_' . $i];
                             if (isset($_POST['codcontrapartida_' . $i])) {
                                 if ($_POST['codcontrapartida_' . $i] != '') {
                                     $subc1 = $this->subcuenta->get_by_codigo($_POST['codcontrapartida_' . $i], $eje0->codejercicio);
                                     if ($subc1) {
                                         $partida->idcontrapartida = $subc1->idsubcuenta;
                                         $partida->codcontrapartida = $subc1->codsubcuenta;
                                         $partida->cifnif = $_POST['cifnif_' . $i];
                                         $partida->iva = floatval($_POST['iva_' . $i]);
                                         $partida->baseimponible = floatval($_POST['baseimp_' . $i]);
                                     } else {
                                         $this->new_error_msg('Subcuenta ' . $_POST['codcontrapartida_' . $i] . ' no encontrada.');
                                         $continuar = FALSE;
                                     }
                                 }
                             }
                             if (!$partida->save()) {
                                 $this->new_error_msg('Imposible guardar la partida de la subcuenta ' . $_POST['codsubcuenta_' . $i] . '.');
                                 $continuar = FALSE;
                             }
                         } else {
                             $this->new_error_msg('Subcuenta ' . $_POST['codsubcuenta_' . $i] . ' de la línea ' . $i . ' no encontrada.');
                             $continuar = FALSE;
                         }
                     } else {
                         break;
                     }
                 }
             }
             // Después de que se hicieron todas las actualizaciones cargo las partidas existentes y actualizo
             // al array contabilidad_asiento::$partidas para que se actualicen con las generadas por las cajas
             contabilidad_asiento::cargar_partidas($this->asiento, $div0);
             if (isset($_POST['importar_caja']) && filter_var($_POST['importar_caja'], FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE) === true) {
                 if ($continuar) {
                     $continuar = contabilidad_asiento::importar_caja($this->asiento, $div0, $this);
                 } else {
                     $this->new_error_msg("Hay algún error relacionado a este asiento, imposible importar cajas");
                 }
             }
             if ($continuar) {
                 $this->new_message('Asiento modificado correctamente.');
                 $this->new_change('Asiento ' . $this->asiento->numero, $this->asiento->url());
             }
         } else {
             $this->new_error_msg('Imposible modificar el asiento.');
         }
     }
 }
Example #24
0
 private function nuevo_asiento_pago(&$pago, $ejercicio)
 {
     $asiento = new asiento();
     $asiento->fecha = $pago->fecha;
     $asiento->codejercicio = $ejercicio->codejercicio;
     $asiento->concepto = $pago->tipo . ' recibo compra ' . $this->recibo->codigo . ' - ' . $this->recibo->nombreproveedor;
     $asiento->editable = FALSE;
     $asiento->importe = $this->recibo->importe;
     if ($this->factura) {
         $asiento->tipodocumento = "Factura de proveedor";
         $asiento->documento = $this->factura->codigo;
     }
     if (!$ejercicio->abierto()) {
         $this->new_error_msg('El ejercicio ' . $ejercicio->codejercicio . ' está cerrado.');
     } else {
         if ($asiento->save()) {
             $partida1 = new partida();
             $partida1->idasiento = $asiento->idasiento;
             $partida1->concepto = $asiento->concepto;
             $partida1->idsubcuenta = $this->subcuenta_pro->idsubcuenta;
             $partida1->codsubcuenta = $this->subcuenta_pro->codsubcuenta;
             $partida1->debe = $this->recibo->importe;
             $partida1->coddivisa = $this->recibo->coddivisa;
             $partida1->tasaconv = $this->recibo->tasaconv;
             $partida1->codserie = $this->recibo->codserie;
             $partida1->save();
             $partida2 = new partida();
             $partida2->idasiento = $asiento->idasiento;
             $partida2->concepto = $asiento->concepto;
             $partida2->idsubcuenta = $pago->idsubcuenta;
             $partida2->codsubcuenta = $pago->codsubcuenta;
             $partida2->haber = $this->recibo->importe;
             $partida2->coddivisa = $this->recibo->coddivisa;
             $partida2->tasaconv = $this->recibo->tasaconv;
             $partida2->codserie = $this->recibo->codserie;
             $partida2->save();
         } else {
             $this->new_error_msg('Error al guardar el asiento.');
         }
     }
     return $asiento->idasiento;
 }