feat: module Garage — véhicules, entretiens, pièces (intégration GarageManager)
Deploy to Pacha Family / deploy (push) Failing after 3s

- modules/garage/api.php : API REST MySQL (vehicles, maintenances, parts, stats, photos)
- modules/garage/assets/garage.css + garage.js : UI adaptée (chemins API mis à jour)
- garage.php : page principale avec header/footer HouseHub + i18n
- docker/schema_family.sql : tables pf_vehicles, pf_maintenances, pf_parts
- docker-compose.yml : volume househub_uploads pour photos
- includes/lang/fr|ca|en.php : ~50 clés de traduction garage
- header.php : lien Garage dans nav desktop + mobile
- settings.php : module garage dans les toggles
- README.md : tableau des modules + mise à jour description

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
perco
2026-05-11 15:57:24 +02:00
co-authored by Claude Sonnet 4.6
parent f6de4918bd
commit 62eabfb5ee
12 changed files with 1388 additions and 6 deletions
+53 -2
View File
@@ -544,5 +544,56 @@ return [
'gift_filter_all_adults' => 'Tots els adults',
'gift_empty_state_no_gifts' => 'Cap regal de moment.',
'gift_empty_state_no_filter' => 'Cap regal correspon al filtre.',
'gift_view_matrix' => 'Veure la matriu detallada',
];
// ==========================================
// GARAGE MANAGER
// ==========================================
'menu_garage' => 'Garatge',
'garage_page_title' => 'HouseHub - Garatge',
'garage_stat_vehicles' => 'Vehicles',
'garage_stat_maintenances' => 'Manteniments',
'garage_stat_parts' => 'Peces',
'garage_stat_cost' => 'Cost total',
'garage_my_vehicles' => 'Els meus vehicles',
'garage_reminders' => 'Recordatoris i propers manteniments',
'garage_vehicles_title' => 'Els meus vehicles',
'garage_all_parts' => 'Totes les peces',
'garage_parts_count' => 'peces',
'garage_maintenances' => 'Manteniments',
'garage_parts' => 'Peces',
'garage_add' => 'Afegir',
'garage_add_vehicle' => 'Afegir un vehicle',
'garage_add_maintenance' => 'Afegir un manteniment',
'garage_add_part' => 'Afegir una peça',
'garage_vehicle_name' => 'Nom del vehicle',
'garage_brand' => 'Marca',
'garage_model' => 'Model',
'garage_year' => 'Any',
'garage_plate' => 'Matrícula',
'garage_fuel' => 'Combustible',
'garage_km' => 'Quilometratge actual',
'garage_color' => 'Color',
'garage_purchase_date' => 'Data de compra',
'garage_purchase_price' => 'Preu de compra (€)',
'garage_photo' => 'Foto',
'garage_notes' => 'Notes',
'garage_maint_type' => 'Tipus de manteniment',
'garage_date' => 'Data',
'garage_km_at' => 'Quilometratge en el moment',
'garage_labor_cost' => 'Cost mà d\'obra (€)',
'garage_description' => 'Descripció',
'garage_mechanic' => 'Mecànic',
'garage_garage' => 'Taller',
'garage_next_reminder' => 'Proper manteniment (recordatori)',
'garage_next_date' => 'Data prevista',
'garage_next_km' => 'Quilometratge previst',
'garage_part_name' => 'Nom de la peça',
'garage_category' => 'Categoria',
'garage_reference' => 'Referència',
'garage_unit_price' => 'Preu unitari (€)',
'garage_quantity' => 'Quantitat',
'garage_unit' => 'Unitat',
'garage_supplier' => 'Proveïdor',
'garage_change_photo' => 'Canviar la foto',
'garage_new_photo' => 'Nova foto',
'garage_update_photo' => 'Actualitzar',
];
+53
View File
@@ -529,4 +529,57 @@ return [
'gift_empty_state_no_gifts' => 'No gifts yet.',
'gift_empty_state_no_filter' => 'No gifts match the filter.',
'gift_view_matrix' => 'View detailed matrix',
// ==========================================
// GARAGE MANAGER
// ==========================================
'menu_garage' => 'Garage',
'garage_page_title' => 'HouseHub - Garage',
'garage_stat_vehicles' => 'Vehicles',
'garage_stat_maintenances' => 'Services',
'garage_stat_parts' => 'Parts',
'garage_stat_cost' => 'Total cost',
'garage_my_vehicles' => 'My vehicles',
'garage_reminders' => 'Reminders & upcoming services',
'garage_vehicles_title' => 'My vehicles',
'garage_all_parts' => 'All parts',
'garage_parts_count' => 'parts',
'garage_maintenances' => 'Services',
'garage_parts' => 'Parts',
'garage_add' => 'Add',
'garage_add_vehicle' => 'Add a vehicle',
'garage_add_maintenance' => 'Add a service',
'garage_add_part' => 'Add a part',
'garage_vehicle_name' => 'Vehicle name',
'garage_brand' => 'Make',
'garage_model' => 'Model',
'garage_year' => 'Year',
'garage_plate' => 'Licence plate',
'garage_fuel' => 'Fuel type',
'garage_km' => 'Current mileage',
'garage_color' => 'Colour',
'garage_purchase_date' => 'Purchase date',
'garage_purchase_price' => 'Purchase price (€)',
'garage_photo' => 'Photo',
'garage_notes' => 'Notes',
'garage_maint_type' => 'Service type',
'garage_date' => 'Date',
'garage_km_at' => 'Mileage at the time',
'garage_labor_cost' => 'Labour cost (€)',
'garage_description' => 'Description',
'garage_mechanic' => 'Mechanic',
'garage_garage' => 'Garage / Workshop',
'garage_next_reminder' => 'Next service (reminder)',
'garage_next_date' => 'Planned date',
'garage_next_km' => 'Planned mileage',
'garage_part_name' => 'Part name',
'garage_category' => 'Category',
'garage_reference' => 'Reference',
'garage_unit_price' => 'Unit price (€)',
'garage_quantity' => 'Quantity',
'garage_unit' => 'Unit',
'garage_supplier' => 'Supplier',
'garage_change_photo' => 'Change photo',
'garage_new_photo' => 'New photo',
'garage_update_photo' => 'Update',
];
+53 -1
View File
@@ -547,4 +547,56 @@ return [
'gift_empty_state_no_gifts' => 'Aucun cadeau pour le moment.',
'gift_empty_state_no_filter' => 'Aucun cadeau ne correspond au filtre.',
'gift_view_matrix' => 'Voir la matrice détaillée',
];
// ==========================================
// GARAGE MANAGER
// ==========================================
'menu_garage' => 'Garage',
'garage_page_title' => 'HouseHub - Garage',
'garage_stat_vehicles' => 'Véhicules',
'garage_stat_maintenances' => 'Entretiens',
'garage_stat_parts' => 'Pièces',
'garage_stat_cost' => 'Coût total',
'garage_my_vehicles' => 'Mes véhicules',
'garage_reminders' => 'Rappels & prochains entretiens',
'garage_vehicles_title' => 'Mes véhicules',
'garage_all_parts' => 'Toutes les pièces',
'garage_parts_count' => 'pièces',
'garage_maintenances' => 'Entretiens',
'garage_parts' => 'Pièces',
'garage_add' => 'Ajouter',
'garage_add_vehicle' => 'Ajouter un véhicule',
'garage_add_maintenance' => 'Ajouter un entretien',
'garage_add_part' => 'Ajouter une pièce',
'garage_vehicle_name' => 'Nom du véhicule',
'garage_brand' => 'Marque',
'garage_model' => 'Modèle',
'garage_year' => 'Année',
'garage_plate' => 'Immatriculation',
'garage_fuel' => 'Carburant',
'garage_km' => 'Kilométrage actuel',
'garage_color' => 'Couleur',
'garage_purchase_date' => 'Date d\'achat',
'garage_purchase_price' => 'Prix d\'achat (€)',
'garage_photo' => 'Photo',
'garage_notes' => 'Notes',
'garage_maint_type' => 'Type d\'entretien',
'garage_date' => 'Date',
'garage_km_at' => 'Kilométrage au moment',
'garage_labor_cost' => 'Coût main d\'œuvre (€)',
'garage_description' => 'Description',
'garage_mechanic' => 'Mécanicien',
'garage_garage' => 'Garage / Atelier',
'garage_next_reminder' => 'Prochain entretien (rappel)',
'garage_next_date' => 'Date prévue',
'garage_next_km' => 'Kilométrage prévu',
'garage_part_name' => 'Nom de la pièce',
'garage_category' => 'Catégorie',
'garage_reference' => 'Référence',
'garage_unit_price' => 'Prix unitaire (€)',
'garage_quantity' => 'Quantité',
'garage_unit' => 'Unité',
'garage_supplier' => 'Fournisseur',
'garage_change_photo' => 'Changer la photo',
'garage_new_photo' => 'Nouvelle photo',
'garage_update_photo' => 'Mettre à jour',
];