/** * Devuelve la subcuenta asignada al proveedor para el ejercicio $eje, * si no hay una subcuenta asignada, intenta crearla. Si falla devuelve FALSE. * @param type $eje * @return subcuenta */ public function get_subcuenta($eje) { $subcuenta = FALSE; foreach ($this->get_subcuentas() as $s) { if ($s->codejercicio == $eje) { $subcuenta = $s; break; } } if (!$subcuenta) { /// intentamos crear la subcuenta y asociarla $continuar = TRUE; $cuenta = new cuenta(); if ($this->acreedor) { $cpro = $cuenta->get_cuentaesp('ACREED', $eje); if (!$cpro) { $cpro = $cuenta->get_by_codigo('410', $eje); } } else { $cpro = $cuenta->get_cuentaesp('PROVEE', $eje); } if ($cpro) { $subc0 = $cpro->new_subcuenta($this->codproveedor); $subc0->descripcion = $this->razonsocial; if (!$subc0->save()) { $this->new_error_msg('Imposible crear la subcuenta para el proveedor ' . $this->codproveedor); $continuar = FALSE; } if ($continuar) { $scpro = new subcuenta_proveedor(); $scpro->codejercicio = $eje; $scpro->codproveedor = $this->codproveedor; $scpro->codsubcuenta = $subc0->codsubcuenta; $scpro->idsubcuenta = $subc0->idsubcuenta; if ($scpro->save()) { $subcuenta = $subc0; } else { $this->new_error_msg('Imposible asociar la subcuenta para el proveedor ' . $this->codproveedor); } } } else { $this->new_error_msg('No se encuentra ninguna cuenta especial para proveedores.'); } } return $subcuenta; }
protected function process() { $this->codejercicio = $this->empresa->codejercicio; $this->ejercicio = new ejercicio(); $grupo0 = new grupo_epigrafes(); $epi0 = new epigrafe(); $this->super_epigrafes = array(); /// ¿El usuario tiene permiso para eliminar en esta página? $this->allow_delete = $this->user->allow_delete_on(__CLASS__); if (isset($_POST['ngrupo'])) { $this->epigrafe = FALSE; $this->grupo = $grupo0->get_by_codigo($_GET['ngrupo'], $_POST['ejercicio']); if (!$this->grupo) { $this->grupo = new grupo_epigrafes(); $this->grupo->codejercicio = $_POST['ejercicio']; $this->grupo->codgrupo = $_POST['ngrupo']; $this->grupo->descripcion = $_POST['descripcion']; if ($this->grupo->save()) { header('Location: ' . $this->grupo->url()); } else { $this->new_error_msg('Error al guardar el grupo.'); $this->grupo = FALSE; } } } else { if (isset($_GET['grupo'])) { $this->epigrafe = FALSE; $this->grupo = $grupo0->get($_GET['grupo']); if ($this->grupo and isset($_POST['descripcion'])) { $this->grupo->descripcion = $_POST['descripcion']; if ($this->grupo->save()) { $this->new_message('Grupo modificado correctamente.'); } else { $this->new_error_msg('Error al modificar el grupo.'); } } } else { if (isset($_GET['deleteg'])) { $grupo1 = $grupo0->get($_GET['deleteg']); if ($grupo1) { if ($grupo1->delete()) { $this->new_message('Grupo eliminado correctamente.'); } else { $this->new_error_msg('Error al eliminar el grupo.'); } } else { $this->new_error_msg('Grupo no encontrado.'); } $this->grupo = FALSE; $this->epigrafe = FALSE; } else { if (isset($_POST['nepigrafe'])) { $this->epigrafe = $epi0->get_by_codigo($_POST['nepigrafe'], $_POST['ejercicio']); if (!$this->epigrafe) { $this->epigrafe = new epigrafe(); $this->epigrafe->codejercicio = $_POST['ejercicio']; $this->epigrafe->codepigrafe = $_POST['nepigrafe']; if (isset($_POST['idpadre'])) { $this->epigrafe->idpadre = $_POST['idpadre']; } else { $this->epigrafe->codgrupo = $_POST['codgrupo']; $this->epigrafe->idgrupo = $_POST['idgrupo']; $this->grupo = $grupo0->get($_POST['idgrupo']); } $this->epigrafe->descripcion = $_POST['descripcion']; if ($this->epigrafe->save()) { header('Location: ' . $this->epigrafe->url()); } else { $this->new_error_msg('Error al guardar el epígrafe.'); } } } else { if (isset($_GET['epi'])) { $this->grupo = FALSE; $this->epigrafe = $epi0->get($_GET['epi']); if ($this->ejercicio and isset($_POST['descripcion'])) { $this->epigrafe->descripcion = $_POST['descripcion']; if ($this->epigrafe->save()) { $this->new_message('Epígrafe modificado correctamente.'); } else { $this->new_error_msg('Error al modificar el epígrafe.'); } } } else { if (isset($_GET['deletee'])) { $epi1 = $epi0->get($_GET['deletee']); if ($epi1) { $this->grupo = $grupo0->get($epi1->idgrupo); if ($epi1->delete()) { $this->new_message('Epígrafe eliminado correctamente.'); } else { $this->new_error_msg('Error al eliminar el epígrafe.'); } } else { $this->new_error_msg('Epígrafe no encontrado.'); $this->grupo = FALSE; } } else { if (isset($_POST['ncuenta'])) { $this->grupo = FALSE; $this->epigrafe = FALSE; $cuenta0 = new cuenta(); $cuenta1 = $cuenta0->get_by_codigo($_POST['ncuenta'], $_POST['ejercicio']); if ($cuenta1) { header('Location: ' . $cuenta1->url()); } else { $cuenta1 = new cuenta(); $cuenta1->codcuenta = $_POST['ncuenta']; $cuenta1->codejercicio = $_POST['ejercicio']; $cuenta1->codepigrafe = $_POST['codepigrafe']; $cuenta1->descripcion = $_POST['descripcion']; $cuenta1->idepigrafe = $_POST['idepigrafe']; if ($cuenta1->save()) { header('Location: ' . $cuenta1->url()); } else { $this->new_error_msg('Error al guardar la cuenta.'); } $this->epigrafe = $epi0->get($_POST['idepigrafe']); } } else { if (isset($_GET['deletec'])) { $this->grupo = FALSE; $this->epigrafe = FALSE; $cuenta0 = new cuenta(); $cuenta1 = $cuenta0->get($_GET['deletec']); if ($cuenta1) { $this->epigrafe = $epi0->get($cuenta1->idepigrafe); if ($cuenta1->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.'); } } } } } } } } } if ($this->grupo) { $this->ppage = $this->page->get($this->page->name); $this->page->title = 'Grupo: ' . $this->grupo->codgrupo; $this->resultados = $this->grupo->get_epigrafes(); } else { if ($this->epigrafe) { /// configuramos la página previa $this->ppage = $this->page->get($this->page->name); if (!is_null($this->epigrafe->idgrupo)) { $this->ppage->title = 'Grupo: ' . $this->epigrafe->codgrupo; $this->ppage->extra_url = '&grupo=' . $this->epigrafe->idgrupo; } else { if (!is_null($this->epigrafe->idpadre)) { $this->ppage->title = 'Padre'; $this->ppage->extra_url = '&epi=' . $this->epigrafe->idpadre; } } $this->page->title = 'Epigrafe: ' . $this->epigrafe->codepigrafe; $this->resultados = $this->epigrafe->get_cuentas(); } else { if (isset($_POST['ejercicio'])) { $this->codejercicio = $_POST['ejercicio']; $this->grupo = FALSE; $this->epigrafe = FALSE; $this->resultados = $grupo0->all_from_ejercicio($this->codejercicio); $this->super_epigrafes = $epi0->super_from_ejercicio($this->codejercicio); } else { $this->grupo = FALSE; $this->epigrafe = FALSE; $this->resultados = $grupo0->all_from_ejercicio($this->empresa->codejercicio); $this->super_epigrafes = $epi0->super_from_ejercicio($this->empresa->codejercicio); } } } }
private function cerrar_ejercicio() { $this->new_message('Cerrando ejercicio...'); $asiento = new asiento(); $continuar = TRUE; if (isset($this->ejercicio->idasientopyg)) { $aspyg = $asiento->get($this->ejercicio->idasientopyg); if ($aspyg) { if (!$aspyg->delete()) { $this->new_error_msg('Imposible eliminar el asiento de pérdidas y ganancias.'); $continuar = FALSE; } } else { $this->ejercicio->save(); } /// al guardar ya comprueba los asientos especiales } if (isset($this->ejercicio->idasientocierre)) { $asc = $asiento->get($this->ejercicio->idasientocierre); if ($asc) { if (!$asc->delete()) { $this->new_error_msg('Imposible eliminar el asiento de cierre.'); $continuar = FALSE; } } else { $this->ejercicio->save(); } /// al guardar ya comprueba los asientos especiales } $siguiente_ejercicio = $this->ejercicio->get_by_fecha(Date('d-m-Y', strtotime($this->ejercicio->fechafin) + 24 * 3600)); if (isset($siguiente_ejercicio->idasientoapertura)) { $asap = $asiento->get($siguiente_ejercicio->idasientoapertura); if ($asap) { if (!$asap->delete()) { $this->new_error_msg('Imposible eliminar el asiento de apertura.'); $continuar = FALSE; } } else { $this->ejercicio->save(); } /// al guardar ya comprueba los asientos especiales } if ($continuar) { $asiento_pyg = new asiento(); $asiento_pyg->codejercicio = $this->ejercicio->codejercicio; $asiento_pyg->concepto = 'Regularización ejercicio ' . $this->ejercicio->nombre; $asiento_pyg->editable = FALSE; $asiento_pyg->fecha = $this->ejercicio->fechafin; if (!$asiento_pyg->save()) { $continuar = FALSE; } } if ($continuar) { $asiento_cierre = new asiento(); $asiento_cierre->codejercicio = $this->ejercicio->codejercicio; $asiento_cierre->concepto = 'Asiento de cierre del ejercicio ' . $this->ejercicio->nombre; $asiento_cierre->editable = FALSE; $asiento_cierre->fecha = $this->ejercicio->fechafin; if (!$asiento_cierre->save()) { $continuar = FALSE; } } if ($continuar) { $asiento_apertura = new asiento(); $asiento_apertura->codejercicio = $siguiente_ejercicio->codejercicio; $asiento_apertura->concepto = 'Asiento de apertura del ejercicio ' . $siguiente_ejercicio->nombre; $asiento_apertura->editable = FALSE; $asiento_apertura->fecha = $siguiente_ejercicio->fechainicio; if (!$asiento_apertura->save()) { $continuar = FALSE; } } if ($continuar) { /// actualizamos los saldos de las subcuentas: $subcuenta = new subcuenta(); foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) { $sc->save(); } /* * Abonamos y cargamos los saldos de las cuentas de los grupos 6 y 7, * la diferencia la enviamos a la cuenta 129. */ $diferencia = 0; foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) { if (in_array(substr($sc->codcuenta, 0, 1), array('6', '7')) and $sc->tiene_saldo()) { $ppyg = new partida(); $ppyg->idasiento = $asiento_pyg->idasiento; $ppyg->concepto = $asiento_pyg->concepto; $ppyg->idsubcuenta = $sc->idsubcuenta; $ppyg->codsubcuenta = $sc->codsubcuenta; if ($sc->saldo < 0) { $ppyg->debe = abs($sc->saldo); } else { $ppyg->haber = $sc->saldo; } $diferencia += $ppyg->debe - $ppyg->haber; $ppyg->coddivisa = $sc->coddivisa; if (!$ppyg->save()) { $continuar = FALSE; } } } $cuenta = new cuenta(); $cuenta_pyg = $cuenta->get_by_codigo('129', $this->ejercicio->codejercicio); if ($cuenta_pyg) { $subcuenta_pyg = FALSE; foreach ($cuenta_pyg->get_subcuentas() as $sc) { $subcuenta_pyg = $sc; break; } if ($subcuenta_pyg) { $ppyg = new partida(); $ppyg->idasiento = $asiento_pyg->idasiento; $ppyg->concepto = $asiento_pyg->concepto; $ppyg->idsubcuenta = $subcuenta_pyg->idsubcuenta; $ppyg->codsubcuenta = $subcuenta_pyg->codsubcuenta; $ppyg->haber = $diferencia; $ppyg->coddivisa = $sc->coddivisa; if (!$ppyg->save()) { $continuar = FALSE; } } else { $this->new_error_msg('No se encuentra una subcuenta para la cuenta 129.'); $continuar = FALSE; } } else { $this->new_error_msg('No se encuentra la cuenta 129.'); $continuar = FALSE; } /* * Generamos los asientos de cierre y apertura */ foreach ($subcuenta->all_from_ejercicio($this->ejercicio->codejercicio) as $sc) { if ($sc->tiene_saldo()) { $pac = new partida(); $pac->idasiento = $asiento_cierre->idasiento; $pac->concepto = $asiento_cierre->concepto; $pac->idsubcuenta = $sc->idsubcuenta; $pac->codsubcuenta = $sc->codsubcuenta; if ($sc->saldo < 0) { $pac->debe = abs($sc->saldo); } else { $pac->haber = $sc->saldo; } $pac->coddivisa = $sc->coddivisa; if (!$pac->save()) { $continuar = FALSE; } if ($sc->codcuenta == '129') { $nsc = $subcuenta->get_by_codigo('1200000000', $siguiente_ejercicio->codejercicio, TRUE); } else { $nsc = $subcuenta->get_by_codigo($sc->codsubcuenta, $siguiente_ejercicio->codejercicio, TRUE); } if ($nsc) { $paa = new partida(); $paa->idasiento = $asiento_apertura->idasiento; $paa->concepto = $asiento_apertura->concepto; $paa->idsubcuenta = $nsc->idsubcuenta; $paa->codsubcuenta = $nsc->codsubcuenta; if ($sc->saldo > 0) { $paa->debe = round($sc->saldo, FS_NF0); } else { $paa->haber = round(abs($sc->saldo), FS_NF0); } $paa->coddivisa = $nsc->coddivisa; if (!$paa->save()) { $continuar = FALSE; } } else { $continuar = FALSE; } } } /// comprobamos los nuevos asientos $total = 0; foreach ($asiento_pyg->get_partidas() as $part) { $total += $part->debe - $part->haber; } if (abs($total) >= 0.01) { $continuar = FALSE; $this->new_error_msg('Asiento de pérdidas y ganancias descuadrado.'); } $total = 0; foreach ($asiento_cierre->get_partidas() as $part) { $total += $part->debe - $part->haber; } if (abs($total) >= 0.01) { $continuar = FALSE; $this->new_error_msg('Asiento de cierre descuadrado.'); } $total = 0; foreach ($asiento_apertura->get_partidas() as $part) { $total += $part->debe - $part->haber; } if (abs($total) >= 0.01) { $subcuenta_redondeo = $subcuenta->get_by_codigo('6780000000', $asiento_apertura->codejercicio); if ($subcuenta) { $npaa = new partida(); $npaa->idasiento = $asiento_apertura->idasiento; $npaa->concepto = $asiento_apertura->concepto; $npaa->idsubcuenta = $subcuenta_redondeo->idsubcuenta; $npaa->codsubcuenta = $subcuenta_redondeo->codsubcuenta; $npaa->coddivisa = $subcuenta_redondeo->coddivisa; if ($total > 0) { $npaa->haber = $total; } else { $npaa->debe = $total; } $npaa->save(); } else { $continuar = FALSE; $this->new_error_msg('Asiento de apertura descuadrado.'); } } /// cerramos el ejercicio if ($continuar) { $this->ejercicio->estado = 'CERRADO'; $this->ejercicio->idasientopyg = $asiento_pyg->idasiento; $this->ejercicio->idasientocierre = $asiento_cierre->idasiento; if ($this->ejercicio->save()) { $this->new_message('Ejercicio cerrado correctamente.'); } else { $this->new_error_msg('Error al cerrar el ejercicio.'); } $siguiente_ejercicio->idasientoapertura = $asiento_apertura->idasiento; if (!$siguiente_ejercicio->save()) { $this->new_error_msg('Error al modificar el siguiente ejercicio.'); } } else { $this->new_error_msg('Error al generar los asientos.'); if ($asiento_pyg->delete()) { $this->new_message('Asiento de pérdidas y ganancias eliminado.'); } else { $this->new_error_msg('Imposible eliminar el asiento de pérdidas y ganancias.'); } if ($asiento_cierre->delete()) { $this->new_message('Asiento de cierre eliminado.'); } else { $this->new_error_msg('Imposible eliminar el asiento de cierre.'); } if ($asiento_apertura->delete()) { $this->new_message('Asiento de apertura eliminado.'); } else { $this->new_error_msg('Imposible eliminar el asiento de apertura.'); } } } }
public function 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; } } }
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; } } }
/** * 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)); } }