Documentation of Owebia-Shipping 2.5.13 extension for Magento

Introduction

Owebia Shipping is an extension for the e-commerce solution Magento.

Thanks to its syntax using JSON, this extension allows great flexibility in setting delivery charges.

This documentation explains how to create a configuration for one of the proposed shipping modes.

New documentation, simpler and clearer.
Use the index to find more easily something in the documentation.

Examples

Simple example: free shipping

{ "__auto__":{"label":"Free shipping","fees": 0} }

Fees related to the destination

{ "__auto__":{"label":"France, Germany, Switzerland, Spain, Italy","shipto":"FR,DE,CH,ES,IT","fees":10}, "__auto__":{"label":"France except Corsica","shipto":"FR-(2A,2B)","fees":10}, "__auto__":{"label":"Corsica","shipto":"FR(2A,2B)","fees":10}, "__auto__":{"label":"Worldwide except Germany and Corsica","shipto":"* - ( DE, FR(2A,2B) )","fees":10} }

Use the wildcard character * or regular expressions

{ "__auto__":{"label":"Wildcard character allowing postal codes beginning with 25","shipto":"FR(25*)","fees":10}, "__auto__":{"label":"Regular expressions allowing postal codes beginning with 'PO', 'po', 'Po' or 'pO'","shipto":"GB(/^PO.*$/i)","fees":10} }

Block delivery to France but with a postal code for DOM/TOM

With the following regular expression, you block the postal codes that starts with 97 or 98 (with or without interspersed zeros and spaces).

{ "__auto__":{"label":"Regular Expression refusing postal codes beginning with 97 and 98","shipto":"FR-(/^[0\\s]*9\\s*[78].*/)","fees":10} }

Using shortcuts address_filter

{ "__auto__":{"label":"Europe except France","shipto":"({address_filter.EU-27}) - (FR)","fees":10} }

Fees related to customer group

You can use the name or ID of the customer groups.

{ "__auto__":{"label":"NOT LOGGED IN and General groups","customer_groups":"NOT LOGGED IN,General","fees":10}, "__auto__":{"label":"NOT LOGGED IN and General groups by their ID","customer_groups":"0,1","fees":10}, "__auto__":{"label":"Retailer group","customer_groups":"Retailer","fees":10} }

Using formulas

Formulas can be used in properties conditions and fees.

{ "__auto__":{"label":"Shipping","fees":"0.1 * {cart.price-tax+discount} + 10.00"} }

Copying the property of another element

{ "standard":{"label":"Standard Shipping","conditions":"{cart.price-tax+discount} < 1000.00","fees":10}, "express":{"label":"Express Shipping","conditions":"( {standard.conditions} ) && ( {cart.weight} < 10 )","fees":12} }

Using the function min()

{ "__auto__":{"label":"Shipping","fees":"min({cart.weight}, {cart.price+tax+discount}, {cart.qty})"} }

Using the function range()

{ "__auto__":{"label":"Shipping","conditions":"range({cart.weight}, 1.0, 3.0)","fees":10} }

Using the function substr()

A variable of type string must be surrounded by single quotes unless the auto-quoting is used with the characters {{ and }}.

{ "__auto__":{"label":"Without auto-quoting","conditions":"substr('{cart.coupon_code}', 0, 5)=='free_'","fees":10}, "__auto__":{"label":"With auto-quoting","conditions":"substr({{cart.coupon_code}}, 0, 5)=='free_'","fees":10} }

Using special functions

Using the special function {table … in …}

{ "__auto__":{"label":"Shipping","fees":"{table {cart.weight} in 0.5:5.30, 1.0:6.50, 2.0:7.40, 3.0:8.30, 5.0:10.10}"} }

In a table, you can include or exclude a limit value with the characters [ and ]:

{ "__auto__":{"label":"Upper limit included","fees":"{table {cart.weight} in 1.0]:5.00}"}, "__auto__":{"label":"Upper limit excluded","fees":"{table {cart.weight} in 1.0[:5.00}"} }

In a table, you must specify the reference value. To do this, you can use one of the variables available.
You can also use a formula to define another reference value.

{ "__auto__":{"label":"Table with cart weight","fees":"{table {cart.weight} in 0.5:5.30, 1.0:6.50}"}, "__auto__":{"label":"Table with items quantity","fees":"{table {cart.qty} in 10:5.30, 20:6.50}"}, "__auto__":{"label":"Table with price including tax","fees":"{table {cart.price+tax+discount} in 15.00:5.30, 30.00:6.50, *:10.00}"}, "__auto__":{"label":"Table with price excluding tax","fees":"{table {cart.price-tax+discount} in 15.00:5.30, 30.00:6.50, *:10.00}"}, "__auto__":{"label":"Table with custom value","fees":"{table ceil({cart.weight}/10) in 1:5.30, 2:6.50}"} }

Using the special function {switch … in …} (associative table)

In a switch, you must specify the reference value. To do this, you can use one of the variables available.
You can also use a formula to define another reference value.

{ "__auto__":{"label":"Switch with coupon code","fees":"{switch {{cart.coupon_code}} in 'coupon1':5.30, 'coupon2':6.50, null:10.00, *:7.50}"}, "__auto__":{"label":"Switch with delivery country","fees":"{switch {{shipto.country_id}} in 'FR':5.30, 'BE':6.50, 'DE':10.00, *:7.50}"} }

Using the special function {count …}

{ "__auto__":{"label":"If at least one product has the attribute 'color' equal to 'Bleu'","conditions":"{count items where product.attribute.color=='Bleu'} > 0","fees":10}, "__auto__":{"label":"If all items have the option 'size' greater or equal to '1'","conditions":"{count items where item.option.size>='1'} == {cart.qty}","fees":10} }

If the property is of type Yes/No, you must use the values true/false or 1/0 without quotes.

{ "__auto__":{"label":"Example of property of type Yes/No: 1","conditions":"{count items where product.attribute.colissimo_allowed==1}","fees":10}, "__auto__":{"label":"Example of property of type Yes/No: true","conditions":"{count items where product.attribute.colissimo_allowed==true}","fees":10} }

Using the special function {count distinct …}

{ "__auto__":{"label":"Count of different SKU","conditions":"{count distinct product.attribute.sku}","fees":10} }

Using the special function {sum …}

{ "__auto__":{"label":"Sum of all options 'size' is greater than 30","conditions":"{sum item.option.size} > 30","fees":10} }

Using the special function {min …}

{ "__auto__":{"label":"Minimum price excluding tax without discount is greater to 10","conditions":"{min item.price-tax-discount} > 10","fees":10} }

Using the special function {max …}

{ "__auto__":{"label":"Maximum value of the option 'size' is lower than 50","conditions":"{max item.option.size} < 50","fees":10} }

Using {foreach …} loops

{ "__auto__":{"label":"Grouping products by origin and process groups seperately","fees":"{foreach product.attribute.code_origin}{table {selection.weight} in 0.0:0.00, 1.0:11.00, 3.0:12.00, 5.0:13.00}{/foreach}"}, "__auto__":{"label":" Calculate shipping fees by product","fees":"{foreach product.attribute.sku}{product.attribute.shipping}*{item.qty}{/foreach}"} }

Manipulate arrays

Using the function in_array()

{ "__auto__":{"label":"Shipping","conditions":"in_array({cart.qty}, array(10, 20, 30))","fees":10} }

Using the function in_array() avec des chaînes de caractères *

{ "__auto__":{"label":"Shipping","conditions":"in_array({{cart.coupon_code}}, array('free1', 'free2'))","fees":10} }

Using the function array_match_any()

{ "__auto__":{"label":"Shipping","about":"5 x weight of products that are in category 2 or category 3","fees":"{sum product.weight where array_match_any(product.categories.id, array(2, 3))} * 5.0"} }

Using the function array_match_all()

{ "__auto__":{"label":"Shipping","about":"5 x weight of products that are in both category 2 and category 3","fees":"{sum product.weight where array_match_all(product.categories.id, array(2, 3))} * 5.0"} }

Other examples

Using product category

Warning: you must notice that in Magento, a product can be in multiple categories. So be particularly careful how you use this property.

{ "__auto__":{"label":"Foreach loop with an iteration on the category","fees":"{foreach product.categories}{selection.weight}{/foreach}"}, "__auto__":{"label":"Using the category inside a foreach loop","fees":"{foreach product.sku}({{product.category}}=='Test' ? 2.00 : 1.00)*{item.qty}{/foreach}"}, "__auto__":{"label":"Using the id of the category inside a foreach loop","fees":"{foreach product.sku}({product.category.id}==12 ? 2.00 : 1.00)*{item.qty}{/foreach}"}, "__auto__":{"about":"The function in_array() is used because product.categories returns an array","label":"Sum of weight attributes of products in category 'Test' ","fees":"{sum product.weight where in_array('Test', product.categories)}"}, "__auto__":{"about":"The function in_array() is used because product.categories.id returns an array","label":"Sum of weight attributes of products in category 12 ","fees":"{sum product.weight where in_array(12, product.categories.id)}"}, "__auto__":{"about":"The function array_match_any() is used because product.categories.id returns an array","label":"Sum of weight attributes of products in categories whose id is 11 and 12","fees":"{sum product.weight where array_match_any(product.categories.id, array(11, 12))}"}, "__auto__":{"label":"Sum of weights of products having for first category 'Test'","fees":"{sum product.weight where product.category=='Test'}"}, "__auto__":{"label":"Sum of weights of products having for first category id 12","fees":"{sum product.weight where product.category.id==12}"} }

Adding and using a data element

An element of type data allow to define data that can be used in shipping methods.

{ "mydata":{"type":"data","var1":"12"}, "__auto__":{"label":"Shipping","shipto":"FR","fees": "{mydata.var1}"}, "__auto__":{"label":"Shipping","shipto":"DE","fees": "{mydata.var1}*1.5"} }

Adding a meta element

An element of type meta allow to specify informative data (author, date…).

{ "about":{"type":"meta","author":"Owebia","date":"15/07/2013","about":"2013 rates"} }

Definitions

The configuration of a shipping mode is a JSON object containing properties.
Each property has a unique name, wich will serve as unique identifier.
Each property will consiste on a configuration element (also a JSON object).

Elements

There are three different types of configuration element:

  • method: shipping method (default if not specified)
  • data: data that can be used in one or more shipping methods (examples)
  • meta: informative data (examples)

Properties

Each element has several properties:

  • about: comment about the element
  • type: element type (method, meta or data)

Properties specific to the element type method:

  • label: name of shipping method
  • description (visible only if the template displays it)
  • enabled: shipping method enabled or not
  • fees: shipping fees
  • conditions: activation conditions
  • shipto: countries (regions, postal codes) allowed for delivery
  • billto: countries (regions, postal codes) allowed for billing
  • origin: countries (regions, postal codes) allowed for origin
  • customer_groups: customer groups allowed
  • tracking_url (more informations)

See examples

Using properties of type address (shipto, billto and origin)

The country codes used are those of Magento (apparently they are the same as the ISO 3166-1 alpha-2 codes).
It is possible to specify region codes (only with shipto) or zip codes that you want to filter or exclude.

You can use the wildcard character * or regular expressions for postal codes.
A regular expression must start and end with the character /. If you want to use the characters (, ) or ., you must escape them with the character \ (ex: "FR(/^25\([0-9]{3}\)$/)").
You can use the insensitivity modifier (ex: "GB(/^PO.*$/i)").

See examples

Tip
To shorten the seizure of countries, you can use the following variables:

  • {address_filter.AF}: African countries
  • {address_filter.AS}: Asian countries
  • {address_filter.EU}: European countries
  • {address_filter.NA}: North American countries
  • {address_filter.SA}: South American countries
  • {address_filter.OC}: Oceanian countries
  • {address_filter.AN}: countries of Antarctica
  • {address_filter.EU-27}: countries of the European Union
  • {address_filter.DOM}: country codes of French Overseas "Départements"
  • {address_filter.COM}: country codes of French Overseas "Collectivités"

See examples

The unique identifier

Each configuration element has a unique identifier. This identifier can be used to refer to the element.

Example:

{ "europa":{"label":"Shipping to Europa","fees":10}, "us":{"label":"Shipping to US","fees":"{europa.fees}+20"} }

Warning: to avoid conflicts, use only the characters a-z, A-Z, 0-9, - and _ for the unique identifier.
You should also avoid identifiers that already correspond to variable names (cart, product, item…).

Formulas

The properties fees and conditions are defined using formulas.

A formula uses variables, functions, special functions and mathematical operators.

Available mathematical operators:

  • operators: *, /, + and -
  • modulo: %
  • parentheses: ( and )
  • boolean operators &&, and, ||, or, ==, <, >, <=, >=
  • binary operators & and |
  • the operator group C ? X : Y (ex: "{cart.price_exluding_tax}>100 ? 15*{cart.weight} : 20*{cart.weight}")

You can put spaces and line breaks in formulas (for lightening).

You can use the following advanced features: casting to interger (int) or floatting numbers (float), comparison with the null value or with boolean values true and false.

Variables

When you use variables of type string, you must escape them with single quotes or use the auto-quoting syntax {{ }}.

The following variables can be used in formulas.

  • The cart:
    • {cart.weight}: weight of goods
    • {cart.qty}: the quantity of items
    • {cart.price-tax+discount}: price excluding tax with discount
    • {cart.price+tax+discount}: price including tax with discount
    • {cart.price-tax-discount}: price excluding tax without discount
    • {cart.price+tax-discount}: price including tax without discount
    • {cart.coupon_code}: coupon code
    • {cart.free_shipping}: delivery offered (by rules in Magento) [true/false]
    • {cart.weight_unit}
    • {cart.weight_for_charge}: weight of goods whose delivery is not offered (by cart pricing rules in Magento)
  • The quote:
    • {quote.subtotal}: subtotal (excluding tax)
    • {quote.subtotal_with_discount}: subtotal (excluding tax) with discount
    • {quote.grand_total}: total (including tax) with discount
    • {quote.base_subtotal}: subtotal (excluding tax) in base currency
    • {quote.base_subtotal_with_discount}: subtotal (excluding tax) with discount in base currency
    • {quote.base_grand_total}: total (including tax) with discount in base currency
  • The customer group:
    • {customer_group.id}: id of customer group
    • {customer_group.code}: name of customer group
    • {customer_group.*}: property of the customer group (ex: {customer_group.tax_class_id})
  • The customer:
    • {customer.id}: id of customer
    • {customer.attribute.*}: attribute of the customer (ex: lastname, firstname, group_id…)
    • {customer.attribute.*.value}: in case of an attribute of type selection list, {customer.attribute.*} returns the id, to get the value, you have to use {customer.attribute.*.value}
    • {customer.*}: same as {customer.attribute.*}, unless the variable is already defined (ex: {customer.id} is already defined)
  • Custom Variables (since Magento 1.4.0.1):
    • {customvar.*}: custome variable defined in Magento (ex: {customvar.my_var})
  • The delivery address:
    • {shipto.country_name}
    • {shipto.country_id}: the country code
    • {shipto.region_id}
    • {shipto.region_code}
    • {shipto.street}
    • {shipto.city}
    • {shipto.postcode}
  • The billing address:
    • {billto.country_name}
    • {billto.country_id}: the country code
    • {billto.postcode}
    • {billto.*}: property of the billing address (ex: {billto.city})
  • The origin address:
    • {origin.country_name}
    • {origin.country_id}: the country code
    • {origin.region_id}
    • {origin.city}
    • {origin.postcode}
  • The store:
    • {store.id} {store.code} {store.name} {store.address} {store.phone}
  • The current date:
    • {date.timestamp}: UNIX timestamp of the current date
    • {date.year} {date.month} {date.day} {date.hour} {date.minute} {date.second}
    • {date.weekday}: day of the week for the current date from 0 (Sunday) to 6 (Saturday)
  • The request object:
    • {request.*}: property of the request object (Mage_Shipping_Model_Rate_Request) given by Magento (ex: {request.package_qty}). Use "Debug" option to get more details on available properties.

Variables that can be used in special functions

The following variables can be used in special functions.

Unlike elsewhere, the following variables should not be surrounded by the characters { and }.

An item is a variation of a product to which some options have been added. Each item has a quantity.

  • The item:
    • item.qty: quantity in the cart
    • item.price-tax+discount: price excluding tax with discount
    • item.price-tax-discount: price excluding tax without discount
    • item.price+tax+discount: price including tax with discount
    • item.price+tax-discount: price including tax without discount
    • item.option.*: option (the available options depend on the product)
  • The product:
    • product.attribute.*
      Interesting attributes:
      • sku
      • name
      • weight
      • price (as defined in Magento backoffice)
      • special_price: (as defined in Magento backoffice)
    • product.attribute.*.value: value of the attribute
      In case of an attribute of type selection list, product.attribute.* returns the id. To get the value, you have to use product.attribute.*.value
    • product.*: same as product.attribute.* unless the variable is already defined (ex: product.category)
    • First category of the product:
      • product.category: name of the category
      • product.category.id
      • product.category.*: attribute of the category (ex: product.category.is_active)
        Interesting attributes:
        • is_active
        • name
    • All product categories (returns an array, examples):
      • product.categories: array of name of the categories
      • product.categories.id: array of id of the categories
    • The attribute set:
      • product.attribute_set: name of the attribute set
      • product.attribute_set.id
      • product.attribute_set.*: attribute of the attribute set (ex: product.attribute_set.attribute_set_name)
    • product.stock.*: attribute of the product stock
      Interesting attributes:
      • is_in_stock
      • qty: quantity in stock

Variables that can be used in foreach loops

The following variables can be used in foreach loops.

  • {selection.weight}
  • {selection.qty}: items count in the selection

When the selection is made on the sku, each selection consists of a single article. We can therefore use the item and product variables.

  • {item.*}: item property
  • {product.*}: product property

Item and product variables are identical to variables that can be used in special functions with the only difference that they must be surrounded by the characters { and }.

Functions

Numerical functions

  • abs(x): absolute value
  • ceil(x): round up
  • exp(x): exponent
  • floor(x): round down
  • log(x): logarithm
  • log(x, base): natural logarithm
  • max(x, y, …): maximum, null values ignored
  • min(x, y, …): minimum, null values ignored
  • pi(): PI number
  • pow(x, puissance): pow
  • rand(min, max): random integer
  • round(x)
  • sqrt(x): square root

Functions to manipulate strings

  • substr(string, start, length): returns a string segment.

Functions to manipulate arrays

  • in_array(value, array(value1, value2, …)): returns true if the value is found in the array.
  • array_match_any(array(value1, value2, …), array(value1, value2, …)): returns true if at least one value is found in both arrays.
  • array_match_all(array(value1, value2, …), array(value1, value2, …)): returns true if both arrays are identical.

More functions

  • range(value, min, max, include_min, include_max): returns true if value is greater than min and lower than max. By default, include_min and include_max are equal to true.

Special functions

  • {table … in …}: defining values based on thresholds (examples)
  • {switch … in …}: defining an associative table (examples)

The first parameter of table and switch functions is the reference value, it can be either a variable or a formula.

  • {count items[ where …]}: counts eligible items (examples)
  • {count distinct …[ where …]}: counts all different values of a property for eligible items (examples)
  • {sum …[ where …]}: calculates the sum of the values of a property for eligible items (examples)
  • {min …[ where …]}: returns the minimum value of a property for eligible items (examples)
  • {max …[ where …]}: returns the maximum value of a property for eligible items (examples)

The first parameter of count distinct, sum, min and max functions must be a property (ex: product.attribute.weight).

The condition where is optional. If specified, it will be in the form of a formula.

Using foreach loops

foreach loops can perform a calculation on groups of products rather than consider all the products in the cart.
The overall result of a foreach loop is the sum of the results of each pass through the loop.

Inside a foreach loop, you can use new variables.

Examples

Miscellaneous

The tracking URL

The use of tracking_url property is reserved for experienced users. If you don't understand the instructions below, it is recommended that you avoid using this feature.

The tracking_url property overrides the field "Tracking URL" of an Owebia Shipping shipping mode. So you can specify a tracking URL foreach shipping method rather than one for all shipping mode.

To automatically insert the tracking number in the tracking URL, you must use {tracking_number}.

{ "__auto__":{"label":"Example of tracking URL for the carrier Colissimo","fees":10,"tracking_url":"http://www.coliposte.net/particulier/suivi_particulier.jsp?colispart={tracking_number}"} }

Magento does not support tracking links but tracking statuses. The extension Owebia Shipping 2 provides an HTML link instead of the status, link allowing you to go on the carrier's website and follow the progress of the parcel.

When the tracking URL is built by the extension, the only information available is the tracking number and there was nowhere an access to the shipping method selected. In order to find the tracking URL in the configuration, you must specify the shipping method inside the tracking number, for example: colissimo:8Lxxxxxxxxxxx where colissimo is the code of the shipping method selected.
If no code is specified (if you enter only the tracking number), the URL used will be the one of the shipping mode.

To answer a recurrent question, Magento displays the tracking status from the back office or front office. If you want to insert the tracking URL in shipping mails, you need to develop yourself the retrieval of tracking URL and its incorporation in the mail, in fact, the Owebia Shipping extension simply provides customizable shipping methods without making big changes to Magento core to reduce incompatibility and update problems.

If you get a blank popup when you click on the tracking link, your problem is most likely related to the fact that you did not specify the code of the shipping method in the tracking number (see instructions above) and your global field "Tracking URL" is empty.

There are currently no plans to change this feature.

Changelog

[2.5.13 - November 5, 2013]
Fixed a bug occuring when auto-escaping strings in tables (thanks to Sylvain P.)
Fixed a bug in the calculation of variables {car.price+tax+discount} and {cart.price+tax-discount} when the cart contains bundle products (thanks to Nematis)
Deletion of characters &gt; and &lt; remained in the sample JSON configuration in the documentation
Fixed a bug with {cart.free_shipping}
Fixed a bug in Owebia_Shipping2_Model_Os2_Data_Cart occuring when classes Mage_Sales_Model_Quote_Address_Item and Mage_Sales_Model_Quote_Item were redefined (thanks to Frank T.)
Deletion of the Colissimo configuration in the first delivery method: the configuration can be downloaded from the website owebia.com
Changing the origine of cart's amounts (thanks to carouze and Mathieu, see http://www.magentocommerce.com/boards/viewthread/274340/P15/#t382192)
New variables {quote.*}
Added an option to auto-escape systematicaly variables

[2.5.12 - 21 février 2013]
Suppression des tarifs Chronopost et Export 3J périmés (modification 2.5.10 beta non effective)
Passage en mode Stable
Rappel : depuis la version 2.5.01 beta, la syntaxe de la configuration a changée pour devenir compatible à 100% JSON. Cela permet de meilleures performances (à condition que le JSON soit correct) car le travail de parsing de la configuration est réalisé par les fonctions natives ou celles du framework Zend. Cela permet également à d'autres scripts de venir créer des configurations car le format JSON est un format d'échange standard.

[2.5.11 beta - 10 janvier 2013]
Compatibilité avec PHP < 5.3.0 (json_last_error)

[2.5.10 beta - 09 janvier 2013]
Suppression des tarifs Chronopost et Export 3J périmés
Ajout d'un lien "Télécharger des modèles de configuration" sous les champs "Configuration"
Correction d'un problème avec les customvar : récupération de la valeur store plutôt que la valeur par défaut
Ajout de l'option case insensitive dans les expressions régulières des adresses
Correction d'une variable indéfinie $get_by_id dans Owebia_Shipping2_Model_Os2_Data_AbstractWithAttributes
Modification du traitement des produits bundle (correction de la valeur de {cart.qty}, possibilité de traiter soit le produit bundle, soit les produits enfants)

[2.5.09 beta - 07 janvier 2013]
Interception des erreurs résultant de l'utilisation de json_decode()
Utilisation de la propriété "code" pour définir l'ID du nouvel object lors de la correction automatique de la configuration (sinon deux passes étaient nécessaires)
Attribution d'un ID prévisible (incrémental) pour les blocks meta d'autocorrection afin de pouvoir les éditer
Échappement des backslashes dans la fonction jsonEncode
Correction d'un bug avec l'utilisation des sum, min, max et count
Correction d'un bug d'affichage du champ d'édition lorsque plusieurs pages étaient ouvertes dans l'éditeur
Correction d'un problème rencontré lorsque la compression des javascript et css était activée
Mise à jour des tarifs Colissimo (1/03/2012)

[2.5.08 beta - 20 décembre 2012]
Correction d'un problème lié à un bug d'IE : la propriété CSS white-space: nowrap ne fonctionne pas sous IE (utilisée sur le textarea source de l'éditeur)
Correction d'un bug lorsque foreach est utilisé, les items du cart étaient écrasés, ce qui pouvait poser problème pour la suite des calculs (merci à David G.)

[2.5.07 beta - 14 décembre 2012]
Correction d'un problème d'incompatibilité avec la compilation de Magento

[2.5.06 beta - 10 décembre 2012]
Correction d'un bug dans OwebiaShippingHelper->_processProduct lorsqu'il n'y a pas de produit dans le panier
Petites corrections de la documentation
Traduction de la documentation en anglais

[2.5.05 beta - 27 novembre 2012]
Ajout de la variable {date.weekday}
Correction d'un bug dans OwebiaShippingHelper->processRow (merci à Rod)

[2.5.04 beta - 27 novembre 2012]
Correction du code PHP pour supprimer des erreurs E_STRICT (merci à Cyril R.)
Suppression du répertoire "development-bundle" de jQuery UI (-1.43 Mo)

[2.5.03 beta - 22 novembre 2012]
Rétrocompatibilité du code avec la version 5.2 de PHP

[2.5.02 beta - 22 novembre 2012]
Correction d'un problème de packaging
Réorganisation de la documentation
Ajout du numéro de version dans l'onglet "Modes de livraison"
Mise à jour de la syntaxe de la configuration par défaut

[2.5.01 beta - 21 novembre 2012]
Modification de la syntaxe de la configuration pour la rendre 100% compatible JSON
Refonte complète de l'éditeur
Suppression de la compatibilité avec les propriétés dépréciées suivantes :
	'fees_table', 'fees_formula', 'fixed_fees', 'reference_value', 'prices_range', 'weights_range', 'product_properties',
	'free_shipping__fees_table', 'free_shipping__fees_formula', 'free_shipping__fixed_fees', 'free_shipping__label',
Suppression de la compatibilité avec la désactivation d'une méthode de livraison à l'aide du caractère #
Suppression de la compatibilité avec les mots réservés en majuscule : TABLE, SUM, COUNT, DISTINCT et IN
Ajout des fonctions array_match_any et array_match_all
Correction de product.categories et product.categories.id qui ne marchait plus depuis la version 2.4.8
Mise à jour de la documentation en Français

[2.4.8 beta - 28 août 2012]
Modification du controller utilisé pour l'éditeur afin que cela fonctionne toujours lorsque l'url du backoffice de celle du frontoffice ne sont pas sur le même sous-domaine (ex: admin.example.org et www.example.org) (merci à Brice C.)
Restructuration complète des variables afin d'optimiser le chargement des données (uniquement si elles sont utilisées)
Ajout de nouvelles variables {customer_group.*}, {customer.*}, {request.*}, {item.*}, {billto.*}
Renommage de certaines variables ({destination.*} => {shipto.*}, {free_shipping} => {cart.free_shipping}, {cart.quantity} => {cart.qty}, ...)
Ajout de l'option "auto correction" qui permet de désactiver les corrections automatiques de compatibilité de la configuration afin d'avoir de meilleures performances
Ajout de la fonction spéciale range()
Renommage de l'onglet "Owebia" en "Owebia Shipping 2"
Gestion des Bundle Product et des Configurable Product (possibilité de choisir où récupérer les données depuis l'onglet "Owebia Shipping 2")
Mise à jour de la documentation

[2.4.7 - 20 mars 2012]
Correction du code PHP pour supprimer des erreurs E_STRICT

[2.4.6 - 19 janvier 2012]
Correction d'un bug dans l'utilisation de la fonction {table ... in ...} : lorsque la variable de référence est indéfinie, le résultat était invalide (valeur précédente de la variable $replacement)
Correction d'un problème avec les produits packagés (bundle product) : les produits 'bundle' et les produits 'simple' étaient tous deux récupérés ce qui faussait les résultats
Support des sets d'attributs
	product.attribute_set dans les conditions de boucle foreach
	{product.attribute_set} et {product.attribute_set.id} comme variables dans les boucles foreach
	product.attribute_set, product.attribute_set.id dans les conditions des opérations sum, count, min et max
Optimisation du chargement de certaines valeurs (catégories, attribute set, ...)
Correction d'un problème avec les castings successifs (string), (float) qui posent problème lorsque la locale utilise la virgule comme séparateur de décimales

[2.4.5 - 12 janvier 2012]
Ajout de la fonction switch
Ajout d'une syntaxe pour auto-échapper les chaînes de caractères (ex: {{cart.coupon}} donnera null ou 'test' en fonction de la valeur de la variable)
Dans le cas d'un produit configurable avec option personnalisable, on récupère les options du produit parent et pas celles du produit enfant
Mise à jour de la documentation

[2.4.4 - 30 novembre 2011]
Correction d'un bug avec l'utilisation de product.category.id
Ajout des valeurs memory_limit et memory_usage dans le debug

[2.4.3 - 11 octobre 2011]
Support de la variable {cart.coupon} depuis le backoffice de Magento (merci à mfoillard, CF: http://www.magentocommerce.com/boards/viewthread/262907/)
Correction d'un bug dans les opérations sum, count, min et max ($properties = array(); écrasait plusieurs fois les valeurs précédentes)

[2.4.2 - 07 octobre 2011]
Support des nombres décimaux représentés sous la forme 5.3290705182E-15
Modification de la licence du code source (MIT au lieu de OSL 3.0)
Mise à jour des mentions de copyright et de licence
Nettoyage du code source (suppression de lignes de code en commentaire)
Initialisation des formules sum et count à 0 au lieu de null (pour éviter les erreurs de formule si aucun produit ne correpond)
Ajout des alias "a" et "attr" pour "attribute", "o" et "opt" pour "option", "p" pour "product", "c" pour "cart", "s" pour "selection"
Correction de la récupération des variables personnalisées : getValue('text') au lieu de getValue('plain')
Support des catégories
	product.categories dans les conditions de boucle foreach
	{product.category} et {product.category.id} comme variables dans les boucles foreach
	product.category, product.category.id, product.categories, product.categories.id dans les conditions des opérations sum, count, min et max
Amélioration du debug

[2.4.1 - 24 août 2011]
Modification légère du code php pour éviter un plantage avec certaines versions d'eAccelerator (cache php)
		$row = null;
		$this->addMessage('info',$row,null,'Ignored lines %s','<div class="code">'.trim($config_string).'</div>');
	au lieu de ;
		$this->addMessage('info',$row=null,null,'Ignored lines %s','<div class="code">'.trim($config_string).'</div>');
	(cf http://www.magentocommerce.com/boards/viewthread/233202/)
Ajout des variables de debug "info.server.os" et "info.server.software"
Ajout de la possibilité de récupérer la valeur minimum ou maximum de la quantité (ex: "{max product.quantity}")

[2.4.0 - 27 juin 2011]
Correction d'un bug lorsque plusieurs produits identiques avec des options différentes sont présents dans le panier (la valeur de l'option était toujours égale à celle du premier produit)
Ajout de la possibilité d'utiliser les expressions régulières dans les champs "destination" et "origin"
Ajout de la variable {car.weight.for-charge}
Mise à jour de la documentation en français
Mise à jour de l'éditeur
Correction d'un bug de l'éditeur lorsqu'on éditait une destination puis qu'on cliquait sur Annuler

[2.3.11 - 28 avril 2011]
Correction d'un problème d'encodage/décodage entre le javascript et le php via ajax (les signes "+" disparaissaient)
Surcharge du fichier Mage/Checkout/controllers/CartController.php pour corriger un problème avec Magento : les champs Mage_Sales_Quote_Item->_data['tax_amount'] n'étaient pas mis à jour correctement, ce qui créait un décalage et faussait la variable {cart.price+tax+discount}

[2.3.10 - 12 avril 2011]
Correction d'un problème dans AjaxController.php : passage direct d'un tableau par référence, il faut d'abord créer le tableau dans une variable puis passer la variable par référence
Ajout de la variable {cart.coupon}
Ajout des variables {cart.price-tax+discount}, {cart.price-tax-discount}, {cart.price+tax+discount}, {cart.price+tax-discount} qui permettent d'avoir le montant que l'on désire, avec ou sans prise en compte des taxes et des remises
Gestion semblable pour les attributs des produits : product.attribute.price-tax+discount utilisable dans une structure {sum} par exemple
Ajout de la possibilité de récupérer la valeur minimum ou maximum d'un attribut ou d'une option (utilisation identique à sum)

[2.3.9 - 20 janvier 2011]
Correction d'un problème avec le fichier adminhtml.xml (il y avait un commentaire avant l'en-tête XML)

[2.3.8 - 14 janvier 2011]
Correction d'un bug avec la propriété "customer_groups" lorsqu'on utilisait les id's (is_int remplacé par ctype_digit)
Modifications des champs de configuration :
- Le champ "debug" devient de type Oui/Non
- Le champ "auto-compression" devient "compression" de type Oui/Non
Implémentation d'une compression efficace :
- La configuration est compressée à l'aide de la fonction gzcompress() puis encodée en base 64 afin d'être facilement placée dans un champ textarea
- La longueur de configuration peut être divisée par 4 grâce à la compression
- La compression peut être utile sur certaines configurations où la longueur des champs est limitée
Amélioration de l'éditeur :
- Récupération des groupes utilisateurs de Magento et création d'un bouton pour chacun d'eux
- Ajout d'un bouton "Aide" (qui ouvre l'aide de l'éditeur) à droite du bouton "Ouvrir l'éditeur"
- Centralisation du changelog dans un fichier app/code/community/Owebia/Shipping2/changelog plutôt que dans les fichiers de langue
- L'éditeur compresse/décompresse la configuration (si la compression est activée)
Amélioration du debug
- Ajout des versions de PHP et de Magento
- Correction du chemin du fichier OwebiaShippingHelper.php
- Affichage du debug par la commande Mage::getSingleton('core/session')->addNotice() afin d'avoir un affichage plus propre (à l'intérieur des balises html)
- Affichage du debug seulement sur la page checkout/cart/index
Création d'un fichier app/code/community/Owebia/Shipping2/etc/adminhtml.xml (pour résoudre les problèmes d'accès à la section de configuration Owebia)
Mise à jour des tarifs par défaut avec les tarifs Colissimo Particuliers 2010 et Chronopost web 2010

[2.3.7 - 11 janvier 2011]
Modification de la récupération du timestamp courant en tenant compte du fuseau horaire sélectionné
Modification du CSS de l'éditeur pour palier à une modification du CSS du backoffice (sur les balises legend)
Ajout de contrôles isset dans le fichier app/code/community/Owebia/Shipping2/controllersAjaxController.php (merci à Damien C.)
Échappement des guillemets doubles dans la méthode _getConfig() dans le fichier js/owebia/shipping2/os2editor.js (merci à Damien C.)
Ajout de la méthode getRates() dans la classe Owebia_Shipping2_Model_Carrier_AbstractOwebiaShipping qui permet de récupérer les frais de port en injectant les données que l'on souhaite en paramètre
Réécriture de la méthode collectRates()

[2.3.6 - 23 novembre 2010]
Ajout d'un fichier app/etc/modules/Owebia_Shipping_2.xml vide pour écraser celui des versions précédentes à la 2.3.0 afin d'éviter une cohabitation de deux versions
Amélioration du traitement des commentaires avec l'éditeur (gestion des caractères #)

[2.3.5 - 08 novembre 2010]
Correction d'un problème chez les utilisateurs ayant une version de PHP antérieure à 5.3.0

[2.3.4 - 06 novembre 2010]
Correction d'un bug introduit dans la version 2.3.2 lors de l'utilisation des attributs et options avec les fonctions sum, count et count distinct

[2.3.3 - 05 novembre 2010]
Possibilité de faire des copie de propriétés de façon récursive avec contrôle de boucle infinie

[2.3.2 - 05 novembre 2010]
Amélioration de l'éditeur :
- Ajout de l'aide en langue anglais
- Ajout d'informations dans l'aide
- Ajout des messages d'erreur de la configuration, avec possibilité de correction rapide
- Ajout de champs pour les lignes ignorées : on peut ainsi les modifier et appliquer les modifications
Ajout de la possibilité d'accéder aux informations sur le stock d'un produit grâce aux variables {product.stock.is_in_stock} et {product.stock.quantity}
Suppression de l'affichage du message d'erreur ""Correspondance non trouvée""
Correction d'un bug avec les groupes utilisateur ($id==null retournait true lorsque $id était égal à 0)
Correction d'une erreur de récupération de l'unité de poids
Améliorations diverses

[2.3.1 - 29 octobre 2010]
Correction d'un bug dans le fichier AjaxController : une variable n'était pas définie, ce qui générait une erreur avec certaines configurations PHP

[2.3.0 - 28 octobre 2010]
Correction d'un bug avec le caractère * dans les champs ""destination"" et ""origin"" comme jocker
Ajout d'un éditeur pour faciliter la modification des configurations Owebia Shipping
L'éditeur contient également une aide
Déplacement de certains fichiers pour mieux correspondre à la structure de Magento

[2.2.8 - 20 octobre 2010]
Correction d'une erreur dans l'include d'OwebiaShippingHelper lorsqu'on utilise le Compiler
Correction d'un bug de calcul du prix TTC dans certains cas ('row_total_with_discount' est égal à 0)
Ajout de la possibilité d'utiliser le caractère * dans les champs ""destination"" et ""origin"" comme jocker (par exemple ""FR(25*)"" retournera vrai pour tous les codes postaux du département du Doubs)
Ajout d'un bouton pour fermer la console de debug
Ajout d'informations dans le debug (tests sur la destination et l'origine, liste des variables passées en paramètre)
Affichage du debug uniquement sur la page panier (pas sur les pages en ajax)
Récupération du bon customer group lors d'une commande créée depuis le backoffice de Magento

[2.2.7 - 27 août 2010]
Possibilité d'utiliser les variables personnalisées (custom variables) de Magento grâce à la syntaxe {customvar.my_var} ou à la syntaxe standard {{customVar code=my_var}}

[2.2.6 - 25 août 2010]
Correction d'un bug avec la fonction getRowProperty() : utilisation de preg_match_all() à la place de while(preg_match()) et utilisation de continue à la place de break

[2.2.5 - 22 août 2010]
Correction d'un bug avec les propriétés de type booléenne spécifiées sans les guillemets (comme la propriété enabled)
Correction d'un bug avec la propriété customer_groups

[2.2.4 - 10 août 2010]
Utilisation de Mage::getModel('directory/country')->load($country_code)->getName() à la place de Mage::getModel('core/locale')->getLocale()->getTranslationList('territory',null,2) pour récupérer le nom d'un pays dans la langue courante (la première solution semble retourner le nom du pays dans la langue principale de la boutique), merci à coolshop pour la solution proposée
Remplacement de la valeur de configuration ""Afficher quand indisponible"" par la valeur ""Debug"" car la solution précédente posait des problèmes avec Magento 1.4.0
Amélioration de la clarté du debug (utilisation de couleurs et d'indentations)
Correction de bugs légers
Mise à jour de la syntaxe de la configuration proposée par défaut

[2.2.3 - 29 juillet 2010]
Correction d'un bug avec le traitement de formules dont le résultat est false

[2.2.2 - 29 juillet 2010]
Amélioration du système de cache des formules

[2.2.1 - 27 juillet 2010]
Correction de petits bugs

[2.2.0 - 22 juillet 2010]
Possibilité de compression/décompression de la configuration
Modification de certaines propriétés ({weight} => {cart.weight}, {price_excluding_tax} => {cart.price_excluding_tax}, {price_including_tax} => {cart.price_including_tax}, {products_quantity} => {cart.quantity},{contry} => {destination.country.name})
Syntaxe légèrement modifié pour {product.attribute.xxx} et {product.option.xxx} (pas de s)
Ajout de nouvelles propriétés utilisables dans le foreach : {selection.weight}, {selection.quantity}, {product.weight}, {product.quantity}
Possibilité d'utiliser {product.attribute.xxx} et {product.option.xxx} dans le foreach

[2.1.9 - 20 juillet 2010]
Évaluation des formules contenues dans les propriétés ""label"" et ""description""

[2.1.8 - 20 juillet 2010]
Correction d'une erreur dans le foreach (l'attribut était toujours ""name"")

[2.1.7 - 19 juillet 2010]
Ajout de la syntaxe foreach product.attribute.xxx

[2.1.6 - 28 décembre 2009]
Correction d'une erreur dans le nom d'une variable qui entrainait un plantage dans certaines situations

[2.1.5 - 28 décembre 2009]
Modification de la syntaxe des tables (pour offrir plus de souplesse)

[2.1.4 - 24 décembre 2009]
Modification de la syntaxe d'utilisation des propriétés des produits (pour offrir beaucoup plus de souplesse)
Possibilité de filtrer les produits dont on veut utiliser les propriétés.
Ajout de 'COUNT DISTINCT'

[2.1.3 - 17 décembre 2009]
Correction du calcul du nombre de produits dont les propriétés correspondent ""{count ..."" : prise en compte de la quantité
Simplification de la syntaxe de copie de propriété

[2.1.2 - 27 novembre 2009]
Correction d'un problème de priorité entre l'opérateur ""="" et l'opérateur ""and"" dans l'évaluation des formules : ajout de parenthèses autour de la formule

[2.1.1 - 26 novembre 2009]
Suppression de la propriété 'product_properties' qui doit être utilisée dans la propriété 'conditions'
Améliorations diverses

[2.1.0 - 24 novembre 2009]
Regroupement des propriétés 'fees_table', 'fees_formula' et 'fixed_fees' dans une unique propriété 'fees'
Regroupement des propriétés 'prices_range' et 'weights_range' dans une unique propriété 'conditions'
Suppression de la propriété 'reference_value'
Suppression des propriétés 'free_shipping__fees_table', 'free_shipping__fees_formula' et 'free_shipping__fixed_fees' (utiliser '{free_shipping}' dans la propriété 'conditions' à la place)
Ajout d'un analyseur de syntaxe de la configuration pour indiquer l'utilisation de propriétés non reconnues ou de propriétés obsolètes, les valeurs non reconnues, les virgules manquantes en fin de ligne, les doublons des propriétés 'code'
Utilisation des valeurs des propriétés obsolètes dans leur nouvel équivalent
Possibilité de copier une propriété avec la syntaxe ""{copy 'colissimo'.'fees'}""
Nouvelle syntaxe pour les tables (ancienne propriété 'fees_table') : ""{table 'weight' 1.0:2.50, 2.0:3.00}"" qui peuvent désormais être intégrées dans des formules
Séparation des méthodes publique, privées génériques (préfixe '_'), privées spécifiques à Magento (préfixe '__') pour faciliter le portage du module vers un autre système de boutique en ligne que Magento

[2.0.12 - 19 novembre 2009]
Amélioration de la transmission des variables entre les méthodes de la classe

[2.0.11 - 19 novembre 2009]
Correction du filtrage en fonction des options et des attributs des produits en présence de produits configurables

[2.0.10 - 13 novembre 2009]
Amélioration du filtrage en fonction des options et des attributs des produits
Correction du filtrage en fonction des options des produits

[2.0.9 - 12 novembre 2009]
Correction du filtrage en fonction des options des produits

[2.0.8 - 12 novembre 2009]
Possibilité de filtrer en fonction des options des produits

[2.0.7 - 04 novembre 2009]
Possibilité de filtrer en fonction de l'origine de livraison
Possibilité de filtrer en fonction des attributs de produits
Possibilité de spécifier un code postal dans le filtrage de la destination
Compatibilité avec Magento 1.4.* : utilisation de la fonction getTranslationList au lieu de getCountryTranslationList qui est dépréciée

[2.0.6 - 02 octobre 2009]
Possibilité de spécifier des groupes de clients

[2.0.5 - 18 août 2009]
Ajout de la possibilité de spécifier dans la destination le monde entier sauf certains pays
Correction d'un problème de parsing de la destination lorsqu'il n'y avait qu'un seul code région entre parenthèses
Possibilité d'avoir des codes région comprenant des espaces

[2.0.4 - 28 juillet 2009]
Suppression des options ""Unité de poids"" et ""Utiliser le montant TTC"" de chaque mode de livraison
Possibilité d'inclure ou d'exclure les valeurs limites dans les champs 'prices_range', 'weights_range' et 'fees_table' grâce aux caractères '[' et ']'
Possibilité de spécifier dans les champs 'prices_range' et 'fees_table' si on utilise le montant HT ou TTC
Ajout du champ 'enabled' et suppression de la possibilité de désactiver un bloc de configuration avec le caractère '#'
Modification du message d'erreur par défaut
Ajout d'un message d'erreur en cas d'erreur d'interprétation d'une formule de calcul de frais

[2.0.3 - 27 juillet 2009]
Correction d'une erreur dans l'interprétation des formules avec des fonctions à arguments multiples (min, max, rand)

[2.0.2 - 27 juin 2009]
Correction d'une erreur d'expression régulière

[2.0.1 - 25 juin 2009]
Uniformisation du nom des variables dans les valeurs de référence : 'price_excluding_tax' et 'price_including_tax' à la place de la valeur 'price'
Correction d'un problème de Magento qui ne semble pas retourner la bonne valeur lors de l'appel à la méthode $request->getFreeShipping()
Ajout du champ 'description' qui permet d'ajouter une description à une méthode de livraison qui peut être récupérée grâce à la méthode $_rate->getMethodDescription()
Corrections de bugs

[2.0 - 3 avril 2009]
Création de la version 2.0 du module Owebia Shipping qui n'est plus compatible avec les anciennes versions

				

Index

A

  • about: property
  • activation: see enabled
  • address of origin: see origin
  • address of billing: see billto
  • address of delivery: see shipto
  • address_filter: shortcuts, examples
  • associative table: see switch
  • attribute of product: see product.attribute.*

B

C

D

E

F

I

L

M

O

P

Q

R

  • regular expression: see property shipto
  • request: variables

S

T

V