Documentation

Introduction

Use bookable products to your storefront. Use our extension to offer (simple) rental & reservation services.

Module

Extension-Name: enobis/module-booking
Latest Version: 1.6.*

Features

Frontend

Availability Calendar

The heart of the extension is the integrated availability calendar.

The availability calendar combines different information into one visualization. It shows:

  • days of selected month

  • available quantity of product per day incl. colorful, percentage based visualisation (green: high availability, orange: medium availability, red: low availability ) - see also calculation of availability

  • restricted days (gray)

  • special days (blue incl. tooltip)

  • selected days (yellow with white background)

  • period of restriction before and after (hatched yellow) - optional, see also periods of restriction

  • Max. rental period (if restricted)

  • Max. availablity based on selected from/ to days

Calculation of availability

Availability (on a daily basis) is always calculated on the basis of a product's stock level. Availability is calculated dynamically depending on the quantities ordered per day.

Important: The stock management has to be active! A valid Stock (>=1) must be entered!

Periods of restriction

The calendar takes into account lead and lag times in addition to the actual rental period. The periods of restriction are optional and are usually used for products with the necessarity reprocessing/ recycling before/after they could be rented again. These days are taken into account for the calculation of the availability.

General availability of a product

The availability of a products can be restricted generally by:

  • stock availability: If the stock is 0, the product is not available in general

  • restricted booking from / to: Period of days in which the bookable product is available

  • restricted days: restricted days like weekends etc. are not selectable for booking

  • max rental period: max. period of days for booking

Different types of pricing

  • Fixed Pricing (Default): The price of the product applies regardless of the length of the rental period

  • Per Days: The price of the product depends on the length of the rental period. The pricing includes also customizable options.

  • Per Days (Customizable Options separately) Work in Progress

Backend

Booking Management

The "booking"-extension offers some simple tools to manage booking order from the backend.

Sales->Booking Order Items

The "Booking Order Items"-Grid gives a compact view on all ordered bookable products. It shows

  • Increment_Id: Increment_Id of order which contains the bookable product

  • Order_Status: Status of Order

  • Purchase Point

  • Purchase Date

  • Product_Id

  • Product_Name

  • Product_Sku

  • Qty_Orderd

  • Qty_Canceled

  • Qty_Shipped

  • Booking_Start_Date: Beginn of Event

  • Booking_End_Date: End of Event

  • Booking_Restriction_Start_Date: Start of the preparation phase (Before)

  • Booking_Restriction_End_Date: End of the preparation phase (After)

Sales->Order-Details

It's possible to edit the booking dates from the backend, even without canceling the order!

Important You need to calculate the availability of each product manually!

Configuration

General Configuration

Stores->Configuration->Enobis->Quota->General

| Option | Type | Description | Scope |

| :--| :-- | :-- | :-- |

| Period of restriction before (in days) | Int | Amount of days which are added to the booking start date in order to calculate the availability | Global, Product |

| Period of restriction after (in days) | Int | Amount of days which are added to the booking end date in order to calculate the availability | Global, Product |

| Show period of restriction in the calendar | Yes, No(Default) | Show/ Hide period of restriction visualisation in calendar | Global |

| Disable Calendar from today (in days) | Int | Disables the possibility to select a booking day earlier than today + days (usually min. period of restriction before) | Global, Product |

| Fixed Restriction Days (like weekends,holidays ...) | String | Valid Date Format (http://php.net/manual/de/datetime.formats.date.php) OR "1" - "7" (ISO-8601), one date per line. | Global |

| Special Days | Multi Line Control | Possibility to highlight special days in calendar. Has no impact on availability calculation! | Global |

| Percentage for low availability | Int | Percentage | Global |

| Public Event Agreement Policy | Yes, No(Default) | ??? | Global |

| Legacy Compatibility Mode | Yes, No(Default) | ??? | Global |

| Percentage for low availability | Int | Percentage of Availability per Day - if lower than, the day field will be colorer ind red | Global |

| Percentage for medium availability | Int | Percentage of Availability per Day - if lower than, the day field will be colorer ind orange. Everything above will be colored in green! | Global |

Product Configuration

Catalog->Product

Option Type Description Scope
Period of restriction before (in days) Int Amount of days which are added to the booking start date in order to calculate the availability Global
Period of restriction after (in days) Int Amount of days which are added to the booking end date in order to calculate the availability Global
Add restricted days to earliest bookable date Yes, No(Default) ??? Global
Disable Calendar from today (in days) Yes, No(Default) Disables the possibility to select a booking day earlier than today (usually min. period of restriction before) Global
Add restricted days to earliest bookable date Yes, No(Default) ??? Global
Bookable From Date Startdate for general availability of product Global
Bookable To Date Enddate for general availability of product Global
Max Rental Period Int Max. Days for Booking Global
Product Dependent Restricted Days String Valid Date Format (http://php.net/manual/de/datetime.formats.date.php) OR "1" - "7" (ISO-8601), one date per line. Global
Shipping Carrier Dropdown Carrier for Product (Default, Simple) See above! Global
Booking Price Type Dropdown Options for different price calculation. See above! Global
--- Event Specific Settings --- --- --- ---
Event One Day Yes, No(Default) Disables the selection of an enddate Global
Event Enabled Yes, No(Default) ??? Global
Public Event Agreement Policy Yes, No(Default) ??? Global
Create Public Event Enabled Yes, No(Default) ??? Global

Important: The event specific settings are experimental only and deprecated! They will be removed in future!

Booking-Checkout


Extension-Name: enobis/module-booking-checkout

Version: 1.1.*

The "enobis/module-booking-checkout"-extension introduces two additinal delivery methods. Those delivery methods offers the possibility to use custom checkout forms to collect necessary booking data.

Checkout forms

checkout forma3be01

The checkout forms are created by a xml-definition and support various kinds of fields:

  • textfields

  • textareas

  • date

  • dropdown

  • multiselect

  • checkbox sets

Fields could be either mandatory or optional. Pre-Assignment of booking dates is also possible.

Two delivery methods

The extension offers the possibility to use two kinds of delivery methods: Simple and Standard.

Both delivery methods have their own backend settings and can be declared at product level. If nothing is declared, the simple method will be used. Both delivery methods refer to a specific section in the form declaration. For more information see below!

Checkout fields

The form declaration must be available at

bash{you-theme-path}/Enobis_Booking_Checkout/layout/checkout_index_index.xml

Textfield


<item name="enobis_exhibition_eventname" xsi:type="array">

    <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item>

    <item name="label" translate="true" xsi:type="string">Name of trade fair</item>

    <item name="template" xsi:type="string">ui/form/field</item>

    <item name="elementTmpl" xsi:type="string">ui/form/element/input</item>

    <item name="validation" xsi:type="array">

        <item name="required-entry" xsi:type="string">true</item>

    </item>

    <item name="provider" xsi:type="string">checkoutProvider</item>

    <item name="dataScope" xsi:type="string">bookingCheckout.enobis_exhibition_eventname</item>

    <item name="config" xsi:type="array">

        <item name="customScope" xsi:type="string">bookingCheckout</item>

    </item>

    <item name="additionalClasses" xsi:type="string">field-100</item>

</item>

Features:

  • Mandatory field: bash<item name="required-entry" xsi:type="string">true</item>

  • Extra CSS class: bash<item name="additionalClasses" xsi:type="string">field-100</item>

Textarea


<item name="enobis_exhibition_eventdescription" xsi:type="array">

    <item name="component" xsi:type="string">Magento_Ui/js/form/element/textarea</item>

    <item name="label" translate="true" xsi:type="string">What shall be your overall theme?</item>

    <item name="template" xsi:type="string">ui/form/field</item>

    <item name="elementTmpl" xsi:type="string">ui/form/element/textarea</item>

    <item name="validation" xsi:type="array">

        <item name="required-entry" xsi:type="string">true</item>

    </item>

    <item name="provider" xsi:type="string">checkoutProvider</item>

    <item name="dataScope" xsi:type="string">bookingCheckout.enobis_exhibition_eventdescription</item>

    <item name="config" xsi:type="array">

        <item name="customScope" xsi:type="string">bookingCheckout</item>

    </item>

    <item name="additionalClasses" xsi:type="string">field-100</item>

</item>

Date


<item name="enobis_exhibition_pickup_date" xsi:type="array">

    <item name="component" xsi:type="string">Magento_Ui/js/form/element/date</item>

    <item name="label" xsi:type="string">Date for pickup</item>

    <item name="template" xsi:type="string">ui/form/field</item>

    <item name="elementTmpl" xsi:type="string">ui/form/element/date</item>

    <item name="validation" xsi:type="array">

        <item name="required-entry" xsi:type="string">true</item>

    </item>

    <item name="provider" xsi:type="string">checkoutProvider</item>

    <item name="dataScope" xsi:type="string">bookingCheckout.enobis_exhibition_pickup_date</item>

    <item name="config" xsi:type="array">

        <item name="customScope" xsi:type="string">bookingCheckout</item>

    </item>

    <item name="additionalClasses" xsi:type="string">field-50</item>

    <item name="booking_preset" xsi:type="string">to</item>

    <item name="disabled" xsi:type="string">disabled</item>

    <item name="options" xsi:type="array">

        <item name="dateFormat" xsi:type="string">dd.MM.yy</item>

    </item>

</item>

Features:

  • Preassigned date from booking calender: bash<item name="booking_preset" xsi:type="string">to</item>

  • Disabled form element: bash<item name="disabled" xsi:type="string">disabled</item>

Dropdown


<item name="enobis_exhibition_reason" xsi:type="array">

    <item name="component" xsi:type="string">Magento_Ui/js/form/element/select</item>

    <item name="label" xsi:type="string">What is the goal of your event with these exhibits?</item>

    <item name="template" xsi:type="string">ui/form/field</item>

    <item name="elementTmpl" xsi:type="string">ui/form/element/select</item>

    <item name="validation" xsi:type="array">

        <item name="required-entry" xsi:type="string">true</item>

    </item>

    <item name="provider" xsi:type="string">checkoutProvider</item>

    <item name="dataScope" xsi:type="string">bookingCheckout.enobis_exhibition_reason</item>

    <item name="options" xsi:type="array">

        <item name="reason_0" xsi:type="array">

            <item name="label" xsi:type="string" translate="true">Please select</item>

            <item name="value" xsi:type="string"></item>

        </item>

        <item name="reason_1" xsi:type="array">

            <item name="label" xsi:type="string" translate="true">Winning B2B customer</item>

            <item name="value" xsi:type="string">Winning B2B customer</item>

        </item>

        <item name="reason_2" xsi:type="array">

            <item name="label" xsi:type="string" translate="true">Winning B2C candidates</item>

            <item name="value" xsi:type="string">Winning B2C candidates</item>

        </item>

        <item name="reason_3" xsi:type="array">

            <item name="label" xsi:type="string" translate="true">Image - Thought Leadership, branding</item>

            <item name="value" xsi:type="string">Image - Thought Leadership, branding</item>

        </item>

    </item>

    <item name="config" xsi:type="array">

        <item name="customScope" xsi:type="string">bookingCheckout</item>

    </item>

    <item name="additionalClasses" xsi:type="string">field-100</item>

</item>

Multiselect


<item name="enobis_exhibition_targetgroup" xsi:type="array">
    <item name="component" xsi:type="string">Magento_Ui/js/form/element/multiselect</item>
    <item name="label" xsi:type="string">Target group: Who are the visitors?</item>
    <item name="template" xsi:type="string">ui/form/field</item>
    <item name="elementTmpl" xsi:type="string">ui/form/element/multiselect</item>
    <item name="validation" xsi:type="array">
        <item name="required-entry" xsi:type="boolean">true</item>
    </item>
   <item name="multiple" xsi:type="array">
       <item name="required-entry" xsi:type="boolean">true</item>
   </item>
    <item name="provider" xsi:type="string">checkoutProvider</item>
    <item name="dataScope" xsi:type="string">bookingCheckout.enobis_exhibition_targetgroup</item>
    <item name="options" xsi:type="array">
        <item name="0" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">OEM</item>
            <item name="value" xsi:type="string">OEM</item>
        </item>
        <item name="1" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Wholesaler</item>
            <item name="value" xsi:type="string">Wholesaler</item>
        </item>
        <item name="2" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Distributor</item>
            <item name="value" xsi:type="string">Distributor</item>
        </item>
        <item name="3" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Enduser</item>
            <item name="value" xsi:type="string">Enduser</item>
        </item>
        <item name="4" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Decision makers</item>
            <item name="value" xsi:type="string">Decision makers</item>
        </item>
        <item name="5" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Purchase</item>
            <item name="value" xsi:type="string">Purchase</item>
        </item>
        <item name="6" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Service technicans</item>
            <item name="value" xsi:type="string">Service technicans</item>
        </item>
        <item name="7" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Others</item>
            <item name="value" xsi:type="string">Others</item>
        </item>
    </item>
    <item name="config" xsi:type="array">
        <item name="customScope" xsi:type="string">bookingCheckout</item>
    </item>
    <item name="additionalClasses" xsi:type="string">field-100</item>
</item>

Checkbox Set

<item name="enobis_exhibition_requirements" xsi:type="array">
   <item name="component" xsi:type="string">Magento_Ui/js/form/element/checkbox-set</item>
   <item name="label" xsi:type="string">What support do you require from CCM (Corporate Central Marketing of BITZER Headquarters)?</item>
   <item name="template" xsi:type="string">ui/form/field</item>
   <item name="elementTmpl" xsi:type="string">ui/form/element/checkbox-set</item>
   <item name="validation" xsi:type="array">
       <item name="required-entry" xsi:type="boolean">true</item>
   </item>
   <item name="multiple" xsi:type="array">
       <item name="required-entry" xsi:type="boolean">true</item>
   </item>
   <item name="provider" xsi:type="string">checkoutProvider</item>
   <item name="dataScope" xsi:type="string">bookingCheckout.enobis_exhibition_requirements</item>
   <item name="options" xsi:type="array">
       <item name="0" xsi:type="array">
           <item name="label" xsi:type="string" translate="true">Exhibits Loan</item>
           <item name="value" xsi:type="string">Exhibits Loan</item>
       </item>
       <item name="1" xsi:type="array">
           <item name="label" xsi:type="string" translate="true">Support for floor planning of the stand</item>
           <item name="value" xsi:type="string">Support for floor planning of the stand</item>
       </item>
       <item name="2" xsi:type="array">
           <item name="label" xsi:type="string" translate="true">Renderings of stand design</item>
           <item name="value" xsi:type="string">Renderings of stand design</item>
       </item>
       <item name="3" xsi:type="array">
           <item name="label" xsi:type="string" translate="true">Design and delivery of printing data of wall graphics</item>
           <item name="value" xsi:type="string">Design and delivery of printing data of wall graphics</item>
       </item>
       <item name="4" xsi:type="array">
           <item name="label" xsi:type="string" translate="true">Stand building with builder (partner) of CCM</item>
           <item name="value" xsi:type="string">Stand building with builder (partner) of CCM</item>
       </item>
   </item>
   <item name="config" xsi:type="array">
        <item name="customScope" xsi:type="string">bookingCheckout</item>
   </item>
   <item name="additionalClasses" xsi:type="string">field-100 hide-inner-legend</item>
</item>

Addons

Extension-Name: enobis/module-booking-checkout

Support

If you need help using the CHILIconnector, please get in touch with us by sending an email to support@enobis.de.