Projet e-stok  0.2
BTS SNIR LaSalle Avignon 2020
Ihm.cpp
Aller à la documentation de ce fichier.
1 #include "Ihm.h"
2 #include "ui_Ihm.h"
3 #include "Supervision.h"
4 #include "Armoire.h"
5 #include "Casier.h"
6 #include "Keyboard.h"
7 #include <QMessageBox>
8 #include <QInputDialog>
9 #include <QDebug>
10 #include <QString>
11 
31 Ihm::Ihm(QWidget *parent) : QMainWindow(parent), ui(new Ui::Ihm), supervision(new Supervision(this))
32 {
33  ui->setupUi(this);
34  // Suppression des parties inutile du QMainWindow
35  delete ui->menuBar;
36  delete ui->mainToolBar;
37  delete ui->statusBar;
38 
39  // Récupère le clavier virtuelle
40  keyboard = Keyboard::getInstance(nullptr, this);
41 
42  // Affiche la fenêtre par défaut en plein écran
44 
45  // Met la fenêtre en plein écran fenêtrer
46  setWindowFlags(Qt::WindowStaysOnTopHint);
47  setWindowFlags(Qt::FramelessWindowHint);
48  // Pour la Raspberry Pi
49  //showMaximized();
50 
52 
55 }
56 
62 {
63  delete ui;
64 }
65 
71 {
72  // Les deux types d'authentifiaction
73  connect(ui->lineBadge, SIGNAL(editingFinished()), this, SLOT(authentifierParBadge()));
74  connect(ui->pushSeConnecter, SIGNAL(clicked()), this, SLOT(authentifierParIdentifiant()));
75  connect(ui->pushSeDeconnecter, SIGNAL(clicked()), this, SLOT(deconnecterUtilisateur()));
76  connect(ui->lineIdentifiant, SIGNAL(editingFinished()), this, SLOT(connecterClavier1()));
77  connect(ui->lineMotDePasse, SIGNAL(editingFinished()), this, SLOT(connecterClavier2()));
78 
79  //fenêtre scanner un objet
80  connect(ui->pushScannerObjet, SIGNAL(clicked()), this, SLOT(allerFenetreScannerObjet()));
81  connect(ui->pushScannerSeDeconnecter, SIGNAL(clicked()), this, SLOT(deconnecterUtilisateur()));
82  connect(ui->pushScannerPageStock, SIGNAL(clicked()), this, SLOT(allerFenetreMenu()));
83 
84  // Les deux fenêtres d'authentifiaction
85  connect(ui->pushParIdentifiant, SIGNAL(clicked()), this, SLOT(allerFenetreIdentifiant()));
86  connect(ui->pushParBadge, SIGNAL(clicked()), this, SLOT(allerFenetreBadge()));
87 
88  // Article
89  connect(ui->lineRecherche, SIGNAL(textChanged(QString)), this, SLOT(activerRecherche()));
90  connect(ui->pushRecherche, SIGNAL(clicked(bool)), this, SLOT(rechercherArticle()));
91 
92  // CodeBarre
93  connect(ui->pushScannerPrendre, SIGNAL(clicked()), this, SLOT(appuyerBoutonPrendre()));
94  connect(ui->pushScannerPrendre, SIGNAL(clicked()), this, SLOT(changerTextePrendre()));
95  connect(ui->pushScannerAjouter, SIGNAL(clicked()), this, SLOT(appuyerBoutonAjouter()));
96  connect(ui->pushScannerAjouter, SIGNAL(clicked()), this, SLOT(changerTexteAjouter()));
97  connect(ui->spinBoxQuantiteScan, SIGNAL(valueChanged(int)), this, SLOT(afficherDemandeQuantite(int)));
98  connect(ui->lineEditScanner, SIGNAL(editingFinished()), this, SLOT(scannerObjet()));
99 }
100 
106 void Ihm::changerDeFenetre(int fenetre)
107 {
108  ui->stackedWidget->setCurrentIndex(fenetre);
109 }
110 
117 {
118  // pair/impair -> droite/gauche ?
119  int numero = casier->getNumero() - 1;
120  if((numero+1)%2)
121  {
122  ui->gridLayoutCasiers->addWidget(casier, numero/2, 0, 1, 1);
123  ui->gridLayoutCasiersScan->addWidget(casier, numero/2, 0, 1, 1);
124  }
125  else
126  {
127  ui->gridLayoutCasiers->addWidget(casier, numero/2, 1, 1, 1);
128  ui->gridLayoutCasiersScan->addWidget(casier, numero/2, 1, 1, 1);
129  }
130 }
131 
132 void Ihm::placerCasiers(const QVector<Casier*> &casiers, int fenetre)
133 {
134  for(int i=0; i < casiers.size(); i++)
135  {
136  Casier* casier = casiers[i];
137 
138  // pair/impair -> droite/gauche ?
139  int numero = casier->getNumero() - 1;
140  if((numero+1)%2)
141  {
142  switch (fenetre)
143  {
144  case FENETRE_MENU:
145  ui->gridLayoutCasiers->addWidget(casier, numero/2, 0, 1, 1);
146  break;
148  ui->gridLayoutCasiersScan->addWidget(casier, numero/2, 0, 1, 1);
149  break;
150  default:
151  break;
152  }
153  }
154  else
155  {
156  switch (fenetre)
157  {
158  case FENETRE_MENU:
159  ui->gridLayoutCasiers->addWidget(casier, numero/2, 1, 1, 1);
160  break;
162  ui->gridLayoutCasiersScan->addWidget(casier, numero/2, 1, 1, 1);
163  break;
164  default:
165  break;
166  }
167  }
168  }
169 }
170 
176 void Ihm::afficherInformationsArmoire(QStringList informationsArmoire)
177 {
178  #ifdef DEBUG_IHM
179  qDebug() << Q_FUNC_INFO << "informationsArmoire" << informationsArmoire;
180  #endif
181  ui->labelNomArmoire->setText(informationsArmoire.at(TABLE_ARMOIRE_NOM) + " " + informationsArmoire.at(TABLE_ARMOIRE_DESCRIPTION) + " (" + informationsArmoire.at(TABLE_ARMOIRE_NB_CASIERS+1) + ")");
182  ui->labelNbCasiers->setText(informationsArmoire.at(TABLE_ARMOIRE_NB_CASIERS));
183 }
184 
190 {
191  ui->labelErreurBadge->clear();
192 
193  if(ui->lineBadge->text() != "")
194  {
195  #ifdef DEBUG_IHM
196  qDebug() << Q_FUNC_INFO << "Contenu brut badge" << ui->lineBadge->text();
197  #endif
198 
199  QString trameBadge = ui->lineBadge->text();
200  ui->lineBadge->clear();
201  emit badgeDetecte(trameBadge);
202  }
203 }
204 
210 {
211  if(ui->lineIdentifiant->text() != "")
212  {
213  #ifdef DEBUG_IHM
214  qDebug() << Q_FUNC_INFO << "Identifiant" << ui->lineIdentifiant->text() << "MotDePasse" << ui->lineMotDePasse->text();
215  #endif
216 
217  QString identifiant = ui->lineIdentifiant->text();
218  QString motDePasse = ui->lineMotDePasse->text();
219  ui->lineIdentifiant->clear();
220  ui->lineMotDePasse->clear();
221  emit identifiantDetecte(identifiant, motDePasse);
222  }
223 }
224 
230 {
233 }
234 
240 {
242  ui->lineBadge->setFocus();
243 }
244 
251 {
252  ui->lineMotDePasse->setEchoMode(QLineEdit::Password);
253  keyboard->setLineEdit(ui->lineIdentifiant);
255  ui->lineIdentifiant->setFocus();
256 }
257 
263 {
265  // Initialisation widgets
267  keyboard->setLineEdit(ui->lineRecherche);
268  ui->pushRecherche->setFocus();
269  ui->comboBoxArticle->clear();
270  ui->comboBoxArticle->addItem("Sélectionner un article");
271  ui->pushRecherche->setEnabled(false);
272  ui->lineRecherche->setFocus();
273  // Lance une recherche de tous les articles
274  emit rechercheArticle("");
275 }
276 
282 {
284  ui->pushScannerPrendre->setEnabled(false);
285  ui->pushScannerAjouter->setEnabled(false);
286  ui->spinBoxQuantiteScan->setValue(0);
287  ui->spinBoxQuantiteScan->setEnabled(false);
289 }
290 
296 void Ihm::afficherErreurBadge(QString message)
297 {
298  ui->labelErreurBadge->setText(message);
299 }
300 
306 {
307  QMessageBox::critical(nullptr, APPLICATION, QString::fromUtf8(MESSAGE_ERREUR_DEPASSEMENT_QUANTITE));
308 }
309 
316 void Ihm::traiterDemandeDeConnexion(bool reponse, QString message)
317 {
318  if(reponse)
319  {
321  }
322  else
323  {
324  QMessageBox::critical(nullptr, APPLICATION, message);
325  }
326 }
327 
333 {
334  if(!ui->lineRecherche->text().isEmpty())
335  ui->pushRecherche->setEnabled(true);
336  else
337  ui->pushRecherche->setEnabled(false);
338 }
339 
345 {
346  if(!ui->lineRecherche->text().isEmpty())
347  supervision->rechercherArticle(ui->lineRecherche->text());
348 }
349 
355 {
356  ui->lineRecherche->setText("");
357 }
358 
364 void Ihm::mettreAJourListeArticles(QVector<QStringList> articlesTrouves)
365 {
366  #ifdef DEBUG_IHM
367  qDebug() << Q_FUNC_INFO << "articlesTrouves" << articlesTrouves.size() << articlesTrouves;
368  #endif
369  creerListeArticles(articlesTrouves);
370 
372 }
373 
380 {
381  #ifdef DEBUG_IHM
382  qDebug() << Q_FUNC_INFO << "index" << index << ui->comboBoxArticle->currentText();
383  #endif
384 
385  supervision->selectionnerArticle(ui->comboBoxArticle->currentText());
386 }
387 
393 void Ihm::afficherDonneesArticleSelectionne(QStringList donneesArticle)
394 {
395  ui->labelCasier->setText("Casier :");
396  ui->labelQuantiteNombre->setText(donneesArticle.at(ARTICLE_QUANTITE));
397  ui->labelDisponibleNombre->setText(donneesArticle.at(ARTICLE_DISPONIBLE));
398  ui->labelCasierNombre->setText(donneesArticle.at(NUMERO_CASIERS));
399 }
400 
406 void Ihm::afficherDonneesArticleSelectionne(QVector<QStringList> donneesArticle)
407 {
408  if(donneesArticle.size() <= 0)
409  return;
410  unsigned int articleQuantite = 0;
411  unsigned int articleDisponible = 0;
412  QString casiersQuantite;
413  QString casiersDisponible;
414  QString casiers;
415  int nombreCasiers = donneesArticle.size();
416 
417  for(int i = 0; i < nombreCasiers; i++)
418  {
419  #ifdef DEBUG_IHM
420  qDebug() << Q_FUNC_INFO << "disponible" << (donneesArticle[i].at(ARTICLE_DISPONIBLE)).toUInt();
421  qDebug() << Q_FUNC_INFO << "articleDisponible" << articleDisponible;
422  qDebug() << Q_FUNC_INFO << "quantite" << (donneesArticle[i].at(ARTICLE_QUANTITE)).toUInt();
423  qDebug() << Q_FUNC_INFO << "articleQuantite" << articleQuantite;
424  #endif
425  articleDisponible += (donneesArticle[i].at(ARTICLE_DISPONIBLE)).toUInt();
426  articleQuantite += (donneesArticle[i].at(ARTICLE_QUANTITE)).toUInt();
427 
428  if(i == 0)
429  {
430  casiers = donneesArticle[i].at(NUMERO_CASIERS);
431  casiersDisponible = QString(" (") + donneesArticle[i].at(ARTICLE_DISPONIBLE);
432  casiersQuantite = QString(" (") + donneesArticle[i].at(ARTICLE_QUANTITE);
433  }
434  else
435  {
436  casiers += " et " + donneesArticle[i].at(NUMERO_CASIERS);
437  casiersDisponible += QString(" et ") + donneesArticle[i].at(ARTICLE_DISPONIBLE);
438  casiersQuantite += QString(" et ") + donneesArticle[i].at(ARTICLE_QUANTITE);
439  }
440  }
441  casiersDisponible += QString(")");
442  casiersQuantite += QString(")");
443 
444  ui->labelCasier->setText("Casiers :");
445  ui->labelQuantiteNombre->setText(QString::number(articleQuantite) + casiersQuantite);
446  ui->labelDisponibleNombre->setText(QString::number(articleDisponible) + casiersDisponible);
447  ui->labelCasierNombre->setText(casiers);
448 }
449 
455 void Ihm::creerListeArticles(const QVector<QStringList> &articlesTrouves)
456 {
457  disconnect(ui->comboBoxArticle, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerArticle(int)));
458  ui->comboBoxArticle->clear();
459 
460  ui->comboBoxArticle->addItem("Sélectionner un article");
461  for(int i = 0 ; i < articlesTrouves.size() ; i++)
462  {
463  if(ui->comboBoxArticle->findText(articlesTrouves[i].at(2)) == -1)
464  {
465  ui->comboBoxArticle->addItem(articlesTrouves[i].at(2));
466  }
467  }
468  connect(ui->comboBoxArticle, SIGNAL(currentIndexChanged(int)), this, SLOT(selectionnerArticle(int)));
469 }
470 
476 {
477  ui->labelScannerObjet->setText("Vous pouvez indiquer une quantité");
478  ui->lineEditScanner->setFocus();
479  emit boutonPrendre(false);
480 }
481 
487 {
488  ui->labelScannerObjet->setText("Vous pouvez indiquer une quantité");
489  ui->lineEditScanner->setFocus();
490  emit boutonAjouter(true);
491 }
492 
498 {
499  ui->labelScannerObjet->setText("Veuillez scanner l'objet à prendre");
500 }
501 
507 {
508  ui->labelScannerObjet->setText("Veuillez scanner l'objet à ajouter");
509 }
510 
516 {
517  QString codeBarreObjet = ui->lineEditScanner->text();
518  qDebug() << Q_FUNC_INFO << "codeBarreObjet" << codeBarreObjet;
519 
520  if(!ui->lineEditScanner->text().isEmpty())
521  {
522  emit codeBarreObjetScanner(codeBarreObjet);
523  }
524 
525  ui->lineEditScanner->setText("");
526 }
527 
534 {
535  emit envoyerQuantite(quantite);
536  ui->lineEditScanner->setFocus();
537 }
538 
544 {
545  QMessageBox::critical(nullptr, APPLICATION, QString::fromUtf8(MESSAGE_ERREUR_QUANTITE_INSUFFISANTE));
546 }
547 
553 {
554  QMessageBox::critical(nullptr, APPLICATION, QString::fromUtf8(MESSAGE_ERREUR_AUCUN_CASIER_OUVERT));
555 }
556 
562 {
563  QMessageBox::critical(nullptr, APPLICATION, QString::fromUtf8(MESSAGE_ERREUR_AUCUN_ARTICLE_CODE_BARRE));
564 }
565 
572 void Ihm::gererPageScanObjet(int numeroCasier, bool etat)
573 {
574  if(etat)
575  {
576  ui->labelScannerObjet->setText("Veuillez prendre ou ajouter un objet");
577  ui->pushScannerPrendre->setEnabled(true);
578  ui->pushScannerAjouter->setEnabled(true);
579  ui->spinBoxQuantiteScan->setEnabled(true);
580  ui->spinBoxQuantiteScan->setValue(1); // par défaut
581  ui->lineEditScanner->setEnabled(true);
582  ui->lineEditScanner->setFocus();
583  }
584  else
585  {
586  ui->labelScannerObjet->setText("Veuillez ouvrir un casier");
587  ui->pushScannerPrendre->setEnabled(false);
588  ui->pushScannerAjouter->setEnabled(false);
589  ui->spinBoxQuantiteScan->setValue(0);
590  ui->spinBoxQuantiteScan->setEnabled(false);
591  ui->lineEditScanner->setEnabled(false);
592  }
593 }
594 
600 {
601  keyboard->setLineEdit(ui->lineMotDePasse);
602 }
603 
609 {
610  keyboard->setLineEdit(ui->lineIdentifiant);
611 }
Déclaration de la classe Casier.
void afficherErreurDepassementQuantite()
Définition de la méthode afficherErreurDepassementQuantite.
Definition: Ihm.cpp:305
void creerCasiers()
Définition de la méthode creerCasiers.
Definition: Supervision.cpp:83
#define ARTICLE_QUANTITE
Definition: Ihm.h:41
void rechercheArticle(QString)
void connecterSignauxEtSlots()
Définition de la méthode connecterSignauxEtSlots.
Definition: Ihm.cpp:70
void badgeDetecte(QString)
Definition: Ihm.h:51
Keyboard * keyboard
association vers le clavier virtuel
Definition: Ihm.h:125
void boutonPrendre(bool)
Fenêtre d&#39;authentifiaction par badge.
Definition: Ihm.h:26
Supervision * supervision
association vers supervision
Definition: Ihm.h:124
Déclaration de la classe Ihm.
static Keyboard * getInstance(QWidget *parent=Q_NULLPTR)
void setLineEdit(QLineEdit *lineEdit)
Definition: Keyboard.cpp:123
La classe Supervision permet de superviser l&#39;ensemble de l&#39;application.
Definition: Supervision.h:52
void afficherErreurBadge(QString message)
Définition de la méthode afficherErreurBadge.
Definition: Ihm.cpp:296
void afficherErreurPasArticleAvecCodeBarre()
définition de la méthode afficherErreurPasArticleAvecCodeBarre
Definition: Ihm.cpp:561
#define MESSAGE_ERREUR_DEPASSEMENT_QUANTITE
Definition: Ihm.h:35
Ui::Ihm * ui
contenu de l&#39;interface utilisateur
Definition: Ihm.h:123
void mettreAJourListeArticles(QVector< QStringList > articlesTrouves)
Définition de la méthode mettreAJourListeArticles.
Definition: Ihm.cpp:364
void traiterDemandeDeConnexion(bool reponse, QString message)
Définition de la méthode traiterDemandeDeConnexion.
Definition: Ihm.cpp:316
int getNumero() const
Définition de la méthode getNumero.
Definition: Casier.cpp:59
La classe Casier gère le casier contenant des articles.
Definition: Casier.h:34
void afficherErreurArticleInsuffisants()
définition de la méthode afficherErreurArticleInsuffisants
Definition: Ihm.cpp:543
void rechercherArticle()
Définition de la méthode rechercherArticle.
Definition: Ihm.cpp:344
void placerCasiers(const QVector< Casier *> &casiers, int fenetre)
Definition: Ihm.cpp:132
void activerRecherche()
Définition de la méthode traiterDemandeDeConnexion.
Definition: Ihm.cpp:332
~Ihm()
Destructeur de la classe Ihm.
Definition: Ihm.cpp:61
void allerFenetreScannerObjet()
Définition de la méthode allerFenetreScannerObjet.
Definition: Ihm.cpp:281
void appuyerBoutonPrendre()
Définition de la méthode appuyerBoutonPrendre.
Definition: Ihm.cpp:475
void appuyerBoutonAjouter()
Définition de la méthode appuyerBoutonAjouter.
Definition: Ihm.cpp:486
void placerCasier(Casier *casier)
Définition de la méthode placerCasier.
Definition: Ihm.cpp:116
Fichier qui contient la déclaration de la classe Keyboard.
void connecterClavier1()
définition de la méthode connecterClavier1
Definition: Ihm.cpp:599
void boutonAjouter(bool)
void selectionnerArticle(int index)
Définition de la méthode selectionnerArticle.
Definition: Ihm.cpp:379
void afficherErreurAucunCasierOuvert()
définition de la méthode afficherErreurAucunCasierOuvert
Definition: Ihm.cpp:552
Fenêtre pour scan d&#39;un objet.
Definition: Ihm.h:29
void afficherDemandeQuantite(int)
définition de la méthode afficherDemandeQuantite
Definition: Ihm.cpp:533
void effacerRechercheArticle()
Définition de la méthode effacerRechercheArticle.
Definition: Ihm.cpp:354
#define MESSAGE_ERREUR_AUCUN_CASIER_OUVERT
Definition: Ihm.h:39
void changerTextePrendre()
définition de la méthode changerTextePrendre
Definition: Ihm.cpp:497
#define APPLICATION
Definition: Ihm.h:32
void afficherInformationsArmoire(QStringList informationsArmoire)
Définition de la méthode afficherInformationsArmoire.
Definition: Ihm.cpp:176
void envoyerQuantite(int)
#define NUMERO_CASIERS
Definition: Ihm.h:43
Fenêtre ???
Definition: Ihm.h:28
void authentifierParBadge()
Définition de la méthode authentifierParBadge.
Definition: Ihm.cpp:189
void allerFenetreBadge()
Définition de la méthode allerFenetreBadge.
Definition: Ihm.cpp:239
void changerDeFenetre(int fenetre)
Définition de la méthode changerDeFenetre.
Definition: Ihm.cpp:106
void scannerObjet()
Définition de la méthode objetScanner.
Definition: Ihm.cpp:515
void identifiantDetecte(QString identifiant, QString motDePasse)
#define ARTICLE_DISPONIBLE
Definition: Ihm.h:42
void authentifierParIdentifiant()
Définition de la méthode authentifierParIdentifiant.
Definition: Ihm.cpp:209
Déclaration de la classe Armoire.
Fenêtre d&#39;authentifiaction par identifiant.
Definition: Ihm.h:27
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
QStringList getInformationsArmoire()
Définition de la méthode getInformationsArmoire.
Déclaration de la classe Ihm.
Definition: Ihm.h:68
Déclaration de la classe Supervision.
void selectionnerArticle(QString nomArticle)
Définition de la méthode selectionnerArticle.
void afficherDonneesArticleSelectionne(QStringList donneesArticle)
Définition de la méthode afficherDonneesArticleSelectionne.
Definition: Ihm.cpp:393
void codeBarreObjetScanner(QString)
void allerFenetreMenu()
Définition de la méthode allerFenetreMenu.
Definition: Ihm.cpp:262
void connecterClavier2()
définition de la méthode connecterClavier2
Definition: Ihm.cpp:608
void allerFenetreIdentifiant()
Définition de la méthode allerFenetreIdentifiant.
Definition: Ihm.cpp:250
#define MESSAGE_ERREUR_QUANTITE_INSUFFISANTE
Definition: Ihm.h:38
void creerListeArticles(const QVector< QStringList > &articlesTrouves)
Définition de la méthode creerListeArticles.
Definition: Ihm.cpp:455
QVector< Casier * > getCasiers()
Définition de la méthode getCasiers.
#define MESSAGE_ERREUR_AUCUN_ARTICLE_CODE_BARRE
Definition: Ihm.h:36
Ihm(QWidget *parent=nullptr)
Constructeur de la classe Ihm.
Definition: Ihm.cpp:31
void deconnecterUtilisateur()
Définition de la méthode deconnecterUtilisateur.
Definition: Ihm.cpp:229
void changerTexteAjouter()
définition de la méthode changerTexteAjouter
Definition: Ihm.cpp:506
void gererPageScanObjet(int numeroCasier, bool etat)
Définition de la méthode gererPageScanObjet.
Definition: Ihm.cpp:572