Score:0

Syncing of order and shipping states

br flag

In Drupal 9, I have defined the following order workflow for Drupal Commerce:

miss_pomela_fulfillment_processing:
  id: miss_pomela_fulfillment_processing
  group: commerce_order
  label: 'Miss Pomela Fulfillment, with processing'
  states:
    draft:
      label: Draft
    pending:
      label: Pending
    processing:
      label: En preparación
    packed:
      label: Ready to ship
    fulfillment:
      label: Shipped
    completed:
      label: Completed
    canceled:
      label: Canceled
  transitions:
    place:
      label: 'Create order'
      from: [draft]
      to: pending
    process:
      label: 'Process order'
      from: [pending]
      to: processing
    fulfill:
      label: 'Mark as ready to ship'
      from: [processing]
      to: packed
    ship:
      label: 'Ship'
      from: [packed]
      to: fulfillment
    complete:
      label: 'Mark as completed'
      from: [processing, pending, packed, fulfillment]
      to: completed
    cancel:
      label: 'Cancel order'
      from: [draft, processing, fulfillment, pending, completed]
      to:   canceled

I'm trying to understand how to sync the order state with the shipping state the way I need.

Right now, with this workflow, the shipping state changes automatically to Shipped when the packed state order is set, so when the fulfill transition is occurs. But what I want to have is the shipping state as Ready when the state order is packed, and shipped when the state order is fulfillment.

I have tried to find out how to tell the shipping module how to set how to synchronize both states but I'm a bit lost.

Any ideas?

Score:0
it flag

There is no configuration solution for syncing states between these items. It's ordinarily managed via custom event subscribers. Your code reacts to a given order transition and then loads a shipment and applies whatever transition you think is appropriate. There are examples of event subscribers in core if you need a reference, e.g. the OrderAssignSubscriber in the payment module that assigns payment methods related to an order to the same user account as the order is being assigned to.

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.