diff --git a/src/time-and-attendance/time-tracker/shifts/services/shifts-update-delete.service.ts b/src/time-and-attendance/time-tracker/shifts/services/shifts-update-delete.service.ts index 2a36dfa..bb71e23 100644 --- a/src/time-and-attendance/time-tracker/shifts/services/shifts-update-delete.service.ts +++ b/src/time-and-attendance/time-tracker/shifts/services/shifts-update-delete.service.ts @@ -146,30 +146,36 @@ export class ShiftsUpdateDeleteService { private normalizeShiftDto = async (dto: ShiftDto): Promise> => { const bank_code_id = await this.typeResolver.findBankCodeIDByType(dto.type); if (!bank_code_id.success) return { success: false, error: 'Bank_code not found' } - - const date = toDateFromString(dto.date); - const start_time = toHHmmFromString(dto.start_time); - const end_time = toHHmmFromString(dto.end_time); - - return { success: true, data: { date, start_time, end_time, bank_code_id: bank_code_id.data } }; + return { + success: true, + data: { + date: toDateFromString(dto.date), + start_time: toHHmmFromString(dto.start_time), + end_time: toHHmmFromString(dto.end_time), + bank_code_id: bank_code_id.data + } + }; } private overlapChecker = async (shifts: ShiftDto[]): Promise> => { - for (const shift_a of shifts) { - for(const shift_b of shifts){ - if((shift_a.date === shift_b.date) && (shift_a.id !== shift_b.id)){ - const has_overlap = overlaps( - { 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 (has_overlap) { - return { - 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})`, - } + for (let i = 0; i < shifts.length; i++) { + for (let j = i + 1; j < shifts.length; j++) { + const shift_a = shifts[i]; + const shift_b = shifts[j]; + + if (shift_a.date !== shift_b.date) continue; + if (shift_a.id === shift_b.id) continue; + const has_overlap = overlaps( + { start: toHHmmFromString(shift_a.start_time), end: toHHmmFromString(shift_a.end_time) }, + { start: toHHmmFromString(shift_b.start_time), end: toHHmmFromString(shift_b.end_time) }, + ); + if (has_overlap) { + return { + 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})`, } } }