Documentation officielle de l'extension Magento Owebia Shipping version 2.2.7 - 27/08/2010

Attention, la version 2.1.* apporte de grands changements dans l'utilisation des propriétés. Si vous effectuez une mise à jour vers cette version, pensez à contrôler la validité de votre ancienne configuration.
Pour cela, vous pouvez utiliser le Correcteur de configuration Owebia Shipping.

Table des matières

retour en haut Introduction

Si vous souhaitez poser une question, utilisez le sujet suivant : http://www.magentocommerce.com/boards/viewthread/38223/

La syntaxe de configuration est une syntaxe proche de la syntaxe JSON.

Exemple :

# National
{
   label: "National",
   destination: "AD,FR,MC",
   conditions: "{cart.price_excluding_tax}<1000.00",
   fees: "1.30 + {table {cart.weight} in 0.5:5.30, 1.0:6.50, 2.0:7.40, 3.0:8.30, 5.0:10.10}",
}

Le caractère `#` en début de ligne indique un commentaire.
Un élément de configuration débute par le caractère `{` et se termine par `}`.
Un élément de configuration contient plusieurs propriétés associées à des valeurs.
Les propriétés sont alphanumériques (a-z0-9_), le séparateur propriété/valeur est le caractère `:`, les valeurs sont numériques, booléennes ou des chaînes de caractères délimitées par des guillemets. En fin de ligne, une virgule sert de séparateur entre les différentes propriétés.

Liste des propriétés :

* : Voir détails plus bas

retour en haut Le libellé : `label`

On peut insérer certains éléments comme le poids des marchandises dans le libellé.
Pour ce faire, utiliser les variables suivantes :

  • {destination.country.name}: le pays de destination
  • {cart.weight}: poids des marchandises
  • {cart.quantity}: la quantité d'articles
  • {cart.price_including_tax}: prix TTC
  • {cart.price_excluding_tax}: prix HT
label: "Colissimo ({cart.weight} / {destination.country.name})",

La ligne ci-dessus affichera par exemple "Colissimo (3.0kg / France)".

retour en haut Les frais de port : `fees`

La propriété `fees` remplace les propriétés obsolètes `fees_table`, `fees_formula` et `fixed_fees` que l'on peut désormais combiner.

La propriété `fees` se spécifie sous la forme d'une formule (voir l'initiation aux formules).

# Equivalent de la propriété obsolète `fixed_fees`
fees: 10.00,

# Equivalent de la propriété obsolète `fees_table` avec `reference_value` égal à 'weight'
fees: "{table {cart.weight} in 0.5:5.30, 1.0:6.50}",

# Equivalent de la propriété obsolète `fees_formula`
fees: "0.1 * {cart.price_excluding_tax} + 10.00",

# Combinaison
fees: "0.1 * {cart.price_excluding_tax} + {table {cart.weight} in 0.5:5.30, 1.0:6.50} + 10.00",

retour en haut Initiation aux formules

Les propriétés `fees` et `conditions` sont spécifiées sous la forme de formules.

Signes mathématiques disponibles :

  • opérateurs : *, /, + et -
  • modulo : %
  • parenthèses : ( et )
  • les opérateurs booléens &&, and, ||, or, ==, <, >, <=, >=
  • les opérateurs binaires & et |
  • le groupe d'opérateur C ? X : Y (ex: "{cart.price_exluding_tax}>100 ? 15*{cart.weight} : 20*{cart.weight}")

Fonctions disponibles :

  • arrondis : round(x), floor(x), ceil(x)
  • valeur absolue : abs(x)
  • maximum : max(x,y)
  • minimum : min(x,y)
  • entier aléatoire : rand(min,max)
  • puissance : pow(x,puissance)
  • nombre PI : pi()
  • racine carrée : sqrt(x)
  • logarithme : log(x) pour le logarithme népérien ou log(x,base)
  • exponentiel : exp(x)

Possibilité d'utiliser les fonctionnalités avancées suivantes : casting en entier (int) ou en nombre flottant (float), comparaison avec la valeur null ou les valeurs booléennes true et false.

Variables disponibles :

  • {cart.weight}: poids du colis
  • {cart.price_including_tax}: prix TTC
  • {cart.price_excluding_tax}: prix HT
  • {cart.quantity}: nombre d'articles dans le panier

Vous avez la possibilité de mettre des espaces et des retours à la ligne dans les formules (pour aérer).

Vous pouvez également utiliser des fonctionnalités avancées telles que les tables de tarifs, la copie d'une propriété d'une autre méthode, les fonctions spéciales, l'utilisation des attributs et des options des produits ou encore l'utilisation des variables personnalisées.

retour en haut Utilisation des tables de tarifs

Dans une table, on peut inclure ou exclure une valeur limite avec les caractères '[' et ']' :

# Limite supérieure 1.0 incluse
fees: "{table {cart.weight} in 1.0]:5.00}",

# Limite supérieure 1.0 exclue
fees: "{table {cart.weight} in 1.0[:5.00}",

Dans une table, on doit spécifier la valeur de référence. Pour cela, on peut utiliser une des variables disponibles.
Vous pouvez aussi utiliser une formule afin de définir une autre variable de référence.

# Les valeurs limites sont comparées au poids du panier
fees: "{table {cart.weight} in 0.5:5.30, 1.0:6.50}",

# Les valeurs limites sont comparées à la quantité d'articles
fees: "{table {cart.quantity} in 10:5.30, 20:6.50}",

# Les valeurs limites sont comparées au prix TTC
fees: "{table {cart.price_including_tax} in 15.00:5.30, 30.00:6.50}",

# Les valeurs limites sont comparées au prix HT
fees: "{table {cart.price_excluding_tax} in 15.00:5.30, 30.00:6.50}",

# Les valeurs limites sont comparées à une valeur de référence définie par l'utilisateur
fees: "{table ceil({cart.weight}/10) in 1:5.30, 2:6.50}",

retour en haut Faire une copie d'une propriété d'une autre méthode

Il est possible de faire une copie d'une propriété dans une autre à l'aide de la syntaxe ci-dessous.

Vous pouvez utiliser cette technique dans les propriétés 'conditions', 'fees', 'enabled', 'label', 'description', 'destination', 'origin', 'customer_groups' et 'tracking_url' mais pas dans la propriété 'code'.

# Colissimo
{
   code: "colissimo",
   label: "Colissimo",
   destination: "AD,FR,MC",
   conditions: "{cart.price_excluding_tax}<1000.00",
   fees: "1.30 + {table {cart.weight} in 0.5:5.30, 1.0:6.50, 2.0:7.40, 3.0:8.30, 5.0:10.10}",
}
...
   # Copie des conditions d'une autre méthode
   conditions: "({colissimo.conditions}) and ({cart.weight}>10.0)",
...
   # Copie des frais de port d'une autre méthode
   fees: "({colissimo.fees}) + 15.00",
...

retour en haut Fonctions spéciales dans les formules

Vous pouvez utiliser dans les formules des fonctions spéciales.

Liste des fonctions spéciales :

  • min(x,y) : calcule le minimum entre plusieurs valeurs (éventuellement plus de deux valeurs). Si l'une des valeurs est nulle, elle est ignorée.
  • max(x,y) : calcule le maximum entre plusieurs valeurs (éventuellement plus de deux valeurs). Si l'une des valeurs est nulle, elle est ignorée.
# Exemple d'utilisation de la fonction min pour proposé des frais de port gratuits
# et un supplément pour les méthodes de transport plus rapides

{
   code: "courrier_suivi",
   label: "Courrier suivi",
   destination: "FR",
   conditions: "{cart.price_including_tax}<80",
   fees: "{table {cart.weight} in 0.050:2.21, 0.100:2.77, 0.500:4.60}",
}

{
   code: "courrier_suivi_offert",
   label: "Frais de port offerts - Courrier suivi",
   destination: "{courrier_suivi.destination}",
   conditions: "{cart.price_including_tax}>=80 and {cart.weight}<=0.500",
   fees: 0.00,
}

{
   code: "lettre_recommandee",
   label: "Lettre Recommandée",
   destination: "FR",
   conditions: "{cart.price_including_tax}<80",
   fees: "{TABLE {cart.weight} IN 0.050:4.3,0.100:4.75,0.250:5.62,0.500:6.42,1.000:7.32,2.000:8.56,10.000:10.30}",
}

{
   code: "lettre_recommandee_offert",
   label: "Frais de port offerts - Lettre Recommandée",
   destination: "{lettre_recommandee.destination}",
   conditions: "{cart.price_including_tax}>=80 and {cart.weight}>0.500 and {cart.weight}<=10.000",
   fees: 0.00,
}

{
   code: "supplement_lettre_recommandee",
   label: "Supplément Lettre Recommandée",
   destination: "{lettre_recommandee.destination}",
   conditions: "{courrier_suivi_offert.conditions}",
   fees: "{lettre_recommandee.fees} - {courrier_suivi.fees}",
}

{
   code: "colissimo",
   label: "Colissimo",
   destination: "FR",
   conditions: "{cart.price_including_tax}<80",
   fees: "{table {cart.weight} in 0.3:8.7,0.8:9.9,1.8:10.85,2.8:11.8,4.8:13.7,6.8:15.6,9.8:18.45,14.8:20.45,29.8:26.45}",
}

{
   code: "colissimo_offert",
   label: "Frais de port offerts - Colissimo",
   destination: "{colissimo.destination}",
   conditions: "{cart.price_including_tax}>=80 and {cart.weight}>10 and {cart.weight}<=29.8",
   fees: 0.00,
}

{
   code: "supplement_colissimo",
   label: "Supplément Colissimo",
   destination: "{colissimo.destination}",
   conditions: "{courrier_suivi_offert.conditions} or {lettre_recommandee_offert.conditions}",
   fees: "{colissimo.fees} - min({courrier_suivi.fees},{lettre_recommandee.fees})",
}

{
   code: "chronopost",
   label: "Chronopost",
   destination: "FR",
   conditions: "{cart.price_including_tax}<80",
   fees: "{TABLE {cart.weight} IN 1:13.29, 2:13.99, 3:18.4, 4:19.24, 5:20.08, 6:20.92, 7:21.76, 8:22.6, 9:23.44, 10:24.28, 15:28.48, 20:32.68, 25:36.88, 30:41.08}",
}

{
   code: "chronopost_offert",
   label: "Frais de port offerts - Chronopost",
   destination: "FR",
   conditions: "{cart.price_including_tax}<80 and {cart.weight}>29.8 and {cart.weight}<=30",
   fees: 0.00,
}

{
   code: "supplement_chronopost",
   label: "Supplément Chronopost",
   destination: "{chronopost.destination}",
   conditions: "{courrier_suivi_offert.conditions} or {lettre_recommandee_offert.conditions} or {colissimo_offert.conditions}",
   fees: "{chronopost.fees} - min({courrier_suivi.fees},{lettre_recommandee.fees},{colissimo.fees})",
}

retour en haut Utilisation des attributs ou des options des produits

Il est possible d'utiliser les attributs ou les options des produits à l'aide de la syntaxe ci-dessous.

Vous pouvez utiliser cette technique dans les propriétés 'conditions' et 'fees'.

# Si au moins un produit possède l'attribut 'color' égal à 'Bleu'
#   (équivalent de l'ancienne syntaxe {any attribute 'color'=='Bleu'} )
conditions: "{count products where product.attribute.color=='Bleu'}>0",
...
# Si tous les produits possèdent l'option 'size' supérieure ou égal à '1'
#   (équivalent de l'ancienne syntaxe {all option 'size'>='1'} )
conditions: "{count products where product.option.size>='1'}=={cart.quantity}",
...
# Le nombre de SKU différents
conditions: "{count distinct product.attribute.sku}",
...
# La somme de toutes les options 'size' est supérieure à 30
#   (équivalent de l'ancienne syntaxe {sum option 'size'}>30 )
conditions: "{sum product.option.size}>30",
...

Liste des préfixes possibles :

  • count : nombre (toujours suivi de 'products')
  • count distinct : nombre distinct (toujours suivi d'une propriété)
  • sum : somme (toujours suivi d'une propriété)

Liste des propriétés possibles :

  • product.attribute.* : attribut
  • product.option.* : option

Il est possible de spécifier des conditions que doivent remplir les produits pour être pris en compte. Pour cela, il suffit d'ajouter where suivi d'une formule.

Si la propriété est de type Oui/Non, vous devez utiliser les valeurs true/false ou 1/0 sans les guillemets.

# Propriété de type Oui/Non
conditions: "{count products where product.attribute.colissimo_allowed==1}",
# ou
conditions: "{count products where product.attribute.colissimo_allowed==true}",

Si la propriété est de type Liste de sélection et que vous souhaitez faire une comparaison avec l'id plutôt qu'avec la valeur, vous devez utiliser la syntaxe suivante :

# Condition validée si l'attribut 'color' est égale à la valeur dont l'id est 1
conditions: "{count products where product.attribute.color.id==1}",

retour en haut Utilisation des boucles foreach

Les boucles foreach permettent d'effectuer un calcul sur des groupes de produits plutôt que de tenir compte de tous les produits du panier.
Le résultat global d'une boucle foreach est la somme des résultats de chaque passage dans la boucle.

A l'intérieur d'une boucle foreach, il est possible d'utiliser de nouvelles variables :

  • {selection.weight}: poids de la sélection
  • {selection.quantity}: nombre d'articles dans la sélection

Lorsque la sélection se fait sur le sku, chaque sélection est composée d'un seul article. On peut donc utiliser d'autres variables :

  • {product.weight}: poids de l'article sélectionné
  • {product.quantity}: quantité de l'article sélectionné
  • {product.attribute.*}: attribut de l'article sélectionné
  • {product.option.*}: option de l'article sélectionné
# Regroupement des produits par origine puis traitement des groupes séparémment
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}",

# Calcul individuel des frais de port
fees: "{foreach product.attribute.sku}{product.attribute.shipping}*{product.quantity}{/foreach}",

retour en haut Utilisation des variables personnalisées de Magento (Custom Variables)

Depuis la version 1.4.0.1 de Magento, il est possible de définir des variables personnalisées.

La version 2.2.7 d'Owebia Shipping vous permet d'utiliser ces variables personnalisées grâce à la syntaxe suivante :

# Utilisation de la variable personnalisée my_var
fees: "{customvar.my_var}*5.00",
...
# Idem en utilisant la syntaxe standard de Magento
fees: "{{customVar code=my_var}}*5.00",
...

retour en haut Les conditions : `conditions`

La propriété `conditions` remplace les propriétés obsolètes `prices_range`, `weights_range` et celles commençant par `free_shipping__`.

La propriété `conditions` se spécifie sous la forme d'une formule (voir l'initiation aux formules) qui doit retourner une valeur booléenne (true ou false).

# Equivalents de la propriété obsolète `prices_range`

   # De 0 à 70 TTC
   # prices_range: "(ttc) *=>70.00"

   conditions: "{cart.price_including_tax}<=70",

   # De 0 à 70 HT
   # prices_range: "(ht) *=>70.00"

   conditions: "{cart.price_excluding_tax}<=70",

   # De 20 exclu à 70 inclu
   # prices_range: "]20.00=>70.00]"

   conditions: "({cart.price_excluding_tax} > 20) and ({cart.price_excluding_tax} <= 70)",

   # De 10 inclu à 50 exclu
   # prices_range: "[10.00=>50.00["

   conditions: "({cart.price_excluding_tax} >= 10) and ({cart.price_excluding_tax} < 50)",


# Equivalents de la propriété obsolète `weights_range`

   # De 0.5 exclu à 3 inclu
   # weights_range: "]0.5=>3.0]"

   conditions: "({cart.weight} > 0.5) and ({cart.weight} <= 3.0)",

   # De 1 inclu à 5 exclu
   # weights_range: "[1.0=>5.0["

   conditions: "({cart.weight} >= 1.0) and ({cart.weight} < 5.0)",


# Equivalent des propriétés obsolètes commençant par `free_shipping__`

   # Uniquement si frais de port offerts
   conditions: "{free_shipping}",

   # Uniquement si frais de port non offerts
   conditions: "!{free_shipping}",


# Equivalents de la propriété obsolète `product_properties`

   # Si au moins un produit possède l'attribut 'color' égal à 'Bleu'
   # product_properties: "(any attribute 'color'='Bleu')"

   conditions: "{count products where product.attribute.color=='Bleu'}>1",

   # Si tous les produits possèdent l'option 'size' supérieure ou égal à '1'
   # product_properties: "(all option 'size'>='1')"

   conditions: "{count products where product.option.size>='1'}=={cart.quantity}",

retour en haut La destination : `destination`

Les codes pays utilisés sont ceux de Magento (à priori ils sont les mêmes que les codes ISO 3166-1 alpha-2).
Il est possible de spécifier les codes régions ou les codes postaux que l'on veut filtrer ou exclure.

# France, Allemagne, Suisse, Espagne, Italie
destination: "FR,DE,CH,ES,IT",

# France sauf la Corse
destination: "FR-(2A,2B)",

# Corse
destination: "FR(2A,2B)",

# Le monde entier sauf l'Allemagne et la Corse
destination: "* - ( DE, FR(2A,2B) )",

retour en haut L'origine : `origin`

Idem que la destination mais pour filtrer l'origine de livraison.
La syntaxe est identique au filtrage de la destination.

retour en haut Les groupes client : `customer_groups`

On peut utiliser le nom ou l'ID des groupes client.

# Groupes NOT LOGGED IN et General
customer_groups: "NOT LOGGED IN,General",

# Groupes NOT LOGGED IN et General par leur ID
customer_groups: "0,1",

# Groupe Retailer
customer_groups: "Retailer",