protected function private_core()
 {
     /// ¿El usuario tiene permiso para eliminar en esta página?
     $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
     $this->impuesto = new impuesto();
     /// Leemos las subcuentas predeterminadas
     $subcuenta = new subcuenta();
     $this->codsubcuentasop = '';
     $subcuentasop = $subcuenta->get_cuentaesp('IVASOP', $this->empresa->codejercicio);
     if ($subcuentasop) {
         $this->codsubcuentasop = $subcuentasop->codsubcuenta;
     }
     $this->codsubcuentarep = '';
     $subcuentarep = $subcuenta->get_cuentaesp('IVAREP', $this->empresa->codejercicio);
     if ($subcuentarep) {
         $this->codsubcuentarep = $subcuentarep->codsubcuenta;
     }
     if (isset($_GET['delete'])) {
         if (!$this->user->admin) {
             $this->new_error_msg('Sólo un administrador puede eliminar impuestos.');
         } else {
             $impuesto = $this->impuesto->get($_GET['delete']);
             if ($impuesto) {
                 if ($impuesto->delete()) {
                     $this->new_message('Impuesto eliminado correctamente.');
                 } else {
                     $this->new_error_msg('Ha sido imposible eliminar el impuesto.');
                 }
             } else {
                 $this->new_error_msg('Impuesto no encontrado.');
             }
         }
     } else {
         if (isset($_POST['codimpuesto'])) {
             $impuesto = $this->impuesto->get($_POST['codimpuesto']);
             if (!$impuesto) {
                 $impuesto = new impuesto();
                 $impuesto->codimpuesto = $_POST['codimpuesto'];
             }
             $impuesto->descripcion = $_POST['descripcion'];
             $impuesto->codsubcuentarep = NULL;
             if ($_POST['codsubcuentarep'] != '') {
                 $impuesto->codsubcuentarep = $_POST['codsubcuentarep'];
             }
             $impuesto->codsubcuentasop = NULL;
             if ($_POST['codsubcuentasop'] != '') {
                 $impuesto->codsubcuentasop = $_POST['codsubcuentasop'];
             }
             $impuesto->iva = floatval($_POST['iva']);
             $impuesto->recargo = floatval($_POST['recargo']);
             if ($impuesto->save()) {
                 $this->new_message("Impuesto " . $impuesto->codimpuesto . " guardado correctamente.");
             } else {
                 $this->new_error_msg("¡Error al guardar el impuesto!");
             }
         }
     }
 }
 protected function private_core()
 {
     /// ¿El usuario tiene permiso para eliminar en esta página?
     $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
     $this->divisa = new divisa();
     $subcuenta = new subcuenta();
     $this->subcuenta = FALSE;
     if (isset($_GET['id'])) {
         $this->subcuenta = $subcuenta->get($_GET['id']);
     }
     if ($this->subcuenta) {
         /// configuramos la página previa
         $this->ppage = $this->page->get('contabilidad_cuenta');
         $this->ppage->title = 'Cuenta: ' . $this->subcuenta->codcuenta;
         $this->ppage->extra_url = '&id=' . $this->subcuenta->idcuenta;
         $this->page->title = 'Subcuenta: ' . $this->subcuenta->codsubcuenta;
         $this->cuenta = $this->subcuenta->get_cuenta();
         $this->ejercicio = $this->subcuenta->get_ejercicio();
         $this->offset = 0;
         if (isset($_GET['offset'])) {
             $this->offset = intval($_GET['offset']);
         }
         $this->resultados = $this->subcuenta->get_partidas($this->offset);
         if (isset($_POST['puntear'])) {
             $this->puntear();
         }
         if (isset($_GET['genlm'])) {
             /// generamos el PDF del libro mayor si no existe
             $libro_mayor = new libro_mayor();
             $libro_mayor->libro_mayor($this->subcuenta);
             if (file_exists('tmp/' . FS_TMP_NAME . 'libro_mayor/' . $this->subcuenta->idsubcuenta . '.pdf')) {
                 header('Location: tmp/' . FS_TMP_NAME . 'libro_mayor/' . $this->subcuenta->idsubcuenta . '.pdf');
             } else {
                 $this->new_error_msg('Error al generar el libro mayor.');
             }
         }
         $this->pdf_libromayor = FALSE;
         if (file_exists('tmp/' . FS_TMP_NAME . 'libro_mayor/' . $this->subcuenta->idsubcuenta . '.pdf')) {
             $this->pdf_libromayor = 'tmp/' . FS_TMP_NAME . 'libro_mayor/' . $this->subcuenta->idsubcuenta . '.pdf';
         }
         /// comprobamos la subcuenta
         $this->subcuenta->test();
     } else {
         $this->new_error_msg("Subcuenta no encontrada.");
         $this->ppage = $this->page->get('contabilidad_cuentas');
     }
 }
 protected function process()
 {
     $this->cuenta = new cuenta();
     $this->ejercicio = new ejercicio();
     $this->custom_search = TRUE;
     $this->buttons[] = new fs_button('b_nueva_cuenta', 'Nueva');
     $this->buttons[] = new fs_button('b_cuentas_especiales', 'Cuentas especiales', 'index.php?page=cuentas_especiales');
     $this->buttons[] = new fs_button('b_balances', 'Balances', 'index.php?page=contabilidad_balances');
     $this->offset = 0;
     if (isset($_GET['offset'])) {
         $this->offset = intval($_GET['offset']);
     }
     if (isset($_GET['delete'])) {
         $cuenta2 = $this->cuenta->get($_GET['delete']);
         if ($cuenta2) {
             if ($cuenta2->delete()) {
                 $this->new_message('Cuenta eliminada correctamente.');
             } else {
                 $this->new_error_msg('Error al eliminar la cuenta.');
             }
         } else {
             $this->new_error_msg('Cuenta no encontrada.');
         }
         $this->resultados = $this->cuenta->all_from_ejercicio($this->default_items->codejercicio(), $this->offset);
         $this->resultados2 = array();
     } else {
         if (isset($_POST['codejercicio'])) {
             $this->nueva_cuenta();
         } else {
             if ($this->query != '') {
                 $this->resultados = $this->cuenta->search($this->query);
                 $subc = new subcuenta();
                 $this->resultados2 = $subc->search($this->query);
             } else {
                 if (isset($_POST['ejercicio'])) {
                     $this->save_codejercicio($_POST['ejercicio']);
                     $this->resultados = $this->cuenta->all_from_ejercicio($_POST['ejercicio'], $this->offset);
                     $this->resultados2 = array();
                 } else {
                     $this->resultados = $this->cuenta->all_from_ejercicio($this->default_items->codejercicio(), $this->offset);
                     $this->resultados2 = array();
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
 protected function process()
 {
     $this->cuenta = new cuenta();
     $this->ejercicio = new ejercicio();
     $this->offset = 0;
     if (isset($_GET['offset'])) {
         $this->offset = intval($_GET['offset']);
     }
     if (isset($_GET['delete'])) {
         $cuenta2 = $this->cuenta->get($_GET['delete']);
         if ($cuenta2) {
             if ($cuenta2->delete()) {
                 $this->new_message('Cuenta eliminada correctamente.');
             } else {
                 $this->new_error_msg('Error al eliminar la cuenta.');
             }
         } else {
             $this->new_error_msg('Cuenta no encontrada.');
         }
         $this->resultados = $this->cuenta->all_from_ejercicio($this->default_items->codejercicio(), $this->offset);
         $this->resultados2 = array();
     } else {
         if (isset($_POST['codejercicio'])) {
             $this->nueva_cuenta();
         } else {
             if ($this->query != '') {
                 $this->resultados = $this->cuenta->search($this->query);
                 $subc = new subcuenta();
                 $this->resultados2 = $subc->search($this->query);
             } else {
                 if (isset($_POST['ejercicio'])) {
                     $this->save_codejercicio($_POST['ejercicio']);
                     $this->resultados = $this->cuenta->all_from_ejercicio($_POST['ejercicio'], $this->offset);
                     $this->resultados2 = array();
                 } else {
                     $this->resultados = $this->cuenta->all_from_ejercicio($this->default_items->codejercicio(), $this->offset);
                     $this->resultados2 = array();
                 }
             }
         }
     }
 }
 protected function process()
 {
     $this->divisa = new divisa();
     $subcuenta = new subcuenta();
     $this->subcuenta = FALSE;
     if (isset($_GET['id'])) {
         $this->subcuenta = $subcuenta->get($_GET['id']);
     }
     if ($this->subcuenta) {
         /// configuramos la página previa
         $this->ppage = $this->page->get('contabilidad_cuenta');
         $this->ppage->title = 'Cuenta: ' . $this->subcuenta->codcuenta;
         $this->ppage->extra_url = '&id=' . $this->subcuenta->idcuenta;
         $this->page->title = 'Subcuenta: ' . $this->subcuenta->codsubcuenta;
         $this->cuenta = $this->subcuenta->get_cuenta();
         $this->ejercicio = $this->subcuenta->get_ejercicio();
         $this->offset = 0;
         if (isset($_GET['offset'])) {
             $this->offset = intval($_GET['offset']);
         }
         $this->resultados = $this->subcuenta->get_partidas($this->offset);
         if (isset($_POST['puntear'])) {
             $this->puntear();
         }
         if (isset($_GET['genlm'])) {
             /// generamos el PDF del libro mayor si no existe
             $libro_mayor = new libro_mayor();
             $libro_mayor->libro_mayor($this->subcuenta);
         }
         if (file_exists('tmp/' . FS_TMP_NAME . 'libro_mayor/' . $this->subcuenta->idsubcuenta . '.pdf')) {
             $this->buttons[] = new fs_button_img('b_libro_mayor', 'Libro mayor', 'print.png', 'tmp/' . FS_TMP_NAME . 'libro_mayor/' . $this->subcuenta->idsubcuenta . '.pdf', FALSE, TRUE);
         } else {
             $this->buttons[] = new fs_button('b_libro_mayor', 'Generar libro mayor', $this->url() . '&genlm=TRUE');
         }
         $this->buttons[] = new fs_button_img('b_eliminar', 'Eliminar', 'trash.png', '#', TRUE);
         /// comprobamos la subcuenta
         $this->subcuenta->test();
     } else {
         $this->new_error_msg("Subcuenta no encontrada.");
         $this->ppage = $this->page->get('contabilidad_cuentas');
     }
 }
Ejemplo n.º 6
0
 public function get_by_codigo($cod, $ejercicio, $crear = FALSE)
 {
     $subc = $this->db->select("SELECT * FROM " . $this->table_name . " WHERE codsubcuenta = " . $this->var2str($cod) . " AND codejercicio = " . $this->var2str($ejercicio) . ";");
     if ($subc) {
         return new subcuenta($subc[0]);
     } else {
         if ($crear) {
             /// buscamos la subcuenta equivalente en otro ejercicio
             $subc = $this->db->select("SELECT * FROM " . $this->table_name . " WHERE codsubcuenta = " . $this->var2str($cod) . ";");
             if ($subc) {
                 $old_sc = new subcuenta($subc[0]);
                 /// buscamos la cuenta equivalente es ESTE ejercicio
                 $cuenta = new cuenta();
                 $new_c = $cuenta->get_by_codigo($old_sc->codcuenta, $ejercicio);
                 if ($new_c) {
                     $new_sc = new subcuenta();
                     $new_sc->codcuenta = $new_c->codcuenta;
                     $new_sc->coddivisa = $old_sc->coddivisa;
                     $new_sc->codejercicio = $ejercicio;
                     $new_sc->codimpuesto = $old_sc->codimpuesto;
                     $new_sc->codsubcuenta = $old_sc->codsubcuenta;
                     $new_sc->descripcion = $old_sc->descripcion;
                     $new_sc->idcuenta = $new_c->idcuenta;
                     $new_sc->iva = $old_sc->iva;
                     $new_sc->alias = $old_alias->alias;
                     $new_sc->recargo = $old_sc->recargo;
                     if ($new_sc->save()) {
                         return $new_sc;
                     } else {
                         return FALSE;
                     }
                 } else {
                     $this->new_error_msg('No se ha encontrado la cuenta equivalente a ' . $old_sc->codcuenta . ' en el ejercicio ' . $ejercicio . '.');
                     return FALSE;
                 }
             } else {
                 $this->new_error_msg('No se ha encontrado ninguna subcuenta equivalente a ' . $cod . ' para copiar.');
                 return FALSE;
             }
         } else {
             return FALSE;
         }
     }
 }
 /**
  * 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;
 }
 public function full_test()
 {
     $status = TRUE;
     /// comprobamos el balance de todas las subcuentas
     $debe = 0;
     $haber = 0;
     $subcuenta = new subcuenta();
     foreach ($subcuenta->all_from_ejercicio($this->codejercicio) as $sc) {
         $debe += $sc->debe;
         $haber += $sc->haber;
         if (!$this->abierto() and !$this->floatcmp($sc->debe, $sc->haber, FS_NF0)) {
             $this->new_error_msg('El ejercicio está cerrado pero la subcuenta <a href="' . $sc->url() . '">' . $sc->codsubcuenta . '</a> aún tiene saldo (' . $sc->saldo . ').');
             $status = FALSE;
         }
     }
     if (!$this->floatcmp($debe, $haber, FS_NF0)) {
         $this->new_error_msg('El ejercicio está descuadrado. Debe: ' . $debe . ' | Haber: ' . $haber);
         $status = FALSE;
     }
     return $status;
 }
 protected function private_core()
 {
     /// ¿El usuario tiene permiso para eliminar en esta página?
     $this->allow_delete = $this->user->allow_delete_on(__CLASS__);
     $this->cuenta = FALSE;
     if (isset($_POST['nsubcuenta'])) {
         $subc0 = new subcuenta();
         $subc0->codcuenta = $_POST['codcuenta'];
         $subc0->codejercicio = $_POST['ejercicio'];
         $subc0->codsubcuenta = $_POST['nsubcuenta'];
         $subc0->descripcion = $_POST['descripcion'];
         $subc0->idcuenta = $_POST['idcuenta'];
         $subc0->alias = $_POST['alias'];
         if ($subc0->save()) {
             header('Location: ' . $subc0->url());
         } else {
             $this->new_error_msg('Error al crear la subcuenta.');
         }
         $this->cuenta = $subc0->get_cuenta();
     } else {
         if (isset($_GET['deletes'])) {
             $subc0 = new subcuenta();
             $subc1 = $subc0->get($_GET['deletes']);
             if ($subc1) {
                 $this->cuenta = $subc1->get_cuenta();
                 if ($subc1->delete()) {
                     $this->new_message('Subcuenta eliminada correctamente.');
                 } else {
                     $this->new_error_msg('Error al eliminar la subcuenta.');
                 }
             } else {
                 $this->new_error_msg('Subcuenta no encontrada.');
             }
         } else {
             if (isset($_GET['id'])) {
                 $cuenta = new cuenta();
                 $this->cuenta = $cuenta->get($_GET['id']);
                 if ($this->cuenta and isset($_POST['descripcion'])) {
                     $this->cuenta->descripcion = $_POST['descripcion'];
                     if ($_POST['idcuentaesp'] == '---') {
                         $this->cuenta->idcuentaesp = NULL;
                     } else {
                         $this->cuenta->idcuentaesp = $_POST['idcuentaesp'];
                     }
                     if ($this->cuenta->save()) {
                         $this->new_message('Cuenta modificada correctamente.');
                     } else {
                         $this->new_error_msg('Error al modificar la cuenta.');
                     }
                 }
             }
         }
     }
     if ($this->cuenta) {
         /// configuramos la página previa
         $this->ppage = $this->page->get('contabilidad_epigrafes');
         if ($this->ppage) {
             $this->ppage->title = 'Rubro: ' . $this->cuenta->codepigrafe;
             $this->ppage->extra_url = '&epi=' . $this->cuenta->idepigrafe;
         }
         $this->page->title = 'Cuenta: ' . $this->cuenta->codcuenta;
         $this->ejercicio = $this->cuenta->get_ejercicio();
         $this->nuevo_codsubcuenta = sprintf('%-0' . $this->ejercicio->longsubcuenta . 's', $this->cuenta->codcuenta);
     } else {
         $this->new_error_msg("Cuenta no encontrada.");
         $this->ppage = $this->page->get('contabilidad_cuentas');
     }
 }
Ejemplo n.º 10
0
 public function get_subcuenta()
 {
     $subc = new \subcuenta();
     return $subc->get($this->idsubcuenta);
 }
Ejemplo n.º 11
0
 public function new_subcuenta($suma_codigo)
 {
     $ejercicio = new ejercicio();
     $eje0 = $ejercicio->get($this->codejercicio);
     if ($eje0) {
         $codsubcuenta = floatval(sprintf('%-0' . $eje0->longsubcuenta . 's', $this->codcuenta)) + $suma_codigo;
         $subcuenta = new subcuenta();
         $subc0 = $subcuenta->get_by_codigo($codsubcuenta, $this->codejercicio);
         if ($subc0) {
             return $subc0;
         } else {
             $subc0 = new subcuenta();
             $subc0->codcuenta = $this->codcuenta;
             $subc0->idcuenta = $this->idcuenta;
             $subc0->codejercicio = $this->codejercicio;
             $subc0->codsubcuenta = $codsubcuenta;
             return $subc0;
         }
     } else {
         return FALSE;
     }
 }
Ejemplo n.º 12
0
 public function get_by_codigo($cod, $codejercicio, $crear = FALSE)
 {
     $sql = "SELECT * FROM " . $this->table_name . " WHERE codsubcuenta = " . $this->var2str($cod) . " AND codejercicio = " . $this->var2str($codejercicio) . ";";
     $subc = $this->db->select($sql);
     if ($subc) {
         return new \subcuenta($subc[0]);
     } else {
         if ($crear) {
             /// buscamos la subcuenta equivalente en otro ejercicio
             $subc = $this->db->select("SELECT * FROM " . $this->table_name . " WHERE codsubcuenta = " . $this->var2str($cod) . ";");
             if ($subc) {
                 $old_sc = new \subcuenta($subc[0]);
                 /// buscamos la cuenta equivalente es ESTE ejercicio
                 $cuenta = new \cuenta();
                 $new_c = $cuenta->get_by_codigo($old_sc->codcuenta, $codejercicio);
                 if ($new_c) {
                     $new_sc = new \subcuenta();
                     $new_sc->codcuenta = $new_c->codcuenta;
                     $new_sc->coddivisa = $old_sc->coddivisa;
                     $new_sc->codejercicio = $codejercicio;
                     $new_sc->codimpuesto = $old_sc->codimpuesto;
                     $new_sc->codsubcuenta = $old_sc->codsubcuenta;
                     $new_sc->descripcion = $old_sc->descripcion;
                     $new_sc->idcuenta = $new_c->idcuenta;
                     $new_sc->iva = $old_sc->iva;
                     $new_sc->recargo = $old_sc->recargo;
                     if ($new_sc->save()) {
                         return $new_sc;
                     } else {
                         return FALSE;
                     }
                 } else {
                     $this->new_error_msg('No se ha encontrado la cuenta equivalente a ' . $old_sc->codcuenta . ' en el ejercicio ' . $codejercicio . ' <a href="index.php?page=contabilidad_ejercicio&cod=' . $codejercicio . '">¿Has importado el plan contable?</a>');
                     return FALSE;
                 }
             } else {
                 $this->new_error_msg('No se ha encontrado ninguna subcuenta equivalente a ' . $cod . ' para copiar.');
                 return FALSE;
             }
         } else {
             return FALSE;
         }
     }
 }
Ejemplo n.º 13
0
 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.');
     }
 }
 protected function process()
 {
     $this->cuenta = FALSE;
     if (isset($_POST['nsubcuenta'])) {
         $subc0 = new subcuenta();
         $subc0->codcuenta = $_POST['codcuenta'];
         $subc0->codejercicio = $_POST['ejercicio'];
         $subc0->codsubcuenta = $_POST['nsubcuenta'];
         $subc0->descripcion = $_POST['descripcion'];
         $subc0->idcuenta = $_POST['idcuenta'];
         if ($subc0->save()) {
             header('Location: ' . $subc0->url());
         } else {
             $this->new_error_msg('Error al crear la subcuenta.');
         }
         $this->cuenta = $subc0->get_cuenta();
     } else {
         if (isset($_GET['deletes'])) {
             $subc0 = new subcuenta();
             $subc1 = $subc0->get($_GET['deletes']);
             if ($subc1) {
                 $this->cuenta = $subc1->get_cuenta();
                 if ($subc1->delete()) {
                     $this->new_message('Subcuenta eliminada correctamente.');
                 } else {
                     $this->new_error_msg('Error al eliminar la subcuenta.');
                 }
             } else {
                 $this->new_error_msg('Subcuenta no encontrada.');
             }
         } else {
             if (isset($_GET['id'])) {
                 $cuenta = new cuenta();
                 $this->cuenta = $cuenta->get($_GET['id']);
                 if ($this->cuenta and isset($_POST['descripcion'])) {
                     $this->cuenta->descripcion = $_POST['descripcion'];
                     if ($_POST['idcuentaesp'] == '---') {
                         $this->cuenta->idcuentaesp = NULL;
                     } else {
                         $this->cuenta->idcuentaesp = $_POST['idcuentaesp'];
                     }
                     if ($this->cuenta->save()) {
                         $this->new_message('Cuenta modificada correctamente.');
                     } else {
                         $this->new_error_msg('Error al modificar la cuenta.');
                     }
                 }
             }
         }
     }
     if ($this->cuenta) {
         /// configuramos la página previa
         $this->ppage = $this->page->get('contabilidad_epigrafes');
         if ($this->ppage) {
             $this->ppage->title = 'Epígrafe: ' . $this->cuenta->codepigrafe;
             $this->ppage->extra_url = '&epi=' . $this->cuenta->idepigrafe;
         }
         $this->page->title = 'Cuenta: ' . $this->cuenta->codcuenta;
         $this->ejercicio = $this->cuenta->get_ejercicio();
         $this->buttons[] = new fs_button_img('b_eliminar', 'Eliminar', 'trash.png', '#', TRUE);
     } else {
         $this->new_error_msg("Cuenta no encontrada.");
         $this->ppage = $this->page->get('contabilidad_cuentas');
     }
 }
 private function buscar_subcuenta()
 {
     /// desactivamos la plantilla HTML
     $this->template = FALSE;
     $subcuenta = new subcuenta();
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($this->today());
     $json = array();
     foreach ($subcuenta->search_by_ejercicio($ejercicio->codejercicio, $_REQUEST['buscar_subcuenta']) as $subc) {
         $json[] = array('value' => $subc->codsubcuenta, 'data' => $subc->descripcion, 'saldo' => $subc->saldo, 'link' => $subc->url());
     }
     header('Content-Type: application/json');
     echo json_encode(array('query' => $_REQUEST['buscar_subcuenta'], 'suggestions' => $json));
 }
Ejemplo n.º 16
0
 public function get_subcuentas()
 {
     $subcuenta = new subcuenta();
     return $subcuenta->all_from_cuenta($this->idpgrupo);
 }
Ejemplo n.º 17
0
 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;
 }
Ejemplo n.º 18
0
 private function pagar_recibos()
 {
     $pagados = 0;
     $eje0 = new ejercicio();
     $ejercicio = $eje0->get_by_fecha($this->remesa->fechacargo);
     $cuentab = $this->cuentab->get($this->remesa->codcuenta);
     if ($cuentab) {
         $subc0 = new subcuenta();
         $subcaja = $subc0->get_by_codigo($cuentab->codsubcuenta, $ejercicio->codejercicio);
         if ($subcaja) {
             $cli0 = new cliente();
             $recli = new recibo_cliente();
             foreach ($recli->all_from_remesa($this->remesa->idremesa) as $recibo) {
                 $cliente = $cli0->get($recibo->codcliente);
                 if ($cliente) {
                     $subcli = $cliente->get_subcuenta($ejercicio->codejercicio);
                     if ($subcli) {
                         $pago = new pago_recibo_cliente();
                         $pago->idrecibo = $recibo->idrecibo;
                         $pago->idremesa = $this->remesa->idremesa;
                         $pago->fecha = $this->remesa->fechacargo;
                         $pago->idsubcuenta = $subcaja->idsubcuenta;
                         $pago->codsubcuenta = $subcaja->codsubcuenta;
                         $pago->idasiento = $this->nuevo_asiento_pago($recibo, $pago, $ejercicio, $subcli);
                         if ($pago->save()) {
                             $recibo->estado = 'Pagado';
                             $recibo->fechap = $this->remesa->fechacargo;
                             if ($recibo->save()) {
                                 $pagados++;
                             }
                         } else {
                             $this->new_error_msg('Imposible guardar el pago del recibo ' . $recibo->codigo);
                         }
                     }
                 }
             }
             $this->new_message($pagados . ' recibos marcados como pagados.');
         } else {
             $this->new_error_msg('La <a href="' . $cuentab->url() . '">cuenta bancaria</a> no está asociada a una subcuenta.');
         }
     } else {
         $this->new_error_msg('Cuenta bancaria no encontrada.');
     }
 }
Ejemplo n.º 19
0
 private function get_lineas_asiento()
 {
     $lineas = $this->asiento->get_partidas();
     $subc = new subcuenta();
     foreach ($lineas as $i => $lin) {
         $subcuenta = $subc->get($lin->idsubcuenta);
         if ($subcuenta) {
             $lineas[$i]->desc_subcuenta = $subcuenta->descripcion;
             $lineas[$i]->saldo = $subcuenta->saldo;
         } else {
             $lineas[$i]->desc_subcuenta = '';
             $lineas[$i]->saldo = 0;
         }
     }
     return $lineas;
 }
 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.');
             }
         }
     }
 }
Ejemplo n.º 21
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;
 }
 private function new_search()
 {
     /// cambiamos la plantilla HTML
     $this->template = 'ajax/subcuenta_asociada';
     $subcuenta = new subcuenta();
     $this->resultados = $subcuenta->search_by_ejercicio($_POST['ejercicio'], $_POST['query']);
 }
 private function contenido()
 {
     $subcuenta = new subcuenta();
     $this->subcuenta = FALSE;
     $this->subcuenta = $subcuenta->get($this->idsubcuenta);
     $this->ejercicio = $this->subcuenta->get_ejercicio();
     if ($this->subcuenta) {
         /// configuramos la página previa
         $this->ppage = $this->page->get('contabilidad_cuenta');
         $this->ppage->title = 'Cuenta: ' . $this->subcuenta->codcuenta;
         $this->ppage->extra_url = '&id=' . $this->subcuenta->idcuenta;
         ////////////////////////////////
         $this->offset = 0;
         if (isset($_GET['offset'])) {
             $this->offset = intval($_GET['offset']);
         }
         $this->resultados = $this->subcuenta->get_partidas($this->offset);
         $this->saldo_anterior = $this->subcuenta->get_partidas_saldo_anterior();
         $this->mes = substr($this->subcuenta->get_partidas_mes($this->offset), 5, 2);
         $this->periodo = $this->subcuenta->get_nom_mes($this->mes) . '  ' . $this->ejercicio->codejercicio;
         $this->periodo_seleccionado = $this->subcuenta->get_partidas_libros($this->mes, $this->offset);
         $this->count_periodo_selecc = count($this->subcuenta->get_partidas_libros_total($this->mes));
         $this->periodo_generado = $this->subcuenta->get_partidas_libros_ver($this->mes, $this->offset);
     }
 }
Ejemplo n.º 24
0
 public function get_contrapartida()
 {
     if (is_null($this->idcontrapartida)) {
         return FALSE;
     } else {
         $subc = new subcuenta();
         return $subc->get($this->idcontrapartida);
     }
 }
 /**
  * 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)
 {
     $ge0 = new grupo_epigrafes();
     $epi0 = new epigrafe();
     $cuenta0 = new cuenta();
     $subcuenta0 = new subcuenta();
     $lineas = array();
     $sql = "SELECT p.codsubcuenta, SUM(p.debe) as debe, SUM(p.haber) as haber" . " FROM co_partidas p, co_asientos a WHERE p.idasiento = a.idasiento" . " AND a.codejercicio = " . $this->empresa->var2str($eje->codejercicio) . " AND a.fecha >= " . $this->empresa->var2str($fechaini) . " AND fecha <= " . $this->empresa->var2str($fechafin);
     if ($excluir) {
         foreach ($excluir as $exc) {
             $sql .= " AND p.idasiento != " . $this->empresa->var2str($exc);
         }
     }
     $sql .= " GROUP BY p.codsubcuenta ORDER BY codsubcuenta ASC;";
     $data = $this->db->select($sql);
     if ($data) {
         $grupos = $ge0->all_from_ejercicio($eje->codejercicio);
         $epigrafes = $epi0->all_from_ejercicio($eje->codejercicio);
         for ($i = 1; $i < 10; $i++) {
             $debe = 0;
             $haber = 0;
             foreach ($data as $d) {
                 if (substr($d['codsubcuenta'], 0, 1) == (string) $i) {
                     $debe += floatval($d['debe']);
                     $haber += floatval($d['haber']);
                 }
             }
             /// añadimos el grupo
             foreach ($grupos as $ge) {
                 if ($ge->codgrupo == $i) {
                     $lineas[] = array('cuenta' => $i, 'descripcion' => $ge->descripcion, 'debe' => $debe, 'haber' => $haber);
                     break;
                 }
             }
             for ($j = 0; $j < 10; $j++) {
                 $debe = 0;
                 $haber = 0;
                 foreach ($data as $d) {
                     if (substr($d['codsubcuenta'], 0, 2) == (string) $i . $j) {
                         $debe += floatval($d['debe']);
                         $haber += floatval($d['haber']);
                     }
                 }
                 /// añadimos el epígrafe
                 foreach ($epigrafes as $ep) {
                     if ($ep->codepigrafe == (string) $i . $j) {
                         $lineas[] = array('cuenta' => $i . $j, 'descripcion' => $ep->descripcion, 'debe' => $debe, 'haber' => $haber);
                         break;
                     }
                 }
                 for ($k = 0; $k < 10; $k++) {
                     $debe = 0;
                     $haber = 0;
                     foreach ($data as $d) {
                         if (substr($d['codsubcuenta'], 0, 3) == (string) $i . $j . $k) {
                             $debe += floatval($d['debe']);
                             $haber += floatval($d['haber']);
                         }
                     }
                     /// añadimos la cuenta
                     if ($debe != 0 or $haber != 0) {
                         $cuenta = $cuenta0->get_by_codigo($i . $j . $k, $eje->codejercicio);
                         if ($cuenta) {
                             $lineas[] = array('cuenta' => $i . $j . $k, 'descripcion' => $cuenta->descripcion, 'debe' => $debe, 'haber' => $haber);
                         } else {
                             $lineas[] = array('cuenta' => $i . $j . $k, 'descripcion' => '-', 'debe' => $debe, 'haber' => $haber);
                         }
                     }
                     /// añadimos las subcuentas
                     foreach ($data as $d) {
                         if (substr($d['codsubcuenta'], 0, 3) == (string) $i . $j . $k) {
                             $desc = '';
                             $subc = $subcuenta0->get_by_codigo($d['codsubcuenta'], $eje->codejercicio);
                             if ($subc) {
                                 $desc = $subc->descripcion;
                             }
                             $lineas[] = array('cuenta' => $d['codsubcuenta'], 'descripcion' => $desc, 'debe' => floatval($d['debe']), 'haber' => floatval($d['haber']));
                         }
                     }
                 }
             }
         }
     }
     /// a partir de la lista generamos el documento
     $linea = 0;
     $tdebe = 0;
     $thaber = 0;
     while ($linea < count($lineas)) {
         if ($linea > 0) {
             $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('cuenta' => '<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($lineas))); $i++) {
             if (strlen($lineas[$i]['cuenta']) == 1) {
                 $a = '<b>';
                 $b = '</b>';
                 $tdebe += $lineas[$i]['debe'];
                 $thaber += $lineas[$i]['haber'];
             } else {
                 if (strlen($lineas[$i]['cuenta']) == 2) {
                     $a = $b = '';
                 } else {
                     $a = '<i>';
                     $b = '</i>';
                 }
             }
             $pdf_doc->add_table_row(array('cuenta' => $a . $lineas[$i]['cuenta'] . $b, 'descripcion' => $a . substr($lineas[$i]['descripcion'], 0, 50) . $b, 'debe' => $a . $this->show_numero($lineas[$i]['debe']) . $b, 'haber' => $a . $this->show_numero($lineas[$i]['haber']) . $b, 'saldo' => $a . $this->show_numero(floatval($lineas[$i]['debe']) - floatval($lineas[$i]['haber'])) . $b));
         }
         $linea += 48;
         /// añadimos las sumas de la línea actual
         $desc = 'Suma y sigue';
         if ($linea >= count($lineas)) {
             $desc = 'Totales';
         }
         $pdf_doc->add_table_row(array('cuenta' => '', 'descripcion' => '<b>' . $desc . '</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));
     }
 }
 /**
  * @param asiento $asiento
  * @param divisa $divisa
  * @param $codsubcuenta
  * @param array $datos
  */
 private static function add_partida(asiento $asiento, divisa $divisa, $codsubcuenta, array $datos)
 {
     $subcuenta = subcuenta::fetch($codsubcuenta, $asiento->codejercicio);
     if (!isset(contabilidad_asiento::$partidas[$codsubcuenta])) {
         //Si no está en la lista de partidas entonces agrego una partida con la informacion base
         contabilidad_asiento::$partidas[$codsubcuenta] = array('idasiento' => $asiento->idasiento, 'idsubcuenta' => $subcuenta->idsubcuenta, 'codsubcuenta' => $codsubcuenta, 'idconcepto' => $asiento->idconcepto, 'concepto' => $asiento->concepto, 'tasaconv' => $divisa->tasaconv, 'coddivisa' => $divisa->coddivisa, 'tipodocumento' => $asiento->tipodocumento, 'documento' => $asiento->documento, 'codejercicio' => $asiento->codejercicio, 'debe' => (double) 0.0, 'haber' => (double) 0.0, 'comprobante' => '', 'referencia' => '');
     }
     //Agrego los valores en $datos a la partida
     contabilidad_asiento::$partidas[$codsubcuenta]['debe'] += (double) $datos['debe'];
     contabilidad_asiento::$partidas[$codsubcuenta]['haber'] += (double) $datos['haber'];
     contabilidad_asiento::$partidas[$codsubcuenta]['comprobante'] += $datos['comprobante'];
 }
Ejemplo n.º 27
0
 private function get_subcuentas()
 {
     $this->ejercicio = FALSE;
     $this->subcuenta_pro = FALSE;
     $this->subcuentas_pago = array();
     $subcuenta = new subcuenta();
     $pro = new proveedor();
     $this->proveedor = $pro->get($this->recibo->codproveedor);
     if ($this->proveedor) {
         $eje0 = new ejercicio();
         if (isset($_POST['fecha'])) {
             $this->ejercicio = $eje0->get_by_fecha($_POST['fecha']);
         } else {
             $this->ejercicio = $eje0->get_by_fecha($this->today());
         }
         if ($this->ejercicio) {
             $this->subcuenta_pro = $this->proveedor->get_subcuenta($this->ejercicio->codejercicio);
             /// añadimos la subcuenta de la cuenta bancaria
             $cb0 = new cuenta_banco();
             $fp0 = new forma_pago();
             $formap = $fp0->get($this->recibo->codpago);
             if ($formap) {
                 if ($formap->codcuenta) {
                     $cuentab = $cb0->get($formap->codcuenta);
                     if ($cuentab) {
                         $subc = $subcuenta->get_by_codigo($cuentab->codsubcuenta, $this->ejercicio->codejercicio);
                         if ($subc) {
                             $this->subcuentas_pago[] = $subc;
                         }
                     }
                 }
             }
             /// añadimos todas las subcuentas de caja
             $sql = "SELECT * FROM co_subcuentas WHERE idcuenta IN " . "(SELECT idcuenta FROM co_cuentas WHERE codejercicio = " . $this->ejercicio->var2str($this->ejercicio->codejercicio) . " AND idcuentaesp = 'CAJA');";
             $data = $this->db->select($sql);
             if ($data) {
                 foreach ($data as $d) {
                     $this->subcuentas_pago[] = new subcuenta($d);
                 }
             }
         } else {
             $this->new_error_msg('Ejercicio no encontrado.');
         }
     }
 }