00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <fstream>
00022
00023 #include <QMessageBox>
00024 #include <QWidget>
00025 #include <QObject>
00026 #include <QComboBox>
00027 #include <QToolButton>
00028 #include <QLayout>
00029 #include <QTextStream>
00030
00031 #include "facturapview.h"
00032 #include "company.h"
00033 #include "listlinfacturapview.h"
00034 #include "providerslist.h"
00035 #include "pagoview.h"
00036 #include "funcaux.h"
00037 #include "albaranproveedorview.h"
00038
00039
00046 FacturaProveedorView::FacturaProveedorView(Company *comp, QWidget *parent)
00047 : FichaBf(comp, parent) {
00048 _depura("FacturaProveedorView::FacturaProveedorView", 0);
00049 setAttribute(Qt::WA_DeleteOnClose);
00050 try {
00052 setupUi(this);
00053
00054 setTitleName(tr("Factura Proveedor"));
00055 setDBTableName("facturap");
00056 setDBCampoId("idfacturap");
00057 addDBCampo("idfacturap", DBCampo::DBint, DBCampo::DBPrimaryKey, QApplication::translate("FacturaProveedor", "Id facturap"));
00058 addDBCampo("idproveedor", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate("FacturaProveedor", "Id proveedor"));
00059 addDBCampo("numfacturap", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Numero"));
00060 addDBCampo("ffacturap", DBCampo::DBdate, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Fecha"));
00061 addDBCampo("procesadafacturap", DBCampo::DBboolean, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Procesada facturap"));
00062 addDBCampo("comentfacturap", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Comentario facturap"));
00063 addDBCampo("reffacturap", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Referencia facturap"));
00064 addDBCampo("descfacturap", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Descripcion facturap"));
00065 addDBCampo("idtrabajador", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Id trabajador"));
00066 addDBCampo("idforma_pago", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("FacturaProveedor", "Id forma de pago"));
00067
00068 subform2->setEmpresaBase(comp);
00069 m_descuentos->setEmpresaBase(comp);
00070 mui_idforma_pago->setEmpresaBase(comp);
00071 mui_idforma_pago->setidforma_pago("");
00072 mui_idproveedor->setEmpresaBase(comp);
00073 mui_idproveedor->setidproveedor("");
00074 mui_reffacturap->setEmpresaBase(comp);
00075
00076 setListaLineas(subform2);
00077 setListaDescuentos(m_descuentos);
00078
00079 m_totalBases->setReadOnly(TRUE);
00080 m_totalBases->setAlignment(Qt::AlignRight);
00081 m_totalTaxes->setReadOnly(TRUE);
00082 m_totalTaxes->setAlignment(Qt::AlignRight);
00083 m_totalDiscounts->setReadOnly(TRUE);
00084 m_totalDiscounts->setAlignment(Qt::AlignRight);
00085 m_totalfacturap->setReadOnly(TRUE);
00086 m_totalfacturap->setAlignment(Qt::AlignRight);
00087 meteWindow(windowTitle(), this, FALSE);
00088 } catch (...) {
00089 mensajeInfo(tr("Error al crear la factura proveedor"));
00090 }
00091 _depura("END FacturaProveedorView::FacturaProveedorView", 0);
00092 }
00093
00094
00099 FacturaProveedorView::~FacturaProveedorView() {
00100 _depura("FacturaProveedorView::~FacturaProveedorView", 0);
00101 empresaBase()->refreshFacturasProveedor();
00102 _depura("END FacturaProveedorView::~FacturaProveedorView", 0);
00103
00104 }
00105
00106
00108
00110 void FacturaProveedorView::on_mui_pagar_clicked() {
00111 _depura("FacturaProveedorView::on_mui_pagar_clicked", 0);
00112 s_nuevoPago();
00113 _depura("END FacturaProveedorView::on_mui_pagar_clicked", 0);
00114 }
00115
00116
00118
00120 void FacturaProveedorView::on_m_descuentos_editFinish(int, int) {
00121 _depura("FacturaProveedorView::on_m_descuentos_editFinish", 0);
00122 calculaypintatotales();
00123 _depura("END FacturaProveedorView::on_m_descuentos_editFinish", 0);
00124 }
00125
00126
00128
00130 void FacturaProveedorView::on_subform2_editFinish(int, int) {
00131 _depura("FacturaProveedorView::on_subform2_editFinish", 0);
00132 calculaypintatotales();
00133 _depura("END FacturaProveedorView::on_subform2_editFinish", 0);
00134 }
00135
00136
00142 void FacturaProveedorView::inicializar() {
00143 _depura("FacturaProveedorView::inicializar", 0);
00144 subform2->inicializar();
00145 m_descuentos->inicializar();
00146 pintar();
00147 dialogChanges_cargaInicial();
00148 _depura("END FacturaProveedorView::inicializar", 0);
00149 }
00150
00151
00162 void FacturaProveedorView::pintatotales(Fixed iva, Fixed base, Fixed total, Fixed desc, Fixed irpf, Fixed reqeq) {
00163 _depura("PresupuestoView::pintatotales", 0);
00164 m_totalBases->setText(QString(base.toQString()));
00165 m_totalTaxes->setText(QString(iva.toQString()));
00166 m_totalfacturap->setText(QString(total.toQString()));
00167 m_totalDiscounts->setText(QString(desc.toQString()));
00168 m_totalIRPF->setText(QString(irpf.toQString()));
00169 m_totalReqEq->setText(QString(reqeq.toQString()));
00170 _depura("END PresupuestoView::pintatotales", 0);
00171 }
00172
00173
00178
00179
00181 void FacturaProveedorView::s_nuevoPago() {
00182 _depura("FacturaProveedorView::s_nuevoPago", 0);
00183 PagoView *bud = empresaBase()->newPagoView();
00184 empresaBase()->m_pWorkspace->addWindow(bud);
00185 bud->setDBvalue("idproveedor", DBvalue("idproveedor"));
00186 bud->setDBvalue("cantpago", m_totalfacturap->text());
00187 bud->setDBvalue("refpago", DBvalue("reffacturap"));
00188 bud->setDBvalue("comentpago", DBvalue("descfacturap"));
00189 bud->pintar();
00190 bud->show();
00191 _depura("END FacturaProveedorView::s_nuevoPago", 0);
00192 }
00193
00194
00200 void FacturaProveedorView::on_mui_veralbaranes_clicked() {
00201 _depura("FacturaProveedorView::on_mui_veralbaranes_clicked", 0);
00202 QString query = "SELECT * FROM albaranp WHERE refalbaranp='"+DBvalue("reffacturap")+"'";
00203 cursor2 *cur = empresaBase()->cargacursor(query);
00204 while (!cur->eof()) {
00205 AlbaranProveedorView *albpro = empresaBase()->newAlbaranProveedorView();
00206 albpro->cargar(cur->valor("idalbaranp"));
00207 empresaBase()->m_pWorkspace->addWindow( albpro);
00208 albpro->show();
00209 cur->siguienteregistro();
00210 }
00211 delete cur;
00212 _depura("END FacturaProveedorView::on_mui_veralbaranes_clicked", 0);
00213 }
00214
00215
00217
00220 void FacturaProveedorView::on_mui_idproveedor_valueChanged(QString id) {
00221 _depura("FacturaProveedorView::on_m_proveedor_valueChanged", 0);
00222 subform2->setIdProveedor(id);
00223 mui_idforma_pago->setIdProveedor(id);
00224 _depura("END FacturaProveedorView::on_m_proveedor_valueChanged", 0);
00225 }
00226
00227
00238 int FacturaProveedorView::borrarPre() {
00239 _depura("FacturaProveedorView::borrar", 0);
00240 m_listalineas->borrar();
00241 m_listadescuentos->borrar();
00242 _depura("END FacturaProveedorView::borrar", 0);
00243 return 0;
00244 }
00245
00246
00247
00258 int FacturaProveedorView::cargarPost(QString idfacturap) {
00259 _depura("FacturaProveedorView::cargar", 0);
00260 m_listalineas->cargar(idfacturap);
00261 m_listadescuentos->cargar(idfacturap);
00262
00264 g_plugins->lanza("FacturaProveedorView_cargarPost_Post", this);
00265
00266 calculaypintatotales();
00267 _depura("END FacturaProveedorView::cargar", 0);
00268 return 0;
00269 }
00270
00280 int FacturaProveedorView::guardarPost() {
00281 _depura("FacturaProveedorView::guardar()", 0);
00282 m_listalineas->setColumnValue("idfacturap", DBvalue("idfacturap"));
00283 m_listadescuentos->setColumnValue("idfacturap", DBvalue("idfacturap"));
00284 m_listalineas->guardar();
00285 m_listadescuentos->guardar();
00286 _depura("END FacturaProveedorView::guardar()", 0);
00287 return 0;
00288 }
00289
00290
00293
00294
00297 void FacturaProveedorView::imprimirFacturaProveedor() {
00299 int res = g_plugins->lanza("imprimirFacturaProveedor", this);
00300 if (res)
00301 return;
00302
00303 base basesimp;
00304
00305 QString archivo = confpr->valor(CONF_DIR_OPENREPORTS) + "facturap.rml";
00306 QString archivod = confpr->valor(CONF_DIR_USER) + "facturap.rml";
00307 QString archivologo = confpr->valor(CONF_DIR_OPENREPORTS) + "logo.jpg";
00308
00310 #ifdef WINDOWS
00311
00312 archivo = "copy " + archivo + " " + archivod;
00313 #else
00314
00315 archivo = "cp " + archivo + " " + archivod;
00316 #endif
00317
00318 system(archivo.toAscii().constData());
00319
00321 #ifdef WINDOWS
00322
00323 archivologo = "copy " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00324 #else
00325
00326 archivologo = "cp " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00327 #endif
00328
00329 system(archivologo.toAscii().constData());
00330
00331 QFile file;
00332 file.setFileName(archivod);
00333 file.open(QIODevice::ReadOnly);
00334 QTextStream stream(&file);
00335 QString buff = stream.readAll();
00336 file.close();
00337 QString fitxersortidatxt="";
00338
00340 QString SQLQuery = "SELECT * FROM proveedor WHERE idproveedor = " + DBvalue("idproveedor");
00341 cursor2 *cur = empresaBase()->cargacursor(SQLQuery);
00342 if (!cur->eof()) {
00343 buff.replace("[dirproveedor]", cur->valor("dirproveedor"));
00344 buff.replace("[poblproveedor]", cur->valor("poblproveedor"));
00345 buff.replace("[telproveedor]", cur->valor("telproveedor"));
00346 buff.replace("[nomproveedor]", cur->valor("nomproveedor"));
00347 buff.replace("[cifproveedor]", cur->valor("cifproveedor"));
00348 }
00349 delete cur;
00350
00351 buff.replace("[numfacturap]", DBvalue("numfacturap"));
00352 buff.replace("[ffacturap]", DBvalue("ffacturap"));
00353 buff.replace("[comentfacturap]", DBvalue("comentfacturap"));
00354 buff.replace("[descfacturap]", DBvalue("descfacturap"));
00355 buff.replace("[reffacturap]", DBvalue("reffacturap"));
00356
00358 fitxersortidatxt += "<blockTable style=\"tablacontenido\" colWidths=\"1.75cm, 8.75cm, 1.5cm, 1.5cm, 1.5cm, 2.25cm\" repeatRows=\"1\">\n";
00359 fitxersortidatxt += "<tr>\n";
00360 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Codigo") + "</td>\n";
00361 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Concepto") + "</td>\n";
00362 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Cant.") + "</td>\n";
00363 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Precio") + "</td>\n";
00364 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Desc.") + "</td>\n";
00365 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Total") + "</td>\n";
00366 fitxersortidatxt += "</tr>\n";
00367 QString l;
00368
00370 int i = 0;
00371
00372 SDBRecord *linea;
00373 for (int i = 0; i < m_listalineas->rowCount(); ++i) {
00374 linea = m_listalineas->lineaat(i);
00375 Fixed base = Fixed(linea->DBvalue("cantlfacturap").toAscii().constData()) * Fixed(linea->DBvalue("pvplfacturap").toAscii().constData());
00376 basesimp[linea->DBvalue("ivalfacturap")] = basesimp[linea->DBvalue("ivalfacturap")] + base - base * Fixed(linea->DBvalue("descuentolfacturap").toAscii().constData()) / 100;
00377
00378 fitxersortidatxt += "<tr>\n";
00379 fitxersortidatxt += " <td>" + linea->DBvalue("codigocompletoarticulo") + "</td>\n";
00380 fitxersortidatxt += " <td>" + linea->DBvalue("desclfacturap") + "</td>\n";
00381 fitxersortidatxt += " <td>" + linea->DBvalue("cantlfacturap") + "</td>\n";
00382 fitxersortidatxt += " <td>" + linea->DBvalue("pvplfacturap") + "</td>\n";
00383 fitxersortidatxt += " <td>" + linea->DBvalue("descuentolfacturap") + " %</td>\n";
00384 fitxersortidatxt += " <td>" + (base - base * Fixed (linea->DBvalue("descuentolfacturap")) / 100).toQString() + "</td>\n";
00385 fitxersortidatxt += "</tr>";
00386 i++;
00387 }
00388
00389 while (i++ < 15)
00390 fitxersortidatxt += "<tr></tr>";
00391
00392 fitxersortidatxt += "</blockTable>\n";
00393 buff.replace("[story]", fitxersortidatxt);
00394
00395 Fixed basei("0.00");
00396 base::Iterator it;
00397 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00398 basei = basei + it.value();
00399 }
00400
00402 fitxersortidatxt = "";
00403 Fixed porcentt("0.00");
00404 SDBRecord *linea1;
00405 if (m_listadescuentos->rowCount()) {
00406 fitxersortidatxt += "<blockTable style=\"tabladescuento\" colWidths=\"12cm, 2cm, 3cm\" repeatRows=\"1\">\n";
00407 fitxersortidatxt += "<tr>\n";
00408 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Descuento") + "</td>\n";
00409 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Porcentaje") + "</td>\n";
00410 fitxersortidatxt += " <td>" + QApplication::translate("FacturaProveedor", "Total") + "</td>\n";
00411 fitxersortidatxt += "</tr>\n";
00412 for (int i = 0; i < m_listadescuentos->rowCount(); ++i) {
00413 linea1 = m_listadescuentos->lineaat(i);
00414 porcentt = porcentt + Fixed(linea1->DBvalue("proporciondfacturap").toAscii().constData());
00415 fitxersortidatxt += "<tr>\n";
00416 fitxersortidatxt += " <td>" + linea1->DBvalue("conceptdfacturap") + "</td>\n";
00417 fitxersortidatxt += " <td>" + linea1->DBvalue("proporciondfacturap") + " %</td>\n";
00418 fitxersortidatxt += " <td>" + l.sprintf("-%s", ( Fixed(linea1->DBvalue("proporciondfacturap")) * basei / 100).toQString().toAscii().constData()) + "</td>\n";
00419 fitxersortidatxt += "</tr>";
00420 }
00421 fitxersortidatxt += "</blockTable>\n";
00422 }
00423 buff.replace("[descuentos]", fitxersortidatxt);
00424
00426 fitxersortidatxt= "";
00427 QString tr1 = "";
00428 QString tr2 = "";
00429 fitxersortidatxt += "<blockTable style=\"tablatotales\">\n";
00430
00431 Fixed totbaseimp("0.00");
00432 Fixed parbaseimp("0.00");
00433 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00434 if (porcentt > 0) {
00435 parbaseimp = it.value() - it.value() * porcentt / 100;
00436 } else {
00437 parbaseimp = it.value();
00438 }
00439 totbaseimp = totbaseimp + parbaseimp;
00440 tr1 += " <td>" + QApplication::translate("FacturaProveedor", "Base ") + it.key() + " %</td>\n";
00441 tr2 += " <td>" + l.sprintf("%s",parbaseimp.toQString().toAscii().constData()) + "</td>\n";
00442 }
00443
00444 Fixed totiva("0.0");
00445 Fixed pariva("0.0");
00446 for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00447 if (porcentt > 0) {
00448 pariva = (it.value() - it.value() * porcentt / 100) * Fixed(it.key()) / 100;
00449 } else {
00450 pariva = it.value() * Fixed(it.key()) / 100;
00451 }
00452 totiva = totiva + pariva;
00453 tr1 += " <td>" + QApplication::translate("FacturaProveedor", "IVA ") + it.key() + " %</td>\n";
00454 tr2 += " <td>" + l.sprintf("%s", pariva.toQString().toAscii().constData()) + "</td>\n";
00455 }
00456 tr1 += " <td>" + QApplication::translate("FacturaProveedor", "Total ") + "</td>\n";
00457 tr2 += " <td>" + l.sprintf("%s", (totiva + totbaseimp).toQString().toAscii().constData()) + "</td>\n";
00458 fitxersortidatxt += "<tr>" + tr1 + "</tr><tr>" + tr2 + "</tr></blockTable>\n";
00459 buff.replace("[totales]", fitxersortidatxt);
00460
00461 if (file.open(QIODevice::WriteOnly)) {
00462 QTextStream stream(&file) ;
00463 stream << buff;
00464 file.close();
00465 }
00466 invocaPDF("facturap");
00467 }
00468
00469
00470