diff --git a/apps/domain/oms/src/lib/receipt.service.ts b/apps/domain/oms/src/lib/receipt.service.ts index 3dedf4da0..d94fef488 100644 --- a/apps/domain/oms/src/lib/receipt.service.ts +++ b/apps/domain/oms/src/lib/receipt.service.ts @@ -1,5 +1,7 @@ import { Injectable } from '@angular/core'; import { ReceiptOrderItemSubsetReferenceValues, ReceiptService } from '@swagger/oms'; +import { memorize } from '@utils/common'; +import { shareReplay } from 'rxjs/operators'; @Injectable() export class DomainReceiptService { @@ -9,9 +11,12 @@ export class DomainReceiptService { return this.receiptService.ReceiptCreateShippingNote2(params); } + @memorize({ ttl: 1000 }) getReceipts(payload: ReceiptOrderItemSubsetReferenceValues) { - return this.receiptService.ReceiptGetReceiptsByOrderItemSubset({ - payload: payload, - }); + return this.receiptService + .ReceiptGetReceiptsByOrderItemSubset({ + payload: payload, + }) + .pipe(shareReplay(1)); } } diff --git a/apps/shared/components/goods-in-out/src/lib/goods-in-out-order-details/goods-in-out-order-details-item/goods-in-out-order-details-item.component.ts b/apps/shared/components/goods-in-out/src/lib/goods-in-out-order-details/goods-in-out-order-details-item/goods-in-out-order-details-item.component.ts index 187a23bca..bca54fd73 100644 --- a/apps/shared/components/goods-in-out/src/lib/goods-in-out-order-details/goods-in-out-order-details-item/goods-in-out-order-details-item.component.ts +++ b/apps/shared/components/goods-in-out/src/lib/goods-in-out-order-details/goods-in-out-order-details-item/goods-in-out-order-details-item.component.ts @@ -17,7 +17,7 @@ import { ComponentStore, tapResponse } from '@ngrx/component-store'; import { OrderDTO, OrderItemListItemDTO, ReceiptDTO, ReceiptType } from '@swagger/oms'; import { UiErrorModalComponent, UiMessageModalComponent, UiModalService } from '@ui/modal'; import { isEqual } from 'lodash'; -import { BehaviorSubject, combineLatest, NEVER, Subject } from 'rxjs'; +import { BehaviorSubject, combineLatest, NEVER, Subject, Observable } from 'rxjs'; import { catchError, filter, first, map, switchMap, withLatestFrom, takeUntil, take } from 'rxjs/operators'; import { SharedGoodsInOutOrderDetailsStore } from '../goods-in-out-order-details.store'; @@ -164,11 +164,11 @@ export class SharedGoodsInOutOrderDetailsItemComponent extends ComponentStore - $.pipe( + loadReceipts = this.effect((done$: Observable<(receipts: ReceiptDTO[]) => void | undefined>) => + done$.pipe( withLatestFrom(this.orderItem$), filter(([_, orderItem]) => !!orderItem), - switchMap(([_, orderItem]) => + switchMap(([done, orderItem]) => this._domainReceiptService .getReceipts({ receiptType: 65 as ReceiptType, @@ -178,9 +178,18 @@ export class SharedGoodsInOutOrderDetailsItemComponent extends ComponentStore { - this.receipts = res.result.map((r) => r.item3?.data).filter((f) => !!f); + const receipts = res.result.map((r) => r.item3?.data).filter((f) => !!f); + this.receipts = receipts; + + if (typeof done === 'function') { + done?.(receipts); + } + }, + (err) => { + if (typeof done === 'function') { + done?.([]); + } }, - (err) => {}, () => {} ) ) @@ -209,7 +218,7 @@ export class SharedGoodsInOutOrderDetailsItemComponent extends ComponentStore + new Promise((resolve) => { + timeComponent.loadReceipts((r) => resolve(r)); + }) + ); + + receipts = await Promise.all(receiptsPromise).then((r) => r.flat()); + + receipts = unionBy(receipts, 'id'); + } // #2737 Bei Zubuchen kein Abholfachzettel ausdrucken let command = action.command; @@ -179,7 +193,7 @@ export class SharedGoodsInOutOrderDetailsComponent extends SharedGoodsInOutOrder compartmentCode: action.command.includes('PRINT_PRICEDIFFQRCODELABEL') && !compartmentCode ? this.orderItems[0]?.compartmentCode : compartmentCode, itemQuantity: this.getItemQuantityMap(), - receipts: this.receipts, + receipts, }; try { commandData = await this.commandService.handleCommand(command, commandData);