@spartacus/order
Version:
Order feature library for Spartacus
720 lines (701 loc) • 162 kB
JavaScript
import * as i0 from '@angular/core';
import { Component, ChangeDetectionStrategy, Input, HostBinding, NgModule, Injectable, HostListener, ViewChild } from '@angular/core';
import * as i1 from '@spartacus/core';
import { UrlModule, I18nModule, FeaturesConfigModule, GlobalMessageType, provideDefaultConfig, AuthGuard, PromotionLocation, isNotUndefined, provideConfig } from '@spartacus/core';
import * as i3 from '@angular/router';
import { RouterModule } from '@angular/router';
import * as i4 from '@angular/common';
import { CommonModule, formatCurrency, getCurrencySymbol } from '@angular/common';
import * as i5 from '@angular/forms';
import { FormGroup, FormControl, Validators, ReactiveFormsModule, FormsModule } from '@angular/forms';
import { map, distinctUntilChanged, tap, shareReplay, switchMap, filter, first, take, startWith } from 'rxjs/operators';
import * as i2 from '@spartacus/order/root';
import * as i3$1 from '@spartacus/storefront';
import { MediaModule, ItemCounterModule, FormErrorsModule, CartSharedModule, CardModule, PromotionsModule, OrderOverviewModule, SpinnerModule, OrderDetailsServiceTransitionalToken, ListNavigationModule, KeyboardFocusModule, DIALOG_TYPE } from '@spartacus/storefront';
import * as i1$1 from '@ng-bootstrap/ng-bootstrap';
import { NgSelectModule } from '@ng-select/ng-select';
import { combineLatest, Subscription } from 'rxjs';
class AmendOrderActionsComponent {
constructor(routingService) {
this.routingService = routingService;
this.styles = 'row';
}
continue(event) {
if (this.amendOrderForm.valid) {
this.routingService.go({
cxRoute: this.forwardRoute,
params: { code: this.orderCode },
});
}
else {
this.amendOrderForm.markAllAsTouched();
event.stopPropagation();
}
}
}
AmendOrderActionsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderActionsComponent, deps: [{ token: i1.RoutingService }], target: i0.ɵɵFactoryTarget.Component });
AmendOrderActionsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: AmendOrderActionsComponent, selector: "cx-amend-order-actions", inputs: { orderCode: "orderCode", amendOrderForm: "amendOrderForm", backRoute: "backRoute", forwardRoute: "forwardRoute" }, host: { properties: { "class": "this.styles" } }, ngImport: i0, template: "<div class=\"col-xs-12 col-md-4 col-lg-3\">\n <a\n [routerLink]=\"\n {\n cxRoute: backRoute,\n params: { code: orderCode }\n } | cxUrl\n \"\n class=\"btn btn-block btn-action\"\n >\n {{ 'common.back' | cxTranslate }}\n </a>\n</div>\n<div class=\"col-xs-12 col-md-4 col-lg-3\">\n <button\n *ngIf=\"forwardRoute\"\n class=\"btn btn-block btn-primary\"\n (click)=\"continue($event)\"\n >\n {{ 'common.continue' | cxTranslate }}\n </button>\n\n <button *ngIf=\"!forwardRoute\" class=\"btn btn-block btn-primary\" type=\"submit\">\n {{ 'orderDetails.cancellationAndReturn.submit' | cxTranslate }}\n </button>\n</div>\n", directives: [{ type: i3.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["routerLink", "target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "cxUrl": i1.UrlPipe, "cxTranslate": i1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderActionsComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-amend-order-actions',
templateUrl: './amend-order-actions.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: i1.RoutingService }]; }, propDecorators: { orderCode: [{
type: Input
}], amendOrderForm: [{
type: Input
}], backRoute: [{
type: Input
}], forwardRoute: [{
type: Input
}], styles: [{
type: HostBinding,
args: ['class']
}] } });
class AmendOrderActionsModule {
}
AmendOrderActionsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderActionsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
AmendOrderActionsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderActionsModule, declarations: [AmendOrderActionsComponent], imports: [CommonModule, RouterModule, UrlModule, I18nModule], exports: [AmendOrderActionsComponent] });
AmendOrderActionsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderActionsModule, imports: [[CommonModule, RouterModule, UrlModule, I18nModule]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderActionsModule, decorators: [{
type: NgModule,
args: [{
imports: [CommonModule, RouterModule, UrlModule, I18nModule],
declarations: [AmendOrderActionsComponent],
exports: [AmendOrderActionsComponent],
}]
}] });
var AmendOrderType;
(function (AmendOrderType) {
AmendOrderType[AmendOrderType["CANCEL"] = 0] = "CANCEL";
AmendOrderType[AmendOrderType["RETURN"] = 1] = "RETURN";
})(AmendOrderType || (AmendOrderType = {}));
class OrderDetailsService {
constructor(userOrderService, routingService) {
this.userOrderService = userOrderService;
this.routingService = routingService;
this.orderCode$ = this.routingService.getRouterState().pipe(map((routingData) => routingData.state.params.orderCode), distinctUntilChanged());
this.orderLoad$ = this.orderCode$.pipe(tap((orderCode) => {
if (orderCode) {
this.userOrderService.loadOrderDetails(orderCode);
}
else {
this.userOrderService.clearOrderDetails();
}
}), shareReplay({ bufferSize: 1, refCount: true }));
}
getOrderDetails() {
return this.orderLoad$.pipe(switchMap(() => this.userOrderService.getOrderDetails()));
}
}
OrderDetailsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderDetailsService, deps: [{ token: i2.OrderFacade }, { token: i1.RoutingService }], target: i0.ɵɵFactoryTarget.Injectable });
OrderDetailsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderDetailsService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderDetailsService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: i2.OrderFacade }, { type: i1.RoutingService }]; } });
function ValidateQuantityToCancel(control) {
if (!control.value) {
return null;
}
const quantity = Object.values(control.value).reduce((acc, val) => acc + val, 0);
return quantity > 0 ? null : { cxNoSelectedItemToCancel: true };
}
class OrderAmendService {
constructor(orderDetailsService) {
this.orderDetailsService = orderDetailsService;
}
/**
* Returns entries with an amended quantity.
*/
getAmendedEntries() {
return this.getForm().pipe(switchMap((form) => {
return this.getEntries().pipe(map((entries) => entries.filter((entry) => this.getFormControl(form, entry).value > 0)));
}));
}
getOrder() {
return this.orderDetailsService.getOrderDetails();
}
/**
* returns the form with form data at runtime
*/
getForm() {
return this.getOrder().pipe(tap((order) => {
var _a;
if (!this.form || ((_a = this.form.get('orderCode')) === null || _a === void 0 ? void 0 : _a.value) !== order.code) {
this.buildForm(order);
}
}), map(() => this.form));
}
buildForm(order) {
this.form = new FormGroup({});
this.form.addControl('orderCode', new FormControl(order.code));
const entryGroup = new FormGroup({}, { validators: [ValidateQuantityToCancel] });
this.form.addControl('entries', entryGroup);
(order.entries || []).forEach((entry) => {
var _a, _b;
const key = (_b = (_a = entry === null || entry === void 0 ? void 0 : entry.entryNumber) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '';
entryGroup.addControl(key, new FormControl(0, {
validators: [
Validators.min(0),
Validators.max(this.getMaxAmendQuantity(entry)),
],
}));
});
}
getFormControl(form, entry) {
var _a, _b, _c;
return ((_a = form.get('entries')) === null || _a === void 0 ? void 0 : _a.get((_c = (_b = entry.entryNumber) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : ''));
}
/**
* As discussed, this calculation is moved to SPA side.
* The calculation and validation should be in backend facade layer.
*/
getAmendedPrice(entry) {
var _a, _b, _c;
const amendedQuantity = this.getFormControl(this.form, entry).value;
const amendedPrice = Object.assign({}, entry.basePrice);
amendedPrice.value =
Math.round(((_b = (_a = entry.basePrice) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : 0) * amendedQuantity * 100) / 100;
amendedPrice.formattedValue = formatCurrency(amendedPrice.value,
// TODO: user current language
'en', getCurrencySymbol((_c = amendedPrice.currencyIso) !== null && _c !== void 0 ? _c : '', 'narrow'), amendedPrice.currencyIso);
return amendedPrice;
}
getMaxAmendQuantity(entry) {
return ((this.isCancellation()
? entry.cancellableQuantity
: entry.returnableQuantity) ||
entry.quantity ||
0);
}
isCancellation() {
return this.amendType === AmendOrderType.CANCEL;
}
}
OrderAmendService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderAmendService, deps: [{ token: OrderDetailsService }], target: i0.ɵɵFactoryTarget.Injectable });
OrderAmendService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderAmendService });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderAmendService, decorators: [{
type: Injectable
}], ctorParameters: function () { return [{ type: OrderDetailsService }]; } });
class CancelOrReturnItemsComponent {
constructor(orderAmendService) {
this.orderAmendService = orderAmendService;
this.isConfirmation = false;
this.form$ = this.orderAmendService.getForm();
}
getControl(form, entry) {
var _a, _b, _c;
const control = ((_a = form.get('entries')) === null || _a === void 0 ? void 0 : _a.get((_c = (_b = entry.entryNumber) === null || _b === void 0 ? void 0 : _b.toString()) !== null && _c !== void 0 ? _c : ''));
return control;
}
setAll(form) {
this.entries.forEach((entry) => this.getControl(form, entry).setValue(this.getMaxAmendQuantity(entry)));
}
getItemPrice(entry) {
return this.orderAmendService.getAmendedPrice(entry);
}
getMaxAmendQuantity(entry) {
return this.orderAmendService.getMaxAmendQuantity(entry);
}
isCancellation() {
return this.orderAmendService.isCancellation();
}
}
CancelOrReturnItemsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrReturnItemsComponent, deps: [{ token: OrderAmendService }], target: i0.ɵɵFactoryTarget.Component });
CancelOrReturnItemsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: CancelOrReturnItemsComponent, selector: "cx-amend-order-items", inputs: { entries: "entries", isConfirmation: "isConfirmation" }, ngImport: i0, template: "<div *ngIf=\"form$ | async as form\">\n <button\n *ngIf=\"!isConfirmation\"\n class=\"btn btn-link cx-action-link\"\n (click)=\"setAll(form)\"\n >\n {{ 'orderDetails.cancellationAndReturn.setAll' | cxTranslate }}\n </button>\n\n <div class=\"d-none d-md-block cx-item-list-header\">\n <div class=\"row\">\n <div class=\"text-left col-6\">\n {{ 'orderDetails.cancellationAndReturn.item' | cxTranslate }}\n </div>\n <div class=\"text-center col-2\">\n {{ 'orderDetails.cancellationAndReturn.itemPrice' | cxTranslate }}\n </div>\n <div *ngIf=\"!isConfirmation\" class=\"text-center col-2\">\n {{ 'orderDetails.cancellationAndReturn.quantity' | cxTranslate }}\n </div>\n <div class=\"cx-item-list-qty col-2 text-right\">\n {{\n (isCancellation()\n ? 'orderDetails.cancellationAndReturn.cancelQty'\n : 'orderDetails.cancellationAndReturn.returnQty'\n ) | cxTranslate\n }}\n </div>\n <div *ngIf=\"isConfirmation\" class=\"cx-item-list-total col-2\">\n {{ 'orderDetails.cancellationAndReturn.totalPrice' | cxTranslate }}\n </div>\n </div>\n </div>\n\n <div class=\"cx-item-list-row\" *ngFor=\"let item of entries; let i = index\">\n <div class=\"row cx-item-list-items\">\n <!-- Item Image -->\n <cx-media\n class=\"col-2\"\n [container]=\"item.product.images?.PRIMARY\"\n format=\"thumbnail\"\n ></cx-media>\n\n <!-- Item Information -->\n <div class=\"cx-info col-10\">\n <div class=\"cx-info-container row\">\n <!-- Item Description -->\n <div class=\"col-md-4 col-xl-5 cx-list-item-desc\">\n <div *ngIf=\"item.product.name\" class=\"cx-name\">\n {{ item.product.name }}\n </div>\n <div *ngIf=\"item.product.code\" class=\"cx-code\">\n {{ 'cartItems.id' | cxTranslate }} {{ item.product.code }}\n </div>\n <!-- Variants -->\n <ng-container *ngIf=\"item.product.baseOptions?.length\">\n <div\n *ngFor=\"\n let variant of item.product.baseOptions[0]?.selected\n ?.variantOptionQualifiers\n \"\n class=\"cx-property\"\n >\n <div class=\"cx-label\" *ngIf=\"variant.name\">\n {{ variant.name }}:\n </div>\n <div class=\"cx-value\" *ngIf=\"variant.value\">\n {{ variant.value }}\n </div>\n </div>\n </ng-container>\n </div>\n <!-- Price -->\n <div\n *ngIf=\"item.basePrice\"\n class=\"cx-price col-md-3 col-lg-3 col-xl-2\"\n >\n <div class=\"cx-label d-block d-md-none d-lg-none d-xl-none\">\n {{ 'orderDetails.cancellationAndReturn.itemPrice' | cxTranslate }}\n </div>\n <div *ngIf=\"item.basePrice\" class=\"cx-value\">\n {{ item.basePrice?.formattedValue }}\n </div>\n </div>\n <!-- item Quantity -->\n <div *ngIf=\"!isConfirmation\" class=\"cx-request-qty col-md-3\">\n <div\n class=\"cx-label d-block d-md-none d-lg-none d-xl-none\"\n placement=\"left\"\n title=\"{{ 'cartItems.quantityTitle' | cxTranslate }}\"\n >\n {{ 'orderDetails.cancellationAndReturn.quantity' | cxTranslate }}\n </div>\n <div class=\"cx-value\">\n {{ getMaxAmendQuantity(item) }}\n </div>\n </div>\n <!-- Amended Quantity -->\n <div class=\"cx-quantity col-xs-12 col-md-2 col-sm-12\">\n <div class=\"cx-label d-block d-md-none d-lg-none d-xl-none\">\n {{\n (isCancellation()\n ? 'orderDetails.cancellationAndReturn.cancelQty'\n : 'orderDetails.cancellationAndReturn.returnQty'\n ) | cxTranslate\n }}\n </div>\n\n <div\n *ngIf=\"isConfirmation\"\n class=\"w-100 text-center cx-order-quantity-value\"\n >\n {{ getControl(form, item).value }}\n </div>\n <cx-item-counter\n *ngIf=\"!isConfirmation\"\n [min]=\"0\"\n [max]=\"getMaxAmendQuantity(item)\"\n [control]=\"getControl(form, item)\"\n >\n </cx-item-counter>\n </div>\n <!-- Total Price -->\n <div *ngIf=\"isConfirmation\" class=\"cx-total col-3\">\n <div class=\"cx-label d-block d-md-none\">\n {{\n 'orderDetails.cancellationAndReturn.totalPrice' | cxTranslate\n }}\n </div>\n <div class=\"cx-value\">\n {{ getItemPrice(item)?.formattedValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", components: [{ type: i3$1.MediaComponent, selector: "cx-media", inputs: ["container", "format", "alt", "role", "loading"], outputs: ["loaded"] }, { type: i3$1.ItemCounterComponent, selector: "cx-item-counter", inputs: ["control", "min", "max", "step", "allowZero", "readonly"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i4.AsyncPipe, "cxTranslate": i1.TranslatePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrReturnItemsComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-amend-order-items',
templateUrl: './amend-order-items.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: OrderAmendService }]; }, propDecorators: { entries: [{
type: Input
}], isConfirmation: [{
type: Input
}] } });
class AmendOrderItemsModule {
}
AmendOrderItemsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderItemsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
AmendOrderItemsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderItemsModule, declarations: [CancelOrReturnItemsComponent], imports: [CommonModule,
ReactiveFormsModule,
I18nModule,
MediaModule,
ItemCounterModule,
FeaturesConfigModule,
FormErrorsModule], exports: [CancelOrReturnItemsComponent] });
AmendOrderItemsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderItemsModule, imports: [[
CommonModule,
ReactiveFormsModule,
I18nModule,
MediaModule,
ItemCounterModule,
FeaturesConfigModule,
FormErrorsModule,
]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: AmendOrderItemsModule, decorators: [{
type: NgModule,
args: [{
imports: [
CommonModule,
ReactiveFormsModule,
I18nModule,
MediaModule,
ItemCounterModule,
FeaturesConfigModule,
FormErrorsModule,
],
declarations: [CancelOrReturnItemsComponent],
exports: [CancelOrReturnItemsComponent],
}]
}] });
class CancelOrderConfirmationComponent {
constructor(orderAmendService) {
this.orderAmendService = orderAmendService;
this.form$ = this.orderAmendService
.getForm()
.pipe(tap((form) => (this.orderCode = form.value.orderCode)));
this.entries$ = this.orderAmendService.getAmendedEntries();
}
submit(form) {
if (form.valid) {
this.orderAmendService.save();
}
else {
form.markAllAsTouched();
}
}
}
CancelOrderConfirmationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderConfirmationComponent, deps: [{ token: OrderAmendService }], target: i0.ɵɵFactoryTarget.Component });
CancelOrderConfirmationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: CancelOrderConfirmationComponent, selector: "cx-cancel-order-confirmation", ngImport: i0, template: "<form\n *ngIf=\"form$ | async as form\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submit(form)\"\n>\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <cx-amend-order-items\n *ngIf=\"entries$ | async as entries\"\n [entries]=\"entries\"\n [isConfirmation]=\"true\"\n >\n </cx-amend-order-items>\n\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <ng-template #actions>\n <cx-amend-order-actions\n *ngIf=\"orderCode\"\n [orderCode]=\"orderCode\"\n [amendOrderForm]=\"form\"\n backRoute=\"orderCancel\"\n ></cx-amend-order-actions>\n </ng-template>\n</form>\n", components: [{ type: CancelOrReturnItemsComponent, selector: "cx-amend-order-items", inputs: ["entries", "isConfirmation"] }, { type: AmendOrderActionsComponent, selector: "cx-amend-order-actions", inputs: ["orderCode", "amendOrderForm", "backRoute", "forwardRoute"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderConfirmationComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-cancel-order-confirmation',
templateUrl: './cancel-order-confirmation.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: OrderAmendService }]; } });
class OrderCancellationService extends OrderAmendService {
constructor(orderDetailsService, userOrderService, routing, globalMessageService) {
super(orderDetailsService);
this.orderDetailsService = orderDetailsService;
this.userOrderService = userOrderService;
this.routing = routing;
this.globalMessageService = globalMessageService;
this.amendType = AmendOrderType.CANCEL;
}
/**
* Return cancellable order entries.
*/
getEntries() {
return this.getOrder().pipe(filter((order) => !!(order === null || order === void 0 ? void 0 : order.entries)), map((order) => {
var _a, _b;
return (_b = (_a = order.entries) === null || _a === void 0 ? void 0 : _a.filter((entry) => entry.entryNumber !== -1 &&
entry.cancellableQuantity &&
entry.cancellableQuantity > 0)) !== null && _b !== void 0 ? _b : [];
}));
}
save() {
const orderCode = this.form.value.orderCode;
const entries = this.form.value.entries;
const inputs = Object.keys(entries)
.filter((entryNumber) => entries[entryNumber] > 0)
.map((entryNumber) => ({
orderEntryNumber: Number(entryNumber),
quantity: entries[entryNumber],
}));
this.form.reset();
this.userOrderService.cancelOrder(orderCode, {
cancellationRequestEntryInputs: inputs,
});
this.userOrderService
.getCancelOrderSuccess()
.pipe(first(Boolean))
.subscribe(() => this.afterSave(orderCode));
}
afterSave(orderCode) {
this.userOrderService.resetCancelOrderProcessState();
this.globalMessageService.add({
key: 'orderDetails.cancellationAndReturn.cancelSuccess',
params: { orderCode },
}, GlobalMessageType.MSG_TYPE_CONFIRMATION);
this.routing.go({
cxRoute: 'orders',
});
}
}
OrderCancellationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationService, deps: [{ token: OrderDetailsService }, { token: i2.OrderFacade }, { token: i1.RoutingService }, { token: i1.GlobalMessageService }], target: i0.ɵɵFactoryTarget.Injectable });
OrderCancellationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: OrderDetailsService }, { type: i2.OrderFacade }, { type: i1.RoutingService }, { type: i1.GlobalMessageService }]; } });
class OrderCancellationGuard {
constructor(orderAmendService, semanticPathService, router) {
this.orderAmendService = orderAmendService;
this.semanticPathService = semanticPathService;
this.router = router;
}
canActivate() {
return this.orderAmendService.getForm().pipe(map((form) => {
if (!form.valid) {
// the order code is not available in the route
// as long as we're inside a guard, hence we redirect
// to the common orders page.
return this.router.parseUrl(this.semanticPathService.get('orders'));
}
else {
return true;
}
}));
}
}
OrderCancellationGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationGuard, deps: [{ token: OrderCancellationService }, { token: i1.SemanticPathService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
OrderCancellationGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationGuard, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationGuard, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: OrderCancellationService }, { type: i1.SemanticPathService }, { type: i3.Router }]; } });
class CancelOrderConfirmationModule {
}
CancelOrderConfirmationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderConfirmationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
CancelOrderConfirmationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderConfirmationModule, declarations: [CancelOrderConfirmationComponent], imports: [CommonModule,
ReactiveFormsModule,
AmendOrderItemsModule,
AmendOrderActionsModule], exports: [CancelOrderConfirmationComponent] });
CancelOrderConfirmationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderConfirmationModule, providers: [
provideDefaultConfig({
cmsComponents: {
CancelOrderConfirmationComponent: {
component: CancelOrderConfirmationComponent,
guards: [AuthGuard, OrderCancellationGuard],
providers: [
{
provide: OrderAmendService,
useExisting: OrderCancellationService,
},
],
},
},
}),
], imports: [[
CommonModule,
ReactiveFormsModule,
AmendOrderItemsModule,
AmendOrderActionsModule,
]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderConfirmationModule, decorators: [{
type: NgModule,
args: [{
imports: [
CommonModule,
ReactiveFormsModule,
AmendOrderItemsModule,
AmendOrderActionsModule,
],
providers: [
provideDefaultConfig({
cmsComponents: {
CancelOrderConfirmationComponent: {
component: CancelOrderConfirmationComponent,
guards: [AuthGuard, OrderCancellationGuard],
providers: [
{
provide: OrderAmendService,
useExisting: OrderCancellationService,
},
],
},
},
}),
],
declarations: [CancelOrderConfirmationComponent],
exports: [CancelOrderConfirmationComponent],
}]
}] });
class CancelOrderComponent {
constructor(orderAmendService) {
this.orderAmendService = orderAmendService;
this.form$ = this.orderAmendService
.getForm()
.pipe(tap((form) => (this.orderCode = form.value.orderCode)));
this.entries$ = this.orderAmendService.getEntries();
}
}
CancelOrderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderComponent, deps: [{ token: OrderAmendService }], target: i0.ɵɵFactoryTarget.Component });
CancelOrderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: CancelOrderComponent, selector: "cx-cancel-order", ngImport: i0, template: "<ng-container *ngIf=\"form$ | async as form\">\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <cx-amend-order-items *ngIf=\"entries$ | async as entries\" [entries]=\"entries\">\n </cx-amend-order-items>\n\n <cx-form-errors\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [control]=\"form.get('entries')\"\n ></cx-form-errors>\n\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <ng-template #actions>\n <cx-amend-order-actions\n *ngIf=\"orderCode\"\n [orderCode]=\"orderCode\"\n [amendOrderForm]=\"form\"\n backRoute=\"orderDetails\"\n forwardRoute=\"orderCancelConfirmation\"\n ></cx-amend-order-actions>\n </ng-template>\n</ng-container>\n", components: [{ type: CancelOrReturnItemsComponent, selector: "cx-amend-order-items", inputs: ["entries", "isConfirmation"] }, { type: i3$1.FormErrorsComponent, selector: "cx-form-errors", inputs: ["prefix", "translationParams", "control"] }, { type: AmendOrderActionsComponent, selector: "cx-amend-order-actions", inputs: ["orderCode", "amendOrderForm", "backRoute", "forwardRoute"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-cancel-order',
templateUrl: './cancel-order.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: OrderAmendService }]; } });
class CancelOrderModule {
}
CancelOrderModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
CancelOrderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderModule, declarations: [CancelOrderComponent], imports: [CommonModule,
AmendOrderItemsModule,
AmendOrderActionsModule,
FormErrorsModule], exports: [CancelOrderComponent] });
CancelOrderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderModule, providers: [
provideDefaultConfig({
cmsComponents: {
CancelOrderComponent: {
component: CancelOrderComponent,
guards: [AuthGuard],
providers: [
{
provide: OrderAmendService,
useExisting: OrderCancellationService,
},
],
},
},
}),
], imports: [[
CommonModule,
AmendOrderItemsModule,
AmendOrderActionsModule,
FormErrorsModule,
]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: CancelOrderModule, decorators: [{
type: NgModule,
args: [{
imports: [
CommonModule,
AmendOrderItemsModule,
AmendOrderActionsModule,
FormErrorsModule,
],
providers: [
provideDefaultConfig({
cmsComponents: {
CancelOrderComponent: {
component: CancelOrderComponent,
guards: [AuthGuard],
providers: [
{
provide: OrderAmendService,
useExisting: OrderCancellationService,
},
],
},
},
}),
],
declarations: [CancelOrderComponent],
exports: [CancelOrderComponent],
}]
}] });
class OrderCancellationModule {
}
OrderCancellationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
OrderCancellationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationModule, imports: [CancelOrderModule, CancelOrderConfirmationModule] });
OrderCancellationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationModule, imports: [[CancelOrderModule, CancelOrderConfirmationModule]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderCancellationModule, decorators: [{
type: NgModule,
args: [{
imports: [CancelOrderModule, CancelOrderConfirmationModule],
}]
}] });
class OrderReturnService extends OrderAmendService {
constructor(orderDetailsService, returnRequestService, routing, globalMessageService) {
super(orderDetailsService);
this.orderDetailsService = orderDetailsService;
this.returnRequestService = returnRequestService;
this.routing = routing;
this.globalMessageService = globalMessageService;
this.amendType = AmendOrderType.RETURN;
}
getEntries() {
return this.getOrder().pipe(filter((order) => !!order.entries), map((order) => {
var _a, _b;
return (_b = (_a = order.entries) === null || _a === void 0 ? void 0 : _a.filter((entry) => entry.entryNumber !== -1 &&
entry.returnableQuantity &&
entry.returnableQuantity > 0)) !== null && _b !== void 0 ? _b : [];
}));
}
save() {
const orderCode = this.form.value.orderCode;
const entries = this.form.value.entries;
const inputs = Object.keys(entries)
.filter((entryNumber) => entries[entryNumber] > 0)
.map((entryNumber) => ({
orderEntryNumber: Number(entryNumber),
quantity: entries[entryNumber],
}));
this.form.reset();
this.returnRequestService.createOrderReturnRequest({
orderCode,
returnRequestEntryInputs: inputs,
});
this.returnRequestService
.getReturnRequestSuccess()
.pipe(first(Boolean))
.subscribe(() => this.afterSave());
}
afterSave() {
this.returnRequestService
.getOrderReturnRequest()
.pipe(first((r) => !!r))
.subscribe((returnRequest) => {
const rma = returnRequest.rma;
this.globalMessageService.add({
key: 'orderDetails.cancellationAndReturn.returnSuccess',
params: { rma },
}, GlobalMessageType.MSG_TYPE_CONFIRMATION);
this.routing.go({
cxRoute: 'returnRequestDetails',
params: { rma },
});
});
}
}
OrderReturnService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderReturnService, deps: [{ token: OrderDetailsService }, { token: i2.OrderReturnRequestFacade }, { token: i1.RoutingService }, { token: i1.GlobalMessageService }], target: i0.ɵɵFactoryTarget.Injectable });
OrderReturnService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderReturnService, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderReturnService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: OrderDetailsService }, { type: i2.OrderReturnRequestFacade }, { type: i1.RoutingService }, { type: i1.GlobalMessageService }]; } });
class OrderReturnGuard {
constructor(orderAmendService, semanticPathService, router) {
this.orderAmendService = orderAmendService;
this.semanticPathService = semanticPathService;
this.router = router;
}
canActivate() {
return this.orderAmendService.getForm().pipe(map((form) => {
if (!form.valid) {
// the order code is not available in the route
// as long as we're inside a guard, hence we redirect
// to the common orders page.
return this.router.parseUrl(this.semanticPathService.get('orders'));
}
else {
return true;
}
}));
}
}
OrderReturnGuard.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderReturnGuard, deps: [{ token: OrderReturnService }, { token: i1.SemanticPathService }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Injectable });
OrderReturnGuard.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderReturnGuard, providedIn: 'root' });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: OrderReturnGuard, decorators: [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], ctorParameters: function () { return [{ type: OrderReturnService }, { type: i1.SemanticPathService }, { type: i3.Router }]; } });
class ReturnOrderConfirmationComponent {
constructor(orderAmendService) {
this.orderAmendService = orderAmendService;
this.form$ = this.orderAmendService
.getForm()
.pipe(tap((form) => (this.orderCode = form.value.orderCode)));
this.entries$ = this.orderAmendService.getAmendedEntries();
}
submit(form) {
form.disable();
this.orderAmendService.save();
}
}
ReturnOrderConfirmationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderConfirmationComponent, deps: [{ token: OrderAmendService }], target: i0.ɵɵFactoryTarget.Component });
ReturnOrderConfirmationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: ReturnOrderConfirmationComponent, selector: "cx-return-order-confirmation", ngImport: i0, template: "<form\n *ngIf=\"form$ | async as form\"\n [formGroup]=\"form\"\n (ngSubmit)=\"submit(form)\"\n>\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <cx-amend-order-items\n *ngIf=\"entries$ | async as entries\"\n [entries]=\"entries\"\n [isConfirmation]=\"true\"\n >\n </cx-amend-order-items>\n\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <ng-template #actions>\n <cx-amend-order-actions\n *ngIf=\"orderCode\"\n [orderCode]=\"orderCode\"\n [amendOrderForm]=\"form\"\n backRoute=\"orderReturn\"\n ></cx-amend-order-actions>\n </ng-template>\n</form>\n", components: [{ type: CancelOrReturnItemsComponent, selector: "cx-amend-order-items", inputs: ["entries", "isConfirmation"] }, { type: AmendOrderActionsComponent, selector: "cx-amend-order-actions", inputs: ["orderCode", "amendOrderForm", "backRoute", "forwardRoute"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderConfirmationComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-return-order-confirmation',
templateUrl: './return-order-confirmation.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
}]
}], ctorParameters: function () { return [{ type: OrderAmendService }]; } });
class ReturnOrderConfirmationModule {
}
ReturnOrderConfirmationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderConfirmationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
ReturnOrderConfirmationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderConfirmationModule, declarations: [ReturnOrderConfirmationComponent], imports: [CommonModule,
AmendOrderItemsModule,
I18nModule,
ReactiveFormsModule,
AmendOrderActionsModule], exports: [ReturnOrderConfirmationComponent] });
ReturnOrderConfirmationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderConfirmationModule, providers: [
provideDefaultConfig({
cmsComponents: {
ReturnOrderConfirmationComponent: {
component: ReturnOrderConfirmationComponent,
guards: [AuthGuard, OrderReturnGuard],
providers: [
{
provide: OrderAmendService,
useExisting: OrderReturnService,
},
],
},
},
}),
], imports: [[
CommonModule,
AmendOrderItemsModule,
I18nModule,
ReactiveFormsModule,
AmendOrderActionsModule,
]] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderConfirmationModule, decorators: [{
type: NgModule,
args: [{
imports: [
CommonModule,
AmendOrderItemsModule,
I18nModule,
ReactiveFormsModule,
AmendOrderActionsModule,
],
providers: [
provideDefaultConfig({
cmsComponents: {
ReturnOrderConfirmationComponent: {
component: ReturnOrderConfirmationComponent,
guards: [AuthGuard, OrderReturnGuard],
providers: [
{
provide: OrderAmendService,
useExisting: OrderReturnService,
},
],
},
},
}),
],
declarations: [ReturnOrderConfirmationComponent],
exports: [ReturnOrderConfirmationComponent],
}]
}] });
class ReturnOrderComponent {
constructor(orderAmendService) {
this.orderAmendService = orderAmendService;
this.form$ = this.orderAmendService
.getForm()
.pipe(tap((form) => (this.orderCode = form.value.orderCode)));
this.entries$ = this.orderAmendService.getEntries();
}
}
ReturnOrderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderComponent, deps: [{ token: OrderAmendService }], target: i0.ɵɵFactoryTarget.Component });
ReturnOrderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.0.5", type: ReturnOrderComponent, selector: "cx-return-order", ngImport: i0, template: "<ng-container *ngIf=\"form$ | async as form\">\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <cx-amend-order-items *ngIf=\"entries$ | async as entries\" [entries]=\"entries\">\n </cx-amend-order-items>\n\n <cx-form-errors\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n [control]=\"form.get('entries')\"\n ></cx-form-errors>\n\n <ng-container *ngTemplateOutlet=\"actions\"></ng-container>\n\n <ng-template #actions>\n <cx-amend-order-actions\n *ngIf=\"orderCode\"\n [orderCode]=\"orderCode\"\n [amendOrderForm]=\"form\"\n backRoute=\"orderDetails\"\n forwardRoute=\"orderReturnConfirmation\"\n ></cx-amend-order-actions>\n </ng-template>\n</ng-container>\n", components: [{ type: CancelOrReturnItemsComponent, selector: "cx-amend-order-items", inputs: ["entries", "isConfirmation"] }, { type: i3$1.FormErrorsComponent, selector: "cx-form-errors", inputs: ["prefix", "translationParams", "control"] }, { type: AmendOrderActionsComponent, selector: "cx-amend-order-actions", inputs: ["orderCode", "amendOrderForm", "backRoute", "forwardRoute"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i4.AsyncPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.0.5", ngImport: i0, type: ReturnOrderComponent, decorators: [{
type: Component,
args: [{
selector: 'cx-return-order',
template