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.
 
 
 

214 lines
7.0 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, QString nomProduit, QDate dateAchat, QDate dateFinGarantie, QPixmap image, int indexMagasin, bool enSAV, QHash<QString, QByteArray> facturePDF, QHash<QString, QByteArray> garantiePDF) :
  14. QDialog(parent),
  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. else
  40. {
  41. QMessageBox::critical(this, "Erreur", "Impossible de récupérer la liste des magasins.\nLes avez-vous enregistrés ?");
  42. }
  43. // Remplissage des données
  44. ui->txtNom->setText(nomProduit);
  45. ui->dateAchat->setDate(dateAchat);
  46. ui->dateFinGarantie->setDate(dateFinGarantie);
  47. ui->comboMagasin->setCurrentIndex(indexMagasin);
  48. ui->checkSAV->setChecked(enSAV);
  49. ui->image->setPixmap(image);
  50. this->image = image;
  51. // Factures & garanties
  52. this->facturePDF = facturePDF;
  53. this->garantiePDF = garantiePDF;
  54. for(QString i : this->facturePDF.keys())
  55. {
  56. ui->listFactures->addItem(i);
  57. }
  58. for(QString i : this->garantiePDF.keys())
  59. {
  60. ui->listGaranties->addItem(i);
  61. }
  62. ui->txtNom->setFocus();
  63. ui->listFactures->setCurrentItem(ui->listFactures->item(0));
  64. ui->listGaranties->setCurrentItem(ui->listGaranties->item(0));
  65. }
  66. void InfosProduitDialog::on_btnImageParcourir_clicked()
  67. {
  68. QString filename = QFileDialog::getOpenFileName(this, "Sélectionnez une image", "", "Images supportées (*.bmp *.gif *.jpg *.jpeg *.png *.pbm *.pgm *.ppm *.xbm *.xpm)");
  69. if(filename != "")
  70. {
  71. image = QPixmap(filename);
  72. image = image.scaled(QSize(128, 128), Qt::KeepAspectRatio);
  73. ui->image->setPixmap(image);
  74. }
  75. }
  76. void InfosProduitDialog::on_btnImageSupprimer_clicked()
  77. {
  78. image = QPixmap(":/images/no-picture.jpg");
  79. ui->image->setPixmap(image);
  80. }
  81. void InfosProduitDialog::on_btnAjoutFacture_clicked()
  82. {
  83. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une facture", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  84. if(fileName != "")
  85. {
  86. QFile fichier(fileName);
  87. QFileInfo infoFile(fichier.fileName());
  88. fichier.open(QFile::ReadOnly);
  89. if(fichier.isReadable())
  90. {
  91. QByteArray contenuFichier = fichier.readAll();
  92. fichier.close();
  93. facturePDF.insert(infoFile.fileName(), contenuFichier);
  94. ui->listFactures->addItem(infoFile.fileName());
  95. }
  96. else
  97. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  98. }
  99. }
  100. void InfosProduitDialog::on_listFactures_currentRowChanged()
  101. {
  102. ui->btnSupprFacture->setEnabled(true);
  103. }
  104. void InfosProduitDialog::on_listFactures_itemDoubleClicked(QListWidgetItem *item)
  105. {
  106. QByteArray contentFile = facturePDF.value(item->text());
  107. QFile tempFile(QDir::tempPath()+"/"+item->text());
  108. tempFile.open(QFile::WriteOnly);
  109. tempFile.write(contentFile);
  110. tempFile.close();
  111. QDesktopServices::openUrl(QUrl(tempFile.fileName()));
  112. }
  113. void InfosProduitDialog::on_btnSupprFacture_clicked()
  114. {
  115. 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)
  116. {
  117. QListWidgetItem *item = ui->listFactures->selectedItems().value(0);
  118. facturePDF.remove(item->text());
  119. delete item;
  120. }
  121. if(ui->listFactures->count() == 0)
  122. ui->btnSupprFacture->setEnabled(false);
  123. }
  124. void InfosProduitDialog::on_btnAjoutGarantie_clicked()
  125. {
  126. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une fiche garantie", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  127. if(fileName != "")
  128. {
  129. QFile fichier(fileName);
  130. QFileInfo infoFile(fichier.fileName());
  131. fichier.open(QFile::ReadOnly);
  132. if(fichier.isReadable())
  133. {
  134. QByteArray contenuFichier = fichier.readAll();
  135. fichier.close();
  136. garantiePDF.insert(infoFile.fileName(), contenuFichier);
  137. ui->listGaranties->addItem(infoFile.fileName());
  138. }
  139. else
  140. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  141. }
  142. }
  143. void InfosProduitDialog::on_listGaranties_currentRowChanged()
  144. {
  145. ui->btnSupprGarantie->setEnabled(true);
  146. }
  147. void InfosProduitDialog::on_listGaranties_itemDoubleClicked(QListWidgetItem *item)
  148. {
  149. QByteArray contentFile = garantiePDF.value(item->text());
  150. QFile tempFile(QDir::tempPath()+"/"+item->text());
  151. tempFile.open(QFile::WriteOnly);
  152. tempFile.write(contentFile);
  153. tempFile.close();
  154. QDesktopServices::openUrl(QUrl(tempFile.fileName()));
  155. }
  156. void InfosProduitDialog::on_btnSupprGarantie_clicked()
  157. {
  158. 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)
  159. {
  160. QListWidgetItem *item = ui->listGaranties->selectedItems().value(0);
  161. garantiePDF.remove(item->text());
  162. delete item;
  163. }
  164. if(ui->listGaranties->count() == 0)
  165. ui->btnSupprGarantie->setEnabled(false);
  166. }
  167. // Bouton "OK"
  168. void InfosProduitDialog::on_buttonBox_accepted()
  169. {
  170. getParentItem()->setNomProduit(ui->txtNom->text());
  171. getParentItem()->setDateAchat(ui->dateAchat->date());
  172. getParentItem()->setDateFinGarantie(ui->dateFinGarantie->date());
  173. getParentItem()->setImage(this->image);
  174. getParentItem()->setMagasin(ui->comboMagasin->currentIndex());
  175. getParentItem()->setEnSAV(ui->checkSAV->isChecked());
  176. getParentItem()->setFactures(this->facturePDF);
  177. getParentItem()->setGaranties(this->garantiePDF);
  178. }
  179. ProduitItem* InfosProduitDialog::getParentItem()
  180. {
  181. return static_cast<ProduitItem*>(this->parentWidget);
  182. }
  183. InfosProduitDialog::~InfosProduitDialog()
  184. {
  185. delete ui;
  186. }