#include "tfihm.h" #include "ui_tfihm.h" using namespace std; #define CHECK(f,rv) \ if (SCARD_S_SUCCESS != rv) \ { \ printf(f ": %s\n", pcsc_stringify_error(rv)); \ exit(0); \ } TFihm::TFihm(QWidget *parent) : QMainWindow(parent), ui(new Ui::TFihm) { ui->setupUi(this); availableSCard(); ui->gb1->setHidden(true); ui->label->setHidden(true); ui->lbScanAgain->setHidden(true); flagReadDataCard = false; memset(cmd,0,sizeof(cmd)); memset(pbRecvBuffer,0,sizeof(pbRecvBuffer)); index = 0; indexWDH = 0; QString s = ui->lbCarteConnect->text(); ui->lineEditSetFocus->setHidden(true); gestionBalance = new ThreadBalance(); gestionBase = new ThreadGestionBDD(); attenteConnect = new ThreadAttenteConnexion(hContext,s,hCard, dwActiveProtocol); bool ok = connect(attenteConnect,SIGNAL(ConnectOk(long,unsigned long,bool)),this,SLOT(ReceptionInformations(long,unsigned long, bool))); connect(gestionBase,SIGNAL(ConnectOk()),this,SLOT(ReceptionGestionBDD())); connect(attenteConnect,SIGNAL(EnvoieICCID(QString)),this,SLOT(ReceptionICCID(QString))); connect(attenteConnect,SIGNAL(EnvoieCH(QString,QString)),this,SLOT(ReceptionCH(QString,QString))); connect(attenteConnect,SIGNAL(EnvoieWDH(QString)),this,SLOT(ReceptionWDH(QString))); connect(attenteConnect,SIGNAL(EnvoieFinLectureCarte()),this,SLOT(FinRecupCarte())); connect(attenteConnect,SIGNAL(ScanFinish()),this,SLOT(ReceptionOkScan())); connect(this,SIGNAL(EnvoieCodeBarreCarte(QString)),attenteConnect,SLOT(ReceptionCodeBarre(QString))); //connect liée à la gestion de la Balance bool retBalance = connect(gestionBalance,SIGNAL(sigEnvoiePoids(QString)),this,SLOT(ReceptionBalance(QString))); if(retBalance) { } gestionBalance->start(); connect(this,SIGNAL(EnvoieBeginPeser()),gestionBalance,SLOT(receptionBeginPeser())); //connect liées à la gestion de la BDD gestionBase->start(); connect(gestionBase,SIGNAL(EnvoieBaseErreur(QString)),this,SLOT(ReceptionBaseErreur(QString))); connect(this,SIGNAL(EnvoieSelect_id_Client(QString,QString)),gestionBase,SLOT(ReceptionSelect_id_Client(QString,QString))); connect(this,SIGNAL(EnvoieSelectClient(QString,QString,QString)),gestionBase,SLOT(ReceptionSelect_id_ClientNom_Prenom(QString,QString,QString))); connect(this,SIGNAL(EnvoieInfosDepot(QString,QString,QString,QString)),gestionBase,SLOT(ReceptionInfosDepot(QString,QString,QString,QString))); connect(gestionBase,SIGNAL(EnvoieFinDepot()),this,SLOT(FinDepot())); if (!ok) { qDebug("Erreur de connect"); } attenteConnect->start(); ui->statusBar->showMessage("En attente de connexion"); connect(attenteConnect, SIGNAL(PCSCStatusReceived(int,QString)), this, SLOT(AfficheStatusPCSC(int,QString))); } TFihm::~TFihm() { delete ui; } void TFihm::availableSCard() { rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext); rv = SCardListReaders(hContext, NULL, NULL, &dwReaders); mszReaders = (LPTSTR) calloc(dwReaders, sizeof(char)); rv = SCardListReaders(hContext, NULL, mszReaders, &dwReaders); ui->lbCarteConnect->setText(mszReaders); } void TFihm::ReceptionInformations(long RhCard, unsigned long RdwActiveProtocol, bool cartePresente) { if(cartePresente) { ui->statusBar->showMessage("Carte connectee"); ui->lbScan->setHidden(false); ui->lbScanAgain->setHidden(true); }//if cartepresente else { ui->statusBar->showMessage("Carte deconnectee"); flagReadDataCard = false; ui->gb1->setHidden(true); ui->labelHello->setHidden(false); ui->lbCarteConnect->setHidden(false); } } void TFihm::ReceptionICCID(QString iccid) { IccidCarte =iccid; QString requete = "Select id_Client FROM Client WHERE Matricule = \"" + IccidCarte + "\" "; Q_EMIT EnvoieSelect_id_Client(requete,iccid); } void TFihm::AfficheStatusPCSC(int rv, QString msg) { this->ui->label->setText(msg + "(" + QString::number(rv) + ")"); } void TFihm::ReceptionCH(QString nom, QString prenom) { //Faire les requête SQL pour le nom et le prenom; CHnom = nom; CHprenom = prenom; QString requete = "SELECT id_client FROM Client WHERE Nom = \"" + nom + "\" AND Prenom = \"" + prenom + "\" ;"; Q_EMIT EnvoieSelectClient(requete,nom,prenom); } void TFihm::ReceptionWDH(QString WDH) { DepotEffectue[indexWDH] = WDH; indexWDH ++; } void TFihm::FinRecupCarte() { ui->gb1->setHidden(false); ui->labelHello->setHidden(true); ui->lbScanAgain->setHidden(true); ui->leArticle->setFocus(Qt::OtherFocusReason); ui->leArticle->setHidden(true); ui->lbPeser->setHidden(true); } void TFihm::ReceptionGestionBDD() { } void TFihm::ReceptionBaseErreur(QString erreur) { } void TFihm::ReceptionBalance(QString receptionPoids) { //QApplication::processEvents(); poids = receptionPoids; date = QDate::currentDate(); dateString = date.toString("dd/MM/yyyy"); SN_GRV = "1"; Q_EMIT EnvoieInfosDepot(poids,DepotActuel,SN_GRV,dateString); //1er créer la requete pour remplir Informations liées dépot // puis faire la table de jointure a_recuperer pour associer le client au dépot. } void TFihm::ReceptionOkScan() { // ON commence à prendre le poids //QApplication::processEvents(); ui->lbScan->setHidden(true); ui->lbPeser->setHidden(false); Q_EMIT EnvoieBeginPeser(); //On envoie un signal pour dire à la balance de commencer à lire le poids toute les .... secondes. } void TFihm::FinDepot() { //QApplication::processEvents(); ui->lbScanAgain->setHidden(false); ui->lbPeser->setHidden(true); ui->leArticle->setFocus(Qt::OtherFocusReason); } void TFihm::on_leArticle_editingFinished() { //ui->leArticle->setHidden(false); if(DepotActuel != ui->leArticle->text()) { DepotActuel = ui->leArticle->text(); ui->lbScanAgain->setHidden(true); ui->lineEditSetFocus->setFocus(Qt::OtherFocusReason); Q_EMIT EnvoieCodeBarreCarte(ui->leArticle->text()); } else { } }