Your warranties manager
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

infosproduitdialog.cpp 9.9 KiB

pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
pirms 10 gadiem
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. }