Aller au contenu
Candidater

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), avec is_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 Draft ou Cancelled ne sont jamais auto-transitionnées

Architecture :

  • PaymentObserver (app/Observers/PaymentObserver.php) : écoute Payment::created et Payment::updated
  • RegistrationStatus::canTransitionTo() étendu pour autoriser les transitions de retour depuis Paid et PaidPartial (nécessaires lors des rejets)
  • Enregistrement dans AppServiceProvider::boot() au même niveau que PersonObserver et UserObserver
  • 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 OrganizationalGroup avec relations multi-tenant:
    • tenant_id pour isolation des données
    • persons relation many-to-many via table pivot
    • created_by et updated_by pour 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 OrganizationalGroupController avec:
    • Pagination sur la liste (15 éléments/page)
    • Transactions DB pour intégrité des données
    • Endpoint availablePersons pour sélection de membres
    • Gestion des doublons avec exceptions spécifiques
  • Policy OrganizationalGroupPolicy:
    • Permission MANAGE_SETTINGS requise
    • Isolation stricte par tenant
    • Support AdminUser avec accès total
  • Factory et Seeder pour développement et tests

Interface:

  • Pages Vue avec Inertia v2:
    • groups/Index.vue - Liste avec grille et stats
    • groups/Create.vue - Formulaire avec auto-génération du slug
    • groups/Edit.vue - Édition avec switch actif/inactif
    • groups/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 UserType avec deux valeurs: MEMBER (membre adhérent) et EMPLOYEE (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() et User::employees()

Architecture:

  • Migration add_user_type_to_users_table:
    • Colonne user_type (enum: 'member' | 'employee')
    • Colonnes first_name et last_name pour les employés
    • member_id devient nullable (NULL pour les employés)
    • Backfill automatique de tous les users existants en MEMBER
    • Validation d'intégrité des données avant migration
  • Modèle User étendu avec:
    • Cast user_type vers enum
    • Méthodes isMember() et isEmployee()
    • Accessor display_name intelligent (membre ou user selon le type)
    • Scopes members() et employees()
  • Use Case CreateEmployee pour la création d'employés
  • Factory UserFactory avec état employee()

Interface:

  • Controller StaffController avec CRUD complet
  • Form Request CreateEmployeeRequest avec validation
  • Pages Vue:
    • Staff/Index.vue - Liste des employés avec rôles
    • Staff/Create.vue - Formulaire de création
  • Types TypeScript UserType et Employee
  • 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és
  • Changed : Modifications de fonctionnalités existantes
  • Deprecated : Fonctionnalités dépréciées
  • Removed : Fonctionnalités supprimées
  • Fixed : Corrections de bugs
  • Security : Correctifs de sécurité