Platform Release 21 July 2020

Order edits can now be queried, created, updated, and deleted using the GraphQL API.

Introduced the following changes to the GraphQL schema (in SDL format):

extend type Query {
  orderEdit(
    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): OrderEdit
  orderEdits(where: String, sort: [String!], limit: Int, offset: Int): OrderEditQueryResult!
}

extend type Mutation {
  createOrderEdit(draft: OrderEditDraft!): OrderEdit
  deleteOrderEdit(version: Long!,

    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): OrderEdit
  updateOrderEdit(version: Long!, actions: [OrderEditUpdateAction!]!, dryRun: Boolean = false,

    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): OrderEdit
}

input AddOrderEditStagedAction {
  stagedAction: StagedOrderUpdateAction!
}

input AddStagedOrderCustomLineItem {
  shippingDetails: ItemShippingDetailsDraftType
  custom: CustomFieldsDraft
  quantity: Long
  externalTaxRate: ExternalTaxRateDraft
  taxCategory: ResourceIdentifierInput
  slug: String!
  money: BaseMoneyInput!
  name: [LocalizedStringItemInputType!]!
}

type AddStagedOrderCustomLineItemOutput implements StagedOrderUpdateActionOutput {
  type: String!
  draft: CustomLineItemDraftOutput!
}

input AddStagedOrderDelivery {
  items: [DeliveryItemDraftType!] = []
  parcels: [DeliveryItemDraftType!] = []
  address: AddressInput
}

type AddStagedOrderDeliveryOutput implements StagedOrderUpdateActionOutput {
  type: String!
  items: [DeliveryItem!]!
  parcels: [ParcelData!]!
  address: Address
}

input AddStagedOrderDiscountCode {
  code: String!
  validateDuplicates: Boolean = false
}

type AddStagedOrderDiscountCodeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  code: String!
  validateDuplicates: Boolean!
}

input AddStagedOrderItemShippingAddress {
  address: AddressInput!
}

type AddStagedOrderItemShippingAddressOutput implements StagedOrderUpdateActionOutput {
  type: String!
  address: Address!
}

input AddStagedOrderLineItem {
  shippingDetails: ItemShippingDetailsDraftType
  externalTotalPrice: ExternalLineItemTotalPriceDraft
  externalPrice: BaseMoneyInput
  externalTaxRate: ExternalTaxRateDraft
  custom: CustomFieldsDraft
  catalog: ReferenceInput
  distributionChannel: ResourceIdentifierInput
  supplyChannel: ResourceIdentifierInput
  variantId: Int
  quantity: Long
  sku: String
  productId: String
}

type AddStagedOrderLineItemOutput implements StagedOrderUpdateActionOutput {
  type: String!
  draft: LineItemDraftOutput!
}

input AddStagedOrderParcelToDelivery {
  deliveryId: String!
  measurements: ParcelMeasurementsDraftType
  trackingData: TrackingDataDraftType
  items: [DeliveryItemDraftType!] = []
}

type AddStagedOrderParcelToDeliveryOutput implements StagedOrderUpdateActionOutput {
  type: String!
  deliveryId: String!
  measurements: ParcelMeasurements
  trackingData: TrackingData
  items: [DeliveryItem!]!
}

input AddStagedOrderPayment {
  payment: ResourceIdentifierInput!
}

type AddStagedOrderPaymentOutput implements StagedOrderUpdateActionOutput {
  type: String!
  paymentResId: ResourceIdentifier!
}

input AddStagedOrderReturnInfo {
  items: [ReturnItemDraftType!]!
  returnDate: DateTime
  returnTrackingId: String
}

type AddStagedOrderReturnInfoOutput implements StagedOrderUpdateActionOutput {
  type: String!
  items: [ReturnItemDraftTypeOutput!]!
  returnDate: DateTime
  returnTrackingId: String
}

input AddStagedOrderShoppingList {
  shoppingList: ResourceIdentifierInput!
  supplyChannel: ResourceIdentifierInput
  distributionChannel: ResourceIdentifierInput
}

type AddStagedOrderShoppingListOutput implements StagedOrderUpdateActionOutput {
  type: String!
  shoppingListResId: ResourceIdentifier!
  supplyChannelResId: ChannelReferenceIdentifier
  distributionChannelResId: ChannelReferenceIdentifier
}

input ChangeStagedOrderCustomLineItemMoney {
  customLineItemId: String!
  money: BaseMoneyInput!
}

type ChangeStagedOrderCustomLineItemMoneyOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  money: BaseMoney!
}

input ChangeStagedOrderCustomLineItemQuantity {
  customLineItemId: String!
  quantity: Long!
}

type ChangeStagedOrderCustomLineItemQuantityOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  quantity: Long!
}

input ChangeStagedOrderLineItemQuantity {
  lineItemId: String!
  quantity: Long!
  externalPrice: BaseMoneyInput
  externalTotalPrice: ExternalLineItemTotalPriceDraft
}

type ChangeStagedOrderLineItemQuantityOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  quantity: Long!
  externalPrice: BaseMoney
  externalTotalPrice: ExternalLineItemTotalPrice
}

input ChangeStagedOrderOrderState {
  orderState: OrderState!
}

type ChangeStagedOrderOrderStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  orderState: OrderState!
}

input ChangeStagedOrderPaymentState {
  paymentState: PaymentState!
}

type ChangeStagedOrderPaymentStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  paymentState: PaymentState!
}

input ChangeStagedOrderShipmentState {
  shipmentState: ShipmentState!
}

type ChangeStagedOrderShipmentStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  shipmentState: ShipmentState!
}

input ChangeStagedOrderTaxCalculationMode {
  taxCalculationMode: TaxCalculationMode!
}

type ChangeStagedOrderTaxCalculationModeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  taxCalculationMode: TaxCalculationMode!
}

input ChangeStagedOrderTaxMode {
  taxMode: TaxMode!
}

type ChangeStagedOrderTaxModeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  taxMode: TaxMode!
}

input ChangeStagedOrderTaxRoundingMode {
  taxRoundingMode: RoundingMode!
}

type ChangeStagedOrderTaxRoundingModeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  taxRoundingMode: RoundingMode!
}

type CustomFieldsCommand {
  typeId: String
  typeKey: String
  type: ResourceIdentifier
  fields: Json!
}

type CustomLineItemDraftOutput {
  money: BaseMoney!
  slug: String!
  taxCategory: ResourceIdentifier
  externalTaxRate: ExternalTaxRateDraftOutput
  quantity: Long
  custom: CustomFieldsCommand
  shippingDetails: ItemShippingDetailsDraftOutput
  name(
    "String is defined for different locales. This argument specifies the desired locale."
    locale: Locale,

    "List of languages the client is able to understand, and which locale variant is preferred."
    acceptLanguage: [Locale!]): String
  nameAllLocales: [LocalizedString!]!
}

type CustomerGroupReferenceIdentifier {
  typeId: String!
  id: String
  key: String
}

type ExternalTaxAmountDraftOutput {
  totalGross: Money!
  taxRate: ExternalTaxRateDraftOutput!
}

type ExternalTaxRateDraftOutput {
  name: String!
  amount: Float
  country: Country!
  state: String
  subRates: [SubRate!]!
  includedInPrice: Boolean!
}

input ImportStagedOrderCustomLineItemState {
  customLineItemId: String!
  state: [ItemStateDraftType!]!
}

type ImportStagedOrderCustomLineItemStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  state: Set!
}

input ImportStagedOrderLineItemState {
  lineItemId: String!
  state: [ItemStateDraftType!]!
}

type ImportStagedOrderLineItemStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  state: Set!
}

type ItemShippingDetailsDraftOutput {
  targets: [ItemShippingTarget!]!
}

type LineItemDraftOutput {
  productId: String
  sku: String
  quantity: Long
  variantId: Int
  supplyChannel: ChannelReferenceIdentifier
  distributionChannel: ChannelReferenceIdentifier
  catalog: Reference
  custom: CustomFieldsCommand
  externalTaxRate: ExternalTaxRateDraftOutput
  externalPrice: BaseMoney
  externalTotalPrice: ExternalLineItemTotalPrice
  shippingDetails: ItemShippingDetailsDraftOutput
}

type NotProcessed implements OrderEditResult {
  type: String!
}

type OrderEdit implements Versioned {
  key: String
  resourceRef: Reference!
  resource: Order
  stagedActions: [StagedOrderUpdateActionOutput!]!
  result: OrderEditResult!
  comment: String
  custom: CustomFieldsType
  id: String!
  version: Long!
  createdAt: DateTime!
  lastModifiedAt: DateTime!
  createdBy: Initiator
  lastModifiedBy: Initiator
}

input OrderEditDraft {
  key: String
  resource: ReferenceInput!
  stagedActions: [StagedOrderUpdateAction!]!
  custom: CustomFieldsDraft
  comment: String
  dryRun: Boolean
}

type OrderEditQueryResult {
  offset: Int!
  count: Int!
  total: Long!
  results: [OrderEdit!]!
}

interface OrderEditResult {
  type: String!
}

input OrderEditUpdateAction {
  addStagedAction: AddOrderEditStagedAction
  setComment: SetOrderEditComment
  setCustomField: SetOrderEditCustomField
  setCustomType: SetOrderEditCustomType
  setKey: SetOrderEditKey
  setStagedActions: SetOrderEditStagedActions
}

type PreviewFailure implements OrderEditResult {
  type: String!
  errors: [Json!]!
}

type PreviewSuccess implements OrderEditResult {
  type: String!
  preview: Order!
}

input RecalculateStagedOrder {
  updateProductData: Boolean = false
}

type RecalculateStagedOrderOutput implements StagedOrderUpdateActionOutput {
  type: String!
  updateProductData: Boolean!
}

input RemoveStagedOrderCustomLineItem {
  customLineItemId: String!
}

type RemoveStagedOrderCustomLineItemOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
}

input RemoveStagedOrderDelivery {
  deliveryId: String!
}

type RemoveStagedOrderDeliveryOutput implements StagedOrderUpdateActionOutput {
  type: String!
  deliveryId: String!
}

input RemoveStagedOrderDiscountCode {
  discountCode: ReferenceInput!
}

type RemoveStagedOrderDiscountCodeOutput implements StagedOrderUpdateActionOutput {
  discountCode: DiscountCode
  discountCodeRef: Reference!
  type: String!
}

input RemoveStagedOrderItemShippingAddress {
  addressKey: String!
}

type RemoveStagedOrderItemShippingAddressOutput implements StagedOrderUpdateActionOutput {
  type: String!
  addressKey: String!
}

input RemoveStagedOrderLineItem {
  lineItemId: String!
  quantity: Long
  externalPrice: BaseMoneyInput
  externalTotalPrice: ExternalLineItemTotalPriceDraft
  shippingDetailsToRemove: ItemShippingDetailsDraftType
}

type RemoveStagedOrderLineItemOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  quantity: Long
  externalPrice: BaseMoney
  externalTotalPrice: ExternalLineItemTotalPrice
  shippingDetailsToRemove: ItemShippingDetailsDraftOutput
}

input RemoveStagedOrderParcelFromDelivery {
  parcelId: String!
}

type RemoveStagedOrderParcelFromDeliveryOutput implements StagedOrderUpdateActionOutput {
  type: String!
  parcelId: String!
}

input RemoveStagedOrderPayment {
  payment: ResourceIdentifierInput!
}

type RemoveStagedOrderPaymentOutput implements StagedOrderUpdateActionOutput {
  type: String!
  paymentResId: ResourceIdentifier!
}

type ResourceIdentifier {
  typeId: String!
  key: String
  id: String
}

type ReturnItemDraftTypeOutput {
  quantity: Long!
  lineItemId: String
  customLineItemId: String
  comment: String
  shipmentState: ReturnShipmentState!
}

type ScoreShippingRateInputDraftOutput implements ShippingRateInputDraftOutput {
  score: Int!
  type: String!
}

scalar Set

input SetOrderEditComment {
  comment: String
}

input SetOrderEditCustomField {
  name: String!
  value: String
}

input SetOrderEditCustomType {
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input SetOrderEditKey {
  key: String
}

input SetOrderEditStagedActions {
  stagedActions: [StagedOrderUpdateAction!]!
}

input SetStagedOrderBillingAddress {
  address: AddressInput
}

type SetStagedOrderBillingAddressOutput implements StagedOrderUpdateActionOutput {
  type: String!
  address: Address
}

input SetStagedOrderCountry {
  country: Country
}

type SetStagedOrderCountryOutput implements StagedOrderUpdateActionOutput {
  type: String!
  country: Country
}

input SetStagedOrderCustomField {
  name: String!
  value: String
}

type SetStagedOrderCustomFieldOutput implements StagedOrderUpdateActionOutput {
  type: String!
  name: String!
  value: Json
}

input SetStagedOrderCustomLineItemCustomField {
  customLineItemId: String!
  name: String!
  value: String
}

type SetStagedOrderCustomLineItemCustomFieldOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  name: String!
  value: Json
}

input SetStagedOrderCustomLineItemCustomType {
  customLineItemId: String!
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

type SetStagedOrderCustomLineItemCustomTypeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  custom: CustomFieldsCommand!
}

input SetStagedOrderCustomLineItemShippingDetails {
  customLineItemId: String!
  shippingDetails: ItemShippingDetailsDraftType
}

type SetStagedOrderCustomLineItemShippingDetailsOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  shippingDetails: ItemShippingDetailsDraftOutput
}

input SetStagedOrderCustomLineItemTaxAmount {
  customLineItemId: String!
  externalTaxAmount: ExternalTaxAmountDraft
}

type SetStagedOrderCustomLineItemTaxAmountOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  externalTaxAmount: ExternalTaxAmountDraftOutput
}

input SetStagedOrderCustomLineItemTaxRate {
  customLineItemId: String!
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderCustomLineItemTaxRateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  externalTaxRate: ExternalTaxRateDraftOutput
}

input SetStagedOrderCustomShippingMethod {
  shippingMethodName: String!
  shippingRate: ShippingRateDraft!
  taxCategory: ResourceIdentifierInput
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderCustomShippingMethodOutput implements StagedOrderUpdateActionOutput {
  type: String!
  shippingMethodName: String!
  shippingRate: ShippingRate!
  taxCategoryResId: ResourceIdentifier
  externalTaxRate: ExternalTaxRateDraftOutput
}

input SetStagedOrderCustomType {
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

type SetStagedOrderCustomTypeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  custom: CustomFieldsCommand!
}

input SetStagedOrderCustomerEmail {
  email: String
}

type SetStagedOrderCustomerEmailOutput implements StagedOrderUpdateActionOutput {
  type: String!
  email: String
}

input SetStagedOrderCustomerGroup {
  customerGroup: ResourceIdentifierInput
}

type SetStagedOrderCustomerGroupOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customerGroupResId: CustomerGroupReferenceIdentifier
}

input SetStagedOrderCustomerId {
  customerId: String
}

type SetStagedOrderCustomerIdOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customerId: String
}

input SetStagedOrderDeliveryAddress {
  deliveryId: String!
  address: AddressInput
}

type SetStagedOrderDeliveryAddressOutput implements StagedOrderUpdateActionOutput {
  type: String!
  deliveryId: String!
  address: Address
}

input SetStagedOrderDeliveryItems {
  deliveryId: String!
  items: [DeliveryItemDraftType!]!
}

type SetStagedOrderDeliveryItemsOutput implements StagedOrderUpdateActionOutput {
  type: String!
  deliveryId: String!
  items: [DeliveryItem!]!
}

input SetStagedOrderLineItemCustomField {
  lineItemId: String!
  name: String!
  value: String
}

type SetStagedOrderLineItemCustomFieldOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  name: String!
  value: Json
}

input SetStagedOrderLineItemCustomType {
  lineItemId: String!
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

type SetStagedOrderLineItemCustomTypeOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  custom: CustomFieldsCommand!
}

input SetStagedOrderLineItemPrice {
  lineItemId: String!
  externalPrice: BaseMoneyInput
}

type SetStagedOrderLineItemPriceOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  externalPrice: BaseMoney
}

input SetStagedOrderLineItemShippingDetails {
  lineItemId: String!
  shippingDetails: ItemShippingDetailsDraftType
}

type SetStagedOrderLineItemShippingDetailsOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  shippingDetails: ItemShippingDetailsDraftOutput
}

input SetStagedOrderLineItemTaxAmount {
  lineItemId: String!
  externalTaxAmount: ExternalTaxAmountDraft
}

type SetStagedOrderLineItemTaxAmountOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  externalTaxAmount: ExternalTaxAmountDraftOutput
}

input SetStagedOrderLineItemTaxRate {
  lineItemId: String!
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderLineItemTaxRateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  externalTaxRate: ExternalTaxRateDraftOutput
}

input SetStagedOrderLineItemTotalPrice {
  lineItemId: String!
  externalTotalPrice: ExternalLineItemTotalPriceDraft
}

type SetStagedOrderLineItemTotalPriceOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  externalTotalPrice: ExternalLineItemTotalPrice
}

input SetStagedOrderLocale {
  locale: Locale
}

type SetStagedOrderLocaleOutput implements StagedOrderUpdateActionOutput {
  type: String!
  locale: Locale
}

input SetStagedOrderOrderNumber {
  orderNumber: String
}

type SetStagedOrderOrderNumberOutput implements StagedOrderUpdateActionOutput {
  type: String!
  orderNumber: String
}

input SetStagedOrderOrderTotalTax {
  externalTotalGross: MoneyInput
  externalTaxPortions: [TaxPortionDraft!] = []
}

type SetStagedOrderOrderTotalTaxOutput implements StagedOrderUpdateActionOutput {
  type: String!
  externalTotalGross: Money
  externalTaxPortions: [TaxPortion!]!
}

input SetStagedOrderParcelItems {
  parcelId: String!
  items: [DeliveryItemDraftType!]!
}

type SetStagedOrderParcelItemsOutput implements StagedOrderUpdateActionOutput {
  type: String!
  parcelId: String!
  items: [DeliveryItem!]!
}

input SetStagedOrderParcelMeasurements {
  parcelId: String!
  measurements: ParcelMeasurementsDraftType
}

type SetStagedOrderParcelMeasurementsOutput implements StagedOrderUpdateActionOutput {
  type: String!
  parcelId: String!
  measurements: ParcelMeasurements
}

input SetStagedOrderParcelTrackingData {
  parcelId: String!
  trackingData: TrackingDataDraftType
}

type SetStagedOrderParcelTrackingDataOutput implements StagedOrderUpdateActionOutput {
  type: String!
  parcelId: String!
  trackingData: TrackingData
}

input SetStagedOrderReturnPaymentState {
  returnItemId: String!
  paymentState: ReturnPaymentState!
}

type SetStagedOrderReturnPaymentStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  returnItemId: String!
  paymentState: ReturnPaymentState!
}

input SetStagedOrderReturnShipmentState {
  returnItemId: String!
  shipmentState: ReturnShipmentState!
}

type SetStagedOrderReturnShipmentStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  returnItemId: String!
  shipmentState: ReturnShipmentState!
}

input SetStagedOrderShippingAddress {
  address: AddressInput
}

input SetStagedOrderShippingAddressAndCustomShippingMethod {
  address: AddressInput!
  shippingMethodName: String!
  shippingRate: ShippingRateDraft!
  taxCategory: ResourceIdentifierInput
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderShippingAddressAndCustomShippingMethodOutput implements StagedOrderUpdateActionOutput {
  type: String!
  address: Address!
  shippingMethodName: String!
  shippingRate: ShippingRate!
  taxCategoryResId: ResourceIdentifier
  externalTaxRate: ExternalTaxRateDraftOutput
}

input SetStagedOrderShippingAddressAndShippingMethod {
  address: AddressInput!
  shippingMethod: ResourceIdentifierInput
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderShippingAddressAndShippingMethodOutput implements StagedOrderUpdateActionOutput {
  type: String!
  address: Address!
  shippingMethodResId: ResourceIdentifier
  externalTaxRate: ExternalTaxRateDraftOutput
}

type SetStagedOrderShippingAddressOutput implements StagedOrderUpdateActionOutput {
  type: String!
  address: Address
}

input SetStagedOrderShippingMethod {
  shippingMethod: ResourceIdentifierInput
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderShippingMethodOutput implements StagedOrderUpdateActionOutput {
  type: String!
  shippingMethodResId: ResourceIdentifier
  externalTaxRate: ExternalTaxRateDraftOutput
}

input SetStagedOrderShippingMethodTaxAmount {
  externalTaxAmount: ExternalTaxAmountDraft
}

type SetStagedOrderShippingMethodTaxAmountOutput implements StagedOrderUpdateActionOutput {
  type: String!
  externalTaxAmount: ExternalTaxAmountDraftOutput
}

input SetStagedOrderShippingMethodTaxRate {
  externalTaxRate: ExternalTaxRateDraft
}

type SetStagedOrderShippingMethodTaxRateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  externalTaxRate: ExternalTaxRateDraftOutput
}

input SetStagedOrderShippingRateInput {
  shippingRateInput: ShippingRateInputDraft
}

type SetStagedOrderShippingRateInputOutput implements StagedOrderUpdateActionOutput {
  type: String!
  shippingRateInput: ShippingRateInputDraftOutput
}

input SetStagedOrderStore {
  store: ResourceIdentifierInput
}

type SetStagedOrderStoreOutput implements StagedOrderUpdateActionOutput {
  type: String!
  storeResId: ResourceIdentifier
}

interface ShippingRateInputDraftOutput {
  type: String!
}

input StagedOrderUpdateAction {
  addCustomLineItem: AddStagedOrderCustomLineItem
  addDelivery: AddStagedOrderDelivery
  addDiscountCode: AddStagedOrderDiscountCode
  addItemShippingAddress: AddStagedOrderItemShippingAddress
  addLineItem: AddStagedOrderLineItem
  addParcelToDelivery: AddStagedOrderParcelToDelivery
  addPayment: AddStagedOrderPayment
  addReturnInfo: AddStagedOrderReturnInfo
  addShoppingList: AddStagedOrderShoppingList
  changeCustomLineItemMoney: ChangeStagedOrderCustomLineItemMoney
  changeCustomLineItemQuantity: ChangeStagedOrderCustomLineItemQuantity
  changeLineItemQuantity: ChangeStagedOrderLineItemQuantity
  changeOrderState: ChangeStagedOrderOrderState
  changePaymentState: ChangeStagedOrderPaymentState
  changeShipmentState: ChangeStagedOrderShipmentState
  changeTaxCalculationMode: ChangeStagedOrderTaxCalculationMode
  changeTaxMode: ChangeStagedOrderTaxMode
  changeTaxRoundingMode: ChangeStagedOrderTaxRoundingMode
  importCustomLineItemState: ImportStagedOrderCustomLineItemState
  importLineItemState: ImportStagedOrderLineItemState
  recalculate: RecalculateStagedOrder
  removeCustomLineItem: RemoveStagedOrderCustomLineItem
  removeDelivery: RemoveStagedOrderDelivery
  removeDiscountCode: RemoveStagedOrderDiscountCode
  removeItemShippingAddress: RemoveStagedOrderItemShippingAddress
  removeLineItem: RemoveStagedOrderLineItem
  removeParcelFromDelivery: RemoveStagedOrderParcelFromDelivery
  removePayment: RemoveStagedOrderPayment
  setBillingAddress: SetStagedOrderBillingAddress
  setCountry: SetStagedOrderCountry
  setCustomField: SetStagedOrderCustomField
  setCustomLineItemCustomField: SetStagedOrderCustomLineItemCustomField
  setCustomLineItemCustomType: SetStagedOrderCustomLineItemCustomType
  setCustomLineItemShippingDetails: SetStagedOrderCustomLineItemShippingDetails
  setCustomLineItemTaxAmount: SetStagedOrderCustomLineItemTaxAmount
  setCustomLineItemTaxRate: SetStagedOrderCustomLineItemTaxRate
  setCustomShippingMethod: SetStagedOrderCustomShippingMethod
  setCustomType: SetStagedOrderCustomType
  setCustomerEmail: SetStagedOrderCustomerEmail
  setCustomerGroup: SetStagedOrderCustomerGroup
  setCustomerId: SetStagedOrderCustomerId
  setDeliveryAddress: SetStagedOrderDeliveryAddress
  setDeliveryItems: SetStagedOrderDeliveryItems
  setLineItemCustomField: SetStagedOrderLineItemCustomField
  setLineItemCustomType: SetStagedOrderLineItemCustomType
  setLineItemPrice: SetStagedOrderLineItemPrice
  setLineItemShippingDetails: SetStagedOrderLineItemShippingDetails
  setLineItemTaxAmount: SetStagedOrderLineItemTaxAmount
  setLineItemTaxRate: SetStagedOrderLineItemTaxRate
  setLineItemTotalPrice: SetStagedOrderLineItemTotalPrice
  setLocale: SetStagedOrderLocale
  setOrderNumber: SetStagedOrderOrderNumber
  setOrderTotalTax: SetStagedOrderOrderTotalTax
  setParcelItems: SetStagedOrderParcelItems
  setParcelMeasurements: SetStagedOrderParcelMeasurements
  setParcelTrackingData: SetStagedOrderParcelTrackingData
  setReturnPaymentState: SetStagedOrderReturnPaymentState
  setReturnShipmentState: SetStagedOrderReturnShipmentState
  setShippingAddress: SetStagedOrderShippingAddress
  setShippingAddressAndCustomShippingMethod: SetStagedOrderShippingAddressAndCustomShippingMethod
  setShippingAddressAndShippingMethod: SetStagedOrderShippingAddressAndShippingMethod
  setShippingMethod: SetStagedOrderShippingMethod
  setShippingMethodTaxAmount: SetStagedOrderShippingMethodTaxAmount
  setShippingMethodTaxRate: SetStagedOrderShippingMethodTaxRate
  setShippingRateInput: SetStagedOrderShippingRateInput
  setStore: SetStagedOrderStore
  transitionCustomLineItemState: TransitionStagedOrderCustomLineItemState
  transitionLineItemState: TransitionStagedOrderLineItemState
  transitionState: TransitionStagedOrderState
  updateItemShippingAddress: UpdateStagedOrderItemShippingAddress
  updateSyncInfo: UpdateStagedOrderSyncInfo
}

interface StagedOrderUpdateActionOutput {
  type: String!
}

input TransitionStagedOrderCustomLineItemState {
  customLineItemId: String!
  quantity: Long!
  fromState: ResourceIdentifierInput!
  toState: ResourceIdentifierInput!
  actualTransitionDate: DateTime
}

type TransitionStagedOrderCustomLineItemStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  customLineItemId: String!
  quantity: Long!
  fromStateResId: ResourceIdentifier!
  toStateResId: ResourceIdentifier!
  actualTransitionDate: DateTime
}

input TransitionStagedOrderLineItemState {
  lineItemId: String!
  quantity: Long!
  fromState: ResourceIdentifierInput!
  toState: ResourceIdentifierInput!
  actualTransitionDate: DateTime
}

type TransitionStagedOrderLineItemStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  lineItemId: String!
  quantity: Long!
  fromStateResId: ResourceIdentifier!
  toStateResId: ResourceIdentifier!
  actualTransitionDate: DateTime
}

input TransitionStagedOrderState {
  state: ResourceIdentifierInput!
  force: Boolean = false
}

type TransitionStagedOrderStateOutput implements StagedOrderUpdateActionOutput {
  type: String!
  stateResId: ResourceIdentifier!
  force: Boolean!
}

input UpdateStagedOrderItemShippingAddress {
  address: AddressInput!
}

type UpdateStagedOrderItemShippingAddressOutput implements StagedOrderUpdateActionOutput {
  type: String!
  address: Address!
}

input UpdateStagedOrderSyncInfo {
  channel: ResourceIdentifierInput!
  syncedAt: DateTime
  externalId: String
}

type UpdateStagedOrderSyncInfoOutput implements StagedOrderUpdateActionOutput {
  type: String!
  channelResId: ChannelReferenceIdentifier!
  syncedAt: DateTime
  externalId: String
}