feat: Ajouter colonne Analytique et renommer colonnes montants (B, NPAS, NP, CE) dans staff/payslips
This commit is contained in:
parent
a24b8dfb09
commit
dd02cde85c
3 changed files with 28 additions and 10 deletions
|
|
@ -40,7 +40,7 @@ export default async function StaffPayslipsPage() {
|
|||
gross_amount, net_amount, net_after_withholding, employer_cost,
|
||||
processed, aem_status, transfer_done, organization_id, created_at,
|
||||
cddu_contracts!contract_id(
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id,
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id, analytique,
|
||||
salaries!employee_id(salarie, nom, prenom),
|
||||
organizations!org_id(organization_details(code_employeur))
|
||||
)`
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ export async function GET(req: NextRequest) {
|
|||
gross_amount, net_amount, net_after_withholding, employer_cost,
|
||||
processed, aem_status, transfer_done, organization_id, storage_path, created_at,
|
||||
cddu_contracts!contract_id(
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id,
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id, analytique,
|
||||
salaries!employee_id(salarie, nom, prenom),
|
||||
organizations!org_id(organization_details(code_employeur))
|
||||
)`,
|
||||
|
|
@ -106,7 +106,7 @@ export async function GET(req: NextRequest) {
|
|||
gross_amount, net_amount, net_after_withholding, employer_cost,
|
||||
processed, aem_status, transfer_done, organization_id, storage_path, created_at,
|
||||
cddu_contracts!contract_id(
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id,
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id, analytique,
|
||||
salaries!employee_id(salarie, nom, prenom),
|
||||
organizations!org_id(organization_details(code_employeur))
|
||||
)`,
|
||||
|
|
@ -162,6 +162,9 @@ export async function GET(req: NextRequest) {
|
|||
} else if (sort === 'structure') {
|
||||
valueA = a.cddu_contracts?.structure || '';
|
||||
valueB = b.cddu_contracts?.structure || '';
|
||||
} else if (sort === 'analytique') {
|
||||
valueA = a.cddu_contracts?.analytique || '';
|
||||
valueB = b.cddu_contracts?.analytique || '';
|
||||
} else {
|
||||
valueA = a[sort];
|
||||
valueB = b[sort];
|
||||
|
|
@ -206,7 +209,7 @@ export async function GET(req: NextRequest) {
|
|||
gross_amount, net_amount, net_after_withholding, employer_cost,
|
||||
processed, aem_status, transfer_done, organization_id, created_at,
|
||||
cddu_contracts!contract_id(
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id,
|
||||
id, contract_number, employee_name, employee_id, structure, type_de_contrat, org_id, analytique,
|
||||
salaries!employee_id(salarie, nom, prenom)
|
||||
)`,
|
||||
{ count: "exact" }
|
||||
|
|
@ -287,6 +290,9 @@ export async function GET(req: NextRequest) {
|
|||
} else if (sort === 'structure') {
|
||||
valueA = contractA?.structure || '';
|
||||
valueB = contractB?.structure || '';
|
||||
} else if (sort === 'analytique') {
|
||||
valueA = contractA?.analytique || '';
|
||||
valueB = contractB?.analytique || '';
|
||||
} else {
|
||||
valueA = (a as any)[sort];
|
||||
valueB = (b as any)[sort];
|
||||
|
|
@ -375,7 +381,7 @@ export async function GET(req: NextRequest) {
|
|||
|
||||
// Si le tri est sur des champs de la jointure, on trie côté serveur
|
||||
let sortedPayslips = payslips || [];
|
||||
if (sort === 'contract_number' || sort === 'employee_name' || sort === 'structure') {
|
||||
if (sort === 'contract_number' || sort === 'employee_name' || sort === 'structure' || sort === 'analytique') {
|
||||
sortedPayslips = [...sortedPayslips].sort((a: any, b: any) => {
|
||||
let valueA: any;
|
||||
let valueB: any;
|
||||
|
|
@ -389,6 +395,9 @@ export async function GET(req: NextRequest) {
|
|||
} else if (sort === 'structure') {
|
||||
valueA = a.cddu_contracts?.structure || '';
|
||||
valueB = b.cddu_contracts?.structure || '';
|
||||
} else if (sort === 'analytique') {
|
||||
valueA = a.cddu_contracts?.analytique || '';
|
||||
valueB = b.cddu_contracts?.analytique || '';
|
||||
}
|
||||
|
||||
if (typeof valueA === 'string') valueA = valueA.toLowerCase();
|
||||
|
|
|
|||
|
|
@ -126,6 +126,7 @@ type Payslip = {
|
|||
structure?: string | null;
|
||||
type_de_contrat?: string | null;
|
||||
org_id?: string | null;
|
||||
analytique?: string | null;
|
||||
salaries?: {
|
||||
salarie?: string | null;
|
||||
nom?: string | null;
|
||||
|
|
@ -591,6 +592,10 @@ export default function PayslipsGrid({ initialData, activeOrgId }: { initialData
|
|||
valueA = a.cddu_contracts?.structure || '';
|
||||
valueB = b.cddu_contracts?.structure || '';
|
||||
break;
|
||||
case 'analytique':
|
||||
valueA = a.cddu_contracts?.analytique || '';
|
||||
valueB = b.cddu_contracts?.analytique || '';
|
||||
break;
|
||||
default:
|
||||
valueA = a[field as keyof Payslip] || '';
|
||||
valueB = b[field as keyof Payslip] || '';
|
||||
|
|
@ -1042,6 +1047,9 @@ export default function PayslipsGrid({ initialData, activeOrgId }: { initialData
|
|||
<th className="text-left px-3 py-2 cursor-pointer" onClick={() => { setSortField('contract_number'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
N° contrat {sortField === 'contract_number' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
<th className="text-left px-3 py-2 cursor-pointer" onClick={() => { setSortField('analytique'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
Analytique {sortField === 'analytique' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
<th className="text-left px-3 py-2 cursor-pointer" onClick={() => { setSortField('pay_number'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
N° Paie {sortField === 'pay_number' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
|
|
@ -1055,20 +1063,20 @@ export default function PayslipsGrid({ initialData, activeOrgId }: { initialData
|
|||
Période {sortField === 'period_start' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
<th className="text-right px-3 py-2 cursor-pointer" onClick={() => { setSortField('gross_amount'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
Brut {sortField === 'gross_amount' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
B {sortField === 'gross_amount' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
<th className="text-right px-3 py-2 cursor-pointer" onClick={() => { setSortField('net_amount'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
Net avant PAS {sortField === 'net_amount' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
NPAS {sortField === 'net_amount' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
<th className="text-right px-3 py-2 cursor-pointer" onClick={() => { setSortField('net_after_withholding'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
Net à payer {sortField === 'net_after_withholding' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
NP {sortField === 'net_after_withholding' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
<th className="text-right px-3 py-2 cursor-pointer" onClick={() => { setSortField('employer_cost'); setSortOrder((o) => o === 'asc' ? 'desc' : 'asc'); }}>
|
||||
Coût employeur {sortField === 'employer_cost' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
CE {sortField === 'employer_cost' ? (sortOrder === 'asc' ? '▲' : '▼') : ''}
|
||||
</th>
|
||||
</tr>
|
||||
<tr className="bg-indigo-50 border-t border-slate-200 font-semibold">
|
||||
<td className="px-3 py-2" colSpan={9}>
|
||||
<td className="px-3 py-2" colSpan={10}>
|
||||
<span className="text-slate-700">
|
||||
Totaux ({selectedPayslipIds.size > 0 ? `${selectedPayslipIds.size} ligne${selectedPayslipIds.size > 1 ? 's' : ''} sélectionnée${selectedPayslipIds.size > 1 ? 's' : ''}` : `${sortedRows.length} ligne${sortedRows.length > 1 ? 's' : ''}`})
|
||||
</span>
|
||||
|
|
@ -1155,6 +1163,7 @@ export default function PayslipsGrid({ initialData, activeOrgId }: { initialData
|
|||
>
|
||||
{r.cddu_contracts?.contract_number || "—"}
|
||||
</td>
|
||||
<td className="px-3 py-2">{r.cddu_contracts?.analytique || "—"}</td>
|
||||
<td className="px-3 py-2">{r.pay_number ?? "—"}</td>
|
||||
<td className="px-3 py-2">{formatEmployeeName(r)}</td>
|
||||
<td className="px-3 py-2">
|
||||
|
|
|
|||
Loading…
Reference in a new issue