|
- #include "ReportGenerator.h"
- #include <QtXlsx>
- #include <QStringList>
- #include "ZTData.h"
- #include "LogMgr.h"
- #include "GlobalDefine.h"
- #include "ZTStats.h"
-
- CReportGenerator::CReportGenerator()
- {
- mDirParserThread = new QThread();
- mDirParserWorkerThread = new CDirParserThread();
- mDirParserWorkerThread->moveToThread(mDirParserThread);
- connect(mDirParserThread,SIGNAL(started()),mDirParserWorkerThread,SLOT(ParseDirectories()));
- connect(mDirParserThread,SIGNAL(finished()),this,SLOT(ThreadQuit()));
- connect(mDirParserWorkerThread,SIGNAL(ParsingFinished(int)),this,SLOT(DirParsingFinished(int)));
- connect(mDirParserWorkerThread,SIGNAL(ReportProgressStatus(QString)),this,SLOT(ThreadReportStatus(QString)));
- connect(mDirParserWorkerThread,SIGNAL(ThreadAborted()),this,SLOT(DirThreadAborted()));
-
- mStationNames << "Angrignon" << "Beaugrand" << "Longueuil" << "Berri" << "Snowdon" << "St-Michel" << "Vertu" << "Bourassa" << "Montmorency";
-
- //Allocate report data structure for each station
- for(int i = 0; i < NB_ZT_ID; i++)
- { QList<CLogElement*> *ElementList = new QList<CLogElement*>;
- mReportData.append(ElementList);
- }
- }
-
- CReportGenerator::~CReportGenerator()
- {
- mDirParserThread->quit();
- delete mDirParserWorkerThread;
- //delete mDirParserThread;
- }
-
- int CReportGenerator::GenerateReport(QString ReportFileName, CReportProgramSettingsData ReportSettings, CReportConfigData ReportFilters)
- {
-
- mReportFilename = ReportFileName;
- mReportFilters = ReportFilters;
-
- ClearReportData();
-
- mDirParserWorkerThread->SetParsingInfo(ReportSettings,ReportFilters,&mReportData);
- mDirParserThread->start();
-
-
- return RET_OK;
- }
-
- int CReportGenerator::ClearReportData()
- {
- for(int station = 0; station < mReportData.size(); station++)
- {
- QList<CLogElement*> *LogsList = mReportData.at(station);
- for(int log = 0; log < LogsList->size(); log++)
- {
- delete LogsList->at(log);
- }
- LogsList->clear();
- }
- return RET_OK;
- }
-
-
-
- void CReportGenerator::ThreadQuit()
- {
- qDebug("Parsing thread quit");
- }
-
- void CReportGenerator::ThreadTerminated()
- {
- qDebug("Parsing thread terminated");
- }
-
- void CReportGenerator::DirParsingFinished(int Res)
- {
- mDirParserThread->exit();
- if(Res == 0)
- {
- ClearReportData();
- ThreadReportStatus("La génération du rapport a échoué...");
- mProgramPtr->ReportCreationFinished(QString());
- return;
- }
-
- //Generate report
- GenerateExcelReport();
- }
-
- void CReportGenerator::DirThreadAborted()
- {
- mDirParserThread->exit();
- ClearReportData();
- ThreadReportStatus("La génération du rapport a été annulée");
- mProgramPtr->ReportCreationFinished(QString());
- }
-
- int CReportGenerator::GenerateExcelReport()
- {
- if(mReportFilename.isEmpty())
- {
- return RET_ERROR;
- }
- ThreadReportStatus("Passages analysés... création du fichier Excel.");
-
- QXlsx::Document ExcelDoc(mReportFilename);
- //Clean the file if it already exist
- for(int station = 0; station < mStationNames.size(); station++)
- {
- ExcelDoc.deleteSheet(mStationNames.at(station));
- }
-
- for(int station = 0; station < mReportData.size(); station++)
- {
- int PassageID = 1;
- if(mReportData.at(station)->isEmpty() == false)
- {
- QList<CLogElement*> *PassageLogData = mReportData.at(station);
- int row = 6;
- ExcelDoc.addSheet(mStationNames.at(station));
- ExcelDoc.selectSheet(mStationNames.at(station));
-
- //Create Header
- ExcelDoc.write(1,1,QString("Rapport de déclenchements ZT de la station %1").arg(mStationNames.at(station)));
- ExcelDoc.write(2,1,QString("Date de début %1").arg(mReportFilters.mReportStartDate.toString("yyyy-MM-dd")));
- ExcelDoc.write(3,1,QString("Date de fin %1").arg(mReportFilters.mReportEndDate.toString("yyyy-MM-dd")));
-
- ExcelDoc.write(5,1,QString("ID Passage"));
- ExcelDoc.write(5,2,QString("Date et Heure"));
- ExcelDoc.write(5,3,QString("Nb Décl (passage)"));
- ExcelDoc.write(5,4,QString("Zone"));
- ExcelDoc.write(5,5,QString("Composition"));
- ExcelDoc.write(5,6,QString("Déclenchement"));
- ExcelDoc.write(5,7,QString("Rang"));
- ExcelDoc.write(5,8,QString("Fonction FN"));
- ExcelDoc.write(5,9,QString("Fonction PG"));
- ExcelDoc.write(5,10,QString("Fonction PP"));
- ExcelDoc.write(5,11,QString("Fonction ZT1"));
- ExcelDoc.write(5,12,QString("Fonction ZT2"));
-
-
-
- for(int log = 0; log < PassageLogData->size(); log++)
- {
- if(PassageLogData->at(log)->mZTLogType == ZT1_LOG_TYPE)
- {
- bool IncPassage = false;
- CZT1LogElement *Element = (CZT1LogElement*)PassageLogData->at(log);
- if(mReportFilters.mReportIncludeSansDeclZT1 == true)
- {
- ExcelDoc.write(row,1,PassageID);
- ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss"));
- ExcelDoc.write(row,3,Element->mZTDetections.size());
- ExcelDoc.write(row,4,"ZT1");
- ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3));
- ExcelDoc.write(row,6,"---");
- ExcelDoc.write(row,7,"---");
-
- if(Element->mDetectionFlagsValid == false)
- {
- ExcelDoc.write(row,8,QString("N/D")); //Fonction FN
- ExcelDoc.write(row,9,QString("N/D")); //Fonction PG
- ExcelDoc.write(row,10,QString("N/D")); //Fonction PPE
- ExcelDoc.write(row,11,QString("N/D")); //Fonction ZT1
- ExcelDoc.write(row,12,QString("N/D")); //Fonction ZT2
- }
- else
- {
- QString Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_FN_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,8,Status); //Fonction FN
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_PG_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,9,Status); //Fonction PG
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_PP)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,10,Status); //Fonction PP
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT1_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,11,Status); //ZT1
-
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT2_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,12,Status); //ZT2
-
- }
-
- row++;
- }
-
- if(Element->mZTDetections.size() != 0)
- {
- for(int detect = 0; detect < Element->mZTDetections.size(); detect++)
- {
- QString DetectionName = "";
- switch(Element->mZTDetections.at(detect)->mDetectionID)
- {
- case DETECTION_FN_DETECTION:
- {
- if(mReportFilters.mReportFilterIncludeFN == true)
- {
- DetectionName = "FN";
- }
- break;
- }
- case DETECTION_MAGNETIC_SENSOR_COUNT:
- {
- if(mReportFilters.mReportfilterIncludeComptage1 == true)
- {
- DetectionName = "Erreur de comptage";
- }
- break;
- }
- case DETECTION_PG_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePG == true)
- {
- DetectionName = "PG";
- }
- break;
- }
- case DETECTION_PPI_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePPI1 == true)
- {
- DetectionName = "PPI";
- }
- break;
- }
- case DETECTION_PPE_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePPE1 == true)
- {
- DetectionName = "PPE";
- }
- break;
- }
- case DETECTION_PEQ1_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePEQ1 == true)
- {
- DetectionName = "Panne équipement";
- }
- break;
- }
- default:
- {
- DetectionName.clear();
- break;
- }
- }
-
- if(DetectionName.isEmpty() == false)
- {
- ExcelDoc.write(row,1,PassageID);
- ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss"));
- ExcelDoc.write(row,3,Element->mZTDetections.size());
- ExcelDoc.write(row,4,"ZT1");
- ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3));
- ExcelDoc.write(row,6,DetectionName);
- ExcelDoc.write(row,7,Element->mZTDetections.at(detect)->mRank);
-
- if(Element->mDetectionFlagsValid == false)
- {
- ExcelDoc.write(row,8,QString("N/D")); //Fonction FN
- ExcelDoc.write(row,9,QString("N/D")); //Fonction PG
- ExcelDoc.write(row,10,QString("N/D")); //Fonction PPE
- ExcelDoc.write(row,11,QString("N/D")); //Fonction ZT1
- ExcelDoc.write(row,12,QString("N/D")); //Fonction ZT2
- }
- else
- {
- QString Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_FN_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,8,Status); //Fonction FN
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_PG_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,9,Status); //Fonction PG
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_PP)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,10,Status); //Fonction PP
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT1_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,11,Status); //ZT1
-
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT2_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,12,Status); //ZT2
-
- }
-
- row++;
- IncPassage = true; //we had ad least one log added, this passage must count...
- }
- }
-
- }
-
- if(IncPassage == true || mReportFilters.mReportIncludeSansDeclZT1 == true)
- {
- PassageID++;
- }
- }
- else if(PassageLogData->at(log)->mZTLogType == ZT2_LOG_TYPE)
- {
- bool IncPassage = false;
- CZT2LogElement *Element = (CZT2LogElement*)PassageLogData->at(log);
- if(mReportFilters.mReportIncludeSansDeclZT2 == true)
- {
- ExcelDoc.write(row,1,PassageID);
- ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss"));
- ExcelDoc.write(row,3,Element->mZTDetections.size());
- ExcelDoc.write(row,4,"ZT2");
- ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3));
- ExcelDoc.write(row,6,"---");
- ExcelDoc.write(row,7,"---");
-
- if(Element->mDetectionFlagsValid == false)
- {
- ExcelDoc.write(row,8,QString("N/D")); //Fonction FN
- ExcelDoc.write(row,9,QString("N/D")); //Fonction PG
- ExcelDoc.write(row,10,QString("N/D")); //Fonction PPE
- ExcelDoc.write(row,11,QString("N/D")); //Fonction ZT1
- ExcelDoc.write(row,12,QString("N/D")); //Fonction ZT2
- }
- else
- {
- ExcelDoc.write(row,8,QString("N/A")); //Fonction FN
- ExcelDoc.write(row,9,QString("N/A")); //Fonction PG
-
- QString Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_PP2)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,10,Status); //Fonction PP
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT1_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,11,Status); //ZT1
-
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT2_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,12,Status); //ZT2
-
- }
-
-
- row++;
- }
-
- if(Element->mZTDetections.size() != 0)
- {
- for(int detect = 0; detect < Element->mZTDetections.size(); detect++)
- {
- QString DetectionName = "";
- switch(Element->mZTDetections.at(detect)->mDetectionID)
- {
- case DETECTION_ZT2_MAGNETIC_SENCOR_COUNT:
- {
- if(mReportFilters.mReportfilterIncludeComptage2 == true)
- {
- DetectionName = "Erreur de comptage";
- }
- break;
- }
- case DETECTION_ZT2_PPI_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePPI2 == true)
- {
- DetectionName = "PPI";
- }
- break;
- }
- case DETECTION_ZT2_PPE_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePPE2 == true)
- {
- DetectionName = "PPE";
- }
- break;
- }
- case DETECTION_PEQ2_DETECTION:
- {
- if(mReportFilters.mReportfilterIncludePEQ2 == true)
- {
- DetectionName = "Panne Équipement";
- }
- break;
- }
- default:
- {
- DetectionName.clear();
- break;
- }
- }
-
- if(DetectionName.isEmpty() == false)
- {
- ExcelDoc.write(row,1,PassageID);
- ExcelDoc.write(row,2,Element->mPassageDateTime.toString("yyyy-MM-dd hh:mm:ss"));
- ExcelDoc.write(row,3,Element->mZTDetections.size());
- ExcelDoc.write(row,4,"ZT2");
- ExcelDoc.write(row,5,QString("%1-%2-%3").arg(Element->mFlags.mTrainCompo1).arg(Element->mFlags.mTrainCompo2).arg(Element->mFlags.mTrainCompo3));
- ExcelDoc.write(row,6,DetectionName);
- ExcelDoc.write(row,7,Element->mZTDetections.at(detect)->mRank);
-
- if(Element->mDetectionFlagsValid == false)
- {
- ExcelDoc.write(row,8,QString("N/D")); //Fonction FN
- ExcelDoc.write(row,9,QString("N/D")); //Fonction PG
- ExcelDoc.write(row,10,QString("N/D")); //Fonction PPE
- ExcelDoc.write(row,11,QString("N/D")); //Fonction ZT1
- ExcelDoc.write(row,12,QString("N/D")); //Fonction ZT2
- }
- else
- {
- ExcelDoc.write(row,8,QString("N/A")); //Fonction FN
- ExcelDoc.write(row,9,QString("N/A")); //Fonction PG
-
- QString Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_PP2)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,10,Status); //Fonction PP
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT1_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,11,Status); //ZT1
-
-
- Status = "Hors service";
- if(Element->mFlags.mZTDetectionsConfig & DETECTION_FCT_ZT2_MASK)
- {
- Status = "En service";
- }
- ExcelDoc.write(row,12,Status); //ZT2
-
- }
-
-
- row++;
- IncPassage = true; //we had ad least one log added, this passage must count...
- }
- }
-
- }
- if(IncPassage == true || mReportFilters.mReportIncludeSansDeclZT2)
- {
- PassageID++;
- }
- }
- }
- }
- }
-
- ExcelDoc.save();
- ThreadReportStatus("Rapport créé avec succès!");
- mProgramPtr->ReportCreationFinished(mReportFilename);
- qDebug("Création du rapport terminée");
-
- return RET_OK;
- }
-
- void CReportGenerator::ThreadReportStatus(QString status)
- {
- mProgramPtr->UpdateReportProgressStatus(status);
- }
-
- int CReportGenerator::AbortReportCreation()
- {
- mDirParserWorkerThread->KillThread();
- return RET_OK;
- }
|