Billing program for the appliance repair company Seoane.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 988 lines 34 kB view raw
1#include "NuevaFacturaDialog.h" 2#include "NuevoClienteDialog.h" 3#include <QRegExp> 4#include <list> 5#include <iostream> 6#include <QtGui> 7#include <QThread> 8#include <QMutex> 9#include "PrintWindow.h" 10#include "../Negocio/Articulo.h" 11 12using namespace std; 13 14QMutex mutex; 15 16 void ActualizadorThread::setPadre(NuevaFacturaDialog* parent) { 17 nfd = parent; 18 } 19 void ActualizadorThread::run() { 20 while (true) { 21 usleep(10000); 22 nfd->actualizaPrecios(); 23 } 24 } 25 26NuevaFacturaDialog::NuevaFacturaDialog(CapaNegocio * const cn, QWidget *parent, Factura *f, bool dePresupuesto) 27 : QDialog(parent) 28{ 29 this->dePresupuesto = dePresupuesto; 30 ui.setupUi(this); 31 capaNegocio = cn; 32 lClientes = capaNegocio->getClientes(); 33 lArticulos = capaNegocio->getArticulos(); 34 setWindowIcon(QIcon(QString::fromUtf8("Gui/images/NFactura.PNG"))); 35 36 cliente = 0; 37 padre = 0; 38 nuevaFactura = new Factura(); 39 40 //ui.lineEdit_7->installEventFilter(this); 41 //ui.lineEdit_8->installEventFilter(this); 42 //ui.lineEdit_9->installEventFilter(this); 43 44 ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); 45 46 ui.lineEdit_11->setText(tr("%1").arg(capaNegocio->obtenerIva())); 47 QDate hoy = QDate::currentDate(); 48 ui.dateEdit->setDate(hoy); 49 ui.dateEdit_2->setDate(hoy); 50 ui.lineEdit_10->setEnabled(false); 51 ui.lineEdit_12->setEnabled(false); 52 int num = capaNegocio->getUltimoCodigoFactura(); 53 if (num < 100000) { 54 ui.lineEdit_4->setText(tr("0%1").arg(num)); 55 } else { 56 ui.lineEdit_4->setText(tr("%1").arg(num)); 57 } 58 59 int cod = capaNegocio->getUltimoCodigoCliente(); 60 ui.codigoEdit->setText(QString::number(cod)); 61 62 connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(anyadirLineaArticulo())); 63 connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(borrarArticulo())); 64 connect(ui.pushButton_7, SIGNAL(clicked()), this, SLOT(limpiar())); 65 connect(ui.pushButton_6, SIGNAL(clicked()), this, SLOT(nuevoTelefono())); 66 connect(ui.pushButton_8, SIGNAL(clicked()), this, SLOT(borrarTelefono())); 67 connect(ui.checkBox_2, SIGNAL(clicked()), this, SLOT(cambiarEstadoDomicilio())); 68 connect(ui.checkBox_3, SIGNAL(clicked()), this, SLOT(cambiarEstadoTaller())); 69 connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(imprimir())); 70 71 if (f != 0) { 72 *nuevaFactura = *f; 73 padre = (ListarFacturas *)parent; 74 setWindowTitle(tr("Editar Factura")); 75 cliente = new Cliente(); 76 if (f->getcliente() != 0) { 77 *cliente = *(f->getcliente()); 78 ui.nombreEdit->setText(cliente->getnombre().c_str()); 79 ui.nombreEdit->setEnabled(false); 80 ui.lineEdit_13->setText(cliente->getapellidos().c_str()); 81 ui.lineEdit_13->setEnabled(false); 82 ui.codigoEdit->setText(tr("%1").arg(cliente->getcodigo())); 83 ui.codigoEdit->setEnabled(false); 84 QString direccion; 85 direccion.append(cliente->getdireccion().c_str()); 86 QTextDocument *direccionCompleta = new QTextDocument(direccion); 87 ui.direccionEdit->setDocument(direccionCompleta); 88 ui.direccionEdit->setEnabled(false); 89 ui.lineEdit_14->setText(cliente->getpoblacion().c_str()); 90 ui.lineEdit_14->setEnabled(false); 91 ui.nifEdit->setText(cliente->getnif().c_str()); 92 ui.nifEdit->setEnabled(false); 93 ui.pushButton_6->setEnabled(false); 94 ui.pushButton_8->setEnabled(false); 95 list<int> lista_telefonos = cliente->gettelefonos(); 96 list<int>::iterator it2; 97 int row; 98 for (it2 = lista_telefonos.begin(), row = 0; it2 != lista_telefonos.end(); it2++, row++) { 99 addRowTelefono(); 100 ui.tabla->item(row, 0)->setText(tr("%1").arg(*it2)); 101 } 102 ui.tabla->setEnabled(false); 103 } else { 104 ui.nombreEdit->setEnabled(false); 105 ui.lineEdit_13->setEnabled(false); 106 ui.codigoEdit->setEnabled(false); 107 ui.pushButton_6->setEnabled(false); 108 ui.direccionEdit->setEnabled(false); 109 ui.lineEdit_14->setEnabled(false); 110 ui.nifEdit->setEnabled(false); 111 ui.tabla->setEnabled(false); 112 } 113 if (f->getn_factura() < 100000) { 114 ui.lineEdit_4->setText(tr("0%1").arg(f->getn_factura())); 115 } else { 116 ui.lineEdit_4->setText(tr("%1").arg(f->getn_factura())); 117 } 118 if (f->getfecha()!= "") { 119 ui.checkBox->setChecked(true); 120 ui.dateEdit->setEnabled(true); 121 QDate fecha = QDate::fromString(f->getfecha().c_str(), "dd/MM/yyyy"); 122 ui.dateEdit->setDate(fecha); 123 } 124 if (f->getfecha_terminacion()!= "") { 125 ui.checkBox_4->setChecked(true); 126 ui.dateEdit_2->setEnabled(true); 127 QDate fecha = QDate::fromString(f->getfecha_terminacion().c_str(), "dd/MM/yyyy"); 128 ui.dateEdit_2->setDate(fecha); 129 } 130 ui.lineEdit_15->setText(f->getobservaciones().c_str()); 131 ui.lineEdit->setText(f->getaparato().c_str()); 132 ui.lineEdit_2->setText(f->getmarca().c_str()); 133 ui.lineEdit_3->setText(f->getmodelo().c_str()); 134 135 if (f->getlugar_reparacion() != 0) 136 if (*(f->getlugar_reparacion())) { 137 ui.checkBox_2->setChecked(true); 138 ui.checkBox_3->setChecked(false); 139 } else { 140 ui.checkBox_2->setChecked(false); 141 ui.checkBox_3->setChecked(true); 142 } 143 else { 144 ui.checkBox_2->setChecked(false); 145 ui.checkBox_3->setChecked(false); 146 } 147 QString averia; 148 averia.append(f->getaveria().c_str()); 149 QTextDocument *averiaC = new QTextDocument(averia); 150 ui.textEdit->setDocument(averiaC); 151 QString trabajo; 152 trabajo.append(f->gettrabajo_realizado().c_str()); 153 QTextDocument *trabajoC = new QTextDocument(trabajo); 154 ui.textEdit_2->setDocument(trabajoC); 155 ui.lineEdit_5->setText(f->gettiempo_empleado().c_str()); 156 ui.lineEdit_6->setText(tr("%1").arg(f->getMateriales())); 157 ui.lineEdit_7->setText(tr("%1").arg(f->getprecio_mano_obra())); 158 ui.lineEdit_8->setText(tr("%1").arg(f->getprecio_desplazamiento())); 159 ui.lineEdit_9->setText(tr("%1").arg(f->getprecio_transporte())); 160 ui.lineEdit_10->setText(tr("%1").arg(f->getSubTotal())); 161 ui.lineEdit_11->setText(tr("%1").arg(f->getiva())); 162 ui.lineEdit_12->setText(tr("%1").arg(f->getTotal())); 163 164 list<LineaArticulo> lista = f->getlista_articulos(); 165 list<LineaArticulo>::iterator it; 166 for (it = lista.begin(); it != lista.end(); it++) { 167 int row = ui.tableWidget->rowCount(); 168 int cantidad = it->getcantidad(); 169 addRow(); 170 ui.tableWidget->item(row, 0)->setText(tr("%1").arg(it->getarticulo().getcodigo())); 171 ui.tableWidget->item(row, 1)->setText(it->getarticulo().getdescripcion().c_str()); 172 ui.tableWidget->item(row, 2)->setText(tr("%1").arg(cantidad)); 173 ui.tableWidget->item(row, 3)->setText(tr("%1").arg(it->getarticulo().getpvp())); 174 ui.tableWidget->item(row, 4)->setText(tr("%1").arg(it->getarticulo().getpvp() * (double)cantidad)); 175 } 176 if (!dePresupuesto) { 177 ui.pushButton_7->setText(tr("Modificar")); 178 connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(editar())); 179 } else { 180 connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(guardar())); 181 } 182 } else { 183 connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(guardar())); 184 } 185 186 // Cosas de hilos 187 actualizador = new ActualizadorThread(); 188 actualizador->setPadre(this); 189 actualizador->start(); 190} 191 192NuevaFacturaDialog::~NuevaFacturaDialog() 193{ 194 actualizador->quit(); 195} 196 197void NuevaFacturaDialog::buscarCliente() { 198 QString nombreParcial = (ui.nombreEdit->text() + "*" ) + ui.lineEdit_13->text(); 199 QRegExp rx(nombreParcial + "*"); 200 rx.setPatternSyntax(QRegExp::Wildcard); 201 rx.setCaseSensitivity(Qt::CaseInsensitive); 202 203 list<Cliente> lClientesEncontrados; 204 list<Cliente>::iterator it; 205 206 for (it = lClientes.begin(); it != lClientes.end(); it++) { 207 QString nombre(((it->getnombre() + " ") + it->getapellidos()).c_str()); 208 if (rx.exactMatch(nombre)) { 209 lClientesEncontrados.push_back(*it); 210 } 211 } 212 213 if (lClientesEncontrados.size() == 1) { 214 215 cliente = new Cliente(); 216 *cliente = lClientesEncontrados.front(); 217 ui.nombreEdit->setText(cliente->getnombre().c_str()); 218 ui.lineEdit_13->setText(cliente->getapellidos().c_str()); 219 ui.codigoEdit->setText(tr("%1").arg(cliente->getcodigo())); 220 QString direccion; 221 direccion.append(cliente->getdireccion().c_str()); 222 QTextDocument *direccionCompleta = new QTextDocument(direccion); 223 ui.direccionEdit->setDocument(direccionCompleta); 224 ui.lineEdit_14->setText(cliente->getpoblacion().c_str()); 225 ui.nifEdit->setText(cliente->getnif().c_str()); 226 while (ui.tabla->rowCount() > 0) { 227 ui.tabla->removeRow(0); 228 } 229 list<int> lista_telefonos = cliente->gettelefonos(); 230 list<int>::iterator it; 231 int row; 232 for (it = lista_telefonos.begin(), row = 0; it != lista_telefonos.end(); it++, row++) { 233 addRowTelefono(); 234 ui.tabla->item(row, 0)->setText(tr("%1").arg(*it)); 235 } 236 cambiarCliente(); 237 } 238 239} 240 241void NuevaFacturaDialog::buscarArticulo() { 242 243 QString nombreParcial = ui.descripcionEdit->text(); 244 QRegExp rx(nombreParcial + "*"); 245 rx.setPatternSyntax(QRegExp::Wildcard); 246 rx.setCaseSensitivity(Qt::CaseInsensitive); 247 248 list<Articulo> lArticulosEncontrados; 249 list<Articulo>::iterator it; 250 251 if (ui.referenciaEdit->hasFocus()) { 252 for (it = lArticulos.begin(); it != lArticulos.end(); it++) { 253 if (ui.referenciaEdit->text().toInt() == it->getcodigo()) { 254 lArticulosEncontrados.push_back(*it); 255 } 256 } 257 } else { 258 for (it = lArticulos.begin(); it != lArticulos.end(); it++) { 259 QString nombre((it->getdescripcion()).c_str()); 260 if (rx.exactMatch(nombre)) { 261 lArticulosEncontrados.push_back(*it); 262 } 263 } 264 } 265 266 if (lArticulosEncontrados.size() == 1) { 267 articuloActual = lArticulosEncontrados.front(); 268 ui.descripcionEdit->setText(articuloActual.getdescripcion().c_str()); 269 ui.referenciaEdit->setText(tr("%1").arg(articuloActual.getcodigo())); 270 ui.pvpEdit->setText(tr("%1").arg(articuloActual.getpvp() - articuloActual.getpvp()*(articuloActual.getdescuento() / 100.0))); 271 ui.cantidadEdit->setValue(1); 272 } 273 274} 275 276void NuevaFacturaDialog::addRow(){ 277 int row = ui.tableWidget->rowCount(); 278 ui.tableWidget->insertRow(row); 279 280 QTableWidgetItem *item0 = new QTableWidgetItem; 281 item0->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); 282 ui.tableWidget->setItem(row, 0, item0); 283 284 QTableWidgetItem *item1 = new QTableWidgetItem; 285 item1->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); 286 ui.tableWidget->setItem(row, 1, item1); 287 288 QTableWidgetItem *item2 = new QTableWidgetItem; 289 item2->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); 290 ui.tableWidget->setItem(row, 2, item2); 291 292 QTableWidgetItem *item3 = new QTableWidgetItem; 293 item3->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); 294 ui.tableWidget->setItem(row, 3, item3); 295 296 QTableWidgetItem *item4 = new QTableWidgetItem; 297 item4->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); 298 ui.tableWidget->setItem(row, 4, item4); 299} 300 301void NuevaFacturaDialog::anyadirLineaArticulo() { 302 303 int cantidadPrev = ui.cantidadEdit->value(); 304 buscarArticulo(); 305 ui.cantidadEdit->setValue(cantidadPrev); 306 307 if (articuloActual.getcodigo() != -1) { 308 /** 309 * Caso para un art�culo de la base de datos. 310 */ 311 int row = ui.tableWidget->rowCount(); 312 int cantidad = ui.cantidadEdit->value(); 313 314 list<pair<pair<string, double>, int> >::iterator it; 315 for (it = lArticuloFila.begin(); it != lArticuloFila.end(); it++) { 316 if (articuloActual.getdescripcion() == it->first.first && articuloActual.getpvp() == it->first.second) { 317 break; 318 } 319 } 320 321 if (it == lArticuloFila.end()) { 322 // No encuentra 323 addRow(); 324 ui.tableWidget->item(row, 0)->setText(ui.referenciaEdit->text()); 325 ui.tableWidget->item(row, 1)->setText(ui.descripcionEdit->text()); 326 ui.tableWidget->item(row, 2)->setText(tr("%1").arg(cantidad)); 327 ui.tableWidget->item(row, 3)->setText(ui.pvpEdit->text()); 328 ui.tableWidget->item(row, 4)->setText(tr("%1").arg(ui.pvpEdit->text().toDouble() * (double)cantidad)); 329 pair <string, double> tmp(articuloActual.getdescripcion(), articuloActual.getpvp()); 330 lArticuloFila.push_back(pair<pair<string, double>, int>(tmp, row)); 331 nuevaFactura->addArticulo(articuloActual, cantidad); 332 } else { 333 // Encuentra 334 row = it->second; 335 int cantidad_prev = ui.tableWidget->item(row, 2)->text().toInt(); 336 nuevaFactura->modificarArticulo(articuloActual, cantidad_prev + cantidad); 337 ui.tableWidget->item(row, 2)->setText(tr("%1").arg(cantidad_prev + cantidad)); 338 ui.tableWidget->item(row, 4)->setText(tr("%1").arg(ui.pvpEdit->text().toDouble() * (double)(cantidad_prev + cantidad))); 339 actualizaPrecios(); 340 } 341 342 actualizaPrecios(); 343 } else if (ui.referenciaEdit->text() == "" && ui.pvpEdit->text() != "") { 344 /** 345 * Caso para un articulo temporal, que tendr� que guardarse en la base de datos para poder recuperar la factura, 346 * pero con un c�digo de 0 igual que el resto. Esto supone un problema a la hora de la b�squeda, esto supondr� un 347 */ 348 bool ok; 349 ui.pvpEdit->text().toDouble(&ok); 350 if(!ok){ 351 QMessageBox::information(this, tr("Atencion"), 352 tr("El precio ha de ser numerico")); 353 } else { 354 int cantidad = ui.cantidadEdit->value(); 355 356 list<pair<pair<string, double>, int> >::iterator it; 357 for (it = lArticuloFila.begin(); it != lArticuloFila.end(); it++) { 358 if (ui.descripcionEdit->text().toStdString() == it->first.first && ui.pvpEdit->text().toDouble() == it->first.second) { 359 break; 360 } 361 } 362 363 if (it == lArticuloFila.end()) { 364 // No encuentra 365 // Nuevo art�culo 366 Articulo *a_tmp = capaNegocio->getArticuloDescripcionPvp(ui.descripcionEdit->text().toStdString(), ui.pvpEdit->text().toDouble()); 367 368 Articulo a; 369 a.setcodigo(0); //C�digo generico de art�culos temporales. 370 a.setdescripcion(ui.descripcionEdit->text().toStdString()); 371 a.setpvp(ui.pvpEdit->text().toDouble()); 372 a.sethistorico(true); 373 374 if (a_tmp != 0) { 375 int row = ui.tableWidget->rowCount(); 376 addRow(); 377 ui.tableWidget->item(row, 0)->setText("0"); 378 ui.tableWidget->item(row, 1)->setText(ui.descripcionEdit->text()); 379 ui.tableWidget->item(row, 2)->setText(tr("%1").arg(cantidad)); 380 ui.tableWidget->item(row, 3)->setText(ui.pvpEdit->text()); 381 ui.tableWidget->item(row, 4)->setText(tr("%1").arg(ui.pvpEdit->text().toDouble() * (double)cantidad)); 382 pair <string, double> tmp(a_tmp->getdescripcion(), a_tmp->getpvp()); 383 lArticuloFila.push_back(pair<pair<string, double>, int>(tmp, row)); 384 nuevaFactura->addArticulo(*a_tmp,cantidad); 385 actualizaPrecios(); 386 } else { 387 if (capaNegocio->nuevoArticulo(&a)) { 388 int row = ui.tableWidget->rowCount(); 389 addRow(); 390 ui.tableWidget->item(row, 0)->setText("0"); 391 ui.tableWidget->item(row, 1)->setText(ui.descripcionEdit->text()); 392 ui.tableWidget->item(row, 2)->setText(tr("%1").arg(cantidad)); 393 ui.tableWidget->item(row, 3)->setText(tr("%1").arg(a.getpvp(), 0, 'f', 2)); 394 ui.tableWidget->item(row, 4)->setText(tr("%1").arg(a.getpvp() * (double)cantidad, 0, 'f', 2)); 395 pair <string, double> tmp(a.getdescripcion(), a.getpvp()); 396 lArticuloFila.push_back(pair<pair<string, double>, int>(tmp, row)); 397 nuevaFactura->addArticulo(a,cantidad); 398 actualizaPrecios(); 399 } else { 400 QMessageBox::warning(this, "Aviso", "Fallo al guardar el nuevo articulo."); 401 } 402 } 403 } else { 404 // Encuentra 405 Articulo *a_tmp = capaNegocio->getArticuloDescripcionPvp(ui.descripcionEdit->text().toStdString(), ui.pvpEdit->text().toDouble()); 406 cout << "[Debug]" << a_tmp->getid() << endl; 407 int row = it->second; 408 int cantidad_prev = ui.tableWidget->item(row, 2)->text().toInt(); 409 nuevaFactura->modificarArticulo(*a_tmp, cantidad_prev + cantidad); 410 ui.tableWidget->item(row, 2)->setText(tr("%1").arg(cantidad_prev + cantidad)); 411 ui.tableWidget->item(row, 4)->setText(tr("%1").arg(ui.pvpEdit->text().toDouble() * (double)(cantidad_prev + cantidad))); 412 actualizaPrecios(); 413 } 414 415 } 416 } else { 417 QMessageBox::warning(this, "Aviso", "Articulo no encontrado."); 418 } 419 Articulo aux; 420 articuloActual = aux; 421} 422 423void NuevaFacturaDialog::keyPressEvent(QKeyEvent* event) { 424 //mutex.lock(); 425 if ((ui.nombreEdit->hasFocus() || ui.lineEdit_13->hasFocus()) && (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)) 426 buscarCliente(); 427 else if ((ui.descripcionEdit->hasFocus() || ui.referenciaEdit->hasFocus() ) && (event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter)) 428 buscarArticulo(); 429} 430void NuevaFacturaDialog::keyReleaseEvent(QKeyEvent* event) { 431 //mutex.unlock(); 432} 433 434void NuevaFacturaDialog::borrarArticulo() { 435 int row = ui.tableWidget->currentRow(); 436 if (row < 0) { 437 QMessageBox::warning(this, tr("Aviso"), tr("Ha de haber una fila seleccionada.")); 438 return; 439 } 440 441 string des = ui.tableWidget->item(row, 1)->text().toStdString(); 442 double pvp = ui.tableWidget->item(row, 3)->text().toDouble(); 443 int cod = ui.tableWidget->item(row, 0)->text().toInt(); 444 445 cout << "[Debug]Borrando el articulo de descripcion: " << des << endl; 446 447 Articulo *a; 448 if ( cod == 0 ) 449 a = capaNegocio->getArticuloDescripcionPvp(des, pvp); 450 else 451 a = capaNegocio->getArticuloCodigo(cod); 452 453 if (a == 0) { 454 cout << "[Debug]Articulo no encontrado en la CapaNegocio" << endl; 455 } 456 457 list<pair<pair<string, double>, int> >::iterator it; 458 for (it = lArticuloFila.begin(); it != lArticuloFila.end(); it++) { 459 if (a->getdescripcion() == it->first.first && a->getpvp() == it->first.second) { 460 break; 461 } 462 } 463 lArticuloFila.erase(it); 464 465 if (!nuevaFactura->eliminarArticulo(*a)) 466 cout << "[Debug]No se borra el articulo de la factura." << a->getid() << endl; 467 468 ui.tableWidget->removeRow(row); 469 470 actualizaPrecios(); 471} 472 473void NuevaFacturaDialog::actualizaPrecios() { 474 mutex.lock(); 475 double materiales = nuevaFactura->getMateriales(); 476 double mano_obra = ui.lineEdit_7->text().toDouble(); 477 double desplazamiento = ui.lineEdit_8->text().toDouble(); 478 double transporte = ui.lineEdit_9->text().toDouble(); 479 double subtotal = materiales + mano_obra + desplazamiento + transporte; 480 double total = subtotal + (ui.lineEdit_11->text().toDouble() / 100.0 )*subtotal; 481 482 ui.lineEdit_10->setText(tr("%1").arg(subtotal, 0, 'f', 2)); 483 ui.lineEdit_6->setText(tr("%1").arg(materiales, 0, 'f', 2)); 484 ui.lineEdit_12->setText(tr("%1").arg(total, 0, 'f', 2)); 485 mutex.unlock(); 486} 487 488bool NuevaFacturaDialog::comprobarDatos () { 489 bool flag = true; 490 if (cliente == 0) { 491 if(ui.nombreEdit->text()==""){ 492 QMessageBox::information(this, tr("Atencion"), 493 tr("El campo nombre es necesario")); 494 flag=false; 495 } 496 if(ui.lineEdit_13->text()==""){ 497 QMessageBox::information(this, tr("Atencion"), 498 tr("El campo apellido es necesario")); 499 flag=false; 500 } 501 bool ok; 502 ui.codigoEdit->text().toInt(&ok); 503 if(!ok){ 504 QMessageBox::information(this, tr("Atencion"), 505 tr("El campo codigo ha de ser numerico")); 506 flag=false; 507 } 508 int rows = ui.tabla->rowCount(); 509 for (int i = 0; i < rows; i++) { 510 ui.tabla->item(i,0)->text().toInt(&ok); 511 if(!ok && ui.tabla->item(i,0)->text()!=""){ 512 QMessageBox::information(this, tr("Atenci�n"), 513 tr("Hay un tel�fono incorrecto.")); 514 flag=false; 515 } 516 } 517 } 518 bool ok; 519 ui.lineEdit_4->text().toInt(&ok); 520 if(!ok && ui.lineEdit_4->text() != ""){ 521 QMessageBox::information(this, tr("Atencion"), 522 tr("El campo codigo ha de ser numerico")); 523 flag=false; 524 } 525 ui.lineEdit_5->text().toDouble(&ok); 526 if(!ok && ui.lineEdit_5->text() != ""){ 527 QMessageBox::information(this, tr("Atencion"), 528 tr("El tiempo empleado ha de ser numerico")); 529 flag=false; 530 } 531 ui.lineEdit_7->text().toDouble(&ok); 532 if(!ok && ui.lineEdit_7->text() != ""){ 533 QMessageBox::information(this, tr("Atencion"), 534 tr("La mano de obra ha de ser numerica")); 535 flag=false; 536 } 537 ui.lineEdit_8->text().toDouble(&ok); 538 if(!ok && ui.lineEdit_8->text() != ""){ 539 QMessageBox::information(this, tr("Atencion"), 540 tr("El desplazamiento ha de ser numerico")); 541 flag=false; 542 } 543 ui.lineEdit_9->text().toDouble(&ok); 544 if(!ok && ui.lineEdit_9->text() != ""){ 545 QMessageBox::information(this, tr("Atencion"), 546 tr("El transporte ha de ser numerico")); 547 flag=false; 548 } 549 if (nuevaFactura->getn_factura() == -1 && ui.lineEdit_4->text() != "" && capaNegocio->getFacturaNumero(ui.lineEdit_4->text().toInt()) != 0 ) { 550 QMessageBox::information(this, tr("Atenci�n"), 551 tr("N� de factura repetido.")); 552 flag=false; 553 } 554 return flag; 555} 556 557bool NuevaFacturaDialog::guardarSinSalir() { 558 559 bool clienteOk; 560 561 if (comprobarDatos()) { 562 563 nuevaFactura->setaparato(ui.lineEdit->text().toStdString()); 564 nuevaFactura->setaveria(ui.textEdit->document()->toPlainText().toStdString()); 565 566 if (ui.checkBox->isChecked()) { 567 nuevaFactura->setfecha(ui.dateEdit->text().toStdString()); 568 } else { 569 nuevaFactura->setfecha(tr("").toStdString()); 570 } 571 572 //nuevaFactura->setfecha_terminacion(ui.lineEdit_->text()); 573 if (ui.checkBox_4->isChecked()) { 574 nuevaFactura->setfecha_terminacion(ui.dateEdit_2->text().toStdString()); 575 } else { 576 nuevaFactura->setfecha_terminacion(tr("").toStdString()); 577 } 578 579 if (!ui.checkBox_2->isChecked() && !ui.checkBox_3->isChecked()) 580 nuevaFactura->setlugar_reparacion(0); 581 else { 582 bool *s = new bool; 583 *s = ui.checkBox_2->isChecked(); 584 nuevaFactura->setlugar_reparacion(s); 585 } 586 587 nuevaFactura->setmarca(ui.lineEdit_2->text().toStdString()); 588 nuevaFactura->setmodelo(ui.lineEdit_3->text().toStdString()); 589 590 //nuevaFactura->setn_fabricacion(ui.lineEdit_->text()); 591 592 if (ui.lineEdit_4->text() == "") { 593 nuevaFactura->setn_factura(-1); 594 } else { 595 nuevaFactura->setn_factura(ui.lineEdit_4->text().toInt()); 596 } 597 598 nuevaFactura->setiva(ui.lineEdit_11->text().toInt()); 599 600 nuevaFactura->setobservaciones(ui.textEdit->document()->toPlainText().toStdString()); 601 nuevaFactura->setprecio_desplazamiento(ui.lineEdit_8->text().toDouble()); 602 nuevaFactura->setprecio_mano_obra(ui.lineEdit_7->text().toDouble()); 603 nuevaFactura->setprecio_materiales(ui.lineEdit_6->text().toDouble()); 604 nuevaFactura->setprecio_transporte(ui.lineEdit_9->text().toDouble()); 605 606 nuevaFactura->settiempo_empleado(ui.lineEdit_5->text().toStdString()); 607 nuevaFactura->settrabajo_realizado(ui.textEdit_2->document()->toPlainText().toStdString()); 608 609 if (cliente == 0) { 610 cliente = new Cliente(); 611 cliente->setnombre(ui.nombreEdit->text().toStdString()); 612 cliente->setapellidos(ui.lineEdit_13->text().toStdString()); 613 cliente->setcodigo(ui.codigoEdit->text().toInt()); 614 cliente->setdireccion(ui.direccionEdit->document()->toPlainText().toStdString()); 615 cliente->setpoblacion(ui.lineEdit_14->text().toStdString()); 616 cliente->setnif(ui.nifEdit->text().toStdString()); 617 clienteOk = capaNegocio->nuevoCliente(cliente); 618 } else { 619 clienteOk = true; 620 } 621 622 if (clienteOk) 623 nuevaFactura->setcliente(cliente); 624 else 625 QMessageBox::critical(this, tr("Error"), tr("No se pudo guardar el nuevo cliente.")); 626 627 if (capaNegocio->nuevaFactura(nuevaFactura) && clienteOk) { 628 if (padre != 0) 629 padre->actualizar(); 630 return true; 631 //this->accept(); 632 } else 633 QMessageBox::critical(this, tr("Error"), tr("No se pudo guardar la factura.")); 634 } 635 return false; 636} 637 638void NuevaFacturaDialog::guardar() { 639 640 bool clienteOk; 641 642 if (comprobarDatos()) { 643 644 nuevaFactura->setaparato(ui.lineEdit->text().toStdString()); 645 nuevaFactura->setaveria(ui.textEdit->document()->toPlainText().toStdString()); 646 647 if (ui.checkBox->isChecked()) { 648 nuevaFactura->setfecha(ui.dateEdit->text().toStdString()); 649 } else { 650 nuevaFactura->setfecha(tr("").toStdString()); 651 } 652 if (ui.checkBox_4->isChecked()) { 653 nuevaFactura->setfecha_terminacion(ui.dateEdit_2->text().toStdString()); 654 } else { 655 nuevaFactura->setfecha_terminacion(tr("").toStdString()); 656 } 657 658 //nuevaFactura->setfecha_terminacion(ui.lineEdit_->text()); 659 660 if (!ui.checkBox_2->isChecked() && !ui.checkBox_3->isChecked()) 661 nuevaFactura->setlugar_reparacion(0); 662 else { 663 bool *s = new bool; 664 *s = ui.checkBox_2->isChecked(); 665 nuevaFactura->setlugar_reparacion(s); 666 } 667 668 nuevaFactura->setmarca(ui.lineEdit_2->text().toStdString()); 669 nuevaFactura->setmodelo(ui.lineEdit_3->text().toStdString()); 670 671 //nuevaFactura->setn_fabricacion(ui.lineEdit_->text()); 672 673 if (ui.lineEdit_4->text() == "") { 674 nuevaFactura->setn_factura(-1); 675 } else { 676 nuevaFactura->setn_factura(ui.lineEdit_4->text().toInt()); 677 } 678 679 nuevaFactura->setiva(ui.lineEdit_11->text().toInt()); 680 nuevaFactura->setobservaciones(ui.lineEdit_15->text().toStdString()); 681 nuevaFactura->setprecio_desplazamiento(ui.lineEdit_8->text().toDouble()); 682 nuevaFactura->setprecio_mano_obra(ui.lineEdit_7->text().toDouble()); 683 nuevaFactura->setprecio_materiales(ui.lineEdit_6->text().toDouble()); 684 nuevaFactura->setprecio_transporte(ui.lineEdit_9->text().toDouble()); 685 686 nuevaFactura->settiempo_empleado(ui.lineEdit_5->text().toStdString()); 687 nuevaFactura->settrabajo_realizado(ui.textEdit_2->document()->toPlainText().toStdString()); 688 689 if (cliente == 0) { 690 cliente = new Cliente(); 691 cliente->setnombre(ui.nombreEdit->text().toStdString()); 692 cliente->setapellidos(ui.lineEdit_13->text().toStdString()); 693 cliente->setcodigo(ui.codigoEdit->text().toInt()); 694 cliente->setdireccion(ui.direccionEdit->document()->toPlainText().toStdString()); 695 cliente->setpoblacion(ui.lineEdit_14->text().toStdString()); 696 cliente->setnif(ui.nifEdit->text().toStdString()); 697 /** 698 * Guardar los tel�fonos. 699 */ 700 list<int> telefonos; 701 int rows = ui.tabla->rowCount(); 702 for (int i = 0; i < rows; i++) { 703 telefonos.push_back(ui.tabla->item(i, 0)->text().toInt()); 704 } 705 cliente->settelefonos(telefonos); 706 clienteOk = capaNegocio->nuevoCliente(cliente); 707 } else { 708 clienteOk = true; 709 } 710 711 if (clienteOk) 712 nuevaFactura->setcliente(cliente); 713 else 714 QMessageBox::critical(this, tr("Error"), tr("No se pudo guardar el nuevo cliente.")); 715 716 if (capaNegocio->nuevaFactura(nuevaFactura) && clienteOk) { 717 if (padre != 0 && !dePresupuesto) 718 padre->actualizar(); 719 this->accept(); 720 } else 721 QMessageBox::critical(this, tr("Error"), tr("No se pudo guardar la factura.")); 722 } 723} 724 725void NuevaFacturaDialog::editar() { 726 727 bool clienteOk; 728 729 if (comprobarDatos()) { 730 731 nuevaFactura->setaparato(ui.lineEdit->text().toStdString()); 732 nuevaFactura->setaveria(ui.textEdit->document()->toPlainText().toStdString()); 733 734 if (ui.checkBox->isChecked()) { 735 nuevaFactura->setfecha(ui.dateEdit->text().toStdString()); 736 } else { 737 nuevaFactura->setfecha(tr("").toStdString()); 738 } 739 740 //nuevaFactura->setfecha_terminacion(ui.lineEdit_->text()); 741 742 if (!ui.checkBox_2->isChecked() && !ui.checkBox_3->isChecked()) 743 nuevaFactura->setlugar_reparacion(0); 744 else { 745 bool *s = new bool; 746 *s = ui.checkBox_2->isChecked(); 747 nuevaFactura->setlugar_reparacion(s); 748 } 749 if (ui.checkBox_4->isChecked()) { 750 nuevaFactura->setfecha_terminacion(ui.dateEdit_2->text().toStdString()); 751 } else { 752 nuevaFactura->setfecha_terminacion(tr("").toStdString()); 753 } 754 nuevaFactura->setmarca(ui.lineEdit_2->text().toStdString()); 755 nuevaFactura->setmodelo(ui.lineEdit_3->text().toStdString()); 756 757 //nuevaFactura->setn_fabricacion(ui.lineEdit_->text()); 758 759 if (ui.lineEdit_4->text() == "") { 760 nuevaFactura->setn_factura(-1); 761 } else { 762 nuevaFactura->setn_factura(ui.lineEdit_4->text().toInt()); 763 } 764 765 nuevaFactura->setobservaciones(ui.lineEdit_15->text().toStdString()); 766 nuevaFactura->setprecio_desplazamiento(ui.lineEdit_8->text().toDouble()); 767 nuevaFactura->setprecio_mano_obra(ui.lineEdit_7->text().toDouble()); 768 nuevaFactura->setprecio_materiales(ui.lineEdit_6->text().toDouble()); 769 nuevaFactura->setprecio_transporte(ui.lineEdit_9->text().toDouble()); 770 771 nuevaFactura->settiempo_empleado(ui.lineEdit_5->text().toStdString()); 772 nuevaFactura->settrabajo_realizado(ui.textEdit_2->document()->toPlainText().toStdString()); 773 774 if (cliente == 0) { 775 cliente = new Cliente(); 776 cliente->setnombre(ui.nombreEdit->text().toStdString()); 777 cliente->setapellidos(ui.lineEdit_13->text().toStdString()); 778 cliente->setcodigo(ui.codigoEdit->text().toInt()); 779 cliente->setdireccion(ui.direccionEdit->document()->toPlainText().toStdString()); 780 cliente->setpoblacion(ui.lineEdit_14->text().toStdString()); 781 cliente->setnif(ui.nifEdit->text().toStdString()); 782 list<int> lista_telefonos; 783 for (int i = 0; i < ui.tabla->rowCount(); i++) { 784 lista_telefonos.push_back(ui.tabla->item(i,0)->text().toInt()); 785 } 786 cliente->settelefonos(lista_telefonos); 787 clienteOk = capaNegocio->nuevoCliente(cliente); 788 } else { 789 clienteOk = true; 790 } 791 792 if (clienteOk) 793 nuevaFactura->setcliente(cliente); 794 else 795 QMessageBox::critical(this, tr("Error"), tr("No se pudo guardar el nuevo cliente.")); 796 797 if (capaNegocio->modificarFactura(nuevaFactura) && clienteOk) { 798 if (padre != 0) 799 padre->actualizar(); 800 this->accept(); 801 } else 802 QMessageBox::critical(this, tr("Error"), tr("No se pudo editar la factura.")); 803 } 804} 805 806 807bool NuevaFacturaDialog::editarSinSalir() { 808 809 bool clienteOk; 810 811 if (comprobarDatos()) { 812 813 nuevaFactura->setaparato(ui.lineEdit->text().toStdString()); 814 nuevaFactura->setaveria(ui.textEdit->document()->toPlainText().toStdString()); 815 816 if (ui.checkBox->isChecked()) { 817 nuevaFactura->setfecha(ui.dateEdit->text().toStdString()); 818 } else { 819 nuevaFactura->setfecha(tr("").toStdString()); 820 } 821 822 //nuevaFactura->setfecha_terminacion(ui.lineEdit_->text()); 823 824 if (!ui.checkBox_2->isChecked() && !ui.checkBox_3->isChecked()) 825 nuevaFactura->setlugar_reparacion(0); 826 else { 827 bool *s = new bool; 828 *s = ui.checkBox_2->isChecked(); 829 nuevaFactura->setlugar_reparacion(s); 830 } 831 832 nuevaFactura->setmarca(ui.lineEdit_2->text().toStdString()); 833 nuevaFactura->setmodelo(ui.lineEdit_3->text().toStdString()); 834 835 //nuevaFactura->setn_fabricacion(ui.lineEdit_->text()); 836 837 if (ui.lineEdit_4->text() == "") { 838 nuevaFactura->setn_factura(-1); 839 } else { 840 nuevaFactura->setn_factura(ui.lineEdit_4->text().toInt()); 841 } 842 843 nuevaFactura->setiva(ui.lineEdit_11->text().toInt()); 844 nuevaFactura->setobservaciones(ui.textEdit->document()->toPlainText().toStdString()); 845 nuevaFactura->setprecio_desplazamiento(ui.lineEdit_8->text().toDouble()); 846 nuevaFactura->setprecio_mano_obra(ui.lineEdit_7->text().toDouble()); 847 nuevaFactura->setprecio_materiales(ui.lineEdit_6->text().toDouble()); 848 nuevaFactura->setprecio_transporte(ui.lineEdit_9->text().toDouble()); 849 850 nuevaFactura->settiempo_empleado(ui.lineEdit_5->text().toStdString()); 851 nuevaFactura->settrabajo_realizado(ui.textEdit_2->document()->toPlainText().toStdString()); 852 853 if (cliente == 0) { 854 cliente = new Cliente(); 855 cliente->setnombre(ui.nombreEdit->text().toStdString()); 856 cliente->setapellidos(ui.lineEdit_13->text().toStdString()); 857 cliente->setcodigo(ui.codigoEdit->text().toInt()); 858 cliente->setdireccion(ui.direccionEdit->document()->toPlainText().toStdString()); 859 cliente->setpoblacion(ui.lineEdit_14->text().toStdString()); 860 cliente->setnif(ui.nifEdit->text().toStdString()); 861 list<int> lista_telefonos; 862 for (int i = 0; i < ui.tabla->rowCount(); i++) { 863 lista_telefonos.push_back(ui.tabla->item(i,0)->text().toInt()); 864 } 865 cliente->settelefonos(lista_telefonos); 866 clienteOk = capaNegocio->nuevoCliente(cliente); 867 } else { 868 clienteOk = true; 869 } 870 871 if (clienteOk) 872 nuevaFactura->setcliente(cliente); 873 else 874 QMessageBox::critical(this, tr("Error"), tr("No se pudo guardar el nuevo cliente.")); 875 876 if (capaNegocio->modificarFactura(nuevaFactura) && clienteOk) { 877 if (padre != 0) 878 padre->actualizar(); 879 return true; 880 //this->accept(); 881 } else 882 QMessageBox::critical(this, tr("Error"), tr("No se pudo editar la factura.")); 883 } 884 return false; 885} 886 887void NuevaFacturaDialog::addRowTelefono(){ 888 int row = ui.tabla->rowCount(); 889 ui.tabla->insertRow(row); 890 891 QTableWidgetItem *item0 = new QTableWidgetItem; 892 item0->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); 893 ui.tabla->setItem(row, 0, item0); 894 895} 896 897void NuevaFacturaDialog::nuevoTelefono () { 898 int row = ui.tabla->currentRow(); 899 if (row == -1) { 900 addRowTelefono(); 901 ui.tabla->setCurrentCell(0,0); 902 } else if (ui.tabla->item(row,0)->text() != "") { 903 addRowTelefono(); 904 ui.tabla->setCurrentCell(row + 1,0); 905 } 906} 907 908void NuevaFacturaDialog::borrarTelefono() { 909 int row = ui.tabla->currentRow(); 910 if (row == -1) 911 QMessageBox::warning(this, "Aviso", "No se ha seleccionado ningun telefono."); 912 else 913 ui.tabla->removeRow(row); 914 915} 916 917// Invierte el estado de "habilitado" de los campos de cliente 918void NuevaFacturaDialog::cambiarCliente() { 919 ui.nombreEdit->setEnabled(!ui.nombreEdit->isEnabled()); 920 ui.lineEdit_13->setEnabled(!ui.lineEdit_13->isEnabled()); 921 ui.codigoEdit->setEnabled(!ui.codigoEdit->isEnabled()); 922 ui.direccionEdit->setEnabled(!ui.direccionEdit->isEnabled()); 923 ui.lineEdit_14->setEnabled(!ui.lineEdit_14->isEnabled()); 924 ui.nifEdit->setEnabled(!ui.nifEdit->isEnabled()); 925 ui.tabla->setEnabled(!ui.tabla->isEnabled()); 926 ui.pushButton_6->setEnabled(!ui.pushButton_6->isEnabled()); 927 ui.pushButton_8->setEnabled(!ui.pushButton_8->isEnabled()); 928} 929 930void NuevaFacturaDialog::limpiar() { 931 if (ui.nombreEdit->text() != "" ) { 932 cambiarCliente(); 933 } 934 ui.nombreEdit->setText(""); 935 ui.lineEdit_13->setText(""); 936 ui.codigoEdit->setText(""); 937 QString direccion; 938 direccion.append(""); 939 QTextDocument *direccionCompleta = new QTextDocument(direccion); 940 ui.direccionEdit->setDocument(direccionCompleta); 941 ui.lineEdit_14->setText(""); 942 ui.nifEdit->setText(""); 943 cliente = 0; 944 while (ui.tabla->rowCount() > 0) { 945 ui.tabla->removeRow(0); 946 } 947 948 int cod = capaNegocio->getUltimoCodigoCliente(); 949 ui.codigoEdit->setText(QString::number(cod)); 950} 951 952void NuevaFacturaDialog::cambiarEstadoDomicilio() { 953 if (ui.checkBox_2->isChecked()) { 954 if (ui.checkBox_3->isChecked()) { 955 ui.checkBox_3->setChecked(false); 956 } 957 } 958} 959 960void NuevaFacturaDialog::cambiarEstadoTaller() { 961 if (ui.checkBox_3->isChecked()) { 962 if (ui.checkBox_2->isChecked()) { 963 ui.checkBox_2->setChecked(false); 964 } 965 } 966} 967 968void NuevaFacturaDialog::imprimir() { 969 if (nuevaFactura->getid() == -1) { 970 if (QMessageBox::question(this, tr("Imprimir Factura"), tr("Antes de imprimir es necesario guardar la factura.\n �Desea realmente guardarla?"),tr("Si"),tr("No")) == 0) { 971 if(guardarSinSalir()) { 972 PrintWindow* pq = new PrintWindow(*nuevaFactura); 973 pq->printFactura(); 974 this->accept(); 975 } 976 } 977 } else { 978 if (QMessageBox::question(this, tr("Imprimir Factura"), tr("Antes de imprimir es necesario guardar la factura.\n �Desea realmente guardarla?"),tr("Si"),tr("No")) == 0) { 979 if(editarSinSalir()) { 980 PrintWindow* pq = new PrintWindow(*nuevaFactura); 981 pq->printFactura(); 982 this->accept(); 983 } 984 } 985 } 986 987} 988