00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <QMessageBox>
00022 #include <QWidget>
00023 #include <QObject>
00024 #include <QComboBox>
00025 #include <QToolButton>
00026 #include <QFile>
00027 #include <QTextStream>
00028 #include <QLayout>
00029 #include <QMessageBox>
00030 #include <QCloseEvent>
00031
00032 #include "funcaux.h"
00033 #include "listlinpresupuestoview.h"
00034 #include "presupuestoview.h"
00035 #include "company.h"
00036 #include "clientslist.h"
00037 #include "articulolist.h"
00038 #include "configuracion.h"
00039 #include "pedidoclienteview.h"
00040 #include "albaranclienteview.h"
00041 #include "busquedacliente.h"
00042 #include "busquedaformapago.h"
00043 #include "informereferencia.h"
00044 #include "plugins.h"
00045
00046
00048
00053 PresupuestoView::PresupuestoView(Company *comp, QWidget *parent)
00054 : FichaBf(comp, parent) {
00055 _depura("Inicializacion de PresupuestoView", 0);
00056 setAttribute(Qt::WA_DeleteOnClose);
00057 try {
00058 setupUi(this);
00059
00060 setTitleName(tr("Presupuesto"));
00061 setDBTableName("presupuesto");
00062 setDBCampoId("idpresupuesto");
00063 addDBCampo("idpresupuesto", DBCampo::DBint, DBCampo::DBPrimaryKey, QApplication::translate("Presupuesto", "ID presupuesto"));
00064 addDBCampo("idcliente", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate("Presupuesto", "ID cliente"));
00065 addDBCampo("idalmacen", DBCampo::DBint, DBCampo::DBNotNull, QApplication::translate("Presupuesto", "ID almacen"));
00066 addDBCampo("numpresupuesto", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Numero de presupuesto"));
00067 addDBCampo("fpresupuesto", DBCampo::DBdate, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Fecha de creacion"));
00068 addDBCampo("vencpresupuesto", DBCampo::DBdate, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Fecha de vencimiento"));
00069 addDBCampo("contactpresupuesto", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Persona de contacto"));
00070 addDBCampo("telpresupuesto", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Numero de telefono"));
00071 addDBCampo("comentpresupuesto", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Comentarios"));
00072 addDBCampo("procesadopresupuesto", DBCampo::DBboolean, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Presupuesto procesado"));
00073 addDBCampo("descpresupuesto", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("Presupuesto", "% Descuento"));
00074 addDBCampo("refpresupuesto", DBCampo::DBvarchar, DBCampo::DBNothing, QApplication::translate("Presupuesto", "Referencia"));
00075 addDBCampo("idforma_pago", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("Presupuesto", "ID forma de pago"));
00076 addDBCampo("idtrabajador", DBCampo::DBint, DBCampo::DBNothing, QApplication::translate("Presupuesto", "ID trabajador"));
00077
00079 int res = g_plugins->lanza("PresupuestoView_PresupuestoView", this);
00080 if (res != 0) {
00081 return;
00082 }
00083
00085 subform2->setEmpresaBase(comp);
00086 m_descuentos->setEmpresaBase(comp);
00087 mui_idcliente->setEmpresaBase(comp);
00088 mui_idforma_pago->setEmpresaBase(comp);
00089 mui_idalmacen->setEmpresaBase(comp);
00090 mui_idtrabajador->setEmpresaBase(comp);
00091 mui_refpresupuesto->setEmpresaBase(comp);
00092
00093 setListaLineas(subform2);
00094 setListaDescuentos(m_descuentos);
00095
00096 m_totalBases->setReadOnly(TRUE);
00097 m_totalBases->setAlignment(Qt::AlignRight);
00098 m_totalTaxes->setReadOnly(TRUE);
00099 m_totalTaxes->setAlignment(Qt::AlignRight);
00100 m_totalDiscounts->setReadOnly(TRUE);
00101 m_totalDiscounts->setAlignment(Qt::AlignRight);
00102 m_totalPresupuestoCliente->setReadOnly(TRUE);
00103 m_totalPresupuestoCliente->setAlignment(Qt::AlignRight);
00104
00106 mui_idforma_pago->setValorCampo("0");
00107 mui_idalmacen->setValorCampo("0");
00108 mui_idtrabajador->setValorCampo("0");
00109
00110 meteWindow(windowTitle(), this, FALSE);
00112 g_plugins->lanza("PresupuestoView_PresupuestoView_Post", this);
00113 } catch (...) {
00114 mensajeInfo(tr("Error al crear el presupuesto"));
00115 }
00116 _depura("Fin de la inicializacion de PresupuestoView", 0);
00117 }
00118
00119
00121
00123 void PresupuestoView::inicializar() {
00124 _depura("PresupuestoView::inicializar", 0);
00125 subform2->inicializar();
00126 m_descuentos->inicializar();
00127 dialogChanges_cargaInicial();
00128 _depura("END PresupuestoView::inicializar", 0);
00129 }
00130
00131
00133
00135 PresupuestoView::~PresupuestoView() {
00136 _depura("PresupuestoView::~PresupuestoView", 0);
00137 ((Company *)empresaBase())->refreshPresupuestos();
00138
00140 g_plugins->lanza("PresupuestoView_DesPresupuestoView", this);
00141 _depura("END PresupuestoView::~PresupuestoView", 0);
00142 }
00143
00144
00146
00148 void PresupuestoView::s_pintaTotales() {
00149 _depura("PresupuestoView::s_pintaTotales", 0);
00150 calculaypintatotales();
00151 _depura("END PresupuestoView::s_pintaTotales", 0);
00152 }
00153
00154
00156
00158 void PresupuestoView::on_mui_pasarapedido_clicked() {
00159 _depura("PresupuestoView::on_mui_pasarapedido_clicked", 0);
00160 generarPedidoCliente();
00161 _depura("END PresupuestoView::on_mui_pasarapedido_clicked", 0);
00162 }
00163
00164
00166
00168 void PresupuestoView::on_m_descuentos_editFinish(int, int) {
00169 _depura("PresupuestoView::on_m_descuentos_editFinish", 0);
00170 calculaypintatotales();
00171 _depura("END PresupuestoView::on_m_descuentos_editFinish", 0);
00172 }
00173
00175
00177 void PresupuestoView::on_subform2_editFinish(int, int) {
00178 _depura("PresupuestoView::on_subform2_editFinish", 0);
00179 calculaypintatotales();
00180 _depura("END PresupuestoView::on_subform2_editFinish", 0);
00181 }
00182
00183
00184
00186
00194 void PresupuestoView::pintatotales(Fixed iva, Fixed base, Fixed total, Fixed desc, Fixed irpf, Fixed reqeq) {
00195 _depura("PresupuestoView::pintatotales", 0);
00196 m_totalBases->setText(QString(base.toQString()));
00197 m_totalTaxes->setText(QString(iva.toQString()));
00198 m_totalPresupuestoCliente->setText(QString(total.toQString()));
00199 m_totalDiscounts->setText(QString(desc.toQString()));
00200 m_totalIRPF->setText(QString(irpf.toQString()));
00201 m_totalReqEq->setText(QString(reqeq.toQString()));
00202 _depura("END PresupuestoView::pintatotales", 0);
00203 }
00204
00205
00207
00210 void PresupuestoView::generarPedidoCliente() {
00211 _depura("PresupuestoView::generarPedidoCliente", 0);
00213 QString SQLQuery = "SELECT * FROM pedidocliente WHERE refpedidocliente = '" + DBvalue("refpresupuesto") + "' AND idcliente = "+DBvalue("idcliente");
00214 cursor2 *cur = empresaBase()->cargacursor(SQLQuery);
00215 if (!cur->eof()) {
00216
00217
00220 if (QMessageBox::question(this,
00221 tr("Pedido existente"),
00222 tr("Existe un pedido a este cliente con la misma referencia que este presupuesto. Desea abrirla para verificar?"),
00223 tr("&Si"), tr("&No"), QString::null, 0, 1)) {
00224 return;
00225 }
00226 PedidoClienteView *bud = empresaBase()->newPedidoClienteView();
00227 empresaBase()->m_pWorkspace->addWindow(bud);
00228 bud->cargar(cur->valor("idpedidocliente"));
00229 bud->show();
00230 delete cur;
00231 return;
00232 }
00233 delete cur;
00234
00237
00238
00239
00240
00241
00242
00243
00245 PedidoClienteView *bud = empresaBase()->newPedidoClienteView();
00246 bud->cargar("0");
00247 empresaBase()->m_pWorkspace->addWindow(bud);
00248
00250 recogeValores();
00251 bud->setDBvalue("idcliente", DBvalue("idcliente"));
00252 bud->setDBvalue("comentpedidocliente", DBvalue("comentpresupuesto"));
00253 bud->setDBvalue("descpedidocliente", DBvalue("descpresupuesto"));
00254 bud->setDBvalue("fechapedidocliente", DBvalue("fpresupuesto"));
00255 bud->setDBvalue("idforma_pago", DBvalue("idforma_pago"));
00256 bud->setDBvalue("refpedidocliente", DBvalue("refpresupuesto"));
00257 bud->setDBvalue("procesadopedidocliente", DBvalue("procesadopresupuesto"));
00258 bud->setDBvalue("idalmacen", DBvalue("idalmacen"));
00259 bud->setDBvalue("contactpedidocliente", DBvalue("contactpresupuesto"));
00260 bud->setDBvalue("telpedidocliente", DBvalue("telpresupuesto"));
00261
00263 SDBRecord *linea;
00264 SDBRecord *linea2;
00265
00266
00267 for (int i = 0; i < m_listalineas->rowCount(); i++) {
00268 linea = m_listalineas->lineaat(i);
00269 if (linea->DBvalue("idarticulo") != "") {
00270 linea2 = bud->getlistalineas()->lineaat(bud->getlistalineas()->rowCount() - 1);
00271 bud->getlistalineas()->nuevoRegistro();
00272 bud->getlistalineas()->setProcesarCambios(FALSE);
00273 linea2->setDBvalue("desclpedidocliente", linea->DBvalue("desclpresupuesto"));
00274 linea2->setDBvalue("cantlpedidocliente", linea->DBvalue("cantlpresupuesto"));
00275 linea2->setDBvalue("pvplpedidocliente", linea->DBvalue("pvplpresupuesto"));
00276 linea2->setDBvalue("ivalpedidocliente", linea->DBvalue("ivalpresupuesto"));
00277 linea2->setDBvalue("descuentolpedidocliente", linea->DBvalue("descuentolpresupuesto"));
00278 linea2->setDBvalue("idarticulo", linea->DBvalue("idarticulo"));
00279 linea2->setDBvalue("codigocompletoarticulo", linea->DBvalue("codigocompletoarticulo"));
00280 linea2->setDBvalue("nomarticulo", linea->DBvalue("nomarticulo"));
00281 bud->getlistalineas()->setProcesarCambios(TRUE);
00282 }
00283 }
00284
00285
00286
00288 SDBRecord *linea1;
00289 SDBRecord *linea3;
00290 for (int i = 0; i < m_listadescuentos->rowCount(); i++) {
00291 linea1 = m_listadescuentos->lineaat(i);
00292 if (linea1->DBvalue("proporciondpresupuesto") != "") {
00293 linea3 = bud->getlistadescuentos()->lineaat(bud->getlistadescuentos()->rowCount() - 1);
00294 bud->getlistadescuentos()->setProcesarCambios(FALSE);
00295 linea3->setDBvalue("conceptdpedidocliente", linea1->DBvalue("conceptdpresupuesto"));
00296 linea3->setDBvalue("proporciondpedidocliente", linea1->DBvalue("proporciondpresupuesto"));
00297 bud->getlistadescuentos()->setProcesarCambios(TRUE);
00298 bud->getlistadescuentos()->nuevoRegistro();
00299 }
00300 }
00301
00302
00304 bud->pintar();
00305 bud->show();
00306 _depura("END PresupuestoView::generarPedidoCliente", 0);
00307 }
00308
00309
00311
00314 void PresupuestoView::on_mui_idcliente_valueChanged(QString id) {
00315 _depura("PresupuestoView::on_m_cliente_valueChanged", 0);
00316 subform2->setIdCliente(id);
00317 mui_idforma_pago->setIdCliente(id);
00318 _depura("END PresupuestoView::on_m_cliente_valueChanged", 0);
00319 }
00320
00321
00323
00326 int PresupuestoView::borrarPre() {
00327 _depura("PresupuestoView::borrar", 0);
00329 g_plugins->lanza("Presupuesto_borrarPre", this);
00330 m_listalineas->borrar();
00331 m_listadescuentos->borrar();
00332
00333 _depura("END PresupuestoView::borrar", 0);
00334 return 0;
00335 }
00336
00337
00339
00343 int PresupuestoView::cargarPost(QString idbudget) {
00344 _depura("PresupuestoView::cargarPost", 0);
00345
00346 m_listalineas->cargar(idbudget);
00347 m_listadescuentos->cargar(idbudget);
00348
00349 calculaypintatotales();
00350
00351 _depura("END PresupuestoView::cargar", 0);
00352 return 0;
00353 }
00354
00355
00357
00360 int PresupuestoView::guardarPost() {
00361 _depura("PresupuestoView::guardarPost", 0);
00362
00363 m_listalineas->setColumnValue("idpresupuesto", DBvalue("idpresupuesto"));
00364 m_listadescuentos->setColumnValue("idpresupuesto", DBvalue("idpresupuesto"));
00365
00366 m_listalineas->guardar();
00367 m_listadescuentos->guardar();
00369 g_plugins->lanza("Presupuesto_guardarPost_Post", this);
00370
00371 _depura("END PresupuestoView::guardar", 0);
00372 return 0;
00373 }
00374
00375
00377
00380 QString PresupuestoView::detalleArticulos() {
00381 _depura("PresupuestoView::detalleArticulos", 0);
00382 QString texto = "";
00383 cursor2 *cur = empresaBase()->cargacursor("SELECT * FROM lpresupuesto LEFT JOIN articulo ON lpresupuesto.idarticulo = articulo.idarticulo WHERE presentablearticulo AND idpresupuesto=" + DBvalue("idpresupuesto"));
00384 int i = 0;
00385 while (!cur->eof()) {
00386 i = !i;
00387 if (i) {
00388 texto += "<blockTable style=\"tabladetalle1\" colWidths=\"5cm, 8cm\" rowHeights=\"5.5cm\">\n";
00389 } else {
00390 texto += "<blockTable style=\"tabladetalle2\" colWidths=\"8cm, 5cm\" rowHeights=\"5.5cm\">\n";
00391 }
00392 texto += "<tr>\n";
00393 if (i) {
00394 texto += "<td><h1>" + cur->valor("nomarticulo") + "</h1>";
00395 texto += "<para><pre>" + cur->valor("obserarticulo") + "</pre></para></td>\n";
00396 }
00397 QString file = confpr->valor(CONF_DIR_IMG_ARTICLES) + cur->valor("codigocompletoarticulo") + ".jpg";
00398 QFile f(file);
00399 if (f.exists()) {
00400 texto += " <td><illustration x=\"0\" y=\"0\" height=\"5cm\">\n"
00401 " <image file=\"" + confpr->valor(CONF_DIR_IMG_ARTICLES) + cur->valor("codigocompletoarticulo") + ".jpg\" x=\"0\" y=\"0\" height=\"5cm\"/>\n"
00402 " </illustration></td>\n";
00403 } else {
00404 texto += "<td></td>\n";
00405 }
00406 if (!i) {
00407 texto += "<td><h1>" + cur->valor("nomarticulo") + "</h1>";
00408 texto += "<para><pre>" + cur->valor("obserarticulo") + "</pre></para></td>\n";
00409 }
00410 texto += "</tr>\n";
00411 texto += "</blockTable>";
00412 cur->siguienteregistro();
00413 }
00414 delete cur;
00415 _depura("END PresupuestoView::detalleArticulos", 0);
00416 return texto;
00417 }
00418
00419
00420
00421
00422
00423
00424