State Machine - Extend Workflows
It's possible to extend all available CoreShop Workflow.
Example A: Extend Shipment Workflow
Workflow Configuration
core_shop_workflow:
    state_machine:
        coreshop_shipment:
            # define a new place "reviewed"
            places:
                - reviewed
            # define a new transition "review"
            transitions:
                review:
                    from: [new, ready]
                    to: reviewed
            # add some colors for better ux
            place_colors:
                reviewed: '#2f819e'
            transition_colors:
                review: '#2f819e'
Add translations
Just use the Pimcore Backend/Frontend translation or just add it via default symfony translation context:
# app/Resources/translations/admin.en.yml
coreshop_workflow_transition_coreshop_shipment_review: 'Review'
coreshop_workflow_state_coreshop_shipment_reviewed: 'Reviewed'
# app/Resources/translations/messages.en.yml
coreshop.ui.workflow.state.coreshop_shipment.reviewed: 'Shipment under Review'
Inform CoreShop about new Transition of Shipment Workflow
Not all transitions should be available in backend. To allow the transition to show up, you need to implement a simple event listener:
# app/config/services
App\CoreShop\EventListener\WorkflowListener:
    autowire: true
    tags:
        - { name: kernel.event_listener, event: coreshop.workflow.valid_transitions, method: parseTransitions}
<?php
namespace App\CoreShop\EventListener;
use CoreShop\Bundle\OrderBundle\Event\WorkflowTransitionEvent;
class WorkflowListener
{
    public function parseTransitions(WorkflowTransitionEvent $event)
    {
        $workflowName = $event->getWorkflowName();
        if($workflowName === 'coreshop_shipment') {
            $event->addAllowedTransitions(['review']);
        }
    }
}
Example B: Change default Transition Behaviour of Shipment Workflow
Note: Be careful while changing transitions. Test your application if a workflow still runs smoothly after changing it!
In this example we want to change the default shipping behavior.
Workflow before:
ready -> shipped -> cancelled
Workflow after:
ready -> reviewed -> shipped -> cancelled
Workflow Configuration
core_shop_workflow:
    state_machine:
        coreshop_shipment:
            # define a new place "reviewed"
            places:
                - reviewed
            # define a new transition "review"
            transitions:
                review:
                    from: [ready]
                    to: reviewed
                # override the default "ship" transition
                # which only allows [ready] as valid "from" dispatcher
                ship:
                    from: [reviewed]
                    to: shipped
            # add some colors for better ux
            place_colors:
                reviewed: '#2f819e'
            transition_colors:
                review: '#2f819e'
Example C: Callback Listener
If you need to implement some further business logic after the coreshop_shipment state has changed to reviewed
you need to define a callback:
Note: Please make sure your service is public available!
core_shop_workflow:
    state_machine:
        coreshop_shipment:
            callbacks:
                after:
                    do_something_after_review:
                        on: ['review']
                        do: ['@your_service', 'yourAction']
                        # in this context, "object" is the shipment item
                        args: ['object']
                        priority: -10 # fire action early!