EFQToolButton Class Reference

#include <efqtoolbutton.h>

Inheritance diagram for EFQToolButton:

QToolButton PEmpresaBase

Public Slots

virtual void click ()

Public Member Functions

 EFQToolButton (FacturaView *fac, QWidget *parent=0)
 ~EFQToolButton ()
void escribe_descuento_factura (QString &string, cursor2 *descuentos_factura, Fixed bimpfactura)
void escribe_linea_factura (QString &string, cursor2 *lfactura, int numerolinea)
 Funcion que escribe lineas de factura en un QString.
void exporta_factura_ubl ()

Private Attributes

FacturaViewm_factura

Detailed Description

Definition at line 32 of file efqtoolbutton.h.


Constructor & Destructor Documentation

EFQToolButton::EFQToolButton ( FacturaView fac,
QWidget parent = 0 
)

Parameters:
fac 
parent 

Definition at line 43 of file efqtoolbutton.cpp.

References _depura(), click(), FichaBf::empresaBase(), m_factura, and PEmpresaBase::setEmpresaBase().

00043                                                               : QToolButton(parent), PEmpresaBase() {
00044         _depura("EFQToolButton::EFQToolButton", 0);
00045         setEmpresaBase(fac->empresaBase());
00046         m_factura = fac;
00047         connect(this, SIGNAL(clicked()), this, SLOT(click()));
00048         _depura("END EFQToolButton::EFQToolButton", 0);
00049 }

EFQToolButton::~EFQToolButton (  ) 

Definition at line 55 of file efqtoolbutton.cpp.

References _depura().

00055                               {
00056         _depura("EFQToolButton::~EFQToolButton", 0);
00057         _depura("END EFQToolButton::~EFQToolButton", 0);
00058 }


Member Function Documentation

void EFQToolButton::escribe_descuento_factura ( QString &  string,
cursor2 descuentos_factura,
Fixed  bimpfactura 
)

Parameters:
string 
descuentos_factura 
bimpfactura 

Definition at line 67 of file efqtoolbutton.cpp.

References _depura(), Fixed::toQString(), and cursor2::valor().

Referenced by exporta_factura_ubl().

00067                                                                                                              {
00068         _depura("EFQToolButton::escribe_descuento_factura", 0);
00069         
00070         Fixed descuentoFactura = "0.00";
00071         descuentoFactura = Fixed(descuentos_factura->valor("proporciondfactura"));
00072         descuentoFactura = descuentoFactura*bimpfactura;
00073         descuentoFactura = descuentoFactura*Fixed("0.01");
00074 
00075         string += "\t<cac:AllowanceCharge>\n";
00076         string += "\t\t<cbc:ChargeIndicator>false</cbc:ChargeIndicator>\n";
00077         string += "\t\t<cbc:MultiplierFactorNumeric>" + descuentos_factura->valor("proporciondfactura") + "</cbc:MultiplierFactorNumeric>\n";
00078         string += "\t\t<cbc:Amount amountCurrencyID=\"EUR\">" + descuentoFactura.toQString() + "</cbc:Amount>\n";
00079         string += "\t</cac:AllowanceCharge>\n";
00080         string += "\n";
00081         
00082         _depura("END EFQToolButton::escribe_descuento_factura", 0);
00083 }

void EFQToolButton::escribe_linea_factura ( QString &  string,
cursor2 lfactura,
int  numerolinea 
)

Funcion que escribe lineas de factura en un QString.

Parameters:
string 
lfactura 
numerolineq 

Definition at line 92 of file efqtoolbutton.cpp.

References _depura(), postgresiface2::cargacursor(), PEmpresaBase::empresaBase(), iva, Fixed::toQString(), and cursor2::valor().

Referenced by exporta_factura_ubl().

00092                                                                                              {
00093 
00094         _depura("EFQToolButton::escribe_linea_factura", 0);
00095 
00096         QString numero = QString::number(numerolinea);
00097         
00098         QString query = "SELECT * FROM articulo WHERE idarticulo = " + lfactura->valor("idarticulo");
00099         cursor2 *articulo = empresaBase()->cargacursor(query);
00100         
00101         QString string_iva = lfactura->valor("ivalfactura");
00102         QString string_bimp = lfactura->valor("pvplfactura");
00103         QString string_descuento = lfactura->valor("descuentolfactura");
00104         
00105         Fixed iva(string_iva); // es un porcentaje
00106         Fixed bimp(string_bimp);
00107         Fixed descuento(string_descuento);
00108         
00109         Fixed iva_lfactura = (iva/100)*bimp;
00110         Fixed descuento_lfactura = (descuento/100)*bimp;
00111         
00112         string += "<cac:InvoiceLine>\n";
00113         
00114         // Numero de linea en el documento
00115         string += "\t<cac:ID>" + numero + "</cac:ID>\n";
00116         
00117         // Cantidad de elementos en la linea
00118         string += "\t<cbc:InvoicedQuantity quantityUnitCode=\"UNIT\">" + lfactura->valor("cantlfactura") + "</cbc:InvoicedQuantity>\n";
00119         
00120         // PVP de la linea
00121         string += "\t<cbc:LineExtensionAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\"EUR\">" + lfactura->valor("pvplfactura") +"</cbc:LineExtensionAmount>\n";
00122         
00123         // Descuentos o recargos. El false nos dice que es descuento.
00124         string += "\t<cac:AllowanceCharge>\n";
00125         string += "\t\t<cbc:ChargeIndicator>false</cbc:ChargeIndicator>\n";
00126         string += "\t\t<cbc:MultiplierFactorNumeric>" + lfactura->valor("descuentolfactura") + "</cbc:MultiplierFactorNumeric>\n";
00127         string += "\t\t<cbc:Amount amountCurrencyID=\"EUR\">" + descuento_lfactura.toQString() + "</cbc:Amount>\n";
00128         string += "\t</cac:AllowanceCharge>\n";
00129         
00130         // Total de los impuestos
00131         string += "\t<cac:TaxTotal>\n";
00132         string += "\t\t<cbc:TotalTaxAmount amountCurrencyID=\"EUR\">" + iva_lfactura.toQString() + "</cbc:TotalTaxAmount>\n";
00133         string += "\t</cac:TaxTotal>\n";
00134         
00135         // Descripcion del elemento de la linea
00136         string += "\t<cac:Item>\n";
00137         string += "\t\t<cbc:Description>" + lfactura->valor("desclfactura") + "</cbc:Description>\n";
00138         // Codigo de articulo
00139         string += "\t\t<cac:SellersItemIdentification>\n";
00140         string += "\t\t\t<cac:ID>" + articulo->valor("codigocompletoarticulo") + "</cac:ID>\n";
00141         string += "\t\t</cac:SellersItemIdentification>\n";
00142         // Tipo de Impuestos
00143         string += "\t\t<cac:TaxCategory>\n";
00144         string += "\t\t\t<cac:ID>" + lfactura->valor("ivalfactura") + "</cac:ID>\n";
00145         string += "\t\t\t<cbc:Percent>" + lfactura->valor("ivalfactura") + "</cbc:Percent>\n";
00146         string += "\t\t\t<cac:TaxScheme>\n";
00147         string += "\t\t\t\t<cac:TaxTypeCode>IVA</cac:TaxTypeCode>\n";
00148         string += "\t\t\t</cac:TaxScheme>\n";
00149         string += "\t\t</cac:TaxCategory>\n";
00150         // PVP de un articulo
00151         string += "\t\t<cac:BasePrice>\n";
00152         string += "\t\t\t<cbc:PriceAmount amountCurrencyCodeListVersionID=\"0.3\" amountCurrencyID=\"EUR\">" + articulo->valor("pvparticulo") +"</cbc:PriceAmount>\n";
00153         string += "\t\t</cac:BasePrice>\n";
00154         string += "\t</cac:Item>\n";
00155         
00156         string += "</cac:InvoiceLine>\n";
00157         string += "\n"; // Dejamos sitio para otra linea
00158         
00159         delete articulo;
00160         
00161         _depura("END EFQToolButton::escribe_linea_factura", 0);
00162 }

void EFQToolButton::exporta_factura_ubl (  ) 

Definition at line 170 of file efqtoolbutton.cpp.

References _depura(), _PLANTILLA_, _RESULTADO_, postgresiface2::cargacursor(), DBRecord::DBvalue(), PEmpresaBase::empresaBase(), cursor2::eof(), escribe_descuento_factura(), escribe_linea_factura(), m_factura, cursor2::primerregistro(), cursor2::siguienteregistro(), and cursor2::valor().

Referenced by click().

00170                                         {
00171 
00172         _depura("EFQToolButton::exporta_factura_ubl", 0);
00173         
00174         QString query = "";
00175         
00176         QFile *file_in  = new QFile(_PLANTILLA_);
00177         
00178         if (!file_in->open(QIODevice::ReadOnly | QIODevice::Text)) {
00179                 _depura("Problemas al abir la plantilla de factura", 2);
00180                 exit(-1);
00181         }
00182         
00184         QString FacturaXml = "";
00185         
00187         QTextStream in(file_in);
00188         
00190         while (!in.atEnd()) {
00191                 FacturaXml += in.readLine();
00192                 FacturaXml += "\n";
00193         }
00194                 
00196         
00197         // Comprobamos que los campos necesarios para ejecutar las consultas a la BD existen
00198         
00199         bool error_idtrabajador = false;
00200         
00201         if (m_factura->DBvalue("idfactura").isEmpty()) {
00202                 _depura("ERROR: El campo idfactura del DBRecord esta vacio.", 2);
00203                 exit(-1);
00204         }
00205         
00206         if (m_factura->DBvalue("idcliente").isEmpty()) {
00207                 _depura("ERROR: El campo idcliente del DBRecord esta vacio.", 2);
00208                 exit(-1);
00209         }
00210         
00211         if (m_factura->DBvalue("idtrabajador").isEmpty()) {
00212                 // Esto no es un error grave. Este campo falta si la factura no viene desde un albaran.
00213                 // Marcamos el error y evitamos hacer el query despues
00214                 error_idtrabajador = true;
00215                 
00216         }
00217         
00218         if (m_factura->DBvalue("idforma_pago").isEmpty()) {
00219                 _depura("ERROR: El campo idforma_pago del DBRecord esta vacio.", 2);
00220                 exit(-1);
00221         }
00222         
00223         // El fichero de salida
00224         
00225         QString nombrearchivo = "";
00226         nombrearchivo += QString(_RESULTADO_);
00227         nombrearchivo += QString(m_factura->DBvalue("idfactura"));
00228         nombrearchivo += ".xml";
00229         
00230         QFile *file_out = new QFile(nombrearchivo);
00231         
00232         if (!file_out->open(QIODevice::WriteOnly | QIODevice::Text)) {
00233                 _depura("Problemas al crear el archivo de salida", 2);
00234                 exit(-1);
00235         }
00236         
00237         // Datos de la factura que no estan en el DBRecord
00238         query = "SELECT totalfactura, bimpfactura, impfactura FROM factura WHERE idfactura = " + m_factura->DBvalue("idfactura");
00239         cursor2 *factura_totales = empresaBase()->cargacursor(query);
00240         
00241         // Datos del cliente
00242         query = "SELECT * FROM cliente WHERE idcliente = " + m_factura->DBvalue("idcliente");
00243         cursor2 *cliente = empresaBase()->cargacursor(query);
00244         
00245         // Datos del trabajador que emitio la factura
00246                 
00247         cursor2 *trabajador = NULL;
00248         
00249         if (!error_idtrabajador) {
00250                 query = "SELECT * FROM trabajador WHERE idtrabajador = " + m_factura->DBvalue("idtrabajador");
00251                 trabajador = empresaBase()->cargacursor(query);
00252         }
00253                 
00254         // Datos de la forma de pago convenida
00255         query = "SELECT * FROM forma_pago WHERE idforma_pago = " + m_factura->DBvalue("idforma_pago");
00256         cursor2 *forma_pago = empresaBase()->cargacursor(query);
00257         
00258         // Datos de la tabla configuracion
00259         
00260         bool error_configuracion = false;
00261         
00262         query = "SELECT * FROM configuracion WHERE nombre = 'NombreEmpresa'";
00263         cursor2 *nombre_empresa = empresaBase()->cargacursor(query);
00264         
00265         query = "SELECT * FROM configuracion WHERE nombre = 'CIF'";
00266         cursor2 *cif_empresa = empresaBase()->cargacursor(query);
00267         
00268         query = "SELECT * FROM configuracion WHERE nombre = 'DireccionCompleta'";
00269         cursor2 *dir_empresa = empresaBase()->cargacursor(query);
00270 
00271         query = "SELECT * FROM configuracion WHERE nombre = 'Ciudad'";
00272         cursor2 *ciudad_empresa = empresaBase()->cargacursor(query);
00273         
00274         query = "SELECT * FROM configuracion WHERE nombre = 'CodPostal'";
00275         cursor2 *cp_empresa = empresaBase()->cargacursor(query);
00276                 
00277         if (nombre_empresa->valor("valor").isEmpty()) {
00278                 _depura("El campo valor con nombre nombre_empresa de la tabla de configuracion esta vacio", 2);
00279                 error_configuracion = true;
00280         }
00281         
00282         if (cif_empresa->valor("valor").isEmpty()) {
00283                 _depura("El campo valor con nombre cif_empresa de la tabla de configuracion esta vacio", 2);
00284                 error_configuracion = true;
00285         }
00286         
00287         if (dir_empresa->valor("valor").isEmpty()) {
00288                 _depura("El campo valor con nombre dir_empresa de la tabla de configuracion esta vacio", 2);
00289                 error_configuracion = true;
00290         }
00291         
00292         if (ciudad_empresa->valor("valor").isEmpty()) {
00293                 _depura("El campo valor con nombre ciudad_empresa de la tabla de configuracion esta vacio", 2);
00294                 error_configuracion = true;
00295         }
00296         
00297         if (cp_empresa->valor("valor").isEmpty()) {
00298                 _depura("El campo valor con nombre cp_empresa de la tabla de configuracion esta vacio", 2);
00299                 error_configuracion = true;
00300         }
00301                 
00302         if (error_configuracion) {
00303                 delete factura_totales;
00304                 delete cliente;
00305                 
00306                 if (trabajador != NULL)
00307                         delete trabajador;
00308                 
00309                 delete forma_pago;
00310                 delete nombre_empresa;
00311                 delete cif_empresa;
00312                 delete dir_empresa;
00313                 delete ciudad_empresa;
00314                 delete cp_empresa;
00315                 
00316                 exit(-1);;
00317         }
00318                 
00319         // Sustituimos...
00320         
00321         FacturaXml.replace("[numfactura]", m_factura->DBvalue("numfactura"));
00322         FacturaXml.replace("[ffactura]", m_factura->DBvalue("ffactura"));
00323         FacturaXml.replace("[descfactura]", m_factura->DBvalue("descfactura"));
00324         FacturaXml.replace("[impfactura]", factura_totales->valor("impfactura"));
00325         FacturaXml.replace("[bimpfactura]", factura_totales->valor("bimpfactura"));
00326         FacturaXml.replace("[totalfactura]", factura_totales->valor("totalfactura"));
00327         
00328         FacturaXml.replace("[nomcliente]", cliente->valor("nomcliente"));
00329         FacturaXml.replace("[cifcliente]", cliente->valor("cifcliente"));
00330         FacturaXml.replace("[departamento]", cliente->valor("departamento"));
00331         FacturaXml.replace("[dircliente]", cliente->valor("dircliente"));
00332         FacturaXml.replace("[pobcliente]", cliente->valor("poblcliente"));
00333         FacturaXml.replace("[cpcliente]", cliente->valor("cpcliente"));
00334         
00335         FacturaXml.replace("[nombre_empresa]", nombre_empresa->valor("valor"));
00336         FacturaXml.replace("[cif_empresa]", cif_empresa->valor("valor"));
00337         FacturaXml.replace("[dir_empresa]", dir_empresa->valor("valor"));
00338         FacturaXml.replace("[ciudad_empresa]", ciudad_empresa->valor("valor"));
00339         FacturaXml.replace("[cp_empresa]", cp_empresa->valor("valor"));
00340         
00341         if (trabajador != NULL)
00342                 FacturaXml.replace("[trabajador]", trabajador->valor("nomtrabajador") + " " + trabajador->valor("apellidostrabajador"));
00343         else
00344                 FacturaXml.replace("[trabajador]", "--");
00345         
00346         FacturaXml.replace("[forma_de_pago]", forma_pago->valor("descforma_pago"));
00347                 
00349         
00350         query = "SELECT * FROM lfactura WHERE idfactura = " + m_factura->DBvalue("idfactura");
00351         cursor2 *lfacturas = empresaBase()->cargacursor(query);
00352         
00353         // Por si las moscas...
00354         lfacturas->primerregistro();
00355         
00356         QString LineasFactura = "\n";
00357         int numerolinea = 1;
00358         
00359         Fixed totalFactura = "0.00";
00360                 
00363         while (!lfacturas->eof()) {
00364                 escribe_linea_factura(LineasFactura, lfacturas, numerolinea);
00365                 
00366                 totalFactura = totalFactura + (Fixed(lfacturas->valor("cantlfactura"))*Fixed(lfacturas->valor("pvplfactura")));
00367                 
00368                 lfacturas->siguienteregistro();
00369                 numerolinea++;
00370         }
00371         
00372         FacturaXml.replace("[lineas_factura]", LineasFactura);
00373                 
00375         query = "SELECT * FROM dfactura WHERE idfactura = " + m_factura->DBvalue("idfactura");
00376         cursor2 *descuentos_factura = empresaBase()->cargacursor(query);        
00377 
00378         QString DescuentosFactura = "\n";
00379                 
00380         descuentos_factura->primerregistro();
00381         
00382         while (!descuentos_factura->eof()) {
00383                 escribe_descuento_factura(DescuentosFactura, descuentos_factura, totalFactura);
00384                 descuentos_factura->siguienteregistro();
00385         }
00386         
00387         FacturaXml.replace("[descuentos]", DescuentosFactura);
00388         
00389         delete descuentos_factura;
00390         delete lfacturas;
00391         delete factura_totales;
00392         delete cliente;
00393                 
00394         if (trabajador != NULL)
00395                 delete trabajador;
00396         
00397         delete forma_pago;
00398         delete nombre_empresa;
00399         delete cif_empresa;
00400         delete dir_empresa;
00401         delete ciudad_empresa;
00402         delete cp_empresa;
00403         
00405         QTextStream out(file_out);
00406         
00407         out << FacturaXml;
00408         
00409         file_in->close();
00410         file_out->close();
00411         
00412         delete file_in;
00413         delete file_out;
00414         
00416         
00417         QFile *file = new QFile(nombrearchivo);
00418         
00419         if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) {
00420                 _depura("ERROR: no se pudo abrir el archivo " + nombrearchivo + " para su parseo.", 2);
00421                 exit(-1);
00422         }
00423         
00424         QXmlSimpleReader *xmlReader = new QXmlSimpleReader();
00425         QXmlInputSource *source = new QXmlInputSource(file);
00426         
00427         bool ok = xmlReader->parse(source);
00428         
00429         if (!ok)
00430                 _depura("Problemas en el parseo del archivo", 2);
00431                 
00432         file->close();
00433 
00434         delete source;
00435         delete xmlReader;
00436         delete file;
00437         
00438         _depura ("Exportacion completada. Su efactura se encuentra en " + nombrearchivo, 2);
00439         
00440         _depura("END EFQToolButton::exporta_factura_ubl", 0);
00441 }

void EFQToolButton::click (  )  [virtual, slot]

Definition at line 447 of file efqtoolbutton.cpp.

References _depura(), DBRecord::DBvalue(), dialogChanges::dialogChanges_hayCambios(), exporta_factura_ubl(), and m_factura.

Referenced by EFQToolButton().

00447                           {
00448 
00449         _depura("EFQToolButton::click", 0);
00450         
00451         if ( (!m_factura->dialogChanges_hayCambios()) && (m_factura->DBvalue("idfactura") != "") ) {
00452                 exporta_factura_ubl();
00453         } else {
00454                 _depura("Es necesario Guardar la factura antes de exportarla a UBL", 2);
00455         }
00456         
00457         _depura("END EFQToolButton::click", 0);
00458 }


Field Documentation

FacturaView* EFQToolButton::m_factura [private]

Definition at line 36 of file efqtoolbutton.h.

Referenced by click(), EFQToolButton(), and exporta_factura_ubl().


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