targo-backend/src/time-and-attendance/exports/export-csv-options.dto.ts
2026-02-16 09:36:13 -05:00

83 lines
2.2 KiB
TypeScript

import { Transform } from "class-transformer";
import { IsBoolean, IsInt, IsOptional, Max, Min } from "class-validator";
const toBoolean = (v: any) => {
if (typeof v === 'boolean') return v;
if (typeof v === 'string') return ['true', '1', 'on', 'yes'].includes(v.toLowerCase());
return false;
}
export class ExportCsvOptionsDto {
@Transform(({ value }) => parseInt(value, 10))
@IsInt() @Min(2023)
year!: number;
@Transform(({ value }) => parseInt(value, 10))
@IsInt() @Min(1) @Max(26)
period_no!: number;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
approved?: boolean = true;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
shifts?: boolean = true;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
expenses?: boolean = true;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
holiday?: boolean = true;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
vacation?: boolean = true;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
targo?: boolean = true;
@IsOptional() @IsBoolean()
@Transform(({ value }) => toBoolean(value))
solucom?: boolean = true;
}
export interface CsvRow {
compagnie_no: number;
employee_matricule: number;
releve: number;
type_transaction: string;
code: number;
quantite_hre: number | undefined;
taux_horaire: string | undefined;
montant: number | undefined;
semaine_no: number;
division_no: number | undefined;
service_no: number | undefined;
departem_no: number | undefined;
sous_departem_no: number | undefined;
date_transaction: string;
premier_jour_absence: string | undefined;
dernier_jour_absence: string | undefined;
}
export type InternalCsvRow = CsvRow & { timesheet_id: number; shift_date: Date; }
export type Filters = {
types: {
shifts: boolean;
expenses: boolean;
holiday: boolean;
vacation: boolean;
};
companies: {
targo: boolean;
solucom: boolean;
};
approved: boolean;
};