Commit graph

268 commits

Author SHA1 Message Date
04e9d54292 feat: Migrer génération PDF de PDFMonkey vers Gotenberg
- Remplacer PDFMonkey par Gotenberg (auto-hébergé sur VPS)
- Créer template Handlebars pour contrats (lib/templates/contract.hbs)
- Créer formateur de données (lib/contract-data-formatter.ts)
- Ajouter helpers Handlebars pour conditions et transformations
- Mettre à jour API route generate-pdf pour utiliser Gotenberg
- Ajouter GOTENBERG_URL dans .env.local (http://localhost:3001 pour dev)
- Créer script tunnel-gotenberg.sh pour dev local
- Ajouter documentation MIGRATION_GOTENBERG.md

Avantages:
- Souveraineté des données (pas d'API externe)
- Performance (génération locale)
- Coût (0€ vs abonnement PDFMonkey)
- Sécurité (Gotenberg non exposé publiquement)
2025-12-27 22:22:45 +01:00
c6faceb038 feat: Préparation migration PDFMonkey vers Gotenberg
- Ajout helpers Handlebars pour remplacer filtres Liquid
- Conversion template CDDU de Liquid vers Handlebars
- Nouvelle API route /api/generate-contract-pdf pour Gotenberg
- Configuration Docker Compose pour auto-héberger Gotenberg
- Documentation complète de migration
- Variables d'environnement exemple

Note: Le bouton 'Créer PDF' utilise encore PDFMonkey.
Pour activer Gotenberg, modifier l'appel dans ContractEditor.tsx
2025-12-27 21:40:27 +01:00
aa277a8a2a fix: Corriger imports avec bonne casse 2025-12-27 15:45:56 +01:00
35466166e5 fix: Corriger la casse des fichiers modaux pour Linux/Docker 2025-12-27 15:38:18 +01:00
7e21350778 build: Invalider cache Docker 2025-12-27 15:34:05 +01:00
dd02cde85c feat: Ajouter colonne Analytique et renommer colonnes montants (B, NPAS, NP, CE) dans staff/payslips 2025-12-23 14:42:47 +01:00
8e9d628e5e feat: Tri alphabétique et format NOM Prénom pour appels à virement 2025-12-19 18:57:21 +01:00
d01b725632 fix: Regrouper les items par date dans les tableaux de salaires sur contrats-multi
Problème: Les tableaux de la page contrats-multi affichaient une ligne par item (R1, R2 sur des lignes séparées).

Solution:
- Consolidation des représentations : une seule ligne par date avec "R1, R2" dans la colonne Type
- Consolidation des répétitions : une seule ligne par date avec "S1, S2" dans la colonne Type
- Le montant affiché est la somme de tous les items de cette date
- Alignement avec la page contrats mono-mois
2025-12-19 18:13:30 +01:00
695a75a709 fix: Regrouper les items par date dans les tableaux de salaires côté client
Problème: Les tableaux affichaient une ligne par item (R1, R2 sur des lignes séparées), ce qui rendait les tableaux longs et moins lisibles.

Solution:
- Consolidation des représentations : une seule ligne par date avec "R1, R2" dans la colonne Type
- Consolidation des répétitions : une seule ligne par date avec "S1, S2" dans la colonne Type
- Le montant affiché est la somme de tous les items de cette date
- Amélioration de la lisibilité et réduction de la taille des tableaux
2025-12-19 18:08:51 +01:00
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
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
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
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
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
70bcd8af9c fix: Inclure type_salaire dans l'API de recherche staff/contrats 2025-12-04 18:09:29 +01:00
605d55f4e6 feat: Améliorer accessibilité des voyants d'urgence (rouge/bleu) 2025-12-04 18:06:49 +01:00
839190fa8f feat: Ajouter colonne Type de salaire dans staff/contrats 2025-12-04 17:59:03 +01:00
e694129fb2 feat: Ajout de la colonne Date de début sur la page signatures-electroniques 2025-12-04 17:50:59 +01:00