fix(shifts): fix overlap shifts
This commit is contained in:
parent
7e95e8dae3
commit
6aa464a76e
|
|
@ -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})`,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user