Commit graph

394 commits

Author SHA1 Message Date
91adeb8fc8 fix: Pré-sélection des dates lors de la réouverture des modales de sélection + amélioration UI du bouton Appliquer 2025-11-20 17:58:54 +01:00
3435581761 fix: Afficher toutes les dates intermédiaires lors de la saisie par date dans les contrats CDDU 2025-11-20 17:48:53 +01:00
b2b3cf9ed3 feat: Auto-remplir structure_api et documents_slug lors de la création d'un client 2025-11-19 19:00:21 +01:00
3d9e1298d4 fix: Utiliser email_signature au lieu de email_contact dans le modal d'envoi groupé de signatures électroniques 2025-11-19 12:21:24 +01:00
813cbb998f fix: Corriger erreurs envoi emails groupés (bulk_communication + formatage email source) 2025-11-18 19:18:25 +01:00
ce9e97d6ec fix: Ajouter autreprecision_duree et autreprecision_salaire aux champs modifiables
- Ajout des deux champs dans CONTRACT_UPDATABLE_FIELDS
- Permet la sauvegarde correcte dans Supabase
2025-11-15 11:38:20 +01:00
9f4ecf688c feat: Ajout champs 'Autre précision durée' et 'Autre précision salaire' sur page contrats
- Ajout de 2 nouveaux champs de texte dans ContractEditor.tsx
- Sauvegarde des champs autreprecision_duree et autreprecision_salaire dans Supabase
- Mise à jour des types ContratCDDUData avec les nouveaux champs
- Envoi des données à PDFMonkey via generate-pdf et generate-pdf-test
- Les champs sont disponibles dans l'interface staff/contrats/[id]
2025-11-15 11:33:14 +01:00
79f18b20a4 feat: Ajouter icônes HelpCircle pour indiquer les tooltips dans le header
- Ajouter import HelpCircle depuis lucide-react
- Afficher petite icône ? (3x3px) à droite de chaque ligne avec description
- Icône visible uniquement sur les lignes avec tooltip disponible
- Design discret (text-slate-400) sans augmenter la hauteur du header
2025-11-14 20:30:23 +01:00
78c43f0bfa feat: Implémentation complète du système de permissions
- Créer lib/permissions.ts avec toutes les fonctions de vérification
- Protéger routes API: facturation, cotisations, virements (bloquer AGENT)
- Protéger routes API: contrats (bloquer COMPTA)
- Protéger routes API: gestion utilisateurs (bloquer AGENT/COMPTA)
- Empêcher ADMIN de modifier/révoquer/créer SUPER_ADMIN
- Ajouter documentation complète dans PERMISSIONS_MATRIX.md

Système à 5 niveaux:
- STAFF (équipe Odentas)
- SUPER_ADMIN (admin principal, 1 par org, protégé)
- ADMIN (admins secondaires)
- AGENT (opérationnel: contrats/paies/salariés)
- COMPTA (financier lecture seule: cotisations/virements/factures)
2025-11-14 20:25:30 +01:00
65d367cb5f fix: Supprimer endpoints pdf-proxy et pdf-clean avec CORS ouvert
- Suppression de /app/api/pdf-proxy/route.ts (endpoint inutilisé avec CORS *)
- Suppression de /app/api/pdf-clean/route.ts (endpoint inutilisé avec CORS *)
- Mise à jour du rapport d'audit de sécurité
- Les PDFs sont désormais affichés via URLs présignées S3 directes
2025-11-14 19:56:37 +01:00
26579a9407 feat: Détecter compte activé + amélioration template email activation 2025-11-14 19:18:37 +01:00
ba727563d5 feat: Afficher 'Invitation envoyée' pour utilisateurs non activés 2025-11-14 19:10:36 +01:00
64c98009d8 fix: Empêcher double exécution page activation + ajout info mot de passe dans email 2025-11-14 18:52:54 +01:00
bd961285c8 fix: Gestion erreurs d'activation et liens expirés
- Ajout vérification queryToken/queryType avant traitement ancien format
- Détection des erreurs dans le hash (lien expiré, access_denied, etc.)
- Message clair si lien expiré : affiche error_description du hash
- Évite 'Type d'activation non supporté: null'
- Message fallback si aucun paramètre valide trouvé
2025-11-14 18:45:01 +01:00
ba3269ff7d fix: Accepter activation avec tokens peu importe le type
- Condition modifiée : accepte access_token + refresh_token sans vérifier type='invite'
- Ajout log pour afficher le type détecté
- Corrige le problème où l'activation tournait dans le vide
2025-11-14 18:41:25 +01:00
d3d8879ec6 fix: Suppression vérification prématurée des paramètres d'activation
- Supprimé le bloc de vérification hasHashTokens/hasQueryTokens qui causait l'erreur
- Le code essaie maintenant directement les deux méthodes sans pré-validation
- Délai augmenté à 500ms pour lecture du hash fragment
- Les erreurs ne s'affichent que si les méthodes échouent réellement
- Plus de message 'Paramètres manquants' avant même de tenter l'activation
2025-11-14 18:27:39 +01:00
2d79467acf fix: Refonte logique activation - vérification unique en début
- Vérification unique au début : hasHashTokens OU hasQueryTokens
- Suppression des vérifications redondantes dans le code
- Erreur affichée seulement si AUCUN format valide trouvé
- Plus de message d'erreur temporaire lors de l'activation avec hash fragment
2025-11-14 18:16:43 +01:00
a5f100e3f4 fix: Augmentation délai activation à 300ms + condition hash fragment
- Délai de 100ms → 300ms pour lecture hash fragment
- Condition modifiée : erreur seulement si AUCUN paramètre (ni hash ni query)
- Fix TypeScript : vérification queryToken non-null avant verifyOtp
- Évite message d'erreur temporaire lors de l'activation
2025-11-14 17:47:23 +01:00
e9cb6e7e0e feat: Système unifié d'invitation avec emails d'activation
- Créé sendInvitationWithActivationEmail() pour unifier les invitations
- Modifié /api/staff/users/invite pour utiliser generateLink + email
- Modifié /api/access/nouveau pour envoyer email d'activation
- Modifié /api/access POST pour remplacer pending_invites par système direct
- Template account-activation mis à jour :
  * Titre 'Activez votre compte'
  * Encart avec infos : invitant (statut), organisation, niveau d'accès
  * Message de contact formaté comme autres emails
  * Renommage 'Odentas Paie' → 'Espace Paie Odentas'
- Fix page /activate : délai 100ms pour hash fragment + redirection 1s
- Liens d'activation forcés vers paie.odentas.fr (tests depuis localhost)
- Messages UI cohérents : 'Invitation envoyée' au lieu de 'Compte créé'
2025-11-14 17:41:46 +01:00
fc93866d82 feat: Ajouter la copie en un clic pour SIRET et AEM sans ouvrir le détail 2025-11-14 12:40:32 +01:00
7b9a4ef6cc feat: Refonte du tableau clients avec colonnes triables et lignes cliquables 2025-11-14 12:34:05 +01:00
13f151c587 feat: Ajouter le champ AEM dans la gestion paie des clients 2025-11-14 12:30:11 +01:00
2760ea2b39 fix: Corriger création salarié en mode staff avec employer_id
- Réorganiser la logique de sécurité pour distinguer staff/client
- Staff: accepter employer_id fourni et vérifier existence de l'org
- Client: utiliser l'org associée et bloquer toute tentative cross-org
- Améliorer les logs pour identifier le type d'utilisateur
- Corriger le retour no_organization inapproprié pour les staff
2025-11-13 20:48:14 +01:00
8cdd133d68 fix: Inclure dates représentations/répétitions dans duplication CDDU 2025-11-12 19:47:23 +01:00
19da82ceba feat: Ajout bouton Effacer pour dates représentations/répétitions CDDU 2025-11-12 19:33:37 +01:00
4d591ed1e1 feat: Ajout marquage manuel notification cotisations
- Ajout checkbox dans modal de modification cotisation
- Création entrée dans contribution_notifications si marquée
- Invalidation cache notifications après update
- Support flag mark_as_notified dans API PATCH
2025-11-08 11:48:58 +01:00
09b5ad822d feat: Améliorer message factures studio avec contact WhatsApp
- Message plus personnalisé pour factures studio en virement
- Mention 'hébergement' pour renouvellement
- Ajout contact WhatsApp avec lien cliquable (07 80 978 000)
- Formulation plus chaleureuse et professionnelle
2025-11-07 19:50:53 +01:00
444b243f79 feat: Adapter message factures studio selon mode paiement
- Factures studio en virement: message avec RIB (comme paie)
- Factures studio en SEPA: message avec date prélèvement
- Message complet au lieu de juste le nom du site
- Cohérence avec les factures paie
2025-11-07 19:33:52 +01:00
8a36ebb6dd fix: Appliquer ctaUrl dynamique à la route /notify aussi
- Route /notify utilisait ctaUrl hardcodé vers /signin
- Appliquer même logique que /launch: lien téléchargement pour studio
- Ajouter siteName dans les données d'email
- Amélioration: factures paie pointent vers /facturation au lieu de /signin
2025-11-07 19:24:24 +01:00
3c6b3c7e24 debug: Ajouter logs détaillés pour tracer ctaUrl des factures
- Logger data.ctaUrl dans renderUniversalEmailV2
- Logger templateData.ctaUrl final avant rendu
- Permettra d'identifier où le ctaUrl est perdu
2025-11-07 19:06:42 +01:00
32cafbd028 fix: Enlever disclaimer carte bancaire et ajouter logs debug
- Supprimer 'Ce compte ne peut pas recevoir les virements de salaires'
- Ajouter logs pour débugger ctaUrl des factures studio
2025-11-07 18:59:55 +01:00
a46790a723 fix: Corriger affichage emails factures studio avec virement
- Ajouter siteName dans les données d'email et types
- Afficher carte bancaire pour factures studio avec mode virement
- Filtrer dynamiquement détails facture selon type:
  * Studio: enlever 'Prélèvement SEPA', afficher 'Site web concerné'
  * Paie: enlever 'Site web concerné', afficher 'Prélèvement SEPA'
- Simplifier condition bankCard (paymentMethod === 'virement' seulement)
2025-11-07 18:54:27 +01:00
3c4e6a1e1d feat: Adapter emails de factures studio avec lien de téléchargement direct
- Créer route publique /api/public/invoices/[id]/download pour générer liens S3 à la volée
- Supprimer code employeur de l'infoCard pour factures studio
- Adapter texte bouton CTA (Télécharger vs Voir la facture)
- Rediriger vers page de téléchargement au lieu de l'Espace Paie pour clients studio
- Lien pré-signé S3 valable 15 minutes (suffisant pour téléchargement)
2025-11-07 18:39:09 +01:00
5351456516 feat: Badge signatures en attente avec polling optimisé 30s
- Ajout endpoint API /api/signatures-electroniques/pending-count (COUNT() Supabase)
- Ajout hook usePendingSignatures avec polling 30s et pause en background
- Badge rouge animé dans Sidebar pour signatures employeur en attente
- Optimisé pour ne pas surcharger Supabase (cache 30s, refetch au focus)
- Désactivé en mode démo et pour staff
2025-11-07 18:27:30 +01:00
14a9d141d3 feat: Ajouter édition groupée de période/échéance/statut pour cotisations
- Ajout bouton Edit dans les actions de chaque ligne
- Nouvelle modale EditPeriodModal pour éditer période, échéance et statut
- Nouvel endpoint API /api/staff/cotisations/bulk-update pour mise à jour groupée
- Les modifications s'appliquent à toutes les caisses d'une période en une fois
2025-11-07 18:07:20 +01:00
2d4b5f4249 feat: Ajouter modification de période et statut dans cotisations 2025-11-07 16:16:26 +01:00
65904d71fb fix: Utiliser cleanEnv pour nettoyer les tokens GoCardless
- Ajoute import cleanEnv dans les routes GoCardless
- Remplace process.env par cleanEnv() pour GOCARDLESS_ACCESS_TOKEN et GOCARDLESS_ENVIRONMENT
- Corrige le bug des tokens cassés sur plusieurs lignes dans Vercel
- Routes corrigées: gocardless, launch, bulk-gocardless
2025-11-07 12:30:32 +01:00
62eef54f5f fix: Uniformiser la taille des icônes du tableau cotisations 2025-11-07 10:20:47 +01:00
de519a608d fix: Ajouter logs et gestion d'erreur pour insertion prestations NAA 2025-11-07 10:15:56 +01:00
61da4f5d35 feat: Implémenter la notification groupée des cotisations
- Créer le composant BulkNotifyModal avec aperçu détaillé
- Afficher les statistiques (avec/sans cotisations, déjà notifiées, emails manquants)
- Grouper les périodes par organisation
- Afficher les destinataires des emails pour chaque organisation
- Indiquer les organisations sans email configuré
- Afficher un aperçu du contenu de l'email
- Gérer les re-notifications avec badge
- Envoyer les notifications en parallèle avec gestion d'erreurs
- Afficher un résumé des succès/erreurs après envoi
- Désélectionner automatiquement les périodes après notification
2025-11-06 21:38:12 +01:00
699a862160 feat: Ajouter un filtre mensuel au tableau de cotisations
- Ajouter un filtre par mois dans les filtres avancés
- Détecter automatiquement les mois disponibles dans les périodes
- Supporter les noms de mois complets et abrégés (Janvier/Jan, Février/Fév, etc.)
- Sauvegarder le filtre mensuel dans localStorage
- Passer la grille de filtres à 4 colonnes pour inclure le nouveau filtre
- Mettre à jour le compteur de résultats filtrés
2025-11-06 21:30:47 +01:00
a396ad6b3c feat: Améliorer la compacité et l'affichage du tableau de cotisations
- Afficher le code employeur au lieu du nom complet de l'organisation
- Réduire la taille de police du tableau (text-xs au lieu de text-sm)
- Réduire les paddings des cellules (px-2 py-2 au lieu de px-3 py-3)
- Ajouter whitespace-nowrap sur les badges de statut pour tenir sur une ligne
- Réduire la taille de la ligne 'Payé' (text-[10px])
- Ajouter title sur la colonne organisation pour voir le nom complet au survol
- Modifier l'API /api/staff/organizations pour inclure le code_employeur
- Mettre à jour les types Organization et PeriodRow
2025-11-06 21:03:49 +01:00
6535bd45ed feat: Améliorer l'affichage du tableau de gestion des cotisations
- Créer le composant CotisationsGrid.tsx moderne
- Ajouter tri par colonnes (organisation, période, échéance, statut, total)
- Ajouter filtres avancés (organisation, statut, année)
- Ajouter sélection multiple avec checkboxes
- Ajouter actions groupées (notification, suppression)
- Ajouter indicateurs visuels pour les statuts
- Ajouter badge de notification avec date
- Ajouter persistance des filtres dans localStorage
- Ajouter subscription realtime pour les mises à jour
- Améliorer l'UX avec hover effects et transitions
- Rendre cohérent avec les autres grilles (PayslipsGrid, ContractsGrid, etc.)
2025-11-06 20:51:06 +01:00
9672f52f49 feat: Ajouter sous-header avec totaux des salaires sur page staff/payslips 2025-11-06 15:45:47 +01:00
94761a609a fix: Envoyer les notifications de signature à email_signature sans CC
- Utilisation de email_signature au lieu de email_notifs
- Suppression du CC pour les notifications de signature électronique
- Cohérence avec le système de signature (email distinct des autres notifs)
2025-11-05 22:28:11 +01:00
1892f9f4d1 fix: Utiliser prenom_signataire au lieu de prenom_contact pour les notifications de signature
- Modification de l'API send-esign-notification
- Le Bonjour utilise maintenant le prénom du signataire de l'organisation
2025-11-05 22:13:43 +01:00
d30427e57a feat: Afficher l'email employeur pour les signatures électroniques
- Ajout de l'affichage de l'email de l'employeur dans le modal de confirmation e-signature
- Récupération de l'email_signature depuis organization_details
- Clarification que cet email est utilisé pour les notifications de signature
2025-11-05 22:02:50 +01:00
658d029aa5 fix: Retirer signed_pdf_url inexistant de la table avenants
La colonne signed_pdf_url n'existe pas dans la table avenants.
Seule signed_pdf_s3_key est nécessaire pour stocker le PDF signé.
2025-11-05 21:22:26 +01:00
05e44653fa fix: Corriger bucket S3 et ajouter glisser-déposer pour upload PDF avenants
- Correction du bucket S3 de 'odentas-documents' à 'odentas-docs' dans upload-signed-pdf
- Ajout du drag & drop dans UploadSignedPdfModal pour faciliter l'upload
- Validation du fichier centralisée pour éviter la duplication de code
2025-11-05 20:05:02 +01:00
49284d9a59 feat: Ajouter page de modification d'avenants
- Nouvelle route /staff/avenants/[id]/modifier
- Composant ModifierAvenantPageClient qui pré-remplit les données
- API PATCH /api/staff/amendments/[id] pour mise à jour
- Restriction: seuls les avenants 'draft' sont modifiables
- Bouton 'Modifier' fonctionnel sur page détail avenant
- Pré-remplissage des formulaires avec données existantes
- Régénération PDF possible après modification
2025-11-05 19:52:17 +01:00