Important

You are browsing the documentation for version 4.1 of OroCommerce, OroCRM and OroPlatform, which is no longer maintained. Read version 5.1 (the latest LTS version) of the Oro documentation to get the updated information.

See our Release Process documentation for more information on the currently supported and upcoming releases.

Add the Agreements Step to a Custom Checkout Based on the Default Checkout Workflow (Example)

Add the Agreements step to the acme_demo_checkout workflow with the customer_consents name and the continue_to_billing_address allowed transition. For all other steps, add the verify_customer_consents allowed transition. verify_customer_consents helps to redirect to the customer_consents step if some consents were not accepted.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
 workflows:
     acme_demo_checkout:
         steps:
             # ...
             customer_consents:
                 order: 20
                 allowed_transitions:
                     - continue_to_billing_address
             enter_billing_address:
                 order: 30
                 allowed_transitions:
                     - verify_customer_consents
                     # ...
             enter_shipping_address:
                 order: 40
                 allowed_transitions:
                     - verify_customer_consents
                     # ...
             # ...

Transitions

Next, add the continue_to_billing_address transition to the Agreements page and the verify_customer_consents transition that check that all mandatory consents are accepted. The stop_propagation option enables you to check the required consents before every step and transit the workflow to the customer_consents step.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 workflows:
     acme_demo_checkout:
         transitions:
             # ...
             continue_to_billing_address:
                 step_to: enter_billing_address
                 transition_definition: continue_to_billing_address_definition
                 display_type: page
                 frontend_options:
                     is_checkout_continue: true
                     is_checkout_show_errors: true
                 form_options:
                     attribute_fields:
                         customerConsents:
                             form_type: Oro\Bundle\ConsentBundle\Form\Type\ConsentAcceptanceType
                             options:
                                 mapped: false
                                 required: true
                                 property_path: customerConsents
             # ...
             verify_customer_consents:
                 step_to: customer_consents
                 transition_definition: verify_customer_consents_definition
                 is_hidden: true
                 frontend_options:
                     stop_propagation: true
             # ...

Transition Definitions

For the above transitions, add transition definitions that save consents and check that all required consents are accepted.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 orkflows:
    acme_demo_checkout:
        transition_definitions:
            # ...
            continue_to_billing_address_definition:
                preactions:
                    - '@assign_value': [$consents_available, true]
                actions:
                    - '@save_accepted_consents':
                            acceptedConsents: $customerConsents
            # ...
            verify_customer_consents_definition:
                preconditions:
                    '@not':
                        - '@is_consents_accepted':
                            acceptedConsents: $customerConsents
                preactions:
                    - '@flash_message':
                        conditions:
                            '@and':
                                - '@not':
                                    - '@is_consents_accepted':
                                        acceptedConsents: $customerConsents
                                - '@equal': [$consents_available, true]
                        message: oro.checkout.workflow.condition.required_consents_should_be_checked.message
                        type: 'warning'
            # ...

Template

To show a block with the consent items:

  1. Import a layout with the consent items and configure it.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
 layout:
     imports:
         -
             id: oro_consent_items
             namespace: checkout
             root: checkout_consent_container

     actions:
         - '@setBlockTheme':
             themes: 'consents.html.twig'

         - '@add':
             id: checkout_consent_container
             blockType: container
             parentId: checkout_form
             prepend: true

         - '@add':
             id: checkout_consent_message
             blockType: consent_acceptance_choice
             parentId: checkout_consent_container
  1. Customize the templates, as illustrated below.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{% block _checkout_form_fields_widget %}
    {% if form.customerConsents is defined %}{{ form_widget(form.customerConsents) }}{% endif %}
{% endblock %}

{% block _checkout_consent_container_widget %}
    <div {{ block('block_attributes') }}>
        <div class="grid__column">
            {{ parent_block_widget(block) }}
        </div>
    </div>
{% endblock %}

{% block _checkout_consent_message_widget %}
    {% set attr = layout_attr_defaults(attr, {
        'class': 'notification notification--success'
    }) %}

    {% if consents is empty %}
        <div {{ block('block_attributes') }}>
            <span class="notification__item">
                <i class="fa-check"></i> {{ 'oro.consent.frontend.checkout.form.messages.all_agreements_accepted'|trans }}
            </span>
        </div>
    {% endif %}
{% endblock %}