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(); } } } } }
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'); } }
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'); } }
public function get_subcuenta() { $subc = new \subcuenta(); return $subc->get($this->idsubcuenta); }
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; } }
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; } } }
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)); }
public function get_subcuentas() { $subcuenta = new subcuenta(); return $subcuenta->all_from_cuenta($this->idpgrupo); }
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; }
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.'); } }
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.'); } } } }
/** * 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); } }
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']; }
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.'); } } }