File

feature-libs/order/components/amend-order/cancellations/order-cancellation.service.ts

Extends

OrderAmendService

Index

Properties
Methods

Constructor

constructor(orderDetailsService: OrderDetailsService, userOrderService: OrderFacade, routing: RoutingService, globalMessageService: GlobalMessageService)
Parameters :
Name Type Optional
orderDetailsService OrderDetailsService No
userOrderService OrderFacade No
routing RoutingService No
globalMessageService GlobalMessageService No

Methods

Private afterSave
afterSave(orderCode: string)
Parameters :
Name Type Optional
orderCode string No
Returns : void
getEntries
getEntries()
Inherited from OrderAmendService

Return cancellable order entries.

Returns : Observable<OrderEntry[]>
save
save()
Inherited from OrderAmendService
Returns : void
Private buildForm
buildForm(order: Order)
Inherited from OrderAmendService
Parameters :
Name Type Optional
order Order No
Returns : void
getAmendedEntries
getAmendedEntries()
Inherited from OrderAmendService

Returns entries with an amended quantity.

Returns : Observable<OrderEntry[]>
getAmendedPrice
getAmendedPrice(entry: OrderEntry)
Inherited from OrderAmendService

As discussed, this calculation is moved to SPA side. The calculation and validation should be in backend facade layer.

Parameters :
Name Type Optional
entry OrderEntry No
Returns : Price
getForm
getForm()
Inherited from OrderAmendService

returns the form with form data at runtime

Returns : Observable<FormGroup>
Protected getFormControl
getFormControl(form: FormGroup, entry: OrderEntry)
Inherited from OrderAmendService
Parameters :
Name Type Optional
form FormGroup No
entry OrderEntry No
Returns : FormControl
getMaxAmendQuantity
getMaxAmendQuantity(entry: OrderEntry)
Inherited from OrderAmendService
Parameters :
Name Type Optional
entry OrderEntry No
Returns : number
getOrder
getOrder()
Inherited from OrderAmendService
Returns : Observable<Order>
isCancellation
isCancellation()
Inherited from OrderAmendService
Returns : boolean

Properties

amendType
Default value : AmendOrderType.CANCEL
Inherited from OrderAmendService
Protected form
Type : FormGroup
Inherited from OrderAmendService
import { Injectable } from '@angular/core';
import {
  CancelOrReturnRequestEntryInput,
  GlobalMessageService,
  GlobalMessageType,
  OrderEntry,
  RoutingService,
} from '@spartacus/core';
import { OrderFacade } from '@spartacus/order/root';
import { Observable } from 'rxjs';
import { filter, first, map } from 'rxjs/operators';
import { OrderDetailsService } from '../../order-details/order-details.service';
import { AmendOrderType } from '../amend-order.model';
import { OrderAmendService } from '../amend-order.service';

@Injectable({
  providedIn: 'root',
})
export class OrderCancellationService extends OrderAmendService {
  amendType = AmendOrderType.CANCEL;

  constructor(
    protected orderDetailsService: OrderDetailsService,
    protected userOrderService: OrderFacade,
    protected routing: RoutingService,
    protected globalMessageService: GlobalMessageService
  ) {
    super(orderDetailsService);
  }
  /**
   * Return cancellable order entries.
   */
  getEntries(): Observable<OrderEntry[]> {
    return this.getOrder().pipe(
      filter((order) => !!order?.entries),
      map(
        (order) =>
          order.entries?.filter(
            (entry) =>
              entry.entryNumber !== -1 &&
              entry.cancellableQuantity &&
              entry.cancellableQuantity > 0
          ) ?? []
      )
    );
  }

  save(): void {
    const orderCode = this.form.value.orderCode;
    const entries = this.form.value.entries;
    const inputs: CancelOrReturnRequestEntryInput[] = Object.keys(entries)
      .filter((entryNumber) => <number>entries[entryNumber] > 0)
      .map(
        (entryNumber) =>
          ({
            orderEntryNumber: Number(entryNumber),
            quantity: <number>entries[entryNumber],
          } as CancelOrReturnRequestEntryInput)
      );

    this.form.reset();

    this.userOrderService.cancelOrder(orderCode, {
      cancellationRequestEntryInputs: inputs,
    });

    this.userOrderService
      .getCancelOrderSuccess()
      .pipe(first(Boolean))
      .subscribe(() => this.afterSave(orderCode));
  }

  private afterSave(orderCode: string): void {
    this.userOrderService.resetCancelOrderProcessState();
    this.globalMessageService.add(
      {
        key: 'orderDetails.cancellationAndReturn.cancelSuccess',
        params: { orderCode },
      },
      GlobalMessageType.MSG_TYPE_CONFIRMATION
    );
    this.routing.go({
      cxRoute: 'orders',
    });
  }
}

result-matching ""

    No results matching ""