This commit is contained in:
KANE LAZENI 2026-02-17 06:17:59 +00:00
parent 50fad6c026
commit c452218a2f
3 changed files with 286 additions and 1 deletions

View File

@ -0,0 +1,125 @@
<?php
require_once 'Framework/Controleurrequete.php';
require_once 'Modele/Carteassure.php';
class ControleurAjaxeditioncarteassure extends Controleur
{
private $carte;
public function __construct() {
$this->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 '<div class="alert alert-warning">'._("Aucun assuré trouvé pour les critères sélectionnés").'</div>';
return;
}
$logoSocietePath = $_SESSION['dossierLogo'];
// $fondPath = $_SESSION['dossierSociete'] . '/Tarifs/Img/fond_carte.png';
if (!file_exists($_SESSION['dossierLogo'])) {
echo '<div class="alert alert-warning">'._("Le logo de la société est introuvable").'</div>';
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 '<div class="alert alert-warning">'._("Aucune carte à générer").'</div>';
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 '<div class="alert alert-warning">'._("Aucune carte valide n'a pu être générée").'</div>';
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 = '<div id="div_export_b" class="alert alert-info d-flex align-items-center justify-content-between flex-wrap">';
$t_html .= '<small class="me-3">' . sprintf(_("%d carte(s) générée(s) sur %d assuré(s)"), $cartesGenerees, $nombreAssures) . '</small>';
$t_html .= '<div class="d-flex gap-2 mt-2">';
// Bouton PRÉVISUALISER avec icône
$t_html .= '<a href="' . $fichier . '" target="_blank" class="btn btn-info btn-lg d-flex align-items-center">';
$t_html .= '<i class="fas fa-eye me-2"></i>' . _("PRÉVISUALISER");
$t_html .= '</a>';
// Bouton CONFIRMER avec icône
$t_html .= '<button type="button" class="btn btn-danger btn-lg d-flex align-items-center" onclick="javascript:confirmer_edition_carte();">';
$t_html .= '<i class="fas fa-check-circle me-2"></i>' . _("CONFIRMER");
$t_html .= '</button>';
$t_html .= '</div>';
$t_html .= '</div>';
echo $t_html;
}
}

View File

@ -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);

View File

@ -0,0 +1,158 @@
<?php
$qrData = $assure['tagCarteQr'];
$qrFile = $assure['numeroBeneficiaire'] . '_' . time() . '.png';
// $qrCodePath = $_SESSION['dossierSociete'].'/qrcodes/' . $assure['numeroBeneficiaire'] . '_' . time() . '.png';
$qrCodePath = $_SESSION['dossierSociete'].'/qrcodes/' . $qrFile;
QRcode::png($qrData, $qrCodePath, QR_ECLEVEL_H, 4, 2); // recommandé pour cartes PVC
// kane 23/09/2025 => 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');
?>