diff --git a/src/components/displays/buttons/ActionSettingsWheelButton.vue b/src/components/displays/buttons/ActionSettingsWheelButton.vue
index 0cfca432..f2f4ae24 100644
--- a/src/components/displays/buttons/ActionSettingsWheelButton.vue
+++ b/src/components/displays/buttons/ActionSettingsWheelButton.vue
@@ -97,6 +97,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
+ allowBookingDeletion: {
+ type: Boolean,
+ default: false,
+ },
department_lane_id: {
type: Number,
default: null,
@@ -1752,6 +1756,11 @@ const acceptSelfServeWashDraft = async () => {
}
};
+const canDeleteOrderBooking = computed(() =>
+ !props.order_id &&
+ (props.allowBookingDeletion || SessionUser.canAccessAdmin() || SessionUser.canAccessSuperUser())
+);
+
const flatBuiltInMenuSections = computed(() => {
const sections = [];
@@ -1806,7 +1815,7 @@ const flatBuiltInMenuSections = computed(() => {
),
})
: null,
- !props.order_id
+ canDeleteOrderBooking.value
? buildMenuAction("booking-delete", {
icon: "fas fa-trash-alt",
label: t("admin.pos.settings_wheel.delete_booking"),
diff --git a/src/views/dashboards/userDashboard/bookings/displays/tables/OrderBookingsTable.vue b/src/views/dashboards/userDashboard/bookings/displays/tables/OrderBookingsTable.vue
index 7417f2ae..fd47e32b 100644
--- a/src/views/dashboards/userDashboard/bookings/displays/tables/OrderBookingsTable.vue
+++ b/src/views/dashboards/userDashboard/bookings/displays/tables/OrderBookingsTable.vue
@@ -143,11 +143,32 @@ const onItemsClick = (event, booking) => {
showPopper(popperBox(t("bookings_table.services"), content), event.currentTarget || event.target);
};
+const normalizePositiveInteger = (value) => {
+ const parsedValue = Number.parseInt(String(value ?? ""), 10);
+ return Number.isInteger(parsedValue) && parsedValue > 0 ? parsedValue : null;
+};
+
+const getCurrentCustomerNumber = () =>
+ normalizePositiveInteger(
+ SessionUser.isSubuser.value
+ ? SessionUser.subuser.selectedGrantCustomerNumber.value
+ : SessionUser.getCustomerNumber()
+ );
+
+const isOwnBooking = (bookingobj) =>
+ normalizePositiveInteger(bookingobj?.customer_number) === getCurrentCustomerNumber();
+
const canEditBooking = (bookingobj) => {
// Admins can always edit
if (SessionUser.canAccessAdmin() && SessionUser.hasPermission("edit_bookings")) return true;
if (!!bookingobj.order_id) return false; // Only allow editing bookings without an order
- if (SessionUser.hasPermission("edit_own_bookings")) return true;
+ if (SessionUser.hasPermission("edit_own_bookings") && isOwnBooking(bookingobj)) return true;
+};
+
+const canDeleteBooking = (bookingobj) => {
+ if (!!bookingobj.order_id) return false;
+ if (SessionUser.canAccessAdmin() || SessionUser.canAccessSuperUser()) return true;
+ return SessionUser.hasPermission("edit_own_bookings") && isOwnBooking(bookingobj);
};
const sortedList = computed(() => {
@@ -467,6 +488,7 @@ const getColspan = () => {
:customer_number="booking.customer_number"
:department_id="booking.department"
:refresh-function="loadList"
+ :allow-booking-deletion="canDeleteBooking(booking)"
:reg_1="booking.reg_1"
:reg_2="booking.reg_2"
:icon="'fas fa-ellipsis-v'"
@@ -532,6 +554,7 @@ const getColspan = () => {
{{ getDepartmentName(parseInt(booking.department)) }}