ImportBalance Class Reference

#include <importbalance.h>

Inheritance diagram for ImportBalance:

QXmlDefaultHandler PEmpresaBase

Public Member Functions

 ImportBalance (Empresa *)
 Constructor de la clase que inicializa determinadas variables de clase.
bool startElement (const QString &, const QString &, const QString &, const QXmlAttributes &)
 Implementación del analizador (parser) que procesa un tag de inicio.
bool endElement (const QString &, const QString &, const QString &)
 Implementación del analizador (parser) que procesa un tag de cierre.
bool startElement1 (const QString &, const QString &, const QString &, const QXmlAttributes &)
bool endElement1 (const QString &, const QString &, const QString &)
bool startElement2 (const QString &, const QString &, const QString &, const QXmlAttributes &)
 En el segundo paso se registran compmasap y compbalance.
bool endElement2 (const QString &, const QString &, const QString &)
 En el segundo paso introducimos los compmasap y los compbalance.
bool characters (const QString &)
 Recoge valores asignados a un determinado tag y los almacena en la variable m_data.
void cambiapaso ()

Private Attributes

QString m_tag
 Esta variable global indica siempre el tag que está procesando el parser.
QString m_data
QMap< QString, QString > m_tvalores
QMap< QString, QString > m_identmasasp
 Este hash sirve para almacenar las claves provisionales de las masas patrimoniales.
int m_paso

Detailed Description

Es una implementación de un parser XML hecho en SAX de Qt que utiliza del sistema de diversas pasadas para asegurar hacer la importación de datos. En una primera pasada introduce en el sistema las masas patrimoniales y en una segunda pasada introduce los componentes del balance Es preciso mantener en memoria algunos identificadores y esto se hace mediante el uso de un mapa

Definition at line 39 of file importbalance.h.


Constructor & Destructor Documentation

ImportBalance::ImportBalance ( Empresa emp  ) 

Constructor de la clase que inicializa determinadas variables de clase.

Parameters:
emp 

Definition at line 34 of file importbalance.cpp.

References _depura(), m_data, m_paso, and m_tag.

00034                                          : QXmlDefaultHandler(), PEmpresaBase(emp) {
00035     _depura("ImportBalance::ImportBalance", 0);
00036     m_tag = "";
00037     m_data = "";
00038     m_paso = 0;
00039     _depura("END ImportBalance::ImportBalance", 0);
00040 }


Member Function Documentation

bool ImportBalance::startElement ( const QString &  a,
const QString &  b,
const QString &  c,
const QXmlAttributes &  d 
)

Implementación del analizador (parser) que procesa un tag de inicio.

Parameters:
a 
b 
c 
d 
Returns:

Definition at line 56 of file importbalance.cpp.

References _depura(), m_paso, startElement1(), and startElement2().

00056                                                                                                               {
00057     _depura("ImportBalance::startElement", 0);
00058     if (m_paso == 0) {
00059         return startElement1(a, b, c, d);
00060     } else {
00061         return startElement2(a, b, c, d);
00062     } // end if
00063     _depura("END ImportBalance::startElement", 0);
00064 }

bool ImportBalance::endElement ( const QString &  a,
const QString &  b,
const QString &  c 
)

Implementación del analizador (parser) que procesa un tag de cierre.

Parameters:
a 
b 
c 
Returns:

Definition at line 73 of file importbalance.cpp.

References _depura(), endElement1(), endElement2(), and m_paso.

00073                                                                                    {
00074     _depura("ImportBalance::endlement", 0);
00075     if (m_paso == 0) {
00076         return endElement1 (a, b, c);
00077     } else {
00078         return endElement2 (a, b, c);
00079     } // end if
00080     _depura("END ImportBalance::startElement", 0);
00081 }

bool ImportBalance::startElement1 ( const QString &  ,
const QString &  ,
const QString &  ,
const QXmlAttributes &   
)

Implementación del analizador (parser) que procesa un tag de inicio en la primera pasada.

Definition at line 92 of file importbalance.cpp.

References _depura(), postgresiface2::begin(), postgresiface2::cargacursor(), postgresiface2::commit(), postgresiface2::ejecuta(), PEmpresaBase::empresaBase(), cursor2::eof(), m_tag, m_tvalores, TRUE, and cursor2::valor().

Referenced by startElement().

00092                                                                                                              {
00093     _depura("ImportBalance::startElement1", 0);
00094     m_tag = qName;
00095     QString SQLQuery;
00096     if (m_tag == "balance") {
00097         SQLQuery.sprintf("INSERT INTO balance (nombrebalance) VALUES ('Elemento importado')\n");
00098         empresaBase()->begin();
00099         empresaBase()->ejecuta(SQLQuery);
00100         SQLQuery = "SELECT max(idbalance) AS idbalance FROM balance";
00101         cursor2 *cur = empresaBase()->cargacursor(SQLQuery, "unquerymas");
00102         empresaBase()->commit();
00103         if (!cur->eof()) {
00104             m_tvalores["idbalance"] = cur->valor("idbalance");
00105         } // end if
00106         delete cur;
00107     } // end if
00108     if (m_tag == "mpatrimonial") {
00109         SQLQuery.sprintf("INSERT INTO mpatrimonial (idbalance) VALUES (%s)\n", empresaBase()->sanearCadena(m_tvalores["idbalance"]).toAscii().constData());
00110         empresaBase()->begin();
00111         empresaBase()->ejecuta(SQLQuery);
00112         SQLQuery = "SELECT max(idmpatrimonial) AS idmpatrimonial FROM mpatrimonial";
00113         cursor2 *cur = empresaBase()->cargacursor(SQLQuery, "unquerymas");
00114         empresaBase()->commit();
00115         if (!cur->eof()) {
00116             m_tvalores["idmpatrimonial_nueva"] = cur->valor("idmpatrimonial");
00117         } // end if
00118         delete cur;
00119     } // end if
00120     _depura("END ImportBalance::startElement1", 0);
00121     return TRUE;
00122 }

bool ImportBalance::endElement1 ( const QString &  ,
const QString &  ,
const QString &   
)

Implementación del analizador (parser) que procesa un tag de cierre en la primera pasada.

En la inserción de masas patrimoniales hay que hacer una reconversión de la clave. Cuando todo haya terminado debemos actualizar el cambo idmpatrimonial de los compmasap para que la cosa funcione.

Definition at line 136 of file importbalance.cpp.

References _depura(), postgresiface2::begin(), postgresiface2::commit(), postgresiface2::ejecuta(), PEmpresaBase::empresaBase(), m_data, m_identmasasp, m_tag, m_tvalores, and TRUE.

Referenced by endElement().

00136                                                                                     {
00137     _depura("ImportBalance::endElement1", 0);
00138     m_tag = qName;
00139     QString SQLQuery;
00140     if (qName == "balance") {
00141         SQLQuery.sprintf("UPDATE balance SET nombrebalance = '%s' WHERE idbalance = %s\n", m_tvalores["nombrebalance"].toAscii().constData(), m_tvalores["idbalance"].toAscii().constData());
00142         empresaBase()->begin();
00143         empresaBase()->ejecuta(SQLQuery);
00144         empresaBase()->commit();
00145     }
00146     if (qName == "mpatrimonial") {
00151         m_identmasasp[m_tvalores["idmasa"]] = m_tvalores["idmpatrimonial_nueva"];
00152         SQLQuery.sprintf("UPDATE mpatrimonial SET descmpatrimonial = '%s' WHERE idmpatrimonial = %s\n", m_tvalores["descmpatrimonial"].toAscii().constData(), m_tvalores["idmpatrimonial_nueva"].toAscii().constData());
00153         empresaBase()->begin();
00154         empresaBase()->ejecuta(SQLQuery);
00155         empresaBase()->commit();
00156         if (m_tvalores["orden"] != "") {
00157             SQLQuery.sprintf("UPDATE mpatrimonial SET orden = %s WHERE idmpatrimonial = %s\n", m_tvalores["orden"].toAscii().constData(), m_tvalores["idmpatrimonial_nueva"].toAscii().constData());
00158             empresaBase()->begin();
00159             empresaBase()->ejecuta(SQLQuery);
00160             empresaBase()->commit();
00161             m_tvalores["orden"] = "";
00162         } // end if
00163         if (m_tvalores["tabulacion"] != "") {
00164             SQLQuery.sprintf("UPDATE mpatrimonial SET tabulacion = %s WHERE idmpatrimonial = %s\n", m_tvalores["tabulacion"].toAscii().constData(), m_tvalores["idmpatrimonial_nueva"].toAscii().constData());
00165             empresaBase()->begin();
00166             empresaBase()->ejecuta(SQLQuery);
00167             empresaBase()->commit();
00168             m_tvalores["tabulacion"] = "";
00169         } // end if
00170         if (m_tvalores["opdesc"] != "") {
00171             SQLQuery.sprintf("UPDATE mpatrimonial SET opdesc = %s WHERE idmpatrimonial = %s\n", m_tvalores["opdesc"].toAscii().constData(), m_tvalores["idmpatrimonial_nueva"].toAscii().constData());
00172             empresaBase()->begin();
00173             empresaBase()->ejecuta(SQLQuery);
00174             empresaBase()->commit();
00175             m_tvalores["opdesc"] = "";
00176         } // end if
00177         if (m_tvalores["tipompatrimonial"] != "") {
00178             SQLQuery.sprintf("UPDATE mpatrimonial SET tipompatrimonial = %s WHERE idmpatrimonial=%s\n", m_tvalores["tipompatrimonial"].toAscii().constData(), m_tvalores["idmpatrimonial_nueva"].toAscii().constData());
00179             empresaBase()->begin();
00180             empresaBase()->ejecuta(SQLQuery);
00181             empresaBase()->commit();
00182             m_tvalores["tipompatrimonial"] = "";
00183         } // end if
00184     } // end if
00185     m_tag = "";
00186     m_data = "";
00187     _depura("END ImportBalance::endElement1", 0);
00188     return TRUE;
00189 }

bool ImportBalance::startElement2 ( const QString &  ,
const QString &  ,
const QString &  ,
const QXmlAttributes &   
)

En el segundo paso se registran compmasap y compbalance.

Implementación del analizador (parser) que procesa un tag de inicio en la segunda pasada.

Definition at line 197 of file importbalance.cpp.

References _depura(), m_tag, and TRUE.

Referenced by startElement().

00197                                                                                                              {
00198     _depura("ImportBalance::startElement2", 0);
00199     m_tag = qName;
00200     _depura("END ImportBalance::startElement2", 0);
00201     return TRUE;
00202 }

bool ImportBalance::endElement2 ( const QString &  ,
const QString &  ,
const QString &   
)

En el segundo paso introducimos los compmasap y los compbalance.

Implementación del analizador (parser) que procesa un tag de cierre en la primera pasada.

En el segundo paso se hacen las inserciones por el flanco de final en lugar de por el flanco de principio. Así nos aseguramos que ya existen los valores de idmpatrimonial y masaperteneciente.

Como la inserción está hecha, podemos hacer los updates sin miedo a que no exista el registro.

Actualizamos el idmasapatrimonial del compmasap, que es el que más dolores de cabeza causa.

Con los componentes del balance también intervienen las masas patrimoniales.

Definition at line 211 of file importbalance.cpp.

References _depura(), postgresiface2::begin(), postgresiface2::cargacursor(), postgresiface2::commit(), postgresiface2::ejecuta(), PEmpresaBase::empresaBase(), cursor2::eof(), m_data, m_identmasasp, m_tag, m_tvalores, TRUE, and cursor2::valor().

Referenced by endElement().

00211                                                                                     {
00212     _depura("ImportBalance::endElement2", 0);
00213     m_tag = qName;
00214     QString SQLQuery;
00219     if (m_tag == "compmasap") {
00220         SQLQuery.sprintf("INSERT INTO compmasap (masaperteneciente) VALUES (%s)\n", empresaBase()->sanearCadena(m_identmasasp[m_tvalores["masaperteneciente"]]).toAscii().constData());
00221         empresaBase()->begin();
00222         empresaBase()->ejecuta(SQLQuery);
00223         SQLQuery = "SELECT max(idcompmasap) AS idcompmasap FROM compmasap";
00224         cursor2 *cur = empresaBase()->cargacursor(SQLQuery, "unquerymas");
00225         empresaBase()->commit();
00226         if (!cur->eof()) {
00227             m_tvalores["idcompmasap"] = cur->valor("idcompmasap");
00228         } // end if
00229         delete cur;
00230     } // end if
00231     if (m_tag == "compbalance") {
00232         SQLQuery.sprintf("INSERT INTO compbalance (idbalance) VALUES (%s)\n", empresaBase()->sanearCadena(m_tvalores["idbalance"]).toAscii().constData());
00233         empresaBase()->begin();
00234         empresaBase()->ejecuta(SQLQuery);
00235         SQLQuery = "SELECT max(idcompbalance) AS idcompbalance FROM compbalance";
00236         cursor2 *cur = empresaBase()->cargacursor(SQLQuery, "unquerymas");
00237         empresaBase()->commit();
00238         if (!cur->eof()) {
00239             m_tvalores["idcompbalance"] = cur->valor("idcompbalance");
00240         } // end if
00241         delete cur;
00242     } // end if
00245     if (m_tag == "compmasap") {
00248         if (m_tvalores["idmpatrimonial"] != "" && m_tvalores["codigo"] == "") {
00249             SQLQuery.sprintf("UPDATE compmasap SET idmpatrimonial = %s WHERE idcompmasap = %s\n", empresaBase()->sanearCadena(m_identmasasp[m_tvalores["idmpatrimonial"]]).toAscii().constData(), empresaBase()->sanearCadena(m_tvalores["idcompmasap"]).toAscii().constData());
00250             empresaBase()->begin();
00251             empresaBase()->ejecuta(SQLQuery);
00252             empresaBase()->commit();
00253         } // end if
00254         if (m_tvalores["codigo"] != "") {
00255             SQLQuery.sprintf("UPDATE compmasap SET idcuenta = id_cuenta('%s') WHERE idcompmasap = %s\n",
00256                              empresaBase()->sanearCadena(m_tvalores["codigo"]).toAscii().constData(),
00257                              empresaBase()->sanearCadena(m_tvalores["idcompmasap"]).toAscii().constData());
00258             empresaBase()->begin();
00259             empresaBase()->ejecuta(SQLQuery);
00260             empresaBase()->commit();
00261         } // end if
00262         SQLQuery.sprintf("UPDATE compmasap SET signo = '%s' WHERE idcompmasap = %s\n",
00263                          empresaBase()->sanearCadena(m_tvalores["signo"]).toAscii().constData(),
00264                          empresaBase()->sanearCadena(m_tvalores["idcompmasap"]).toAscii().constData());
00265         empresaBase()->begin();
00266         empresaBase()->ejecuta(SQLQuery);
00267         empresaBase()->commit();
00268         SQLQuery.sprintf("UPDATE compmasap SET nombre = '%s' WHERE idcompmasap = %s\n",
00269                          empresaBase()->sanearCadena(m_tvalores["nombre"]).toAscii().constData(),
00270                          empresaBase()->sanearCadena(m_tvalores["idcompmasap"]).toAscii().constData());
00271         empresaBase()->begin();
00272         empresaBase()->ejecuta(SQLQuery);
00273         empresaBase()->commit();
00274         m_tvalores["codigo"] = "";
00275         m_tvalores["idmpatrimonial"] = "";
00276     } // end if
00277     if (m_tag == "compbalance") {
00279         SQLQuery.sprintf("UPDATE compbalance SET idmpatrimonial = %s WHERE idcompbalance = %s\n",
00280                          empresaBase()->sanearCadena(m_identmasasp[m_tvalores["idmpatrimonial"]]).toAscii().constData(),
00281                          empresaBase()->sanearCadena(m_tvalores["idcompbalance"]).toAscii().constData());
00282         empresaBase()->begin();
00283         empresaBase()->ejecuta(SQLQuery);
00284         empresaBase()->commit();
00285         SQLQuery.sprintf("UPDATE compbalance SET orden = %s WHERE idcompbalance = %s\n",
00286                          empresaBase()->sanearCadena(m_tvalores["orden"]).toAscii().constData(),
00287                          empresaBase()->sanearCadena(m_tvalores["idcompbalance"]).toAscii().constData());
00288         empresaBase()->begin();
00289         empresaBase()->ejecuta(SQLQuery);
00290         empresaBase()->commit();
00291         SQLQuery.sprintf("UPDATE compbalance SET concepto = '%s' WHERE idcompbalance = %s\n",
00292                          empresaBase()->sanearCadena(m_tvalores["concepto"]).toAscii().constData(),
00293                          empresaBase()->sanearCadena(m_tvalores["idcompbalance"]).toAscii().constData());
00294         empresaBase()->begin();
00295         empresaBase()->ejecuta(SQLQuery);
00296         empresaBase()->commit();
00297         SQLQuery.sprintf("UPDATE compbalance SET tabulacion = %s WHERE idcompbalance = %s\n",
00298                          empresaBase()->sanearCadena(m_tvalores["tabulacion"]).toAscii().constData(),
00299                          empresaBase()->sanearCadena(m_tvalores["idcompbalance"]).toAscii().constData());
00300         empresaBase()->begin();
00301         empresaBase()->ejecuta(SQLQuery);
00302         empresaBase()->commit();
00303         m_tvalores["codigo"] = "";
00304         m_tvalores["idmpatrimonial"] = "";
00305     } // end if
00306     m_tag="";
00307     m_data="";
00308     _depura("END ImportBalance::endElement2", 0);
00309     return TRUE;
00310 }

bool ImportBalance::characters ( const QString &  ch  ) 

Recoge valores asignados a un determinado tag y los almacena en la variable m_data.

Para que pueda ser utilizado posteriormente

Parameters:
ch El valor del tag abierto.
Returns:
TRUE porque no nos interesa abortar la ejecución del algoritmo.

Definition at line 318 of file importbalance.cpp.

References _depura(), m_data, m_tag, m_tvalores, and TRUE.

00318                                                 {
00319     _depura("ImportBalance::characters", 0);
00320     if (m_tag != "") {
00321         m_data =ch;
00322         m_tvalores[m_tag] = m_data;
00323     } // end if
00324     _depura("END ImportBalance::characters", 0);
00325     return TRUE;
00326 }

void ImportBalance::cambiapaso (  ) 

Cambia de numero de paso. Recordar que en este caso la importación se hace en dos pasos.

Definition at line 43 of file importbalance.cpp.

References m_paso.

00043                                {
00044     m_paso = 1;
00045 }


Field Documentation

QString ImportBalance::m_tag [private]

Esta variable global indica siempre el tag que está procesando el parser.

Definition at line 43 of file importbalance.h.

Referenced by characters(), endElement1(), endElement2(), ImportBalance(), startElement1(), and startElement2().

QString ImportBalance::m_data [private]

Esta variable global indica la información que se acaba de recolectar en el parser. De modo que al llegar a un tag de cierre siempre sea m_data quien tenga el valor introducido para poder utilizarlo.

Definition at line 47 of file importbalance.h.

Referenced by characters(), endElement1(), endElement2(), and ImportBalance().

QMap<QString, QString> ImportBalance::m_tvalores [private]

En este mapa se almacenan los valores que se van rescatando del XML, de tal forma que al llegar a un tag de cierre importante se recuperen de aquí los datos a ser introducidos en la base de datos.

Definition at line 51 of file importbalance.h.

Referenced by characters(), endElement1(), endElement2(), and startElement1().

QMap<QString, QString> ImportBalance::m_identmasasp [private]

Este hash sirve para almacenar las claves provisionales de las masas patrimoniales.

Definition at line 55 of file importbalance.h.

Referenced by endElement1(), and endElement2().

int ImportBalance::m_paso [private]

Indica que paso estamos realizando. Recordemos que en esta ocasión se hacen dos pasadas de analizador (parser) para hacer la importación completamente.

Definition at line 58 of file importbalance.h.

Referenced by cambiapaso(), endElement(), ImportBalance(), and startElement().


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