pedidoproveedorview.cpp

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2005 by Tomeu Borras Riera                              *
00003  *   tborras@conetxia.com                                                  *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
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 "pedidoproveedorview.h"
00032 #include "company.h"
00033 #include "listlinpedidoproveedorview.h"
00034 #include "providerslist.h"
00035 #include "presupuestoview.h"
00036 #include "presupuestolist.h"
00037 #include "pagoview.h"
00038 #include "albaranproveedorview.h"
00039 #include "funcaux.h"
00040 
00041 
00043 
00047 PedidoProveedorView::PedidoProveedorView(Company *comp, QWidget *parent)
00048         : FichaBf(comp, parent) {
00049     _depura("PedidoProveedorView::PedidoProveedorView", 0);
00050     setAttribute(Qt::WA_DeleteOnClose);
00051     try {
00052         setupUi(this);
00053 
00054         setTitleName(tr("Pedido Proveedor"));
00055         setDBTableName("pedidoproveedor");
00056         setDBCampoId("idpedidoproveedor");
00057         addDBCampo("idpedidoproveedor", DBCampo::DBint, DBCampo::DBPrimaryKey, QApplication::translate("PedidoProveedor", "Id pedido proveedor"));
00058         addDBCampo("idproveedor", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate("PedidoProveedor", "Id proveedor"));
00059         addDBCampo("idalmacen", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate("PedidoProveedor", "Id almacen"));
00060         addDBCampo("numpedidoproveedor", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Numero pedido proveedor"));
00061         addDBCampo("fechapedidoproveedor", DBCampo::DBdate, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Fecha pedido proveedor"));
00062         addDBCampo("comentpedidoproveedor", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Comentario pedido"));
00063         addDBCampo("procesadopedidoproveedor", DBCampo::DBboolean, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Pedido procesado"));
00064         addDBCampo("descpedidoproveedor", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Descripcion pedido"));
00065         addDBCampo("refpedidoproveedor", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Referencia pedido"));
00066         addDBCampo("idforma_pago", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Id forma de pago"));
00067         addDBCampo("idtrabajador", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Id trabajador"));
00068         addDBCampo("contactpedidoproveedor", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Persona de contacto proveedor"));
00069         addDBCampo("telpedidoproveedor", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("PedidoProveedor", "Telefono proveedor"));
00070 
00072         mui_lineasDetalle->setEmpresaBase(comp);
00073         mui_lineasDetalle->inicializar();
00074         mui_idproveedor->setEmpresaBase(comp);
00075         mui_idforma_pago->setEmpresaBase(comp);
00076         mui_idforma_pago->setidforma_pago("0");
00077         mui_descuentos->setEmpresaBase(comp);
00078         mui_descuentos->inicializar();
00079         mui_idalmacen->setEmpresaBase(comp);
00080         mui_idalmacen->setidalmacen("0");
00081         mui_idtrabajador->setEmpresaBase(comp);
00082         mui_idtrabajador->setidtrabajador("0");
00083         mui_refpedidoproveedor->setEmpresaBase(comp);
00084 
00085         setListaLineas(mui_lineasDetalle);
00086         setListaDescuentos(mui_descuentos);
00087 
00088         dialogChanges_cargaInicial();
00089         meteWindow(windowTitle(), this, FALSE);
00090     } catch (...) {
00091         mensajeInfo(tr("Error al crear el pedido a proveedor"));
00092     } // end try
00093     _depura("END PedidoProveedorView::PedidoProveedorView", 0);
00094 }
00095 
00096 
00098 
00100 PedidoProveedorView::~PedidoProveedorView() {
00101     _depura("PedidoProveedorView::~PedidoProveedorView", 0);
00102     empresaBase()->refreshPedidosProveedor();
00103     _depura("END PedidoProveedorView::~PedidoProveedorView", 0);
00104 }
00105 
00106 
00108 
00116 void PedidoProveedorView::pintatotales(Fixed iva, Fixed base, Fixed total, Fixed desc, Fixed irpf, Fixed reqeq) {
00117     _depura("PedidoProveedorView::pintatotales", 0);
00118     mui_totalBaseImponible->setText(base.toQString());
00119     mui_totalImpuestos->setText(iva.toQString());
00120     mui_totalPedido->setText(total.toQString());
00121     mui_totalDescuentos->setText(desc.toQString());
00122     mui_totalIRPF->setText(QString(irpf.toQString()));
00123     mui_totalRecargo->setText(QString(reqeq.toQString()));
00124     _depura("END PedidoProveedorView::pintatotales", 0);
00125 }
00126 
00127 
00129 
00131 void PedidoProveedorView::on_mui_pagar_clicked() {
00132     _depura("PedidoProveedorView::on_mui_pagar_clicked", 0);
00133     PagoView *bud = empresaBase()->newPagoView();
00134     empresaBase()->m_pWorkspace->addWindow(bud);
00135     bud->setDBvalue("idproveedor", DBvalue("idproveedor"));
00136     bud->setDBvalue("cantpago", mui_totalPedido->text());
00137     bud->setDBvalue("refpago", DBvalue("refpedidoproveedor"));
00138     bud->setDBvalue("comentpago", DBvalue("descpedidoproveedor"));
00139     bud->pintar();
00140     bud->show();
00141     _depura("END PedidoProveedorView::on_mui_pagar_clicked", 0);
00142 }
00143 
00144 
00146 
00148 void PedidoProveedorView::generarAlbaran() {
00149     _depura("PedidoProveedorView::generarAlbaran", 0);
00151     QString SQLQuery = "SELECT * FROM albaranp WHERE refalbaranp = '" + DBvalue("refpedidoproveedor") + "'";
00152     cursor2 *cur = empresaBase()->cargacursor(SQLQuery);
00153     if (!cur->eof()) {
00156         if (QMessageBox::question(this,
00157                                   tr("Albaran ya existe"),
00158                                   tr("Existe un albaran de proveedor con la misma referencia que este pedido. Desea abrirlo para verificar?"),
00159                                   tr("&Si"), tr("&No"), QString::null, 0, 1)) {
00160             return;
00161         } // end if
00162         AlbaranProveedorView *bud = new AlbaranProveedorView(empresaBase(), NULL);
00163         empresaBase()->m_pWorkspace->addWindow(bud);
00164         bud->cargar(cur->valor("idalbaranp"));
00165         bud->show();
00166         return;
00167     } // end if
00168     delete cur;
00169 
00171     AlbaranProveedorView *bud = empresaBase()->newAlbaranProveedorView();
00172     empresaBase()->m_pWorkspace->addWindow(bud);
00173     bud->inicializar();
00174 
00175     bud->setDBvalue("comentalbaranp",  DBvalue("comentpedidoproveedor"));
00176     bud->setDBvalue("descalbaranp", DBvalue("descpedidoproveedor"));
00177     bud->setDBvalue("idforma_pago", DBvalue("idforma_pago"));
00178     bud->setDBvalue("refalbaranp", DBvalue("refpedidoproveedor"));
00179     bud->setDBvalue("idproveedor", DBvalue("idproveedor"));
00180     bud->setDBvalue("idalmacen", DBvalue("idalmacen"));
00181 
00183     SDBRecord *linea;
00184     SDBRecord *linea2;
00185     for (int i = 0; i < m_listalineas->rowCount(); i++) {
00186         linea = m_listalineas->lineaat(i);
00187         if (linea->DBvalue("idarticulo") != "") {
00188             linea2 = bud->getlistalineas()->lineaat(bud->getlistalineas()->rowCount() - 1);
00189             bud->getlistalineas()->nuevoRegistro();
00190             bud->getlistalineas()->setProcesarCambios(FALSE);
00191             linea2->setDBvalue("desclalbaranp", linea->DBvalue("desclpedidoproveedor"));
00192             linea2->setDBvalue("cantlalbaranp", linea->DBvalue("cantlpedidoproveedor"));
00193             linea2->setDBvalue("pvplalbaranp", linea->DBvalue("pvplpedidoproveedor"));
00194             linea2->setDBvalue("descuentolalbaranp", linea->DBvalue("descuentolpedidoproveedor"));
00195             linea2->setDBvalue("idarticulo", linea->DBvalue("idarticulo"));
00196             linea2->setDBvalue("codigocompletoarticulo", linea->DBvalue("codigocompletoarticulo"));
00197             linea2->setDBvalue("nomarticulo", linea->DBvalue("nomarticulo"));
00198             linea2->setDBvalue("ivalalbaranp", linea->DBvalue("ivalpedidoproveedor"));
00199             bud->getlistalineas()->setProcesarCambios(TRUE);
00200         } // end if
00201     } // end for
00202 
00204     SDBRecord *linea1;
00205     SDBRecord *linea3;
00206     for (int i = 0; i < m_listadescuentos->rowCount(); i++) {
00207         linea1 = m_listadescuentos->lineaat(i);
00208         if (linea1->DBvalue("proporciondpedidoproveedor") != "") {
00209             linea3 = bud->getlistadescuentos()->lineaat(bud->getlistadescuentos()->rowCount() - 1);
00210             linea3->setDBvalue("conceptdalbaranp", linea1->DBvalue("conceptdpedidoproveedor"));
00211             linea3->setDBvalue("proporciondalbaranp", linea1->DBvalue("proporciondpedidoproveedor"));
00212             bud->getlistadescuentos()->nuevoRegistro();
00213         } // end if
00214     } // end for
00215 
00216     bud->pintar();
00217     bud->show();
00218     _depura("END PedidoProveedorView::generarAlbaran", 0);
00219 }
00220 
00221 
00223 
00226 void PedidoProveedorView::on_mui_proveedor_valueChanged(QString id) {
00227     _depura("PedidoProveedorView::on_m_proveedor_valueChanged", 0);
00228     mui_lineasDetalle->setColumnValue("idproveedor", id);
00229     mui_idforma_pago->setIdProveedor(id);
00230     _depura("END PedidoProveedorView::on_m_proveedor_valueChanged", 0);
00231 }
00232 
00233 
00235 
00237 void PedidoProveedorView::on_mui_facturar_clicked() {
00238     generarAlbaran();
00239 }
00240 
00241 
00243 
00245 void PedidoProveedorView::on_mui_descuentos_editFinish(int, int) {
00246     calculaypintatotales();
00247 }
00248 
00249 
00251 
00253 void PedidoProveedorView::on_mui_lineasDetalle_editFinish(int, int) {
00254     calculaypintatotales();
00255 }
00256 
00257 
00259 
00262 int PedidoProveedorView::borrarPre() {
00263     _depura("PedidoProveedor::borrarPre", 0);
00264     m_listalineas->borrar();
00265     m_listadescuentos->borrar();
00266     _depura("END PedidoProveedor::borrarPre", 0);
00267     return 0;
00268 }
00269 
00270 
00272 
00276 int PedidoProveedorView::cargarPost(QString idbudget) {
00277     _depura("PedidoProveedor::cargarPost", 0);
00278 
00279     m_listalineas->cargar(idbudget);
00280     m_listadescuentos->cargar(idbudget);
00281 
00283     g_plugins->lanza("PedidoProveedorView_cargarPost_Post", this);
00284 
00285     calculaypintatotales();
00286 
00287     _depura("END PedidoProveedor::cargar", 0);
00288     return 0;
00289 }
00290 
00291 
00293 
00296 int PedidoProveedorView::guardarPost() {
00297     _depura("PedidoProveedor::guardar", 0);
00298 
00299     m_listalineas->setColumnValue("idpedidoproveedor", DBvalue("idpedidoproveedor"));
00300     m_listadescuentos->setColumnValue("idpedidoproveedor", DBvalue("idpedidoproveedor"));
00301 
00302     m_listalineas->guardar();
00303     m_listadescuentos->guardar();
00304     return 0;
00305 }
00306 
00307 
00309 
00312 void PedidoProveedorView::imprimir() {
00313     _depura("PedidoProveedor::imprimirPedidoProveedor", 0);
00314 
00315     base basesimp;
00316 
00317     QString archivo = confpr->valor(CONF_DIR_OPENREPORTS) + "pedidoproveedor.rml";
00318     QString archivod = confpr->valor(CONF_DIR_USER) + "pedidoproveedor.rml";
00319     QString archivologo = confpr->valor(CONF_DIR_OPENREPORTS) + "logo.jpg";
00320 
00322 #ifdef WINDOWS
00323 
00324     archivo = "copy " + archivo + " " + archivod;
00325 #else
00326 
00327     archivo = "cp " + archivo + " " + archivod;
00328 #endif
00329 
00330     system (archivo.toAscii().constData());
00331 
00333 #ifdef WINDOWS
00334 
00335     archivologo = "copy " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00336 #else
00337 
00338     archivologo = "cp " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00339 #endif
00340 
00341     system(archivologo.toAscii().constData());
00342 
00343     QFile file;
00344     file.setFileName(archivod);
00345     file.open(QIODevice::ReadOnly);
00346     QTextStream stream(&file);
00347     QString buff = stream.readAll();
00348     file.close();
00349     QString fitxersortidatxt = "";
00350 
00352     QString SQLQuery = "SELECT * FROM proveedor WHERE idproveedor = " + DBvalue("idproveedor");
00353     cursor2 *cur = empresaBase()->cargacursor(SQLQuery);
00354     if (!cur->eof()) {
00355         buff.replace("[dirproveedor]", cur->valor("dirproveedor"));
00356         buff.replace("[poblproveedor]", cur->valor("poblproveedor"));
00357         buff.replace("[telproveedor]", cur->valor("telproveedor"));
00358         buff.replace("[nomproveedor]", cur->valor("nomproveedor"));
00359         buff.replace("[cifproveedor]", cur->valor("cifproveedor"));
00360         buff.replace("[idproveedor]", cur->valor("idproveedor"));
00361         buff.replace("[cpproveedor]", cur->valor("cpproveedor"));
00362     } // end if
00363     delete cur;
00364 
00365     buff.replace("[numpedidoproveedor]", DBvalue("numpedidoproveedor"));
00366     buff.replace("[fechapedidoproveedor]", DBvalue("fechapedidoproveedor"));
00367     buff.replace("[contactpedidoproveedor]", DBvalue("contactpedidoproveedor"));
00368     buff.replace("[telpedidoproveedor]", DBvalue("telpedidoproveedor"));
00369     buff.replace("[comentpedidoproveedor]", DBvalue("comentpedidoproveedor"));
00370     buff.replace("[descpedidoproveedor]", DBvalue("descpedidoproveedor"));
00371     buff.replace("[refpedidoproveedor]", DBvalue("refpedidoproveedor"));
00372 
00374     QString l;
00375 
00376     SDBRecord *linea;
00377     for (int i = 0; i < m_listalineas->rowCount() - 1; ++i) {
00378         linea = m_listalineas->lineaat(i);
00379         Fixed base = Fixed(linea->DBvalue("cantlpedidoproveedor").toAscii().constData()) * Fixed(linea->DBvalue("pvplpedidoproveedor").toAscii().constData());
00380         basesimp[linea->DBvalue("ivalpedidoproveedor")] = basesimp[linea->DBvalue("ivalpedidoproveedor")] + base - base * Fixed(linea->DBvalue("descuentolpedidoproveedor").toAscii().constData()) / 100;
00381         fitxersortidatxt += "<tr>\n";
00382         fitxersortidatxt += "   <td>" + linea->DBvalue("codigocompletoarticulo") + "</td>\n";
00383         fitxersortidatxt += "   <td><para>" + XMLProtect(linea->DBvalue("desclpedidoproveedor")) + "</para></td>\n";
00384         fitxersortidatxt += "   <td>" + l.sprintf("%s", linea->DBvalue("cantlpedidoproveedor").toAscii().constData())+"</td>\n";
00385         fitxersortidatxt += "   <td>" + l.sprintf("%s", linea->DBvalue("pvplpedidoproveedor").toAscii().constData())+"</td>\n";
00386         fitxersortidatxt += "   <td>" + l.sprintf("%s", linea->DBvalue("descuentolpedidoproveedor").toAscii().constData()) + " %</td>\n";
00387         fitxersortidatxt += "   <td>" + l.sprintf("%s", (base - base * Fixed (linea->DBvalue("descuentolpedidoproveedor")) / 100).toQString().toAscii().constData()) + "</td>\n";
00388         fitxersortidatxt += "</tr>";
00389     } // end for
00390 
00391 
00392     buff.replace("[story]", fitxersortidatxt);
00393 
00394     Fixed basei("0.00");
00395     base::Iterator it;
00396     for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00397         basei = basei + it.value();
00398     } // end for
00399 
00401     fitxersortidatxt = "";
00402     Fixed porcentt("0.00");
00403     SDBRecord *linea1;
00404     if (m_listadescuentos->rowCount() - 1) {
00405         fitxersortidatxt += "<blockTable style=\"tabladescuento\" colWidths=\"12cm, 2cm, 3cm\" repeatRows=\"1\">\n";
00406         fitxersortidatxt += "<tr>\n";
00407         fitxersortidatxt += "        <td>" + QApplication::translate("PedidoCliente", "Descuento") + "</td>\n";
00408         fitxersortidatxt += "        <td>" + QApplication::translate("PedidoCliente", "Porcentaje") + "</td>\n";
00409         fitxersortidatxt += "        <td>" + QApplication::translate("PedidoCliente", "Total") + "</td>\n";
00410         fitxersortidatxt += "</tr>\n";
00411         for (int i = 0; i < m_listadescuentos->rowCount() - 1; ++i) {
00412             linea1 = m_listadescuentos->lineaat(i);
00413             porcentt = porcentt + Fixed(linea1->DBvalue("proporciondpedidoproveedor").toAscii().constData());
00414             fitxersortidatxt += "<tr>\n";
00415             fitxersortidatxt += "        <td>" + linea1->DBvalue("conceptdpedidoproveedor") + "</td>\n";
00416             fitxersortidatxt += "        <td>" + l.sprintf("%s", linea1->DBvalue("proporciondpedidoproveedor").toAscii().constData()) + " %</td>\n";
00417             fitxersortidatxt += "        <td>" + l.sprintf("-%s", (Fixed(linea1->DBvalue("proporciondpedidoproveedor")) * basei / 100).toQString().toAscii().constData()) + "</td>\n";
00418             fitxersortidatxt += "</tr>";
00419         } // end for
00420         fitxersortidatxt += "</blockTable>\n";
00421     } // end if
00422     buff.replace("[descuentos]", fitxersortidatxt);
00423 
00425     fitxersortidatxt = "";
00426     QString tr1 = ""; 
00427     QString tr2 = ""; 
00428     fitxersortidatxt += "<blockTable style=\"tablatotales\">\n";
00429 
00430     Fixed totbaseimp("0.00");
00431     Fixed parbaseimp("0.00");
00432     for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00433         if (porcentt > 0) {
00434             parbaseimp = it.value() - it.value() * porcentt / 100;
00435         } else {
00436             parbaseimp = it.value();
00437         } // end if
00438         totbaseimp = totbaseimp + parbaseimp;
00439         tr1 += "        <td>" + QApplication::translate("PedidoCliente", "Base ") + it.key() + " %</td>\n";
00440         tr2 += "        <td>" + l.sprintf("%s", parbaseimp.toQString().toAscii().constData()) + "</td>\n";
00441     } // end for
00442 
00443     Fixed totiva("0.0");
00444     Fixed pariva("0.0");
00445     for (it = basesimp.begin(); it != basesimp.end(); ++it) {
00446         if (porcentt > 0) {
00447             pariva = (it.value() - it.value() * porcentt / 100) * Fixed(it.key()) / 100;
00448         } else {
00449             pariva = it.value() * Fixed(it.key()) / 100;
00450         } // end if
00451         totiva = totiva + pariva;
00452         tr1 += "        <td>" + QApplication::translate("PedidoCliente", "Iva ") + it.key() + " %</td>\n";
00453         tr2 += "        <td>" + l.sprintf("%s", pariva.toQString().toAscii().constData()) + "</td>\n";
00454     } // end for
00455     tr1 += "        <td>" + QApplication::translate("PedidoCliente", "Total ") + " </td>\n";
00456     tr2 += "        <td>" + l.sprintf("%s", (totiva + totbaseimp).toQString().toAscii().constData()) + "</td>\n";
00457     fitxersortidatxt += "<tr>" + tr1 + "</tr><tr>" + tr2 + "</tr></blockTable>\n";
00458     buff.replace("[totales]", fitxersortidatxt);
00459 
00460     if (file.open(QIODevice::WriteOnly)) {
00461         QTextStream stream(&file);
00462         stream << buff;
00463         file.close();
00464     }
00465 
00466     invocaPDF("pedidoproveedor");
00467     _depura("PedidoProveedor::imprimirPedidoProveedor", 0);
00468 }
00469 
00470 

Generated on Sat Dec 15 00:01:14 2007 for BulmaGes by  doxygen 1.5.1