From c0a876546514a4c224dab355be8a1bdd13086939 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Vermot?= Date: Tue, 9 Jan 2024 08:23:39 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20g=C3=A9n=C3=A9ration=20du=20r?= =?UTF-8?q?=C3=A9cap=20annuel=20pour=20l'ann=C3=A9e=20s=C3=A9lectionn?= =?UTF-8?q?=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ressources/account-file-text.svg | 1 + src/AeroDms.cpp | 20 ++++++ src/AeroDms.h | 4 ++ src/PdfRenderer.cpp | 116 +++++++++++++++++++++++++++++-- src/PdfRenderer.h | 7 +- 5 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 ressources/account-file-text.svg diff --git a/ressources/account-file-text.svg b/ressources/account-file-text.svg new file mode 100644 index 0000000..29e0653 --- /dev/null +++ b/ressources/account-file-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/AeroDms.cpp b/src/AeroDms.cpp index 8a71818..9b39976 100644 --- a/src/AeroDms.cpp +++ b/src/AeroDms.cpp @@ -343,6 +343,12 @@ AeroDms::AeroDms(QWidget* parent):QMainWindow(parent) connect(bouttonGenerePdf, &QAction::triggered, this, &AeroDms::genererPdf); toolBar->addAction(bouttonGenerePdf); + const QIcon iconeGenerePdfRecapHdv = QIcon("./ressources/account-file-text.svg"); + bouttonGenerePdfRecapHdv = new QAction(iconeGenerePdfRecapHdv, tr("&Générer les PDF de recap HdV de l'année séléctionnée"), this); + bouttonGenerePdfRecapHdv->setStatusTip(tr("Générer les PDF de recap HdV de l'année séléctionnée")); + connect(bouttonGenerePdfRecapHdv, &QAction::triggered, this, &AeroDms::genererPdfRecapHdV); + toolBar->addAction(bouttonGenerePdfRecapHdv); + QToolBar* SelectionToolBar = addToolBar(tr("")); listeDeroulanteAnnee = new QComboBox(this); @@ -475,6 +481,13 @@ void AeroDms::peuplerTableVols() vueVols->setItem(i, AeroDmsTypes::VolTableElement_REMARQUE, new QTableWidgetItem(vol.remarque)); } vueVols->resizeColumnsToContents(); + + bouttonGenerePdfRecapHdv->setEnabled(true); + //On desactive la génération du récap annuel si on est sur la séléction "Toutes les années) + if (listeDeroulanteAnnee->currentData().toInt() == -1) + { + bouttonGenerePdfRecapHdv->setEnabled(false); + } } void AeroDms::peuplerListeDeroulanteAnnee() @@ -604,6 +617,13 @@ void AeroDms::genererPdf() cheminStockageFacturesTraitees); } +void AeroDms::genererPdfRecapHdV() +{ + pdf->imprimerLeRecapitulatifDesHeuresDeVol( listeDeroulanteAnnee->currentData().toInt(), + cheminSortieFichiersGeneres, + cheminStockageFacturesTraitees); +} + void AeroDms::enregistrerUneFacture() { bool estEnEchec = false; diff --git a/src/AeroDms.h b/src/AeroDms.h index 502785e..31c9ced 100644 --- a/src/AeroDms.h +++ b/src/AeroDms.h @@ -107,6 +107,9 @@ class AeroDms : public QMainWindow QProgressDialog *progressionGenerationPdf; AeroDmsTypes::ParametresMetier parametresMetiers; + //Bouttons + QAction* bouttonGenerePdfRecapHdv; + //Données internes QString piloteAEditer; int factureIdEnBdd; @@ -117,6 +120,7 @@ public slots: void enregistrerUneFacture(); void enregistrerUneRecette(); void genererPdf(); + void genererPdfRecapHdV(); void prevaliderDonnnesSaisies(); void prevaliderDonnneesSaisiesRecette(); void changerInfosVolSurSelectionTypeVol(); diff --git a/src/PdfRenderer.cpp b/src/PdfRenderer.cpp index 23625a3..8d7ef84 100644 --- a/src/PdfRenderer.cpp +++ b/src/PdfRenderer.cpp @@ -25,8 +25,8 @@ PdfRenderer::PdfRenderer() db = new ManageDb(); view = new QWebEnginePage(this); nombreFacturesTraitees = 0; - nombreFacturesATraiter = 0; indiceFichier = 0; + laDemandeEstPourUnDocumentUnique = false; } PdfRenderer::PdfRenderer(ManageDb *p_db, QString p_cheminTemplatesHtml, QWidget* parent) @@ -34,8 +34,8 @@ PdfRenderer::PdfRenderer(ManageDb *p_db, QString p_cheminTemplatesHtml, QWidget* db = p_db; view = new QWebEnginePage(this); nombreFacturesTraitees = 0; - nombreFacturesATraiter = 0; indiceFichier = 0; + laDemandeEstPourUnDocumentUnique = false; ressourcesHtml = QUrl(QString("file:///%1/").arg(p_cheminTemplatesHtml)); @@ -78,7 +78,50 @@ void PdfRenderer::impressionTerminee(const QString& filePath, bool success) { db->ajouterDemandeCeEnBdd(demandeEnCours); emit mettreAJourNombreFacturesTraitees(nombreFacturesTraitees); - imprimerLaProchaineDemandeDeSubvention(); + + //Si la demande ne concerne pas un document unique, on fait les demandes suivantes + if (!laDemandeEstPourUnDocumentUnique) + { + imprimerLaProchaineDemandeDeSubvention(); + } + //Sinon on emet directement la fin d'impression + else + { + emit generationTerminee(cheminSortieFichiersGeneres); + } + +} + +void PdfRenderer::imprimerLeRecapitulatifDesHeuresDeVol( const int p_annee, + const QString p_cheminSortieFichiersGeneres, + const QString p_cheminStockageFactures) +{ + nombreFacturesTraitees = 0; + indiceFichier = 0; + laDemandeEstPourUnDocumentUnique = true; + + cheminSortieFichiersGeneres = QString(p_cheminSortieFichiersGeneres).append(QDateTime::currentDateTime().toString("yyyy-MM-dd_hhmm")); + repertoireDesFactures = p_cheminStockageFactures; + QDir().mkdir(cheminSortieFichiersGeneres); + if (QDir(cheminSortieFichiersGeneres).exists()) + { + cheminSortieFichiersGeneres.append("/"); + listeDesFichiers.clear(); + + emit mettreAJourNombreFacturesATraiter(1); + emit mettreAJourNombreFacturesTraitees(0); + + const AeroDmsTypes::ListeSubventionsParPilotes listePilotesDeCetteAnnee = db->recupererSubventionsPilotes( p_annee, + "*", + false); + imprimerLeFichierPdfDeRecapAnnuel(p_annee, listePilotesDeCetteAnnee); + + nombreFacturesTraitees++; + } + else + { + qDebug() << "Erreur création repertoire"; + } } int PdfRenderer::imprimerLesDemandesDeSubvention( const QString p_nomTresorier, @@ -88,9 +131,9 @@ int PdfRenderer::imprimerLesDemandesDeSubvention( const QString p_nomTresorier, AeroDmsTypes::ListeDemandeRemboursement listeDesRemboursements = db->recupererLesSubventionsAEmettre(); demandeEnCours.nomTresorier = p_nomTresorier; listeAnnees = db->recupererAnneesAvecVolNonSoumis(); - nombreFacturesATraiter = listeDesRemboursements.size(); nombreFacturesTraitees = 0 ; indiceFichier = 0; + laDemandeEstPourUnDocumentUnique = false; cheminSortieFichiersGeneres = QString(p_cheminSortieFichiersGeneres).append(QDateTime::currentDateTime().toString("yyyy-MM-dd_hhmm")); repertoireDesFactures = p_cheminStockageFactures; QDir().mkdir(cheminSortieFichiersGeneres); @@ -396,6 +439,71 @@ void PdfRenderer::recopierFactures(const QStringList p_listeFactures) } } +void PdfRenderer::imprimerLeFichierPdfDeRecapAnnuel( const int p_annee, + const AeroDmsTypes::ListeSubventionsParPilotes p_listePilotesDeCetteAnnee) +{ + //QFile table("./ressources/HTML/TableauRecap.html"); + QFile table(QString(ressourcesHtml.toLocalFile()).append("TableauRecap.html")); + //QFile tableItem("./ressources/HTML/TableauRecapItem.html"); + QFile tableItem(QString(ressourcesHtml.toLocalFile()).append("TableauRecapItem.html")); + QString templateTable = ""; + QString templateTableItem = ""; + if (table.open(QFile::ReadOnly | QFile::Text) && tableItem.open(QFile::ReadOnly | QFile::Text)) + { + QTextStream inTable(&table); + QTextStream inTableItem(&tableItem); + templateTable = inTable.readAll(); + templateTableItem = inTableItem.readAll(); + } + else + { + qDebug() << "Erreur ouverture fichier"; + } + templateTable.replace("__date__", QDate::currentDate().toString("dd/MM/yyyy")); + templateTable.replace("__exercice__", QString::number(p_annee)); + + for (int i = 0; i < p_listePilotesDeCetteAnnee.size(); i++) + { + QString item = templateTableItem; + item.replace("__pilote__", QString(p_listePilotesDeCetteAnnee.at(i).nom).append(" ").append(p_listePilotesDeCetteAnnee.at(i).prenom)); + item.replace("__HdvEnt__", p_listePilotesDeCetteAnnee.at(i).entrainement.heuresDeVol); + item.replace("__CouEnt__", QString::number(p_listePilotesDeCetteAnnee.at(i).entrainement.coutTotal)); + item.replace("__SubEnt__", QString::number(p_listePilotesDeCetteAnnee.at(i).entrainement.montantRembourse)); + item.replace("__HdVBal__", p_listePilotesDeCetteAnnee.at(i).balade.heuresDeVol); + item.replace("__CouBal__", QString::number(p_listePilotesDeCetteAnnee.at(i).balade.coutTotal)); + item.replace("__SubBal__", QString::number(p_listePilotesDeCetteAnnee.at(i).balade.montantRembourse)); + item.replace("__HdVSor__", p_listePilotesDeCetteAnnee.at(i).sortie.heuresDeVol); + item.replace("__CouSor__", QString::number(p_listePilotesDeCetteAnnee.at(i).sortie.coutTotal)); + item.replace("__SubSor__", QString::number(p_listePilotesDeCetteAnnee.at(i).sortie.montantRembourse)); + item.replace("__HdvTot__", p_listePilotesDeCetteAnnee.at(i).totaux.heuresDeVol); + item.replace("__CouTot__", QString::number(p_listePilotesDeCetteAnnee.at(i).totaux.coutTotal)); + item.replace("__SubTot__", QString::number(p_listePilotesDeCetteAnnee.at(i).totaux.montantRembourse)); + + templateTable.replace("", item); + } + + const AeroDmsTypes::SubventionsParPilote totaux = db->recupererTotauxAnnuel(p_annee, true); + + templateTable.replace("__TotHdvEnt__", totaux.entrainement.heuresDeVol); + templateTable.replace("__TotCouEnt__", QString::number(totaux.entrainement.coutTotal)); + templateTable.replace("__TotSubEnt__", QString::number(totaux.entrainement.montantRembourse)); + templateTable.replace("__TotHdVBal__", totaux.balade.heuresDeVol); + templateTable.replace("__TotCouBal__", QString::number(totaux.balade.coutTotal)); + templateTable.replace("__TotSubBal__", QString::number(totaux.balade.montantRembourse)); + templateTable.replace("__TotHdVSor__", totaux.sortie.heuresDeVol); + templateTable.replace("__TotCouSor__", QString::number(totaux.sortie.coutTotal)); + templateTable.replace("__TotSubSor__", QString::number(totaux.sortie.montantRembourse)); + templateTable.replace("__TotHdvTot__", totaux.totaux.heuresDeVol); + templateTable.replace("__TotCouTot__", QString::number(totaux.totaux.coutTotal)); + templateTable.replace("__TotSubTot__", QString::number(totaux.totaux.montantRembourse)); + + view->setHtml(templateTable, + ressourcesHtml); + + demandeEnCours.typeDeDemande = AeroDmsTypes::PdfTypeDeDemande_RECAP_ANNUEL; + demandeEnCours.nomFichier = QString(".Recap_pilote_").append(QString::number(p_annee)); +} + void PdfRenderer::produireFichierPdfGlobal() { QByteArray pdf; diff --git a/src/PdfRenderer.h b/src/PdfRenderer.h index 32b8fc4..47875db 100644 --- a/src/PdfRenderer.h +++ b/src/PdfRenderer.h @@ -34,6 +34,9 @@ class PdfRenderer : public QWidget { int imprimerLesDemandesDeSubvention( const QString p_nomTresorier, const QString p_cheminSortieFichiersGeneres, const QString p_cheminStockageFactures); + void imprimerLeRecapitulatifDesHeuresDeVol( const int p_annee, + const QString p_cheminSortieFichiersGeneres, + const QString p_cheminStockageFactures); private : QWebEnginePage* view; @@ -42,17 +45,19 @@ private : QString cheminSortieFichiersGeneres; QString repertoireDesFactures; + bool laDemandeEstPourUnDocumentUnique; QStringList listeDesFichiers; AeroDmsTypes::DemandeEnCoursDeTraitement demandeEnCours; QList listeAnnees; int nombreFacturesTraitees; - int nombreFacturesATraiter; int indiceFichier; void imprimerLaProchaineDemandeDeSubvention(); void remplirLeChampMontant(QString& p_html, const float p_montant); + + void imprimerLeFichierPdfDeRecapAnnuel(const int p_annee, const AeroDmsTypes::ListeSubventionsParPilotes p_listePilotesDeCetteAnnee); void produireFichierPdfGlobal(); void recopierFacture(const QString p_nomFacture);