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 "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 }
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 }
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 }
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 }
00201 }
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 }
00214 }
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 }
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 }
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 }
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 }
00420 fitxersortidatxt += "</blockTable>\n";
00421 }
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 }
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 }
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 }
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 }
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