diff --git a/Controleur/ControleurAjaxeditioncarteassure_2026_02_17_06h.php b/Controleur/ControleurAjaxeditioncarteassure_2026_02_17_06h.php new file mode 100755 index 00000000..15edaa74 --- /dev/null +++ b/Controleur/ControleurAjaxeditioncarteassure_2026_02_17_06h.php @@ -0,0 +1,125 @@ +carte = new Carteassure(); + } + + public function index() + { + $idPolice = $this->requete->getParametreFormulaire("idPolice"); + + // 1. Récupération des assurés + $assures = $this->carte->getListeEditionCarteAssure($idPolice); + + // Vérification des données avant création PDF + if (empty($assures)) { + echo '
'._("Aucun assuré trouvé pour les critères sélectionnés").'
'; + return; + } + + $logoSocietePath = $_SESSION['dossierLogo']; + // $fondPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/fond_carte.png'; + + if (!file_exists($_SESSION['dossierLogo'])) { + echo '
'._("Le logo de la société est introuvable").'
'; + return; + } + + // 1. Inclure la bibliothèque phpqrcode + // Définir le dossier de log AVANT l'include + /* + if (!defined('QR_LOG_DIR')) { + define('QR_LOG_DIR', sys_get_temp_dir() . '/'); + } + */ + + include 'phpqrcode/qrlib.php'; + + $pdf = new FPDF_Protection('L', 'mm', array(85.6, 54)); + $pdf->SetAuthor('EBENE SOLUTIONS INFORMATIQUES'); + + $userPassword = $_SESSION['motPassPdf']; + $ownerPassword = null; + $pdf->SetProtection(['print'], $userPassword, $ownerPassword); + + $pdf->SetAutoPageBreak(false); + $pdf->SetMargins(0, 0, 0); + $pdf->SetCreator(_('Système d\'édition de cartes')); + + // Vérification avant d'ajouter des pages + $nombreAssures = count($assures); + if ($nombreAssures == 0) { + echo '
'._("Aucune carte à générer").'
'; + return; + } + + // Définition de la colonne d'alignement pour les deux-points + $colonneAlignement = 20; // Position X commune pour l'alignement des deux-points + + // Traitement de chaque assuré + $cartesGenerees = 0; + foreach ($assures as $index => $assure) { + + $idCarte = $assure['beneficiaire_carte_temp']; + + // Vérification des données obligatoires + if (empty($assure['nomBeneficiaire']) || empty($assure['prenomsBeneficiaire']) || !isset($assure['tauxCouverture'])) { + // Empêcher la confirmation de cette carte + $this->carte->selectionnerUnAssure($idCarte, '0'); + continue; + } + // Ajout d'une nouvelle page pour chaque carte + $pdf->AddPage(); + $cartesGenerees++; + + // kane 23/09/2025 => rendre la carte personalisable par societeuser + require $_SESSION['dossierSociete'] . '/Tarifs/Controleur/Editioncarteassure.php'; + + // Vérification du nombre de pages (limite de sécurité) + if ($pdf->PageNo() >= 100) { + break; + } + } + + // Vérification finale du nombre de pages générées + if ($cartesGenerees == 0) { + echo '
'._("Aucune carte valide n'a pu être générée").'
'; + return; + } + + // création du fichier + $uniqid = uniqid(); + $to_upload="Temp/TMP_CARTES_ASSURES_$uniqid.pdf"; + $fichierTemp="Temp/$uniqid.pdf"; + + $pdf->Output($fichierTemp,"F"); + + // $fichier = pdf_to_image($fichierTemp, $to_upload, $uniqid, "0"); // => Pour cnvertir en image => eviter la cibversion en Word + $fichier = $fichierTemp; + + // Lien de téléchargement + $t_html = '
'; + $t_html .= '' . sprintf(_("%d carte(s) générée(s) sur %d assuré(s)"), $cartesGenerees, $nombreAssures) . ''; + $t_html .= '
'; + // Bouton PRÉVISUALISER avec icône + $t_html .= ''; + $t_html .= '' . _("PRÉVISUALISER"); + $t_html .= ''; + + + // Bouton CONFIRMER avec icône + $t_html .= ''; + $t_html .= '
'; + $t_html .= '
'; + echo $t_html; + } + +} \ No newline at end of file diff --git a/Societes/ebene/Tarifs/Controleur/Editioncarteassure.php b/Societes/ebene/Tarifs/Controleur/Editioncarteassure.php index 30274f20..5b9335a3 100755 --- a/Societes/ebene/Tarifs/Controleur/Editioncarteassure.php +++ b/Societes/ebene/Tarifs/Controleur/Editioncarteassure.php @@ -91,13 +91,15 @@ $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859 $pdf->SetFont('Arial', 'B', 6); $pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); +/* kane 17/02/2026 à 06h => recherche meilleure place QR code*/ +/* // Section "Assuré Principal" $pdf->SetFont('Arial', 'BUI', 7); $pdf->SetXY(5, 38); $pdf->SetTextColor(33, 46, 83); $pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); $pdf->SetTextColor(0); - +*/ // Numéro assuré - en gras et rouge $pdf->SetFont('Arial', '', 6); $pdf->SetXY(5, 42); diff --git a/Societes/ebene/Tarifs/Controleur/Editioncarteassure_2026_02_17_06h.php b/Societes/ebene/Tarifs/Controleur/Editioncarteassure_2026_02_17_06h.php new file mode 100755 index 00000000..30274f20 --- /dev/null +++ b/Societes/ebene/Tarifs/Controleur/Editioncarteassure_2026_02_17_06h.php @@ -0,0 +1,158 @@ + rendre la carte personalisable par societeuser +// Fond blanc +$pdf->SetFillColor(255, 255, 255); +$pdf->Rect(0, 0, 85.6, 54, 'F'); + +// LOGO SOCIÉTÉ en haut à gauche +if (file_exists($logoSocietePath)) { + $pdf->Image($logoSocietePath, 3, 3, 15); +} + +$logoGarantPath = (!is_null($assure["logo_garant"])) ? $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/'.$assure["logo_garant"] : $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; + +if (!is_file($logoGarantPath)) { + $logoGarantPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/garants/logo_garant.png'; +} + +// LOGO GARANT en haut à droite +if (is_file($logoGarantPath)) { + $pdf->Image($logoGarantPath, 67, 1, 15); +} + +// EN-TÊTE : "CARTE D'ASSURANCE" +$pdf->SetFont('Arial', 'B', 8); +$pdf->SetTextColor(33, 46, 83); +$pdf->SetXY(0, 5); +$pdf->Cell(85.6, 4, mb_convert_encoding(_('CARTE SANTÉ'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +$pdf->SetTextColor(0); + +// Informations de contact de la société +$pdf->SetFont('Arial', '', 5); +$pdf->SetXY(0, 9); +$pdf->MultiCell(85.6, 3, mb_convert_encoding(_('Siège social').': '. $assure['adresseGeoSociete'].' ', "ISO-8859-1", "UTF-8"), 0, 'C'); + +$pdf->SetXY(0, 12); +$pdf->Cell(85.6, 3, mb_convert_encoding(_('Tél.').': '.$assure['telephoneSociete'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); + +// Ligne séparatrice +$pdf->Line(5, 15, 80, 15); + +// Section "Bénéficiaire" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 17); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Bénéficiaire'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Matricule - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 21); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroBeneficiaire'], 0, 1); +$pdf->SetTextColor(0); + +// Nom +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 24); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(30, 3, ' : '.substr(mb_convert_encoding($assure['nomBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Prénoms +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 27); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(25, 3, ' : '.substr(mb_convert_encoding($assure['prenomsBeneficiaire'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Né(e) le - si disponible +if (!empty($assure['dateNaissance'])) { + $pdf->SetFont('Arial', '', 6); + $pdf->SetXY(5, 30); + $pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Né(e) le'), "ISO-8859-1", "UTF-8"), 0, 0); + $pdf->SetFont('Arial', 'B', 6); + $pdf->Cell(25, 3, ' : '.dateLang($assure['dateNaissance'], $_SESSION['lang']), 0, 1); +} + +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 33); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Statut'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(28, 3, ' : '.substr(mb_convert_encoding($assure['lienparente'], "ISO-8859-1", "UTF-8"), 0, 20), 0, 1); + +// Section "Assuré Principal" +$pdf->SetFont('Arial', 'BUI', 7); +$pdf->SetXY(5, 38); +$pdf->SetTextColor(33, 46, 83); +$pdf->Cell(30, 4, mb_convert_encoding(_('Assuré Principal'), "ISO-8859-1", "UTF-8"), 0, 1); +$pdf->SetTextColor(0); + +// Numéro assuré - en gras et rouge +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 42); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Matricule'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetTextColor(255, 0, 0); +$pdf->Cell(25, 3, ' : '.$assure['numeroAdherent'], 0, 1); +$pdf->SetTextColor(0); + +// Nom et Prénoms assuré +$pdf->SetFont('Arial', '', 6); +$pdf->SetXY(5, 45); +$pdf->Cell($colonneAlignement - 5, 3, mb_convert_encoding(_('Nom & prénoms'), "ISO-8859-1", "UTF-8"), 0, 0); +$pdf->SetFont('Arial', 'B', 6); +$pdf->Cell(15, 3, ' : '.substr(mb_convert_encoding($assure['adherent'], "ISO-8859-1", "UTF-8"), 0, 15), 0, 1); + +// Photo de l'assuré (positionnée à droite) - taille réduite +$photoPath = $_SESSION['dossierPhoto_C'].$_SESSION['dossierSociete'].'/Photos/'.$assure['lienPhoto']; +$photoX = 57; +$photoY = 17; + +// Vérifier si l'URL est accessible +$headers = @get_headers($photoPath); + +if (!empty($assure['lienPhoto']) && $headers && strpos($headers[0], '200')) { + $pdf->Image($photoPath, $photoX, $photoY, 25, 25); +} else { + // Cadre pour la photo si non disponible + $pdf->Rect($photoX, $photoY, 25, 25); + $pdf->SetFont('Arial', '', 4); + $pdf->SetXY($photoX, $photoY + 12); + $pdf->Cell(25, 3, mb_convert_encoding(_('Photo non disponible'), "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +} + +// ============ AJOUT DU QR CODE ============ +// Position : en bas à droite de la carte +if (file_exists($qrCodePath)) { + $qrX = 60; // Position X (à droite) + $qrY = 43; // Position Y (en bas) + $qrSize = 10; // Taille du QR code (10mm) + + $pdf->Image($qrCodePath, $qrX, $qrY, $qrSize, $qrSize); + + /* + // Supprimer le fichier temporaire après utilisation + @unlink($qrCodePath); + */ + // Enregistrer le qrCodePath dans la BDD + // $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrCodePath); + $this->carte->enregistrerqrcodeath($assure['idBeneficiaire'], $qrFile); +} +// ========================================== + +// Nom du souscripteur en bas +$pdf->SetFont('Arial', 'B', 6); +$pdf->SetXY(0, 49); +$pdf->Cell(85.6, 3, mb_convert_encoding($assure['souscripteur'], "ISO-8859-1", "UTF-8"), 0, 1, 'C'); +?> \ No newline at end of file