chore(swagger-oms, swagger-checkout): Update Swagger and resolved breaking changes

This commit is contained in:
Nino
2025-09-17 12:09:51 +02:00
parent 2fc83cd8f7
commit 9c8c42da69
212 changed files with 1708 additions and 1239 deletions

View File

@@ -12,7 +12,13 @@ import {
ShoppingCartItemDTO,
} from '@generated/swagger/checkout-api';
import { DomainCheckoutService } from '@domain/checkout';
import { catchError, mergeMap, switchMap, tap, withLatestFrom } from 'rxjs/operators';
import {
catchError,
mergeMap,
switchMap,
tap,
withLatestFrom,
} from 'rxjs/operators';
import {
BranchService,
DisplayOrderDTO,
@@ -40,7 +46,10 @@ export interface KulturpassOrderModalState {
}
@Injectable()
export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderModalState> implements OnStoreInit {
export class KulturpassOrderModalStore
extends ComponentStore<KulturpassOrderModalState>
implements OnStoreInit
{
private _checkoutService = inject(DomainCheckoutService);
private _branchService = inject(BranchService);
private _authService = inject(AuthService);
@@ -87,23 +96,33 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
readonly order$ = this.select((state) => state.order);
readonly updateCheckout = this.updater((state, checkout: CheckoutDTO) => ({ ...state, checkout }));
readonly updateCheckout = this.updater((state, checkout: CheckoutDTO) => ({
...state,
checkout,
}));
readonly updateOrder = this.updater((state, order: OrderDTO) => ({ ...state, order }));
readonly updateOrder = this.updater((state, order: OrderDTO) => ({
...state,
order,
}));
readonly fetchShoppingCart$ = this.select((state) => state.fetchShoppingCart);
readonly updateFetchShoppingCart = this.updater((state, fetchShoppingCart: boolean) => ({
...state,
fetchShoppingCart,
}));
readonly updateFetchShoppingCart = this.updater(
(state, fetchShoppingCart: boolean) => ({
...state,
fetchShoppingCart,
}),
);
readonly ordering$ = this.select((state) => state.ordering);
loadBranch = this.effect(($) =>
$.pipe(
switchMap(() =>
this._branchService.BranchGetBranches({}).pipe(tapResponse(this.handleBranchResponse, this.handleBranchError)),
this._branchService
.BranchGetBranches({})
.pipe(tapResponse(this.handleBranchResponse, this.handleBranchError)),
),
),
);
@@ -111,31 +130,45 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
handleBranchResponse = (res: ResponseArgsOfIEnumerableOfBranchDTO) => {
const branchNumber = this._authService.getClaimByKey('branch_no');
this.patchState({ branch: res.result.find((b) => b.branchNumber === branchNumber) });
this.patchState({
branch: res.result.find((b) => b.branchNumber === branchNumber),
});
};
handleBranchError = (err) => {
this._modal.error('Fehler beim Laden der Filiale', err);
};
createShoppingCart = this.effect((orderItemListItem$: Observable<OrderItemListItemDTO>) =>
orderItemListItem$.pipe(
tap((orderItemListItem) => {
this.patchState({ orderItemListItem });
this.updateFetchShoppingCart(true);
}),
switchMap((orderItemListItem) =>
this._checkoutService
.getShoppingCart({ processId: this.processId })
.pipe(tapResponse(this.handleCreateShoppingCartResponse, this.handleCreateShoppingCartError)),
createShoppingCart = this.effect(
(orderItemListItem$: Observable<OrderItemListItemDTO>) =>
orderItemListItem$.pipe(
tap((orderItemListItem) => {
this.patchState({ orderItemListItem });
this.updateFetchShoppingCart(true);
}),
switchMap((orderItemListItem) =>
this._checkoutService
.getShoppingCart({ processId: this.processId })
.pipe(
tapResponse(
this.handleCreateShoppingCartResponse,
this.handleCreateShoppingCartError,
),
),
),
),
),
);
handleCreateShoppingCartResponse = (res: ShoppingCartDTO) => {
this.patchState({ shoppingCart: res });
this._checkoutService.setBuyer({ processId: this.processId, buyer: this.order.buyer });
this._checkoutService.setPayer({ processId: this.processId, payer: this.order.billing?.data });
this._checkoutService.setBuyer({
processId: this.processId,
buyer: this.order.buyer,
});
this._checkoutService.setPayer({
processId: this.processId,
payer: this.order.billing?.data,
});
this.updateFetchShoppingCart(false);
};
@@ -154,7 +187,9 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
processId: this.processId,
items: [add],
})
.pipe(tapResponse(this.handleAddItemResponse, this.handleAddItemError)),
.pipe(
tapResponse(this.handleAddItemResponse, this.handleAddItemError),
),
),
),
);
@@ -174,7 +209,12 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
shoppingCartItemId: change.id,
update: { quantity: change.quantity },
})
.pipe(tapResponse(this.handleQuantityChangeResponse, this.handleQuantityChangeError)),
.pipe(
tapResponse(
this.handleQuantityChangeResponse,
this.handleQuantityChangeError,
),
),
),
),
);
@@ -206,7 +246,10 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
this.onOrderSuccess(res.result.item1[0], res.result.item2);
};
onOrderSuccess = (displayOrder: DisplayOrderDTO, action: KeyValueDTOOfStringAndString[]) => {};
onOrderSuccess = (
displayOrder: DisplayOrderDTO,
action: KeyValueDTOOfStringAndString[],
) => {};
handleOrderError = (err: any) => {
this._modal.error('Fehler beim Bestellen', err);
@@ -215,8 +258,9 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
itemQuantityByCatalogProductNumber(catalogProductNumber: string) {
return (
this.shoppingCart?.items?.find((i) => getCatalogProductNumber(i?.data) === catalogProductNumber)?.data
?.quantity ?? 0
this.shoppingCart?.items?.find(
(i) => getCatalogProductNumber(i?.data) === catalogProductNumber,
)?.data?.quantity ?? 0
);
}
@@ -227,7 +271,11 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
.canAddItemsKulturpass([item?.product])
.pipe(
tapResponse(
(results) => this.handleCanAddItemResponse({ item, result: results?.find((_) => true) }),
(results) =>
this.handleCanAddItemResponse({
item,
result: results?.find((_) => true),
}),
this.handleCanAddItemError,
),
),
@@ -235,14 +283,23 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
),
);
handleCanAddItemResponse = ({ item, result }: { item: ItemDTO; result: KulturPassResult }) => {
handleCanAddItemResponse = ({
item,
result,
}: {
item: ItemDTO;
result: KulturPassResult;
}) => {
if (result?.canAdd) {
this.addItemToShoppingCart(item);
} else {
this._modal.open({
content: UiMessageModalComponent,
title: 'Artikel nicht förderfähig',
data: { message: result?.message, closeAction: 'ohne Artikel fortfahren' },
data: {
message: result?.message,
closeAction: 'ohne Artikel fortfahren',
},
});
}
};
@@ -254,14 +311,18 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
addItemToShoppingCart = this.effect((item$: Observable<ItemDTO>) =>
item$.pipe(
mergeMap((item) => {
const takeAwayAvailability$ = this._availabilityService.getTakeAwayAvailability({
item: {
ean: item.product.ean,
itemId: item.id,
price: item.catalogAvailability.price,
},
quantity: this.itemQuantityByCatalogProductNumber(getCatalogProductNumber(item)) + 1,
});
const takeAwayAvailability$ =
this._availabilityService.getTakeAwayAvailability({
item: {
ean: item.product.ean,
itemId: item.id,
price: item.catalogAvailability.price,
},
quantity:
this.itemQuantityByCatalogProductNumber(
getCatalogProductNumber(item),
) + 1,
});
const deliveryAvailability$ = this._availabilityService
.getDeliveryAvailability({
@@ -270,7 +331,10 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
itemId: item.id,
price: item.catalogAvailability.price,
},
quantity: this.itemQuantityByCatalogProductNumber(getCatalogProductNumber(item)) + 1,
quantity:
this.itemQuantityByCatalogProductNumber(
getCatalogProductNumber(item),
) + 1,
})
.pipe(
catchError((err) => {
@@ -279,7 +343,10 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
);
return zip(takeAwayAvailability$, deliveryAvailability$).pipe(
tapResponse(this.handleAddItemToShoppingCartResponse2(item), this.handleAddItemToShoppingCartError),
tapResponse(
this.handleAddItemToShoppingCartResponse2(item),
this.handleAddItemToShoppingCartError,
),
);
}),
),
@@ -287,20 +354,27 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
handleAddItemToShoppingCartResponse2 =
(item: ItemDTO) =>
([takeAwayAvailability, deliveryAvailability]: [AvailabilityDTO, AvailabilityDTO]) => {
([takeAwayAvailability, deliveryAvailability]: [
AvailabilityDTO,
AvailabilityDTO,
]) => {
let isPriceMaintained = item?.catalogAvailability?.priceMaintained;
let onlinePrice = -1;
if (deliveryAvailability) {
isPriceMaintained = isPriceMaintained ?? deliveryAvailability['priceMaintained'] ?? false;
isPriceMaintained =
isPriceMaintained ?? deliveryAvailability['priceMaintained'] ?? false;
onlinePrice = deliveryAvailability?.price?.value?.value ?? -1;
}
// Preis und priceMaintained werden immer erst vom Katalog genommen. Bei nicht Verfügbarkeit greifen die anderen Availabilities
const offlinePrice =
item?.catalogAvailability?.price?.value?.value ?? takeAwayAvailability?.price?.value?.value ?? -1;
item?.catalogAvailability?.price?.value?.value ??
takeAwayAvailability?.price?.value?.value ??
-1;
const availability = takeAwayAvailability;
availability.price = item?.catalogAvailability?.price ?? takeAwayAvailability?.price;
availability.price =
item?.catalogAvailability?.price ?? takeAwayAvailability?.price;
/**
* Onlinepreis ist niedliger als der Offlinepreis
@@ -314,7 +388,11 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
* wenn der Artikel Preisgebunden ist, wird der Ladenpreis verwendet
*/
if (!!deliveryAvailability && onlinePrice < offlinePrice && !isPriceMaintained) {
if (
!!deliveryAvailability &&
onlinePrice < offlinePrice &&
!isPriceMaintained
) {
availability.price = deliveryAvailability.price;
}
@@ -333,10 +411,13 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
},
},
promotion: {
points: 0,
value: 0,
},
itemType: item.type,
product: { catalogProductNumber: getCatalogProductNumber(item), ...item.product },
product: {
catalogProductNumber: getCatalogProductNumber(item),
...item.product,
},
};
this.addItem(addToShoppingCartDTO);
@@ -346,15 +427,28 @@ export class KulturpassOrderModalStore extends ComponentStore<KulturpassOrderMod
this._modal.error('Fehler beim Hinzufügen des Artikels', err);
};
setAvailability = this.updater((state, data: { catalogProductNumber: string; availability: AvailabilityDTO }) => {
return { ...state, availabilities: { ...state.availabilities, [data.catalogProductNumber]: data.availability } };
});
setAvailability = this.updater(
(
state,
data: { catalogProductNumber: string; availability: AvailabilityDTO },
) => {
return {
...state,
availabilities: {
...state.availabilities,
[data.catalogProductNumber]: data.availability,
},
};
},
);
getAvailability(catalogProductNumber: string): AvailabilityDTO | undefined {
return this.get((state) => state.availabilities[catalogProductNumber]);
}
getAvailability$(catalogProductNumber: string): Observable<AvailabilityDTO | undefined> {
getAvailability$(
catalogProductNumber: string,
): Observable<AvailabilityDTO | undefined> {
return this.select((state) => state.availabilities[catalogProductNumber]);
}
}

View File

@@ -26,7 +26,11 @@ import {
} from './purchase-options.helpers';
import { Observable } from 'rxjs';
import { first, switchMap } from 'rxjs/operators';
import { DEFAULT_PRICE_DTO, DEFAULT_PRICE_VALUE, DEFAULT_VAT_VALUE } from '../constants';
import {
DEFAULT_PRICE_DTO,
DEFAULT_PRICE_VALUE,
DEFAULT_VAT_VALUE,
} from '../constants';
import {
AddToShoppingCartDTO,
EntityDTOContainerOfDestinationDTO,
@@ -103,7 +107,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
return this.get(Selectors.getPurchaseOptionsInAvailabilities);
}
getPurchaseOptionsInAvailabilities$ = this.select(Selectors.getPurchaseOptionsInAvailabilities);
getPurchaseOptionsInAvailabilities$ = this.select(
Selectors.getPurchaseOptionsInAvailabilities,
);
get itemsForList() {
return this.get(Selectors.getItemsForList);
@@ -160,29 +166,48 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
});
}
addFetchingAvailability = this.updater((state, fetchState: FetchingAvailability) => {
return {
...state,
fetchingAvailabilities: [...state.fetchingAvailabilities, fetchState],
};
});
addFetchingAvailability = this.updater(
(state, fetchState: FetchingAvailability) => {
return {
...state,
fetchingAvailabilities: [...state.fetchingAvailabilities, fetchState],
};
},
);
removeFetchingAvailability = this.updater((state, fetchState: FetchingAvailability) => {
return {
...state,
fetchingAvailabilities: state.fetchingAvailabilities.filter((f) => f.id !== fetchState.id),
};
});
removeFetchingAvailability = this.updater(
(state, fetchState: FetchingAvailability) => {
return {
...state,
fetchingAvailabilities: state.fetchingAvailabilities.filter(
(f) => f.id !== fetchState.id,
),
};
},
);
async initialize({ items, processId, type, inStoreBranch, pickupBranch }: PurchaseOptionsModalData) {
const selectedBranch = await this._service.getSelectedBranchForProcess(processId).toPromise();
async initialize({
items,
processId,
type,
inStoreBranch,
pickupBranch,
}: PurchaseOptionsModalData) {
const selectedBranch = await this._service
.getSelectedBranchForProcess(processId)
.toPromise();
const defaultBranch = await this._service.fetchDefaultBranch().toPromise();
const customerFeatures = await this._service.getCustomerFeatures(processId).toPromise();
const customerFeatures = await this._service
.getCustomerFeatures(processId)
.toPromise();
this.patchState({
processId: processId,
type: type,
items: items.map((item) => ({ ...item, quantity: item['quantity'] ?? 1 })),
items: items.map((item) => ({
...item,
quantity: item['quantity'] ?? 1,
})),
defaultBranch: selectedBranch ?? defaultBranch,
pickupBranch: pickupBranch ?? selectedBranch,
inStoreBranch: inStoreBranch ?? selectedBranch,
@@ -255,7 +280,8 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const items = await this._catalogService
.searchByEans({ eans: this.items.map((item) => item.product.ean) })
.toPromise();
if (items.result.length > 0) await this._addCatalogueAvailabilities(items.result);
if (items.result.length > 0)
await this._addCatalogueAvailabilities(items.result);
} else {
await this._addCatalogueAvailabilities(items as ItemDTO[]);
}
@@ -264,7 +290,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
// #4813 - Function updated - "this.updater" didn't work, so "this.patchState" gets used instead
// Added firstDayOfSale for catalogAvailability via ShoppingCart Route
private async _addCatalogueAvailabilities(items: ItemDTO[]) {
const currentAvailabilities = await this.availabilities$.pipe(first()).toPromise();
const currentAvailabilities = await this.availabilities$
.pipe(first())
.toPromise();
const availabilities = [...currentAvailabilities];
items.forEach((item) => {
const catalogAvailability = item.catalogAvailability;
@@ -272,7 +300,10 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
purchaseOption: 'catalog',
itemId: item.id,
ean: item.product.ean, // Hier brauchen wir zusätzlich die EAN - siehe purchase-options-list-item.component.ts: "get isEVT()"
data: { price: catalogAvailability?.price, firstDayOfSale: catalogAvailability?.firstDayOfSale },
data: {
price: catalogAvailability?.price,
firstDayOfSale: catalogAvailability?.firstDayOfSale,
},
});
});
@@ -287,8 +318,14 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const id = uniqueId('availability_');
try {
this.addFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'pickup' });
const res = await this._service.fetchPickupAvailability(itemData, itemData.quantity, branch).toPromise();
this.addFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'pickup',
});
const res = await this._service
.fetchPickupAvailability(itemData, itemData.quantity, branch)
.toPromise();
const availability: Availability = {
itemId: itemData.sourceId,
@@ -301,7 +338,11 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
console.error('_loadPickupAvailability', err);
}
this.removeFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'pickup' });
this.removeFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'pickup',
});
}
private async _loadInStoreAvailability(itemData: ItemData) {
@@ -310,8 +351,14 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const id = uniqueId('availability_');
try {
this.addFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'in-store' });
const res = await this._service.fetchInStoreAvailability(itemData, itemData.quantity, branch).toPromise();
this.addFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'in-store',
});
const res = await this._service
.fetchInStoreAvailability(itemData, itemData.quantity, branch)
.toPromise();
const availability: Availability = {
itemId: itemData.sourceId,
@@ -324,14 +371,24 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
console.error('_loadInStoreAvailability', err);
}
this.removeFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'in-store' });
this.removeFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'in-store',
});
}
private async _loadDeliveryAvailability(itemData: ItemData) {
const id = uniqueId('availability_');
try {
this.addFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'delivery' });
const res = await this._service.fetchDeliveryAvailability(itemData, itemData.quantity).toPromise();
this.addFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'delivery',
});
const res = await this._service
.fetchDeliveryAvailability(itemData, itemData.quantity)
.toPromise();
const availability: Availability = {
itemId: itemData.sourceId,
purchaseOption: 'delivery',
@@ -343,14 +400,24 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
console.error('_loadDeliveryAvailability', error);
}
this.removeFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'delivery' });
this.removeFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'delivery',
});
}
private async _loadDigDeliveryAvailability(itemData: ItemData) {
const id = uniqueId('availability_');
try {
this.addFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'dig-delivery' });
const res = await this._service.fetchDigDeliveryAvailability(itemData, itemData.quantity).toPromise();
this.addFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'dig-delivery',
});
const res = await this._service
.fetchDigDeliveryAvailability(itemData, itemData.quantity)
.toPromise();
const availability: Availability = {
itemId: itemData.sourceId,
@@ -363,14 +430,24 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
console.error('_loadDigDeliveryAvailability', error);
}
this.removeFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'dig-delivery' });
this.removeFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'dig-delivery',
});
}
private async _loadB2bDeliveryAvailability(itemData: ItemData) {
const id = uniqueId('availability_');
try {
this.addFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'b2b-delivery' });
const res = await this._service.fetchB2bDeliveryAvailability(itemData, itemData.quantity).toPromise();
this.addFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'b2b-delivery',
});
const res = await this._service
.fetchB2bDeliveryAvailability(itemData, itemData.quantity)
.toPromise();
const availability: Availability = {
itemId: itemData.sourceId,
@@ -383,14 +460,24 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
console.error('_loadB2bDeliveryAvailability', error);
}
this.removeFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'b2b-delivery' });
this.removeFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'b2b-delivery',
});
}
private async _loadDownloadAvailability(itemData: ItemData) {
const id = uniqueId('availability_');
try {
this.addFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'download' });
const res = await this._service.fetchDownloadAvailability(itemData).toPromise();
this.addFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'download',
});
const res = await this._service
.fetchDownloadAvailability(itemData)
.toPromise();
const availability: Availability = {
itemId: itemData.sourceId,
@@ -403,7 +490,11 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
console.error('_loadDownloadAvailability', error);
}
this.removeFetchingAvailability({ id, itemId: itemData.sourceId, purchaseOption: 'download' });
this.removeFetchingAvailability({
id,
itemId: itemData.sourceId,
purchaseOption: 'download',
});
}
private _checkAndSetAvailability(availability: Availability) {
@@ -411,7 +502,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const availabilities = this.availabilities;
const index = availabilities.findIndex(
(a) => a.itemId === availability.itemId && a.purchaseOption === availability.purchaseOption,
(a) =>
a.itemId === availability.itemId &&
a.purchaseOption === availability.purchaseOption,
);
if (index > -1) {
@@ -423,7 +516,11 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
this.patchState({ availabilities });
} else {
let availabilities = this.availabilities.filter(
(a) => !(a.itemId === availability.itemId && a.purchaseOption === availability.purchaseOption),
(a) =>
!(
a.itemId === availability.itemId &&
a.purchaseOption === availability.purchaseOption
),
);
this.patchState({ availabilities });
}
@@ -432,7 +529,11 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
private _addCanAddResult(canAdd: CanAdd) {
let canAddResults = this.canAddResults;
canAddResults = canAddResults.filter(
(c) => !(c.itemId === canAdd.itemId && c.purchaseOption === canAdd.purchaseOption),
(c) =>
!(
c.itemId === canAdd.itemId &&
c.purchaseOption === canAdd.purchaseOption
),
);
canAddResults.push(canAdd);
this.patchState({ canAddResults });
@@ -474,7 +575,10 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const b2bDeliveryAvailability = this.availabilities.find(
(a) => a.itemId === item.id && a.purchaseOption === 'b2b-delivery',
);
deliveryAvailability = deliveryAvailability || digDeliveryAvailability || b2bDeliveryAvailability;
deliveryAvailability =
deliveryAvailability ||
digDeliveryAvailability ||
b2bDeliveryAvailability;
if (deliveryAvailability) {
payloads['Versand'].push(
mapToItemPayload({
@@ -487,7 +591,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
}
// Get Abholung availability
let pickupAvailability = this.availabilities.find((a) => a.itemId === item.id && a.purchaseOption === 'pickup');
let pickupAvailability = this.availabilities.find(
(a) => a.itemId === item.id && a.purchaseOption === 'pickup',
);
if (pickupAvailability) {
payloads['Abholung'].push(
mapToItemPayload({
@@ -519,7 +625,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const itemPayloads = payloads[key];
if (itemPayloads.length > 0) {
try {
const res = await this._service.fetchCanAdd(this.processId, key, itemPayloads).toPromise();
const res = await this._service
.fetchCanAdd(this.processId, key, itemPayloads)
.toPromise();
res.forEach((canAdd) => {
const item = itemPayloads.find((i) => i.id === canAdd.id);
this._addCanAddResult({
@@ -549,7 +657,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
if (value && !selectedItemIds.includes(itemId)) {
this.patchState({ selectedItemIds: [...selectedItemIds, itemId] });
} else if (!value && selectedItemIds.includes(itemId)) {
this.patchState({ selectedItemIds: selectedItemIds.filter((id) => id !== itemId) });
this.patchState({
selectedItemIds: selectedItemIds.filter((id) => id !== itemId),
});
}
}
@@ -561,7 +671,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
canAddItem(itemId: number): boolean {
const purchaseOption = this.purchaseOption;
const canAdd = this.canAddResults.find((c) => c.itemId === itemId && c.purchaseOption === purchaseOption);
const canAdd = this.canAddResults.find(
(c) => c.itemId === itemId && c.purchaseOption === purchaseOption,
);
if (canAdd) {
return canAdd.canAdd;
@@ -574,20 +686,40 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
this.patchState({ selectedItemIds: [] });
}
getItemsThatHaveAnAvailabilityForPurchaseOption(purchaseOption: PurchaseOption): Item[] {
return this.get(Selectors.getItemsThatHaveAnAvailabilityForPurchaseOption(purchaseOption));
getItemsThatHaveAnAvailabilityForPurchaseOption(
purchaseOption: PurchaseOption,
): Item[] {
return this.get(
Selectors.getItemsThatHaveAnAvailabilityForPurchaseOption(purchaseOption),
);
}
getItemsThatHaveAnAvailabilityForPurchaseOption$(purchaseOption: PurchaseOption): Observable<Item[]> {
return this.select(Selectors.getItemsThatHaveAnAvailabilityForPurchaseOption(purchaseOption));
getItemsThatHaveAnAvailabilityForPurchaseOption$(
purchaseOption: PurchaseOption,
): Observable<Item[]> {
return this.select(
Selectors.getItemsThatHaveAnAvailabilityForPurchaseOption(purchaseOption),
);
}
getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption(purchaseOption: PurchaseOption): Item[] {
return this.get(Selectors.getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption(purchaseOption));
getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption(
purchaseOption: PurchaseOption,
): Item[] {
return this.get(
Selectors.getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption(
purchaseOption,
),
);
}
getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption$(purchaseOption: PurchaseOption): Observable<Item[]> {
return this.select(Selectors.getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption(purchaseOption));
getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption$(
purchaseOption: PurchaseOption,
): Observable<Item[]> {
return this.select(
Selectors.getItemsThatHaveAnAvailabilityAndCanAddForPurchaseOption(
purchaseOption,
),
);
}
getAvailabilitiesForItem(itemId: number): Availability[] {
@@ -679,15 +811,21 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
}
getPrice$(itemId: number) {
return this.purchaseOption$.pipe(switchMap((po) => this.getPriceForPurchaseOption$(itemId, po)));
return this.purchaseOption$.pipe(
switchMap((po) => this.getPriceForPurchaseOption$(itemId, po)),
);
}
getPriceForPurchaseOption(itemId: number, purchaseOption: PurchaseOption) {
return this.get(Selectors.getPriceForPurchaseOption(itemId, purchaseOption));
return this.get(
Selectors.getPriceForPurchaseOption(itemId, purchaseOption),
);
}
getPriceForPurchaseOption$(itemId: number, purchaseOption: PurchaseOption) {
return this.select(Selectors.getPriceForPurchaseOption(itemId, purchaseOption));
return this.select(
Selectors.getPriceForPurchaseOption(itemId, purchaseOption),
);
}
getCanEditPrice(itemId: number) {
@@ -748,27 +886,51 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
}
getCanAddResultForItemAndCurrentPurchaseOption(itemId: number) {
return this.get(Selectors.getCanAddResultForItemAndCurrentPurchaseOption(itemId));
return this.get(
Selectors.getCanAddResultForItemAndCurrentPurchaseOption(itemId),
);
}
getCanAddResultForItemAndCurrentPurchaseOption$(itemId: number) {
return this.select(Selectors.getCanAddResultForItemAndCurrentPurchaseOption(itemId));
return this.select(
Selectors.getCanAddResultForItemAndCurrentPurchaseOption(itemId),
);
}
getAvailabilityWithPurchaseOption(itemId: number, purchaseOption: PurchaseOption) {
return this.get(Selectors.getAvailabilityWithPurchaseOption(itemId, purchaseOption));
getAvailabilityWithPurchaseOption(
itemId: number,
purchaseOption: PurchaseOption,
) {
return this.get(
Selectors.getAvailabilityWithPurchaseOption(itemId, purchaseOption),
);
}
getAvailabilityWithPurchaseOption$(itemId: number, purchaseOption: PurchaseOption) {
return this.select(Selectors.getAvailabilityWithPurchaseOption(itemId, purchaseOption));
getAvailabilityWithPurchaseOption$(
itemId: number,
purchaseOption: PurchaseOption,
) {
return this.select(
Selectors.getAvailabilityWithPurchaseOption(itemId, purchaseOption),
);
}
getCanAddResultWithPurchaseOption(itemId: number, purchaseOption: PurchaseOption) {
return this.get(Selectors.getCanAddResultWithPurchaseOption(itemId, purchaseOption));
getCanAddResultWithPurchaseOption(
itemId: number,
purchaseOption: PurchaseOption,
) {
return this.get(
Selectors.getCanAddResultWithPurchaseOption(itemId, purchaseOption),
);
}
getCanAddResultWithPurchaseOption$(itemId: number, purchaseOption: PurchaseOption) {
return this.select(Selectors.getCanAddResultWithPurchaseOption(itemId, purchaseOption));
getCanAddResultWithPurchaseOption$(
itemId: number,
purchaseOption: PurchaseOption,
) {
return this.select(
Selectors.getCanAddResultWithPurchaseOption(itemId, purchaseOption),
);
}
addItemsToShoppingCart() {
@@ -777,10 +939,16 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
}
}
getAddToShoppingCartDTOForItem(itemId: number, purchaseOption: PurchaseOption): AddToShoppingCartDTO {
getAddToShoppingCartDTOForItem(
itemId: number,
purchaseOption: PurchaseOption,
): AddToShoppingCartDTO {
const item = this.items.find((i) => i.id === itemId);
const price = this.getPriceForPurchaseOption(itemId, this.purchaseOption);
const availability = this.getAvailabilityWithPurchaseOption(itemId, purchaseOption);
const availability = this.getAvailabilityWithPurchaseOption(
itemId,
purchaseOption,
);
if (!isItemDTO(item, this.type)) {
throw new Error('Invalid item');
@@ -802,8 +970,12 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
availability: { ...availability.data, price },
destination,
itemType: item.type,
product: { ...item.product, catalogProductNumber: item?.product?.catalogProductNumber ?? String(item.id) },
promotion: { points: item.promoPoints },
product: {
...item.product,
catalogProductNumber:
item?.product?.catalogProductNumber ?? String(item.id),
},
promotion: { value: item.promoPoints },
// retailPrice: {
// value: price.value.value,
// currency: price.value.currency,
@@ -813,10 +985,16 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
};
}
getUpdateShoppingCartItemDTOForItem(itemId: number, purchaseOption: PurchaseOption): UpdateShoppingCartItemDTO {
getUpdateShoppingCartItemDTOForItem(
itemId: number,
purchaseOption: PurchaseOption,
): UpdateShoppingCartItemDTO {
const item = this.items.find((i) => i.id === itemId);
const price = this.getPriceForPurchaseOption(itemId, this.purchaseOption);
const availability = this.getAvailabilityWithPurchaseOption(itemId, purchaseOption);
const availability = this.getAvailabilityWithPurchaseOption(
itemId,
purchaseOption,
);
if (!isShoppingCartItemDTO(item, this.type)) {
throw new Error('Invalid item');
@@ -856,7 +1034,9 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
const payloads = this.selectedItemIds.map((itemId) =>
this.getAddToShoppingCartDTOForItem(itemId, purchaseOption),
);
await this._service.addItemToShoppingCart(this.processId, payloads).toPromise();
await this._service
.addItemToShoppingCart(this.processId, payloads)
.toPromise();
} else if (type === 'update') {
const payloads = this.selectedItemIds.map((itemId) =>
this.getUpdateShoppingCartItemDTOForItem(itemId, purchaseOption),
@@ -864,8 +1044,13 @@ export class PurchaseOptionsStore extends ComponentStore<PurchaseOptionsState> {
for (const itemId of this.selectedItemIds) {
const item = this.items.find((i) => i.id === itemId);
const payload = this.getUpdateShoppingCartItemDTOForItem(itemId, purchaseOption);
await this._service.updateItemInShoppingCart(this.processId, item.id, payload).toPromise();
const payload = this.getUpdateShoppingCartItemDTOForItem(
itemId,
purchaseOption,
);
await this._service
.updateItemInShoppingCart(this.processId, item.id, payload)
.toPromise();
}
} else {
throw new Error('Invalid type');

View File

@@ -22,12 +22,21 @@ import { UiErrorModalComponent, UiModalService } from '@ui/modal';
import { CacheService } from '@core/cache';
import { isEqual } from 'lodash';
import { BehaviorSubject, combineLatest, Subscription } from 'rxjs';
import { debounceTime, first, map, switchMap, withLatestFrom } from 'rxjs/operators';
import {
debounceTime,
first,
map,
switchMap,
withLatestFrom,
} from 'rxjs/operators';
import { ArticleSearchService } from '../article-search.store';
import { AddedToCartModalComponent } from './added-to-cart-modal/added-to-cart-modal.component';
import { SearchResultItemComponent } from './search-result-item.component';
import { ProductCatalogNavigationService } from '@shared/services/navigation';
import { Filter, FilterInputGroupMainComponent } from '@shared/components/filter';
import {
Filter,
FilterInputGroupMainComponent,
} from '@shared/components/filter';
import { DomainAvailabilityService, ItemData } from '@domain/availability';
import { asapScheduler } from 'rxjs';
import { ShellService } from '@shared/shell';
@@ -39,8 +48,11 @@ import { ShellService } from '@shared/shell';
changeDetection: ChangeDetectionStrategy.OnPush,
standalone: false,
})
export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterViewInit {
@ViewChildren(SearchResultItemComponent) listItems: QueryList<SearchResultItemComponent>;
export class ArticleSearchResultsComponent
implements OnInit, OnDestroy, AfterViewInit
{
@ViewChildren(SearchResultItemComponent)
listItems: QueryList<SearchResultItemComponent>;
@ViewChild(CdkVirtualScrollViewport, { static: false })
scrollContainer: CdkVirtualScrollViewport;
@@ -59,7 +71,9 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
selectedItems$ = combineLatest([this.results$, this.selectedItemIds$]).pipe(
map(([items, selectedItemIds]) => {
return items?.filter((item) => selectedItemIds?.find((selectedItemId) => item.id === selectedItemId));
return items?.filter((item) =>
selectedItemIds?.find((selectedItemId) => item.id === selectedItemId),
);
}),
);
@@ -81,7 +95,10 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
return this._environment.matchDesktopLarge();
}
hasFilter$ = combineLatest([this.searchService.filter$, this.searchService.defaultSettings$]).pipe(
hasFilter$ = combineLatest([
this.searchService.filter$,
this.searchService.defaultSettings$,
]).pipe(
map(([filter, defaultFilter]) => {
const filterQueryParams = filter?.getQueryParams();
return !isEqual(
@@ -100,11 +117,15 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
get filterQueryParams() {
return this.cleanupQueryParams(this.searchService?.filter?.getQueryParams());
return this.cleanupQueryParams(
this.searchService?.filter?.getQueryParams(),
);
}
get primaryOutletActive$() {
return this._environment.matchDesktop$.pipe(map((matches) => matches && this.route.outlet === 'primary'));
return this._environment.matchDesktop$.pipe(
map((matches) => matches && this.route.outlet === 'primary'),
);
}
private readonly SCROLL_INDEX_TOKEN = 'CATALOG_RESULTS_LIST_SCROLL_INDEX';
@@ -129,28 +150,42 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
ngOnInit() {
this.subscriptions.add(
combineLatest([this.application.activatedProcessId$, this.route.queryParams])
combineLatest([
this.application.activatedProcessId$,
this.route.queryParams,
])
.pipe(
debounceTime(0),
switchMap(([processId, queryParams]) =>
this.application
.getSelectedBranch$(processId)
.pipe(map((selectedBranch) => ({ processId, queryParams, selectedBranch }))),
this.application.getSelectedBranch$(processId).pipe(
map((selectedBranch) => ({
processId,
queryParams,
selectedBranch,
})),
),
),
)
.subscribe(async ({ processId, queryParams, selectedBranch }) => {
const processChanged = processId !== this.searchService.processId;
const branchChanged = selectedBranch?.id !== this.searchService?.selectedBranch?.id;
const branchChanged =
selectedBranch?.id !== this.searchService?.selectedBranch?.id;
if (processChanged) {
if (!!this.searchService.processId && this.searchService.filter instanceof Filter) {
if (
!!this.searchService.processId &&
this.searchService.filter instanceof Filter
) {
this.cacheCurrentData(
this.searchService.processId,
this.searchService.filter.getQueryParams(),
this.searchService?.selectedBranch?.id,
);
this.updateBreadcrumbs(this.searchService.processId, this.searchService.filter.getQueryParams());
this.updateBreadcrumbs(
this.searchService.processId,
this.searchService.filter.getQueryParams(),
);
}
this.searchService.setProcess(processId);
}
@@ -169,9 +204,20 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
this.scrollToItem(await this._getScrollIndexFromCache());
}
if (!isEqual(cleanQueryParams, this.cleanupQueryParams(this.searchService.filter.getQueryParams()))) {
if (
!isEqual(
cleanQueryParams,
this.cleanupQueryParams(
this.searchService.filter.getQueryParams(),
),
)
) {
await this.searchService.setDefaultFilter(queryParams);
const data = await this.getCachedData(processId, queryParams, selectedBranch?.id);
const data = await this.getCachedData(
processId,
queryParams,
selectedBranch?.id,
);
if (data.items?.length > 0) {
this.searchService.setItems(data.items);
@@ -179,21 +225,29 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
if (
data.items?.length === 0 &&
this.route?.parent?.children?.find((childRoute) => childRoute?.outlet === 'side')?.snapshot?.routeConfig
?.path !== 'filter'
this.route?.parent?.children?.find(
(childRoute) => childRoute?.outlet === 'side',
)?.snapshot?.routeConfig?.path !== 'filter'
) {
this.search({ clear: true });
} else {
const selectedItemIds: Array<string> = queryParams?.selected_item_ids?.split(',') ?? [];
const selectedItemIds: Array<string> =
queryParams?.selected_item_ids?.split(',') ?? [];
for (const id of selectedItemIds) {
if (id) {
this.searchService.setSelected({ selected: true, itemId: Number(id) });
this.searchService.setSelected({
selected: true,
itemId: Number(id),
});
}
}
}
}
const process = await this.application.getProcessById$(processId).pipe(first()).toPromise();
const process = await this.application
.getProcessById$(processId)
.pipe(first())
.toPromise();
if (process) {
await this.updateBreadcrumbs(processId, queryParams);
await this.createBreadcrumb(processId, queryParams);
@@ -240,7 +294,10 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
})
.navigate();
}
} else if (searchCompleted?.clear || this.route.outlet === 'primary') {
} else if (
searchCompleted?.clear ||
this.route.outlet === 'primary'
) {
const ean = this.route?.snapshot?.params?.ean;
if (ean) {
@@ -253,7 +310,9 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
.navigate();
} else {
await this._navigationService
.getArticleSearchResultsPath(processId, { queryParams: params })
.getArticleSearchResultsPath(processId, {
queryParams: params,
})
.navigate();
}
}
@@ -266,7 +325,9 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
this.searchService.searchStarted.subscribe(async (options) => {
if (!options?.clear) {
const queryParams = {
...this.cleanupQueryParams(this.searchService.filter.getQueryParams()),
...this.cleanupQueryParams(
this.searchService.filter.getQueryParams(),
),
main_qs: this.sharedFilterInputGroupMain?.uiInput?.value,
};
@@ -281,11 +342,19 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
private _addScrollIndexToCache(index: number): void {
this.cache.set<number>({ processId: this.getProcessId(), token: this.SCROLL_INDEX_TOKEN }, index);
this.cache.set<number>(
{ processId: this.getProcessId(), token: this.SCROLL_INDEX_TOKEN },
index,
);
}
private async _getScrollIndexFromCache(): Promise<number> {
return (await this.cache.get<number>({ processId: this.getProcessId(), token: this.SCROLL_INDEX_TOKEN })) ?? 0;
return (
(await this.cache.get<number>({
processId: this.getProcessId(),
token: this.SCROLL_INDEX_TOKEN,
})) ?? 0
);
}
async scrollToItem(i?: number) {
@@ -303,12 +372,14 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
scrolledIndexChange(index: number) {
const completeListFetched = this.searchService.items.length === this.searchService.hits;
const completeListFetched =
this.searchService.items.length === this.searchService.hits;
if (
index &&
!completeListFetched &&
this.searchService.items.length <= this.scrollContainer?.getRenderedRange()?.end
this.searchService.items.length <=
this.scrollContainer?.getRenderedRange()?.end
) {
this.search({ clear: false });
}
@@ -326,7 +397,10 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
this.searchService.filter.getQueryParams(),
this.searchService?.selectedBranch?.id,
);
await this.updateBreadcrumbs(this.searchService.processId, this.searchService.filter.getQueryParams());
await this.updateBreadcrumbs(
this.searchService.processId,
this.searchService.filter.getQueryParams(),
);
this.unselectAll();
}
@@ -345,7 +419,15 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
return clean;
}
search({ filter, clear = false, orderBy = false }: { filter?: Filter; clear?: boolean; orderBy?: boolean }) {
search({
filter,
clear = false,
orderBy = false,
}: {
filter?: Filter;
clear?: boolean;
orderBy?: boolean;
}) {
if (filter) {
this.sharedFilterInputGroupMain.cancelAutocomplete();
}
@@ -354,19 +436,28 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
getDetailsPath(itemId: number) {
return this._navigationService.getArticleDetailsPath({ processId: this.application.activatedProcessId, itemId })
.path;
return this._navigationService.getArticleDetailsPath({
processId: this.application.activatedProcessId,
itemId,
}).path;
}
async updateBreadcrumbs(
processId: number = this.searchService.processId,
queryParams: Record<string, string> = this.searchService.filter?.getQueryParams(),
queryParams: Record<
string,
string
> = this.searchService.filter?.getQueryParams(),
) {
const selected_item_ids = this.searchService?.selectedItemIds?.toString();
if (queryParams) {
const crumbs = await this.breadcrumb
.getBreadcrumbsByKeyAndTags$(processId, ['catalog', 'filter', 'results'])
.getBreadcrumbsByKeyAndTags$(processId, [
'catalog',
'filter',
'results',
])
.pipe(first())
.toPromise();
@@ -382,13 +473,18 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
}
async createBreadcrumb(processId: number, queryParams: Record<string, string>) {
async createBreadcrumb(
processId: number,
queryParams: Record<string, string>,
) {
if (queryParams) {
const name = queryParams.main_qs ? queryParams.main_qs : 'Alle Artikel';
await this.breadcrumb.addBreadcrumbIfNotExists({
key: processId,
name,
path: this._navigationService.getArticleSearchResultsPath(processId, { queryParams }).path,
path: this._navigationService.getArticleSearchResultsPath(processId, {
queryParams,
}).path,
params: queryParams,
section: 'customer',
tags: ['catalog', 'filter', 'results'],
@@ -405,8 +501,16 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
crumbs?.forEach((crumb) => this.breadcrumb.removeBreadcrumb(crumb.id));
}
cacheCurrentData(processId: number, params: Record<string, string> = {}, branchId: number) {
const qparams = this.cleanupQueryParams({ ...params, processId: String(processId), branchId: String(branchId) });
cacheCurrentData(
processId: number,
params: Record<string, string> = {},
branchId: number,
) {
const qparams = this.cleanupQueryParams({
...params,
processId: String(processId),
branchId: String(branchId),
});
this.cache.set(qparams, {
items: this.searchService.items,
@@ -414,8 +518,16 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
});
}
async getCachedData(processId: number, params: Record<string, string> = {}, branchId: number) {
const qparams = this.cleanupQueryParams({ ...params, processId: String(processId), branchId: String(branchId) });
async getCachedData(
processId: number,
params: Record<string, string> = {},
branchId: number,
) {
const qparams = this.cleanupQueryParams({
...params,
processId: String(processId),
branchId: String(branchId),
});
const cacheData = await this.cache.get<{
items: ItemDTO[];
hits: number;
@@ -452,7 +564,12 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
unselectAll() {
this.listItems.forEach((listItem) => this.searchService.setSelected({ selected: false, itemId: listItem.item.id }));
this.listItems.forEach((listItem) =>
this.searchService.setSelected({
selected: false,
itemId: listItem.item.id,
}),
);
this.searchService.patchState({ selectedItemIds: [] });
}
@@ -474,39 +591,46 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
availability: {
availabilityType: item?.catalogAvailability?.status,
price: item?.catalogAvailability?.price,
supplierProductNumber: item?.ids?.dig ? String(item?.ids?.dig) : item?.product?.supplierProductNumber,
supplierProductNumber: item?.ids?.dig
? String(item?.ids?.dig)
: item?.product?.supplierProductNumber,
},
product: {
catalogProductNumber: String(item?.id),
...item?.product,
},
itemType: item?.type,
promotion: { points: item?.promoPoints },
promotion: { value: item?.promoPoints },
};
}
async addItemsToCart(item?: ItemDTO) {
const selectedItems = !item ? await this.selectedItems$.pipe(first()).toPromise() : [item];
const selectedItems = !item
? await this.selectedItems$.pipe(first()).toPromise()
: [item];
const items: AddToShoppingCartDTO[] = [];
const canAddItemsPayload = [];
for (const item of selectedItems) {
const isDownload = item?.product?.format === 'EB' || item?.product?.format === 'DL';
const isDownload =
item?.product?.format === 'EB' || item?.product?.format === 'DL';
const price = item?.catalogAvailability?.price;
const shoppingCartItem: AddToShoppingCartDTO = {
quantity: 1,
availability: {
availabilityType: item?.catalogAvailability?.status,
price,
supplierProductNumber: item?.ids?.dig ? String(item.ids?.dig) : item?.product?.supplierProductNumber,
supplierProductNumber: item?.ids?.dig
? String(item.ids?.dig)
: item?.product?.supplierProductNumber,
},
product: {
catalogProductNumber: String(item?.id),
...item?.product,
},
itemType: item.type,
promotion: { points: item?.promoPoints },
promotion: { value: item?.promoPoints },
};
if (isDownload) {
@@ -519,9 +643,14 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
.getDownloadAvailability({ item: downloadItem })
.pipe(first())
.toPromise();
shoppingCartItem.destination = { data: { target: 16, logistician: downloadAvailability?.logistician } };
shoppingCartItem.destination = {
data: { target: 16, logistician: downloadAvailability?.logistician },
};
if (downloadAvailability) {
shoppingCartItem.availability = { ...shoppingCartItem.availability, ...downloadAvailability };
shoppingCartItem.availability = {
...shoppingCartItem.availability,
...downloadAvailability,
};
}
canAddItemsPayload.push({
availabilities: [{ ...item.catalogAvailability, format: 'DL' }],
@@ -546,7 +675,10 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
if (response) {
const cantAdd = (response as any)?.filter((r) => r.status >= 2);
if (cantAdd?.length > 0) {
this.openModal({ itemLength: cantAdd.length, canAddMessage: cantAdd[0].message });
this.openModal({
itemLength: cantAdd.length,
canAddMessage: cantAdd[0].message,
});
return;
}
}
@@ -571,7 +703,15 @@ export class ArticleSearchResultsComponent implements OnInit, OnDestroy, AfterVi
}
}
openModal({ itemLength, canAddMessage, error }: { itemLength: number; canAddMessage?: string; error?: Error }) {
openModal({
itemLength,
canAddMessage,
error,
}: {
itemLength: number;
canAddMessage?: string;
error?: Error;
}) {
const modal = this._uiModal.open({
title:
!error && !canAddMessage

View File

@@ -114,15 +114,21 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
readonly processId$ = this._application.activatedProcessId$;
readonly customer$ = this.processId$.pipe(switchMap((processId) => this._checkoutService.getBuyer({ processId })));
readonly customer$ = this.processId$.pipe(
switchMap((processId) => this._checkoutService.getBuyer({ processId })),
);
readonly customerFeatures$ = this.processId$.pipe(
switchMap((processId) => this._checkoutService.getCustomerFeatures({ processId })),
switchMap((processId) =>
this._checkoutService.getCustomerFeatures({ processId }),
),
);
readonly customerFilter$ = this.customerFeatures$.pipe(
withLatestFrom(this.processId$),
switchMap(([customerFeatures, processId]) => this._checkoutService.canSetCustomer({ processId, customerFeatures })),
switchMap(([customerFeatures, processId]) =>
this._checkoutService.canSetCustomer({ processId, customerFeatures }),
),
map((res) => res.filter),
);
@@ -169,7 +175,11 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
tapResponse(
(res) => {
const item = res.result[0];
if (!!item && item?.product?.format !== 'EB' && item?.product?.format !== 'DL') {
if (
!!item &&
item?.product?.format !== 'EB' &&
item?.product?.format !== 'DL'
) {
this.patchState({
item: res.result[0],
message: '',
@@ -229,12 +239,22 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
updateCart = this.effect((cb$: Observable<Function>) =>
cb$.pipe(
tap((_) => this.patchState({ fetching: true })),
withLatestFrom(this.processId$, this.addToCartItem$, this.shoppingCartItemId$),
withLatestFrom(
this.processId$,
this.addToCartItem$,
this.shoppingCartItemId$,
),
switchMap(([cb, processId, newItem, shoppingCartItemId]) => {
const availability = newItem.availability;
const quantity = newItem.quantity;
const destination = newItem.destination;
return this.updateCartRequest({ processId, shoppingCartItemId, availability, quantity, destination }).pipe(
return this.updateCartRequest({
processId,
shoppingCartItemId,
availability,
quantity,
destination,
}).pipe(
tapResponse(
(res) => {
this.patchState({
@@ -270,7 +290,10 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
}
addToCartRequest(processId: number, newItem: AddToShoppingCartDTO) {
return this._checkoutService.addItemToShoppingCart({ processId, items: [newItem] });
return this._checkoutService.addItemToShoppingCart({
processId,
items: [newItem],
});
}
updateCartRequest({
@@ -297,7 +320,11 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
});
}
async createAddToCartItem(control: UntypedFormGroup, branch: BranchDTO, update?: boolean) {
async createAddToCartItem(
control: UntypedFormGroup,
branch: BranchDTO,
update?: boolean,
) {
let item: ItemDTO;
const quantity = Number(control.get('quantity').value);
const price = this._createPriceDTO(control);
@@ -305,7 +332,11 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
// Check if item exists or ean inside the control changed in the meantime
if (!!this.item && this.item.product.ean === control.get('ean').value) {
item = this.item;
promoPoints = await this._getPromoPoints({ itemId: item.id, quantity, price: price.value.value });
promoPoints = await this._getPromoPoints({
itemId: item.id,
quantity,
price: price.value.value,
});
} else {
item = undefined;
}
@@ -316,21 +347,33 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
quantity,
availability,
product,
promotion: item ? { points: promoPoints } : undefined,
promotion: item ? { value: promoPoints } : undefined,
destination: {
data: { target: 1, targetBranch: { id: branch?.id } },
},
itemType: this.item?.type ?? this.get((s) => s.shoppingCartItem)?.itemType,
itemType:
this.item?.type ?? this.get((s) => s.shoppingCartItem)?.itemType,
};
if (update) {
const existingItem = this.get((s) => s.shoppingCartItem);
this.patchState({ addToCartItem: newItem, shoppingCartItemId: existingItem?.id });
this.patchState({
addToCartItem: newItem,
shoppingCartItemId: existingItem?.id,
});
}
this.patchState({ addToCartItem: newItem });
}
private async _getPromoPoints({ itemId, quantity, price }: { itemId: number; quantity: number; price: number }) {
private async _getPromoPoints({
itemId,
quantity,
price,
}: {
itemId: number;
quantity: number;
price: number;
}) {
let points: number;
try {
points = await this._catalogService
@@ -371,7 +414,13 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
};
}
private _createAvailabilityDTO({ price, control }: { price: PriceDTO; control: UntypedFormGroup }): AvailabilityDTO {
private _createAvailabilityDTO({
price,
control,
}: {
price: PriceDTO;
control: UntypedFormGroup;
}): AvailabilityDTO {
return {
availabilityType: 1024,
supplier: {
@@ -383,7 +432,13 @@ export class CheckoutDummyStore extends ComponentStore<CheckoutDummyState> {
};
}
private _createProductDTO({ item, control }: { item?: ItemDTO; control: UntypedFormGroup }): ProductDTO {
private _createProductDTO({
item,
control,
}: {
item?: ItemDTO;
control: UntypedFormGroup;
}): ProductDTO {
const formValues: Partial<ProductDTO> = {
ean: control.get('ean').value,
name: control.get('name').value,

View File

@@ -31,8 +31,9 @@ const PARAMETER_CODEC = new ParameterCodec();
export class BaseService {
constructor(
protected config: CheckoutConfiguration,
protected http: HttpClient,
) {}
protected http: HttpClient
) {
}
private _rootUrl: string = '';
@@ -56,7 +57,7 @@ export class BaseService {
*/
protected newParams(): HttpParams {
return new HttpParams({
encoder: PARAMETER_CODEC,
encoder: PARAMETER_CODEC
});
}
}

View File

@@ -8,7 +8,7 @@ import { Injectable } from '@angular/core';
providedIn: 'root',
})
export class CheckoutConfiguration {
rootUrl: string = 'https://isa-test.paragon-data.net';
rootUrl: string = 'https://isa-test.paragon-data.net/checkout/v6';
}
export interface CheckoutConfigurationInterface {

View File

@@ -131,8 +131,9 @@ export { PaymentType } from './models/payment-type';
export { CountryTargetDTO } from './models/country-target-dto';
export { BranchTargetDTO } from './models/branch-target-dto';
export { EntityDTOBaseOfShopDTOAndIShop } from './models/entity-dtobase-of-shop-dtoand-ishop';
export { CampaignDTO } from './models/campaign-dto';
export { LoyaltyDTO } from './models/loyalty-dto';
export { PromotionDTO } from './models/promotion-dto';
export { EntityDTOBaseOfShoppingCartItemDTOAndIShoppingCartItem } from './models/entity-dtobase-of-shopping-cart-item-dtoand-ishopping-cart-item';
export { EntityDTOBaseOfCheckoutItemDTOAndICheckoutItem } from './models/entity-dtobase-of-checkout-item-dtoand-icheckout-item';
export { DisplayItemDTO } from './models/display-item-dto';
export { EntityDTOBaseOfCheckoutDeliveryDTOAndICheckoutDelivery } from './models/entity-dtobase-of-checkout-delivery-dtoand-icheckout-delivery';

View File

@@ -1,14 +1,18 @@
/* tslint:disable */
import { AvailabilityDTO } from './availability-dto';
import { CampaignDTO } from './campaign-dto';
import { EntityDTOContainerOfDestinationDTO } from './entity-dtocontainer-of-destination-dto';
import { ItemType } from './item-type';
import { LoyaltyDTO } from './loyalty-dto';
import { ProductDTO } from './product-dto';
import { PromotionDTO } from './promotion-dto';
import { Price } from './price';
export interface AddToShoppingCartDTO {
availability?: AvailabilityDTO;
campaign?: CampaignDTO;
destination?: EntityDTOContainerOfDestinationDTO;
itemType?: ItemType;
loyalty?: LoyaltyDTO;
product?: ProductDTO;
promotion?: PromotionDTO;
quantity: number;

View File

@@ -1,7 +1,7 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
import { GeoLocation } from './geo-location';
export interface AddressDTO extends TouchedBase {
export interface AddressDTO extends TouchedBase{
apartment?: string;
careOf?: string;
city?: string;

View File

@@ -4,7 +4,7 @@ import { AddressDTO } from './address-dto';
import { CommunicationDetailsDTO } from './communication-details-dto';
import { Gender } from './gender';
import { OrganisationDTO } from './organisation-dto';
export interface AddresseeWithReferenceDTO extends EntityReferenceDTO {
export interface AddresseeWithReferenceDTO extends EntityReferenceDTO{
address?: AddressDTO;
communicationDetails?: CommunicationDetailsDTO;
firstName?: string;

View File

@@ -1,43 +1,2 @@
/* tslint:disable */
export type AllergeneType =
| 0
| 1
| 2
| 4
| 6
| 8
| 16
| 32
| 64
| 128
| 256
| 512
| 1024
| 1536
| 2048
| 6144
| 10240
| 18432
| 34816
| 67584
| 133120
| 264192
| 526336
| 1048576
| 3145728
| 5242880
| 9437184
| 17825792
| 34603008
| 68157440
| 135266304
| 268435456
| 805306368
| 1342177280
| 2415919104
| 4563402752
| 8858370048
| 17448304640
| 34628173824
| 68987912192
| 137438953472;
export type AllergeneType = 0 | 1 | 2 | 4 | 6 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 1536 | 2048 | 6144 | 10240 | 18432 | 34816 | 67584 | 133120 | 264192 | 526336 | 1048576 | 3145728 | 5242880 | 9437184 | 17825792 | 34603008 | 68157440 | 135266304 | 268435456 | 805306368 | 1342177280 | 2415919104 | 4563402752 | 8858370048 | 17448304640 | 34628173824 | 68987912192 | 137438953472;

View File

@@ -6,7 +6,7 @@ import { EntityDTOContainerOfLogisticianDTO } from './entity-dtocontainer-of-log
import { PriceDTO } from './price-dto';
import { EntityDTOContainerOfShopItemDTO } from './entity-dtocontainer-of-shop-item-dto';
import { EntityDTOContainerOfSupplierDTO } from './entity-dtocontainer-of-supplier-dto';
export interface AvailabilityDTO extends TouchedBase {
export interface AvailabilityDTO extends TouchedBase{
availabilityType?: AvailabilityType;
estimatedDelivery?: DateRangeDTO;
estimatedShippingDate?: string;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type AvailabilityType = 0 | 1 | 2 | 32 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384;
export type AvailabilityType = 0 | 1 | 2 | 32 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type Avoirdupois = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096;
export type Avoirdupois = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096;

View File

@@ -4,7 +4,7 @@ import { AddressDTO } from './address-dto';
import { BranchType } from './branch-type';
import { EntityDTOContainerOfLabelDTO } from './entity-dtocontainer-of-label-dto';
import { EntityDTOContainerOfBranchDTO } from './entity-dtocontainer-of-branch-dto';
export interface BranchDTO extends EntityDTOBaseOfBranchDTOAndIBranch {
export interface BranchDTO extends EntityDTOBaseOfBranchDTOAndIBranch{
address?: AddressDTO;
branchNumber?: string;
branchType?: BranchType;

View File

@@ -2,7 +2,7 @@
import { BranchType } from './branch-type';
export interface BranchQueryTokenDTO {
branchType?: BranchType;
input?: { [key: string]: string };
input?: {[key: string]: string};
labelKey?: string;
skip?: number;
take?: number;

View File

@@ -1,7 +1,7 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
import { EntityDTOContainerOfBranchDTO } from './entity-dtocontainer-of-branch-dto';
export interface BranchTargetDTO extends TouchedBase {
export interface BranchTargetDTO extends TouchedBase{
isDefault?: string;
start?: string;
stop?: string;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type BranchType = 0 | 1 | 2 | 4 | 8 | 16;
export type BranchType = 0 | 1 | 2 | 4 | 8 | 16;

View File

@@ -2,7 +2,7 @@
import { AddresseeWithReferenceDTO } from './addressee-with-reference-dto';
import { BuyerStatus } from './buyer-status';
import { BuyerType } from './buyer-type';
export interface BuyerDTO extends AddresseeWithReferenceDTO {
export interface BuyerDTO extends AddresseeWithReferenceDTO{
buyerNumber?: string;
buyerStatus?: BuyerStatus;
buyerType?: BuyerType;

View File

@@ -4,8 +4,9 @@
* Input
*/
export interface BuyerPayload {
/**
* Kundenattribute
*/
customerFeatures?: { [key: string]: string };
customerFeatures?: {[key: string]: string};
}

View File

@@ -7,6 +7,7 @@ import { QueryTokenDTO } from './query-token-dto';
* Output
*/
export interface BuyerResult {
/**
* Kundenattribute
*/

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type BuyerStatus = 0 | 1 | 2 | 4 | 8 | 16;
export type BuyerStatus = 0 | 1 | 2 | 4 | 8 | 16;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type BuyerType = 0 | 1 | 2 | 4 | 8 | 16;
export type BuyerType = 0 | 1 | 2 | 4 | 8 | 16;

View File

@@ -0,0 +1,8 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
export interface CampaignDTO extends TouchedBase{
code?: string;
label?: string;
type?: string;
value?: number;
}

View File

@@ -2,7 +2,7 @@
import { EntityDTOBase } from './entity-dtobase';
import { EntityDTOContainerOfCategoryDTO } from './entity-dtocontainer-of-category-dto';
import { EntityDTOContainerOfTenantDTO } from './entity-dtocontainer-of-tenant-dto';
export interface CategoryDTO extends EntityDTOBase {
export interface CategoryDTO extends EntityDTOBase{
key?: string;
name?: string;
parent?: EntityDTOContainerOfCategoryDTO;

View File

@@ -6,7 +6,7 @@ import { PriceValueDTO } from './price-value-dto';
import { DisplayItemDTO } from './display-item-dto';
import { EntityDTOContainerOfCheckoutItemDTO } from './entity-dtocontainer-of-checkout-item-dto';
import { TermsOfDeliveryDTO } from './terms-of-delivery-dto';
export interface CheckoutDeliveryDTO extends EntityDTOBaseOfCheckoutDeliveryDTOAndICheckoutDelivery {
export interface CheckoutDeliveryDTO extends EntityDTOBaseOfCheckoutDeliveryDTOAndICheckoutDelivery{
checkout?: EntityDTOContainerOfCheckoutDTO;
destination?: EntityDTOContainerOfDestinationDTO;
discount?: PriceValueDTO;

View File

@@ -11,7 +11,7 @@ import { EntityDTOContainerOfBranchDTO } from './entity-dtocontainer-of-branch-d
import { PayerDTO } from './payer-dto';
import { PaymentDTO } from './payment-dto';
import { UserAccountDTO } from './user-account-dto';
export interface CheckoutDTO extends EntityDTOBaseOfCheckoutDTOAndICheckout {
export interface CheckoutDTO extends EntityDTOBaseOfCheckoutDTOAndICheckout{
agreements?: Array<KeyValueDTOOfStringAndString>;
availableShippingTargets?: Array<SelectionDTOOfShippingTarget>;
buyer?: BuyerDTO;

View File

@@ -4,7 +4,7 @@ import { EntityDTOContainerOfShoppingCartItemDTO } from './entity-dtocontainer-o
import { EntityDTOContainerOfCheckoutDTO } from './entity-dtocontainer-of-checkout-dto';
import { EntityDTOContainerOfCheckoutDeliveryDTO } from './entity-dtocontainer-of-checkout-delivery-dto';
import { PriceValueDTO } from './price-value-dto';
export interface CheckoutItemDTO extends EntityDTOBaseOfCheckoutItemDTOAndICheckoutItem {
export interface CheckoutItemDTO extends EntityDTOBaseOfCheckoutItemDTOAndICheckoutItem{
accessories?: Array<EntityDTOContainerOfShoppingCartItemDTO>;
checkout?: EntityDTOContainerOfCheckoutDTO;
delivery?: EntityDTOContainerOfCheckoutDeliveryDTO;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type CheckoutStep = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096;
export type CheckoutStep = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096;

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
export interface CommunicationDetailsDTO extends TouchedBase {
export interface CommunicationDetailsDTO extends TouchedBase{
email?: string;
fax?: string;
mobile?: string;

View File

@@ -2,7 +2,7 @@
import { EntityDTOBaseOfCompanyDTOAndICompany } from './entity-dtobase-of-company-dtoand-icompany';
import { AddressDTO } from './address-dto';
import { EntityDTOContainerOfCompanyDTO } from './entity-dtocontainer-of-company-dto';
export interface CompanyDTO extends EntityDTOBaseOfCompanyDTOAndICompany {
export interface CompanyDTO extends EntityDTOBaseOfCompanyDTOAndICompany{
address?: AddressDTO;
companyNumber?: string;
costUnit?: string;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type ComponentItemDisplayType = 0 | 1 | 2;
export type ComponentItemDisplayType = 0 | 1 | 2;

View File

@@ -4,7 +4,7 @@ import { EntityDTOContainerOfCategoryDTO } from './entity-dtocontainer-of-catego
import { ComponentItemDisplayType } from './component-item-display-type';
import { EntityDTOContainerOfItemDTO } from './entity-dtocontainer-of-item-dto';
import { QuantityUnitType } from './quantity-unit-type';
export interface ComponentItemDTO extends TouchedBase {
export interface ComponentItemDTO extends TouchedBase{
category?: EntityDTOContainerOfCategoryDTO;
description?: string;
displayType?: ComponentItemDisplayType;

View File

@@ -3,7 +3,7 @@ import { EntityDTOBaseOfComponentsDTOAndIComponents } from './entity-dtobase-of-
import { ComponentItemDTO } from './component-item-dto';
import { QuantityUnitType } from './quantity-unit-type';
import { SetType } from './set-type';
export interface ComponentsDTO extends EntityDTOBaseOfComponentsDTOAndIComponents {
export interface ComponentsDTO extends EntityDTOBaseOfComponentsDTOAndIComponents{
items?: Array<ComponentItemDTO>;
overallQuantityMax?: number;
overallQuantityMin?: number;

View File

@@ -3,7 +3,7 @@ import { EntityDTOBaseOfContributorDTOAndIContributor } from './entity-dtobase-o
import { OrganisationNamesDTO } from './organisation-names-dto';
import { PersonNamesDTO } from './person-names-dto';
import { EntityDTOContainerOfTenantDTO } from './entity-dtocontainer-of-tenant-dto';
export interface ContributorDTO extends EntityDTOBaseOfContributorDTOAndIContributor {
export interface ContributorDTO extends EntityDTOBaseOfContributorDTOAndIContributor{
friendlyName?: string;
organisation?: OrganisationNamesDTO;
person?: PersonNamesDTO;

View File

@@ -1,7 +1,7 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
import { EntityDTOContainerOfContributorDTO } from './entity-dtocontainer-of-contributor-dto';
export interface ContributorHelperDTO extends TouchedBase {
export interface ContributorHelperDTO extends TouchedBase{
contributor?: EntityDTOContainerOfContributorDTO;
type?: string;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOBaseOfCountryDTOAndICountry } from './entity-dtobase-of-country-dtoand-icountry';
export interface CountryDTO extends EntityDTOBaseOfCountryDTOAndICountry {
export interface CountryDTO extends EntityDTOBaseOfCountryDTOAndICountry{
isDefault?: string;
isO3166_A_3?: string;
name?: string;

View File

@@ -1,7 +1,7 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
import { EntityDTOContainerOfCountryDTO } from './entity-dtocontainer-of-country-dto';
export interface CountryTargetDTO extends TouchedBase {
export interface CountryTargetDTO extends TouchedBase{
isDefault?: string;
start?: string;
stop?: string;

View File

@@ -2,7 +2,7 @@
import { EntityDTOBaseOfCouponDTOAndICoupon } from './entity-dtobase-of-coupon-dtoand-icoupon';
import { CouponType } from './coupon-type';
import { PriceValueDTO } from './price-value-dto';
export interface CouponDTO extends EntityDTOBaseOfCouponDTOAndICoupon {
export interface CouponDTO extends EntityDTOBaseOfCouponDTOAndICoupon{
code?: string;
couponType: CouponType;
discount?: number;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type CouponType = 0 | 1 | 2 | 4 | 8;
export type CouponType = 0 | 1 | 2 | 4 | 8;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type CRUDA = 0 | 1 | 2 | 4 | 8 | 16;
export type CRUDA = 0 | 1 | 2 | 4 | 8 | 16;

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOBaseOfCurrencyDTOAndICurrency } from './entity-dtobase-of-currency-dtoand-icurrency';
export interface CurrencyDTO extends EntityDTOBaseOfCurrencyDTOAndICurrency {
export interface CurrencyDTO extends EntityDTOBaseOfCurrencyDTOAndICurrency{
isO4217?: string;
name?: string;
number?: number;

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
export interface DateRangeDTO extends TouchedBase {
export interface DateRangeDTO extends TouchedBase{
start?: string;
stop?: string;
}

View File

@@ -1,20 +1,2 @@
/* tslint:disable */
export type DeclarableFoodAdditives =
| 0
| 1
| 2
| 4
| 8
| 16
| 32
| 64
| 128
| 256
| 512
| 1024
| 2048
| 4096
| 8192
| 16384
| 32768
| 65536;
export type DeclarableFoodAdditives = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048 | 4096 | 8192 | 16384 | 32768 | 65536;

View File

@@ -5,7 +5,7 @@ import { EntityDTOContainerOfLogisticianDTO } from './entity-dtocontainer-of-log
import { ShippingAddressDTO } from './shipping-address-dto';
import { ShippingTarget } from './shipping-target';
import { EntityDTOContainerOfBranchDTO } from './entity-dtocontainer-of-branch-dto';
export interface DestinationDTO extends EntityDTOBaseOfDestinationDTOAndIDestination {
export interface DestinationDTO extends EntityDTOBaseOfDestinationDTOAndIDestination{
checkout?: EntityDTOContainerOfCheckoutDTO;
logistician?: EntityDTOContainerOfLogisticianDTO;
shippingAddress?: ShippingAddressDTO;

View File

@@ -4,6 +4,7 @@
* Output
*/
export interface DestinationResult {
/**
* Lieferziel kann dem Warenkorb hinzugefügt werden
*/

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type DialogContentType = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128;
export type DialogContentType = 0 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128;

View File

@@ -1,2 +1,2 @@
/* tslint:disable */
export type DialogSettings = 0 | 1 | 2 | 4;
export type DialogSettings = 0 | 1 | 2 | 4;

View File

@@ -1,11 +1,15 @@
/* tslint:disable */
import { CampaignDTO } from './campaign-dto';
import { LoyaltyDTO } from './loyalty-dto';
import { PriceDTO } from './price-dto';
import { PromotionDTO } from './promotion-dto';
import { ShopItemDTO } from './shop-item-dto';
export interface DisplayItemDTO {
accessories?: Array<DisplayItemDTO>;
campaign?: CampaignDTO;
components?: Array<DisplayItemDTO>;
customProductName?: string;
loyalty?: LoyaltyDTO;
price?: PriceDTO;
promotion?: PromotionDTO;
quantity?: number;

View File

@@ -2,7 +2,7 @@
import { TouchedBase } from './touched-base';
import { CRUDA } from './cruda';
import { EntityStatus } from './entity-status';
export interface EntityDTO extends TouchedBase {
export interface EntityDTO extends TouchedBase{
changed?: string;
created?: string;
cruda?: CRUDA;

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfBranchDTOAndIBranch extends EntityDTOBase {}
export interface EntityDTOBaseOfBranchDTOAndIBranch extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCheckoutDeliveryDTOAndICheckoutDelivery extends EntityDTOBase {}
export interface EntityDTOBaseOfCheckoutDeliveryDTOAndICheckoutDelivery extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCheckoutDTOAndICheckout extends EntityDTOBase {}
export interface EntityDTOBaseOfCheckoutDTOAndICheckout extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCheckoutItemDTOAndICheckoutItem extends EntityDTOBase {}
export interface EntityDTOBaseOfCheckoutItemDTOAndICheckoutItem extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCompanyDTOAndICompany extends EntityDTOBase {}
export interface EntityDTOBaseOfCompanyDTOAndICompany extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfComponentsDTOAndIComponents extends EntityDTOBase {}
export interface EntityDTOBaseOfComponentsDTOAndIComponents extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfContributorDTOAndIContributor extends EntityDTOBase {}
export interface EntityDTOBaseOfContributorDTOAndIContributor extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCountryDTOAndICountry extends EntityDTOBase {}
export interface EntityDTOBaseOfCountryDTOAndICountry extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCouponDTOAndICoupon extends EntityDTOBase {}
export interface EntityDTOBaseOfCouponDTOAndICoupon extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfCurrencyDTOAndICurrency extends EntityDTOBase {}
export interface EntityDTOBaseOfCurrencyDTOAndICurrency extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfDestinationDTOAndIDestination extends EntityDTOBase {}
export interface EntityDTOBaseOfDestinationDTOAndIDestination extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfFileDTOAndIFile extends EntityDTOBase {}
export interface EntityDTOBaseOfFileDTOAndIFile extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfItemDTOAndIItem extends EntityDTOBase {}
export interface EntityDTOBaseOfItemDTOAndIItem extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfLabelDTOAndILabel extends EntityDTOBase {}
export interface EntityDTOBaseOfLabelDTOAndILabel extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfLogisticianDTOAndILogistician extends EntityDTOBase {}
export interface EntityDTOBaseOfLogisticianDTOAndILogistician extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfShopDTOAndIShop extends EntityDTOBase {}
export interface EntityDTOBaseOfShopDTOAndIShop extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfShopItemDTOAndIShopItem extends EntityDTOBase {}
export interface EntityDTOBaseOfShopItemDTOAndIShopItem extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfShoppingCartDTOAndIShoppingCart extends EntityDTOBase {}
export interface EntityDTOBaseOfShoppingCartDTOAndIShoppingCart extends EntityDTOBase{
}

View File

@@ -1,3 +0,0 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfShoppingCartItemDTOAndIShoppingCartItem extends EntityDTOBase {}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfSupplierDTOAndISupplier extends EntityDTOBase {}
export interface EntityDTOBaseOfSupplierDTOAndISupplier extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfTenantDTOAndITenant extends EntityDTOBase {}
export interface EntityDTOBaseOfTenantDTOAndITenant extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfTextDTOAndIText extends EntityDTOBase {}
export interface EntityDTOBaseOfTextDTOAndIText extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfVATDTOAndIVAT extends EntityDTOBase {}
export interface EntityDTOBaseOfVATDTOAndIVAT extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTOBase } from './entity-dtobase';
export interface EntityDTOBaseOfVoucherDTOAndIVoucher extends EntityDTOBase {}
export interface EntityDTOBaseOfVoucherDTOAndIVoucher extends EntityDTOBase{
}

View File

@@ -1,3 +1,4 @@
/* tslint:disable */
import { EntityDTO } from './entity-dto';
export interface EntityDTOBase extends EntityDTO {}
export interface EntityDTOBase extends EntityDTO{
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { BranchDTO } from './branch-dto';
export interface EntityDTOContainerOfBranchDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfBranchDTO extends EntityDTOReferenceContainer{
data?: BranchDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CategoryDTO } from './category-dto';
export interface EntityDTOContainerOfCategoryDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCategoryDTO extends EntityDTOReferenceContainer{
data?: CategoryDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CheckoutDeliveryDTO } from './checkout-delivery-dto';
export interface EntityDTOContainerOfCheckoutDeliveryDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCheckoutDeliveryDTO extends EntityDTOReferenceContainer{
data?: CheckoutDeliveryDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CheckoutDTO } from './checkout-dto';
export interface EntityDTOContainerOfCheckoutDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCheckoutDTO extends EntityDTOReferenceContainer{
data?: CheckoutDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CheckoutItemDTO } from './checkout-item-dto';
export interface EntityDTOContainerOfCheckoutItemDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCheckoutItemDTO extends EntityDTOReferenceContainer{
data?: CheckoutItemDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CompanyDTO } from './company-dto';
export interface EntityDTOContainerOfCompanyDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCompanyDTO extends EntityDTOReferenceContainer{
data?: CompanyDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { ComponentsDTO } from './components-dto';
export interface EntityDTOContainerOfComponentsDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfComponentsDTO extends EntityDTOReferenceContainer{
data?: ComponentsDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { ContributorDTO } from './contributor-dto';
export interface EntityDTOContainerOfContributorDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfContributorDTO extends EntityDTOReferenceContainer{
data?: ContributorDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CountryDTO } from './country-dto';
export interface EntityDTOContainerOfCountryDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCountryDTO extends EntityDTOReferenceContainer{
data?: CountryDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CouponDTO } from './coupon-dto';
export interface EntityDTOContainerOfCouponDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCouponDTO extends EntityDTOReferenceContainer{
data?: CouponDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { CurrencyDTO } from './currency-dto';
export interface EntityDTOContainerOfCurrencyDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfCurrencyDTO extends EntityDTOReferenceContainer{
data?: CurrencyDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { DestinationDTO } from './destination-dto';
export interface EntityDTOContainerOfDestinationDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfDestinationDTO extends EntityDTOReferenceContainer{
data?: DestinationDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { FileDTO } from './file-dto';
export interface EntityDTOContainerOfFileDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfFileDTO extends EntityDTOReferenceContainer{
data?: FileDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { ItemDTO } from './item-dto';
export interface EntityDTOContainerOfItemDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfItemDTO extends EntityDTOReferenceContainer{
data?: ItemDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { LabelDTO } from './label-dto';
export interface EntityDTOContainerOfLabelDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfLabelDTO extends EntityDTOReferenceContainer{
data?: LabelDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { LogisticianDTO } from './logistician-dto';
export interface EntityDTOContainerOfLogisticianDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfLogisticianDTO extends EntityDTOReferenceContainer{
data?: LogisticianDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { ShopDTO } from './shop-dto';
export interface EntityDTOContainerOfShopDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfShopDTO extends EntityDTOReferenceContainer{
data?: ShopDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { ShopItemDTO } from './shop-item-dto';
export interface EntityDTOContainerOfShopItemDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfShopItemDTO extends EntityDTOReferenceContainer{
data?: ShopItemDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { ShoppingCartItemDTO } from './shopping-cart-item-dto';
export interface EntityDTOContainerOfShoppingCartItemDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfShoppingCartItemDTO extends EntityDTOReferenceContainer{
data?: ShoppingCartItemDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { SupplierDTO } from './supplier-dto';
export interface EntityDTOContainerOfSupplierDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfSupplierDTO extends EntityDTOReferenceContainer{
data?: SupplierDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { TenantDTO } from './tenant-dto';
export interface EntityDTOContainerOfTenantDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfTenantDTO extends EntityDTOReferenceContainer{
data?: TenantDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { TextDTO } from './text-dto';
export interface EntityDTOContainerOfTextDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfTextDTO extends EntityDTOReferenceContainer{
data?: TextDTO;
}

View File

@@ -1,6 +1,6 @@
/* tslint:disable */
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
import { VoucherDTO } from './voucher-dto';
export interface EntityDTOContainerOfVoucherDTO extends EntityDTOReferenceContainer {
export interface EntityDTOContainerOfVoucherDTO extends EntityDTOReferenceContainer{
data?: VoucherDTO;
}

View File

@@ -1,7 +1,7 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
import { ExternalReferenceDTO } from './external-reference-dto';
export interface EntityDTOReferenceContainer extends TouchedBase {
export interface EntityDTOReferenceContainer extends TouchedBase{
displayLabel?: string;
enabled?: boolean;
externalReference?: ExternalReferenceDTO;

View File

@@ -1,7 +1,7 @@
/* tslint:disable */
import { TouchedBase } from './touched-base';
import { EntityDTOReferenceContainer } from './entity-dtoreference-container';
export interface EntityReferenceDTO extends TouchedBase {
export interface EntityReferenceDTO extends TouchedBase{
pId?: string;
reference?: EntityDTOReferenceContainer;
source?: number;

Some files were not shown because too many files have changed in this diff Show More