OrderService
OrderService
Contains methods relating to Order entities.
Signature
class OrderService {
constructor(connection: TransactionalConnection, configService: ConfigService, productVariantService: ProductVariantService, customerService: CustomerService, countryService: CountryService, orderCalculator: OrderCalculator, shippingCalculator: ShippingCalculator, orderStateMachine: OrderStateMachine, orderMerger: OrderMerger, paymentService: PaymentService, paymentStateMachine: PaymentStateMachine, paymentMethodService: PaymentMethodService, fulfillmentService: FulfillmentService, listQueryBuilder: ListQueryBuilder, stockMovementService: StockMovementService, refundStateMachine: RefundStateMachine, historyService: HistoryService, promotionService: PromotionService, eventBus: EventBus, channelService: ChannelService, orderModifier: OrderModifier, customFieldRelationService: CustomFieldRelationService, requestCache: RequestContextCacheService, translator: TranslatorService, stockLevelService: StockLevelService)
getOrderProcessStates() => OrderProcessState[];
findAll(ctx: RequestContext, options?: OrderListOptions, relations?: RelationPaths<Order>) => Promise<PaginatedList<Order>>;
async findOne(ctx: RequestContext, orderId: ID, relations?: RelationPaths<Order>) => Promise<Order | undefined>;
async findOneByCode(ctx: RequestContext, orderCode: string, relations?: RelationPaths<Order>) => Promise<Order | undefined>;
async findOneByOrderLineId(ctx: RequestContext, orderLineId: ID, relations?: RelationPaths<Order>) => Promise<Order | undefined>;
async findByCustomerId(ctx: RequestContext, customerId: ID, options?: ListQueryOptions<Order>, relations?: RelationPaths<Order>) => Promise<PaginatedList<Order>>;
getOrderPayments(ctx: RequestContext, orderId: ID) => Promise<Payment[]>;
getOrderModifications(ctx: RequestContext, orderId: ID) => Promise<OrderModification[]>;
getPaymentRefunds(ctx: RequestContext, paymentId: ID) => Promise<Refund[]>;
getSellerOrders(ctx: RequestContext, order: Order) => Promise<Order[]>;
async getAggregateOrder(ctx: RequestContext, order: Order) => Promise<Order | undefined>;
getOrderChannels(ctx: RequestContext, order: Order) => Promise<Channel[]>;
async getActiveOrderForUser(ctx: RequestContext, userId: ID) => Promise<Order | undefined>;
async create(ctx: RequestContext, userId?: ID) => Promise<Order>;
async createDraft(ctx: RequestContext) => ;
async updateCustomFields(ctx: RequestContext, orderId: ID, customFields: any) => ;
async addItemToOrder(ctx: RequestContext, orderId: ID, productVariantId: ID, quantity: number, customFields?: { [key: string]: any }) => Promise<ErrorResultUnion<UpdateOrderItemsResult, Order>>;
async adjustOrderLine(ctx: RequestContext, orderId: ID, orderLineId: ID, quantity: number, customFields?: { [key: string]: any }) => Promise<ErrorResultUnion<UpdateOrderItemsResult, Order>>;
async removeItemFromOrder(ctx: RequestContext, orderId: ID, orderLineId: ID) => Promise<ErrorResultUnion<RemoveOrderItemsResult, Order>>;
async removeAllItemsFromOrder(ctx: RequestContext, orderId: ID) => Promise<ErrorResultUnion<RemoveOrderItemsResult, Order>>;
async addSurchargeToOrder(ctx: RequestContext, orderId: ID, surchargeInput: Partial<Omit<Surcharge, 'id' | 'createdAt' | 'updatedAt' | 'order'>>) => Promise<Order>;
async removeSurchargeFromOrder(ctx: RequestContext, orderId: ID, surchargeId: ID) => Promise<Order>;
async applyCouponCode(ctx: RequestContext, orderId: ID, couponCode: string) => Promise<ErrorResultUnion<ApplyCouponCodeResult, Order>>;
async removeCouponCode(ctx: RequestContext, orderId: ID, couponCode: string) => ;
async getOrderPromotions(ctx: RequestContext, orderId: ID) => Promise<Promotion[]>;
getNextOrderStates(order: Order) => readonly OrderState[];
async setShippingAddress(ctx: RequestContext, orderId: ID, input: CreateAddressInput) => Promise<Order>;
async setBillingAddress(ctx: RequestContext, orderId: ID, input: CreateAddressInput) => Promise<Order>;
async getEligibleShippingMethods(ctx: RequestContext, orderId: ID) => Promise<ShippingMethodQuote[]>;
async getEligiblePaymentMethods(ctx: RequestContext, orderId: ID) => Promise<PaymentMethodQuote[]>;
async setShippingMethod(ctx: RequestContext, orderId: ID, shippingMethodIds: ID[]) => Promise<ErrorResultUnion<SetOrderShippingMethodResult, Order>>;
async transitionToState(ctx: RequestContext, orderId: ID, state: OrderState) => Promise<Order | OrderStateTransitionError>;
async transitionFulfillmentToState(ctx: RequestContext, fulfillmentId: ID, state: FulfillmentState) => Promise<Fulfillment | FulfillmentStateTransitionError>;
async modifyOrder(ctx: RequestContext, input: ModifyOrderInput) => Promise<ErrorResultUnion<ModifyOrderResult, Order>>;
async transitionPaymentToState(ctx: RequestContext, paymentId: ID, state: PaymentState) => Promise<ErrorResultUnion<TransitionPaymentToStateResult, Payment>>;
async addPaymentToOrder(ctx: RequestContext, orderId: ID, input: PaymentInput) => Promise<ErrorResultUnion<AddPaymentToOrderResult, Order>>;
async addManualPaymentToOrder(ctx: RequestContext, input: ManualPaymentInput) => Promise<ErrorResultUnion<AddManualPaymentToOrderResult, Order>>;
async settlePayment(ctx: RequestContext, paymentId: ID) => Promise<ErrorResultUnion<SettlePaymentResult, Payment>>;
async cancelPayment(ctx: RequestContext, paymentId: ID) => Promise<ErrorResultUnion<CancelPaymentResult, Payment>>;
async createFulfillment(ctx: RequestContext, input: FulfillOrderInput) => Promise<ErrorResultUnion<AddFulfillmentToOrderResult, Fulfillment>>;
async getOrderFulfillments(ctx: RequestContext, order: Order) => Promise<Fulfillment[]>;
async getOrderSurcharges(ctx: RequestContext, orderId: ID) => Promise<Surcharge[]>;
async cancelOrder(ctx: RequestContext, input: CancelOrderInput) => Promise<ErrorResultUnion<CancelOrderResult, Order>>;
async refundOrder(ctx: RequestContext, input: RefundOrderInput) => Promise<ErrorResultUnion<RefundOrderResult, Refund>>;
async settleRefund(ctx: RequestContext, input: SettleRefundInput) => Promise<Refund>;
async addCustomerToOrder(ctx: RequestContext, orderId: ID, customer: Customer) => Promise<Order>;
async addNoteToOrder(ctx: RequestContext, input: AddNoteToOrderInput) => Promise<Order>;
async updateOrderNote(ctx: RequestContext, input: UpdateOrderNoteInput) => Promise<HistoryEntry>;
async deleteOrderNote(ctx: RequestContext, id: ID) => Promise<DeletionResponse>;
async deleteOrder(ctx: RequestContext, orderOrId: ID | Order) => ;
async mergeOrders(ctx: RequestContext, user: User, guestOrder?: Order, existingOrder?: Order) => Promise<Order | undefined>;
async applyPriceAdjustments(ctx: RequestContext, order: Order, updatedOrderLines?: OrderLine[]) => Promise<Order>;
}
Members
constructor
(connection: TransactionalConnection, configService: ConfigService, productVariantService: ProductVariantService, customerService: CustomerService, countryService: CountryService, orderCalculator: OrderCalculator, shippingCalculator: ShippingCalculator, orderStateMachine: OrderStateMachine, orderMerger: OrderMerger, paymentService: PaymentService, paymentStateMachine: PaymentStateMachine, paymentMethodService: PaymentMethodService, fulfillmentService: FulfillmentService, listQueryBuilder: ListQueryBuilder, stockMovementService: StockMovementService, refundStateMachine: RefundStateMachine, historyService: HistoryService, promotionService: PromotionService, eventBus: EventBus, channelService: ChannelService, orderModifier: OrderModifier, customFieldRelationService: CustomFieldRelationService, requestCache: RequestContextCacheService, translator: TranslatorService, stockLevelService: StockLevelService) => OrderService
getOrderProcessStates
() => OrderProcessState[]
process
array.
findAll
(ctx: RequestContext, options?: OrderListOptions, relations?: RelationPaths<Order>) => Promise<PaginatedList<Order>>
findOne
(ctx: RequestContext, orderId: ID, relations?: RelationPaths<Order>) => Promise<Order | undefined>
findOneByCode
(ctx: RequestContext, orderCode: string, relations?: RelationPaths<Order>) => Promise<Order | undefined>
findOneByOrderLineId
(ctx: RequestContext, orderLineId: ID, relations?: RelationPaths<Order>) => Promise<Order | undefined>
findByCustomerId
(ctx: RequestContext, customerId: ID, options?: ListQueryOptions<Order>, relations?: RelationPaths<Order>) => Promise<PaginatedList<Order>>
getOrderPayments
(ctx: RequestContext, orderId: ID) => Promise<Payment[]>
getOrderModifications
(ctx: RequestContext, orderId: ID) => Promise<OrderModification[]>
getPaymentRefunds
(ctx: RequestContext, paymentId: ID) => Promise<Refund[]>
getSellerOrders
(ctx: RequestContext, order: Order) => Promise<Order[]>
getAggregateOrder
(ctx: RequestContext, order: Order) => Promise<Order | undefined>
getOrderChannels
(ctx: RequestContext, order: Order) => Promise<Channel[]>
getActiveOrderForUser
(ctx: RequestContext, userId: ID) => Promise<Order | undefined>
active
state.
create
(ctx: RequestContext, userId?: ID) => Promise<Order>
userId
is passed, the Order will get associated with that
User’s Customer account.
createDraft
(ctx: RequestContext) =>
updateCustomFields
(ctx: RequestContext, orderId: ID, customFields: any) =>
addItemToOrder
(ctx: RequestContext, orderId: ID, productVariantId: ID, quantity: number, customFields?: { [key: string]: any }) => Promise<ErrorResultUnion<UpdateOrderItemsResult, Order>>
adjustOrderLine
(ctx: RequestContext, orderId: ID, orderLineId: ID, quantity: number, customFields?: { [key: string]: any }) => Promise<ErrorResultUnion<UpdateOrderItemsResult, Order>>
removeItemFromOrder
(ctx: RequestContext, orderId: ID, orderLineId: ID) => Promise<ErrorResultUnion<RemoveOrderItemsResult, Order>>
removeAllItemsFromOrder
(ctx: RequestContext, orderId: ID) => Promise<ErrorResultUnion<RemoveOrderItemsResult, Order>>
addSurchargeToOrder
(ctx: RequestContext, orderId: ID, surchargeInput: Partial<Omit<Surcharge, 'id' | 'createdAt' | 'updatedAt' | 'order'>>) => Promise<Order>
removeSurchargeFromOrder
(ctx: RequestContext, orderId: ID, surchargeId: ID) => Promise<Order>
applyCouponCode
(ctx: RequestContext, orderId: ID, couponCode: string) => Promise<ErrorResultUnion<ApplyCouponCodeResult, Order>>
removeCouponCode
(ctx: RequestContext, orderId: ID, couponCode: string) =>
getOrderPromotions
(ctx: RequestContext, orderId: ID) => Promise<Promotion[]>
getNextOrderStates
(order: Order) => readonly OrderState[]
setShippingAddress
(ctx: RequestContext, orderId: ID, input: CreateAddressInput) => Promise<Order>
setBillingAddress
(ctx: RequestContext, orderId: ID, input: CreateAddressInput) => Promise<Order>
getEligibleShippingMethods
(ctx: RequestContext, orderId: ID) => Promise<ShippingMethodQuote[]>
Returns an array of quotes stating which ShippingMethods may be applied to this Order. This is determined by the configured ShippingEligibilityChecker of each ShippingMethod.
The quote also includes a price for each method, as determined by the configured ShippingCalculator of each eligible ShippingMethod.
getEligiblePaymentMethods
(ctx: RequestContext, orderId: ID) => Promise<PaymentMethodQuote[]>
setShippingMethod
(ctx: RequestContext, orderId: ID, shippingMethodIds: ID[]) => Promise<ErrorResultUnion<SetOrderShippingMethodResult, Order>>
transitionToState
(ctx: RequestContext, orderId: ID, state: OrderState) => Promise<Order | OrderStateTransitionError>
transitionFulfillmentToState
(ctx: RequestContext, fulfillmentId: ID, state: FulfillmentState) => Promise<Fulfillment | FulfillmentStateTransitionError>
modifyOrder
(ctx: RequestContext, input: ModifyOrderInput) => Promise<ErrorResultUnion<ModifyOrderResult, Order>>
Allows the Order to be modified, which allows several aspects of the Order to be changed:
- Changes to OrderLine quantities
- New OrderLines being added
- Arbitrary Surcharges being added
- Shipping or billing address changes
Setting the dryRun
input property to true
will apply all changes, including updating the price of the
Order, except history entry and additional payment actions.
Using dryRun option, you must wrap function call in transaction manually.
transitionPaymentToState
(ctx: RequestContext, paymentId: ID, state: PaymentState) => Promise<ErrorResultUnion<TransitionPaymentToStateResult, Payment>>
PaymentSettled
or PaymentAuthorized
.
addPaymentToOrder
(ctx: RequestContext, orderId: ID, input: PaymentInput) => Promise<ErrorResultUnion<AddPaymentToOrderResult, Order>>
PaymentSettled
or PaymentAuthorized
state.
addManualPaymentToOrder
(ctx: RequestContext, input: ManualPaymentInput) => Promise<ErrorResultUnion<AddManualPaymentToOrderResult, Order>>
This method is used after modifying an existing completed order using the modifyOrder()
method. If the modifications
cause the order total to increase (such as when adding a new OrderLine), then there will be an outstanding charge to
pay.
This method allows you to add a new Payment and assumes the actual processing has been done manually, e.g. in the dashboard of your payment provider.
settlePayment
(ctx: RequestContext, paymentId: ID) => Promise<ErrorResultUnion<SettlePaymentResult, Payment>>
settlePayment()
method. Automatically
transitions the Order state if all Payments are settled.
cancelPayment
(ctx: RequestContext, paymentId: ID) => Promise<ErrorResultUnion<CancelPaymentResult, Payment>>
cancelPayment()
method (if defined), and transitions the Payment to
the Cancelled
state.
createFulfillment
(ctx: RequestContext, input: FulfillOrderInput) => Promise<ErrorResultUnion<AddFulfillmentToOrderResult, Fulfillment>>
getOrderFulfillments
(ctx: RequestContext, order: Order) => Promise<Fulfillment[]>
getOrderSurcharges
(ctx: RequestContext, orderId: ID) => Promise<Surcharge[]>
cancelOrder
(ctx: RequestContext, input: CancelOrderInput) => Promise<ErrorResultUnion<CancelOrderResult, Order>>
Cancelled
state. If stock is being tracked for the ProductVariants
in the Order, then new StockMovements will be created to correct the stock levels.
refundOrder
(ctx: RequestContext, input: RefundOrderInput) => Promise<ErrorResultUnion<RefundOrderResult, Refund>>
createRefund()
method of the
PaymentMethodHandler.
settleRefund
(ctx: RequestContext, input: SettleRefundInput) => Promise<Refund>
Settled
state.
addCustomerToOrder
(ctx: RequestContext, orderId: ID, customer: Customer) => Promise<Order>
addNoteToOrder
(ctx: RequestContext, input: AddNoteToOrderInput) => Promise<Order>
updateOrderNote
(ctx: RequestContext, input: UpdateOrderNoteInput) => Promise<HistoryEntry>
deleteOrderNote
(ctx: RequestContext, id: ID) => Promise<DeletionResponse>
deleteOrder
mergeOrders
(ctx: RequestContext, user: User, guestOrder?: Order, existingOrder?: Order) => Promise<Order | undefined>
When a guest user with an anonymous Order signs in and has an existing Order associated with that Customer, we need to reconcile the contents of the two orders.
The logic used to do the merging is specified in the OrderOptions mergeStrategy
config setting.
applyPriceAdjustments
(ctx: RequestContext, order: Order, updatedOrderLines?: OrderLine[]) => Promise<Order>
updatedOrderLines
argument is passed in,
then all of those OrderLines will have their prices re-calculated using the configured OrderItemPriceCalculationStrategy.