00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <QMap>
00022 #include <QLineEdit>
00023 #include <QMessageBox>
00024 #include <QFile>
00025 #include <QTextStream>
00026
00027 #include "familiasview.h"
00028 #include "company.h"
00029 #include "funcaux.h"
00030
00031 #define COL_NOMFAMILIA 0
00032 #define COL_CODCOMPLETOFAMILIA 1
00033 #define COL_DESCFAMILIA 2
00034 #define COL_IDFAMILIA 3
00035 #define COL_CODFAMILIA 4
00036 #define COL_PRODUCTOFISICOFAMILIA 5
00037
00038
00040
00045 FamiliasView::FamiliasView(Company *comp, QWidget *parent, bool modoConsulta)
00046 : FichaBf(comp, parent) {
00047 _depura("FamiliasView::FamiliasView", 0);
00048 setupUi(this);
00049 companyact = comp;
00050 m_listFamilias->setColumnCount(3);
00051 QStringList headers;
00052 headers << tr("Nombre") << tr("Codigo") << tr("Descripcion") << tr("Id familia") << tr("Codigo completo");
00053 m_listFamilias->setHeaderLabels(headers);
00054
00055 m_listFamilias->setColumnWidth(0, 200);
00056 m_listFamilias->setColumnWidth(1, 100);
00057
00058 m_listFamilias->setColumnHidden(COL_IDFAMILIA, TRUE);
00059 m_listFamilias->setColumnHidden(COL_CODFAMILIA, TRUE);
00060 m_listFamilias->setColumnHidden(COL_PRODUCTOFISICOFAMILIA, TRUE);
00061
00062 m_semaforoPintar = FALSE;
00063
00064 m_idfamilia = "";
00065
00066 if (modoConsulta) {
00067 setModoConsulta();
00068 groupBox1->hide();
00069 mui_detalles->hide();
00070 mui_crear->hide();
00071 mui_guardar->hide();
00072 mui_borrar->hide();
00073 mui_cancelar->hide();
00074 mui_aceptar->hide();
00075 mui_imprimir->hide();
00076 } else {
00077 setModoEdicion();
00078 setAttribute(Qt::WA_DeleteOnClose);
00079 companyact->meteWindow(windowTitle(), this);
00080 }
00081
00082 pintar();
00083 _depura("END FamiliasView::FamiliasView", 0);
00084 }
00085
00086
00088
00090 FamiliasView::~FamiliasView() {
00091 _depura("FamiliasView::~FamiliasView", 0);
00092 _depura("END FamiliasView::~FamiliasView", 0);
00093 }
00094
00095
00097
00099 void FamiliasView::pintar() {
00100 _depura("FamiliasView::pintar", 0);
00102 m_semaforoPintar = TRUE;
00103 QTreeWidgetItem *it;
00104 QMap <int, QTreeWidgetItem*> Lista1;
00105 int padre;
00106 int idfamilia = 0;
00107 cursor2 *cursoraux1, *cursoraux2;
00108
00110 while (m_listFamilias->topLevelItemCount() > 0) {
00111 it = m_listFamilias->takeTopLevelItem(0);
00112 delete it;
00113 }
00114
00115 cursoraux1 = companyact->cargacursor("SELECT * FROM familia WHERE padrefamilia IS NULL ORDER BY idfamilia");
00116 while (!cursoraux1->eof()) {
00117 padre = cursoraux1->valor("padrefamilia").toInt();
00118 idfamilia = cursoraux1->valor("idfamilia").toInt();
00119 it = new QTreeWidgetItem(m_listFamilias);
00120 Lista1[idfamilia] = it;
00121 it->setText(COL_NOMFAMILIA, cursoraux1->valor("nombrefamilia"));
00122 it->setText(COL_CODFAMILIA, cursoraux1->valor("codigofamilia"));
00123 it->setText(COL_DESCFAMILIA, cursoraux1->valor("descfamilia"));
00124 it->setText(COL_IDFAMILIA, cursoraux1->valor("idfamilia"));
00125 it->setText(COL_CODCOMPLETOFAMILIA, cursoraux1->valor("codigocompletofamilia"));
00126 it->setText(COL_PRODUCTOFISICOFAMILIA, cursoraux1->valor("productofisicofamilia"));
00127 m_listFamilias->expandItem(it);
00128 cursoraux1->siguienteregistro();
00129 }
00130 delete cursoraux1;
00131 cursoraux2 = companyact->cargacursor("SELECT * FROM familia WHERE padrefamilia IS NOT NULL ORDER BY idfamilia");
00132 while (!cursoraux2->eof()) {
00133 padre = cursoraux2->valor("padrefamilia").toInt();
00134 idfamilia = cursoraux2->valor("idfamilia").toInt();
00135 it = new QTreeWidgetItem(Lista1[padre]);
00136 Lista1[idfamilia] = it;
00137 it->setText(COL_NOMFAMILIA, cursoraux2->valor("nombrefamilia"));
00138 it->setText(COL_CODFAMILIA, cursoraux2->valor("codigofamilia"));
00139 it->setText(COL_DESCFAMILIA, cursoraux2->valor("descfamilia"));
00140 it->setText(COL_IDFAMILIA, cursoraux2->valor("idfamilia"));
00141 it->setText(COL_CODCOMPLETOFAMILIA, cursoraux2->valor("codigocompletofamilia"));
00142 it->setText(COL_PRODUCTOFISICOFAMILIA, cursoraux2->valor("productofisicofamilia"));
00143 m_listFamilias->expandItem(it);
00144 cursoraux2->siguienteregistro();
00145 }
00146 delete cursoraux2;
00147 m_idfamilia = "";
00149 dialogChanges_cargaInicial();
00150 m_semaforoPintar = FALSE;
00151 _depura("END FamiliasView::pintar", 0);
00152 }
00153
00154
00156
00159 QString FamiliasView::codigoCompletoFamilia() {
00160 _depura("FamiliasView::codigoCompletoFamilia", 0);
00161 QTreeWidgetItem *it = m_listFamilias->currentItem();
00162 if (it) {
00163 return it->text(COL_CODCOMPLETOFAMILIA);
00164 }
00165 _depura("END FamiliasView::codigoCompletoFamilia", 0);
00166 return "";
00167 }
00168
00169
00171
00174 QString FamiliasView::idFamilia() {
00175 _depura("FamiliasView::idFamilia", 0);
00176 QTreeWidgetItem *it = m_listFamilias->currentItem();
00177 if (it) {
00178 return it->text(COL_IDFAMILIA);
00179 }
00180 _depura("END FamiliasView::idFamilia", 0);
00181 return "";
00182 }
00183
00184
00186
00189 QString FamiliasView::nombreFamilia() {
00190 _depura("FamiliasView::nombreFamilia", 0);
00191 QTreeWidgetItem *it = m_listFamilias->currentItem();
00192 if (it) {
00193 return it->text(COL_NOMFAMILIA);
00194 }
00195 _depura("END FamiliasView::nombreFamilia", 0);
00196 return "";
00197 }
00198
00199
00203
00206 void FamiliasView::on_m_listFamilias_itemDoubleClicked(QTreeWidgetItem *it) {
00207 _depura("FamiliasView::on_m_listFamilias_itemDoubleClicked", 0);
00208 if (m_modoConsulta) {
00209 m_idfamilia = it->text(COL_IDFAMILIA);
00210 emit selected(m_idfamilia);
00211 }
00212 _depura("END FamiliasView::on_m_listFamilias_itemDoubleClicked", 0);
00213 }
00214
00215
00219
00224 void FamiliasView::on_m_listFamilias_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous) {
00225 _depura("FamiliasView::on_m_listFamilias_currentItemChanged", 0);
00226
00228 if (m_semaforoPintar) return;
00229
00230 QString idfamiliaold = "";
00231 if (previous) {
00232 m_idfamilia = previous->text(COL_IDFAMILIA);
00233 }
00234 if (m_idfamilia != "") {
00235 trataModificado();
00236 pintar(previous);
00237 }
00238 m_idfamilia = current->text(COL_IDFAMILIA);
00239 mostrarplantilla();
00240 _depura("END FamiliasView::on_m_listFamilias_currentItemChanged", 0);
00241 }
00242
00243
00245
00247 void FamiliasView::mostrarplantilla() {
00248 _depura("FamiliasView::mostrarplantilla", 0);
00249 QString query;
00250 query= "SELECT * from familia WHERE idfamilia = " + m_idfamilia;
00251 cursor2 *cursorfamilia = companyact->cargacursor(query);
00252 if (!cursorfamilia->eof()) {
00253 mui_nomFamilia->setText(cursorfamilia->valor("nombrefamilia"));
00254 mui_descFamilia->setPlainText(cursorfamilia->valor("descfamilia"));
00255 mui_codCompletoFamilia->setText(cursorfamilia->valor("codigocompletofamilia"));
00256 mui_codFamilia->setText(cursorfamilia->valor("codigofamilia"));
00257
00258 if (cursorfamilia->valor("productofisicofamilia") == "t") {
00259 mui_productofamilia->setChecked(TRUE);
00260 } else {
00261 mui_serviciofamilia->setChecked(TRUE);
00262 }
00263 }
00264 delete cursorfamilia;
00266 dialogChanges_cargaInicial();
00267 _depura("END FamiliasView::mostrarplantilla", 0);
00268 }
00269
00270
00272
00275 bool FamiliasView::trataModificado() {
00277 if (dialogChanges_hayCambios()) {
00278 if (QMessageBox::warning(this,
00279 tr("Guardar familia"),
00280 tr("Desea guardar los cambios?"),
00281 QMessageBox::Ok,
00282 QMessageBox::Cancel) == QMessageBox::Ok) {
00283 on_mui_guardar_clicked();
00284 }
00285 return (TRUE);
00286 }
00287 return(FALSE);
00288 }
00289
00290
00293
00296 int FamiliasView::guardar() {
00297 _depura("FamiliasView::guardar", 0);
00298 QString prodfam;
00299 try {
00300 if (m_idfamilia == "") {
00301 mensajeInfo(tr("Debe seleccionar una familia"));
00302 return -1;
00303 }
00304 if (mui_productofamilia->isChecked()) {
00305 prodfam = " TRUE ";
00306 } else {
00307 prodfam = " FALSE ";
00308 }
00309 QString query = "UPDATE familia SET nombrefamilia = '" +
00310 companyact->sanearCadena(mui_nomFamilia->text()) + "', descfamilia = '" +
00311 companyact->sanearCadena(mui_descFamilia->toPlainText()) + "' , codigofamilia = '" +
00312 companyact->sanearCadena(mui_codFamilia->text()) + "', productofisicofamilia= " + prodfam + " WHERE idfamilia =" + m_idfamilia;
00313 int error = companyact->ejecuta(query);
00314 if (error) {
00315 throw -1;
00316 }
00319 QTreeWidgetItem *posicionCursor;
00320 posicionCursor = m_listFamilias->currentItem();
00321 posicionCursor->setSelected(TRUE);
00323 pintar(posicionCursor);
00324 dialogChanges_cargaInicial();
00325 _depura("END FamiliasView::guardar", 0);
00326 return 0;
00327 } catch (...) {
00328 mensajeInfo("Error al guardar la familia");
00329 return -1;
00330 }
00331 }
00332
00333
00335
00338 void FamiliasView::pintar(QTreeWidgetItem *it) {
00339 QString idfamilia = it->text(COL_IDFAMILIA);
00340 if (it) {
00341 cursor2 *cursoraux1 = companyact->cargacursor("SELECT * FROM familia WHERE idfamilia = " + idfamilia);
00342 if (!cursoraux1->eof()) {
00343 it->setText(COL_NOMFAMILIA, cursoraux1->valor("nombrefamilia"));
00344 it->setText(COL_CODFAMILIA, cursoraux1->valor("codigofamilia"));
00345 it->setText(COL_DESCFAMILIA, cursoraux1->valor("descfamilia"));
00346 it->setText(COL_IDFAMILIA, cursoraux1->valor("idfamilia"));
00347 it->setText(COL_CODCOMPLETOFAMILIA, cursoraux1->valor("codigocompletofamilia"));
00348 it->setText(COL_PRODUCTOFISICOFAMILIA, cursoraux1->valor("productofisicofamilia"));
00349 }
00350 delete cursoraux1;
00351 }
00352 }
00353
00354
00357
00359 void FamiliasView::on_mui_crear_clicked() {
00360 _depura("FamiliasView::on_mui_crear_clicked", 0);
00361 try {
00362 companyact->begin();
00364 trataModificado();
00365 QString padrefamilia;
00366 if (m_idfamilia != "") {
00367 padrefamilia = m_idfamilia;
00368 } else {
00369 padrefamilia = "NULL";
00370 }
00371
00372 QString query = "INSERT INTO familia (nombrefamilia, descfamilia, padrefamilia, codigofamilia) VALUES ('NUEVA FAMILIA', 'Descripcion de la familia', " + padrefamilia + ", 'XXX')";
00373
00374 int error = companyact->ejecuta(query);
00375 if (error) {
00376 throw -1;
00377 }
00378 cursor2 *cur = companyact->cargacursor("SELECT max(idfamilia) AS idfamilia FROM familia");
00379 companyact->commit();
00380 m_idfamilia = cur->valor("idfamilia");
00381 delete cur;
00382 pintar();
00383 _depura("END FamiliasView::on_mui_crear_clicked", 0);
00384 } catch (...) {
00385 companyact->rollback();
00386 mensajeInfo("Error al crear la familia");
00387 }
00388 }
00389
00390
00392
00394 void FamiliasView::on_mui_borrar_clicked() {
00395 _depura("FamiliasView::on_mui_borrar_clicked", 0);
00396
00397 int val = QMessageBox::question(this,
00398 tr("Borrar") + " " + windowTitle(),
00399 tr("Desea eliminar") + " " + windowTitle(),
00400 QMessageBox::Yes,
00401 QMessageBox::Cancel | QMessageBox::Escape | QMessageBox::Default);
00402
00403 if (val == QMessageBox::Yes) {
00404 if (!borrar()) {
00405 dialogChanges_cargaInicial();
00406 _depura(windowTitle() + " " + "borrado satisfactoriamente.", 10);
00407 } else {
00408 mensajeInfo(windowTitle() + tr("No se ha podido borrar"));
00409 }
00410 }
00411 _depura("END FamiliasView::on_mui_borrar_clicked", 0);
00412 }
00413
00414
00417
00420 int FamiliasView::borrar() {
00421 _depura("FamiliasView::borrar", 0);
00422 if (m_idfamilia == "") {
00423 mensajeInfo(tr("Debe seleccionar una familia"));
00424 return -1;
00425 }
00426 try {
00427 QString query = "DELETE FROM FAMILIA WHERE idfamilia = " + m_idfamilia;
00428 int error = companyact->ejecuta(query);
00429 if (error) {
00430 throw -1;
00431 }
00432 m_idfamilia = "";
00433 dialogChanges_cargaInicial();
00434 pintar();
00435 _depura("END FamiliasView::borrar", 0);
00436 } catch (...) {
00437 mensajeInfo("Error al borrar la familia");
00438 return -1;
00439 }
00440 return 0;
00441 }
00442
00443
00445
00447 void FamiliasView::on_mui_imprimir_clicked() {
00448 _depura("FamiliasView::on_mui_imprimir_clicked", 0);
00449
00450 QString archivo = confpr->valor(CONF_DIR_OPENREPORTS) + "familias.rml";
00451 QString archivod = confpr->valor(CONF_DIR_USER) + "familias.rml";
00452 QString archivologo = confpr->valor(CONF_DIR_OPENREPORTS) + "logo.jpg";
00453
00455 #ifdef WINDOWS
00456
00457 archivo = "copy " + archivo + " " + archivod;
00458 #else
00459
00460 archivo = "cp " + archivo + " " + archivod;
00461 #endif
00462
00463 system (archivo.toAscii().constData());
00465 #ifdef WINDOWS
00466
00467 archivologo = "copy " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00468 #else
00469
00470 archivologo = "cp " + archivologo + " " + confpr->valor(CONF_DIR_USER) + "logo.jpg";
00471 #endif
00472
00473 system(archivologo.toAscii().constData());
00474 QFile file;
00475 file.setFileName(archivod);
00476 file.open(QIODevice::ReadOnly);
00477 QTextStream stream(&file);
00478 QString buff = stream.readAll();
00479 file.close();
00480
00481 QString fitxersortidatxt = "";
00482
00484 fitxersortidatxt = "<blockTable style=\"tabla\" colWidths=\"3cm, 15cm\" repeatRows=\"1\">";
00485 fitxersortidatxt += "<tr>";
00486 fitxersortidatxt += " <td>" + tr("Codigo") + "</td>";
00487 fitxersortidatxt += " <td>" + tr("Nombre") + "</td>";
00488 fitxersortidatxt += "</tr>";
00489
00490 cursor2 *cur = companyact->cargacursor("SELECT * FROM familia ORDER BY codigocompletofamilia");
00491 while(!cur->eof()) {
00492 fitxersortidatxt += "<tr>";
00493 fitxersortidatxt += " <td>" + cur->valor("codigocompletofamilia") + "</td>";
00494 fitxersortidatxt += " <td>" + cur->valor("nombrefamilia") + "</td>";
00495 fitxersortidatxt += "</tr>";
00496 cur->siguienteregistro();
00497 }
00498 delete cur;
00499 fitxersortidatxt += "</blockTable>";
00500
00501 buff.replace("[story]", fitxersortidatxt);
00502
00503 if (file.open(QIODevice::WriteOnly)) {
00504 QTextStream stream(&file);
00505 stream << buff;
00506 file.close();
00507 }
00508 invocaPDF("familias");
00509 _depura("END FamiliasView::on_mui_imprimir_clicked", 0);
00510 }
00511
00512
00514
00516 void FamiliasView::on_mui_aceptar_clicked() {
00517 _depura("FamiliasView::on_mui_aceptar_clicked", 0);
00518 QTreeWidgetItem *it = m_listFamilias->currentItem();
00519 if (it) {
00520 m_idfamilia = it->text(COL_IDFAMILIA);
00521 } else {
00522 m_idfamilia = "";
00523 }
00524 FichaBf::on_mui_aceptar_clicked();
00525 _depura("END FamiliasView::on_mui_aceptar_clicked", 0);
00526 }
00527
00528
00530
00532 void FamiliasView::setModoConsulta() {
00533 m_modoConsulta = TRUE;
00534 }
00535
00536
00538
00540 void FamiliasView::setModoEdicion() {
00541 m_modoConsulta = FALSE;
00542 }
00543
00544
00545
00546