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.

infosproduitdialog.cpp 10 KiB

10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
10 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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. // On ajoute une ligne vide, conrrespondant à un magasin non reseigné. Il correspond à un indexMagasin de -1
  20. ui->comboMagasin->addItem("");
  21. // Récupération de la liste des magasins enregistrés
  22. QFile fichierMagasins(QDir::homePath()+"/deuchnord-hermes/manufacturers.xml");
  23. fichierMagasins.open(QFile::ReadOnly);
  24. if(fichierMagasins.isOpen())
  25. {
  26. QString contenuFichier = fichierMagasins.readAll();
  27. fichierMagasins.close();
  28. QDomDocument dom;
  29. dom.setContent(contenuFichier);
  30. QDomElement root = dom.firstChildElement();
  31. QDomElement manufacturer;
  32. QDomNode node = root.firstChild();
  33. while(!node.isNull())
  34. {
  35. manufacturer = node.toElement();
  36. if(manufacturer.tagName() == "manufacturer")
  37. ui->comboMagasin->addItem(manufacturer.firstChild().toText().data());
  38. node = node.nextSibling();
  39. }
  40. }
  41. // Remplissage des données
  42. ui->txtNom->setText(nomProduit);
  43. ui->dateAchat->setDate(dateAchat);
  44. if(dateFinGarantie != QDate(1970, 1, 1))
  45. ui->dateFinGarantie->setDate(dateFinGarantie);
  46. else
  47. {
  48. ui->dateFinGarantie->setDate(QDate::currentDate().addYears(1));
  49. ui->checkGarantieAVie->setChecked(true);
  50. }
  51. ui->comboMagasin->setCurrentIndex(indexMagasin+1);
  52. ui->checkSAV->setChecked(enSAV);
  53. ui->image->setPixmap(image);
  54. this->image = image;
  55. // Factures & garanties
  56. this->facturePDF = facturePDF;
  57. this->garantiePDF = garantiePDF;
  58. for(QString i : this->facturePDF.keys())
  59. {
  60. ui->listFactures->addItem(i);
  61. }
  62. for(QString i : this->garantiePDF.keys())
  63. {
  64. ui->listGaranties->addItem(i);
  65. }
  66. ui->txtNom->setFocus();
  67. ui->listFactures->setCurrentItem(ui->listFactures->item(0));
  68. ui->listGaranties->setCurrentItem(ui->listGaranties->item(0));
  69. }
  70. void InfosProduitDialog::on_btnImageParcourir_clicked()
  71. {
  72. QString filename = QFileDialog::getOpenFileName(this, "Sélectionnez une image", "", "Images supportées (*.bmp *.gif *.jpg *.jpeg *.png *.pbm *.pgm *.ppm *.xbm *.xpm)");
  73. if(filename != "")
  74. {
  75. image = QPixmap(filename);
  76. image = image.scaled(QSize(128, 128), Qt::KeepAspectRatio);
  77. ui->image->setPixmap(image);
  78. }
  79. }
  80. void InfosProduitDialog::on_btnImageSupprimer_clicked()
  81. {
  82. image = QPixmap(":/images/no-picture.jpg");
  83. ui->image->setPixmap(image);
  84. }
  85. void InfosProduitDialog::on_btnAjoutFacture_clicked()
  86. {
  87. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une facture", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  88. if(fileName != "")
  89. {
  90. QFile fichier(fileName);
  91. QFileInfo infoFile(fichier.fileName());
  92. fichier.open(QFile::ReadOnly);
  93. if(fichier.isReadable())
  94. {
  95. QByteArray contenuFichier = fichier.readAll();
  96. fichier.close();
  97. facturePDF.insert(infoFile.fileName(), contenuFichier);
  98. ui->listFactures->addItem(infoFile.fileName());
  99. }
  100. else
  101. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  102. }
  103. }
  104. void InfosProduitDialog::on_btnScannerFacture_clicked()
  105. {
  106. // Ne fonctionne que sous Linux pour le moment. Dépendances : libsane et imagemagick
  107. #ifdef Q_OS_LINUX
  108. ScannerDialog *dialog = new ScannerDialog(this);
  109. dialog->setModal(true);
  110. dialog->show();
  111. connect(dialog, SIGNAL(accepted()), SLOT(on_factureScanned()));
  112. #else
  113. QMessageBox::warning(this, "Fonction indisponible", "Cette fonction n'est pas disponible pour votre système actuellement.\nDésolé pour la gêne.");
  114. #endif
  115. }
  116. void InfosProduitDialog::on_factureScanned()
  117. {
  118. QString fileName = QDir::tempPath()+"/output.pdf";
  119. QFile::rename(fileName, QDir::tempPath()+"/Facture.pdf");
  120. fileName = QDir::tempPath()+"/Facture.pdf";
  121. QFile fichier(fileName);
  122. QFileInfo infoFile(fichier.fileName());
  123. fichier.open(QFile::ReadOnly);
  124. if(fichier.isReadable())
  125. {
  126. QByteArray contenuFichier = fichier.readAll();
  127. fichier.close();
  128. facturePDF.insert(infoFile.fileName(), contenuFichier);
  129. ui->listFactures->addItem(infoFile.fileName());
  130. }
  131. else
  132. QMessageBox::critical(this, "Erreur", "Une erreur s'est produite lors de l'ajout de votre document numérisé.\nVous pouvez toujours ajouter le document manuellement, il se trouve ici : "+fileName);
  133. }
  134. void InfosProduitDialog::on_listFactures_currentRowChanged()
  135. {
  136. ui->btnSupprFacture->setEnabled(true);
  137. }
  138. void InfosProduitDialog::on_listFactures_itemDoubleClicked(QListWidgetItem *item)
  139. {
  140. QByteArray contentFile = facturePDF.value(item->text());
  141. QFile tempFile(QDir::tempPath()+"/"+item->text());
  142. tempFile.open(QFile::WriteOnly);
  143. tempFile.write(contentFile);
  144. tempFile.close();
  145. QDesktopServices::openUrl(QUrl("file:///"+tempFile.fileName()));
  146. }
  147. void InfosProduitDialog::on_btnSupprFacture_clicked()
  148. {
  149. 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)
  150. {
  151. QListWidgetItem *item = ui->listFactures->selectedItems().value(0);
  152. facturePDF.remove(item->text());
  153. delete item;
  154. }
  155. if(ui->listFactures->count() == 0)
  156. ui->btnSupprFacture->setEnabled(false);
  157. }
  158. void InfosProduitDialog::on_btnAjoutGarantie_clicked()
  159. {
  160. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une fiche garantie", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  161. if(fileName != "")
  162. {
  163. QFile fichier(fileName);
  164. QFileInfo infoFile(fichier.fileName());
  165. fichier.open(QFile::ReadOnly);
  166. if(fichier.isReadable())
  167. {
  168. QByteArray contenuFichier = fichier.readAll();
  169. fichier.close();
  170. garantiePDF.insert(infoFile.fileName(), contenuFichier);
  171. ui->listGaranties->addItem(infoFile.fileName());
  172. }
  173. else
  174. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  175. }
  176. }
  177. void InfosProduitDialog::on_btnScannerGarantie_clicked()
  178. {
  179. // Ne fonctionne que sous Linux pour le moment. Dépendances : libsane et imagemagick
  180. #ifdef Q_OS_LINUX
  181. ScannerDialog *dialog = new ScannerDialog(this);
  182. dialog->setModal(true);
  183. dialog->show();
  184. connect(dialog, SIGNAL(accepted()), SLOT(on_garantieScanned()));
  185. #else
  186. QMessageBox::warning(this, "Fonction indisponible", "Cette fonction n'est pas disponible pour votre système actuellement.\nDésolé pour la gêne.");
  187. #endif
  188. }
  189. void InfosProduitDialog::on_garantieScanned()
  190. {
  191. QString fileName = QDir::tempPath()+"/output.pdf";
  192. QFile::rename(fileName, QDir::tempPath()+"/Garantie.pdf");
  193. fileName = QDir::tempPath()+"/Garantie.pdf";
  194. QFile fichier(fileName);
  195. QFileInfo infoFile(fichier.fileName());
  196. fichier.open(QFile::ReadOnly);
  197. if(fichier.isReadable())
  198. {
  199. QByteArray contenuFichier = fichier.readAll();
  200. fichier.close();
  201. garantiePDF.insert(infoFile.fileName(), contenuFichier);
  202. ui->listGaranties->addItem(infoFile.fileName());
  203. }
  204. else
  205. QMessageBox::critical(this, "Erreur", "Une erreur s'est produite lors de l'ajout de votre document numérisé.\nVous pouvez toujours ajouter le document manuellement, il se trouve ici : "+fileName);
  206. }
  207. void InfosProduitDialog::on_listGaranties_currentRowChanged()
  208. {
  209. ui->btnSupprGarantie->setEnabled(true);
  210. }
  211. void InfosProduitDialog::on_listGaranties_itemDoubleClicked(QListWidgetItem *item)
  212. {
  213. QByteArray contentFile = garantiePDF.value(item->text());
  214. QFile tempFile(QDir::tempPath()+"/"+item->text());
  215. tempFile.open(QFile::WriteOnly);
  216. tempFile.write(contentFile);
  217. tempFile.close();
  218. QDesktopServices::openUrl(QUrl("file:///"+tempFile.fileName()));
  219. }
  220. void InfosProduitDialog::on_btnSupprGarantie_clicked()
  221. {
  222. 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)
  223. {
  224. QListWidgetItem *item = ui->listGaranties->selectedItems().value(0);
  225. garantiePDF.remove(item->text());
  226. delete item;
  227. }
  228. if(ui->listGaranties->count() == 0)
  229. ui->btnSupprGarantie->setEnabled(false);
  230. }
  231. // Bouton "OK"
  232. void InfosProduitDialog::on_buttonBox_accepted()
  233. {
  234. getParentItem()->setNomProduit(ui->txtNom->text());
  235. getParentItem()->setDateAchat(ui->dateAchat->date());
  236. if(!ui->checkGarantieAVie->isChecked())
  237. getParentItem()->setDateFinGarantie(ui->dateFinGarantie->date());
  238. else
  239. getParentItem()->setDateFinGarantie(QDate(1970, 1, 1));
  240. getParentItem()->setImage(this->image);
  241. getParentItem()->setMagasin(ui->comboMagasin->currentIndex()-1);
  242. getParentItem()->setEnSAV(ui->checkSAV->isChecked());
  243. getParentItem()->setFactures(this->facturePDF);
  244. getParentItem()->setGaranties(this->garantiePDF);
  245. }
  246. ProduitItem* InfosProduitDialog::getParentItem()
  247. {
  248. return static_cast<ProduitItem*>(this->parentWidget);
  249. }
  250. InfosProduitDialog::~InfosProduitDialog()
  251. {
  252. delete ui;
  253. }
  254. void InfosProduitDialog::on_checkGarantieAVie_toggled(bool checked)
  255. {
  256. if(checked)
  257. ui->dateFinGarantie->setEnabled(false);
  258. else
  259. ui->dateFinGarantie->setEnabled(true);
  260. }