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.
 
 
 

210 lines
6.9 KiB

  1. #include "infosproduitdialog.h"
  2. #include "ui_infosproduitdialog.h"
  3. #include <QDate>
  4. #include <QDir>
  5. #include <QFile>
  6. #include <QtXml/QDomDocument>
  7. #include <QMessageBox>
  8. #include <QFileDialog>
  9. #include <QFileInfo>
  10. #include <QDesktopServices>
  11. #include <QUrl>
  12. #include <QTransform>
  13. InfosProduitDialog::InfosProduitDialog(QWidget *parent, QWidget *mainWindow, QString nomProduit, QDate dateAchat, QDate dateFinGarantie, QPixmap image, int indexMagasin, bool enSAV, QHash<QString, QByteArray> facturePDF, QHash<QString, QByteArray> garantiePDF) :
  14. QDialog(mainWindow),
  15. ui(new Ui::InfosProduitDialog)
  16. {
  17. ui->setupUi(this);
  18. parentWidget = parent;
  19. // Récupération de la liste des magasins enregistrés
  20. QFile fichierMagasins(QDir::homePath()+"/.deuchnord-hermes/manufacturers.xml");
  21. fichierMagasins.open(QFile::ReadOnly);
  22. if(fichierMagasins.isOpen())
  23. {
  24. QString contenuFichier = fichierMagasins.readAll();
  25. fichierMagasins.close();
  26. QDomDocument dom;
  27. dom.setContent(contenuFichier);
  28. QDomElement root = dom.firstChildElement();
  29. QDomElement manufacturer;
  30. QDomNode node = root.firstChild();
  31. while(!node.isNull())
  32. {
  33. manufacturer = node.toElement();
  34. if(manufacturer.tagName() == "manufacturer")
  35. ui->comboMagasin->addItem(manufacturer.firstChild().toText().data());
  36. node = node.nextSibling();
  37. }
  38. }
  39. // Remplissage des données
  40. ui->txtNom->setText(nomProduit);
  41. ui->dateAchat->setDate(dateAchat);
  42. ui->dateFinGarantie->setDate(dateFinGarantie);
  43. ui->comboMagasin->setCurrentIndex(indexMagasin);
  44. ui->checkSAV->setChecked(enSAV);
  45. ui->image->setPixmap(image);
  46. this->image = image;
  47. // Factures & garanties
  48. this->facturePDF = facturePDF;
  49. this->garantiePDF = garantiePDF;
  50. for(QString i : this->facturePDF.keys())
  51. {
  52. ui->listFactures->addItem(i);
  53. }
  54. for(QString i : this->garantiePDF.keys())
  55. {
  56. ui->listGaranties->addItem(i);
  57. }
  58. ui->txtNom->setFocus();
  59. ui->listFactures->setCurrentItem(ui->listFactures->item(0));
  60. ui->listGaranties->setCurrentItem(ui->listGaranties->item(0));
  61. }
  62. void InfosProduitDialog::on_btnImageParcourir_clicked()
  63. {
  64. QString filename = QFileDialog::getOpenFileName(this, "Sélectionnez une image", "", "Images supportées (*.bmp *.gif *.jpg *.jpeg *.png *.pbm *.pgm *.ppm *.xbm *.xpm)");
  65. if(filename != "")
  66. {
  67. image = QPixmap(filename);
  68. image = image.scaled(QSize(128, 128), Qt::KeepAspectRatio);
  69. ui->image->setPixmap(image);
  70. }
  71. }
  72. void InfosProduitDialog::on_btnImageSupprimer_clicked()
  73. {
  74. image = QPixmap(":/images/no-picture.jpg");
  75. ui->image->setPixmap(image);
  76. }
  77. void InfosProduitDialog::on_btnAjoutFacture_clicked()
  78. {
  79. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une facture", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  80. if(fileName != "")
  81. {
  82. QFile fichier(fileName);
  83. QFileInfo infoFile(fichier.fileName());
  84. fichier.open(QFile::ReadOnly);
  85. if(fichier.isReadable())
  86. {
  87. QByteArray contenuFichier = fichier.readAll();
  88. fichier.close();
  89. facturePDF.insert(infoFile.fileName(), contenuFichier);
  90. ui->listFactures->addItem(infoFile.fileName());
  91. }
  92. else
  93. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  94. }
  95. }
  96. void InfosProduitDialog::on_listFactures_currentRowChanged()
  97. {
  98. ui->btnSupprFacture->setEnabled(true);
  99. }
  100. void InfosProduitDialog::on_listFactures_itemDoubleClicked(QListWidgetItem *item)
  101. {
  102. QByteArray contentFile = facturePDF.value(item->text());
  103. QFile tempFile(QDir::tempPath()+"/"+item->text());
  104. tempFile.open(QFile::WriteOnly);
  105. tempFile.write(contentFile);
  106. tempFile.close();
  107. QDesktopServices::openUrl(QUrl("file:///"+tempFile.fileName()));
  108. }
  109. void InfosProduitDialog::on_btnSupprFacture_clicked()
  110. {
  111. if(QMessageBox::question(this, "Hermès", "Voulez-vous vraiment supprimer cette facture ?\nCette action n'est pas réversible.", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
  112. {
  113. QListWidgetItem *item = ui->listFactures->selectedItems().value(0);
  114. facturePDF.remove(item->text());
  115. delete item;
  116. }
  117. if(ui->listFactures->count() == 0)
  118. ui->btnSupprFacture->setEnabled(false);
  119. }
  120. void InfosProduitDialog::on_btnAjoutGarantie_clicked()
  121. {
  122. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une fiche garantie", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  123. if(fileName != "")
  124. {
  125. QFile fichier(fileName);
  126. QFileInfo infoFile(fichier.fileName());
  127. fichier.open(QFile::ReadOnly);
  128. if(fichier.isReadable())
  129. {
  130. QByteArray contenuFichier = fichier.readAll();
  131. fichier.close();
  132. garantiePDF.insert(infoFile.fileName(), contenuFichier);
  133. ui->listGaranties->addItem(infoFile.fileName());
  134. }
  135. else
  136. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  137. }
  138. }
  139. void InfosProduitDialog::on_listGaranties_currentRowChanged()
  140. {
  141. ui->btnSupprGarantie->setEnabled(true);
  142. }
  143. void InfosProduitDialog::on_listGaranties_itemDoubleClicked(QListWidgetItem *item)
  144. {
  145. QByteArray contentFile = garantiePDF.value(item->text());
  146. QFile tempFile(QDir::tempPath()+"/"+item->text());
  147. tempFile.open(QFile::WriteOnly);
  148. tempFile.write(contentFile);
  149. tempFile.close();
  150. QDesktopServices::openUrl(QUrl("file:///"+tempFile.fileName()));
  151. }
  152. void InfosProduitDialog::on_btnSupprGarantie_clicked()
  153. {
  154. if(QMessageBox::question(this, "Hermès", "Voulez-vous vraiment supprimer cette fiche garantie ?\nCette action n'est pas réversible.", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
  155. {
  156. QListWidgetItem *item = ui->listGaranties->selectedItems().value(0);
  157. garantiePDF.remove(item->text());
  158. delete item;
  159. }
  160. if(ui->listGaranties->count() == 0)
  161. ui->btnSupprGarantie->setEnabled(false);
  162. }
  163. // Bouton "OK"
  164. void InfosProduitDialog::on_buttonBox_accepted()
  165. {
  166. getParentItem()->setNomProduit(ui->txtNom->text());
  167. getParentItem()->setDateAchat(ui->dateAchat->date());
  168. getParentItem()->setDateFinGarantie(ui->dateFinGarantie->date());
  169. getParentItem()->setImage(this->image);
  170. getParentItem()->setMagasin(ui->comboMagasin->currentIndex());
  171. getParentItem()->setEnSAV(ui->checkSAV->isChecked());
  172. getParentItem()->setFactures(this->facturePDF);
  173. getParentItem()->setGaranties(this->garantiePDF);
  174. }
  175. ProduitItem* InfosProduitDialog::getParentItem()
  176. {
  177. return static_cast<ProduitItem*>(this->parentWidget);
  178. }
  179. InfosProduitDialog::~InfosProduitDialog()
  180. {
  181. delete ui;
  182. }