#!/usr/bin/env php */ declare(strict_types=1); // Simuler l'environnement web pour AppConfig en CLI if (php_sapi_name() === 'cli') { $_SERVER['SERVER_NAME'] = 'dapp.geosector.fr'; // DEV $_SERVER['HTTP_HOST'] = $_SERVER['SERVER_NAME']; $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; if (!function_exists('getallheaders')) { function getallheaders() { return []; } } } // Chargement de l'environnement require_once __DIR__ . '/../../vendor/autoload.php'; require_once __DIR__ . '/../../src/Config/AppConfig.php'; require_once __DIR__ . '/../../src/Core/Database.php'; require_once __DIR__ . '/../../src/Services/LogService.php'; require_once __DIR__ . '/../../src/Services/ReceiptService.php'; // Vérifier qu'un ID de passage est fourni if ($argc < 2) { echo "Usage: php generate_receipt_manual.php \n"; exit(1); } $passageId = (int)$argv[1]; try { echo "=== Test de génération de reçu ===\n"; echo "Passage ID: $passageId\n\n"; // Initialisation de la configuration $appConfig = AppConfig::getInstance(); $dbConfig = $appConfig->getDatabaseConfig(); // Initialiser la base de données Database::init($dbConfig); $db = Database::getInstance(); echo "✓ Connexion à la base de données OK\n"; // Vérifier le passage $stmt = $db->prepare('SELECT id, fk_type, encrypted_email, nom_recu FROM ope_pass WHERE id = ?'); $stmt->execute([$passageId]); $passage = $stmt->fetch(PDO::FETCH_ASSOC); if (!$passage) { echo "✗ Passage $passageId non trouvé\n"; exit(1); } echo "✓ Passage trouvé\n"; echo " - fk_type: " . $passage['fk_type'] . "\n"; echo " - encrypted_email: " . (!empty($passage['encrypted_email']) ? 'OUI' : 'NON') . "\n"; echo " - nom_recu: " . ($passage['nom_recu'] ?: 'vide') . "\n\n"; // Déchiffrer l'email if (!empty($passage['encrypted_email'])) { $email = \ApiService::decryptSearchableData($passage['encrypted_email']); echo " - Email déchiffré: $email\n"; echo " - Email valide: " . (filter_var($email, FILTER_VALIDATE_EMAIL) ? 'OUI' : 'NON') . "\n\n"; } else { echo "✗ Aucun email chiffré trouvé\n"; exit(1); } // Générer le reçu echo "Génération du reçu...\n"; $receiptService = new \App\Services\ReceiptService(); $result = $receiptService->generateReceiptForPassage($passageId); if ($result) { echo "✓ Reçu généré avec succès !\n\n"; // Vérifier l'email dans la queue $stmt = $db->prepare('SELECT id, to_email, status, created_at FROM email_queue WHERE fk_pass = ? ORDER BY created_at DESC LIMIT 1'); $stmt->execute([$passageId]); $queueEmail = $stmt->fetch(PDO::FETCH_ASSOC); if ($queueEmail) { echo "✓ Email ajouté à la queue\n"; echo " - Queue ID: " . $queueEmail['id'] . "\n"; echo " - Destinataire: " . $queueEmail['to_email'] . "\n"; echo " - Status: " . $queueEmail['status'] . "\n"; echo " - Créé: " . $queueEmail['created_at'] . "\n"; } else { echo "✗ Aucun email trouvé dans la queue\n"; } } else { echo "✗ Échec de la génération du reçu\n"; echo "Consultez /var/www/geosector/api/logs/api.log pour plus de détails\n"; } } catch (Exception $e) { echo "✗ ERREUR: " . $e->getMessage() . "\n"; echo $e->getTraceAsString() . "\n"; exit(1); } echo "\n=== Fin du test ===\n"; exit(0);