pf_holidays
Deploy HouseHub / deploy (push) Successful in 4s

This commit is contained in:
2026-07-20 20:39:26 +02:00
parent 20d6c9b7b0
commit c48a6ba116
+23 -66
View File
@@ -1,91 +1,48 @@
<?php <?php
require_once __DIR__ . '/includes/meta_db.php'; require_once __DIR__ . '/includes/meta_db.php';
$db_host = getenv('DB_HOST') ?: '127.0.0.1'; // Récupération des identifiants de BDD depuis l'environnement (fallback par défaut)
$db_host = getenv('DB_HOST') ?: 'househub-db';
$db_user = getenv('DB_USER') ?: 'househub'; $db_user = getenv('DB_USER') ?: 'househub';
$db_pass = getenv('DB_PASS') ?: 'househub_dev'; $db_pass = getenv('DB_PASS') ?: 'changeme';
echo "<h1>🗺️ Migrations HouseHub OS</h1><ul>"; echo "<h1>🛠️ HouseHub - Correction AUTO_INCREMENT Voyages</h1>";
try { try {
// On récupère toutes les familles actives dans la base meta // On récupère toutes les familles actives
$stmt = $meta_pdo->query("SELECT db_name, name FROM families WHERE is_active = 1"); $stmt = $meta_pdo->query("SELECT db_name, name FROM families");
$families = $stmt->fetchAll(PDO::FETCH_ASSOC); $families = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($families as $family) { foreach ($families as $f) {
$dbName = $family['db_name']; $dbName = $f['db_name'];
echo "<li><strong>Famille : {$family['name']} ({$dbName})</strong><ul>"; echo "<h3>Famille : {$f['name']} ($dbName)</h3><ul>";
try { try {
// Connexion PDO spécifique à la base de la famille (Multi-tenant)
$pdo = new PDO("mysql:host=$db_host;dbname=$dbName;charset=utf8mb4", $db_user, $db_pass, [ $pdo = new PDO("mysql:host=$db_host;dbname=$dbName;charset=utf8mb4", $db_user, $db_pass, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]); ]);
// ───────────────────────────────────────────────────────────── // 1. On vérifie si la clé primaire existe déjà pour éviter de faire planter le script
// ✈️ MIGRATION 1 : Refonte Modèle Voyages $hasPrimaryKey = $pdo->query("SHOW KEYS FROM pf_holidays WHERE Key_name = 'PRIMARY'")->fetch();
// ─────────────────────────────────────────────────────────────
try {
$pdo->exec("ALTER TABLE pf_holidays ADD COLUMN return_step_id INT DEFAULT NULL");
$pdo->exec("ALTER TABLE pf_holidays_items ADD COLUMN step_type VARCHAR(20) DEFAULT 'stop'");
$pdo->exec("ALTER TABLE pf_holidays_items ADD COLUMN expense_context VARCHAR(20) DEFAULT NULL");
// Migration des données if (!$hasPrimaryKey) {
$pdo->exec(" $pdo->exec("ALTER TABLE pf_holidays ADD PRIMARY KEY (id)");
UPDATE pf_holidays h echo "<li>✅ Clé primaire restaurée sur la colonne `id`.</li>";
SET return_step_id = ( }
SELECT id FROM pf_holidays_items i
WHERE i.holiday_id = h.id AND i.is_return = 1 AND i.location_name IS NOT NULL
LIMIT 1
)
");
// Nettoyage // 2. On restaure la propriété AUTO_INCREMENT
$pdo->exec("ALTER TABLE pf_holidays_items DROP COLUMN is_return"); $pdo->exec("ALTER TABLE pf_holidays MODIFY id INT(11) NOT NULL AUTO_INCREMENT");
echo "<li>✅ Schéma Voyages mis à jour !</li>"; echo "<li>✅ Propriété AUTO_INCREMENT restaurée.</li>";
} catch (\PDOException $e) { } catch (\PDOException $e) {
// 1060 : Duplicate column name / 1091 : Can't drop column (already dropped) // On attrape l'erreur si la modif a déjà été faite
if (in_array($e->errorInfo[1], [1060, 1091])) { echo "<li>️ Action ignorée ou table déjà à jour : " . $e->getMessage() . "</li>";
echo "<li>⏳ Schéma Voyages déjà à jour. (Ignoré)</li>";
} else {
echo "<li>⚠️ Erreur sur Voyages : " . $e->getMessage() . "</li>";
} }
echo "</ul>";
} }
echo "<h2>🚀 Correction terminée ! Tu peux réessayer de créer un voyage.</h2>";
// ─────────────────────────────────────────────────────────────
// 💰 MIGRATION 2 : Provisions & Optimisation Trésorerie (Quinzaines)
// ─────────────────────────────────────────────────────────────
try {
$pdo->exec("
CREATE TABLE IF NOT EXISTS `pf_expected_expenses` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(150) NOT NULL,
`amount` DECIMAL(10,2) NOT NULL DEFAULT 0.00,
`expected_date` DATE NOT NULL,
`is_paid` TINYINT(1) NOT NULL DEFAULT 0,
`created_at` DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
INDEX `idx_expected_date` (`expected_date`),
INDEX `idx_is_paid` (`is_paid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
");
echo "<li>✅ Table `pf_expected_expenses` (Provisions Budget) créée/vérifiée !</li>";
} catch (\PDOException $e) {
echo "<li>⚠️ Erreur sur Provisions Budget : " . $e->getMessage() . "</li>";
}
} catch (\PDOException $e) {
echo "<li>❌ Impossible de se connecter à la base de données : " . $e->getMessage() . "</li>";
}
echo "</ul></li><br>";
}
echo "</ul><h2>🎉 Migrations terminées avec succès !</h2>";
} catch (Exception $e) { } catch (Exception $e) {
die("Erreur fatale globale : " . $e->getMessage()); die("Erreur fatale de connexion à la Meta DB : " . $e->getMessage());
} }
?> ?>