Billing program for the appliance repair company Seoane.
1#include "MainWindow.h"
2#include "../Negocio/Factura.h"
3#include "NuevoClienteDialog.h"
4#include "NuevoArticuloDialog.h"
5#include "NuevaFacturaDialog.h"
6#include "NuevoPresupuestoDialog.h"
7#include "ListarClientes.h"
8#include "BuscarFacturaDialog.h"
9#include "CambiarIvaDialog.h"
10#include <QtGui>
11#include "ListarFacturas.h"
12#include "ListarPresupuestos.h"
13#include "ListarArticulos.h"
14#include <list>
15#include <iostream>
16#include <QThread>
17#include "BuscarClienteDialog.h"
18#include "BuscarArticuloDialog.h"
19#include "BuscarPresupuestoDialog.h"
20#include "ConfigurarImpresora.h"
21#include <QTextDocument>
22#include "VisorAyuda.h"
23#include "imprimirsobrecliente.h"
24
25using namespace std;
26/*
27template<class A, class B> class Conversion {
28 typedef char S_True;
29 class S_False {char dummy[2];}
30 static A CrearInstancia();
31 static S_True Test(B);static S_False Test(�);
32public:
33 enum {
34 existe = ( sizeof(Test(CrearInstancia())) == sizeof(S_True) )
35 };
36};
37*/
38void MainThread::setPadre(QWorkspace* parent) {
39 mw = parent;
40}
41void MainThread::run() {
42 while (true) {
43 usleep(500000);
44 /**
45 * Actualizador de listados abiertos.
46 */
47 QWidgetList windows = mw->windowList();
48 if (windows.isEmpty()) continue;
49
50 for (int i = 0; i < windows.size(); ++i) {
51 QWidget * child = windows.at(i);
52 ListarArticulos *la = dynamic_cast<ListarArticulos *>( child );
53 if (la != 0) {
54 /*El hijo es de tipo Listar Articulos. */
55 la->actualizar();
56 }
57 ListarFacturas *lf = dynamic_cast<ListarFacturas *>( child );
58 if (lf != 0) {
59 /*El hijo es de tipo Listar Facturas. */
60 lf->actualizar();
61 }
62 ListarPresupuestos *lp = dynamic_cast<ListarPresupuestos *>(child);
63 if (lp != 0) {
64 /*El hijo es de tipo Listar Presupuestos. */
65 lp->actualizar();
66 }
67 ListarClientes *lc = dynamic_cast<ListarClientes *>(child);
68 if (lc != 0) {
69 /*El hijo es de tipo Listar Clientes*/
70 lc->actualizar();
71 }
72 }
73 }
74}
75
76
77MainWindow::MainWindow(CapaNegocio * const cn, QMainWindow *parent) : QMainWindow(parent)
78{
79 workspace = new QWorkspace;
80
81 setWindowIcon(QIcon("Gui/images/icono.ico"));
82 workspace->setBackground(QBrush(QImage("Gui/images/textura.png")));
83 setCentralWidget(workspace);
84
85 capaNegocio = cn;
86
87 windowMapper = new QSignalMapper(this);
88 connect(windowMapper, SIGNAL(mapped(QWidget *)), workspace, SLOT(setActiveWindow(QWidget *)));
89
90 connect(workspace, SIGNAL(windowActivated(QWidget *)), this, SLOT(updateMenus()));
91
92 createActions();
93 createMenus();
94 createToolBar();
95 createStatusBar();
96
97 actualizador = new MainThread();
98 actualizador->setPadre(workspace);
99 actualizador->start();
100
101 setWindowTitle(tr("Seoane"));
102}
103
104MainWindow::~MainWindow()
105{
106 actualizador->quit();
107}
108//Acciones del menu facturas
109void MainWindow::listarFacturas() {
110 ListarFacturas *lf = new ListarFacturas(capaNegocio, workspace);
111 workspace->addWindow(lf);
112 lf->show();
113 statusBar()->showMessage(tr("Total Facturas: %1").arg(capaNegocio->getTotalFacturas()));
114}
115void MainWindow::nuevaFactura() {
116 NuevaFacturaDialog *nfd = new NuevaFacturaDialog(capaNegocio, workspace);
117 workspace->addWindow(nfd);
118 nfd->show();
119 statusBar()->showMessage(tr("Nueva factura."));
120}
121
122void MainWindow::buscarFactura() {
123 BuscarFacturaDialog *bfd = new BuscarFacturaDialog(capaNegocio, workspace);
124 workspace->addWindow(bfd);
125 bfd->show();
126}
127
128//Acciones del menu presupuestos
129void MainWindow::listarPresupuestos() {
130 ListarPresupuestos *lp = new ListarPresupuestos(capaNegocio, workspace);
131 workspace->addWindow(lp);
132 lp->show();
133 statusBar()->showMessage(tr("Total Presupuestos: %1").arg(capaNegocio->getTotalPresupuestos()));
134}
135
136
137void MainWindow::buscarPresupuestos() {
138 BuscarPresupuestoDialog *bfd = new BuscarPresupuestoDialog(capaNegocio, workspace);
139 workspace->addWindow(bfd);
140 bfd->show();
141}
142
143
144void MainWindow::nuevoPresupuestos() {
145 NuevoPresupuestoDialog *nfd = new NuevoPresupuestoDialog(capaNegocio, workspace);
146 workspace->addWindow(nfd);
147 nfd->show();
148 statusBar()->showMessage(tr("Nuevo presupuesto."));
149}
150
151
152//Acciones del menu articulos
153void MainWindow::altaArticulos() {
154 NuevoArticuloDialog *aad = new NuevoArticuloDialog(capaNegocio,workspace);
155 workspace->addWindow(aad);
156 aad->show();
157}
158
159void MainWindow::buscarArticulos() {
160 BuscarArticuloDialog* bcd = new BuscarArticuloDialog(capaNegocio,workspace);
161 workspace->addWindow(bcd);
162 bcd->show();
163}
164
165void MainWindow::listarArticulos() {
166 ListarArticulos *la = new ListarArticulos(capaNegocio, workspace);
167 workspace->addWindow(la);
168 la->show();
169 statusBar()->showMessage(tr("Total Articulos: %1").arg(capaNegocio->getTotalArticulos()));
170}
171
172//Acciones del menu clientes
173void MainWindow::nuevoCliente(){
174 NuevoClienteDialog *ncd = new NuevoClienteDialog(capaNegocio,workspace);
175 workspace->addWindow(ncd);
176 ncd->show();
177}
178void MainWindow::buscarCliente(){
179 BuscarClienteDialog* bcd = new BuscarClienteDialog(capaNegocio,workspace);
180 workspace->addWindow(bcd);
181 bcd->show();
182}
183void MainWindow::listarCliente(){
184 ListarClientes *lc = new ListarClientes(capaNegocio, workspace);
185 workspace->addWindow(lc);
186 lc->show();
187 statusBar()->showMessage(tr("Total Clientes: %1").arg(capaNegocio->getTotalClientes()));
188}
189
190void MainWindow::imprimirClientes(){
191 ImprimirSobreCliente *isc = new ImprimirSobreCliente(workspace, capaNegocio );
192 workspace->addWindow(isc);
193 isc->show();
194 statusBar()->showMessage(tr("Imprimir Sobre Clientes: "));
195}
196
197//Acciones del menu ayuda
198void MainWindow::acercaDeAyuda() {
199 QMessageBox::about(this, tr("Acerca de Seoane Facturaci�n"),
200 tr("<h2>Seoane v1.0.4-beta</h2>"
201 "<p>Copyright © 2007 Maite Simon & Marcos Gabarda</p>"
202 "<h5><i>Programa bajo licencia GPL 3.0</i></h5>"));
203}
204void MainWindow::ayudaAyuda() {
205 VisorAyuda *va = new VisorAyuda(this);
206 workspace->addWindow(va);
207 va->show();
208}
209void MainWindow::cambiarIva() {
210 CambiarIvaDialog *civa = new CambiarIvaDialog(capaNegocio, this);
211 workspace->addWindow(civa);
212 civa->show();
213}
214
215void MainWindow::configurarImpresora() {
216 ConfigurarImpresora *ci = new ConfigurarImpresora(this);
217 workspace->addWindow(ci);
218 ci->show();
219}
220
221void MainWindow::createActions() {
222
223 //menu facturas
224 listarFacturasAction = new QAction(tr("&Listar"), this);
225 listarFacturasAction->setIcon(QIcon(QString::fromUtf8("Gui/images/LFactura.PNG")));
226 connect(listarFacturasAction, SIGNAL(triggered()), this, SLOT(listarFacturas()));
227
228 nuevaFacturaAction = new QAction(tr("&Nueva"), this);
229 nuevaFacturaAction->setIcon(QIcon(QString::fromUtf8("Gui/images/NFactura.PNG")));
230 connect(nuevaFacturaAction, SIGNAL(triggered()), this, SLOT(nuevaFactura()));
231
232 buscarFacturaAction = new QAction(tr("&Buscar"), this);
233 buscarFacturaAction->setIcon(QIcon(QString::fromUtf8("Gui/images/BFactura.PNG")));
234 connect(buscarFacturaAction, SIGNAL(triggered()), this, SLOT(buscarFactura()));
235
236
237 //menu presupuestos
238 listarPresupuestosAction = new QAction(tr("&Listar"), this);
239 listarPresupuestosAction->setIcon(QIcon(QString::fromUtf8("Gui/images/LPresupuesto.PNG")));
240 connect(listarPresupuestosAction, SIGNAL(triggered()), this, SLOT(listarPresupuestos()));
241
242 nuevoPresupuestosAction = new QAction(tr("&Nuevo"), this);
243 nuevoPresupuestosAction->setIcon(QIcon(QString::fromUtf8("Gui/images/NPresupuesto.PNG")));
244 connect(nuevoPresupuestosAction, SIGNAL(triggered()), this, SLOT(nuevoPresupuestos()));
245
246 buscarPresupuestosAction = new QAction(tr("&Buscar"), this);
247 buscarPresupuestosAction->setIcon(QIcon(QString::fromUtf8("Gui/images/BPresupuesto.PNG")));
248 connect(buscarPresupuestosAction, SIGNAL(triggered()), this, SLOT(buscarPresupuestos()));
249
250 //menu articulos
251
252 altaArticulosAction = new QAction(tr("&Alta"), this);
253 altaArticulosAction->setIcon(QIcon(QString::fromUtf8("Gui/images/NArticulo.PNG")));
254 connect(altaArticulosAction, SIGNAL(triggered()), this, SLOT(altaArticulos()));
255
256 buscarArticulosAction = new QAction(tr("&Buscar"), this);
257 buscarArticulosAction->setIcon(QIcon(QString::fromUtf8("Gui/images/BArticulo.PNG")));
258 connect(buscarArticulosAction, SIGNAL(triggered()), this, SLOT(buscarArticulos()));
259
260 listarArticulosAction = new QAction(tr("&Listar"), this);
261 listarArticulosAction->setIcon(QIcon(QString::fromUtf8("Gui/images/LArticulo.PNG")));
262 connect(listarArticulosAction, SIGNAL(triggered()), this, SLOT(listarArticulos()));
263
264 //menu clientes
265 nuevoClienteAction = new QAction(tr("&Nuevo"), this);
266 nuevoClienteAction->setIcon(QIcon(QString::fromUtf8("Gui/images/NCliente.png")));
267 connect(nuevoClienteAction, SIGNAL(triggered()), this, SLOT(nuevoCliente()));
268
269 buscarClienteAction = new QAction(tr("&Buscar"), this);
270 buscarClienteAction->setIcon(QIcon(QString::fromUtf8("Gui/images/BCliente.png")));
271 connect(buscarClienteAction, SIGNAL(triggered()), this, SLOT(buscarCliente()));
272
273 listarClienteAction = new QAction(tr("&Listar"), this);
274 listarClienteAction->setIcon(QIcon(QString::fromUtf8("Gui/images/LCliente.png")));
275 connect(listarClienteAction, SIGNAL(triggered()), this, SLOT(listarCliente()));
276
277 imprimirClienteAction = new QAction(tr("&Imprimir"), this);
278 imprimirClienteAction->setIcon(QIcon(QString::fromUtf8("Gui/images/LCliente.png")));
279 connect(imprimirClienteAction, SIGNAL(triggered()), this, SLOT(imprimirClientes()));
280
281 //menu ayuda
282 acercaDeAyudaAction = new QAction(tr("&Acera de"), this);
283 connect(acercaDeAyudaAction, SIGNAL(triggered()), this, SLOT(acercaDeAyuda()));
284
285 ayudaAyudaAction = new QAction(tr("&Ayuda"), this);
286 connect(ayudaAyudaAction, SIGNAL(triggered()), this, SLOT(ayudaAyuda()));
287
288 //Menu ventanas
289 closeAction = new QAction(tr("&Cerrar"), this);
290 closeAction->setShortcut(tr("Ctrl+F4"));
291 closeAction->setStatusTip(tr("Cierra la ventana activa."));
292 connect(closeAction, SIGNAL(triggered()), workspace, SLOT(closeActiveWindow()));
293
294 closeAllAction = new QAction(tr("Cerrar &Todo"), this);
295 closeAllAction->setStatusTip(tr("Cierra todas las ventanas."));
296 connect(closeAllAction, SIGNAL(triggered()), workspace, SLOT(closeAllWindows()));
297
298 tileAction = new QAction(tr("&Tile"), this);
299 tileAction->setStatusTip(tr("Organiza las ventanas por valdosas."));
300 connect(tileAction, SIGNAL(triggered()), workspace, SLOT(tile()));
301
302 cascadeAction = new QAction(tr("&Cascada"), this);
303 cascadeAction->setStatusTip(tr("Organiza las ventanas en cascada."));
304 connect(cascadeAction, SIGNAL(triggered()), workspace, SLOT(cascade()));
305
306 nextAction = new QAction(tr("&Siguiente"), this);
307 nextAction->setStatusTip(tr("Se mueve a la siguiente ventana."));
308 connect(nextAction, SIGNAL(triggered()), workspace, SLOT(activateNextWindow()));
309
310 previousAction = new QAction(tr("&Anterior"), this);
311 previousAction->setStatusTip(tr("Se mueve a la ventana anterior."));
312 connect(previousAction, SIGNAL(triggered()), workspace, SLOT(activatePreviousWindow()));
313
314 cambiarIvaAction = new QAction(tr("Cambiar IVA"), this);
315 connect(cambiarIvaAction, SIGNAL(triggered()), this, SLOT(cambiarIva()));
316
317 //configurarImpresoraAction = new QAction(tr("Configurar Impresora"), this);
318 //connect(configurarImpresoraAction, SIGNAL(triggered()), this, SLOT(configurarImpresora()));
319
320}
321
322void MainWindow::createMenus() {
323 facturasMenu = menuBar()->addMenu(tr("&Facturas"));
324 presupuestosMenu = menuBar()->addMenu(tr("&Presupuestos"));
325 articulosMenu=menuBar()->addMenu(tr("&Articulos"));
326 clientesMenu=menuBar()->addMenu(tr("&Clientes"));
327 windowMenu=menuBar()->addMenu(tr("&Ventanas"));
328 configMenu=menuBar()->addMenu(tr("Con&figuracion"));
329 ayudaMenu=menuBar()->addMenu(tr("&Ayuda"));
330
331 //crea el menu facturas
332 facturasMenu->addAction(listarFacturasAction);
333 facturasMenu->addAction(nuevaFacturaAction);
334 facturasMenu->addAction(buscarFacturaAction);
335
336 //crea menu presupuestos
337 presupuestosMenu->addAction(listarPresupuestosAction);
338 presupuestosMenu->addAction(nuevoPresupuestosAction);
339 presupuestosMenu->addAction(buscarPresupuestosAction);
340
341 //crea el menu articulo
342 articulosMenu->addAction(altaArticulosAction);
343 articulosMenu->addAction(buscarArticulosAction);
344 articulosMenu->addAction(listarArticulosAction);
345
346 //Crea el menu clientes
347 clientesMenu->addAction(nuevoClienteAction);
348 clientesMenu->addAction(buscarClienteAction);
349 clientesMenu->addAction(listarClienteAction);
350 clientesMenu->addAction(imprimirClienteAction);
351
352 //crea el menu ayuda
353 ayudaMenu->addAction(acercaDeAyudaAction);
354 ayudaMenu->addAction(ayudaAyudaAction);
355
356 //crea el menu vantanas
357 windowMenu->addAction(closeAction);
358 windowMenu->addAction(closeAllAction);
359 windowMenu->addSeparator();
360 windowMenu->addAction(tileAction);
361 windowMenu->addAction(cascadeAction);
362 windowMenu->addSeparator();
363 windowMenu->addAction(nextAction);
364 windowMenu->addAction(previousAction);
365
366 configMenu->addAction(cambiarIvaAction);
367 //configMenu->addAction(configurarImpresoraAction);
368
369}
370
371void MainWindow::createToolBar() {
372
373 facturaToolBar = addToolBar(tr("Facturas"));
374 facturaToolBar->addAction(nuevaFacturaAction);
375 facturaToolBar->addAction(buscarFacturaAction);
376 facturaToolBar->addAction(listarFacturasAction);
377
378 presupuestoToolBar = addToolBar(tr("Presupuestos"));
379 presupuestoToolBar->addAction(nuevoPresupuestosAction);
380 presupuestoToolBar->addAction(buscarPresupuestosAction);
381 presupuestoToolBar->addAction(listarPresupuestosAction);
382
383 clienteToolBar = addToolBar(tr("Clientes"));
384 clienteToolBar->addAction(nuevoClienteAction);
385 clienteToolBar->addAction(buscarClienteAction);
386 clienteToolBar->addAction(listarClienteAction);
387
388 articuloToolBar = addToolBar(tr("Articulos"));
389 articuloToolBar->addAction(altaArticulosAction);
390 articuloToolBar->addAction(buscarArticulosAction);
391 articuloToolBar->addAction(listarArticulosAction);
392
393}
394
395void MainWindow::updateMenus() {
396
397 windowMenu->clear();
398 windowMenu->addAction(closeAction);
399 windowMenu->addAction(closeAllAction);
400 windowMenu->addSeparator();
401 windowMenu->addAction(tileAction);
402 windowMenu->addAction(cascadeAction);
403 windowMenu->addSeparator();
404 windowMenu->addAction(nextAction);
405 windowMenu->addAction(previousAction);
406
407 QWidgetList windows = workspace->windowList();
408
409 if (!windows.isEmpty()) windowMenu->addSeparator();
410
411 for (int i = 0; i < windows.size(); ++i) {
412 QWidget *child = windows.at(i);
413 QString text;
414 if (i < 9) {
415 text = tr("&%1 %2").arg(i + 1).arg(child->windowTitle());
416 } else {
417 text = tr("%1 %2").arg(i + 1).arg(child->windowTitle());
418 }
419 QAction *action = windowMenu->addAction(text);
420 action->setCheckable(true);
421 action->setChecked(child == workspace->activeWindow());
422 connect(action, SIGNAL(triggered()), windowMapper, SLOT(map()));
423 windowMapper->setMapping(action, windows.at(i));
424 }
425}
426void MainWindow::createStatusBar()
427{
428 statusBar()->showMessage(tr("Listo"));
429}