fix repeating availability dayofmonh problem

This commit is contained in:
Dobromir Popov
2024-04-05 14:49:15 +03:00
parent b698e4311e
commit 95ac760447
7 changed files with 140 additions and 52 deletions

View File

@ -90,9 +90,9 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
let avs = availabilities.filter(av => av.type !== "assignment");
// Determine if we need to delete and recreate, or just update
let shouldRecreate = avs.length > 0 && avs.length !== groupedTimeSlots.length || avs.some(av => !av.id);
shouldRecreate = shouldRecreate || ( avs.length == 0 && availabilities.length > 0);
shouldRecreate = shouldRecreate || (avs.length == 0 && availabilities.length > 0);
//create availability if we open a form with assignment without availability
if (shouldRecreate) {
// Delete existing availabilities if they have an ID
console.log("Recreating availabilities");
@ -173,52 +173,106 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
return groupedIntervals;
}
// const firstSlotWithTransport = timeSlots[0].checked && timeSlots[0]?.isWithTransport;
// const lastSlotWithTransport = timeSlots[timeSlots.length - 1].checked && timeSlots[timeSlots.length - 1]?.isWithTransport;
function createAvailabilityFromGroup(group) {
let startTime = new Date(day);
// // const firstSlotWithTransport = timeSlots[0].checked && timeSlots[0]?.isWithTransport;
// // const lastSlotWithTransport = timeSlots[timeSlots.length - 1].checked && timeSlots[timeSlots.length - 1]?.isWithTransport;
// function createAvailabilityFromGroup(group) {
// let startTime = new Date(day);
// startTime.setHours(group[0].startTime.getHours(), group[0].startTime.getMinutes(), group[0].startTime.getSeconds(), 0);
// let endTime = new Date(day);
// endTime.setHours(group[group.length - 1].endTime.getHours(), group[group.length - 1].endTime.getMinutes(), group[group.length - 1].endTime.getSeconds(), 0);
// return {
// name: common.getTimeFomatted(startTime) + "-" + common.getTimeFomatted(endTime),
// publisherId: publisher.id,
// startTime: startTime,
// endTime: endTime,
// isWithTransportIn: group[0].isFirst && timeSlots[0].isWithTransport,
// isWithTransportOut: group[group.length - 1].isLast && timeSlots[timeSlots.length - 1].isWithTransport,
// dayofweek: common.getDayOfWeekNameEnEnumForDate(day.getDay()),
// repeatWeekly: doRepeat,
// dayOfMonth: doRepeat ? null : startTime.getDate(),
// endDate: doRepeat ? repeatUntil : null,
// dateOfEntry: new Date(),
// };
// }
// function updateAvailabilityFromGroup(availability, group) {
// availability.startTime.setTime(group[0].startTime);
// availability.endTime.setTime(group[group.length - 1].endTime);
// availability.name = common.getTimeFomatted(availability.startTime) + "-" + common.getTimeFomatted(availability.endTime);
// availability.isWithTransportIn = group[0].isFirst && timeSlots[0].isWithTransport;
// availability.isWithTransportOut = group[group.length - 1].isLast && timeSlots[timeSlots.length - 1].isWithTransport;
// delete availability.weekOfMonth;
// if (doRepeat) {
// availability.repeatWeekly = true;
// availability.dayOfMonth = null;
// availability.weekOfMonth = 0;
// availability.endDate = repeatUntil;
// } else {
// availability.repeatWeekly = false;
// availability.dayOfMonth = availability.startTime.getDate();
// availability.endDate = null;
// }
// availability.dateOfEntry = new Date();
// if (availability.parentAvailabilityId) {
// availability.parentAvailability = { connect: { id: parentAvailabilityId } };
// }
// delete availability.parentAvailabilityId;
// return availability;
// }
// Common function to set shared properties
function setSharedAvailabilityProperties(availability, group, timeSlots) {
let startTime = new Date(availability.startTime || day);
startTime.setHours(group[0].startTime.getHours(), group[0].startTime.getMinutes(), group[0].startTime.getSeconds(), 0);
let endTime = new Date(day);
let endTime = new Date(availability.endTime || day);
endTime.setHours(group[group.length - 1].endTime.getHours(), group[group.length - 1].endTime.getMinutes(), group[group.length - 1].endTime.getSeconds(), 0);
return {
name: common.getTimeFomatted(startTime) + "-" + common.getTimeFomatted(endTime),
publisherId: publisher.id,
startTime: startTime,
endTime: endTime,
isWithTransportIn: group[0].isFirst && timeSlots[0].isWithTransport,
isWithTransportOut: group[group.length - 1].isLast && timeSlots[timeSlots.length - 1].isWithTransport,
dayofweek: common.getDayOfWeekNameEnEnum(day.getDay()),
repeatWeekly: doRepeat,
dayOfMonth: doRepeat ? null : startTime.getDate(),
endDate: doRepeat ? repeatUntil : null,
dateOfEntry: new Date(),
};
}
function updateAvailabilityFromGroup(availability, group) {
availability.startTime.setTime(group[0].startTime);
availability.endTime.setTime(group[group.length - 1].endTime);
availability.name = common.getTimeFomatted(availability.startTime) + "-" + common.getTimeFomatted(availability.endTime);
availability.startTime = startTime;
availability.endTime = endTime;
availability.name = common.getTimeFomatted(startTime) + "-" + common.getTimeFomatted(endTime);
availability.isWithTransportIn = group[0].isFirst && timeSlots[0].isWithTransport;
availability.isWithTransportOut = group[group.length - 1].isLast && timeSlots[timeSlots.length - 1].isWithTransport;
delete availability.weekOfMonth;
// Adjustments for repeating settings
if (doRepeat) {
availability.repeatWeekly = true;
availability.dayOfMonth = null;
availability.weekOfMonth = 0;
availability.endDate = repeatUntil;
} else {
availability.repeatWeekly = false;
availability.dayOfMonth = availability.startTime.getDate();
availability.dayOfMonth = startTime.getDate();
availability.endDate = null;
}
availability.dateOfEntry = new Date();
}
function createAvailabilityFromGroup(group) {
let availability = {
publisherId: publisher.id,
dayofweek: common.getDayOfWeekNameEnEnumForDate(day),
};
setSharedAvailabilityProperties(availability, group, timeSlots);
return availability;
}
function updateAvailabilityFromGroup(availability, group) {
setSharedAvailabilityProperties(availability, group, timeSlots);
delete availability.weekOfMonth;
if (doRepeat) {
availability.weekOfMonth = 0;
}
if (availability.parentAvailabilityId) {
availability.parentAvailability = { connect: { id: parentAvailabilityId } };
}
@ -227,6 +281,8 @@ export default function AvailabilityForm({ publisherId, existingItems, inline, o
return availability;
}
const handleDelete = async (e) => {
e.preventDefault();
try {

View File

@ -170,7 +170,7 @@ export default function AvailabilityForm({ publisherId, existingItem, inline, on
availability.name = common.getTimeFomatted(availability.startTime) + "-" + common.getTimeFomatted(availability.endTime);
}
availability.dayofweek = common.getDayOfWeekNameEnEnum(availability.startTime);
availability.dayofweek = common.getDayOfWeekNameEnEnumForDate(availability.startTime);
if (availability.repeatWeekly) {
availability.dayOfMonth = null;
availability.weekOfMonth = 0; //weekly recurrance - no need for week of month. special value 0