BalanceView Class Reference

Balance de Sumas y Saldos plano. More...

#include <balanceview.h>

Inheritance diagram for BalanceView:

FichaBc Ui_BalanceBase Ficha BLWidget DBRecord dialogChanges QWidget PEmpresaBase

Public Slots

void on_mui_actualizar_clicked ()

Public Member Functions

 BalanceView (Empresa *, QWidget *parent=0, int flags=0)
 Array que almacena los identificadores de los centros de coste.
void inicializa1 (QString, QString, QString, QString, QString)
 Se encarga de inicializar la clase con los parámetros que se le han pasado.
 ~BalanceView ()
void imprimir ()
 SLOT que responde a la pulsación del botón de imprimir.
virtual void accept ()

Private Member Functions

void presentar ()
 Presenta el Balance.
void presentarSyS (QString, QString, QString, QString, int, int, bool)
 Presenta el Balance de Sumas y Saldos.

Private Attributes

cursor2m_cursorcta
 Cursor para recorrer las cuentas.
int numdigitos
 El número de dígitos que tienen las cuentas de la empresa.

Detailed Description

Balance de Sumas y Saldos plano.

Esta clase muestra un balance de sumas y saldos de la empresa abierta. Esta clase genera el balance de sumas y saldos y lo muestra por pantalla en una ventana diseñada específicamente para ello.

Definition at line 45 of file balanceview.h.


Constructor & Destructor Documentation

BalanceView::BalanceView ( Empresa emp,
QWidget parent = 0,
int  flags = 0 
)

Array que almacena los identificadores de los centros de coste.

Parameters:
emp 
parent 

EStablezco cual es la tabla en la que basarse para el sistema de permisos.

Inicializamos la tabla de nivel.

Iniciamos los componentes de la fecha para que al principio aparezcan como el año inicial.

Definition at line 55 of file balanceview.cpp.

References _depura(), Ui_BalanceBase::combonivel, FichaBc::empresaBase(), Ui_BalanceBase::m_codigofinal, Ui_BalanceBase::m_codigoinicial, Ui_BalanceBase::m_fechafinal1, Ui_BalanceBase::m_fechainicial1, EmpresaBase::meteWindow(), numdigitos, Empresa::numdigitosempresa(), Ficha::setDBTableName(), BusquedaCuenta::setEmpresaBase(), BusquedaFecha::setText(), Ficha::setTitleName(), and Ui_BalanceBase::setupUi().

00056         : FichaBc(emp, parent) {
00057     _depura("BalanceView::BalanceView", 0);
00058     setupUi(this);
00059 
00060     setTitleName(tr("Balance"));
00062     setDBTableName("asiento");
00063 
00064     numdigitos = empresaBase()->numdigitosempresa();
00065     m_codigoinicial->setEmpresaBase(emp);
00066     m_codigofinal->setEmpresaBase(emp);
00068     combonivel->insertItem(0, "2");
00069     combonivel->insertItem(1, "3");
00070     combonivel->insertItem(2, "4");
00071     combonivel->insertItem(3, "5");
00072     combonivel->insertItem(4, "6");
00073     combonivel->insertItem(5, "7");
00074     combonivel->insertItem(6, "8");
00075     combonivel->insertItem(7, "9");
00076     combonivel->insertItem(8, "10");
00077     combonivel->insertItem(9, "11");
00078     combonivel->insertItem(10, "12");
00079     combonivel->insertItem(11, "13");
00080     combonivel->insertItem(12, "14");
00081     combonivel->insertItem(13, "15");
00082     combonivel->insertItem(14, "16");
00083     combonivel->insertItem(15, "17");
00084 
00085 
00088     QString cadena;
00089     cadena.sprintf("%2.2d/%2.2d/%4.4d", 1, 1, QDate::currentDate().year());
00090     m_fechainicial1->setText(cadena);
00091     cadena.sprintf("%2.2d/%2.2d/%4.4d", 31, 12, QDate::currentDate().year());
00092     m_fechafinal1->setText(cadena);
00093 
00094 
00095     empresaBase()->meteWindow(windowTitle(), this);
00096     _depura("END BalanceView::BalanceView", 0);
00097 }

BalanceView::~BalanceView (  ) 

Definition at line 103 of file balanceview.cpp.

References _depura().

00103                           {
00104     _depura("BalanceView::~BalanceView", 0);
00105     _depura("END BalanceView::~BalanceView", 0);
00106 }


Member Function Documentation

void BalanceView::inicializa1 ( QString  codinicial,
QString  codfinal,
QString  fecha1,
QString  fecha2,
QString  idc_coste 
)

Se encarga de inicializar la clase con los parámetros que se le han pasado.

Parameters:
codinicial 
codfinal 
fecha1 
fecha2 
idc_coste 

Definition at line 129 of file balanceview.cpp.

References _depura(), Ui_BalanceBase::m_codigofinal, Ui_BalanceBase::m_codigoinicial, Ui_BalanceBase::m_fechafinal1, Ui_BalanceBase::m_fechainicial1, normalizafecha(), BusquedaFecha::setText(), and BusquedaCuenta::setText().

Referenced by SubForm2Bc::boton_balance1().

00129                                                                                                                      {
00130     _depura("BalanceView::inicializa1", 0);
00131     m_codigoinicial->setText(codinicial);
00132     m_codigofinal->setText(codfinal);
00133     m_fechainicial1->setText(normalizafecha(fecha1).toString("dd/MM/yyyy"));
00134     m_fechafinal1->setText(normalizafecha(fecha2).toString("dd/MM/yyyy"));
00135     _depura("END BalanceView::inicializa1", 0);
00136 }

void BalanceView::imprimir (  )  [virtual]

SLOT que responde a la pulsación del botón de imprimir.

Reimplemented from DBRecord.

Definition at line 399 of file balanceview.cpp.

References _depura(), FichaBc::empresaBase(), FALSE, BalancePrintView::inicializa1(), Ui_BalanceBase::m_codigofinal, Ui_BalanceBase::m_codigoinicial, Ui_BalanceBase::m_fechafinal1, Ui_BalanceBase::m_fechainicial1, BusquedaFecha::text(), and BusquedaCuenta::text().

00399                            {
00400     _depura("BalanceView::on_mui_imprimir_clicked", 0);
00401     BalancePrintView *balan = new BalancePrintView(empresaBase());
00402     balan->inicializa1(m_codigoinicial->text(), m_codigofinal->text(), m_fechainicial1->text(), m_fechafinal1->text(), FALSE);
00403     balan->exec();
00404     _depura("END BalanceView::on_mui_imprimir_clicked", 0);
00405 }

void BalanceView::accept (  )  [virtual]

Definition at line 386 of file balanceview.cpp.

References _depura(), and presentar().

Referenced by SubForm2Bc::boton_balance1(), Empresa::boton_reload(), and on_mui_actualizar_clicked().

00386                          {
00387     _depura("BalanceView::accept", 0);
00388     presentar();
00389     _depura("END BalanceView::accept", 0);
00390 }

void BalanceView::presentar (  )  [private]

Presenta el Balance.

A partir de ahora ya no hay tablas temporales ni accesos a disco que merman la ejecución del programa. Se genera un árbol dinámico en la memoria RAM que contendra todas y cada una de las cuentas del PGC con sus saldos.

Balance de Sumas y Saldos.

Definition at line 145 of file balanceview.cpp.

References _depura(), Ui_BalanceBase::checksuperiores, BusquedaCuenta::codigocuenta(), Ui_BalanceBase::combonivel, Ui_BalanceBase::m_codigofinal, Ui_BalanceBase::m_codigoinicial, Ui_BalanceBase::m_fechafinal1, Ui_BalanceBase::m_fechainicial1, presentarSyS(), and BusquedaFecha::text().

Referenced by accept().

00145                             {
00146     _depura("BalanceView::presentar", 0);
00147     QString finicial = m_fechainicial1->text();
00148     QString ffinal = m_fechafinal1->text();
00149     QString cinicial = m_codigoinicial->codigocuenta().left(2);
00150     if (cinicial == "") cinicial = "1";
00151     QString cfinal = m_codigofinal->codigocuenta();
00152     if (cfinal == "") cfinal = "9";
00153     int nivel = combonivel->currentText().toInt();
00154     bool jerarquico = checksuperiores->isChecked();
00155 
00160     //if (sumasysaldosButton->isChecked()) {
00162     presentarSyS(finicial, ffinal, cinicial, cfinal, nivel, 0, jerarquico);
00163     //} // end if
00164     _depura("END BalanceView::presentar", 0);
00165 }

void BalanceView::presentarSyS ( QString  finicial,
QString  ffinal,
QString  cinicial,
QString  cfinal,
int  nivel,
int  ,
bool  jerarquico 
) [private]

Presenta el Balance de Sumas y Saldos.

Parameters:
finicial 
ffinal 
cinicial 
cfinal 
nivel 
jerarquico 

Primero, averiguaremos la cantidad de ramas iniciales que nacen de la raíz (tantas como número de cuentas de nivel 2) y las vamos creando.

Cuenta raíz.

Se crea una rama en el árbol (de las primeritas que salen de una raíz).

Sacamos la subcadena para centros de coste y canales.

Ahora, usaremos el árbol para poner los datos a cada hoja (cuenta) según los períodos que necesitemos acotar. Para ello, vamos a recopilar todos los apuntes introducidos agrupados por cuenta para poder averiguar el estado contable de cada cuenta.

Poblamos el árbol de hojas (cuentas).

Para cada cuenta con apuntes introducidos hay que actualizar hojas del árbol.

Por fin, presentamos los valores. Aunque antes, prepararemos el Widget con la cabecera a mostrar.

Cada hoja del árbol usara uno de estos Widgets para mostrarse.

Mantenemos una tabla con índices de niveles del árbol.

Y el iterador para controlar donde accedemos, así como un índice adicional.

Acumulamos los totales para al final poder escribirlos.

Las variables de las filas en formato español.

Ahora, vamos a pintar en el Widget cada línea. Formamos la línea.

Si se van mostrar también las cuentas superiores, habrá que jerarquizar el árbol. Sino, se pinta cada línea al mismo nivel.

jerarquizando...

La hoja cuelga de la raíz principal.

Ascendemos por el árbol para colgar la hoja en el lugar correcto.

Insertamos el widget (hoja actual) en la tabla controlada y obtenemos su puntero iterador.

Borramos el resto de niveles que cuelgan, para no seguir colgando por esa rama.

Borra todas las entradas con la misma clave.

sin jerarquizar...

Formateamos un poquito la información mostrada.

Hacemos la actualización de los saldos totales en formato español y los ponemos en su Widget.

Eliminamos el árbol de la memória y cerramos la conexión con la BD.

Libermos posible memoria utilizada

Definition at line 177 of file balanceview.cpp.

References _depura(), Arbol::actualizahojas(), postgresiface2::begin(), selectcanalview::cadcanal(), SelectCCosteView::cadcoste(), postgresiface2::cargacursor(), postgresiface2::commit(), DEBE, DENOMINACION, Arbol::deshoja(), FichaBc::empresaBase(), cursor2::eof(), Empresa::getselcanales(), Empresa::getselccostes(), HABER, Arbol::hojaactual(), Arbol::inicia(), Arbol::inicializa(), mensajeInfo(), Ui_BalanceBase::mui_list, Arbol::nuevarama(), postgresiface2::rollback(), SALDO, cursor2::siguienteregistro(), Fixed::toQString(), Ui_BalanceBase::totaldebe, Ui_BalanceBase::totalhaber, Ui_BalanceBase::totalsaldo, Ui_BalanceBase::totalsaldoant, and cursor2::valor().

Referenced by presentar().

00177                                                                                                                                   {
00178     _depura("BalanceView::presentarSyS", 0);
00179     Fixed tsaldoant("0.00"), tdebe("0.00"), thaber("0.00"), tsaldo("0.00");
00180     cursor2 *ramas = NULL;
00181     cursor2 *hojas = NULL;
00182     try {
00185         empresaBase()->begin();
00186         QString query = "SELECT *, nivel(codigo) AS nivel FROM cuenta ORDER BY codigo";
00187 
00188         ramas = empresaBase()->cargacursor(query);
00189         Arbol *arbol;
00190         arbol = new Arbol;
00191         while (!ramas->eof()) {
00192             if (ramas->valor("nivel").toInt() == 2) { 
00193 
00194 
00195                 arbol->nuevarama(ramas);
00196             } // end if
00197             ramas->siguienteregistro();
00198         } // end while
00199         arbol->inicializa(ramas);
00200         delete ramas;
00201 
00202 
00204         // Consideraciones para centros de coste y canales
00205         QString cadand = "";
00206         selectcanalview *scanal=empresaBase()->getselcanales();
00207         SelectCCosteView *scoste=empresaBase()->getselccostes();
00208         QString ccostes = scoste->cadcoste();
00209         if (ccostes != "") {
00210             ccostes = " AND apunte.idc_coste IN (" + ccostes + ") ";
00211             cadand = " AND ";
00212         } // end if
00213 
00214         QString ccanales = scanal->cadcanal();
00215         if (ccanales != "") {
00216             ccanales = cadand + " apunte.idcanal IN (" + ccanales + ") ";
00217         } // end if
00218 
00219         QString wherecostesycanales = ccostes + ccanales;
00220 
00225         query = "SELECT cuenta.idcuenta, numapuntes, cuenta.codigo, saldoant, debe, haber, saldo, debeej, haberej, saldoej FROM ";
00226 
00227         query += "(SELECT idcuenta, codigo FROM cuenta) AS cuenta ";
00228 
00229         query += " LEFT JOIN (SELECT idcuenta, count(idcuenta) AS numapuntes,sum(debe) AS debeej, sum(haber) AS haberej, (sum(debe) - sum(haber)) AS saldoej FROM apunte WHERE EXTRACT(year FROM fecha) = '" + ffinal.right(4) + "' " +wherecostesycanales+ " GROUP BY idcuenta) AS ejercicio ON ejercicio.idcuenta = cuenta.idcuenta";
00230 
00231         query += " LEFT OUTER JOIN (SELECT idcuenta,sum(debe) AS debe, sum(haber) AS haber, (sum(debe) - sum(haber)) AS saldo FROM apunte WHERE fecha >= '" + finicial + "' AND fecha <= '" + ffinal + "' " +wherecostesycanales+ " GROUP BY idcuenta) AS periodo ON periodo.idcuenta = ejercicio.idcuenta ";
00232 
00233         query += " LEFT OUTER JOIN (SELECT idcuenta, (sum(debe) - sum(haber)) AS saldoant FROM apunte WHERE  fecha < '" + finicial + "' " +wherecostesycanales;
00234 
00235         query += " GROUP BY idcuenta) AS anterior ON cuenta.idcuenta = anterior.idcuenta ORDER BY codigo";
00236 
00238         hojas = empresaBase()->cargacursor(query);
00239         while (!hojas->eof()) {
00241             arbol->actualizahojas(hojas);
00242             hojas->siguienteregistro();
00243         } // end while
00244         delete hojas;
00245         arbol->inicia();
00248         QStringList headers, datos;
00249         headers << tr("Codigo") << tr("Denominacion") << tr("Saldo anterior") << tr("Debe") << tr("Haber") << tr("Saldo") << tr("Debe ejercicio") << tr("Haber ejercicio") << tr("Saldo ejercicio");
00250         mui_list->setHeaderLabels(headers);
00251         mui_list->clear();
00252 
00254         QTreeWidgetItem *it;
00255         int nivelActual;
00257         QMap <int, QTreeWidgetItem *> ptrList;
00260         QMap <int, QTreeWidgetItem *>::const_iterator ptrIt, i;
00261         ptrList.clear();
00262         while (arbol->deshoja(nivel, jerarquico)) {
00263             QString lcuenta = arbol->hojaactual("codigo");
00264             QString ldenominacion = arbol->hojaactual("descripcion");
00265             QString lsaldoant = arbol->hojaactual("saldoant");
00266             QString ldebe = arbol->hojaactual("debe");
00267             QString lhaber = arbol->hojaactual("haber");
00268             QString lsaldo = arbol->hojaactual("saldo");
00269             QString ldebeej = arbol->hojaactual("debeej");
00270             QString lhaberej = arbol->hojaactual("haberej");
00271             QString lsaldoej = arbol->hojaactual("saldoej");
00272 
00273             if (lcuenta >= cinicial and lcuenta <= cfinal) {
00275                 tsaldoant = tsaldoant + Fixed(lsaldoant);
00276                 tsaldo = tsaldo + Fixed(lsaldo);
00277                 tdebe = tdebe + Fixed(ldebe);
00278                 thaber = thaber + Fixed(lhaber);
00279 
00281                 lsaldoant = QString::number(lsaldoant.toDouble(), 'f', 2);
00282                 ldebe = QString::number(ldebe.toDouble(), 'f', 2);
00283                 lhaber = QString::number(lhaber.toDouble(), 'f', 2);
00284                 lsaldo = QString::number(lsaldo.toDouble(), 'f', 2);
00285                 ldebeej = QString::number(ldebeej.toDouble(), 'f', 2);
00286                 lhaberej = QString::number(lhaberej.toDouble(), 'f', 2);
00287                 lsaldoej = QString::number(lsaldoej.toDouble(), 'f', 2);
00288 
00291                 datos << lcuenta << ldenominacion << lsaldoant << ldebe << lhaber << lsaldo << ldebeej << lhaberej << lsaldoej;
00292 
00295                 if (jerarquico) { 
00296                     nivelActual = lcuenta.length();
00297                     if (nivelActual == 2) {
00299                         it = new QTreeWidgetItem(mui_list, datos);
00300                     } else {
00301                         while (ptrIt.key() >= nivelActual)
00304                             ptrIt--;
00305                         it = new QTreeWidgetItem(ptrIt.value(), datos);
00306                     } // end if
00309                     ptrIt = ptrList.insert(nivelActual, it);
00310                     mui_list->setItemExpanded(it, true);
00313                     i = ptrIt + 1;
00314                     while (i != ptrList.constEnd()) {
00316                         ptrList.remove(i.key());
00317                         ++i;
00318                     } // end while
00319                 } else { 
00320                     it = new QTreeWidgetItem(mui_list, datos);
00321                 } // end if
00322                 datos.clear();
00323 
00325                 int tamanyo = 10;
00326                 if (ldenominacion.length() > 40) {
00327                     tamanyo -= 1;
00328                 } else if (ldenominacion.length() > 50) {
00329                     tamanyo -= 2;
00330                 } // end if
00331                 it->setFont(DENOMINACION, QFont("Serif", tamanyo, -1, false));
00332                 for (int col = 0; col < it->columnCount(); col++) {
00333 
00334                     if (col == DEBE or col == HABER or col == SALDO) {
00335                         it->setFont(col, QFont("SansSerif", 10, QFont::DemiBold, false));
00336                     } else {
00337                         it->setFont(col, QFont("SansSerif", 10, QFont::Normal, false));
00338                     } // end if
00339                     it->setTextAlignment(col, Qt::AlignRight);
00340 
00341                     if (lcuenta.size() == 2) {
00342                         it->setTextColor(col, Qt::darkGray);
00343                     } else if (lcuenta.size() < 5) {
00344                         it->setTextColor(col, Qt::blue);
00345                     } else {
00346                         if (it->text(col).left(1) == "-") {
00347                             it->setTextColor(col, Qt::darkRed);
00348                         } else {
00349                             it->setTextColor(col, Qt::black);
00350                         } // end if
00351                     } // end if
00352                 } // end for
00353             } // end if
00354         } // end while
00355         mui_list->resizeColumnToContents(1);
00356 
00359         QString totsaldoant = tsaldoant.toQString();
00360         QString totdebe = tdebe.toQString();
00361         QString tothaber = thaber.toQString();
00362         QString totsaldo = tsaldo.toQString();
00363         totalsaldoant->setText(totsaldoant);
00364         totaldebe->setText(totdebe);
00365         totalhaber->setText(tothaber);
00366         totalsaldo->setText(totsaldo);
00367 
00370         delete arbol;
00371         empresaBase()->commit();
00372     } catch (...) {
00373         mensajeInfo("error en los calculos");
00374         empresaBase()->rollback();
00376         if (ramas) delete ramas;
00377         if (hojas) delete hojas;
00378     } // end try
00379     _depura("END BalanceView::presentarSyS", 0);
00380 }

void BalanceView::on_mui_actualizar_clicked (  )  [slot]

Definition at line 112 of file balanceview.cpp.

References _depura(), and accept().

00112                                             {
00113     _depura("BalanceView::on_mui_actualizar_clicked", 0);
00114     accept();
00115     _depura("END BalanceView::on_mui_actualizar_clicked", 0);
00116 }


Field Documentation

cursor2* BalanceView::m_cursorcta [private]

Cursor para recorrer las cuentas.

Definition at line 50 of file balanceview.h.

int BalanceView::numdigitos [private]

El número de dígitos que tienen las cuentas de la empresa.

Definition at line 52 of file balanceview.h.

Referenced by BalanceView().


The documentation for this class was generated from the following files:
Generated on Sat Dec 15 00:01:43 2007 for BulmaGes by  doxygen 1.5.1