Files
Sitzplatzbuchungstool/pages/Sitzplätze/jsobjects/BookingSelect/BookingSelect.js
T
2026-08-18 13:35:19 +00:00

166 lines
3.6 KiB
JavaScript

export default {
async openBookingWidget() {
const calendarModel = Custom5.model || {};
const selection = calendarModel.calendarSelection || null;
if (!selection) {
showAlert(
"Bitte zuerst einen Tag oder Zeitraum auswählen.",
"warning"
);
return;
}
function pad(value) {
return String(value).padStart(2, "0");
}
function parseLocalDateTime(value) {
if (!value) return null;
const text = String(value).trim();
const parts = text.split(/[-T:]/g);
if (parts.length < 3) return null;
const date = new Date(
Number(parts[0]),
Number(parts[1]) - 1,
Number(parts[2]),
Number(parts[3] || 0),
Number(parts[4] || 0),
Number(parts[5] || 0)
);
return Number.isNaN(date.getTime()) ? null : date;
}
function formatDate(date) {
return [
date.getFullYear(),
pad(date.getMonth() + 1),
pad(date.getDate())
].join("-");
}
function formatTime(date) {
return [
pad(date.getHours()),
pad(date.getMinutes())
].join(":");
}
function formatDateTimeForSql(date) {
return `${formatDate(date)} ${formatTime(date)}:00`;
}
const start = parseLocalDateTime(selection.start);
const end = parseLocalDateTime(selection.end);
if (!start || !end) {
showAlert(
"Die Kalenderauswahl enthält kein gültiges Datum.",
"error"
);
return;
}
const seatId = String(
Custom4.model?.seatId ||
appsmith.store.selectedSeatId ||
""
).trim();
const seatName = String(
Custom4.model?.seatName ||
appsmith.store.selectedSeatName ||
""
).trim();
if (!seatId) {
showAlert(
"Es wurde kein Sitzplatz ausgewählt.",
"error"
);
return;
}
const bookedBy =
appsmith.user?.email ||
appsmith.user?.username ||
null;
if (!bookedBy) {
showAlert(
"Der angemeldete Benutzer konnte nicht ermittelt werden.",
"error"
);
return;
}
const isAllDay =
selection.allDay === true ||
selection.type === "day" ||
selection.type === "days";
let endDate;
let startTime = null;
let endTime = null;
let endDateTime = end;
if (isAllDay) {
const lastSelectedDay = new Date(end);
lastSelectedDay.setDate(lastSelectedDay.getDate() - 1);
endDate = formatDate(lastSelectedDay);
endDateTime = new Date(lastSelectedDay);
endDateTime.setHours(23, 59, 59, 0);
} else {
endDate = formatDate(end);
startTime = formatTime(start);
endTime = formatTime(end);
}
const recurringCheckbox =
typeof RecurringCheckbox !== "undefined"
? RecurringCheckbox
: null;
const bookingFormData = {
seatId,
seatName,
bookedBy,
title: "Platzbuchung",
type: selection.type || null,
startDate: formatDate(start),
endDate,
startTime,
endTime,
startDateTime: formatDateTimeForSql(start),
endDateTime: formatDateTimeForSql(endDateTime),
allDay: Boolean(isAllDay),
recurring: Boolean(
recurringCheckbox?.isChecked || false
)
};
try {
await storeValue(
"bookingFormData",
bookingFormData,
false
);
await showModal("Platzbuchung");
} catch (error) {
console.error(
"Buchungsdaten konnten nicht gespeichert werden:",
error
);
showAlert(
"Die Buchungsdaten konnten nicht gespeichert werden.",
"error"
);
}
}
};