fix(shifts): fix overlap shifts

This commit is contained in:
Matthieu Haineault 2025-11-13 11:05:13 -05:00
parent 7e95e8dae3
commit 6aa464a76e

View File

@ -146,30 +146,36 @@ export class ShiftsUpdateDeleteService {
private normalizeShiftDto = async (dto: ShiftDto): Promise<Result<Normalized, string>> => { private normalizeShiftDto = async (dto: ShiftDto): Promise<Result<Normalized, string>> => {
const bank_code_id = await this.typeResolver.findBankCodeIDByType(dto.type); const bank_code_id = await this.typeResolver.findBankCodeIDByType(dto.type);
if (!bank_code_id.success) return { success: false, error: 'Bank_code not found' } if (!bank_code_id.success) return { success: false, error: 'Bank_code not found' }
return {
const date = toDateFromString(dto.date); success: true,
const start_time = toHHmmFromString(dto.start_time); data: {
const end_time = toHHmmFromString(dto.end_time); date: toDateFromString(dto.date),
start_time: toHHmmFromString(dto.start_time),
return { success: true, data: { date, start_time, end_time, bank_code_id: bank_code_id.data } }; end_time: toHHmmFromString(dto.end_time),
bank_code_id: bank_code_id.data
}
};
} }
private overlapChecker = async (shifts: ShiftDto[]): Promise<Result<void, string>> => { private overlapChecker = async (shifts: ShiftDto[]): Promise<Result<void, string>> => {
for (const shift_a of shifts) { for (let i = 0; i < shifts.length; i++) {
for(const shift_b of shifts){ for (let j = i + 1; j < shifts.length; j++) {
if((shift_a.date === shift_b.date) && (shift_a.id !== shift_b.id)){ const shift_a = shifts[i];
const has_overlap = overlaps( const shift_b = shifts[j];
{ start: toHHmmFromString(shift_a.start_time), end: toHHmmFromString(shift_a.end_time) },
{ start: toDateFromString(shift_b.start_time), end: toDateFromString(shift_b.end_time) }, if (shift_a.date !== shift_b.date) continue;
); if (shift_a.id === shift_b.id) continue;
if (has_overlap) { const has_overlap = overlaps(
return { { start: toHHmmFromString(shift_a.start_time), end: toHHmmFromString(shift_a.end_time) },
success: false, { start: toHHmmFromString(shift_b.start_time), end: toHHmmFromString(shift_b.end_time) },
error: `SHIFT_OVERLAP` );
+ `new shift: ${shift_a.start_time}${shift_a.end_time} ` if (has_overlap) {
+ `existing shift: ${shift_b.start_time}${shift_b.end_time} ` return {
+ `date: ${shift_a.date})`, success: false,
} error: `SHIFT_OVERLAP`
+ `new shift: ${shift_a.start_time}${shift_a.end_time} `
+ `existing shift: ${shift_b.start_time}${shift_b.end_time} `
+ `date: ${shift_a.date})`,
} }
} }
} }