Journal des modifications
Les évolutions de Cohez.io, de la plus récente à la plus ancienne.
173 versions publiées.
Versions 171 à 173 sur 173
0.1.0.0 - 2026-04-02
Ajouts
- Statut PENDING pour les nouveaux membres — tout membre créé démarre automatiquement en statut "En attente" (
PENDING), avecis_active = false. Le secrétaire active le membre manuellement après vérification. - Paramètres de renouvellement d'adhésion — nouvelle carte dans les settings de l'association permettant de configurer le cycle d'adhésion : "Année glissante" (12 mois à partir de la date d'adhésion) ou "Période fixe" (ex. 1er septembre → 31 août). Le texte d'aide affiche dynamiquement la période calculée.
- Filtre "En attente" dans la liste des membres pour retrouver rapidement les membres à valider.
Modifications
- Type de membre par défaut renommé :
ACTIVE→STANDARD. Les associations utilisent désormais "Membre" comme type standard au lieu de "Actif", aligné avec le vocabulaire associatif français. - Formulaire de création de membre simplifié — les champs statut, type de cotisation, année et date d'expiration sont retirés du formulaire. Ils sont désormais gérés par workflow (PENDING à la création, activation par l'administrateur).
Unreleased
Ajouts
Synchronisation automatique du statut d'inscription - 2026-03-19
Le statut d'une inscription (RegistrationStatus) se met désormais à jour automatiquement lorsque les paiements associés évoluent, sans intervention manuelle de l'administrateur.
Comportement :
- Paiement reçu couvrant le montant total →
Validated / PaidPartial → Paid - Paiement reçu couvrant partiellement →
Validated → PaidPartial - Paiement rejeté ramenant le solde à zéro →
Paid / PaidPartial → Validated - Paiement rejeté laissant un solde partiel →
Paid → PaidPartial - Les inscriptions en
DraftouCancelledne sont jamais auto-transitionnées
Architecture :
PaymentObserver(app/Observers/PaymentObserver.php) : écoutePayment::createdetPayment::updatedRegistrationStatus::canTransitionTo()étendu pour autoriser les transitions de retour depuisPaidetPaidPartial(nécessaires lors des rejets)- Enregistrement dans
AppServiceProvider::boot()au même niveau quePersonObserveretUserObserver - 10 tests feature dans
tests/Feature/Observers/PaymentObserverTest.php
Groupes Organisationnels - 2026-02-13
Ajout d'un système de gestion de groupes organisationnels pour structurer les membres de l'association (Bureau, CA, Commissions, etc.).
Fonctionnalités:
- CRUD complet des groupes (création, édition, suppression, consultation)
- Gestion des membres par groupe (ajout/retrait)
- Support du statut actif/inactif pour archiver des groupes
- Personnalisation visuelle avec couleur d'identification
- Slug unique pour identification technique
- Navigation dédiée dans la sidebar
Architecture:
- Modèle
OrganizationalGroupavec relations multi-tenant:tenant_idpour isolation des donnéespersonsrelation many-to-many via table pivotcreated_byetupdated_bypour traçabilité- Query scopes (
forTenant,active,inactive)
- Migration
create_organizational_groups_table:- Contraintes d'intégrité référentielle
- Unicité du nom et slug par tenant
- Protection par foreign keys avec cascade
- Table pivot
organizational_group_person
- Controller
OrganizationalGroupControlleravec:- Pagination sur la liste (15 éléments/page)
- Transactions DB pour intégrité des données
- Endpoint
availablePersonspour sélection de membres - Gestion des doublons avec exceptions spécifiques
- Policy
OrganizationalGroupPolicy:- Permission
MANAGE_SETTINGSrequise - Isolation stricte par tenant
- Support AdminUser avec accès total
- Permission
- Factory et Seeder pour développement et tests
Interface:
- Pages Vue avec Inertia v2:
groups/Index.vue- Liste avec grille et statsgroups/Create.vue- Formulaire avec auto-génération du sluggroups/Edit.vue- Édition avec switch actif/inactifgroups/Show.vue- Détails avec liste des membres
- Composant
AddPersonDialog.vue:- Recherche en temps réel par nom/email
- Sélection depuis personnes disponibles
- Intégration Wayfinder pour routes typées
- Composant UI
Switch.vue(Reka UI) - Structure de layout standardisée (
flex flex-1 flex-col gap-4 p-4) - Support complet du dark mode
- Types TypeScript générés automatiquement
Tests:
- 66 tests complets (14 modèle + 26 policy + 26 controller) avec 187 assertions:
- Relations et méthodes du modèle
- Query scopes et casts
- Règles d'autorisation (AdminUser, User avec permissions)
- CRUD complet avec validations
- Gestion des personnes (ajout, retrait, disponibles)
- Isolation tenant et unicité des contraintes
- Backward compatibility et null safety
- Suite complète: 946 tests passent
Améliorations et corrections (2026-02-15):
- Pagination sur la liste des membres (15 éléments/page) pour cohérence avec groupes
- Création composants UI Table avec Reka UI (Table, TableHeader, TableBody, TableRow, TableHead, TableCell)
- Correction typage TypeScript pour pagination Laravel (
LengthAwarePaginator<int, TValue>) - Correction ESLint (v-html sur composants)
- Migration tests unitaires vers tests feature (ListMembersQuery maintenant compatible avec pagination DB)
- Corrections PHPStan (annotations génériques, vérifications null redondantes)
Commits:
c570ba8 feat(groups): add organizational groups backend infrastructure
9f4acd9 feat(groups): add organizational groups frontend (Vue/Inertia)
0818406 Update .gitignore: add /.claude/worktrees to exclude directory
72ac5e1 feat(groups): add navigation link to organizational groups
5a8d2f3 fix(groups): correct critical bugs in UI components
f943d91 refactor(groups): align pages layout with application standards
56a3d33 fix(groups): correct pagination typing and add Table components with Reka UI
1f83a8e feat(members): add pagination to members list for consistency and performance
7ee05a8 fix(members): adjust focus-visible class order for consistency with Tailwind conventions
cc4244a fix(phpstan): correct type annotations and remove redundant null checks in ListMembersQuery
d36706c test(members): fix tests for pagination support
Types d'Utilisateurs (MEMBER/EMPLOYEE) - 2026-02-05
Ajout d'un système de différenciation entre membres adhérents et personnel salarié.
Fonctionnalités:
- Enum
UserTypeavec deux valeurs:MEMBER(membre adhérent) etEMPLOYEE(personnel) - Les employés peuvent accéder au système sans être des membres de l'association
- Section "Personnel" dédiée dans les paramètres (
/settings/staff) - Interface de création et gestion des comptes employés
- Scopes pour filtrer les utilisateurs par type:
User::members()etUser::employees()
Architecture:
- Migration
add_user_type_to_users_table:- Colonne
user_type(enum: 'member' | 'employee') - Colonnes
first_nameetlast_namepour les employés member_iddevient nullable (NULL pour les employés)- Backfill automatique de tous les users existants en
MEMBER - Validation d'intégrité des données avant migration
- Colonne
- Modèle
Userétendu avec:- Cast
user_typevers enum - Méthodes
isMember()etisEmployee() - Accessor
display_nameintelligent (membre ou user selon le type) - Scopes
members()etemployees()
- Cast
- Use Case
CreateEmployeepour la création d'employés - Factory
UserFactoryavec étatemployee()
Interface:
- Controller
StaffControlleravec CRUD complet - Form Request
CreateEmployeeRequestavec validation - Pages Vue:
Staff/Index.vue- Liste des employés avec rôlesStaff/Create.vue- Formulaire de création
- Types TypeScript
UserTypeetEmployee - Routes Wayfinder générées automatiquement
Tests:
- 40+ tests ajoutés couvrant:
- Enum (valeurs, labels, helpers)
- Model (types, scopes, accessors)
- Factory (états MEMBER/EMPLOYEE)
- Use Cases (création, validations, exceptions)
- Controller (CRUD, permissions, isolation tenant)
- Intégration (null safety, backward compatibility)
Documentation:
Rétrocompatibilité:
- ✅ 100% compatible: tous les users existants deviennent automatiquement
MEMBER - ✅ Aucun changement de comportement pour l'existant
- ✅ Tous les tests passent (680 passed)
Commits:
9239a5e feat(identity): add UserType enum for MEMBER and EMPLOYEE
0b8c432 fix(tests): add user_type to manual User::create calls
7ea7d43 feat(identity): add Staff frontend pages and types
1a2ac47 feat(identity): add Staff controller for employee management
f5732f8 feat(identity): add CreateEmployee use case
803d9c3 feat(identity): add employee state to UserFactory
6734c12 feat(identity): enhance User model with type support
450e26e feat(identity): add user_type column to support employees
ece1f30 fix(identity): add null-safe access for member properties
bb65dd1 test(identity): complete UserType enum unit tests
0.1.0 - MVP Alpha - 2025-12-24
Version initiale du MVP Alpha.
Ajouts
- Architecture multi-tenant avec isolation par sous-domaines
- Gestion complète des membres (CRUD, import CSV, exports)
- Système d'authentification avec invitation
- Panel d'administration Filament
- Stack technique: Laravel 12, Vue 3, Inertia v2, Tailwind 4
- Tests (Pest v4) avec couverture complète
- Documentation technique complète
Légende des types de changements:
Added: Nouvelles fonctionnalitésChanged: Modifications de fonctionnalités existantesDeprecated: Fonctionnalités dépréciéesRemoved: Fonctionnalités suppriméesFixed: Corrections de bugsSecurity: Correctifs de sécurité