Commit graph

367 commits

Author SHA1 Message Date
c148c46796 fix: Utiliser le client admin pour bypasser RLS lors de l'upload manuel du contrat signé
Le problème était que l'update du champ contract_pdf_s3_key utilisait le client Supabase normal (avec RLS) au lieu du client admin (service role). Cela empêchait potentiellement la mise à jour du contrat ou l'accès côté client.

Changements:
- Import de createClient depuis @supabase/supabase-js
- Création d'un adminClient avec SUPABASE_SERVICE_ROLE_KEY
- Utilisation de adminClient pour l'update au lieu de sb
- Ajout de logs pour le debug
2025-12-19 17:46:27 +01:00
49f0204a74 fix: Rafraîchir les documents côté client après upload manuel du contrat signé
- Ajout d'une prop refreshTrigger à DocumentsCard pour forcer le rechargement
- Ajout d'un listener d'événement custom 'refreshContractDocuments' dans la page client
- Émission de l'événement après l'upload réussi dans ManualSignedContractUpload
- Fix: Le contrat signé apparaît maintenant sur la page client après upload manuel depuis staff
2025-12-19 17:29:50 +01:00
f43a0be89c fix: Reconstruction correcte de salariesByDate depuis prefill
- Ajout d'un état temporaire prefillSalariesData pour stocker les données JSON
- Nouveau useEffect qui reconstruit salariesByDate après parsing des dates
- Mapping correct des clés (date DD/MM + numéro) au lieu de deviner les groupIdx
- Fix: les montants s'affichent maintenant correctement dans les champs
2025-12-16 21:50:10 +01:00
6cebac9160 fix: Charger salaires_par_date dans le prefill du formulaire de modification
- Ajout de salaires_par_date au type NouveauCDDUPrefill
- Détection automatique du mode de saisie (global vs par_date) selon le prefill
- Population des états salariesByDate depuis la structure JSON
- Mutual exclusivity entre montant global et salaires par date
2025-12-16 21:39:53 +01:00
b01cef95f9 debug: Ajouter logs pour identifier pourquoi les notes ne s'enregistrent pas
- Logs pour voir si requestBody.notes arrive bien
- Logs pour voir si la note est vide ou non
- Permettra d'identifier où le problème se situe
2025-12-16 21:29:07 +01:00
c19129ebd9 fix: Gérer exclusivité entre salaire global et salaires par date
- Dans prefill formulaire édition : ne pas afficher montant si salaires_par_date existe
- Dans PATCH : envoyer null pour l'un quand l'autre est défini
- Dans API : effacer montant quand salaires_par_date est défini (et vice-versa)
- Évite d'avoir les deux modes en même temps dans la base
- Le formulaire affiche maintenant correctement les salaires par date à la modification
2025-12-16 21:26:50 +01:00
7f7441c7a2 fix: Ne plus écraser notes dans cddu_contracts lors modification
- Retirer notes de supabaseData lors du PATCH
- Les notes doivent uniquement être créées dans la table notes
- Évite d'écraser le champ notes existant dans cddu_contracts
- Les notes de modification sont maintenant correctement enregistrées
2025-12-16 21:24:00 +01:00
c4520a22f6 feat: Afficher tableau des salaires par date dans pages détails contrats
- Ajouter tableau structuré dans contrats/[id] (CDDU mono)
- Ajouter tableau structuré dans contrats-multi/[id] (CDDU multi)
- Affichage conditionnel : tableau si salaires_par_date, sinon montant global
- Tableau avec colonnes Date, Type et Montant
- Séparation claire par sections : Représentations, Répétitions, Jours travaillés
- Total affiché en bas du tableau
2025-12-16 21:19:36 +01:00
5131552e18 fix: Enregistrer notes lors de l'édition de contrat client
- Récupérer org_id depuis le contrat pour créer la note correctement
- Fonctionne maintenant pour staff (org.id null) et clients
- Ajouter envoi d'email de notification à paie@odentas.fr
- Alignement avec la logique de POST /api/contrats/[id]/notes
2025-12-16 21:16:03 +01:00
f5be6a5b24 fix: Synchroniser salaires_par_date lors du PATCH contrat
- Ajouter salaires_par_date dans les champs synchronisés vers Supabase
- Permet la sauvegarde des modifications de salaires par date
- Les notes continuent d'être créées lors des modifications
2025-12-16 21:15:11 +01:00
823a149a5d fix: Prendre en compte modifications salaires dans édition contrat client
- Ajouter salaires_par_date dans le prefill du formulaire
- Inclure salaires_par_date dans le PATCH /api/contrats/[id]
- Permet aux clients de modifier salaires globaux et par date
- Les modifications sont maintenant bien sauvegardées
2025-12-16 21:08:01 +01:00
bbcda39c24 feat: Améliorer affichage et édition des salaires par jour
- Créer composant SalaireParDateEditor avec tableau structuré
- Séparer clairement les lignes par date avec tableau formaté
- Ajouter possibilité pour le staff de modifier les montants
- Créer API PATCH /api/staff/contrats/[id]/salaires-par-date
- Recalcul automatique du total lors des modifications
- Design avec icônes Lucide React (Edit2, Save, X)
2025-12-16 21:03:21 +01:00
5662874f1c fix: Corriger nom de colonne 'api_name' -> 'structure_api' dans API notes
- Utilise 'structure_api' au lieu de 'api_name' pour le code employeur
- Ajout du log de l'erreur pour faciliter le debug
2025-12-16 21:01:19 +01:00
cbe43121ef fix: Corriger nom de colonne 'numero' -> 'contract_number' dans API notes
- Utilise 'contract_number' au lieu de 'numero' pour récupérer le n° contrat
- Correspond au nom réel de la colonne dans cddu_contracts
2025-12-16 20:57:25 +01:00
206c1f2afc feat: Notification email lors de l'ajout de notes sur contrats
- Ajout du type 'contract-note-added' dans le système email universel v2
- Email automatique envoyé à paie@odentas.fr quand un client ajoute une note
- Fonctionne pour tous les types de contrats (CDDU mono, multi, RG)
- Email contient: organisation, code employeur, n° contrat, utilisateur, contenu note
- Lien direct vers le contrat dans l'interface staff
- Gestion des erreurs: note créée même si email échoue
- Documentation complète dans NOTIFICATION_NOTES_CONTRAT.md
2025-12-16 20:39:36 +01:00
76821a2691 fix: Corriger la perte des décimales pour les heures des techniciens dans les avenants PDFMonkey 2025-12-16 17:43:24 +01:00
f5805133d1 fix: Afficher liste professions dès le focus du champ
- Ajouter useEffect pour charger professions techniciens au montage initial
- Ajouter état professionInputFocused pour afficher la liste dès le focus
- Corriger le bug où la liste ne s'affichait que si on tapait dans le champ
- Fonctionne pour les professions Artiste et Technicien
2025-12-16 12:10:06 +01:00
543cc2da95 feat: Ajouter la suppression du contrat signé depuis staff/contrats/[id]
- Créer l'API DELETE /api/staff/contrats/[id]/delete-signed-pdf
- Supprimer le fichier S3 et mettre à jour la BDD
- Ajouter un bouton de suppression dans la card Documents
- Afficher un modal de confirmation avant suppression
- Invalider les queries React Query après suppression
2025-12-11 19:10:36 +01:00
c0142d167e feat: Ajouter possibilité de renommer les périodes dans documents comptables (staff) 2025-12-10 16:16:32 +01:00
39fea18d9e fix: Ajouter valeur par défaut pour AWS_S3_BUCKET_NAME dans route download 2025-12-10 15:56:39 +01:00
1954d90255 fix: Améliorer logique de téléchargement .txt avec logs debug 2025-12-10 15:49:46 +01:00
8bf19016a9 fix: Ajouter route API dédiée pour téléchargement fichiers .txt depuis S3 2025-12-10 15:43:42 +01:00
30d77bf7b0 fix: Utiliser fetch + blob pour forcer le téléchargement des fichiers .txt 2025-12-10 15:30:26 +01:00
f26b41c525 fix: Téléchargement direct des fichiers .txt dans documents comptables 2025-12-10 15:23:31 +01:00
2b6a926c64 fix: afficher tous les tickets support pour le staff 2025-12-09 16:47:58 +01:00
ebcfa602b1 fix: appliquer restriction Odentas uniquement sur filtre virement en attente 2025-12-09 16:29:30 +01:00
1036360801 fix: filtrer virements en attente sur Odentas 2025-12-09 16:19:58 +01:00
50515b76e4 fix: sujet email accès créé 2025-12-09 14:24:30 +01:00
77b5579ab9 chore: mettre à jour sujet email d\'accès 2025-12-09 14:17:54 +01:00
3df0968024 fix: utiliser RPC find_user_by_email 2025-12-09 14:09:07 +01:00
2a08a69efd fix: vérifier les comptes clients créés par le staff 2025-12-09 14:01:52 +01:00
d1957400bc fix: restaurer code emploi en duplication 2025-12-09 12:32:58 +01:00
15646af9d6 fix: sécuriser upload auto-declaration 2025-12-09 11:40:09 +01:00
1144180141 feat: Ajout du champ pseudonyme sur la page auto-déclaration 2025-12-08 16:52:37 +01:00
9a922ce77e fix: Corriger logique AEM status (éviter faux positif "À traiter" avec includes('traite')) 2025-12-05 18:06:08 +01:00
e0f1b48453 fix: Corriger condition voyant bleu 48h (inclure <= 2 jours) 2025-12-05 18:03:30 +01:00
e73bed369e refactor: Réorganiser le menu staff - renommer Gestion RH en Gestion Paie, déplacer Virements et Cotisations, renommer Gestion Financière en Gestion Facturation 2025-12-05 16:17:54 +01:00
00b77b2f17 fix: Corriger le type de multiMoisFilter (boolean au lieu de null) 2025-12-05 16:08:03 +01:00
3728653595 fix: Corriger la réinitialisation des filtres sur page staff/contrats 2025-12-05 16:04:07 +01:00
6dffd2ed45 feat: Ajouter colonne Notif. dans tableau factures et améliorer message par défaut
- Ajouter colonne 'Notif.' avec voyant vert (Oui) ou gris (Non) après la colonne Statut
- Enlever le bouton 'Modifier' du tableau (garder seulement 'Voir')
- Ajouter champ notified au type Invoice et à l'API GET /staff/facturation
- Ajouter période au message par défaut pour factures sans invoice_type reconnu
- Appliqué aux deux routes (notify et bulk-notify)
2025-12-04 22:30:54 +01:00
5bff842a8c feat: Ajouter invoice_type et payment_method aux factures de saisie tableau
- Ajouter invoice_type='paie_mensuelle' et payment_method='sepa' au payload de saisie tableau
- Modifier l'API bulk-create pour accepter et stocker ces champs
- Améliorer les messages de notification paie_mensuelle :
  * Toujours afficher 'Votre facture pour la période XXX est disponible'
  * Utiliser 'du mois' comme fallback si period_label est vide
  * Appliquer le changement aux deux routes (notify et bulk-notify)
2025-12-04 22:24:54 +01:00
13d844921e fix: Corriger récupération des emails de notification et améliorer labels de templates
- Modifier l'API GET /staff/facturation/[id] pour inclure organization_details avec emails
- Retourner les infos complètes de l'organisation (email_notifs, email_notifs_cc)
- Améliorer les noms de templates de factures :
  * 'Facture (type non défini)' au lieu de 'Invoice générique'
  * Retirer 'Invoice' des noms de templates
  * Afficher le type personnalisé si non reconnu
- Les factures auront maintenant leurs emails correctement affichés dans le modal
2025-12-04 22:16:20 +01:00
0b453b272e fix: Retirer l'export de getInvoiceTemplateName dans l'API route
- Les routes Next.js ne peuvent exporter que POST, GET, etc.
- Garder getInvoiceTemplateName comme fonction interne uniquement
2025-12-04 22:08:34 +01:00
3263d6e24c feat: Ajouter envoi de notifications en masse pour les factures
- Créer l'API route /api/staff/facturation/bulk-notify
- Créer le composant BulkInvoiceNotifyModal avec :
  * Liste détaillée des factures sélectionnées
  * Affichage du montant TTC, nom de la structure, emails (notif + CC)
  * Type de template email selon le type de facture et mode de paiement
  * Statistiques (total factures, montant total, avec/sans email)
  * Alertes pour factures sans email configuré
  * Expansion/réduction des détails par facture
- Ajouter le bouton 'Notifier' dans la barre d'actions en masse
- Récupération automatique des infos d'email et type de facture
- Gestion des erreurs et feedback utilisateur détaillé
2025-12-04 22:04:04 +01:00
eaec9a2123 feat: Ajouter bouton de visualisation en masse des PDFs de factures
- Créer le composant InvoicePdfViewerModal pour afficher les PDFs de factures
- Créer l'API route /api/staff/facturation/[id]/pdf-url
- Ajouter le bouton 'Voir les PDF' dans la barre d'actions en masse
- Afficher résumé rapide de chaque facture (numéro, client, période, montants, statut)
- Navigation au clavier et entre factures (flèches gauche/droite)
- Téléchargement et ouverture dans nouvel onglet disponibles
2025-12-04 21:43:28 +01:00
18edf3b9b0 feat: Ajouter filtre multi-mois pour les contrats CDDU
- Ajouter un bouton de filtre rapide 'Multi-mois' dans la page staff/contrats
- Le filtre affiche uniquement les contrats CDDU dont la date de début et la date de fin sont sur des mois calendaires différents
- Ajout d'un compteur en temps réel pour afficher le nombre de contrats multi-mois
- Le filtre est persisté dans le localStorage comme les autres filtres
- Utilise une icône Calendar de Lucide React et une couleur violette (purple)
2025-12-04 21:11:06 +01:00
b89d26d26e fix: Alignement des bords arrondis du bouton Enregistrer avec son animation 2025-12-04 19:56:31 +01:00
38cbabaf1a feat: Réorganisation de la sidebar et améliorations UX
- Déplacement du menu Staff au-dessus des menus clients
- Organisation des menus clients en 3 sections nommées :
  * Gestion paie (navigation principale)
  * Gestion compte (facturation, infos, documents)
  * Simulation & CCN (minima CCN, simulateur)
- Réorganisation du menu Staff (Support & Communication après Administration)
- Ajout du tri par code employeur dans ContractsGrid
- Amélioration UX ContractEditor :
  * Headers colorés par section
  * Détection des modifications non sauvegardées
  * Animation du bouton Enregistrer avec gradient
  * Mise à jour PDF sans rafraîchissement de page
2025-12-04 19:49:44 +01:00
2ec29d07ab fix: Préserver la préférence du popup de confidentialité lors de la déconnexion
Le popup de confidentialité réapparaissait systématiquement après chaque
déconnexion/reconnexion car localStorage.clear() supprimait la clé
'odentas_info_suivi_ack_v1'.

Solution: Sauvegarder et restaurer cette clé lors du nettoyage du localStorage
dans LogoutButton.tsx.

Fixes: Popup s'affiche plusieurs fois par jour au lieu d'une seule fois
2025-12-04 18:55:46 +01:00
70bcd8af9c fix: Inclure type_salaire dans l'API de recherche staff/contrats 2025-12-04 18:09:29 +01:00