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
This commit is contained in:
odentas 2025-12-19 18:13:30 +01:00
parent 695a75a709
commit d01b725632

View file

@ -963,15 +963,21 @@ export default function ContratMultiPage() {
</tr>
</thead>
<tbody className="bg-white divide-y divide-slate-100">
{(data as any).salaires_par_date.representations.map((rep: any, repIdx: number) => (
rep.items && rep.items.map((item: any, itemIdx: number) => (
<tr key={`${repIdx}-${itemIdx}`} className="hover:bg-slate-50">
{(data as any).salaires_par_date.representations.map((rep: any, repIdx: number) => {
if (!rep.items || rep.items.length === 0) return null;
// Regrouper tous les items de cette date en une seule ligne
const typesLabel = rep.items.map((item: any) => `R${item.numero}`).join(', ');
const totalMontant = rep.items.reduce((sum: number, item: any) => sum + item.montant, 0);
return (
<tr key={repIdx} className="hover:bg-slate-50">
<td className="px-3 py-2 font-medium text-slate-700">{rep.date}</td>
<td className="px-3 py-2 text-slate-600">R{item.numero}</td>
<td className="px-3 py-2 text-right font-semibold text-slate-900">{item.montant.toFixed(2)} </td>
<td className="px-3 py-2 text-slate-600">{typesLabel}</td>
<td className="px-3 py-2 text-right font-semibold text-slate-900">{totalMontant.toFixed(2)} </td>
</tr>
))
))}
);
})}
</tbody>
</table>
</div>
@ -992,15 +998,21 @@ export default function ContratMultiPage() {
</tr>
</thead>
<tbody className="bg-white divide-y divide-slate-100">
{(data as any).salaires_par_date.repetitions.map((rep: any, repIdx: number) => (
rep.items && rep.items.map((item: any, itemIdx: number) => (
<tr key={`${repIdx}-${itemIdx}`} className="hover:bg-slate-50">
{(data as any).salaires_par_date.repetitions.map((rep: any, repIdx: number) => {
if (!rep.items || rep.items.length === 0) return null;
// Regrouper tous les items de cette date en une seule ligne
const typesLabel = rep.items.map((item: any) => `S${item.numero}`).join(', ');
const totalMontant = rep.items.reduce((sum: number, item: any) => sum + item.montant, 0);
return (
<tr key={repIdx} className="hover:bg-slate-50">
<td className="px-3 py-2 font-medium text-slate-700">{rep.date}</td>
<td className="px-3 py-2 text-slate-600">S{item.numero}</td>
<td className="px-3 py-2 text-right font-semibold text-slate-900">{item.montant.toFixed(2)} </td>
<td className="px-3 py-2 text-slate-600">{typesLabel}</td>
<td className="px-3 py-2 text-right font-semibold text-slate-900">{totalMontant.toFixed(2)} </td>
</tr>
))
))}
);
})}
</tbody>
</table>
</div>