- CRUD vehicules (nom, marque, modele, annee, immat, VIN, carburant, couleur, km, photo) - CRUD entretiens (type, date, km, cout, mecanicien, garage, rappels km/date) - CRUD pieces (marque, reference, prix, quantite, photo, fournisseur, categorie) - Dashboard avec stats globales et rappels entretiens - Vue detail par vehicule (tabs Entretiens/Pieces) - Vue globale toutes pieces - Upload photos vehicules et pieces - Dark theme Tailwind-inspired - SQLite via Docker PHP 8.3 Apache - Traefik : garage.nas.percolouco.com
77 lines
2.4 KiB
PHP
77 lines
2.4 KiB
PHP
<?php
|
|
define('DB_PATH', __DIR__ . '/data/garage.db');
|
|
define('UPLOADS_DIR', __DIR__ . '/uploads/');
|
|
|
|
function getDB(): PDO {
|
|
$db = new PDO('sqlite:' . DB_PATH);
|
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
|
|
$db->exec('PRAGMA foreign_keys = ON');
|
|
$db->exec('PRAGMA journal_mode = WAL');
|
|
return $db;
|
|
}
|
|
|
|
function initDB(): void {
|
|
$db = getDB();
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS vehicles (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name TEXT NOT NULL,
|
|
brand TEXT NOT NULL,
|
|
model TEXT NOT NULL,
|
|
year INTEGER,
|
|
license_plate TEXT,
|
|
vin TEXT,
|
|
fuel_type TEXT DEFAULT 'Essence',
|
|
color TEXT,
|
|
purchase_date TEXT,
|
|
purchase_price REAL,
|
|
current_km INTEGER DEFAULT 0,
|
|
photo TEXT,
|
|
notes TEXT,
|
|
created_at TEXT DEFAULT (datetime('now')),
|
|
updated_at TEXT DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS maintenances (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
vehicle_id INTEGER NOT NULL,
|
|
type TEXT NOT NULL,
|
|
description TEXT,
|
|
date TEXT NOT NULL,
|
|
km INTEGER,
|
|
cost REAL DEFAULT 0,
|
|
mechanic TEXT,
|
|
garage TEXT,
|
|
next_km INTEGER,
|
|
next_date TEXT,
|
|
invoice_photo TEXT,
|
|
notes TEXT,
|
|
created_at TEXT DEFAULT (datetime('now')),
|
|
FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS parts (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
vehicle_id INTEGER,
|
|
maintenance_id INTEGER,
|
|
brand TEXT,
|
|
reference TEXT,
|
|
name TEXT NOT NULL,
|
|
category TEXT DEFAULT 'Autre',
|
|
price REAL DEFAULT 0,
|
|
quantity INTEGER DEFAULT 1,
|
|
unit TEXT DEFAULT 'pièce',
|
|
supplier TEXT,
|
|
purchase_date TEXT,
|
|
photo TEXT,
|
|
notes TEXT,
|
|
created_at TEXT DEFAULT (datetime('now')),
|
|
FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE SET NULL,
|
|
FOREIGN KEY (maintenance_id) REFERENCES maintenances(id) ON DELETE SET NULL
|
|
);
|
|
");
|
|
}
|
|
|
|
initDB();
|