Allez sur supabase.com → créez un compte → New Project. Choisissez un nom (ex: ctqg-basket) et un mot de passe de base de données.
2
Exécuter le script SQL
Dans Supabase → SQL Editor → copiez-collez ce script et cliquez Run :
CREATE TABLE IF NOT EXISTS salaries (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
nom TEXT NOT NULL, prenom TEXT NOT NULL,
email TEXT UNIQUE NOT NULL, role TEXT NOT NULL,
heures_annuelles INTEGER NOT NULL DEFAULT 1645,
actif BOOLEAN DEFAULT true, en_formation BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE TABLE IF NOT EXISTS categories_missions (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
salarie_id UUID REFERENCES salaries(id) ON DELETE CASCADE,
nom TEXT NOT NULL, ordre INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS missions (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
categorie_id UUID REFERENCES categories_missions(id) ON DELETE CASCADE,
nom TEXT NOT NULL, ordre INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS declarations (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
salarie_id UUID REFERENCES salaries(id) ON DELETE CASCADE,
semaine INTEGER NOT NULL, annee INTEGER NOT NULL,
mission_id UUID REFERENCES missions(id) ON DELETE CASCADE,
heures DECIMAL(5,2) DEFAULT 0, commentaire TEXT DEFAULT '',
detail_jours JSONB DEFAULT '{}'::jsonb,
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(salarie_id, semaine, annee, mission_id)
);
-- Migration pour les bases existantes : ajoute la colonne si absente
ALTER TABLE declarations ADD COLUMN IF NOT EXISTS detail_jours JSONB DEFAULT '{}'::jsonb;
CREATE TABLE IF NOT EXISTS semaines_meta (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
salarie_id UUID REFERENCES salaries(id) ON DELETE CASCADE,
semaine INTEGER NOT NULL, annee INTEGER NOT NULL,
realisee BOOLEAN DEFAULT false, commentaire_global TEXT DEFAULT '',
UNIQUE(salarie_id, semaine, annee)
);
CREATE TABLE IF NOT EXISTS config (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
cle TEXT UNIQUE NOT NULL, valeur TEXT NOT NULL
);
INSERT INTO config (cle, valeur) VALUES
('admin_password','ctqg2025admin')
ON CONFLICT (cle) DO NOTHING;
ALTER TABLE salaries ENABLE ROW LEVEL SECURITY;
ALTER TABLE categories_missions ENABLE ROW LEVEL SECURITY;
ALTER TABLE missions ENABLE ROW LEVEL SECURITY;
ALTER TABLE declarations ENABLE ROW LEVEL SECURITY;
ALTER TABLE semaines_meta ENABLE ROW LEVEL SECURITY;
ALTER TABLE config ENABLE ROW LEVEL SECURITY;
CREATE POLICY "all_sal" ON salaries FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "all_cat" ON categories_missions FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "all_mis" ON missions FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "all_dec" ON declarations FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "all_met" ON semaines_meta FOR ALL USING (true) WITH CHECK (true);
CREATE POLICY "all_cfg" ON config FOR ALL USING (true) WITH CHECK (true);
-- Table prévisionnel journalier
CREATE TABLE IF NOT EXISTS previsionnel (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
salarie_id UUID REFERENCES salaries(id) ON DELETE CASCADE,
date DATE NOT NULL,
mission_id UUID REFERENCES missions(id) ON DELETE SET NULL,
creneau TEXT NOT NULL DEFAULT 'A',
debut TIME,
fin TIME,
debut2 TIME,
fin2 TIME,
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(salarie_id, date, creneau)
);
ALTER TABLE previsionnel ENABLE ROW LEVEL SECURITY;
CREATE POLICY "all_prev" ON previsionnel FOR ALL USING (true) WITH CHECK (true);
-- Table des absences (congés / arrêts maladie)
CREATE TABLE IF NOT EXISTS absences (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
salarie_id UUID REFERENCES salaries(id) ON DELETE CASCADE,
date DATE NOT NULL,
type TEXT NOT NULL CHECK (type IN ('conge','maladie')),
periode TEXT NOT NULL DEFAULT 'journee' CHECK (periode IN ('journee','matin','apres-midi')),
commentaire TEXT DEFAULT '',
updated_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE(salarie_id, date)
);
ALTER TABLE absences ENABLE ROW LEVEL SECURITY;
CREATE POLICY "all_abs" ON absences FOR ALL USING (true) WITH CHECK (true);
3
Entrer vos clés Supabase
Dans Supabase → Project Settings → API, copiez l'URL et la clé anon/public :
Comité Territorial Quercy Garonne Basketball
Gestion des missions & heures
CTQG Basket
Vue globale
Saisie
Administration
Mon compte
Lecture seule
Mes heures
Mes missions
Vue d'ensemble
Saison
📋 Déclarations récentes
Suivi par semaine
Heures déclarées par salarié pour une semaine donnée
Suivi par salarié
Avancement des missions d'un salarié sur une saison donnée
Évolution sur la saison
Heures cumulées semaine par semaine, par salarié
📅 Saisie par semaine
Saisissez vos heures ou celles d'un collaborateur
Gestion des salariés
Paramétrez les salariés, contrats et mots de passe
👥 Liste des salariés
➕ Ajouter / modifier
Configuration des missions
Ajoutez ou modifiez les catégories et missions de chaque salarié
Mes missions
Consultez et modifiez vos propres catégories et missions
Semaines "Type"
Configurez les modèles de semaine pour chaque salarié
🔑 Mots de passe
Gérez les mots de passe de tous les comptes
Compte Directeur
Salariés
Compte Dirigeant
Mot de passe par défaut : dirigeant2025
Accès Dirigeant — Suivi du Directeur
Cochez cette option pour permettre au compte Dirigeant de voir les heures et le suivi du Directeur dans le tableau de bord.
Mes semaines "Type"
Configurez vos 2 modèles de semaine habituels
Export des données
Téléchargez les données en PDF ou Excel pour la saison sélectionnée
📊 Export global — tous les salariés
Un seul fichier Excel avec tous les salariés, prévisionnel vs réalisé, pour la saison sélectionnée.
📋 Semaines type — tous les salariés
Un seul fichier Excel avec toutes les semaines type de tous les salariés : nom des modèles, heures par jour, par mission et détail des créneaux.
Mon tableau de bord
📋 Mes dernières déclarations
Saisie par semaine
Déclarez toutes vos heures d'une semaine en une fois
Mon historique
Toutes mes déclarations, saison par saison
🗓️ Prévisionnel saisonnier
Construisez le planning détaillé journalier de chaque salarié
📋 Importer une semaine type sur une plage de semaines
✨ Préremplir la saison 2026/2027 depuis les semaines type
Pour tous les salariés : modèle choisi selon les vacances scolaires (Nina, Sylvain), le planning DEJEPS (Vincent) ou le modèle unique (Directeur). Rien n'est enregistré avant ta validation de l'aperçu.
🗓️ Prévisionnels saisonniers
Consultez les plannings détaillés de tous les salariés