Project

General

Profile

Actions

Feature #90

closed
RA

Feature #82: Améliorer la génération de PDF pour les contrats avec design professionnel et signatures configurables

Backend — moteur de rendu PDF du contrat (police, logo, marges)

Feature #90: Backend — moteur de rendu PDF du contrat (police, logo, marges)

Added by Redmine Admin about 2 months ago. Updated about 1 month ago.

Status:
Shipped
Priority:
Normal
Assignee:
-
Start date:
06/15/2026
Due date:
% Done:

0%

Estimated time:
spec_ref:
build_status:
build_number:
ci_run_url:
scan_status:
scan_report_url:
deploy_status:
deployed
preprod_url:
deployed_at:
06/23/2026
branch:
feat/90-contract-pdf-renderer
pr_url:
https://github.com/Scobby-organisation/scobby/pull/8
security_key:
severity:
paused:

Description

Parent : #82. Socle (aucune dépendance).

Retravailler le moteur de rendu PDF du contrat (server/, pdf-lib/jsPDF) à partir des réglages du modèle : police choisie, logo de la structure en haut à gauche + filet de séparation, marges 2 cm, mise en page soignée. Définir le **contrat de données des réglages** (police, logo, emplacement signatures) consommé par le rendu — à partager avec le frontend #82-config.

## Acceptance criteria
- [ ] Le PDF respecte la police et la mise en page du modèle ; marges 2 cm sur tous les côtés.
- [ ] Logo de la structure rendu en haut à gauche avec filet de séparation.
- [ ] Le schéma des réglages de présentation est défini et documenté (consommé par le frontend).
- [ ] Tests backend (TDD) + lint/typecheck verts.

RA Updated by Redmine Admin about 2 months ago Actions #1

  • Status changed from Submitted to In development
  • branch set to feat/90-contract-pdf-renderer

Dev démarré (worktree isolé, `feat/90-contract-pdf-renderer` sur `origin/dev`). Submitted → In development. Socle PDF du #82.

RA Updated by Redmine Admin about 2 months ago Actions #2

  • Status changed from In development to QA
  • pr_url set to https://github.com/Scobby-organisation/scobby/pull/8

PR #8 mergée dans `dev` (squash), CI verte. In development → QA. Moteur de rendu PDF (socle) : 8 tests unit, server 50/50, lint/build verts. Schéma `presentation_settings` exposé pour #93. Rendu visuel à valider en préprod.

RA Updated by Redmine Admin about 2 months ago Actions #3

  • Status changed from QA to In development

**QA → In development (échec QA préprod).** Root cause confirmé (log api préprod) : `P2022 — column HtmlContractTemplate.presentation_settings does not exist`. #90 a ajouté `presentation_settings` au `schema.prisma` mais **sans migration** → la colonne manque sur la DB préprod (migrate deploy), alors que les tests passaient (test DB en `prisma db push`). Toute requête Prisma sur HtmlContractTemplate référence la colonne → 500 à l'enregistrement/génération. Correctif : migration `ALTER TABLE ... ADD COLUMN presentation_settings JSONB`.

RA Updated by Redmine Admin about 2 months ago Actions #4

  • Status changed from In development to QA

**Correctif vérifié en live (préprod) → QA.** PR #19 mergée (dev) + promue préprod (PR #20, build préprod #11 `migrate deploy` OK). Le même enregistrement de modèle qui renvoyait **500 (P2022)** renvoie désormais **201 Created** avec `presentation_settings` persisté. La colonne existe, les modèles s'enregistrent ; la génération PDF honorera donc les réglages (logo/police/marges/emplacement signatures) au lieu des valeurs par défaut. Template de test supprimé après vérif.

Reste pour la validation client : génération visuelle d'un vrai contrat (logo + 3 emplacements de signature + numéro) avec données réelles.

RA Updated by Redmine Admin about 2 months ago Actions #5

**Prévention de récurrence livrée** (PR #21, mergée dev `f7f207e6`) : garde CI `migration-schema-coverage.test.ts` — test sans DB tournant dans `npm run test:unit` (donc dans la CI sans Postgres) qui échoue si une colonne du `schema.prisma` n'a pas de migration. Preuve négative faite (échoue en nommant `presentation_settings` sans la migration). Comble l'écart `db push` (tests) vs `migrate deploy` (préprod/prod) qui avait masqué ce bug. Inclut aussi le fix du test obsolète `functions.e2e` (501 generateContractPdf → désormais un nom non enregistré). Test-only, sans impact runtime ; partira en préprod avec la prochaine promotion.

RA Updated by Redmine Admin about 2 months ago Actions #6

  • Status changed from QA to Preprod

Déployé en préprod (https://preprod-scobby.omdev.tech). Passage QA → Preprod.

RA Updated by Redmine Admin about 1 month ago Actions #7

  • Status changed from Preprod to Ready to ship

Livré sur master (dev = preprod = master). Commits `8dc2a341` (PR #8) — moteur de rendu PDF professionnel + `52733a4f` (PR #19) — migration presentation_settings. Passage en **Ready to ship** — *Shipped* après confirmation du gate prod manuel (Jenkins) sur scobby.fr.

RA Updated by Redmine Admin about 1 month ago Actions #8

  • Status changed from Ready to ship to Shipped
  • deploy_status set to deployed
  • deployed_at set to 06/23/2026

Déploiement PROD confirmé live sur scobby.fr (gate manuel Jenkins approuvé le 2026-06-23). Passage en **Shipped**.

Actions

Also available in: PDF Atom