Your warranties manager
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

infosproduitdialog.cpp 7.4 KiB

10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
10 år sedan
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  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. }