13 #include <QMessageBox> 14 #include <QCryptographicHash> 52 #ifdef SUPERVISION_TEST_POIDS 53 QString trameTest =
"CASIERS;3;1;2100";
93 qDebug() << Q_FUNC_INFO <<
"nbCasiers" << nbCasiers;
94 if(!nbCasiers.isEmpty())
96 for(
int i=0; i < nbCasiers.toInt(); i++)
115 return informationsArmoire;
127 QString requeteBDD =
"SELECT * from Utilisateur where Badge = '" + badge +
"';";
148 #ifdef CHANGE_PASSWORD_BEFORE 149 QString requete = QString(
"UPDATE Utilisateur SET MotDePasse='%1' WHERE Identifiant='%2'").arg(motDePasse).arg(identifiant);
153 QString requeteBDD =
"SELECT * from Utilisateur where Identifiant = '" + identifiant +
"' && MotDePasse = '" + motDePasse +
"';";
188 if(!motDePasse.isEmpty())
190 motDePasse = QString(QCryptographicHash::hash((motDePasse).toLatin1(), QCryptographicHash::Md5).toHex());
193 #ifdef DEBUG_SUPERVISION 194 qDebug() << Q_FUNC_INFO <<
"Mot de passe crypte" << motDePasse;
209 QDate dateValidite = dateValidite.fromString(stringDateValidite,
"yyyy-MM-dd");
210 QDate dateActuelle = QDate::currentDate();
212 #ifdef DEBUG_SUPERVISION 213 qDebug() <<
"Date actuelle" << dateActuelle;
214 qDebug() <<
"Date validité" << dateValidite;
217 if(dateActuelle <= dateValidite)
235 #ifdef DEBUG_SUPERVISON 236 qDebug() << Q_FUNC_INFO << donnees;
239 if(!donnees.isEmpty())
274 #ifdef DEBUG_SUPERVISION 288 connect(
armoire, SIGNAL(informationsArmoire(QStringList)),
ihm, SLOT(afficherInformationsArmoire(QStringList)));
291 connect(
ihm, SIGNAL(badgeDetecte(QString)),
rfid, SLOT(traiterBadge(QString)));
292 connect(
rfid, SIGNAL(erreurBadgeInvalide(QString)),
ihm, SLOT(afficherErreurBadge(QString)));
304 connect(
this, SIGNAL(
articlesTrouves(QVector<QStringList>)),
ihm, SLOT(mettreAJourListeArticles(QVector<QStringList>)));
307 connect(
this, SIGNAL(
donneesArticleSelectionne(QVector<QStringList>)),
ihm, SLOT(afficherDonneesArticleSelectionne(QVector<QStringList>)));
320 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";
322 QVector<QStringList> listeArticlesTrouves;
337 #ifdef DEBUG_SUPERVISION 338 qDebug() << Q_FUNC_INFO <<
"Nom article" << nomArticle;
342 QVector<QStringList> donneesArticle;
346 #ifdef DEBUG_SUPERVISION 347 qDebug() << Q_FUNC_INFO <<
"nombreCasiers" << nombreCasiers;
350 if(nombreCasiers > 1)
352 QVector<QString> numeroDesCasiers;
356 for(
int i = 0; i < numeroDesCasiers.size(); i++)
362 if(!donneesArticle.isEmpty())
372 if(!donneesArticle.isEmpty())
388 #ifdef DEBUG_SUPERVISION 389 qDebug() << Q_FUNC_INFO << trame;
397 #ifdef DEBUG_SUPERVISION 405 int articleQuantite = strArticleQuantite.toInt();
407 if(nombreArticle > articleQuantite)
418 #ifdef DEBUG_SUPERVISION 419 qDebug() << Q_FUNC_INFO <<
"Article introuvable !";
433 QString poids = trame.section(
';',3,3);
435 #ifdef DEBUG_SUPERVISION 436 qDebug() << Q_FUNC_INFO <<
"poids:" << poids;
451 QString numCasier = trame.section(
';',2,2);
453 #ifdef DEBUG_SUPERVISION 454 qDebug() << Q_FUNC_INFO <<
"numCasier:" << numCasier;
471 int intPoidsArticle =
arrondir(poidsArticle);
473 #ifdef DEBUG_SUPERVISION 474 qDebug() << Q_FUNC_INFO <<
"intPoidsArticle:" << intPoidsArticle;
477 int intPoidsTotal =
arrondir(poidsTotal);
479 #ifdef DEBUG_SUPERVISION 480 qDebug() << Q_FUNC_INFO <<
"intPoidsTotal:" << intPoidsTotal;
485 #ifdef DEBUG_SUPERVISION 486 qDebug() << Q_FUNC_INFO <<
"tare:" << intTare;
491 double doubleNombreArticle = (intPoidsTotal - intTare) / intPoidsArticle;
492 QString strNombreArticle = QString::number(doubleNombreArticle,
'f',
PRECISION);
493 int nombreArticle = strNombreArticle.toInt();
495 #ifdef DEBUG_SUPERVISION 496 qDebug() << Q_FUNC_INFO <<
"nombreArticle:" << nombreArticle;
499 return nombreArticle;
510 double doubleArrondire = arrondire.toDouble();
511 QString strArrondire = QString::number(doubleArrondire,
'f',
PRECISION);
512 int doubleArrondie = strArrondire.toInt();
514 return doubleArrondie;
530 donneesArticle.push_back(donnees);
void verifierAuthentificationIdentifiant(QString identifiant, QString motDePasse)
[verifierAuthentificationBadge]
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.
La classe Article traite les articles.
Déclaration de la classe Rfid.
QString getIdentifiantUtilisateur()
Définition de la méthode getIdentifiantUtilisateur.
bool executer(QString requete)
exécute une requête SQL de type UPDATE, INSERT et DELETE
Armoire * armoire
association d'un objet Armoire
void connecterSignauxSlots()
[connecterUtilisateur]
bool verifierDonneesUtilisateur(QStringList &donnees)
Définition de la méthode verifierDonneesUtilisateur.
~Supervision()
Définition du destructeur de Supervision.
Déclaration de la classe Ihm.
CodeBarre * codeBarre
association d'un objet CodeBarre
Communication * communication
association d'un objet Communication
QString getNbCasiers() const
Définition de la méthode getNbCasiers.
bool connecter()
Définition méthose connecter()
void mettreAJourQuantite(QString quantite)
Définition de la méthode mettreAJourQuantite.
void traiterTramePoids(QString trame)
[selectionnerArticle_supervision]
#define MESSAGE_ERREUR_UTILISATEUR_DATE_NON_VALIDE
La classe Casier gère le casier contenant des articles.
Bdd * bdd
association d'un objet Bdd (accès à la base de données)
QString extraireNumeroCasier(QString trame)
Définition de la méthode extraireNumeroCasier.
void crypterMotDepasse(QString &motDePasse)
[recupererDonneesUtilisateur]
#define MESSAGE_ERREUR_UTILISATEUR_NON_VALIDE
QStringList getInformations()
Définition de la méthode getInformations.
void connecterUtilisateur(QStringList &donnees)
[verifierDonneesUtilisateur]
QVector< Casier * > casiers
les casiers de l'armoire
Emplacment de la date de validite.
void placerCasier(Casier *casier)
Définition de la méthode placerCasier.
int compter(QString poidArticle, QString poidTotal, QString tare)
Définition de la méthode compter.
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.
void ajouterDonneesArticle(Article *article, QVector< QStringList > &donneesArticle, QStringList &donnees)
Définition de la méthode ajouterDonneesArticle.
Déclaration de la classe Armoire.
Rfid * rfid
association d'un objet Rfid (le lecteur de badge)
Déclaration de la classe Bdd.
Déclaration de la classe CodeBarre.
void rechercherArticle(QString recherche)
Définition de la méthode rechercherArticle.
void deconnecterUtilisateur()
Méthode qui permet la déconnexion de l'utilisateur.
Déclaration de la classe CodeBare.
QStringList getInformationsArmoire()
Définition de la méthode getInformationsArmoire.
Déclaration de la classe Ihm.
bool verifierDateValidite(QString stringDateValidite)
[crypterMotDepasse]
bool recupererDonneesArticleParNom(QString nomArticle, int numCasier=0)
Récupère les données d'un article de l'armoire dans la base de données par son nomArticle.
Supervision(Ihm *parent=nullptr)
Définition du constructeur de la classe Supervision.
La classe Utilisateur gère les données relative à l'utilisateur.
QString extrairePoids(QString trame)
Définition de la méthode extrairePoids.
Déclaration de la classe Supervision.
void selectionnerArticle(QString nomArticle)
[Supervision_rechercherArticle]
QStringList recupererDonneesUtilisateur(QString requeteBDD)
[verifierAuthentificationIdentifiant]
bool recuperer(QString requete, QString &donnees)
exécute une requête SQL de type SELECT et récupère un champ d'un seul enregistrement ...
void articlesTrouves(QVector< QStringList >)
La classe Communication permet de communiquer avec le port série.
La classe QObject est la classe de base de tous les objets Qt. Elle permet à ces objets Qt de dispose...
void reponseDemandeDeConnexion(bool, QString)
void demarrerCommunicationPort()
Définition de la méthode demarrerCommunicationPort.
int arrondir(QString arrondire)
Définition de la méthode arrondir.
Ihm * ihm
association d'un objet Ihm (fenêtre princiaple de l'application)
static QVector< QString > recupererNumeroCasierPourNomArticle(QString nomArticle)
Définition de la méthode recupererNumeroCasierPourNomArticle.
static unsigned int recupererNombreCasiersPourNomArticle(QString nomArticle)
Définition de la méthode recupererNombreCasiersPourNomArticle.
Déclaration de la classe Utilisateur.
La classe Armoire traite les articles.
void erreurDepassementQuantite()
bool recupererDonneesArticleParNumeroCasier(QString numeroCasier)
Définition de la méthode recupererDonneesArticleParNumeroCasier.
static Bdd * getInstance()
Définition méthode getInstance()
void envoyerRequetePoids(QString numeroCasier=0)
Définition de la méthode envoyerRequetePoids.
La classe Rfid traite la trame reçue d'un lecteur Rfid.
Utilisateur * utilisateur
association d'un objet Utilisateur (l'utilisateur authentifié)