Merged PR 1369: #3332 AHFFrist DisplayOrderItemSubsetDTO verwendet

#3332 AHFFrist DisplayOrderItemSubsetDTO verwendet

Related work items: #3332
This commit is contained in:
Andreas Schickinger
2022-08-04 13:38:39 +00:00
committed by Lorenz Hilpert
parent cc1e210799
commit cb2bc8d65b
6 changed files with 49 additions and 16 deletions

View File

@@ -22,7 +22,7 @@ import {
InputDTO,
ItemPayload,
} from '@swagger/checkout';
import { DisplayOrderDTO, OrderCheckoutService, ReorderValues } from '@swagger/oms';
import { DisplayOrderDTO, DisplayOrderItemDTO, OrderCheckoutService, ReorderValues } from '@swagger/oms';
import { isNullOrUndefined, memorize } from '@utils/common';
import { combineLatest, Observable, of, concat, isObservable, throwError } from 'rxjs';
import { bufferCount, catchError, filter, first, map, mergeMap, shareReplay, switchMap, tap, withLatestFrom } from 'rxjs/operators';
@@ -877,6 +877,10 @@ export class DomainCheckoutService {
return this.store.select(DomainCheckoutSelectors.selectOrders);
}
updateOrderItem(item: DisplayOrderItemDTO) {
this.store.dispatch(DomainCheckoutActions.updateOrderItem({ item }));
}
removeAllOrders() {
this.store.dispatch(DomainCheckoutActions.removeAllOrders());
}

View File

@@ -8,7 +8,7 @@ import {
BuyerDTO,
PayerDTO,
} from '@swagger/checkout';
import { DisplayOrderDTO } from '@swagger/oms';
import { DisplayOrderDTO, DisplayOrderItemDTO } from '@swagger/oms';
const prefix = '[DOMAIN-CHECKOUT]';
@@ -52,6 +52,8 @@ export const removeProcess = createAction(`${prefix} Remove Process`, props<{ pr
export const setOrders = createAction(`${prefix} Add Orders`, props<{ orders: DisplayOrderDTO[] }>());
export const updateOrderItem = createAction(`${prefix} Update Orders`, props<{ item: DisplayOrderItemDTO }>());
export const removeAllOrders = createAction(`${prefix} Remove All Orders`);
export const setBuyer = createAction(`${prefix} Set Buyer`, props<{ processId: number; buyer: BuyerDTO }>());

View File

@@ -73,6 +73,25 @@ const _domainCheckoutReducer = createReducer(
}),
on(DomainCheckoutActions.removeProcess, (s, { processId }) => storeCheckoutAdapter.removeOne(processId, s)),
on(DomainCheckoutActions.setOrders, (s, { orders }) => ({ ...s, orders: [...s.orders, ...orders] })),
on(DomainCheckoutActions.updateOrderItem, (s, { item }) => {
const orders = [...s.orders];
const orderToUpdate = orders?.find((order) => order.items?.find((i) => i.id === item?.id));
const orderToUpdateIndex = orders?.indexOf(orderToUpdate);
const orderItemToUpdate = orderToUpdate?.items?.find((i) => i.id === item?.id);
const orderItemToUpdateIndex = orderToUpdate?.items?.indexOf(orderItemToUpdate);
const items = [...orderToUpdate?.items];
items[orderItemToUpdateIndex] = item;
orders[orderToUpdateIndex] = {
...orderToUpdate,
items: [...items],
};
return { ...s, orders: [...orders] };
}),
on(DomainCheckoutActions.removeAllOrders, (s) => ({
...s,
orders: [],

View File

@@ -151,15 +151,10 @@
<ng-template #abholfrist let-order="order">
<div *ngIf="!(changeDateLoader$ | async)" class="inline-flex">
<button
[uiOverlayTrigger]="deadlineDatepicker"
#deadlineDatepickerTrigger="uiOverlayTrigger"
[disabled]="!!orderItem?.features?.paid || (changeDateDisabled$ | async)"
class="cta-pickup-deadline"
>
<button [uiOverlayTrigger]="deadlineDatepicker" #deadlineDatepickerTrigger="uiOverlayTrigger" class="cta-pickup-deadline">
<span class="mx-2">bis</span>
<strong>
{{ ((preferredPickUpDates | async)[order.id] | date: 'dd.MM.yy') || 'Auswählen' }}
{{ ((order?.subsetItems)[0]?.preferredPickUpDate | date: 'dd.MM.yy') || 'Auswählen' }}
</strong>
<ui-icon class="ml-2" [rotate]="deadlineDatepickerTrigger.opened ? '270deg' : '90deg'" icon="arrow_head"></ui-icon>
</button>

View File

@@ -1,4 +1,4 @@
import { Component, ChangeDetectionStrategy, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';
import { DomainCheckoutService } from '@domain/checkout';
import { UiModalService } from '@ui/modal';
import { PrintModalComponent, PrintModalData } from '@modal/printer';
@@ -11,7 +11,7 @@ import { DisplayOrderDTO, DisplayOrderItemDTO } from '@swagger/oms';
import { BreadcrumbService } from '@core/breadcrumb';
import { ApplicationService } from '@core/application';
import { DomainPrinterService } from '@domain/printer';
import { BehaviorSubject, combineLatest, NEVER } from 'rxjs';
import { combineLatest, NEVER, Subject } from 'rxjs';
import { DateAdapter } from '@ui/common';
@Component({
@@ -21,12 +21,11 @@ import { DateAdapter } from '@ui/common';
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class CheckoutSummaryComponent implements OnDestroy {
private _onDestroy$ = new Subject();
processId = Date.now();
today = this.dateAdapter.today();
minDateDatepicker = this.dateAdapter.addCalendarDays(this.dateAdapter.today(), -1);
preferredPickUpDates = new BehaviorSubject<{ [key: string]: string }>({});
displayOrders$ = combineLatest([this.domainCheckoutService.getOrders(), this._route.params]).pipe(
map(([orders, params]) => {
let filteredOrders: DisplayOrderDTO[] = [];
@@ -150,6 +149,9 @@ export class CheckoutSummaryComponent implements OnDestroy {
if (!checkoutProcess) {
this.domainCheckoutService.removeAllOrders();
}
this._onDestroy$.next();
this._onDestroy$.complete();
}
openPrintModal(id: number) {
@@ -173,14 +175,24 @@ export class CheckoutSummaryComponent implements OnDestroy {
item.subsetItems?.map((subsetItem) => subsetItem.id).forEach((id) => (data[`${id}`] = date?.toISOString()));
await this.omsService.setPreferredPickUpDate({ data }).toPromise();
const dates = this.preferredPickUpDates.value;
dates[item.id] = date.toISOString();
this.preferredPickUpDates.next(dates);
this.updateDisplayOrderItem({
...item,
subsetItems: item.subsetItems.map((subsetItem) => {
return {
...subsetItem,
preferredPickUpDate: date.toISOString(),
};
}),
});
} catch (error) {
console.error(error);
}
}
async updateDisplayOrderItem(item: DisplayOrderItemDTO) {
this.domainCheckoutService.updateOrderItem(item);
}
async navigateToGoodsOut() {
let takeNowOrders = await this.takeNowOrders$.pipe(first()).toPromise();
if (takeNowOrders.length != 1) return;

View File

@@ -13,6 +13,7 @@ export interface DisplayOrderItemSubsetDTO extends EntityDTOBaseOfDisplayOrderIt
estimatedShippingDate?: string;
orderItem?: DisplayOrderItemDTO;
orderItemSubsetNumber?: string;
preferredPickUpDate?: string;
processingStatus: OrderItemProcessingStatusValue;
processingStatusDate?: string;
quantity?: number;