Your warranties manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

mainwindow.cpp 6.2 KiB

10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
10 jaren geleden
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. #include "mainwindow.h"
  2. #include "produititem.h"
  3. #include "gestionmagasinsdialog.h"
  4. #include "aboutdialog.h"
  5. #include "ui_mainwindow.h"
  6. #include <QSpacerItem>
  7. #include <QWidget>
  8. #include <QListWidgetItem>
  9. #include <QPixmap>
  10. #include <QSpacerItem>
  11. #include <QDate>
  12. #include <QMessageBox>
  13. #include <QListWidget>
  14. #include <QListWidgetItem>
  15. #include <QDir>
  16. #include <QFile>
  17. #include <QDataStream>
  18. #include <QList>
  19. #include <QDesktopServices>
  20. #include <QUrl>
  21. #include <QtXml/QDomDocument>
  22. MainWindow::MainWindow(QWidget *parent) :
  23. QMainWindow(parent),
  24. ui(new Ui::MainWindow)
  25. {
  26. ui->setupUi(this);
  27. version = "0.1";
  28. searchBox = new QLineEdit(this);
  29. searchBox->setPlaceholderText("Rechercher...");
  30. searchBox->setToolTip("Recherchez un produit à partir de son nom.\nLa casse n'est pas prise en compte.");
  31. searchBox->setClearButtonEnabled(true);
  32. connect(searchBox, SIGNAL(textChanged(QString)), SLOT(searchProduit(QString)));
  33. ui->mainToolBar->addSeparator();
  34. ui->mainToolBar->addWidget(searchBox);
  35. // Récupération de la configuration
  36. QFile saveFile(QDir::homePath()+"/hermes.hrms");
  37. QDataStream content(&saveFile);
  38. content.setVersion(QDataStream::Qt_5_0);
  39. if(saveFile.open(QFile::ReadOnly))
  40. {
  41. QList<ProduitInfo> listInfoProd;
  42. content >> listInfoProd;
  43. for(ProduitInfo i : listInfoProd)
  44. ajouterProduit(new ProduitItem(this, i.nomProduit, i.dateAchat, i.dateFinGarantie, i.image, i.indexMagasin, i.enSAV, i.factures, i.garanties));
  45. }
  46. if(ui->listeProduits->count() > 0)
  47. ui->listeProduits->item(0)->setSelected(true);
  48. else
  49. ui->actionSupprimerProduit->setEnabled(false);
  50. ui->statusBar->hide();
  51. }
  52. void MainWindow::searchProduit(QString search)
  53. {
  54. if(search != "")
  55. {
  56. for(int i = 0; i < ui->listeProduits->count(); i++)
  57. {
  58. ProduitItem* item = (ProduitItem*) ui->listeProduits->itemWidget(ui->listeProduits->item(i));
  59. ProduitInfo prod = item->getProduitInfo();
  60. // On cache les produits qui ne correspondent pas
  61. if(prod.nomProduit.contains(search, Qt::CaseInsensitive))
  62. ui->listeProduits->item(i)->setHidden(false);
  63. else
  64. ui->listeProduits->item(i)->setHidden(true);
  65. }
  66. }
  67. else
  68. {
  69. // Si la zone de recherche est vide, on affiche tout
  70. for(int i = 0; i < ui->listeProduits->count(); i++)
  71. ui->listeProduits->item(i)->setHidden(false);
  72. }
  73. }
  74. void MainWindow::on_actionNouveauProduit_triggered()
  75. {
  76. QFile fichierMagasins(QDir::homePath()+"/.deuchnord-hermes/manufacturers.xml");
  77. fichierMagasins.open(QFile::ReadOnly);
  78. int nbMagasins = 0;
  79. if(fichierMagasins.isOpen())
  80. {
  81. QString contenuFichier = fichierMagasins.readAll();
  82. fichierMagasins.close();
  83. QDomDocument dom;
  84. dom.setContent(contenuFichier);
  85. QDomElement root = dom.firstChildElement();
  86. QDomElement manufacturer;
  87. QDomNode node = root.firstChild();
  88. while(!node.isNull())
  89. {
  90. manufacturer = node.toElement();
  91. if(manufacturer.tagName() == "manufacturer")
  92. nbMagasins++;
  93. node = node.nextSibling();
  94. }
  95. }
  96. if(nbMagasins == 0)
  97. {
  98. QMessageBox::critical(this, "Erreur", "Aucun magasin ne semble avoir été enregistré.\nVeuillez les enregistrer avant d'entrer vos produits.");
  99. ui->actionGererMagasins->trigger();
  100. }
  101. else
  102. {
  103. ProduitItem *prod = new ProduitItem(this, "Nouveau produit", QDate::currentDate(), QDate::currentDate().addYears(1));
  104. prod->openDialog(true);
  105. QListWidgetItem* item = ajouterProduit(prod);
  106. item->setSelected(true);
  107. connect(prod, SIGNAL(deleteAsked()), SLOT(deleteAsked()));
  108. ui->actionSupprimerProduit->setEnabled(true);
  109. }
  110. }
  111. void MainWindow::deleteAsked()
  112. {
  113. on_actionSupprimerProduit_triggered(true);
  114. }
  115. void MainWindow::on_actionSupprimerProduit_triggered(bool dontAskConfirm)
  116. {
  117. if(ui->listeProduits->selectedItems().count() == 1)
  118. {
  119. QListWidgetItem *item = ui->listeProduits->selectedItems()[0];
  120. int answer;
  121. if(!dontAskConfirm)
  122. answer = QMessageBox::question(this, "Supprimer le produit", "Êtes-vous sûr de vouloir supprimer ce produit ?\nCette action n'est pas réversible.", QMessageBox::Yes | QMessageBox::No);
  123. else
  124. answer = QMessageBox::Yes;
  125. if(answer == QMessageBox::Yes)
  126. {
  127. ui->listeProduits->setCurrentRow(ui->listeProduits->row(item));
  128. ui->listeProduits->removeItemWidget(item);
  129. delete item;
  130. if(ui->listeProduits->count() == 0)
  131. ui->actionSupprimerProduit->setEnabled(false);
  132. }
  133. }
  134. }
  135. void MainWindow::on_actionGererMagasins_triggered()
  136. {
  137. GestionMagasinsDialog *dialog = new GestionMagasinsDialog(this);
  138. dialog->setModal(true);
  139. dialog->show();
  140. }
  141. QListWidgetItem* MainWindow::ajouterProduit(ProduitItem *produit)
  142. {
  143. QListWidgetItem *widgetItem = new QListWidgetItem();
  144. widgetItem->setSizeHint(QSize(0, 128));
  145. ui->listeProduits->addItem(widgetItem);
  146. ui->listeProduits->setItemWidget(widgetItem, produit);
  147. //ui->statusBar->showMessage(QString::number(ui->listeProduits->count())+" produits affichés.");
  148. return widgetItem;
  149. }
  150. void MainWindow::on_actionAPropos_triggered()
  151. {
  152. AboutDialog *dialog = new AboutDialog(this, version);
  153. dialog->setModal(true);
  154. dialog->show();
  155. }
  156. void MainWindow::on_actionAide_triggered()
  157. {
  158. QDesktopServices::openUrl(QUrl("http://hermes.deuchnord.tk/help/"));
  159. }
  160. Ui::MainWindow *MainWindow::getUI()
  161. {
  162. return ui;
  163. }
  164. MainWindow::~MainWindow()
  165. {
  166. // Enregistrement de la configuration
  167. QFile saveFile(QDir::homePath()+"/hermes.hrms");
  168. QDataStream content(&saveFile);
  169. content.setVersion(QDataStream::Qt_5_0);
  170. QList<ProduitInfo> listProd;
  171. if(saveFile.open(QFile::WriteOnly))
  172. {
  173. for(int i = 0; i < ui->listeProduits->count(); i++)
  174. {
  175. ProduitItem* item = (ProduitItem*) ui->listeProduits->itemWidget(ui->listeProduits->item(i));
  176. ProduitInfo prod = item->getProduitInfo();
  177. listProd << prod;
  178. }
  179. }
  180. content << listProd;
  181. saveFile.close();
  182. delete ui;
  183. }