Your warranties manager
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

infosproduitdialog.cpp 9.9 KiB

před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
před 10 roky
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  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. #if !defined Q_OS_LINUX
  70. // Le bouton ne sera pas disponible sur les systèmes autres que GNU/Linux
  71. ui->btnScannerFacture->hide();
  72. ui->btnScannerGarantie->hide();
  73. #endif
  74. }
  75. void InfosProduitDialog::on_btnImageParcourir_clicked()
  76. {
  77. QString filename = QFileDialog::getOpenFileName(this, "Sélectionnez une image", "", "Images supportées (*.bmp *.gif *.jpg *.jpeg *.png *.pbm *.pgm *.ppm *.xbm *.xpm)");
  78. if(filename != "")
  79. {
  80. image = QPixmap(filename);
  81. image = image.scaled(QSize(128, 128), Qt::KeepAspectRatio);
  82. ui->image->setPixmap(image);
  83. }
  84. }
  85. void InfosProduitDialog::on_btnImageSupprimer_clicked()
  86. {
  87. image = QPixmap(":/images/no-picture.jpg");
  88. ui->image->setPixmap(image);
  89. }
  90. void InfosProduitDialog::on_btnAjoutFacture_clicked()
  91. {
  92. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une facture", "", "Fichiers supportés (*.pdf *.jpg *.jpeg *.png);;Fichiers PDF (*.pdf);;Images (*.jpg *.jpeg *.png)");
  93. if(fileName != "")
  94. {
  95. QFile fichier(fileName);
  96. QFileInfo infoFile(fichier.fileName());
  97. fichier.open(QFile::ReadOnly);
  98. if(fichier.isReadable())
  99. {
  100. QByteArray contenuFichier = fichier.readAll();
  101. fichier.close();
  102. facturePDF.insert(infoFile.fileName(), contenuFichier);
  103. ui->listFactures->addItem(infoFile.fileName());
  104. }
  105. else
  106. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  107. }
  108. }
  109. void InfosProduitDialog::on_btnScannerFacture_clicked()
  110. {
  111. // Ne fonctionne que sous Linux pour le moment. Dépendances : sane et imagemagick
  112. ScannerDialog *dialog = new ScannerDialog(this);
  113. dialog->setModal(true);
  114. dialog->show();
  115. connect(dialog, SIGNAL(accepted()), SLOT(on_factureScanned()));
  116. }
  117. void InfosProduitDialog::on_factureScanned()
  118. {
  119. QString fileName = QDir::tempPath()+"/output.pdf";
  120. QFile::rename(fileName, QDir::tempPath()+"/Facture.pdf");
  121. fileName = QDir::tempPath()+"/Facture.pdf";
  122. QFile fichier(fileName);
  123. QFileInfo infoFile(fichier.fileName());
  124. fichier.open(QFile::ReadOnly);
  125. if(fichier.isReadable())
  126. {
  127. QByteArray contenuFichier = fichier.readAll();
  128. fichier.close();
  129. facturePDF.insert(infoFile.fileName(), contenuFichier);
  130. ui->listFactures->addItem(infoFile.fileName());
  131. }
  132. else
  133. 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);
  134. }
  135. void InfosProduitDialog::on_listFactures_currentRowChanged()
  136. {
  137. ui->btnSupprFacture->setEnabled(true);
  138. }
  139. void InfosProduitDialog::on_listFactures_itemDoubleClicked(QListWidgetItem *item)
  140. {
  141. QByteArray contentFile = facturePDF.value(item->text());
  142. QFile tempFile(QDir::tempPath()+"/"+item->text());
  143. tempFile.open(QFile::WriteOnly);
  144. tempFile.write(contentFile);
  145. tempFile.close();
  146. QDesktopServices::openUrl(QUrl("file:///"+tempFile.fileName()));
  147. }
  148. void InfosProduitDialog::on_btnSupprFacture_clicked()
  149. {
  150. 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)
  151. {
  152. QListWidgetItem *item = ui->listFactures->selectedItems().value(0);
  153. facturePDF.remove(item->text());
  154. delete item;
  155. }
  156. if(ui->listFactures->count() == 0)
  157. ui->btnSupprFacture->setEnabled(false);
  158. }
  159. void InfosProduitDialog::on_btnAjoutGarantie_clicked()
  160. {
  161. QString fileName = QFileDialog::getOpenFileName(this, "Sélectionnez une fiche garantie", "", "Fichiers PDF (*.pdf);;Image (*.jpg *.jpeg *.png)");
  162. if(fileName != "")
  163. {
  164. QFile fichier(fileName);
  165. QFileInfo infoFile(fichier.fileName());
  166. fichier.open(QFile::ReadOnly);
  167. if(fichier.isReadable())
  168. {
  169. QByteArray contenuFichier = fichier.readAll();
  170. fichier.close();
  171. garantiePDF.insert(infoFile.fileName(), contenuFichier);
  172. ui->listGaranties->addItem(infoFile.fileName());
  173. }
  174. else
  175. QMessageBox::critical(this, "Erreur", "Impossible de lire le fichier "+fichier.fileName()+"\nVérifiez qu'il est bien accessible en lecture et réessayez.");
  176. }
  177. }
  178. void InfosProduitDialog::on_btnScannerGarantie_clicked()
  179. {
  180. // Ne fonctionne que sous Linux pour le moment. Dépendances : libsane et imagemagick
  181. ScannerDialog *dialog = new ScannerDialog(this);
  182. dialog->setModal(true);
  183. dialog->show();
  184. connect(dialog, SIGNAL(accepted()), SLOT(on_garantieScanned()));
  185. }
  186. void InfosProduitDialog::on_garantieScanned()
  187. {
  188. QString fileName = QDir::tempPath()+"/output.pdf";
  189. QFile::rename(fileName, QDir::tempPath()+"/Garantie.pdf");
  190. fileName = QDir::tempPath()+"/Garantie.pdf";
  191. QFile fichier(fileName);
  192. QFileInfo infoFile(fichier.fileName());
  193. fichier.open(QFile::ReadOnly);
  194. if(fichier.isReadable())
  195. {
  196. QByteArray contenuFichier = fichier.readAll();
  197. fichier.close();
  198. garantiePDF.insert(infoFile.fileName(), contenuFichier);
  199. ui->listGaranties->addItem(infoFile.fileName());
  200. }
  201. else
  202. 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);
  203. }
  204. void InfosProduitDialog::on_listGaranties_currentRowChanged()
  205. {
  206. ui->btnSupprGarantie->setEnabled(true);
  207. }
  208. void InfosProduitDialog::on_listGaranties_itemDoubleClicked(QListWidgetItem *item)
  209. {
  210. QByteArray contentFile = garantiePDF.value(item->text());
  211. QFile tempFile(QDir::tempPath()+"/"+item->text());
  212. tempFile.open(QFile::WriteOnly);
  213. tempFile.write(contentFile);
  214. tempFile.close();
  215. QDesktopServices::openUrl(QUrl("file:///"+tempFile.fileName()));
  216. }
  217. void InfosProduitDialog::on_btnSupprGarantie_clicked()
  218. {
  219. 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)
  220. {
  221. QListWidgetItem *item = ui->listGaranties->selectedItems().value(0);
  222. garantiePDF.remove(item->text());
  223. delete item;
  224. }
  225. if(ui->listGaranties->count() == 0)
  226. ui->btnSupprGarantie->setEnabled(false);
  227. }
  228. // Bouton "OK"
  229. void InfosProduitDialog::on_buttonBox_accepted()
  230. {
  231. getParentItem()->setNomProduit(ui->txtNom->text());
  232. getParentItem()->setDateAchat(ui->dateAchat->date());
  233. if(!ui->checkGarantieAVie->isChecked())
  234. getParentItem()->setDateFinGarantie(ui->dateFinGarantie->date());
  235. else
  236. getParentItem()->setDateFinGarantie(QDate(1970, 1, 1));
  237. getParentItem()->setImage(this->image);
  238. getParentItem()->setMagasin(ui->comboMagasin->currentIndex()-1);
  239. getParentItem()->setEnSAV(ui->checkSAV->isChecked());
  240. getParentItem()->setFactures(this->facturePDF);
  241. getParentItem()->setGaranties(this->garantiePDF);
  242. }
  243. ProduitItem* InfosProduitDialog::getParentItem()
  244. {
  245. return static_cast<ProduitItem*>(this->parentWidget);
  246. }
  247. InfosProduitDialog::~InfosProduitDialog()
  248. {
  249. delete ui;
  250. }
  251. void InfosProduitDialog::on_checkGarantieAVie_toggled(bool checked)
  252. {
  253. if(checked)
  254. ui->dateFinGarantie->setEnabled(false);
  255. else
  256. ui->dateFinGarantie->setEnabled(true);
  257. }