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