From 3bbbf773f42f8ef50230abb693052a8fb756fb7e Mon Sep 17 00:00:00 2001
From: Nessar
Date: Sun, 19 Jul 2026 01:51:25 +0200
Subject: [PATCH] feat: enhance date formatting in rental documents and
receipts
---
.../pdf/ThymeleafRentalDocumentRenderer.java | 28 +++++++++++++++++--
.../resources/templates/rental/lease.html | 2 +-
.../templates/rental/payment-receipt.html | 8 +++---
.../templates/rental/rent-receipt.html | 4 +--
.../ThymeleafRentalDocumentRendererTest.java | 19 +++++++++----
5 files changed, 46 insertions(+), 15 deletions(-)
diff --git a/backend/src/main/java/fr/nessar/lmnporganizer/rental/adapter/out/pdf/ThymeleafRentalDocumentRenderer.java b/backend/src/main/java/fr/nessar/lmnporganizer/rental/adapter/out/pdf/ThymeleafRentalDocumentRenderer.java
index ffaf540..76592dc 100644
--- a/backend/src/main/java/fr/nessar/lmnporganizer/rental/adapter/out/pdf/ThymeleafRentalDocumentRenderer.java
+++ b/backend/src/main/java/fr/nessar/lmnporganizer/rental/adapter/out/pdf/ThymeleafRentalDocumentRenderer.java
@@ -8,13 +8,17 @@ import org.thymeleaf.context.Context;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import java.time.format.DateTimeFormatter;
+import java.time.LocalDate;
+import java.time.Month;
+import java.time.YearMonth;
+import java.time.format.TextStyle;
+import java.time.temporal.TemporalAccessor;
import java.util.List;
import java.util.Locale;
@Component
public class ThymeleafRentalDocumentRenderer implements RentalDocumentRenderer {
- private static final DateTimeFormatter MONTH = DateTimeFormatter.ofPattern("MMMM yyyy", Locale.FRANCE);
+ private static final FrenchDates DATES = new FrenchDates();
private final TemplateEngine templates;
@@ -45,13 +49,13 @@ public class ThymeleafRentalDocumentRenderer implements RentalDocumentRenderer {
Context context = context(document);
context.setVariable("tenantNames", names(document.contract().tenants().stream()
.map(tenant -> tenant.firstName() + " " + tenant.lastName()).toList()));
- context.setVariable("receiptMonth", document.month().format(MONTH));
return render("rental/rent-receipt", context);
}
private Context context(Object document) {
Context context = new Context(Locale.FRANCE);
context.setVariable("document", document);
+ context.setVariable("dates", DATES);
return context;
}
@@ -68,4 +72,22 @@ public class ThymeleafRentalDocumentRenderer implements RentalDocumentRenderer {
private static String names(List names) {
return names.isEmpty() ? "Aucun" : String.join(", ", names);
}
+
+ public static final class FrenchDates {
+ private FrenchDates() {
+ }
+
+ public String date(LocalDate date) {
+ return date.getDayOfMonth() + " " + monthName(date) + " " + date.getYear();
+ }
+
+ public String month(YearMonth month) {
+ return monthName(month) + " " + month.getYear();
+ }
+
+ private static String monthName(TemporalAccessor date) {
+ String month = Month.from(date).getDisplayName(TextStyle.FULL, Locale.FRANCE);
+ return Character.toUpperCase(month.charAt(0)) + month.substring(1);
+ }
+ }
}
diff --git a/backend/src/main/resources/templates/rental/lease.html b/backend/src/main/resources/templates/rental/lease.html
index 78c642f..7706504 100644
--- a/backend/src/main/resources/templates/rental/lease.html
+++ b/backend/src/main/resources/templates/rental/lease.html
@@ -24,7 +24,7 @@
| Téléphone du bailleur | +33612345678 |
| Adresse du bailleur | 1 rue de Paris |
| Locataire(s) | Camille Martin |
- | Période | 2026-09-01 au 2027-08-31 |
+ | Période | 1 Septembre 2026 au 31 Août 2027 |
| Loyer mensuel | 850.00 EUR |
| Charges mensuelles | 50.00 EUR |
| Dépôt de garantie | 850.00 EUR |
diff --git a/backend/src/main/resources/templates/rental/payment-receipt.html b/backend/src/main/resources/templates/rental/payment-receipt.html
index 0f75c05..34910ad 100644
--- a/backend/src/main/resources/templates/rental/payment-receipt.html
+++ b/backend/src/main/resources/templates/rental/payment-receipt.html
@@ -18,7 +18,7 @@
| Bailleur | Léa Dubois |
| Logement | 12 rue de la République |
| Locataire(s) | Camille Martin |
- | Reçu le | 2026-07-05 |
+ | Reçu le | 5 Juillet 2026 |
| Montant reçu | 1200.00 EUR |
| Montant remboursé | 0.00 EUR |
| Solde non affecté | 300.00 EUR |
@@ -28,9 +28,9 @@
| Mois | Montant | Date |
- | 2026-07 |
+ Juillet 2026 |
900.00 EUR |
- 2026-07-05 |
+ 5 Juillet 2026 |
| Aucune affectation |
@@ -42,7 +42,7 @@
| refund-1 |
100.00 EUR |
- 2026-07-06 |
+ 6 Juillet 2026 |
| Aucun remboursement |
diff --git a/backend/src/main/resources/templates/rental/rent-receipt.html b/backend/src/main/resources/templates/rental/rent-receipt.html
index cc483c9..a3b1881 100644
--- a/backend/src/main/resources/templates/rental/rent-receipt.html
+++ b/backend/src/main/resources/templates/rental/rent-receipt.html
@@ -21,11 +21,11 @@
| Logement | Studio République |
| Adresse | 12 rue de la République |
| Locataire(s) | Camille Martin |
- | Période | juillet 2026 |
+ | Période | Juillet 2026 |
| Loyer | 850.00 EUR |
| Charges | 50.00 EUR |
| Total réglé | 900.00 EUR |
-
+