Merge branch 'hotfix/5022-Bezahlte-undunbezahlte-Ware-auf-der-seben-AHF-nummer'

This commit is contained in:
Lorenz Hilpert
2025-04-09 12:34:59 +02:00

View File

@@ -10,13 +10,17 @@ export const selectOrderItemsRaw = (s: PickupShelfDetailsState) => s.orderItems;
export const selectFetchingOrderItems = (s: PickupShelfDetailsState) => s.fetchingOrderItems;
export const selectDisplayedOrderItemProcessingStatus = (s: PickupShelfDetailsState) => s.displayedOrderItemProcessingStatus;
export const selectDisplayedOrderItemProcessingStatus = (s: PickupShelfDetailsState) =>
s.displayedOrderItemProcessingStatus;
export const selectDisplayedCompartmentCode = (s: PickupShelfDetailsState) => s.displayedCompartmentCode;
export const selectDisplayedCompartmentCode = (s: PickupShelfDetailsState) =>
s.displayedCompartmentCode;
export const selectDisplayedCompartmentInfo = (s: PickupShelfDetailsState) => s.displayedCompartmentInfo;
export const selectDisplayedCompartmentInfo = (s: PickupShelfDetailsState) =>
s.displayedCompartmentInfo;
export const selectDisplayedOrderItemSubsetId = (s: PickupShelfDetailsState) => s.displayedOrderItemSubsetId;
export const selectDisplayedOrderItemSubsetId = (s: PickupShelfDetailsState) =>
s.displayedOrderItemSubsetId;
export const selectOrderItems = (s: PickupShelfDetailsState): DBHOrderItemListItemDTO[] => {
let items = selectOrderItemsRaw(s);
@@ -86,13 +90,17 @@ export const selectFetchPartial = (s: PickupShelfDetailsState) => !!s.fetchParti
export const selectFetchReceipts = (s: PickupShelfDetailsState) => !!s.fetchingReceipts;
export const selectSelectedOrderItemIds = (s: PickupShelfDetailsState) => s.selectedOrderItemIds ?? [];
export const selectSelectedOrderItemIds = (s: PickupShelfDetailsState) =>
s.selectedOrderItemIds ?? [];
export const selectPreviousSelectedOrderItemSubsetId = (s: PickupShelfDetailsState) => s.previousSelectedOrderItemSubsetId;
export const selectPreviousSelectedOrderItemSubsetId = (s: PickupShelfDetailsState) =>
s.previousSelectedOrderItemSubsetId;
export const selectOrderItemSubsetLoading = (s: PickupShelfDetailsState) => s.orderItemSubsetLoading;
export const selectOrderItemSubsetLoading = (s: PickupShelfDetailsState) =>
s.orderItemSubsetLoading;
export const selectDisableHeaderStatusDropdown = (s: PickupShelfDetailsState) => s.disableHeaderStatusDropdown;
export const selectDisableHeaderStatusDropdown = (s: PickupShelfDetailsState) =>
s.disableHeaderStatusDropdown;
export const selectedOrderItems = (s: PickupShelfDetailsState) => {
const selectedOrderItemIds = selectSelectedOrderItemIds(s);
@@ -119,10 +127,28 @@ export const selectSelectedOrderItemQuantity = (s: PickupShelfDetailsState) => {
return numMap;
};
export const selectSelectedCompartmentInfo = (s: PickupShelfDetailsState) => s.selectedCompartmentInfo;
export const selectSelectedCompartmentInfo = (s: PickupShelfDetailsState) =>
s.selectedCompartmentInfo;
export const selectLatestCompartmentCodeAndInfoForOrder = (s: PickupShelfDetailsState) => {
const coverItems = selectCoverOrderItems(s);
let coverItems = selectCoverOrderItems(s);
const orderItems = selectedOrderItems(s);
/**
* Ticket #5022 - AHF // Bezahlte und unbezahlte Ware werden auf dieselbe AHF-Nummer gebucht (Abholfach)
* Fall 1: Wenn alle ausgewählte Order Items Bezahlt sind, darf man diese nur auf die AHF-Nummer buchen, die auch Bezahlt ist.
* Fall 2: Wenn keines der ausgewählte Order Items Bezahlt sind, darf man nur auf die AHF-Nummer buchen, die auch nicht Bezahlt ist.
*/
const hasFeaturePaid = orderItems?.every((item) => item.features?.paid === 'Bezahlt');
const hasSourceKulturPass = orderItems?.every(
(item) => item.features?.orderSource === 'KulturPass',
);
if (hasFeaturePaid || hasSourceKulturPass) {
coverItems = coverItems?.filter(
(item) => item.features?.paid === 'Bezahlt' || item.features?.orderSource === 'KulturPass',
);
}
// Ticket #4397 - Sortieren und Filtern der angezeigten CoverItems nach latestCompartmentCode und Info
const coverItem = coverItems
@@ -146,14 +172,19 @@ export const selectLatestCompartmentCodeAndInfoForOrder = (s: PickupShelfDetails
?.sort((a, b) => new Date(b.readyForPickUp).getTime() - new Date(a.readyForPickUp).getTime())
?.find((_) => true);
return { latestCompartmentCode: coverItem?.compartmentCode, latestCompartmentInfo: coverItem?.compartmentInfo };
return {
latestCompartmentCode: coverItem?.compartmentCode,
latestCompartmentInfo: coverItem?.compartmentInfo,
};
};
export const selectFetchingOrderItemSubsetTasks = (orderItemSubsetId: number) => (s: PickupShelfDetailsState) =>
s.fetchingOrderItemSubsetTasks?.[orderItemSubsetId] ?? false;
export const selectFetchingOrderItemSubsetTasks =
(orderItemSubsetId: number) => (s: PickupShelfDetailsState) =>
s.fetchingOrderItemSubsetTasks?.[orderItemSubsetId] ?? false;
export const selectOrderItemSubsetTasks = (orderItemSubsetId: number) => (s: PickupShelfDetailsState) =>
s.orderItemSubsetTasks?.[orderItemSubsetId] ?? [];
export const selectOrderItemSubsetTasks =
(orderItemSubsetId: number) => (s: PickupShelfDetailsState) =>
s.orderItemSubsetTasks?.[orderItemSubsetId] ?? [];
export const selectNotifications = (orderItemSubsetId: number) => (s: PickupShelfDetailsState) => {
const tasks = selectOrderItemSubsetTasks(orderItemSubsetId)(s);
@@ -169,34 +200,41 @@ export const selectNotifications = (orderItemSubsetId: number) => (s: PickupShel
);
};
export const selectLatestNotificationDatesFor = (orderItemSubsetId: number, keys: string[]) => (s: PickupShelfDetailsState) => {
const notifications = selectNotifications(orderItemSubsetId)(s);
let dates: Array<{ type: string; dates: Date[] }> = [];
export const selectLatestNotificationDatesFor =
(orderItemSubsetId: number, keys: string[]) => (s: PickupShelfDetailsState) => {
const notifications = selectNotifications(orderItemSubsetId)(s);
let dates: Array<{ type: string; dates: Date[] }> = [];
for (const key of keys) {
const notification = notifications?.[key] ?? [];
for (const key of keys) {
const notification = notifications?.[key] ?? [];
const validDates = notification.filter((date) => {
// check if curr is an invalid date
return !isNaN(date.getTime());
});
const validDates = notification.filter((date) => {
// check if curr is an invalid date
return !isNaN(date.getTime());
});
const mappedDates = { type: key, dates: validDates };
const mappedDates = { type: key, dates: validDates };
if (mappedDates.dates?.length > 0) {
dates.push(mappedDates);
if (mappedDates.dates?.length > 0) {
dates.push(mappedDates);
}
}
}
return dates;
};
return dates;
};
export const selectLatestEmailNotificationDates = (orderItemSubsetId: number) => (s: PickupShelfDetailsState) => {
return selectLatestNotificationDatesFor(orderItemSubsetId, ['NOTIFICATION_EMAIL', 'REMINDER_EMAIL', 'ORDERCONFIRMATION_EMAIL'])(s);
};
export const selectLatestEmailNotificationDates =
(orderItemSubsetId: number) => (s: PickupShelfDetailsState) => {
return selectLatestNotificationDatesFor(orderItemSubsetId, [
'NOTIFICATION_EMAIL',
'REMINDER_EMAIL',
'ORDERCONFIRMATION_EMAIL',
])(s);
};
export const selectLatestSmsNotificationDate2 = (orderItemSubsetId: number) => (s: PickupShelfDetailsState) => {
return selectLatestNotificationDatesFor(orderItemSubsetId, ['NOTIFICATION_SMS'])(s);
};
export const selectLatestSmsNotificationDate2 =
(orderItemSubsetId: number) => (s: PickupShelfDetailsState) => {
return selectLatestNotificationDatesFor(orderItemSubsetId, ['NOTIFICATION_SMS'])(s);
};
export const selectCanSelectAction = (s: PickupShelfDetailsState) => {
const items = selectOrderItems(s);
@@ -228,7 +266,10 @@ export const selectAddToPreviousCompartmentAction = (s: PickupShelfDetailsState)
const latestCompartmentInfos = selectLatestCompartmentCodeAndInfoForOrder(s);
const firstItem = items?.find((_) => true);
if ([16, 8192].includes(firstItem?.processingStatus) && latestCompartmentInfos?.latestCompartmentCode) {
if (
[16, 8192].includes(firstItem?.processingStatus) &&
latestCompartmentInfos?.latestCompartmentCode
) {
// Zubuchen von Bezahlte und unbezahlte Bestellungen nicht möglich
// Zubuchen bei Pay&Collect nur innerhalb der gleichen Bestellung möglich
@@ -273,7 +314,8 @@ export const selectCustomerNumber = (s: PickupShelfDetailsState) => {
return order?.buyer?.buyerNumber;
};
export const selectFetchingCoverOrderItems = (s: PickupShelfDetailsState) => s.fetchingCoverOrderItems ?? false;
export const selectFetchingCoverOrderItems = (s: PickupShelfDetailsState) =>
s.fetchingCoverOrderItems ?? false;
export const selectCoverOrderItems = (s: PickupShelfDetailsState) => {
const coverItems = s.coverOrderItems ?? [];