StructureParser Class Reference

Clase para leer archivos de XML y hacer la importacion de datos. More...

Inheritance diagram for StructureParser:

QXmlDefaultHandler

Public Member Functions

 StructureParser (postgresiface2 *, unsigned int tip=IMPORT_TODO)
 ~StructureParser ()
bool startDocument ()
bool startElement (const QString &, const QString &, const QString &, const QXmlAttributes &)
bool endElement (const QString &, const QString &, const QString &)
bool characters (const QString &)

Private Attributes

postgresiface2conexionbase
QString cadintermedia
QString idasiento
 Variables usadas para almacenar los datos de un asiento.
QString ordenasiento
QString fechaasiento
QString idapunte
 Variables usadas para almacenar los datos de un apunte.
QString idborrador
QString fechaapunte
QString codigocuentaapunte
QString debeapunte
QString haberapunte
QString conceptocontableapunte
int m_ordenapunte
QString idcuenta
 Variables usadas para almacenar los datos de una cuenta.
QString descripcioncuenta
QString codigocuenta
QString codigopadre
QString m_bloqueadaCuenta
QString m_nodebeCuenta
QString m_nohaberCuenta
QString m_tipoCuenta
QString m_idRegistroIva
 Variables usadas para almacenar los datos del registro de IVA.
QString m_rIvaContrapartida
QString m_rIvaBaseImp
QString m_rIvaIva
QString m_rIvaFFactura
QString m_rIvaFactura
QString m_rIvaCIF
QString m_rIvaIdFPago
QString m_rIvRecRegIva
QString m_idTipoIva
 Variables usadas para almacenar los datos de la tabla de IVA's.
QString m_baseIva
QString m_nombreTipoIva
QString tagpadre
 El tagpadre indica en que posicion estamos. Si estamos en un asiento, un apunte, una cuenta, etc etc etc.
QString indent
unsigned int m_tipo

Detailed Description

Clase para leer archivos de XML y hacer la importacion de datos.

Definition at line 86 of file pgimportfiles.cpp.


Constructor & Destructor Documentation

StructureParser::StructureParser ( postgresiface2 con,
unsigned int  tip = IMPORT_TODO 
)

Parameters:
con 
tip 

Definition at line 1475 of file pgimportfiles.cpp.

References _depura(), postgresiface2::begin(), postgresiface2::commit(), conexionbase, postgresiface2::ejecuta(), and m_tipo.

01475                                                                       {
01476     _depura("StructureParser::StructureParser", 0);
01477     conexionbase = con;
01478     m_tipo = tip;
01479     conexionbase->begin();
01480     QString query = "INSERT INTO cuenta (codigo, descripcion) VALUES ('AUX', 'Una descripcion auxiliar de cuenta')";
01481     conexionbase->ejecuta(query);
01482     for (int i = 0; i <= 12; i++) {
01483         QString query2 = "INSERT INTO ejercicios (ejercicio, periodo, bloqueado) VALUES (2005, " + QString::number(i) + ", FALSE)";
01484         conexionbase->ejecuta(query2);
01485     } // end for
01486     conexionbase->commit();
01487     _depura("END StructureParser::StructureParser", 0);
01488 }

StructureParser::~StructureParser (  ) 

Definition at line 1494 of file pgimportfiles.cpp.

References _depura(), conexionbase, and postgresiface2::ejecuta().

01494                                   {
01495     _depura("StructureParser::~StructureParser", 0);
01496     QString query = "DELETE FROM cuenta WHERE codigo = 'AUX'";
01497     conexionbase->ejecuta(query);
01498     _depura("END StructureParser::~StructureParser", 0);
01499 }


Member Function Documentation

bool StructureParser::startDocument (  ) 

Returns:

Definition at line 1505 of file pgimportfiles.cpp.

References _depura(), indent, and TRUE.

01505                                     {
01506     _depura("StructureParser::startDocument", 0);
01507     indent = "";
01508     _depura("END StructureParser::startDocument", 0);
01509     return TRUE;
01510 }

bool StructureParser::startElement ( const QString &  ,
const QString &  ,
const QString &  qName,
const QXmlAttributes &   
)

Parameters:
qName 
QXmlAttributes 
Returns:

Iniciamos el orden para que los apuntes salgan en orden empezando desde cero.

Borramos todos los elementos para que no haya traspasos de informacion.

Definition at line 1519 of file pgimportfiles.cpp.

References _depura(), postgresiface2::begin(), cadintermedia, postgresiface2::cargacursor(), codigocuenta, codigopadre, postgresiface2::commit(), conexionbase, descripcioncuenta, postgresiface2::ejecuta(), cursor2::eof(), idasiento, idborrador, IMPORT_ASIENTOS, IMPORT_CUENTAS, IMPORT_FACTURAS, indent, m_bloqueadaCuenta, m_idRegistroIva, m_nodebeCuenta, m_nohaberCuenta, m_ordenapunte, m_tipo, m_tipoCuenta, tagpadre, TRUE, and cursor2::valor().

01519                                                                                                               {
01520     _depura("StructureParser::startElement", 0);
01521     fprintf(stderr, "%s<%s>\n", indent.toAscii().data(), qName.toAscii().data());
01522     indent += "..";
01523     if (qName == "ASIENTO" && m_tipo & IMPORT_ASIENTOS) {
01524         tagpadre = "ASIENTO";
01525         QString query = "INSERT INTO ASIENTO (descripcion, fecha) VALUES ('un nuevo asiento', '01/01/2005')";
01526         conexionbase->begin();
01527         conexionbase->ejecuta(query);
01528         cursor2 *cur= conexionbase->cargacursor("SELECT MAX(idasiento) AS max FROM asiento", "otroquery");
01529         conexionbase->commit();
01530         if (!cur->eof() ) {
01531             idasiento = cur->valor("max");
01532             fprintf(stderr, "INSERCION DE ASIENTO:%s\n", idasiento.toAscii().data());
01533         } // end if
01535         m_ordenapunte = 0;
01536         delete cur;
01537     } // end if
01538     if (qName == "APUNTE" && m_tipo & IMPORT_ASIENTOS) {
01539         QString query = "INSERT INTO borrador (idasiento, debe, haber, idcuenta, fecha, orden) VALUES (" + idasiento + ", 0, 0, id_cuenta('AUX'), '01/01/2003', " + QString::number(m_ordenapunte++) + ")";
01540         conexionbase->begin();
01541         conexionbase->ejecuta(query);
01542         cursor2 *cur= conexionbase->cargacursor("SELECT MAX(idborrador) AS max FROM borrador", "otroquery1");
01543         conexionbase->commit();
01544         if (!cur->eof()) {
01545             idborrador = cur->valor("max");
01546             fprintf(stderr, "INSERCION DE APUNTE:%s\n", idborrador.toAscii().data());
01547         } // end if
01548         delete cur;
01549         tagpadre = "APUNTE";
01550     } // end if
01551     if (qName == "REGISTROIVA" && m_tipo & IMPORT_FACTURAS) {
01552         QString query = "INSERT INTO registroiva (contrapartida, idborrador) VALUES (id_cuenta('AUX'), " + idborrador + ")";
01553         conexionbase->begin();
01554         conexionbase->ejecuta(query);
01555         cursor2 *cur= conexionbase->cargacursor("SELECT MAX(idregistroiva) AS max FROM registroiva", "otroquery13");
01556         conexionbase->commit();
01557         if (!cur->eof()) {
01558             m_idRegistroIva = cur->valor("max");
01559             fprintf(stderr, "INSERCION DE REGISTRO DE IVA:%s\n", idborrador.toAscii().data());
01560         } // end if
01561         delete cur;
01562         tagpadre = "REGISTROIVA";
01563     } // end if
01564     if (qName == "RIVA" && m_tipo & IMPORT_FACTURAS) {
01565         tagpadre = "RIVA";
01566     } // end if
01567     if (qName == "CUENTA" && m_tipo & IMPORT_CUENTAS) {
01568         tagpadre = "CUENTA";
01570         codigocuenta = "";
01571         descripcioncuenta = "";
01572         codigopadre = "";
01573         m_bloqueadaCuenta = "";
01574         m_nodebeCuenta = "";
01575         m_nohaberCuenta = "";
01576         m_tipoCuenta = "";
01577     } // end if
01578     cadintermedia = "";
01579     _depura("END StructureParser::startElement", 0);
01580     return TRUE;
01581 }

bool StructureParser::endElement ( const QString &  ,
const QString &  ,
const QString &  qName 
)

Parameters:
qName 
Returns:

Vamos a ir distinguiendo casos y actuando segun cada caso. En la mayoria de casos iremos actuando en consecuencia. Ha terminado un asiento, por tanto hacemos el update de los campos.

Si es un apunte hacemos su insercion.

Ha terminado una cuenta, por tanto hacemos la insercion de la misma. Podemos hacer la insercion y no un sistema de update pq la cuenta no tiene hijos en el XML. Nuevo Socio M.Mezo

Primero debemos determinar si existe o no dicha cuenta para hacer la insercion o la modificacion.

Si el tipo de cuenta esta vacio lo ponemos a NULL para que no haya error en la base de datos.

Si es un registro de iva vamos a por el.

Insercion de IVA's dentro del registro de IVA.

Definition at line 1589 of file pgimportfiles.cpp.

References _depura(), postgresiface2::begin(), cadintermedia, postgresiface2::cargacursor(), codigocuenta, codigocuentaapunte, codigopadre, postgresiface2::commit(), conceptocontableapunte, conexionbase, debeapunte, descripcioncuenta, postgresiface2::ejecuta(), cursor2::eof(), fechaapunte, fechaasiento, haberapunte, idasiento, idborrador, IMPORT_ASIENTOS, IMPORT_CUENTAS, IMPORT_FACTURAS, indent, m_baseIva, m_bloqueadaCuenta, m_idRegistroIva, m_idTipoIva, m_nodebeCuenta, m_nohaberCuenta, m_nombreTipoIva, m_rIvaBaseImp, m_rIvaCIF, m_rIvaContrapartida, m_rIvaFactura, m_rIvaFFactura, m_rIvaIdFPago, m_rIvaIva, m_rIvRecRegIva, m_tipo, m_tipoCuenta, postgresiface2::sanearCadena(), tagpadre, TRUE, and cursor2::valor().

01589                                                                                      {
01590     _depura("StructureParser::endElement", 0);
01591     indent.remove((uint)0, 2);
01595     if (qName == "ASIENTO" && m_tipo & IMPORT_ASIENTOS) {
01596         fprintf(stderr, "Fin de Asiento");
01597         QString query = "UPDATE asiento set fecha = '" +
01598                         conexionbase->sanearCadena(fechaasiento) + "' WHERE idasiento = " +
01599                         conexionbase->sanearCadena(idasiento);
01600         conexionbase->begin();
01601         conexionbase->ejecuta(query);
01602         cursor2 *cur = conexionbase->cargacursor("SELECT cierraasiento(" + idasiento + ")");
01603         conexionbase->commit();
01604         delete cur;
01605     } // end if
01607     if (qName == "APUNTE" && m_tipo & IMPORT_ASIENTOS) {
01608         QString query = "UPDATE borrador SET debe = "+
01609                         conexionbase->sanearCadena(debeapunte) + ", haber = "+
01610                         conexionbase->sanearCadena(haberapunte) + ", idcuenta = id_cuenta('" +
01611                         conexionbase->sanearCadena(codigocuentaapunte) + "'), fecha = '" +
01612                         conexionbase->sanearCadena(fechaapunte) + "', conceptocontable = '" +
01613                         conexionbase->sanearCadena(conceptocontableapunte) + "' WHERE idborrador = " + idborrador;
01614         conexionbase->ejecuta(query);
01615     } // end if
01616     if (qName == "FECHA" && tagpadre == "ASIENTO")
01617         fechaasiento = cadintermedia;
01618     if (qName == "FECHA" && tagpadre == "APUNTE")
01619         fechaapunte = cadintermedia;
01620     if (qName == "DEBE" && tagpadre == "APUNTE")
01621         debeapunte = cadintermedia;
01622     if (qName == "HABER" && tagpadre == "APUNTE")
01623         haberapunte = cadintermedia;
01624     if (qName == "CODIGO" && tagpadre == "APUNTE")
01625         codigocuentaapunte = cadintermedia;
01626     if (qName == "CONCEPTOCONTABLE" && tagpadre == "APUNTE")
01627         conceptocontableapunte = cadintermedia;
01628     if (qName == "CUENTA" && m_tipo & IMPORT_CUENTAS) {
01632         QString idgrupo = codigocuenta.left(1);
01634         QString vidcuenta;
01635         if (codigopadre != "")  {
01636             vidcuenta = "id_cuenta('" + conexionbase->sanearCadena(codigopadre) + "')";
01637         } else {
01638             vidcuenta = "NULL";
01639         } // end if
01641         if (m_tipoCuenta == "")
01642             m_tipoCuenta = "NULL";
01643 
01644         QString query = "SELECT * FROM cuenta WHERE codigo = '" + codigocuenta + "'";
01645         cursor2 *cur = conexionbase->cargacursor(query);
01646         if (cur->eof()) {
01647             QString query = "INSERT INTO cuenta (tipocuenta, codigo, descripcion, padre, bloqueada, nodebe, nohaber) VALUES ("+
01648                             conexionbase->sanearCadena(m_tipoCuenta) + ",'" +
01649                             conexionbase->sanearCadena(codigocuenta) + "','" +
01650                             conexionbase->sanearCadena(descripcioncuenta) + "', " +
01651                             vidcuenta + ", '" +
01652                             conexionbase->sanearCadena(m_bloqueadaCuenta) + "','" +
01653                             conexionbase->sanearCadena(m_nodebeCuenta) + "','" +
01654                             conexionbase->sanearCadena(m_nohaberCuenta) + "')";
01655             conexionbase->ejecuta(query);
01656         } else {
01657             QString query = "UPDATE cuenta SET ";
01658             query += "descripcion = '" + conexionbase->sanearCadena(descripcioncuenta) + "'";
01659             query += ", tipocuenta = " + conexionbase->sanearCadena(m_tipoCuenta);
01660             query += ", bloqueada = '" + conexionbase->sanearCadena(m_bloqueadaCuenta)+"'";
01661             query += ", nodebe = '" + conexionbase->sanearCadena(m_nodebeCuenta) + "'";
01662             query += ", nohaber = '" + conexionbase->sanearCadena(m_nohaberCuenta) + "'";
01663             query += " WHERE codigo = '" + conexionbase->sanearCadena(codigocuenta) + "'";
01664             conexionbase->ejecuta(query);
01665         } //end if
01666         delete cur;
01667     } // end if
01668     if (qName == "CODIGO" && tagpadre == "CUENTA")
01669         codigocuenta = cadintermedia;
01670     if (qName == "DESCRIPCION" && tagpadre == "CUENTA")
01671         descripcioncuenta = cadintermedia;
01672     if (qName == "CODPADRE" && tagpadre == "CUENTA")
01673         codigopadre = cadintermedia;
01674     if (qName == "BLOQUEADA" && tagpadre == "CUENTA")
01675         m_bloqueadaCuenta = cadintermedia;
01676     if (qName == "NODEBE" && tagpadre == "CUENTA")
01677         m_nodebeCuenta = cadintermedia;
01678     if (qName == "NOHABER" && tagpadre == "CUENTA")
01679         m_nohaberCuenta = cadintermedia;
01680     if (qName == "TIPOCUENTA" && tagpadre == "CUENTA")
01681         m_tipoCuenta = cadintermedia;
01683     if (qName == "REGISTROIVA" && m_tipo & IMPORT_FACTURAS) {
01684         QString query = "UPDATE registroiva SET contrapartida = id_cuenta('" + m_rIvaContrapartida + "'), ffactura = '" + m_rIvaFFactura + "'";
01685         if (m_rIvaBaseImp != "")
01686             query += ", baseimp = " + m_rIvaBaseImp;
01687         if (m_rIvaIva != "")
01688             query += ", iva = " + m_rIvaIva;
01689         query +=" WHERE idregistroiva = " + m_idRegistroIva;
01690         conexionbase->ejecuta(query);
01691     } // end if
01692     if (qName == "CONTRAPARTIDA" && tagpadre == "REGISTROIVA")
01693         m_rIvaContrapartida = cadintermedia;
01694     if (qName == "BASEIMP" && tagpadre == "REGISTROIVA")
01695         m_rIvaBaseImp = cadintermedia;
01696     if (qName == "IVA" && tagpadre == "REGISTROIVA")
01697         m_rIvaIva = cadintermedia;
01698     if (qName == "FFACTURA" && tagpadre == "REGISTROIVA")
01699         m_rIvaFFactura = cadintermedia;
01700     if (qName == "FACTURA" && tagpadre == "REGISTROIVA")
01701         m_rIvaFactura = cadintermedia;
01702     if (qName == "CIF" && tagpadre == "REGISTROIVA")
01703         m_rIvaCIF = cadintermedia;
01704     if (qName == "IDFPAGO" && tagpadre == "REGISTROIVA")
01705         m_rIvaIdFPago = cadintermedia;
01706     if (qName == "RECTIFICAAREGISTROIVA" && tagpadre == "REGISTROIVA")
01707         m_rIvRecRegIva = cadintermedia;
01709     if (qName == "RIVA" && m_tipo & IMPORT_FACTURAS) {
01710         QString query1 = "SELECT idtipoiva FROM tipoiva WHERE nombretipoiva = '" + m_nombreTipoIva + "'";
01711         conexionbase->begin();
01712         cursor2 * cur = conexionbase->cargacursor(query1, "elqueryd");
01713         if (!cur->eof()) {
01714             QString query = "INSERT INTO IVA (idregistroiva, idtipoiva, baseiva) VALUES (" + m_idRegistroIva + ", " + cur->valor("idtipoiva") + ", " + m_baseIva + ")";
01715             conexionbase->ejecuta(query);
01716         } // end if
01717         delete cur;
01718         conexionbase->commit();
01719     } // end if
01720     if (qName == "IDTIPOIVA" && tagpadre == "RIVA")
01721         m_idTipoIva = cadintermedia;
01722     if (qName == "NOMBRETIPOIVA" && tagpadre == "RIVA")
01723         m_nombreTipoIva = cadintermedia;
01724     if (qName == "BASEIVA" && tagpadre == "RIVA")
01725         m_baseIva = cadintermedia;
01726     cadintermedia = "";
01727     _depura("END StructureParser::endElement", 0);
01728     return TRUE;
01729 }

bool StructureParser::characters ( const QString &  n1  ) 

Parameters:
nl 
Returns:

Definition at line 1736 of file pgimportfiles.cpp.

References _depura(), cadintermedia, and TRUE.

01736                                                   {
01737     _depura("StructureParser::characters", 0);
01738     cadintermedia += n1;
01739     _depura("END StructureParser::characters", 0);
01740     return TRUE;
01741 }


Field Documentation

postgresiface2* StructureParser::conexionbase [private]

Definition at line 88 of file pgimportfiles.cpp.

Referenced by endElement(), startElement(), StructureParser(), and ~StructureParser().

QString StructureParser::cadintermedia [private]

Definition at line 89 of file pgimportfiles.cpp.

Referenced by characters(), endElement(), and startElement().

QString StructureParser::idasiento [private]

Variables usadas para almacenar los datos de un asiento.

Esta variable va almacenando los valores que van saliendo en la clase.

Definition at line 91 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::ordenasiento [private]

Definition at line 92 of file pgimportfiles.cpp.

QString StructureParser::fechaasiento [private]

Definition at line 93 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::idapunte [private]

Variables usadas para almacenar los datos de un apunte.

Definition at line 95 of file pgimportfiles.cpp.

QString StructureParser::idborrador [private]

Definition at line 96 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::fechaapunte [private]

Definition at line 97 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::codigocuentaapunte [private]

Definition at line 98 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::debeapunte [private]

Definition at line 99 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::haberapunte [private]

Definition at line 100 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::conceptocontableapunte [private]

Definition at line 101 of file pgimportfiles.cpp.

Referenced by endElement().

int StructureParser::m_ordenapunte [private]

Definition at line 102 of file pgimportfiles.cpp.

Referenced by startElement().

QString StructureParser::idcuenta [private]

Variables usadas para almacenar los datos de una cuenta.

Definition at line 104 of file pgimportfiles.cpp.

QString StructureParser::descripcioncuenta [private]

Definition at line 105 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::codigocuenta [private]

Definition at line 106 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::codigopadre [private]

Definition at line 107 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::m_bloqueadaCuenta [private]

Definition at line 108 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::m_nodebeCuenta [private]

Definition at line 109 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::m_nohaberCuenta [private]

Definition at line 110 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::m_tipoCuenta [private]

Definition at line 111 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::m_idRegistroIva [private]

Variables usadas para almacenar los datos del registro de IVA.

Definition at line 113 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::m_rIvaContrapartida [private]

Definition at line 114 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvaBaseImp [private]

Definition at line 115 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvaIva [private]

Definition at line 116 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvaFFactura [private]

Definition at line 117 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvaFactura [private]

Definition at line 118 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvaCIF [private]

Definition at line 119 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvaIdFPago [private]

Definition at line 120 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_rIvRecRegIva [private]

Definition at line 121 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_idTipoIva [private]

Variables usadas para almacenar los datos de la tabla de IVA's.

Definition at line 123 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_baseIva [private]

Definition at line 124 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::m_nombreTipoIva [private]

Definition at line 125 of file pgimportfiles.cpp.

Referenced by endElement().

QString StructureParser::tagpadre [private]

El tagpadre indica en que posicion estamos. Si estamos en un asiento, un apunte, una cuenta, etc etc etc.

Definition at line 127 of file pgimportfiles.cpp.

Referenced by endElement(), and startElement().

QString StructureParser::indent [private]

Definition at line 138 of file pgimportfiles.cpp.

Referenced by endElement(), startDocument(), and startElement().

unsigned int StructureParser::m_tipo [private]

Definition at line 139 of file pgimportfiles.cpp.

Referenced by endElement(), startElement(), and StructureParser().


The documentation for this class was generated from the following file:
Generated on Sat Dec 15 00:02:16 2007 for BulmaGes by  doxygen 1.5.1