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.
 
 
 

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