Your warranties manager
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

223 wiersze
6.2 KiB

  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. }