feat: introduce service-based availability filtering for collaborator schedules and overrides
This commit is contained in:
+47
-2
@@ -10,8 +10,8 @@ import { useAlert } from "@store/Alert.Store";
|
||||
import { useConfirmStore } from "@store/Confirm.Store";
|
||||
import { useEffect, useState } from "react";
|
||||
import MaterialAlert from "@mui/material/Alert";
|
||||
import { ScheduleItem } from "@core/Models/Collaborators.model";
|
||||
import { createSchedulesOverrides } from "../../../Collaborators.Service";
|
||||
import { CollaboratorServiceItems, ScheduleItem } from "@core/Models/Collaborators.model";
|
||||
import { createSchedulesOverrides, findCollaboratorsServices } from "../../../Collaborators.Service";
|
||||
import { Grid2 } from "@mui/material";
|
||||
import TextTime from "@core/app/components/TextTime/TextTime";
|
||||
import TextDate from "@core/app/components/TextDate/TextDate";
|
||||
@@ -51,11 +51,24 @@ export default function OverridesCreate() {
|
||||
const [from, setFrom] = useState<dayjs.Dayjs>(dayjs(new Date()).hour(8).minute(0));
|
||||
const [to, setTo] = useState<dayjs.Dayjs>(dayjs(new Date()).hour(12).minute(0));
|
||||
const [schedules, setSchedules] = useState<Array<SchedulesDateItem>>([]);
|
||||
const [services, setServices] = useState<CollaboratorServiceItems[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
eventHandler.setEventType(EVENT_TYPES.NEED_SAVE);
|
||||
}, []);
|
||||
|
||||
useEffect(() => {
|
||||
findCollaboratorsServices({
|
||||
companyId: id,
|
||||
employeeId: cid,
|
||||
sessionUser: SessionInfo.userId,
|
||||
})
|
||||
.then((collaboratorServices) => {
|
||||
setServices(collaboratorServices?.services.filter((service) => service.active) || []);
|
||||
})
|
||||
.catch((error) => alert.showError(error.format()));
|
||||
}, [id, cid, SessionInfo.userId]);
|
||||
|
||||
useEffect(() => {
|
||||
location.clear();
|
||||
|
||||
@@ -109,6 +122,8 @@ export default function OverridesCreate() {
|
||||
from: schedule.from.format("HH:mm"),
|
||||
to: schedule.to.format("HH:mm"),
|
||||
disabled: schedule.data.disabled || false,
|
||||
serviceScope: schedule.data.serviceScope || "all",
|
||||
serviceIds: schedule.data.serviceScope === "specific" ? schedule.data.serviceIds || [] : [],
|
||||
};
|
||||
});
|
||||
};
|
||||
@@ -121,6 +136,8 @@ export default function OverridesCreate() {
|
||||
from: from.format("HH:mm"),
|
||||
to: to.format("HH:mm"),
|
||||
disabled: false,
|
||||
serviceScope: "all",
|
||||
serviceIds: [],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -174,6 +191,30 @@ export default function OverridesCreate() {
|
||||
eventHandler.setEventType(EVENT_TYPES.NEED_SAVE);
|
||||
};
|
||||
|
||||
const serviceScopeChangeHandler = (
|
||||
from: string,
|
||||
serviceScope: "all" | "specific",
|
||||
serviceIds: string[]
|
||||
) => {
|
||||
setSchedules(
|
||||
schedules.map((schedule) => {
|
||||
if (schedule.data.from == from) {
|
||||
return {
|
||||
...schedule,
|
||||
data: {
|
||||
...schedule.data,
|
||||
serviceScope,
|
||||
serviceIds,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return schedule;
|
||||
})
|
||||
);
|
||||
eventHandler.setEventType(EVENT_TYPES.NEED_SAVE);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Location />
|
||||
@@ -225,7 +266,11 @@ export default function OverridesCreate() {
|
||||
from={schedule.data.from}
|
||||
to={schedule.data.to}
|
||||
disabled={schedule.data.disabled}
|
||||
serviceScope={schedule.data.serviceScope}
|
||||
serviceIds={schedule.data.serviceIds}
|
||||
serviceOptions={services}
|
||||
onCheckChange={checkChangeHandler}
|
||||
onServiceScopeChange={serviceScopeChangeHandler}
|
||||
onDelete={deleteScheduleHandler}
|
||||
/>
|
||||
))}
|
||||
|
||||
+47
-1
@@ -10,8 +10,9 @@ import { useAlert } from "@store/Alert.Store";
|
||||
import { useConfirmStore } from "@store/Confirm.Store";
|
||||
import { useEffect, useState } from "react";
|
||||
import MaterialAlert from "@mui/material/Alert";
|
||||
import { CollaboratorSchedulesView, ScheduleItem } from "@core/Models/Collaborators.model";
|
||||
import { CollaboratorSchedulesView, CollaboratorServiceItems, ScheduleItem } from "@core/Models/Collaborators.model";
|
||||
import {
|
||||
findCollaboratorsServices,
|
||||
findCollaboratorsSchedules,
|
||||
updateCollaboratorsSchedules,
|
||||
} from "../../Collaborators.Service";
|
||||
@@ -51,6 +52,7 @@ export default function CollaboratorSchedules() {
|
||||
const [from, setFrom] = useState<dayjs.Dayjs>(dayjs(new Date()).hour(8).minute(0));
|
||||
const [to, setTo] = useState<dayjs.Dayjs>(dayjs(new Date()).hour(12).minute(0));
|
||||
const [schedules, setSchedules] = useState<Array<SchedulesDateItem>>([]);
|
||||
const [services, setServices] = useState<CollaboratorServiceItems[]>([]);
|
||||
|
||||
useEffect(() => {
|
||||
eventHandler.setEventType(EVENT_TYPES.SLEEP);
|
||||
@@ -86,6 +88,18 @@ export default function CollaboratorSchedules() {
|
||||
loadCollaboratorSchedules();
|
||||
}, [weekDay]);
|
||||
|
||||
useEffect(() => {
|
||||
findCollaboratorsServices({
|
||||
companyId: id,
|
||||
employeeId: cid,
|
||||
sessionUser: SessionInfo.userId,
|
||||
})
|
||||
.then((collaboratorServices) => {
|
||||
setServices(collaboratorServices?.services.filter((service) => service.active) || []);
|
||||
})
|
||||
.catch((error) => alert.showError(error.format()));
|
||||
}, [id, cid, SessionInfo.userId]);
|
||||
|
||||
useEffect(() => {
|
||||
if (eventHandler.eventType === EVENT_TYPES.SAVE) {
|
||||
updateCollaboratorsSchedules({
|
||||
@@ -158,6 +172,8 @@ export default function CollaboratorSchedules() {
|
||||
from: schedule.from.format("HH:mm"),
|
||||
to: schedule.to.format("HH:mm"),
|
||||
disabled: schedule.data.disabled || false,
|
||||
serviceScope: schedule.data.serviceScope || "all",
|
||||
serviceIds: schedule.data.serviceScope === "specific" ? schedule.data.serviceIds || [] : [],
|
||||
};
|
||||
});
|
||||
};
|
||||
@@ -170,6 +186,8 @@ export default function CollaboratorSchedules() {
|
||||
from: from.format("HH:mm"),
|
||||
to: to.format("HH:mm"),
|
||||
disabled: false,
|
||||
serviceScope: "all",
|
||||
serviceIds: [],
|
||||
},
|
||||
};
|
||||
|
||||
@@ -248,6 +266,30 @@ export default function CollaboratorSchedules() {
|
||||
|
||||
};
|
||||
|
||||
const serviceScopeChangeHandler = (
|
||||
from: string,
|
||||
serviceScope: "all" | "specific",
|
||||
serviceIds: string[]
|
||||
) => {
|
||||
setSchedules(
|
||||
schedules.map((schedule) => {
|
||||
if (schedule.data.from == from) {
|
||||
return {
|
||||
...schedule,
|
||||
data: {
|
||||
...schedule.data,
|
||||
serviceScope,
|
||||
serviceIds,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
return schedule;
|
||||
})
|
||||
);
|
||||
eventHandler.setEventType(EVENT_TYPES.NEED_SAVE);
|
||||
};
|
||||
|
||||
|
||||
|
||||
return (
|
||||
@@ -291,7 +333,11 @@ export default function CollaboratorSchedules() {
|
||||
from={schedule.data.from}
|
||||
to={schedule.data.to}
|
||||
disabled={schedule.data.disabled}
|
||||
serviceScope={schedule.data.serviceScope}
|
||||
serviceIds={schedule.data.serviceIds}
|
||||
serviceOptions={services}
|
||||
onCheckChange={checkChangeHandler}
|
||||
onServiceScopeChange={serviceScopeChangeHandler}
|
||||
onDelete={deleteScheduleHandler}
|
||||
/>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user