#include <efqtoolbutton.h>
Inheritance diagram for EFQToolButton:

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 | |
| FacturaView * | m_factura |
Definition at line 32 of file efqtoolbutton.h.
| EFQToolButton::EFQToolButton | ( | FacturaView * | fac, | |
| QWidget * | parent = 0 | |||
| ) |
| 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 }
| void EFQToolButton::escribe_descuento_factura | ( | QString & | string, | |
| cursor2 * | descuentos_factura, | |||
| Fixed | bimpfactura | |||
| ) |
| 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.
| 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 }
FacturaView* EFQToolButton::m_factura [private] |
Definition at line 36 of file efqtoolbutton.h.
Referenced by click(), EFQToolButton(), and exporta_factura_ubl().
1.5.1