From 1dc7bed4512fa92a14fc44998db182c1d600849e Mon Sep 17 00:00:00 2001 From: Charles Delachapelle Evarisk Date: Wed, 17 Dec 2025 10:33:25 +0100 Subject: [PATCH] #792 [PDF] add: completion certificate pdf model --- class/actions_dolimeet.class.php | 2 +- ..._completioncertificatedocument.modules.php | 282 ++++++++++++++++++ core/modules/modDoliMeet.class.php | 2 + img/ministere_du_travail.png | Bin 0 -> 42584 bytes langs/fr_FR/dolimeet.lang | 31 ++ 5 files changed, 316 insertions(+), 1 deletion(-) create mode 100644 core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php create mode 100644 img/ministere_du_travail.png diff --git a/class/actions_dolimeet.class.php b/class/actions_dolimeet.class.php index 4e1553f..f56aecf 100644 --- a/class/actions_dolimeet.class.php +++ b/class/actions_dolimeet.class.php @@ -724,7 +724,7 @@ public function doActions(array $parameters, $object, string $action): int } if (strpos($parameters['context'], 'contractcard') !== false) { - if ($action == 'builddoc' && strstr(GETPOST('model'), 'completioncertificatedocument_odt')) { + if ($action == 'builddoc' && strstr(GETPOST('model'), 'completioncertificatedocument_odt') || $action == 'builddoc' && strstr(GETPOST('model'), 'completioncertificatedocument')) { require_once __DIR__ . '/dolimeetdocuments/completioncertificatedocument.class.php'; $document = new CompletioncertificateDocument($this->db); diff --git a/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php b/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php new file mode 100644 index 0000000..d1a2196 --- /dev/null +++ b/core/modules/dolimeet/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php @@ -0,0 +1,282 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * or see https://www.gnu.org/ + */ + +/** + * \file class/dolimeetdocuments/trainingsessiondocument/pdf_completioncertificatedocument.modules.php + * \ingroup dolimeet + * \brief Completion certificate pdf model + */ + +// Load Dolibarr libraries +require_once DOL_DOCUMENT_ROOT . '/contrat/class/contrat.class.php'; +require_once DOL_DOCUMENT_ROOT . '/contact/class/contact.class.php'; +require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php'; + +// Load Saturne libraries +require_once __DIR__ . '/../../../../../../saturne/lib/saturne_functions.lib.php'; +require_once __DIR__ . '/../../../../../../saturne/class/saturnesignature.class.php'; +require_once __DIR__ . '/../../../../../../saturne/core/modules/saturne/modules_saturne.php'; + +/** + * Class pdf_completioncertificatedocument. + */ +class pdf_completioncertificatedocument extends SaturneDocumentModel +{ + /** + * @var DoliDb Database handler + */ + public $db; + + /** + * @var string model name + */ + public $name; + + /** + * @var string model description (short text) + */ + public $description; + + /** + * @var string Module + */ + public string $module = 'dolimeet'; + + /** + * @var string Document type + */ + public string $document_type = 'pdf_attendancesheetdocument'; + + public function __construct($db) + { + global $langs; + + $this->db = $db; + $this->name = 'completioncertificatedocument'; + $this->description = $langs->trans("AttendanceSheetDocumentPDFDescription"); + $this->type = 'pdf'; + $this->marge_gauche = 15; + $this->marge_droite = 15; + $this->marge_haute = 15; + $this->marge_basse = 15; + } + + /** + * Show footer signature of page + * + * @param TCPDF $pdf Object PDF + * @param int $tab_top tab height position + * @param float $tab_height tab height + * @param Translate $outputlangs Object language for output + * @param SaturneSignature $signatory Object signatory + * @param User $userTmp Object user + * @return void + */ + protected function tabSignature(&$pdf, $tab_top, $tab_height, $outputlangs, $signatory, $userTmp) + { + global $mysoc, $langs; + + $pdf->SetDrawColor(128, 128, 128); + $posmiddle = $this->marge_gauche + round(($this->page_largeur - $this->marge_gauche - $this->marge_droite) / 2); + $posy = $tab_top + $tab_height; + $posX = $pdf->getPageWidth() - $this->marge_droite - 100; + + $pdf->SetXY($this->marge_droite - 5, $posy); + $pdf->Cell(0, 0, '', 0, 1); + $pdf->Cell(0, 6, $langs->transnoentities('MadeAt') . ' : ' . $mysoc->town, 0, 1); + $pdf->Cell(0, 6, $langs->transnoentities('The') . ' : ' . dol_print_date(dol_now(), 'dayhour', 'tzuser'), 0, 1); + + $pdf->SetXY($posX, $posy + 5); + $pdf->SetFont('helvetica', '', 10); + $pdf->Cell(0, 6, $langs->transnoentities('FormationSignature'), 0, 1); + $pdf->SetX($posX); + $pdf->MultiCell($posmiddle - $this->marge_gauche - 5, 6, $signatory->firstname . ' ' . $signatory->lastname . ' ' . $userTmp->job . ', ' . $outputlangs->trans('The') . ' ' . dol_print_date($signatory->signature_date), 0, 'L', 0); + if (!empty($signatory->signature)) { + $img = base64_decode(explode(',', $signatory->signature)[1]); + $pdf->Image('@' . $img, $posX, $pdf->GetY(), 60, 8, 'PNG'); + $pdf->SetX($posX); + $pdf->Cell(60, 8, '', 1, 1); + } else { + $pdf->Cell(60, 8, 'N/A', 1, 1, 'C'); + } + + $pdf->SetFont('helvetica', 'B', 7); + $pdf->Ln(10); + $pdf->Cell(0, 6, $langs->transnoentities('FirstRealisationCertificateFooter'), 0, 1); + $pdf->Cell(0, 6, $langs->transnoentities('SecondRealisationCertificateFooter'), 0, 1); + } + + public function write_file($objectDocument, Translate $outputLangs, string $srcTemplatePath, int $hideDetails = 0, int $hideDesc = 0, int $hideRef = 0, array $moreParam): int + { + global $conf, $langs, $mysoc, $user; + + require_once DOL_DOCUMENT_ROOT . '/includes/tecnickcom/tcpdf/tcpdf.php'; + + $pdf = new TCPDF(); + $object = $moreParam['object']; + + $contract = new Contrat($this->db); + $contract->fetch($object->fk_contrat); + $contract->fetch_optionals(); + + $userTmp = new User($this->db); + $signatory = new SaturneSignature($this->db, 'dolimeet'); + $signatory = $signatory->fetchSignatory('UserSignature', $conf->global->DOLIMEET_SESSION_TRAINER_RESPONSIBLE, 'user'); + $signatory = array_shift($signatory); + $userTmp->fetch($signatory->element_id); + + $trainingSessionDict = saturne_fetch_dictionary('c_trainingsession_type'); + + // Certificate variables + $beneficiaryName = $moreParam['attendant']->firstname . ' ' . $moreParam['attendant']->lastname; + $companyName = $mysoc->name; + $contractLabel = $contract->array_options['options_label']; + $trainingStart = dol_print_date($object->date_start, 'day', 'tzuser'); + $trainingEnd = dol_print_date($object->date_end, 'day', 'tzuser'); + $totalHours = convertSecondToTime($object->duration, 'allhourmin'); + $actionName = $langs->trans($trainingSessionDict[$contract->array_options['options_trainingsession_type']]->label); + $issuerName = $userTmp->firstname . ' ' . $userTmp->lastname; + $logoPath = DOL_DOCUMENT_ROOT . '/custom/dolimeet/img/ministere_du_travail.png'; + + if ($moreParam['attendant']->element_type == 'user') { + $attendantCompany = $companyName; + } else { + $contact = new Contact($this->db); + $thirdparty = new Societe($this->db); + $contact->fetch($moreParam['attendant']->element_id); + $thirdparty->fetch($contact->fk_soc); + $attendantCompany = $thirdparty->name; + } + + // PDF view page + $pdf->AddPage(); + $pdf->SetMargins($this->marge_gauche, $this->marge_haute, $this->marge_droite); + + if (file_exists($logoPath)) { + $pdf->Image($logoPath, 10, 10, 40); + } + $pdf->Ln(30); + + $pdf->SetFont('helvetica', 'B', 16); + $pdf->SetTextColor(0, 51, 153); + $pdf->Cell(0, 10, strtoupper($langs->transnoentities('RealisationCertificate')), 0, 1, 'C'); + $pdf->Ln(10); + + $pdf->SetTextColor(0, 0, 0); + $pdf->SetFont('helvetica', '', 11); + + $pdf->Write(6, $langs->transnoentities('IntroductionRealisationCertificate') . ' '); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('FirstnameLastname') . ' '); + $pdf->SetTextColor(0, 0, 0); + $pdf->Write(6, $langs->transnoentities('LegalRepresentativePresentation', $issuerName) . ' '); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('FormationRepresentativeExplaination')); + $pdf->SetTextColor(0, 0, 0); + $pdf->Write(6, $langs->transnoentities('AttestsThat', $companyName) . ' '); + $pdf->Ln(8); + + $pdf->Write(6, $langs->transnoentities('CivilityMMEShort') . '/' . $langs->transnoentities('CivilityMRShort') . ' '); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('BeneficiaryNameExplaination') . ' '); + $pdf->SetTextColor(0, 0, 0); + $pdf->Write(6, $langs->transnoentities('BeneficiaryName', $beneficiaryName) . ' '); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('AttendantCompanyExplaination') . ' '); + $pdf->SetTextColor(0, 0, 0); + $pdf->Write(6, $langs->transnoentities('AttendantCompany', $attendantCompany) . ' '); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('Labelled', $contractLabel)); + $pdf->SetTextColor(0, 0, 0); + $pdf->Ln(10); + + $pdf->SetFont('helvetica', 'B', 11); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('NatureActionType')); + $pdf->Ln(8); + + $pdf->SetTextColor(0, 0, 0); + $pdf->SetFont('helvetica', '', 11); + $pdf->Cell(0, 5, $actionName, 0, 1); + + $pdf->Ln(6); + + $pdf->Write(6, $langs->transnoentities('LastFrom') . ' '); + $pdf->SetTextColor(0, 51, 153); + $pdf->Write(6, $langs->transnoentities('FormationDateRange') . ' '); + $pdf->SetTextColor(0, 0, 0); + $pdf->Write(6, $langs->transnoentities('TrainingStart', $trainingStart) . ' ' . $langs->transnoentities('TrainingEnd', $trainingEnd) . ' ' . $langs->transnoentities('LastHours', $totalHours)); + $pdf->SetTextColor(0, 51, 153); + $pdf->Ln(5); + $pdf->Write(6, $langs->transnoentities('FormationRealizedHours')); + $pdf->SetTextColor(0, 0, 0); + $pdf->Ln(6); + $pdf->Write(6, $langs->transnoentities('FormationLegalText')); + $pdf->Ln(10); + + + // SIGNATURE + $tab_top = $pdf->GetY(); + $heightforinfotot = 50; + $heightforfreetext = getDolGlobalInt('MAIN_PDF_FREETEXT_HEIGHT', 5); + $heightforfooter = $this->marge_basse + 8; + $this->tabSignature($pdf, $tab_top, $this->page_hauteur - $tab_top - $heightforinfotot - $heightforfreetext - $heightforfooter, $langs, $signatory, $userTmp); + + $diroutput = $conf->dolimeet->multidir_output[$object->entity] ?? ''; + if (empty($diroutput)) { + $this->error = "Configuration manquante: conf->digiquali->dir_output"; + return -1; + } + $dir = $diroutput . "/completioncertificatedocument/" . $object->ref; + if (!file_exists($dir)) { + if (dol_mkdir($dir) < 0) { + $this->error = "Impossible de créer le répertoire: $dir"; + return -1; + } + } + + $file_name = dol_sanitizeFileName(dol_print_date(dol_now(), "dayxcard") . "_" . $contract->ref . "-" . rand(1000, 4000) . '_' . $beneficiaryName . "_certificat-realisation") . ".pdf"; + $file = $dir . '/' . $file_name; + $objectDocument->setValueFrom("last_main_doc", $file_name, '', null, '', '', $user); + + try { + $pdf->Output($file, 'F'); + } catch (Exception $exception) { + $this->error = "Erreur lors de la création du PDF : " . $exception->getMessage(); + return -1; + } + if (!file_exists($file)) { + $this->error = "PDF non généré (fichier introuvable après Output) : $file"; + return -1; + } + + if (is_object($objectDocument) && method_exists($objectDocument, "setValueFrom")) { + $res = $objectDocument->setValueFrom("last_main_doc", $file_name, '', null, '', '', $user, '', ''); + if ($res <= 0 && !empty($objectDocument->error)) { + $this->error = $objectDocument->error; + return -1; + } + } + + if (!empty($conf->global->MAIN_UMASK)) { + @chmod($file, octdec($conf->global->MAIN_UMASK)); + } + $this->result = ['fullpath' => $file]; + return 1; + } +} diff --git a/core/modules/modDoliMeet.class.php b/core/modules/modDoliMeet.class.php index 19cc3b9..f71e28f 100644 --- a/core/modules/modDoliMeet.class.php +++ b/core/modules/modDoliMeet.class.php @@ -535,10 +535,12 @@ public function init($options = ''): int delDocumentModel('completioncertificatedocument_odt', 'trainingsessiondocument'); delDocumentModel('completioncertificatedocument_odt', 'completioncertificatedocument'); delDocumentModel('attendancesheetdocument', 'trainingsessiondocument'); + delDocumentModel('completioncertificatedocument', 'completioncertificatedocument'); addDocumentModel('attendancesheetdocument_odt', 'trainingsessiondocument', 'ODT templates', 'DOLIMEET_ATTENDANCESHEETDOCUMENT_ADDON_ODT_PATH'); addDocumentModel('completioncertificatedocument_odt', 'completioncertificatedocument', 'ODT templates', 'DOLIMEET_COMPLETIONCERTIFICATEDOCUMENT_ADDON_ODT_PATH'); addDocumentModel('attendancesheetdocument', 'trainingsessiondocument', $langs->transnoentities('AttendanceSheetDocumentPDFDescription')); + addDocumentModel('completioncertificatedocument', 'completioncertificatedocument', $langs->transnoentities('CompletionCertificateDocumentPDF')); // Load Saturne libraries require_once __DIR__ . '/../../../saturne/class/saturnemail.class.php'; diff --git a/img/ministere_du_travail.png b/img/ministere_du_travail.png new file mode 100644 index 0000000000000000000000000000000000000000..031afa8cb7edf29a3737b505b9c23123b73671f2 GIT binary patch literal 42584 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 IDYMZ32grvbTmS$7 literal 0 HcmV?d00001 diff --git a/langs/fr_FR/dolimeet.lang b/langs/fr_FR/dolimeet.lang index cc3771a..ccbf2d5 100644 --- a/langs/fr_FR/dolimeet.lang +++ b/langs/fr_FR/dolimeet.lang @@ -198,6 +198,7 @@ AttendanceSheetDocumentPDFDescription = Feuille de présence en PDF DisplayAttendanceAbsentInSignature = Affiche la présence absent dans le champ signature de la feuille de présence DisplayAttendanceAbsentInSignatureDescription = Affiche la présence absent si la personne est absente et qu'elle n'a pas signé CompletionCertificateDocument = Certificat de réalisation +CompletionCertificateDocumentPDF = Certificat de réalisation en PDF CompletionCertificateDocuments = certificats de réalisation completioncertificatedocument = certificat de realisation completioncertificatedocument.odt = Certificat de réalisation @@ -327,3 +328,33 @@ TradFoundSessionTrainer = Nombre de formateur(s) inscrits pour cette s TradFoundTrainee = Nombre de stagiaire(s) inscrits pour cette session de formation TradFoundBilling = Le commanditaire correspond au rôle "Contact client facturation contrat" présent dans Dolibarr TradFoundCustomer = Le client correspond au rôle "Contact client suivi contrat" présent dans Dolibarr + +# +# PDF +# + +RealisationCertificate = certificat de realisation +MadeAt = Fait à +FormationSignature = Cachet et signature du responsable du dispensateur de formation +FirstRealisationCertificateFooter = 1 Lorsque l’action est mise en oeuvre dans le cadre d’un projet de transition professionnelle, le certificat de réalisation doit être transmis mensuellement. +SecondRealisationCertificateFooter = 2 Dans le cadre des formations à distance prendre en compte la réalisation des activités pédagogiques et le temps estimé pour les réaliser. +IntroductionRealisationCertificate = Je soussigné(e) +FirstnameLastname = (prénom et nom) +LegalRepresentativePresentation = %s représentant légal du dispensateur de l’action concourant au développement des compétences +FormationRepresentativeExplaination = (raison sociale du dispensateur de formation ou de l’employeur en cas de formation interne), +AttestsThat = %s, atteste que : +BeneficiaryNameExplaination = (nom et prénom du bénéficiaire) +BeneficiaryName = %s salarié(e) de l’entreprise +AttendantCompanyExplaination = (raison sociale) +AttendantCompany = %s a suivi l’action +Labelled = (intitulé) %s +NatureActionType = Nature de l’action concourant au développement des compétences : +LastFrom = qui s'est déroulée du +FormationDateRange = (dates) +FormationDate = %s au %s pour une durée de %s heure(s) +TrainingStart = %s +TrainingEnd = au %s +LastHours = pour une durée de %s heure(s) +CivilityMRShort = Mr. +FormationRealizedHours = (nombre d’heures réalisées ou, s’agissant d’une formation par apprentissage, nombre de mois réalisés) +FormationLegalText = Sans préjudice des délais imposés par les règles fiscales, comptables ou commerciales, je m’engage à conserver l’ensemble des pièces justificatives qui ont permis d’établir le présent certificat pendant une durée de 3 ans à compter de la fin de l’année du dernier paiement. En cas de cofinancement des fonds européens la durée de conservation est étendue conformément aux obligations conventionnelles spécifiques.