#include <balanceview.h>
Inheritance diagram for BalanceView:

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 | |
| cursor2 * | m_cursorcta |
| Cursor para recorrer las cuentas. | |
| int | numdigitos |
| El número de dígitos que tienen las cuentas de la empresa. | |
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.
Array que almacena los identificadores de los centros de coste.
| 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 }
| 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.
| 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.
| 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] |
cursor2* BalanceView::m_cursorcta [private] |
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().
1.5.1