Billing program for the appliance repair company Seoane.
1#include "ListarClientes.h"
2#include <list>
3#include "../Negocio/Cliente.h"
4#include "../Negocio/CapaNegocio.h"
5#include "NuevoClienteDialog.h"
6#include <QtGui>
7#include <QString>
8#include <iostream>
9#include <QMutex>
10using namespace std;
11
12ListarClientes::ListarClientes(CapaNegocio * const cn, QWidget *parent, CriterioBusqueda* cb)
13 : QWidget(parent)
14{
15 ui.setupUi(this);
16 setWindowTitle(tr("Listado de Clientes"));
17 setWindowIcon(QIcon(QString::fromUtf8("Gui/images/LCliente.PNG")));
18 ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
19 ui.tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
20
21 ui.pushButton_3->setText(tr("Mostrar"));
22 ui.pushButton_2->setText(tr("Borrar"));
23 ui.pushButton->setText(tr("Cancelar"));
24
25 connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(mostrar()));
26 connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(borrar()));
27 connect(ui.tableWidget, SIGNAL(cellDoubleClicked(int,int)), this, SLOT(mostrar()));
28
29 padre = (QWorkspace *) parent;
30
31 capaNegocio = cn;
32
33 list<Cliente> lista_aux = capaNegocio->getClientes();
34 this->cb = cb;
35
36 if (cb != 0) {
37 if (cb->telefono) {
38 list<pair<int, int> > l = capaNegocio->getListaTelefonos();
39 cout << "Numero de telefonos: " << l.size() << endl;
40 list<Cliente> lc;
41 list<pair<int, int> >::iterator it;
42 for (it = l.begin(); it != l.end();) {
43 if (it->first != *cb->telefono) {
44 it = l.erase(it);
45 } else {
46 it++;
47 }
48 }
49 for (it = l.begin(); it != l.end();it++) {
50 Cliente *c = capaNegocio->getClienteId(it->second);
51 lc.push_back(*c);
52 }
53 lista_aux = lc;
54 }
55 if (cb->nombreCliente) {
56 QRegExp rx((tr("*") + *(cb->nombreCliente)) + "*");
57 rx.setPatternSyntax(QRegExp::Wildcard);
58 rx.setCaseSensitivity(Qt::CaseInsensitive);
59 list<Cliente>::iterator it;
60 for (it = lista_aux.begin(); it != lista_aux.end(); ) {
61 QString nombre(((it->getnombre() + " ") + it->getapellidos()).c_str());
62 if (!rx.exactMatch(nombre)) {
63 it = lista_aux.erase(it);
64 } else {
65 it++;
66 }
67 }
68 }
69 if (cb->codigoCliente){
70 list<Cliente>::iterator it;
71 for (it = lista_aux.begin(); it != lista_aux.end();) {
72 if (it->getcodigo() != *cb->codigoCliente) {
73 it = lista_aux.erase(it);
74 } else {
75 it++;
76 }
77 }
78 }
79 if (cb->direccionCliente) {
80 QRegExp rx((tr("*") + *cb->direccionCliente) + "*");
81 rx.setPatternSyntax(QRegExp::Wildcard);
82 rx.setCaseSensitivity(Qt::CaseInsensitive);
83 list<Cliente>::iterator it;
84 for (it = lista_aux.begin(); it != lista_aux.end();) {
85 QString nombre(it->getdireccion().c_str());
86 if (!rx.exactMatch(nombre)) {
87 it = lista_aux.erase(it);
88 } else {
89 it++;
90 }
91 }
92 }
93 }
94
95 lista = lista_aux;
96
97 int n_elem = lista.size();
98 cout << "[Debug]Numero de clientes: " << n_elem << endl;
99 list<Cliente>::iterator i;
100 i = lista.begin();
101 for (int row = 0; row < n_elem; row++) {
102 addRow();
103 ui.tableWidget->item(row, 0)->setText(QString::number(i->getcodigo()));
104 ui.tableWidget->item(row, 1)->setText(QString::fromStdString(i->getnombre()));
105 ui.tableWidget->item(row, 2)->setText(QString::fromStdString(i->getapellidos()));
106 ui.tableWidget->item(row, 3)->setText(QString::fromStdString(i->getnif()));
107 i++;
108 }
109}
110
111ListarClientes::~ListarClientes()
112{
113
114}
115
116void ListarClientes::addRow(){
117 int row = ui.tableWidget->rowCount();
118 ui.tableWidget->insertRow(row);
119
120 QTableWidgetItem *item0 = new QTableWidgetItem;
121 item0->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
122 ui.tableWidget->setItem(row, 0, item0);
123
124 QTableWidgetItem *item1 = new QTableWidgetItem;
125 item1->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
126 ui.tableWidget->setItem(row, 1, item1);
127
128 QTableWidgetItem *item2 = new QTableWidgetItem;
129 item2->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
130 ui.tableWidget->setItem(row, 2, item2);
131
132 QTableWidgetItem *item3 = new QTableWidgetItem;
133 item3->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter);
134 ui.tableWidget->setItem(row, 3, item3);
135
136}
137
138void ListarClientes::resizeEvent(QResizeEvent *event) {
139 ui.gridLayout->setGeometry(QRect(0, 0, event->size().width(), event->size().height()));
140}
141void ListarClientes::mostrar() {
142 int row = ui.tableWidget->currentRow();
143 int cod;
144
145 if (row == -1) {
146 QString mes = tr("No se selecciono ninguna fila.");
147 QMessageBox::information(this, tr("Atencion"),mes);
148
149 } else {
150 cod = ui.tableWidget->item(row, 0)->text().toInt();
151 QString mes = tr("Ahora se editara el cliente de la fila: %1.").arg(row);
152 //QMessageBox::information(this, tr("Atencion"), mes);
153 QDialog *edit = new NuevoClienteDialog(capaNegocio, this, capaNegocio->getClienteCodigo(cod));
154 padre->addWindow(edit);
155 edit->show();
156 }
157}
158void ListarClientes::actualizar() {
159
160 list<Cliente> lista_aux = capaNegocio->getClientes();
161 if (cb != 0) {
162 if (cb->telefono) {
163 list<pair<int, int> > l = capaNegocio->getListaTelefonos();
164 cout << "Numero de telefonos: " << l.size() << endl;
165 list<Cliente> lc;
166 list<pair<int, int> >::iterator it;
167 for (it = l.begin(); it != l.end();) {
168 if (it->first != *cb->telefono) {
169 it = l.erase(it);
170 } else {
171 it++;
172 }
173 }
174 for (it = l.begin(); it != l.end();it++) {
175 Cliente *c = capaNegocio->getClienteId(it->second);
176 lc.push_back(*c);
177 }
178 lista_aux = lc;
179 }
180 if (cb->nombreCliente) {
181 QRegExp rx((tr("*") + *(cb->nombreCliente)) + "*");
182 rx.setPatternSyntax(QRegExp::Wildcard);
183 rx.setCaseSensitivity(Qt::CaseInsensitive);
184 list<Cliente>::iterator it;
185 for (it = lista_aux.begin(); it != lista_aux.end(); ) {
186 QString nombre(((it->getnombre() + " ") + it->getapellidos()).c_str());
187 if (!rx.exactMatch(nombre)) {
188 it = lista_aux.erase(it);
189 } else {
190 it++;
191 }
192 }
193 }
194 if (cb->codigoCliente){
195 list<Cliente>::iterator it;
196 for (it = lista_aux.begin(); it != lista_aux.end();) {
197 if (it->getcodigo() != *cb->codigoCliente) {
198 it = lista_aux.erase(it);
199 } else {
200 it++;
201 }
202 }
203 }
204 if (cb->direccionCliente) {
205 QRegExp rx((tr("*") + *cb->direccionCliente) + "*");
206 rx.setPatternSyntax(QRegExp::Wildcard);
207 rx.setCaseSensitivity(Qt::CaseInsensitive);
208 list<Cliente>::iterator it;
209 for (it = lista_aux.begin(); it != lista_aux.end();) {
210 QString nombre(it->getdireccion().c_str());
211 if (!rx.exactMatch(nombre)) {
212 it = lista_aux.erase(it);
213 } else {
214 it++;
215 }
216 }
217 }
218 }
219 lista = lista_aux;
220
221 int n_elem = lista.size();
222 int n_row = ui.tableWidget->rowCount();
223 cout << "[Debug]Numero de clientes: " << n_elem << endl;
224 list<Cliente>::iterator i;
225 i = lista.begin();
226 for (int row = 0; row < n_row; row++) {
227 ui.tableWidget->item(row, 0)->setText(QString::number(i->getcodigo()));
228 ui.tableWidget->item(row, 1)->setText(QString::fromStdString(i->getnombre()));
229 ui.tableWidget->item(row, 2)->setText(QString::fromStdString(i->getapellidos()));
230 ui.tableWidget->item(row, 3)->setText(QString::fromStdString(i->getnif()));
231 i++;
232 }
233 for (int row = n_row; row < n_elem; row++) {
234 addRow();
235 ui.tableWidget->item(row, 0)->setText(QString::number(i->getcodigo()));
236 ui.tableWidget->item(row, 1)->setText(QString::fromStdString(i->getnombre()));
237 ui.tableWidget->item(row, 2)->setText(QString::fromStdString(i->getapellidos()));
238 ui.tableWidget->item(row, 3)->setText(QString::fromStdString(i->getnif()));
239 i++;
240 }
241
242
243}
244void ListarClientes::borrar() {
245 int row = ui.tableWidget->currentRow();
246 int cod = ui.tableWidget->item(row, 0)->text().toInt();
247 if (QMessageBox::question(this, tr("Borrar Cliente"), tr("Seguro que desea borrar el cliente de codigo %1?").arg(cod),tr("No"),tr("Si")) == 1) {
248 QString mes = tr("Ahora se borrara el articulo de la fila: %1.").arg(row);
249 //QMessageBox::information(this, tr("Atencion"), mes);
250 if (capaNegocio->borrarCliente(capaNegocio->getClienteCodigo(cod))) {
251 //QMessageBox::information(this, tr("Atencion"), tr("Borrado correcto."));
252 ui.tableWidget->removeRow(row);
253 } else {
254 QMessageBox::warning(this, tr("Atencion"), tr("Error al borrar."));
255 }
256 } else {
257 //QString mes = tr("No se borrara el cliente de la fila: %1.").arg(row);
258 //QMessageBox::information(this, tr("Atencion"), mes);
259 }
260}
261