Projet e-stok  0.2
BTS SNIR LaSalle Avignon 2020
Supervision.cpp
Aller à la documentation de ce fichier.
1 #include "Supervision.h"
2 #include "Ihm.h"
3 #include "Bdd.h"
4 #include "CodeBarre.h"
5 #include "Communication.h"
6 #include "Rfid.h"
7 #include "Utilisateur.h"
8 #include "Armoire.h"
9 #include "Article.h"
10 #include "Communication.h"
11 #include "Casier.h"
12 #include <QDate>
13 #include <QTime>
14 #include <QMessageBox>
15 #include <QCryptographicHash>
16 
36 Supervision::Supervision(Ihm *parent) : QObject(parent), ihm(parent)
37 {
38  // Instancie les objets dont la classe Supervision coordonne les actions
40  bdd->connecter();
41  codeBarre = new CodeBarre(this);
42  //portSerie = new Communication(this);
43  rfid = new Rfid(this);
44  utilisateur = nullptr;
45  armoire = new Armoire(this);
46  communication = new Communication(this);
47 
49 
51 
52 }
53 
60 {
61 
62 }
63 
70 {
71  if(utilisateur != nullptr)
72  {
73  delete utilisateur;
74  utilisateur = nullptr;
75  }
76 }
77 
84 {
85  QString nbCasiers = armoire->getNbCasiers();
86  qDebug() << Q_FUNC_INFO << "nbCasiers" << nbCasiers;
87  if(!nbCasiers.isEmpty())
88  {
89  for(int i=0; i < nbCasiers.toInt(); i++)
90  {
91  Casier* casier = new Casier(i+1, ihm);
92  connect(casier, SIGNAL(estOuvert(int,bool)), ihm, SLOT(gererPageScanObjet(int,bool)));
93  casiers.push_back(casier);
94  }
95  }
97 }
98 
106 {
107  QStringList informationsArmoire = armoire->getInformations();
108 
109  return informationsArmoire;
110 }
111 
117 QVector<Casier*> Supervision::getCasiers()
118 {
119  return casiers;
120 }
121 
129 {
130  QString requeteBDD = "SELECT * from Utilisateur where Badge = '" + badge + "';";
131  QStringList donnees = recupererDonneesUtilisateur(requeteBDD);
132  if(verifierDonneesUtilisateur(donnees))
133  {
134  connecterUtilisateur(donnees);
135  }
136 }
137 
145 void Supervision::verifierAuthentificationIdentifiant(QString identifiant, QString motDePasse)
146 {
147  this->crypterMotDepasse(motDePasse);
148 
149  #ifdef CHANGE_PASSWORD_BEFORE
150  QString requete = QString("UPDATE Utilisateur SET MotDePasse='%1' WHERE Identifiant='%2'").arg(motDePasse).arg(identifiant);
151  bdd->executer(requete);
152  #endif
153 
154  QString requeteBDD = "SELECT * from Utilisateur where Identifiant = '" + identifiant + "' && MotDePasse = '" + motDePasse + "';";
155  QStringList donnees = recupererDonneesUtilisateur(requeteBDD);
156  if(verifierDonneesUtilisateur(donnees))
157  {
158  connecterUtilisateur(donnees);
159  }
160 }
161 
169 QStringList Supervision::recupererDonneesUtilisateur(QString requeteBDD)
170 {
171  QStringList donnees;
172  bdd->recuperer(requeteBDD, donnees);
173 
174  return donnees;
175 }
176 
183 void Supervision::crypterMotDepasse(QString &motDePasse)
184 {
185  if(!motDePasse.isEmpty())
186  {
187  motDePasse = QString(QCryptographicHash::hash((motDePasse).toLatin1(), QCryptographicHash::Md5).toHex());
188  }
189 
190  #ifdef DEBUG_SUPERVISION
191  qDebug() << Q_FUNC_INFO << "Mot de passe crypte" << motDePasse;
192  #endif
193 }
194 
202 bool Supervision::verifierDateValidite(QString stringDateValidite)
203 {
204  // Verification de la date de validité
205  QDate dateValidite = dateValidite.fromString(stringDateValidite,"yyyy-MM-dd");
206  QDate dateActuelle = QDate::currentDate();
207 
208  #ifdef DEBUG_SUPERVISION
209  qDebug() << "Date actuelle" << dateActuelle;
210  qDebug() << "Date validité" << dateValidite;
211  #endif
212 
213  if(dateActuelle <= dateValidite)
214  {
215  return true;
216  }
217 
218  return false;
219 }
220 
228 bool Supervision::verifierDonneesUtilisateur(QStringList &donnees)
229 {
230  #ifdef DEBUG_SUPERVISON
231  qDebug() << Q_FUNC_INFO << donnees;
232  #endif
233 
234  if(!donnees.isEmpty())
235  {
237  {
238  emit reponseDemandeDeConnexion(true, "");
239  return true;
240  }
241  else
242  {
244  return false;
245  }
246  }
247  else
248  {
250  return false;
251  }
252 }
253 
260 void Supervision::connecterUtilisateur(QStringList &donnees)
261 {
262  if(utilisateur != nullptr)
263  {
265  }
266  utilisateur = new Utilisateur(donnees, this);
267  #ifdef DEBUG_SUPERVISION
268  qDebug() << Q_FUNC_INFO << utilisateur->getIdentifiantUtilisateur() << "authentifié";
269  #endif
270 
271  #ifdef SUPERVISION_TEST_POIDS
272  QString trameTest = "CASIERS;3;2;1745";
273  traiterTramePoids(trameTest);
274  #endif
275 }
276 
283 {
284  // Armoire
285  connect(armoire, SIGNAL(informationsArmoire(QStringList)), ihm, SLOT(afficherInformationsArmoire(QStringList)));
286 
287  // Authentification Badge
288  connect(ihm, SIGNAL(badgeDetecte(QString)), rfid, SLOT(traiterBadge(QString)));
289  connect(rfid, SIGNAL(erreurBadgeInvalide(QString)), ihm, SLOT(afficherErreurBadge(QString)));
290  connect(rfid, SIGNAL(nouveauUidBadge(QString)), this, SLOT(verifierAuthentificationBadge(QString)));
291 
292  // Authentification Identifiant
293  connect(ihm, SIGNAL(identifiantDetecte(QString, QString)), this, SLOT(verifierAuthentificationIdentifiant(QString, QString)));
294 
295  // Authentification Utilisateur
296  connect(this, SIGNAL(reponseDemandeDeConnexion(bool,QString)), ihm, SLOT(traiterDemandeDeConnexion(bool,QString)));
297 
298  // Article
299  connect(communication, SIGNAL(envoieTramePoids(QString)), this, SLOT(traiterTramePoids(QString)));
300  connect(ihm, SIGNAL(rechercheArticle(QString)), this, SLOT(rechercherArticle(QString)));
301  connect(this, SIGNAL(articlesTrouves(QVector<QStringList>)), ihm, SLOT(mettreAJourListeArticles(QVector<QStringList>)));
302  connect(ihm, SIGNAL(articleSelectionne(QString)), this, SLOT(selectionnerArticle(QString)));
303  connect(this, SIGNAL(donneesArticleSelectionne(QStringList)), ihm, SLOT(afficherDonneesArticleSelectionne(QStringList)));
304  connect(this, SIGNAL(donneesArticleSelectionne(QVector<QStringList>)), ihm, SLOT(afficherDonneesArticleSelectionne(QVector<QStringList>)));
305  connect(this, SIGNAL(erreurDepassementQuantite()), ihm, SLOT(afficherErreurDepassementQuantite()));
306 
307  // CodeBarre
308  connect(ihm, SIGNAL(boutonPrendre(bool)), codeBarre, SLOT(prendreOuAjouter(bool)));
309  connect(ihm, SIGNAL(boutonAjouter(bool)), codeBarre, SLOT(prendreOuAjouter(bool)));
310  connect(ihm, SIGNAL(codeBarreObjetScanner(QString)), codeBarre, SLOT(traiterCodeBarre(QString)));
311  connect(this, SIGNAL(erreurAucunArticleAvecCodeBarre()), ihm, SLOT(afficherErreurPasArticleAvecCodeBarre()));
312  connect(codeBarre, SIGNAL(prendreObjet(QString)), this, SLOT(prendreObjetAvecCodeBarre(QString)));
313  connect(codeBarre, SIGNAL(ajouterObjet(QString)), this, SLOT(ajouterObjetAvecCodeBarre(QString)));
314  connect(ihm, SIGNAL(envoyerQuantite(int)), codeBarre, SLOT(changerQuantiteObjet(int)));
315  connect(this, SIGNAL(erreurArticleInsuffisants()), ihm, SLOT(afficherErreurArticleInsuffisants()));
316  connect(this, SIGNAL(erreurQuantiteTropElevee()), ihm, SLOT(afficherErreurDepassementQuantite()));
317  connect(this, SIGNAL(erreurAucunCasierOuvert()), ihm, SLOT(afficherErreurAucunCasierOuvert()));
318 }
319 
326 void Supervision::rechercherArticle(QString recherche)
327 {
328  QString requete = "SELECT Stock.NumeroCasier, Article.idType, Article.Nom, Stock.Quantite, Stock.Disponible, Article.Designation FROM Stock INNER JOIN Article ON Stock.idArticle = Article.idArticle WHERE Article.Nom LIKE '%" + recherche + "%' OR Article.Code LIKE '%" + recherche + "%' OR Article.Designation LIKE '%" + recherche + "%' ORDER BY Stock.NumeroCasier ASC";
329 
330  QVector<QStringList> listeArticlesTrouves;
331  bdd->recuperer(requete, listeArticlesTrouves);
332 
333  emit articlesTrouves(listeArticlesTrouves);
334 }
335 
341 void Supervision::selectionnerArticle(QString nomArticle)
342 {
343  #ifdef DEBUG_SUPERVISION
344  qDebug() << Q_FUNC_INFO << "Nom article" << nomArticle;
345  #endif
346 
347  Article *article = new Article(this);
348  QVector<QStringList> donneesArticle;
349  QStringList donnees;
350 
351  unsigned int nombreCasiers = Article::recupererNombreCasiersPourNomArticle(nomArticle);
352  #ifdef DEBUG_SUPERVISION
353  qDebug() << Q_FUNC_INFO << "nombreCasiers" << nombreCasiers;
354  #endif
355 
356  if(nombreCasiers > 1)
357  {
358  QVector<QString> numeroDesCasiers;
359 
360  numeroDesCasiers = Article::recupererNumeroCasierPourNomArticle(nomArticle);
361 
362  for(int i = 0; i < numeroDesCasiers.size(); i++)
363  {
364  article->recupererDonneesArticleParNumeroCasier(numeroDesCasiers[i]);
365  ajouterDonneesArticle(article, donneesArticle, donnees);
366  }
367 
368  if(!donneesArticle.isEmpty())
369  {
370  emit donneesArticleSelectionne(donneesArticle);
371  }
372  }
373  else
374  {
375  article->recupererDonneesArticleParNom(nomArticle);
376  ajouterDonneesArticle(article, donneesArticle, donnees);
377 
378  if(!donneesArticle.isEmpty())
379  {
380  emit donneesArticleSelectionne(donneesArticle.at(0));
381  }
382  }
383 }
384 
392 {
393  #ifdef DEBUG_SUPERVISION
394  qDebug() << Q_FUNC_INFO << trame;
395  #endif
396 
397  QString numCasier = extraireNumeroCasier(trame);
398 
399  Article *article = new Article(this);
400  if(article->recupererDonneesArticleParNumeroCasier(numCasier))
401  {
402  #ifdef DEBUG_SUPERVISION
403  qDebug() << Q_FUNC_INFO << "Article" << article->get(TABLE_ARTICLE_NOM_ARTICLE) << article->get(TABLE_ARTICLE_QUANTITE) << article->get(TABLE_ARTICLE_DISPONIBLE);
404  #endif
405 
406  int nombreArticle = compter(article->get(TABLE_ARTICLE_POIDS), extrairePoids(trame), article->get(TABLE_ARTICLE_TARE));
407 
408  QString strArticleQuantite = article->get(TABLE_ARTICLE_QUANTITE);
409 
410  int articleQuantite = strArticleQuantite.toInt();
411 
412  if(nombreArticle > articleQuantite)
413  {
415  }
416  else
417  {
418  article->mettreAJourQuantite(QString::number(nombreArticle));
419 
420  QString idUtilisateur = utilisateur->getIdUtilisateur();
421  QString idStock = article->get(TABLE_ARTICLE_ID_STOCK);
422  QString idAction = QString::number(comptageAutomatiqueAjouterOuPrendre(article->get(TABLE_ARTICLE_DISPONIBLE), nombreArticle));
423  QString quantite = QString::number(comptageAutomatiqueQuantite(article->get(TABLE_ARTICLE_DISPONIBLE), nombreArticle));
424 
425  mettreAJourMouvement(idUtilisateur, idStock, idAction, quantite);
426  }
427  }
428  else
429  {
430  #ifdef DEBUG_SUPERVISION
431  qDebug() << Q_FUNC_INFO << "Article introuvable !";
432  #endif
433  }
434 }
435 
443 unsigned int Supervision::comptageAutomatiqueAjouterOuPrendre(QString nbArticleAvant, int nbArticleApres)
444 {
445  int intNbArticleAvant = nbArticleAvant.toInt();
446 
447  if(intNbArticleAvant > nbArticleApres)
448  {
449  return 2;
450  }
451  else
452  {
453  return 1;
454  }
455 }
456 
464 unsigned int Supervision::comptageAutomatiqueQuantite(QString nbArticleAvant, int nbArticleApres)
465 {
466  int intNbArticleAvant = nbArticleAvant.toInt();
467 
468  if(intNbArticleAvant > nbArticleApres)
469  {
470  return intNbArticleAvant - nbArticleApres;
471  }
472  else
473  {
474  return nbArticleApres - intNbArticleAvant;
475  }
476 }
477 
485 QString Supervision::extrairePoids(QString trame)
486 {
487  QString poids = trame.section(';',3,3);
488 
489  #ifdef DEBUG_SUPERVISION
490  qDebug() << Q_FUNC_INFO << "poids:" << poids;
491  #endif
492 
493  return poids;
494 }
495 
503 QString Supervision::extraireNumeroCasier(QString trame)
504 {
505  QString numCasier = trame.section(';',2,2);
506 
507  #ifdef DEBUG_SUPERVISION
508  qDebug() << Q_FUNC_INFO << "numCasier:" << numCasier;
509  #endif
510 
511  return numCasier;
512 }
513 
522 int Supervision::compter(QString poidsArticle, QString poidsTotal, QString tare)
523 {
524  double doublePoidsArticle = poidsArticle.toDouble();
525  double doublePoidsTotal = poidsTotal.toDouble();
526  double doubleTare = tare.toDouble();
527 
528  //comptage du nombre d'articles
529 
530  double doubleNombreArticle = qRound((doublePoidsTotal - doubleTare) / doublePoidsArticle);
531  QString strNombreArticle = QString::number(doubleNombreArticle, 'f', PRECISION);
532  int nombreArticle = strNombreArticle.toInt();
533 
534  #ifdef DEBUG_SUPERVISION
535  qDebug() << Q_FUNC_INFO << "nombreArticle:" << nombreArticle;
536  #endif
537 
538  return nombreArticle;
539 }
540 
547 {
548  QDate qDate(QDate::currentDate());
549  QString date = qDate.toString("yyyy-MM-dd");
550 
551  QTime time(QTime::currentTime());
552  QString heure = time.toString("hh:mm:ss");
553 
554  return date + " " + heure;
555 }
556 
565 void Supervision::mettreAJourMouvement(QString idUtilisateur, QString idStock, QString idAction, QString quantite)
566 {
567  QString horodatage = recupererHorodatage();
568  QString requete ="INSERT INTO Mouvement(idUtilisateur, idStock, idAction, Quantite, Horodatage) VALUES('" + idUtilisateur + "', '" + idStock + "', '" + idAction + "', '" + quantite + "', '" + horodatage + "');";
569  bdd->executer(requete);
570 }
571 
579 void Supervision::ajouterDonneesArticle(Article *article, QVector<QStringList> &donneesArticle, QStringList &donnees)
580 {
581  donnees << article->get(TABLE_ARTICLE_QUANTITE);
582  donnees << article->get(TABLE_ARTICLE_DISPONIBLE);
583  donnees << article->get(TABLE_ARTICLE_NUMERO_CASIER);
584 
585  donneesArticle.push_back(donnees);
586  donnees.clear();
587 }
588 
596 bool Supervision::verifierArticlePresentDansCasier(QString numCasier, QString idArticle)
597 {
598  QString requete = "SELECT idArticle FROM Stock WHERE numeroCasier = "+ numCasier + ";";
599  QString donnees;
600 
601  bdd->recuperer(requete, donnees);
602 
603  if(donnees == idArticle)
604  {
605  return true;
606  }
607  else
608  {
609  return false;
610  }
611 }
612 
619 {
620  int numeroCasier = rechercherCasierOuvert();
621 
622  if(numeroCasier == -1)
623  return;
624 
625  #ifdef DEBUG_SUPERVISION
626  qDebug() << Q_FUNC_INFO << "codeBarre" << codeBarre << "casier" << numeroCasier;
627  #endif
628 
629  unsigned int quantiteDisponible = this->codeBarre->recupererQuantiteDisponibleParNumeroCasier(QString::number(casiers[numeroCasier]->getNumero()));
630  int quantite = quantiteDisponible - this->codeBarre->getQuantiteObjet();
631  QString idArticle = QString::number(this->codeBarre->recupererIdArticleAvecCodeBarres(codeBarre));
632 
633  if(casiers[numeroCasier]->estOuvert())
634  {
635  if(verifierArticlePresentDansCasier(QString::number(casiers[numeroCasier]->getNumero()), idArticle))
636  {
637  if(quantite >= 0)
638  {
639  QString strQuantite = QString::number(quantite);
640  QString requete = "UPDATE Stock SET Disponible = '" + strQuantite + "' WHERE Stock.idArticle = '" + idArticle + "'";
641  bdd->executer(requete);
642  QString idUtilisateur = utilisateur->getIdUtilisateur();
643  QString idStock = recupererIdStockAvecNumeroCasier(numeroCasier+1 );
644  QString idAction = "1";
645  QString quantiteMouvement = QString::number(this->codeBarre->getQuantiteObjet());
646  mettreAJourMouvement(idUtilisateur, idStock, idAction, quantiteMouvement);
647  }
648  else
649  {
651  }
652  }
653  else
654  {
656  }
657  }
658  else
659  {
661  }
662 }
663 
670 {
671  int numeroCasier = rechercherCasierOuvert();
672 
673  if(numeroCasier == -1)
674  return;
675 
676  #ifdef DEBUG_SUPERVISION
677  qDebug() << Q_FUNC_INFO << "codeBarre" << codeBarre << "casier" << numeroCasier;
678  #endif
679 
680  unsigned int quantiteMax = this->codeBarre->recupererQuantiteMaxParNumeroCasier(QString::number(casiers[numeroCasier]->getNumero()));
681  unsigned int quantiteDisponible = this->codeBarre->recupererQuantiteDisponibleParNumeroCasier(QString::number(casiers[numeroCasier]->getNumero()));
682  unsigned int quantite = quantiteDisponible + this->codeBarre->getQuantiteObjet();
683  QString idArticle = QString::number(this->codeBarre->recupererIdArticleAvecCodeBarres(codeBarre));
684 
685  if(casiers[numeroCasier]->estOuvert())
686  {
687  if(verifierArticlePresentDansCasier(QString::number(casiers[numeroCasier]->getNumero()), idArticle))
688  {
689  if(quantite <= quantiteMax)
690  {
691  QString strQuantite = QString::number(quantite);
692  QString requete = "UPDATE Stock SET Disponible = '" + strQuantite + "' WHERE Stock.idArticle = '" + idArticle + "'";
693  bdd->executer(requete);
694  QString idUtilisateur = utilisateur->getIdUtilisateur();
695  QString idStock = recupererIdStockAvecNumeroCasier(numeroCasier+1);
696  QString idAction = "2";
697  QString quantiteMouvement = QString::number(this->codeBarre->getQuantiteObjet());
698  mettreAJourMouvement(idUtilisateur, idStock, idAction, quantiteMouvement);
699  }
700  else
701  {
703  }
704  }
705  else
706  {
708  }
709  }
710  else
711  {
713  }
714 }
715 
722 {
723  for(int i=0; i < casiers.size(); i++)
724  {
725  if(casiers[i]->estOuvert())
726  return i;
727  }
728  return -1;
729 }
730 
738 {
739  QString strNumeroCasier = QString::number(numeroCasier);
740  QString requete = "SELECT idStock FROM Stock WHERE numeroCasier = " + strNumeroCasier + ";";
741  QString donnees;
742  bdd->recuperer(requete, donnees);
743 
744  return donnees;
745 }
void erreurQuantiteTropElevee()
void verifierAuthentificationIdentifiant(QString identifiant, QString motDePasse)
Définition de la méthode verifierAuthentificationIdentifiant.
Déclaration de la classe Article.
Déclaration de la classe Casier.
void donneesArticleSelectionne(QVector< QStringList >)
void creerCasiers()
Définition de la méthode creerCasiers.
Definition: Supervision.cpp:83
La classe Article traite les articles.
Definition: Article.h:62
unsigned int comptageAutomatiqueQuantite(QString nbArticleAvant, int nbArticleApres)
Définition de la méthode comptageAutomatiqueQuantite.
void mettreAJourMouvement(QString idUtilisateur, QString idStock, QString idAction, QString quantite)
Définition de la méthode mettreAJourMouvement.
Déclaration de la classe Rfid.
QString getIdentifiantUtilisateur()
Définition de la méthode getIdentifiantUtilisateur.
Definition: Utilisateur.cpp:78
int rechercherCasierOuvert()
Définition de la méthode rechercherCasierOuvert.
void prendreObjetAvecCodeBarre(QString codeBarre)
Définition de la méthode prendreObjetAvecCodeBarre.
bool executer(QString requete)
exécute une requête SQL de type UPDATE, INSERT et DELETE
Definition: Bdd.cpp:146
unsigned int comptageAutomatiqueAjouterOuPrendre(QString nbArticleAvant, int nbArticleApres)
Définition de la méthode comptageAutomatiqueAjouterOuPrendre.
Armoire * armoire
association d&#39;un objet Armoire
Definition: Supervision.h:91
void connecterSignauxSlots()
Définition de la méthode connecterSignauxSlots.
bool verifierDonneesUtilisateur(QStringList &donnees)
Définition de la méthode verifierDonneesUtilisateur.
~Supervision()
Définition du destructeur de Supervision.
Definition: Supervision.cpp:59
Definition: Article.h:45
Déclaration de la classe Ihm.
CodeBarre * codeBarre
association d&#39;un objet CodeBarre
Definition: Supervision.h:90
Communication * communication
association d&#39;un objet Communication
Definition: Supervision.h:92
Definition: Article.h:40
QString getNbCasiers() const
Définition de la méthode getNbCasiers.
Definition: Armoire.cpp:127
bool connecter()
Définition méthose connecter()
Definition: Bdd.cpp:93
void erreurAucunArticleAvecCodeBarre()
void mettreAJourQuantite(QString quantite)
Définition de la méthode mettreAJourQuantite.
Definition: Article.cpp:328
void traiterTramePoids(QString trame)
Définition de la méthode traiterTramePoids.
#define MESSAGE_ERREUR_UTILISATEUR_DATE_NON_VALIDE
Definition: Ihm.h:34
Definition: Article.h:30
La classe Casier gère le casier contenant des articles.
Definition: Casier.h:34
Bdd * bdd
association d&#39;un objet Bdd (accès à la base de données)
Definition: Supervision.h:87
QString extraireNumeroCasier(QString trame)
Définition de la méthode extraireNumeroCasier.
void crypterMotDepasse(QString &motDePasse)
Définition de la méthode crypterMotDepasse.
void placerCasiers(const QVector< Casier *> &casiers, int fenetre)
Definition: Ihm.cpp:132
Definition: Article.h:39
#define MESSAGE_ERREUR_UTILISATEUR_NON_VALIDE
Definition: Ihm.h:33
QStringList getInformations()
Définition de la méthode getInformations.
Definition: Armoire.cpp:78
void connecterUtilisateur(QStringList &donnees)
Définition de la méthode connecterUtilisateur.
QVector< Casier * > casiers
les casiers de l&#39;armoire
Definition: Supervision.h:93
Emplacment de la date de validite.
Definition: Utilisateur.h:32
QString getIdUtilisateur()
Définition de la méthode getIdUtilisateur.
Definition: Utilisateur.cpp:88
int compter(QString poidArticle, QString poidTotal, QString tare)
Définition de la méthode compter.
void erreurArticleInsuffisants()
void verifierAuthentificationBadge(QString badge)
Définition de la méthode verifierAuthentificationBadge.
Définition de la classe Communication.
QString get(ChampArticle champ)
Définition de la méthode get.
Definition: Article.cpp:265
Fenêtre ???
Definition: Ihm.h:28
void ajouterDonneesArticle(Article *article, QVector< QStringList > &donneesArticle, QStringList &donnees)
Définition de la méthode ajouterDonneesArticle.
bool verifierArticlePresentDansCasier(QString numCasier, QString idArticle)
Définition de la méthode verifierArticlePresentDansCasier.
Déclaration de la classe Armoire.
Rfid * rfid
association d&#39;un objet Rfid (le lecteur de badge)
Definition: Supervision.h:88
Déclaration de la classe Bdd.
Déclaration de la classe CodeBarre.
Definition: CodeBarre.h:35
void rechercherArticle(QString recherche)
Définition de la méthode rechercherArticle.
void deconnecterUtilisateur()
Méthode qui permet la déconnexion de l&#39;utilisateur.
Definition: Supervision.cpp:69
Déclaration de la classe CodeBare.
QStringList getInformationsArmoire()
Définition de la méthode getInformationsArmoire.
Déclaration de la classe Ihm.
Definition: Ihm.h:68
bool verifierDateValidite(QString stringDateValidite)
Définition de la méthode verifierDateValidite.
bool recupererDonneesArticleParNom(QString nomArticle, int numCasier=0)
Récupère les données d&#39;un article de l&#39;armoire dans la base de données par son nomArticle.
Definition: Article.cpp:102
Supervision(Ihm *parent=nullptr)
Définition du constructeur de la classe Supervision.
Definition: Supervision.cpp:36
La classe Utilisateur gère les données relative à l&#39;utilisateur.
Definition: Utilisateur.h:52
QString extrairePoids(QString trame)
Définition de la méthode extrairePoids.
Déclaration de la classe Supervision.
Definition: Article.h:42
void ajouterObjetAvecCodeBarre(QString codeBarre)
Définition de la méthode ajouterObjetAvecCodeBarre.
void selectionnerArticle(QString nomArticle)
Définition de la méthode selectionnerArticle.
QStringList recupererDonneesUtilisateur(QString requeteBDD)
Définition de la méthode recupererDonneesUtilisateur.
bool recuperer(QString requete, QString &donnees)
exécute une requête SQL de type SELECT et récupère un champ d&#39;un seul enregistrement ...
Definition: Bdd.cpp:187
#define PRECISION
Definition: Supervision.h:26
void articlesTrouves(QVector< QStringList >)
La classe Communication permet de communiquer avec le port série.
Definition: Communication.h:48
void reponseDemandeDeConnexion(bool, QString)
Definition: Article.h:41
void demarrerCommunicationPort()
Définition de la méthode demarrerCommunicationPort.
QVector< Casier * > getCasiers()
Définition de la méthode getCasiers.
Ihm * ihm
association d&#39;un objet Ihm (fenêtre princiaple de l&#39;application)
Definition: Supervision.h:86
static QVector< QString > recupererNumeroCasierPourNomArticle(QString nomArticle)
Définition de la méthode recupererNumeroCasierPourNomArticle.
Definition: Article.cpp:249
static unsigned int recupererNombreCasiersPourNomArticle(QString nomArticle)
Définition de la méthode recupererNombreCasiersPourNomArticle.
Definition: Article.cpp:217
Déclaration de la classe Utilisateur.
La classe Armoire traite les articles.
Definition: Armoire.h:49
void erreurDepassementQuantite()
bool recupererDonneesArticleParNumeroCasier(QString numeroCasier)
Définition de la méthode recupererDonneesArticleParNumeroCasier.
Definition: Article.cpp:155
static Bdd * getInstance()
Définition méthode getInstance()
Definition: Bdd.cpp:53
Definition: Article.h:32
La classe Rfid traite la trame reçue d&#39;un lecteur Rfid.
Definition: Rfid.h:35
QString recupererHorodatage()
Définition de la méthode recupererHorodatage.
void erreurAucunCasierOuvert()
Utilisateur * utilisateur
association d&#39;un objet Utilisateur (l&#39;utilisateur authentifié)
Definition: Supervision.h:89
QString recupererIdStockAvecNumeroCasier(int numeroCasier)
Définition de la méthode recupererIdStockAvecNumeroCasier.