diff --git a/core/lib/Thelia/Action/HttpException.php b/core/lib/Thelia/Action/HttpException.php
index eff2f7586..6448f5b2d 100755
--- a/core/lib/Thelia/Action/HttpException.php
+++ b/core/lib/Thelia/Action/HttpException.php
@@ -56,7 +56,7 @@ class HttpException extends BaseAction implements EventSubscriberInterface
$parser = $this->container->get("thelia.parser");
// Define the template thant shoud be used
- $parser->setTemplate(TemplateHelper::getInstance()->getActiveFrontTemplate()->getPath());
+ $parser->setTemplate(TemplateHelper::getInstance()->getActiveFrontTemplate());
//$event->getRequest()->attributes->set('_view', ConfigQuery::getPageNotFoundView());
diff --git a/core/lib/Thelia/Action/Order.php b/core/lib/Thelia/Action/Order.php
index 3d5d2be77..6eb66fdb3 100755
--- a/core/lib/Thelia/Action/Order.php
+++ b/core/lib/Thelia/Action/Order.php
@@ -279,12 +279,7 @@ class Order extends BaseAction implements EventSubscriberInterface
$this->getDispatcher()->dispatch(TheliaEvents::CART_CLEAR, new CartEvent($this->getCart($this->getRequest())));
/* call pay method */
- $paymentModuleReflection = new \ReflectionClass($paymentModule->getFullNamespace());
- $paymentModuleInstance = $paymentModuleReflection->newInstance();
-
- $paymentModuleInstance->setRequest($this->getRequest());
- $paymentModuleInstance->setDispatcher($this->getDispatcher());
-
+ $paymentModuleInstance = $this->container->get(sprintf('module.%s', $paymentModule->getCode()));
$paymentModuleInstance->pay($placedOrder);
}
diff --git a/core/lib/Thelia/Config/Resources/routing/admin.xml b/core/lib/Thelia/Config/Resources/routing/admin.xml
index 9c8745172..ab7f11171 100755
--- a/core/lib/Thelia/Config/Resources/routing/admin.xml
+++ b/core/lib/Thelia/Config/Resources/routing/admin.xml
@@ -943,6 +943,14 @@
Thelia\Controller\Admin\ModuleController::deleteAction
+
+
+ Thelia\Controller\Admin\ModuleController::configureAction
+
+
diff --git a/core/lib/Thelia/Controller/Admin/BaseAdminController.php b/core/lib/Thelia/Controller/Admin/BaseAdminController.php
index 5d10c65b6..849438539 100755
--- a/core/lib/Thelia/Controller/Admin/BaseAdminController.php
+++ b/core/lib/Thelia/Controller/Admin/BaseAdminController.php
@@ -201,7 +201,7 @@ class BaseAdminController extends BaseController
$parser = $this->container->get("thelia.parser");
// Define the template that should be used
- $parser->setTemplate($template ?: TemplateHelper::getInstance()->getActiveAdminTemplate()->getPath());
+ $parser->setTemplate($template ?: TemplateHelper::getInstance()->getActiveAdminTemplate());
return $parser;
}
diff --git a/core/lib/Thelia/Controller/Admin/ModuleController.php b/core/lib/Thelia/Controller/Admin/ModuleController.php
index c9cd97359..74fc1d760 100644
--- a/core/lib/Thelia/Controller/Admin/ModuleController.php
+++ b/core/lib/Thelia/Controller/Admin/ModuleController.php
@@ -188,6 +188,24 @@ class ModuleController extends AbstractCrudController
return $this->render("modules");
}
+ public function configureAction($module_code)
+ {
+ $module = ModuleQuery::create()->findOneByCode($module_code);
+
+ if(null === $module) {
+ throw new \InvalidArgumentException(sprintf("Module `%s` does not exists", $module_code));
+ }
+
+ if (null !== $response = $this->checkAuth(array(), $module_code, AccessManager::VIEW)) return $response;
+
+ return $this->render(
+ "module-configure",
+ array(
+ "module_code" => $module_code,
+ )
+ );
+ }
+
public function toggleActivationAction($module_id)
{
if (null !== $response = $this->checkAuth(AdminResources::MODULE, array(), AccessManager::UPDATE)) return $response;
diff --git a/core/lib/Thelia/Controller/Front/BaseFrontController.php b/core/lib/Thelia/Controller/Front/BaseFrontController.php
index 124a91296..e0f4ce105 100755
--- a/core/lib/Thelia/Controller/Front/BaseFrontController.php
+++ b/core/lib/Thelia/Controller/Front/BaseFrontController.php
@@ -97,7 +97,7 @@ class BaseFrontController extends BaseController
$parser = $this->container->get("thelia.parser");
// Define the template that should be used
- $parser->setTemplate($template ?: TemplateHelper::getInstance()->getActiveFrontTemplate()->getPath());
+ $parser->setTemplate($template ?: TemplateHelper::getInstance()->getActiveFrontTemplate());
return $parser;
}
diff --git a/core/lib/Thelia/Controller/Front/OrderController.php b/core/lib/Thelia/Controller/Front/OrderController.php
index dc3f5b20f..4c20b784e 100755
--- a/core/lib/Thelia/Controller/Front/OrderController.php
+++ b/core/lib/Thelia/Controller/Front/OrderController.php
@@ -84,8 +84,7 @@ class OrderController extends BaseFrontController
}
/* get postage amount */
- $moduleReflection = new \ReflectionClass($deliveryModule->getFullNamespace());
- $moduleInstance = $moduleReflection->newInstance();
+ $moduleInstance = $this->container->get(sprintf('module.%s', $deliveryModule->getCode()));
$postage = $moduleInstance->getPostage($deliveryAddress->getCountry());
$orderEvent = $this->getOrderEvent();
diff --git a/core/lib/Thelia/Core/EventListener/ViewListener.php b/core/lib/Thelia/Core/EventListener/ViewListener.php
index 53f525e65..4bdfd2195 100755
--- a/core/lib/Thelia/Core/EventListener/ViewListener.php
+++ b/core/lib/Thelia/Core/EventListener/ViewListener.php
@@ -78,7 +78,7 @@ class ViewListener implements EventSubscriberInterface
{
$parser = $this->container->get('thelia.parser');
- $parser->setTemplate(TemplateHelper::getInstance()->getActiveFrontTemplate()->getPath());
+ $parser->setTemplate(TemplateHelper::getInstance()->getActiveFrontTemplate());
$request = $this->container->get('request');
try {
diff --git a/core/lib/Thelia/Core/Template/Loop/Delivery.php b/core/lib/Thelia/Core/Template/Loop/Delivery.php
index e5c56797d..5211d3a79 100644
--- a/core/lib/Thelia/Core/Template/Loop/Delivery.php
+++ b/core/lib/Thelia/Core/Template/Loop/Delivery.php
@@ -25,8 +25,10 @@ namespace Thelia\Core\Template\Loop;
use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Loop\Argument\Argument;
+use Thelia\Exception\OrderException;
use Thelia\Model\CountryQuery;
use Thelia\Module\BaseModule;
+use Thelia\Module\DeliveryModuleInterface;
/**
* Class Delivery
@@ -63,14 +65,24 @@ class Delivery extends BaseSpecificModule
foreach ($loopResult->getResultDataCollection() as $deliveryModule) {
$loopResultRow = new LoopResultRow($deliveryModule);
- $moduleReflection = new \ReflectionClass($deliveryModule->getFullNamespace());
- if ($moduleReflection->isSubclassOf("Thelia\Module\DeliveryModuleInterface") === false) {
+ $moduleInstance = $this->container->get(sprintf('module.%s', $deliveryModule->getCode()));
+
+ if (false === $moduleInstance instanceof DeliveryModuleInterface) {
throw new \RuntimeException(sprintf("delivery module %s is not a Thelia\Module\DeliveryModuleInterface", $deliveryModule->getCode()));
}
- $moduleInstance = $moduleReflection->newInstance();
- $moduleInstance->setRequest($this->request);
- $moduleInstance->setDispatcher($this->dispatcher);
+ try {
+ $postage = $moduleInstance->getPostage($country);
+ } catch(OrderException $e) {
+ switch($e->getCode()) {
+ case OrderException::DELIVERY_MODULE_UNAVAILABLE:
+ /* do not show this delivery module */
+ continue(2);
+ break;
+ default:
+ throw $e;
+ }
+ }
$loopResultRow
->set('ID', $deliveryModule->getId())
@@ -78,7 +90,7 @@ class Delivery extends BaseSpecificModule
->set('CHAPO', $deliveryModule->getVirtualColumn('i18n_CHAPO'))
->set('DESCRIPTION', $deliveryModule->getVirtualColumn('i18n_DESCRIPTION'))
->set('POSTSCRIPTUM', $deliveryModule->getVirtualColumn('i18n_POSTSCRIPTUM'))
- ->set('POSTAGE', $moduleInstance->getPostage($country))
+ ->set('POSTAGE', $postage)
;
$loopResult->addRow($loopResultRow);
diff --git a/core/lib/Thelia/Core/Template/Loop/Payment.php b/core/lib/Thelia/Core/Template/Loop/Payment.php
index 0fde890a9..dee4f176a 100644
--- a/core/lib/Thelia/Core/Template/Loop/Payment.php
+++ b/core/lib/Thelia/Core/Template/Loop/Payment.php
@@ -26,6 +26,7 @@ use Thelia\Core\Template\Element\LoopResult;
use Thelia\Core\Template\Element\LoopResultRow;
use Thelia\Core\Template\Element\PropelSearchLoopInterface;
use Thelia\Module\BaseModule;
+use Thelia\Module\PaymentModuleInterface;
/**
* Class Payment
@@ -47,14 +48,11 @@ class Payment extends BaseSpecificModule implements PropelSearchLoopInterface
foreach ($loopResult->getResultDataCollection() as $paymentModule) {
$loopResultRow = new LoopResultRow($paymentModule);
- $moduleReflection = new \ReflectionClass($paymentModule->getFullNamespace());
- if ($moduleReflection->isSubclassOf("Thelia\Module\PaymentModuleInterface") === false) {
+ $moduleInstance = $this->container->get(sprintf('module.%s', $paymentModule->getCode()));
+
+ if (false === $moduleInstance instanceof PaymentModuleInterface) {
throw new \RuntimeException(sprintf("payment module %s is not a Thelia\Module\PaymentModuleInterface", $paymentModule->getCode()));
}
- $moduleInstance = $moduleReflection->newInstance();
-
- $moduleInstance->setRequest($this->request);
- $moduleInstance->setDispatcher($this->dispatcher);
$loopResultRow
->set('ID', $paymentModule->getId())
diff --git a/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php b/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php
index 39c525c16..2340537db 100755
--- a/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php
+++ b/core/lib/Thelia/Core/Template/Smarty/Plugins/Module.php
@@ -44,10 +44,16 @@ class Module extends AbstractSmartyPlugin
if (false !== $location = $this->getParam($params, 'location', false)) {
+ $moduleLimit = $this->getParam($params, 'module', null);
+
$modules = ModuleQuery::getActivated();
foreach ($modules as $module) {
+ if(null !== $moduleLimit && $moduleLimit != $module->getCode()) {
+ continue;
+ }
+
$file = sprintf("%s/%s/AdminIncludes/%s.html", THELIA_MODULE_DIR, $module->getBaseDir(), $location);
if (file_exists($file)) {
diff --git a/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php b/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php
index 96aa3dd24..53cedbede 100755
--- a/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php
+++ b/core/lib/Thelia/Core/Template/Smarty/SmartyParser.php
@@ -13,6 +13,7 @@ use Thelia\Core\Template\ParserInterface;
use Thelia\Core\Template\Smarty\AbstractSmartyPlugin;
use Thelia\Core\Template\Exception\ResourceNotFoundException;
use Thelia\Core\Template\ParserContext;
+use Thelia\Core\Template\TemplateDefinition;
use Thelia\Model\ConfigQuery;
use Thelia\Core\Template\TemplateHelper;
@@ -23,13 +24,15 @@ use Thelia\Core\Template\TemplateHelper;
*/
class SmartyParser extends Smarty implements ParserInterface
{
-
public $plugins = array();
protected $request;
protected $dispatcher;
protected $parserContext;
+ protected $backOfficeTemplateDirectories = array();
+ protected $frontOfficeTemplateDirectories = array();
+
protected $template = "";
protected $status = 200;
@@ -101,15 +104,59 @@ class SmartyParser extends Smarty implements ParserInterface
}
}
- public function setTemplate($template_path_from_template_base)
+ public function addBackOfficeTemplateDirectory($templateName, $templateDirectory, $key)
{
- $this->template = $template_path_from_template_base;
+ $this->backOfficeTemplateDirectories[$templateName][$key] = $templateDirectory;
+ }
- $this->addTemplateDir(THELIA_TEMPLATE_DIR.$this->template, 0);
+ public function addFrontOfficeTemplateDirectory($templateName, $templateDirectory, $key)
+ {
+ $this->frontOfficeTemplateDirectories[$templateName][$key] = $templateDirectory;
+ }
- $config_dir = THELIA_TEMPLATE_DIR.$this->template.'/configs';
+ /**
+ * @param TemplateDefinition $templateDefinition
+ */
+ public function setTemplate(TemplateDefinition $templateDefinition)
+ {
+ $this->template = $templateDefinition->getPath();
- $this->setConfigDir($config_dir);
+ /* init template directories */
+ $this->setTemplateDir(array());
+
+ /* add main template directory */
+ $this->addTemplateDir(THELIA_TEMPLATE_DIR . $this->template, 0);
+
+ /* define config directory */
+ $configDirectory = THELIA_TEMPLATE_DIR . $this->template . '/configs';
+ $this->setConfigDir($configDirectory);
+
+ /* add modules template directories */
+ switch($templateDefinition->getType()) {
+ case TemplateDefinition::FRONT_OFFICE:
+ /* do not pass array directly to addTemplateDir since we cant control on keys */
+ if(isset($this->frontOfficeTemplateDirectories[$templateDefinition->getName()])) {
+ foreach($this->frontOfficeTemplateDirectories[$templateDefinition->getName()] as $key => $directory) {
+ $this->addTemplateDir($directory, $key);
+ }
+ }
+ break;
+
+ case TemplateDefinition::BACK_OFFICE:
+ /* do not pass array directly to addTemplateDir since we cant control on keys */
+ if(isset($this->backOfficeTemplateDirectories[$templateDefinition->getName()])) {
+ foreach($this->backOfficeTemplateDirectories[$templateDefinition->getName()] as $key => $directory) {
+ $this->addTemplateDir($directory, $key);
+ }
+ }
+ break;
+
+ case TemplateDefinition::PDF:
+ break;
+
+ default:
+ break;
+ }
}
public function getTemplate()
diff --git a/core/lib/Thelia/Core/Template/TemplateDefinition.php b/core/lib/Thelia/Core/Template/TemplateDefinition.php
index 34e6740a8..7fa05c7cb 100644
--- a/core/lib/Thelia/Core/Template/TemplateDefinition.php
+++ b/core/lib/Thelia/Core/Template/TemplateDefinition.php
@@ -54,14 +54,20 @@ class TemplateDefinition
$this->name = $name;
$this->type = $type;
- if ($type == self::BACK_OFFICE)
- $this->path = self::BACK_OFFICE_SUBDIR . $name;
- else if ($type == self::PDF)
- $this->path = self::PDF_SUBDIR . $name;
- else if ($type == self::FRONT_OFFICE)
- $this->path = self::FRONT_OFFICE_SUBDIR . $name;
- else
- $this->path = $name;
+ switch($type) {
+ case TemplateDefinition::FRONT_OFFICE:
+ $this->path = self::FRONT_OFFICE_SUBDIR . $name;
+ break;
+ case TemplateDefinition::BACK_OFFICE:
+ $this->path = self::BACK_OFFICE_SUBDIR . $name;
+ break;
+ case TemplateDefinition::PDF:
+ $this->path = self::PDF_SUBDIR . $name;
+ break;
+ default:
+ $this->path = $name;
+ break;
+ }
}
public function getName()
diff --git a/core/lib/Thelia/Core/Template/TemplateHelper.php b/core/lib/Thelia/Core/Template/TemplateHelper.php
index 6be177bd2..3310b5f04 100644
--- a/core/lib/Thelia/Core/Template/TemplateHelper.php
+++ b/core/lib/Thelia/Core/Template/TemplateHelper.php
@@ -46,6 +46,9 @@ class TemplateHelper
return self::$instance;
}
+ /**
+ * @return TemplateDefinition
+ */
public function getActivePdfTemplate() {
return new TemplateDefinition(
ConfigQuery::read('active-pdf-template', 'default'),
@@ -53,6 +56,9 @@ class TemplateHelper
);
}
+ /**
+ * @return TemplateDefinition
+ */
public function getActiveAdminTemplate() {
return new TemplateDefinition(
ConfigQuery::read('active-admin-template', 'default'),
@@ -60,6 +66,9 @@ class TemplateHelper
);
}
+ /**
+ * @return TemplateDefinition
+ */
public function getActiveFrontTemplate() {
return new TemplateDefinition(
ConfigQuery::read('active-front-template', 'default'),
diff --git a/core/lib/Thelia/Core/Thelia.php b/core/lib/Thelia/Core/Thelia.php
index f4187b5a5..2212686fd 100755
--- a/core/lib/Thelia/Core/Thelia.php
+++ b/core/lib/Thelia/Core/Thelia.php
@@ -35,6 +35,7 @@ namespace Thelia\Core;
use Propel\Runtime\Connection\ConnectionWrapper;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Definition;
+use Symfony\Component\DependencyInjection\Reference;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;
@@ -45,6 +46,7 @@ use Thelia\Core\Bundle;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Config\DatabaseConfiguration;
use Thelia\Config\DefinePropel;
+use Thelia\Core\Template\TemplateDefinition;
use Thelia\Core\TheliaContainerBuilder;
use Thelia\Core\DependencyInjection\Loader\XmlFileLoader;
use Thelia\Model\ConfigQuery;
@@ -126,7 +128,6 @@ class Thelia extends Kernel
$modules = \Thelia\Model\ModuleQuery::getActivated();
$translationDirs = array();
- $templateDirs = array();
$parser = $container->getDefinition('thelia.parser');
foreach ($modules as $module) {
@@ -134,7 +135,7 @@ class Thelia extends Kernel
$defintion = new Definition();
$defintion->setClass($module->getFullNamespace());
- $defintion->addMethodCall("setContainer", array('service_container'));
+ $defintion->addMethodCall("setContainer", array(new Reference('service_container')));
$container->setDefinition(
"module.".$module->getCode(),
@@ -151,9 +152,54 @@ class Thelia extends Kernel
$translationDirs[] = $dir;
}
- if (is_dir($dir = THELIA_MODULE_DIR . "/" . $code . "/templates")) {
- //$templateDirs[$code] = $dir;
- $parser->addMethodCall('addTemplateDir', array($dir, $code));
+ /* is there a front-office template directory ? */
+ $frontOfficeModuleTemplateDirectory = sprintf("%s%s%stemplates%s%s", THELIA_MODULE_DIR, $code, DS, DS, TemplateDefinition::FRONT_OFFICE_SUBDIR);
+ if (is_dir($frontOfficeModuleTemplateDirectory)) {
+ try {
+ $moduleFrontOfficeTemplateBrowser = new \DirectoryIterator($frontOfficeModuleTemplateDirectory);
+ } catch (\UnexpectedValueException $e) {
+ throw $e;
+ }
+
+ /* browse the directory */
+ foreach ($moduleFrontOfficeTemplateBrowser as $moduleFrontOfficeTemplateContent) {
+ /* is it a directory which is not . or .. ? */
+ if ($moduleFrontOfficeTemplateContent->isDir() && !$moduleFrontOfficeTemplateContent->isDot()) {
+ $parser->addMethodCall(
+ 'addFrontOfficeTemplateDirectory',
+ array(
+ $moduleFrontOfficeTemplateContent->getFilename(),
+ $frontOfficeModuleTemplateDirectory,
+ $code,
+ )
+ );
+ }
+ }
+ }
+
+ /* is there a back-office template directory ? */
+ $backOfficeModuleTemplateDirectory = sprintf("%s%s%stemplates%s%s", THELIA_MODULE_DIR, $code, DS, DS, TemplateDefinition::BACK_OFFICE_SUBDIR);
+ if (is_dir($backOfficeModuleTemplateDirectory)) {
+ try {
+ $moduleBackOfficeTemplateBrowser = new \DirectoryIterator($backOfficeModuleTemplateDirectory);
+ } catch (\UnexpectedValueException $e) {
+ throw $e;
+ }
+
+ /* browse the directory */
+ foreach ($moduleBackOfficeTemplateBrowser as $moduleBackOfficeTemplateContent) {
+ /* is it a directory which is not . or .. ? */
+ if ($moduleBackOfficeTemplateContent->isDir() && !$moduleBackOfficeTemplateContent->isDot()) {
+ $parser->addMethodCall(
+ 'addBackOfficeTemplateDirectory',
+ array(
+ $moduleBackOfficeTemplateContent->getFilename(),
+ $backOfficeModuleTemplateDirectory,
+ $code,
+ )
+ );
+ }
+ }
}
} catch (\InvalidArgumentException $e) {
// TODO: process module configuration exception
diff --git a/core/lib/Thelia/Exception/OrderException.php b/core/lib/Thelia/Exception/OrderException.php
index 676447858..8654277c5 100755
--- a/core/lib/Thelia/Exception/OrderException.php
+++ b/core/lib/Thelia/Exception/OrderException.php
@@ -38,6 +38,7 @@ class OrderException extends \RuntimeException
const CART_EMPTY = 100;
const UNDEFINED_DELIVERY = 200;
+ const DELIVERY_MODULE_UNAVAILABLE = 201;
public function __construct($message, $code = null, $arguments = array(), $previous = null)
{
diff --git a/core/lib/Thelia/Model/Cart.php b/core/lib/Thelia/Model/Cart.php
index 89eeff249..36b604258 100755
--- a/core/lib/Thelia/Model/Cart.php
+++ b/core/lib/Thelia/Model/Cart.php
@@ -112,4 +112,18 @@ class Cart extends BaseCart
return $total;
}
+
+ public function getWeight()
+ {
+ $weight = 0;
+
+ foreach($this->getCartItems() as $cartItem) {
+ $itemWeight = $cartItem->getProductSaleElements()->getWeight();
+ $itemWeight *= $cartItem->getQuantity();
+
+ $weight += $itemWeight;
+ }
+
+ return $weight;
+ }
}
diff --git a/install/faker.php b/install/faker.php
index d834e294c..23b6b048a 100755
--- a/install/faker.php
+++ b/install/faker.php
@@ -424,7 +424,7 @@ try {
$stock->setQuantity($faker->randomNumber(1,50));
$stock->setPromo($faker->randomNumber(0,1));
$stock->setNewness($faker->randomNumber(0,1));
- $stock->setWeight($faker->randomFloat(2, 100,10000));
+ $stock->setWeight($faker->randomFloat(2, 1, 5));
$stock->setIsDefault($i == 0);
$stock->setEanCode(substr(str_shuffle("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 13));
$stock->save();
diff --git a/install/insert.sql b/install/insert.sql
index 42470c72b..169b7f7dd 100755
--- a/install/insert.sql
+++ b/install/insert.sql
@@ -86,285 +86,285 @@ VALUES
INSERT INTO `area` (`id`, `name`, `postage`, `created_at`, `updated_at`) VALUES
(1, 'France', NULL, NOW(), NOW()),
-(2, 'Area 1', NULL, NOW(), NOW()),
-(3, 'Area 2', NULL, NOW(), NOW()),
-(4, 'Area 3', NULL, NOW(), NOW()),
-(5, 'Area 4', NULL, NOW(), NOW()),
-(6, 'Area 5', NULL, NOW(), NOW()),
-(7, 'Area 6', NULL, NOW(), NOW()),
-(8, 'Area 7', NULL, NOW(), NOW()),
-(9, 'Area 8', NULL, NOW(), NOW()),
-(10, 'DOM', NULL, NOW(), NOW()),
-(11, 'TOM', NULL, NOW(), NOW());
+(2, 'A Zone', NULL, NOW(), NOW()),
+(3, 'B Zone', NULL, NOW(), NOW()),
+(4, 'C Zone', NULL, NOW(), NOW()),
+(5, 'D Zone', NULL, NOW(), NOW()),
+(6, 'France OM1', NULL, NOW(), NOW()),
+(7, 'France OM2', NULL, NOW(), NOW());
INSERT INTO `area_delivery_module` (`id`, `area_id`, `delivery_module_id`, `created_at`, `updated_at`) VALUES
-(1, 1, 2, NOW(), NOW());
+(1, 1, 2, NOW(), NOW()),
+(2, 2, 2, NOW(), NOW()),
+(3, 3, 2, NOW(), NOW()),
+(4, 4, 2, NOW(), NOW()),
+(5, 5, 2, NOW(), NOW()),
+(6, 6, 2, NOW(), NOW());
INSERT INTO `country` (`id`, `area_id`, `isocode`, `isoalpha2`, `isoalpha3`, `by_default`, `shop_country`, `created_at`, `updated_at`) VALUES
-(1, NULL, '4', 'AF', 'AFG', 0, 0, NOW(), NOW()),
-(2, NULL, '710', 'ZA', 'ZAF', 0, 0, NOW(), NOW()),
-(3, NULL, '8', 'AL', 'ALB', 0, 0, NOW(), NOW()),
-(4, NULL, '12', 'DZ', 'DZA', 0, 0, NOW(), NOW()),
-(5, NULL, '276', 'DE', 'DEU', 0, 0, NOW(), NOW()),
-(6, NULL, '20', 'AD', 'AND', 0, 0, NOW(), NOW()),
-(7, NULL, '24', 'AO', 'AGO', 0, 0, NOW(), NOW()),
-(8, NULL, '28', 'AG', 'ATG', 0, 0, NOW(), NOW()),
-(9, NULL, '682', 'SA', 'SAU', 0, 0, NOW(), NOW()),
-(10, NULL, '32', 'AR', 'ARG', 0, 0, NOW(), NOW()),
-(11, NULL, '51', 'AM', 'ARM', 0, 0, NOW(), NOW()),
-(12, NULL, '36', 'AU', 'AUS', 0, 0, NOW(), NOW()),
-(13, NULL, '40', 'AT', 'AUT', 0, 0, NOW(), NOW()),
-(14, NULL, '31', 'AZ', 'AZE', 0, 0, NOW(), NOW()),
-(15, NULL, '44', 'BS', 'BHS', 0, 0, NOW(), NOW()),
-(16, NULL, '48', 'BR', 'BHR', 0, 0, NOW(), NOW()),
-(17, NULL, '50', 'BD', 'BGD', 0, 0, NOW(), NOW()),
-(18, NULL, '52', 'BB', 'BRB', 0, 0, NOW(), NOW()),
-(19, NULL, '585', 'PW', 'PLW', 0, 0, NOW(), NOW()),
-(20, NULL, '56', 'BE', 'BEL', 0, 0, NOW(), NOW()),
-(21, NULL, '84', 'BL', 'BLZ', 0, 0, NOW(), NOW()),
-(22, NULL, '204', 'BJ', 'BEN', 0, 0, NOW(), NOW()),
+(1, 5, '4', 'AF', 'AFG', 0, 0, NOW(), NOW()),
+(2, 4, '710', 'ZA', 'ZAF', 0, 0, NOW(), NOW()),
+(3, 3, '8', 'AL', 'ALB', 0, 0, NOW(), NOW()),
+(4, 3, '12', 'DZ', 'DZA', 0, 0, NOW(), NOW()),
+(5, 2, '276', 'DE', 'DEU', 0, 0, NOW(), NOW()),
+(6, 1, '20', 'AD', 'AND', 0, 0, NOW(), NOW()),
+(7, 4, '24', 'AO', 'AGO', 0, 0, NOW(), NOW()),
+(8, 5, '28', 'AG', 'ATG', 0, 0, NOW(), NOW()),
+(9, 4, '682', 'SA', 'SAU', 0, 0, NOW(), NOW()),
+(10, 5, '32', 'AR', 'ARG', 0, 0, NOW(), NOW()),
+(11, 3, '51', 'AM', 'ARM', 0, 0, NOW(), NOW()),
+(12, 5, '36', 'AU', 'AUS', 0, 0, NOW(), NOW()),
+(13, 2, '40', 'AT', 'AUT', 0, 0, NOW(), NOW()),
+(14, 3, '31', 'AZ', 'AZE', 0, 0, NOW(), NOW()),
+(15, 5, '44', 'BS', 'BHS', 0, 0, NOW(), NOW()),
+(16, 4, '48', 'BR', 'BHR', 0, 0, NOW(), NOW()),
+(17, 5, '50', 'BD', 'BGD', 0, 0, NOW(), NOW()),
+(18, 5, '52', 'BB', 'BRB', 0, 0, NOW(), NOW()),
+(19, 3, '585', 'PW', 'PLW', 0, 0, NOW(), NOW()),
+(20, 5, '56', 'BE', 'BEL', 0, 0, NOW(), NOW()),
+(21, 5, '84', 'BL', 'BLZ', 0, 0, NOW(), NOW()),
+(22, 4, '204', 'BJ', 'BEN', 0, 0, NOW(), NOW()),
(23, NULL, '64', 'BT', 'BTN', 0, 0, NOW(), NOW()),
-(24, NULL, '112', 'BY', 'BLR', 0, 0, NOW(), NOW()),
-(25, NULL, '104', 'MM', 'MMR', 0, 0, NOW(), NOW()),
-(26, NULL, '68', 'BO', 'BOL', 0, 0, NOW(), NOW()),
-(27, NULL, '70', 'BA', 'BIH', 0, 0, NOW(), NOW()),
-(28, NULL, '72', 'BW', 'BWA', 0, 0, NOW(), NOW()),
-(29, NULL, '76', 'BR', 'BRA', 0, 0, NOW(), NOW()),
-(30, NULL, '96', 'BN', 'BRN', 0, 0, NOW(), NOW()),
-(31, NULL, '100', 'BG', 'BGR', 0, 0, NOW(), NOW()),
-(32, NULL, '854', 'BF', 'BFA', 0, 0, NOW(), NOW()),
-(33, NULL, '108', 'BI', 'BDI', 0, 0, NOW(), NOW()),
-(34, NULL, '116', 'KH', 'KHM', 0, 0, NOW(), NOW()),
-(35, NULL, '120', 'CM', 'CMR', 0, 0, NOW(), NOW()),
-(37, NULL, '132', 'CV', 'CPV', 0, 0, NOW(), NOW()),
-(38, NULL, '152', 'CL', 'CHL', 0, 0, NOW(), NOW()),
-(39, NULL, '156', 'CN', 'CHN', 0, 0, NOW(), NOW()),
-(40, NULL, '196', 'CY', 'CYP', 0, 0, NOW(), NOW()),
-(41, NULL, '170', 'CO', 'COL', 0, 0, NOW(), NOW()),
-(42, NULL, '174', 'KM', 'COM', 0, 0, NOW(), NOW()),
-(43, NULL, '178', 'CG', 'COG', 0, 0, NOW(), NOW()),
-(44, NULL, '184', 'CK', 'COK', 0, 0, NOW(), NOW()),
-(45, NULL, '408', 'KP', 'PRK', 0, 0, NOW(), NOW()),
-(46, NULL, '410', 'KR', 'KOR', 0, 0, NOW(), NOW()),
-(47, NULL, '188', 'CR', 'CRI', 0, 0, NOW(), NOW()),
-(48, NULL, '384', 'CI', 'CIV', 0, 0, NOW(), NOW()),
-(49, NULL, '191', 'HR', 'HRV', 0, 0, NOW(), NOW()),
-(50, NULL, '192', 'CU', 'CUB', 0, 0, NOW(), NOW()),
-(51, NULL, '208', 'DK', 'DNK', 0, 0, NOW(), NOW()),
-(52, NULL, '262', 'DJ', 'DJI', 0, 0, NOW(), NOW()),
-(53, NULL, '212', 'DM', 'DMA', 0, 0, NOW(), NOW()),
-(54, NULL, '818', 'EG', 'EGY', 0, 0, NOW(), NOW()),
-(55, NULL, '784', 'AE', 'ARE', 0, 0, NOW(), NOW()),
-(56, NULL, '218', 'EC', 'ECU', 0, 0, NOW(), NOW()),
-(57, NULL, '232', 'ER', 'ERI', 0, 0, NOW(), NOW()),
-(58, NULL, '724', 'ES', 'ESP', 0, 0, NOW(), NOW()),
-(59, NULL, '233', 'EE', 'EST', 0, 0, NOW(), NOW()),
-(61, NULL, '231', 'ET', 'ETH', 0, 0, NOW(), NOW()),
-(62, NULL, '242', 'FJ', 'FJI', 0, 0, NOW(), NOW()),
-(63, NULL, '246', 'FI', 'FIN', 0, 0, NOW(), NOW()),
+(24, 3, '112', 'BY', 'BLR', 0, 0, NOW(), NOW()),
+(25, 5, '104', 'MM', 'MMR', 0, 0, NOW(), NOW()),
+(26, 5, '68', 'BO', 'BOL', 0, 0, NOW(), NOW()),
+(27, 3, '70', 'BA', 'BIH', 0, 0, NOW(), NOW()),
+(28, 4, '72', 'BW', 'BWA', 0, 0, NOW(), NOW()),
+(29, 5, '76', 'BR', 'BRA', 0, 0, NOW(), NOW()),
+(30, 5, '96', 'BN', 'BRN', 0, 0, NOW(), NOW()),
+(31, 3, '100', 'BG', 'BGR', 0, 0, NOW(), NOW()),
+(32, 5, '854', 'BF', 'BFA', 0, 0, NOW(), NOW()),
+(33, 4, '108', 'BI', 'BDI', 0, 0, NOW(), NOW()),
+(34, 5, '116', 'KH', 'KHM', 0, 0, NOW(), NOW()),
+(35, 4, '120', 'CM', 'CMR', 0, 0, NOW(), NOW()),
+(37, 4, '132', 'CV', 'CPV', 0, 0, NOW(), NOW()),
+(38, 5, '152', 'CL', 'CHL', 0, 0, NOW(), NOW()),
+(39, 5, '156', 'CN', 'CHN', 0, 0, NOW(), NOW()),
+(40, 2, '196', 'CY', 'CYP', 0, 0, NOW(), NOW()),
+(41, 5, '170', 'CO', 'COL', 0, 0, NOW(), NOW()),
+(42, 4, '174', 'KM', 'COM', 0, 0, NOW(), NOW()),
+(43, 4, '178', 'CG', 'COG', 0, 0, NOW(), NOW()),
+(44, 5, '184', 'CK', 'COK', 0, 0, NOW(), NOW()),
+(45, 5, '408', 'KP', 'PRK', 0, 0, NOW(), NOW()),
+(46, 5, '410', 'KR', 'KOR', 0, 0, NOW(), NOW()),
+(47, 5, '188', 'CR', 'CRI', 0, 0, NOW(), NOW()),
+(48, 4, '384', 'CI', 'CIV', 0, 0, NOW(), NOW()),
+(49, 2, '191', 'HR', 'HRV', 0, 0, NOW(), NOW()),
+(50, 5, '192', 'CU', 'CUB', 0, 0, NOW(), NOW()),
+(51, 2, '208', 'DK', 'DNK', 0, 0, NOW(), NOW()),
+(52, 5, '262', 'DJ', 'DJI', 0, 0, NOW(), NOW()),
+(53, 5, '212', 'DM', 'DMA', 0, 0, NOW(), NOW()),
+(54, 4, '818', 'EG', 'EGY', 0, 0, NOW(), NOW()),
+(55, 4, '784', 'AE', 'ARE', 0, 0, NOW(), NOW()),
+(56, 5, '218', 'EC', 'ECU', 0, 0, NOW(), NOW()),
+(57, 4, '232', 'ER', 'ERI', 0, 0, NOW(), NOW()),
+(58, 2, '724', 'ES', 'ESP', 0, 0, NOW(), NOW()),
+(59, 2, '233', 'EE', 'EST', 0, 0, NOW(), NOW()),
+(61, 4, '231', 'ET', 'ETH', 0, 0, NOW(), NOW()),
+(62, 5, '242', 'FJ', 'FJI', 0, 0, NOW(), NOW()),
+(63, 2, '246', 'FI', 'FIN', 0, 0, NOW(), NOW()),
(64, 1, '250', 'FR', 'FRA', 1, 1, NOW(), NOW()),
-(65, NULL, '266', 'GA', 'GAB', 0, 0, NOW(), NOW()),
-(66, NULL, '270', 'GM', 'GMB', 0, 0, NOW(), NOW()),
-(67, NULL, '268', 'GE', 'GEO', 0, 0, NOW(), NOW()),
-(68, NULL, '288', 'GH', 'GHA', 0, 0, NOW(), NOW()),
-(69, NULL, '300', 'GR', 'GRC', 0, 0, NOW(), NOW()),
-(70, NULL, '308', 'GD', 'GRD', 0, 0, NOW(), NOW()),
-(71, NULL, '320', 'GT', 'GTM', 0, 0, NOW(), NOW()),
-(72, NULL, '324', 'GN', 'GIN', 0, 0, NOW(), NOW()),
-(73, NULL, '624', 'GW', 'GNB', 0, 0, NOW(), NOW()),
-(74, NULL, '226', 'GQ', 'GNQ', 0, 0, NOW(), NOW()),
-(75, NULL, '328', 'GY', 'GUY', 0, 0, NOW(), NOW()),
-(76, NULL, '332', 'HT', 'HTI', 0, 0, NOW(), NOW()),
-(77, NULL, '340', 'HN', 'HND', 0, 0, NOW(), NOW()),
-(78, NULL, '348', 'HU', 'HUN', 0, 0, NOW(), NOW()),
-(79, NULL, '356', 'IN', 'IND', 0, 0, NOW(), NOW()),
-(80, NULL, '360', 'ID', 'IDN', 0, 0, NOW(), NOW()),
-(81, NULL, '364', 'IR', 'IRN', 0, 0, NOW(), NOW()),
-(82, NULL, '368', 'IQ', 'IRQ', 0, 0, NOW(), NOW()),
-(83, NULL, '372', 'IE', 'IRL', 0, 0, NOW(), NOW()),
-(84, NULL, '352', 'IS', 'ISL', 0, 0, NOW(), NOW()),
-(85, NULL, '376', 'IL', 'ISR', 0, 0, NOW(), NOW()),
-(86, NULL, '380', 'IT', 'ITA', 0, 0, NOW(), NOW()),
-(87, NULL, '388', 'JM', 'JAM', 0, 0, NOW(), NOW()),
-(88, NULL, '392', 'JP', 'JPN', 0, 0, NOW(), NOW()),
-(89, NULL, '400', 'JO', 'JOR', 0, 0, NOW(), NOW()),
-(90, NULL, '398', 'KZ', 'KAZ', 0, 0, NOW(), NOW()),
-(91, NULL, '404', 'KE', 'KEN', 0, 0, NOW(), NOW()),
-(92, NULL, '417', 'KG', 'KGZ', 0, 0, NOW(), NOW()),
-(93, NULL, '296', 'KI', 'KIR', 0, 0, NOW(), NOW()),
-(94, NULL, '414', 'KW', 'KWT', 0, 0, NOW(), NOW()),
-(95, NULL, '418', 'LA', 'LAO', 0, 0, NOW(), NOW()),
-(96, NULL, '426', 'LS', 'LSO', 0, 0, NOW(), NOW()),
-(97, NULL, '428', 'LV', 'LVA', 0, 0, NOW(), NOW()),
-(98, NULL, '422', 'LB', 'LBN', 0, 0, NOW(), NOW()),
-(99, NULL, '430', 'LR', 'LBR', 0, 0, NOW(), NOW()),
-(100, NULL, '343', 'LY', 'LBY', 0, 0, NOW(), NOW()),
-(101, NULL, '438', 'LI', 'LIE', 0, 0, NOW(), NOW()),
-(102, NULL, '440', 'LT', 'LTU', 0, 0, NOW(), NOW()),
-(103, NULL, '442', 'LU', 'LUX', 0, 0, NOW(), NOW()),
-(104, NULL, '807', 'MK', 'MKD', 0, 0, NOW(), NOW()),
-(105, NULL, '450', 'MD', 'MDG', 0, 0, NOW(), NOW()),
-(106, NULL, '458', 'MY', 'MYS', 0, 0, NOW(), NOW()),
-(107, NULL, '454', 'MW', 'MWI', 0, 0, NOW(), NOW()),
-(108, NULL, '462', 'MV', 'MDV', 0, 0, NOW(), NOW()),
-(109, NULL, '466', 'ML', 'MLI', 0, 0, NOW(), NOW()),
-(110, NULL, '470', 'MT', 'MLT', 0, 0, NOW(), NOW()),
-(111, NULL, '504', 'MA', 'MAR', 0, 0, NOW(), NOW()),
-(112, NULL, '584', 'MH', 'MHL', 0, 0, NOW(), NOW()),
-(113, NULL, '480', 'MU', 'MUS', 0, 0, NOW(), NOW()),
-(114, NULL, '478', 'MR', 'MRT', 0, 0, NOW(), NOW()),
-(115, NULL, '484', 'MX', 'MEX', 0, 0, NOW(), NOW()),
+(65, 4, '266', 'GA', 'GAB', 0, 0, NOW(), NOW()),
+(66, 4, '270', 'GM', 'GMB', 0, 0, NOW(), NOW()),
+(67, 3, '268', 'GE', 'GEO', 0, 0, NOW(), NOW()),
+(68, 4, '288', 'GH', 'GHA', 0, 0, NOW(), NOW()),
+(69, 2, '300', 'GR', 'GRC', 0, 0, NOW(), NOW()),
+(70, 5, '308', 'GD', 'GRD', 0, 0, NOW(), NOW()),
+(71, 5, '320', 'GT', 'GTM', 0, 0, NOW(), NOW()),
+(72, 4, '324', 'GN', 'GIN', 0, 0, NOW(), NOW()),
+(73, 4, '624', 'GW', 'GNB', 0, 0, NOW(), NOW()),
+(74, 4, '226', 'GQ', 'GNQ', 0, 0, NOW(), NOW()),
+(75, 5, '328', 'GY', 'GUY', 0, 0, NOW(), NOW()),
+(76, 5, '332', 'HT', 'HTI', 0, 0, NOW(), NOW()),
+(77, 5, '340', 'HN', 'HND', 0, 0, NOW(), NOW()),
+(78, 2, '348', 'HU', 'HUN', 0, 0, NOW(), NOW()),
+(79, 5, '356', 'IN', 'IND', 0, 0, NOW(), NOW()),
+(80, 5, '360', 'ID', 'IDN', 0, 0, NOW(), NOW()),
+(81, 4, '364', 'IR', 'IRN', 0, 0, NOW(), NOW()),
+(82, 4, '368', 'IQ', 'IRQ', 0, 0, NOW(), NOW()),
+(83, 2, '372', 'IE', 'IRL', 0, 0, NOW(), NOW()),
+(84, 3, '352', 'IS', 'ISL', 0, 0, NOW(), NOW()),
+(85, 4, '376', 'IL', 'ISR', 0, 0, NOW(), NOW()),
+(86, 2, '380', 'IT', 'ITA', 0, 0, NOW(), NOW()),
+(87, 5, '388', 'JM', 'JAM', 0, 0, NOW(), NOW()),
+(88, 5, '392', 'JP', 'JPN', 0, 0, NOW(), NOW()),
+(89, 4, '400', 'JO', 'JOR', 0, 0, NOW(), NOW()),
+(90, 5, '398', 'KZ', 'KAZ', 0, 0, NOW(), NOW()),
+(91, 4, '404', 'KE', 'KEN', 0, 0, NOW(), NOW()),
+(92, 5, '417', 'KG', 'KGZ', 0, 0, NOW(), NOW()),
+(93, 5, '296', 'KI', 'KIR', 0, 0, NOW(), NOW()),
+(94, 4, '414', 'KW', 'KWT', 0, 0, NOW(), NOW()),
+(95, 5, '418', 'LA', 'LAO', 0, 0, NOW(), NOW()),
+(96, 4, '426', 'LS', 'LSO', 0, 0, NOW(), NOW()),
+(97, 2, '428', 'LV', 'LVA', 0, 0, NOW(), NOW()),
+(98, 4, '422', 'LB', 'LBN', 0, 0, NOW(), NOW()),
+(99, 4, '430', 'LR', 'LBR', 0, 0, NOW(), NOW()),
+(100, 4, '343', 'LY', 'LBY', 0, 0, NOW(), NOW()),
+(101, 2, '438', 'LI', 'LIE', 0, 0, NOW(), NOW()),
+(102, 2, '440', 'LT', 'LTU', 0, 0, NOW(), NOW()),
+(103, 2, '442', 'LU', 'LUX', 0, 0, NOW(), NOW()),
+(104, 3, '807', 'MK', 'MKD', 0, 0, NOW(), NOW()),
+(105, 4, '450', 'MD', 'MDG', 0, 0, NOW(), NOW()),
+(106, 5, '458', 'MY', 'MYS', 0, 0, NOW(), NOW()),
+(107, 4, '454', 'MW', 'MWI', 0, 0, NOW(), NOW()),
+(108, 5, '462', 'MV', 'MDV', 0, 0, NOW(), NOW()),
+(109, 4, '466', 'ML', 'MLI', 0, 0, NOW(), NOW()),
+(110, 2, '470', 'MT', 'MLT', 0, 0, NOW(), NOW()),
+(111, 3, '504', 'MA', 'MAR', 0, 0, NOW(), NOW()),
+(112, 5, '584', 'MH', 'MHL', 0, 0, NOW(), NOW()),
+(113, 4, '480', 'MU', 'MUS', 0, 0, NOW(), NOW()),
+(114, 4, '478', 'MR', 'MRT', 0, 0, NOW(), NOW()),
+(115, 5, '484', 'MX', 'MEX', 0, 0, NOW(), NOW()),
(116, NULL, '583', 'FM', 'FSM', 0, 0, NOW(), NOW()),
-(117, NULL, '498', 'MD', 'MDA', 0, 0, NOW(), NOW()),
-(118, NULL, '492', 'MC', 'MCO', 0, 0, NOW(), NOW()),
-(119, NULL, '496', 'MN', 'MNG', 0, 0, NOW(), NOW()),
-(120, NULL, '508', 'MZ', 'MOZ', 0, 0, NOW(), NOW()),
-(121, NULL, '516', 'NA', 'NAM', 0, 0, NOW(), NOW()),
-(122, NULL, '520', 'NR', 'NRU', 0, 0, NOW(), NOW()),
-(123, NULL, '524', 'NP', 'NPL', 0, 0, NOW(), NOW()),
-(124, NULL, '558', 'NI', 'NIC', 0, 0, NOW(), NOW()),
-(125, NULL, '562', 'NE', 'NER', 0, 0, NOW(), NOW()),
-(126, NULL, '566', 'NG', 'NGA', 0, 0, NOW(), NOW()),
+(117, 3, '498', 'MD', 'MDA', 0, 0, NOW(), NOW()),
+(118, 1, '492', 'MC', 'MCO', 0, 0, NOW(), NOW()),
+(119, 5, '496', 'MN', 'MNG', 0, 0, NOW(), NOW()),
+(120, 4, '508', 'MZ', 'MOZ', 0, 0, NOW(), NOW()),
+(121, 4, '516', 'NA', 'NAM', 0, 0, NOW(), NOW()),
+(122, 5, '520', 'NR', 'NRU', 0, 0, NOW(), NOW()),
+(123, 5, '524', 'NP', 'NPL', 0, 0, NOW(), NOW()),
+(124, 5, '558', 'NI', 'NIC', 0, 0, NOW(), NOW()),
+(125, 4, '562', 'NE', 'NER', 0, 0, NOW(), NOW()),
+(126, 4, '566', 'NG', 'NGA', 0, 0, NOW(), NOW()),
(127, NULL, '570', 'NU', 'NIU', 0, 0, NOW(), NOW()),
-(128, NULL, '578', 'NO', 'NOR', 0, 0, NOW(), NOW()),
-(129, NULL, '554', 'NZ', 'NZL', 0, 0, NOW(), NOW()),
-(130, NULL, '512', 'OM', 'OMN', 0, 0, NOW(), NOW()),
-(131, NULL, '800', 'UG', 'UGA', 0, 0, NOW(), NOW()),
-(132, NULL, '860', 'UZ', 'UZB', 0, 0, NOW(), NOW()),
-(133, NULL, '586', 'PK', 'PAK', 0, 0, NOW(), NOW()),
-(134, NULL, '591', 'PA', 'PAN', 0, 0, NOW(), NOW()),
-(135, NULL, '598', 'PG', 'PNG', 0, 0, NOW(), NOW()),
-(136, NULL, '600', 'PY', 'PRY', 0, 0, NOW(), NOW()),
-(137, NULL, '528', 'NL', 'NLD', 0, 0, NOW(), NOW()),
-(138, NULL, '604', 'PE', 'PER', 0, 0, NOW(), NOW()),
-(139, NULL, '608', 'PH', 'PHL', 0, 0, NOW(), NOW()),
-(140, NULL, '616', 'PL', 'POL', 0, 0, NOW(), NOW()),
-(141, NULL, '620', 'PT', 'PRT', 0, 0, NOW(), NOW()),
-(142, NULL, '634', 'QA', 'QAT', 0, 0, NOW(), NOW()),
-(143, NULL, '140', 'CF', 'CAF', 0, 0, NOW(), NOW()),
-(144, NULL, '214', 'DO', 'DOM', 0, 0, NOW(), NOW()),
-(145, NULL, '203', 'CZ', 'CZE', 0, 0, NOW(), NOW()),
-(146, NULL, '642', 'RO', 'ROU', 0, 0, NOW(), NOW()),
-(147, NULL, '826', 'GB', 'GBR', 0, 0, NOW(), NOW()),
-(148, NULL, '643', 'RU', 'RUS', 0, 0, NOW(), NOW()),
-(149, NULL, '646', 'RW', 'RWA', 0, 0, NOW(), NOW()),
-(150, NULL, '659', 'KN', 'KNA', 0, 0, NOW(), NOW()),
-(151, NULL, '662', 'LC', 'LCA', 0, 0, NOW(), NOW()),
-(152, NULL, '674', 'SM', 'SMR', 0, 0, NOW(), NOW()),
-(153, NULL, '670', 'VC', 'VCT', 0, 0, NOW(), NOW()),
-(154, NULL, '90', 'SB', 'SLB', 0, 0, NOW(), NOW()),
+(128, 3, '578', 'NO', 'NOR', 0, 0, NOW(), NOW()),
+(129, 5, '554', 'NZ', 'NZL', 0, 0, NOW(), NOW()),
+(130, 4, '512', 'OM', 'OMN', 0, 0, NOW(), NOW()),
+(131, 4, '800', 'UG', 'UGA', 0, 0, NOW(), NOW()),
+(132, 5, '860', 'UZ', 'UZB', 0, 0, NOW(), NOW()),
+(133, 5, '586', 'PK', 'PAK', 0, 0, NOW(), NOW()),
+(134, 5, '591', 'PA', 'PAN', 0, 0, NOW(), NOW()),
+(135, 5, '598', 'PG', 'PNG', 0, 0, NOW(), NOW()),
+(136, 5, '600', 'PY', 'PRY', 0, 0, NOW(), NOW()),
+(137, 2, '528', 'NL', 'NLD', 0, 0, NOW(), NOW()),
+(138, 5, '604', 'PE', 'PER', 0, 0, NOW(), NOW()),
+(139, 5, '608', 'PH', 'PHL', 0, 0, NOW(), NOW()),
+(140, 2, '616', 'PL', 'POL', 0, 0, NOW(), NOW()),
+(141, 2, '620', 'PT', 'PRT', 0, 0, NOW(), NOW()),
+(142, 4, '634', 'QA', 'QAT', 0, 0, NOW(), NOW()),
+(143, 4, '140', 'CF', 'CAF', 0, 0, NOW(), NOW()),
+(144, 5, '214', 'DO', 'DOM', 0, 0, NOW(), NOW()),
+(145, 2, '203', 'CZ', 'CZE', 0, 0, NOW(), NOW()),
+(146, 2, '642', 'RO', 'ROU', 0, 0, NOW(), NOW()),
+(147, 2, '826', 'GB', 'GBR', 0, 0, NOW(), NOW()),
+(148, 3, '643', 'RU', 'RUS', 0, 0, NOW(), NOW()),
+(149, 4, '646', 'RW', 'RWA', 0, 0, NOW(), NOW()),
+(150, 5, '659', 'KN', 'KNA', 0, 0, NOW(), NOW()),
+(151, 5, '662', 'LC', 'LCA', 0, 0, NOW(), NOW()),
+(152, 2, '674', 'SM', 'SMR', 0, 0, NOW(), NOW()),
+(153, 5, '670', 'VC', 'VCT', 0, 0, NOW(), NOW()),
+(154, 5, '90', 'SB', 'SLB', 0, 0, NOW(), NOW()),
(155, NULL, '222', 'SV', 'SLV', 0, 0, NOW(), NOW()),
-(156, NULL, '882', 'WS', 'WSM', 0, 0, NOW(), NOW()),
-(157, NULL, '678', 'ST', 'STP', 0, 0, NOW(), NOW()),
-(158, NULL, '686', 'SN', 'SEN', 0, 0, NOW(), NOW()),
-(159, NULL, '690', 'SC', 'SYC', 0, 0, NOW(), NOW()),
-(160, NULL, '694', 'SL', 'SLE', 0, 0, NOW(), NOW()),
-(161, NULL, '702', 'SG', 'SGP', 0, 0, NOW(), NOW()),
-(162, NULL, '703', 'SK', 'SVK', 0, 0, NOW(), NOW()),
-(163, NULL, '705', 'SI', 'SVN', 0, 0, NOW(), NOW()),
-(164, NULL, '706', 'SO', 'SOM', 0, 0, NOW(), NOW()),
-(165, NULL, '729', 'SD', 'SDN', 0, 0, NOW(), NOW()),
-(166, NULL, '144', 'LK', 'LKA', 0, 0, NOW(), NOW()),
-(167, NULL, '752', 'SE', 'SWE', 0, 0, NOW(), NOW()),
-(168, NULL, '756', 'CH', 'CHE', 0, 0, NOW(), NOW()),
-(169, NULL, '740', 'SR', 'SUR', 0, 0, NOW(), NOW()),
-(170, NULL, '748', 'SZ', 'SWZ', 0, 0, NOW(), NOW()),
-(171, NULL, '760', 'SY', 'SYR', 0, 0, NOW(), NOW()),
-(172, NULL, '762', 'TJ', 'TJK', 0, 0, NOW(), NOW()),
-(173, NULL, '834', 'TZ', 'TZA', 0, 0, NOW(), NOW()),
-(174, NULL, '148', 'TD', 'TCD', 0, 0, NOW(), NOW()),
-(175, NULL, '764', 'TH', 'THA', 0, 0, NOW(), NOW()),
-(176, NULL, '768', 'TG', 'TGO', 0, 0, NOW(), NOW()),
-(177, NULL, '776', 'TO', 'TON', 0, 0, NOW(), NOW()),
-(178, NULL, '780', 'TT', 'TTO', 0, 0, NOW(), NOW()),
-(179, NULL, '788', 'TN', 'TUN', 0, 0, NOW(), NOW()),
-(180, NULL, '795', 'TM', 'TKM', 0, 0, NOW(), NOW()),
-(181, NULL, '792', 'TR', 'TUR', 0, 0, NOW(), NOW()),
-(182, NULL, '798', 'TV', 'TUV', 0, 0, NOW(), NOW()),
-(183, NULL, '804', 'UA', 'UKR', 0, 0, NOW(), NOW()),
-(184, NULL, '858', 'UY', 'URY', 0, 0, NOW(), NOW()),
-(185, NULL, '336', 'VA', 'VAT', 0, 0, NOW(), NOW()),
-(186, NULL, '548', 'VU', 'VUT', 0, 0, NOW(), NOW()),
-(187, NULL, '862', 'VE', 'VEN', 0, 0, NOW(), NOW()),
-(188, NULL, '704', 'VN', 'VNM', 0, 0, NOW(), NOW()),
-(189, NULL, '887', 'YE', 'YEM', 0, 0, NOW(), NOW()),
-(190, NULL, '807', 'MK', 'MKD', 0, 0, NOW(), NOW()),
-(191, NULL, '180', 'CD', 'COD', 0, 0, NOW(), NOW()),
-(192, NULL, '894', 'ZM', 'ZMB', 0, 0, NOW(), NOW()),
-(193, NULL, '716', 'ZW', 'ZWE', 0, 0, NOW(), NOW()),
-(196, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(197, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(198, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(199, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(200, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(201, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(202, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(203, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(204, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(205, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(206, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(207, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(208, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(209, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(210, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(211, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(212, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(213, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(214, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(215, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(216, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(217, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(218, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(219, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(220, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(221, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(222, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(223, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(224, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(225, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(226, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(227, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(228, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(229, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(230, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(231, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(232, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(233, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(234, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(235, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(236, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(237, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(238, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(239, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(240, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(241, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(242, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(243, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(244, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(245, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
-(246, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(247, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(248, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(249, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(250, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(251, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(252, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(253, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(254, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(255, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(256, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(257, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(258, NULL, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
-(259, NULL, '312', 'GP', 'GLP', 0, 0, NOW(), NOW()),
-(260, NULL, '254', 'GF', 'GUF', 0, 0, NOW(), NOW()),
-(261, NULL, '474', 'MQ', 'MTQ', 0, 0, NOW(), NOW()),
-(262, NULL, '175', 'YT', 'MYT', 0, 0, NOW(), NOW()),
-(263, NULL, '638', 'RE', 'REU', 0, 0, NOW(), NOW()),
-(264, NULL, '666', 'PM', 'SPM', 0, 0, NOW(), NOW()),
-(265, NULL, '540', 'NC', 'NCL', 0, 0, NOW(), NOW()),
-(266, NULL, '258', 'PF', 'PYF', 0, 0, NOW(), NOW()),
-(267, NULL, '876', 'WF', 'WLF', 0, 0, NOW(), NOW()),
-(268, NULL, '840', 'US', 'USA', 0, 0, NOW(), NOW());
+(156, 5, '882', 'WS', 'WSM', 0, 0, NOW(), NOW()),
+(157, 4, '678', 'ST', 'STP', 0, 0, NOW(), NOW()),
+(158, 4, '686', 'SN', 'SEN', 0, 0, NOW(), NOW()),
+(159, 4, '690', 'SC', 'SYC', 0, 0, NOW(), NOW()),
+(160, 4, '694', 'SL', 'SLE', 0, 0, NOW(), NOW()),
+(161, 5, '702', 'SG', 'SGP', 0, 0, NOW(), NOW()),
+(162, 2, '703', 'SK', 'SVK', 0, 0, NOW(), NOW()),
+(163, 2, '705', 'SI', 'SVN', 0, 0, NOW(), NOW()),
+(164, 4, '706', 'SO', 'SOM', 0, 0, NOW(), NOW()),
+(165, 4, '729', 'SD', 'SDN', 0, 0, NOW(), NOW()),
+(166, 5, '144', 'LK', 'LKA', 0, 0, NOW(), NOW()),
+(167, 2, '752', 'SE', 'SWE', 0, 0, NOW(), NOW()),
+(168, 2, '756', 'CH', 'CHE', 0, 0, NOW(), NOW()),
+(169, 5, '740', 'SR', 'SUR', 0, 0, NOW(), NOW()),
+(170, 4, '748', 'SZ', 'SWZ', 0, 0, NOW(), NOW()),
+(171, 4, '760', 'SY', 'SYR', 0, 0, NOW(), NOW()),
+(172, 5, '762', 'TJ', 'TJK', 0, 0, NOW(), NOW()),
+(173, 5, '834', 'TZ', 'TZA', 0, 0, NOW(), NOW()),
+(174, 4, '148', 'TD', 'TCD', 0, 0, NOW(), NOW()),
+(175, 5, '764', 'TH', 'THA', 0, 0, NOW(), NOW()),
+(176, 4, '768', 'TG', 'TGO', 0, 0, NOW(), NOW()),
+(177, 5, '776', 'TO', 'TON', 0, 0, NOW(), NOW()),
+(178, 5, '780', 'TT', 'TTO', 0, 0, NOW(), NOW()),
+(179, 3, '788', 'TN', 'TUN', 0, 0, NOW(), NOW()),
+(180, 5, '795', 'TM', 'TKM', 0, 0, NOW(), NOW()),
+(181, 3, '792', 'TR', 'TUR', 0, 0, NOW(), NOW()),
+(182, 5, '798', 'TV', 'TUV', 0, 0, NOW(), NOW()),
+(183, 2, '804', 'UA', 'UKR', 0, 0, NOW(), NOW()),
+(184, 5, '858', 'UY', 'URY', 0, 0, NOW(), NOW()),
+(185, 2, '336', 'VA', 'VAT', 0, 0, NOW(), NOW()),
+(186, 5, '548', 'VU', 'VUT', 0, 0, NOW(), NOW()),
+(187, 5, '862', 'VE', 'VEN', 0, 0, NOW(), NOW()),
+(188, 5, '704', 'VN', 'VNM', 0, 0, NOW(), NOW()),
+(189, 4, '887', 'YE', 'YEM', 0, 0, NOW(), NOW()),
+(191, 4, '180', 'CD', 'COD', 0, 0, NOW(), NOW()),
+(192, 4, '894', 'ZM', 'ZMB', 0, 0, NOW(), NOW()),
+(193, 4, '716', 'ZW', 'ZWE', 0, 0, NOW(), NOW()),
+(196, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(197, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(198, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(199, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(200, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(201, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(202, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(203, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(204, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(205, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(206, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(207, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(208, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(209, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(210, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(211, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(212, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(213, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(214, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(215, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(216, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(217, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(218, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(219, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(220, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(221, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(222, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(223, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(224, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(225, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(226, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(227, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(228, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(229, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(230, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(231, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(232, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(233, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(234, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(235, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(236, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(237, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(238, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(239, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(240, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(241, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(242, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(243, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(244, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(245, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW()),
+(246, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(247, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(248, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(249, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(250, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(251, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(252, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(253, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(254, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(255, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(256, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(257, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(258, 4, '124', 'CA', 'CAN', 0, 0, NOW(), NOW()),
+(259, 6, '312', 'GP', 'GLP', 0, 0, NOW(), NOW()),
+(260, 6, '254', 'GF', 'GUF', 0, 0, NOW(), NOW()),
+(261, 6, '474', 'MQ', 'MTQ', 0, 0, NOW(), NOW()),
+(262, 6, '175', 'YT', 'MYT', 0, 0, NOW(), NOW()),
+(263, 6, '638', 'RE', 'REU', 0, 0, NOW(), NOW()),
+(264, 6, '666', 'PM', 'SPM', 0, 0, NOW(), NOW()),
+(265, 7, '540', 'NC', 'NCL', 0, 0, NOW(), NOW()),
+(266, 7, '258', 'PF', 'PYF', 0, 0, NOW(), NOW()),
+(267, 7, '876', 'WF', 'WLF', 0, 0, NOW(), NOW()),
+(268, 4, '840', 'US', 'USA', 0, 0, NOW(), NOW());
INSERT INTO `country_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `postscriptum`) VALUES
(1, 'en_US', 'Afghanistan', '', '', ''),
@@ -423,7 +423,7 @@ INSERT INTO `country_i18n` (`id`, `locale`, `title`, `description`, `chapo`, `po
(18, 'fr_FR', 'Barbade', '', '', ''),
(19, 'en_US', 'Belarus', '', '', ''),
(19, 'es_ES', 'Belarús', '', '', ''),
-(19, 'fr_FR', 'Belau', '', '', ''),
+(19, 'fr_FR', 'Belarus', '', '', ''),
(20, 'en_US', 'Belgium', '', '', ''),
(20, 'es_ES', 'Bélgica', '', '', ''),
(20, 'fr_FR', 'Belgique', '', '', ''),
diff --git a/local/modules/Colissimo/AdminIncludes/module_configuration.html b/local/modules/Colissimo/AdminIncludes/module_configuration.html
new file mode 100644
index 000000000..ee4d2d561
--- /dev/null
+++ b/local/modules/Colissimo/AdminIncludes/module_configuration.html
@@ -0,0 +1,87 @@
+
+
+
+
+
{intl l="Colissimo Module allows to send your products all around the world with La Poste."}
+
+
+
+
{intl l="Prices are not dynamically editable yet."}
+
{intl l="Prices below can be edited in local/modules/Colissimo/Config/prices.json file."}
+
+
+
+
+ {loop type="area" name="list area" backend_context=true}
+
+
+
+ {intl l="Area : "}{$NAME}
+ {loop type="auth" name="can_create" role="ADMIN" module="colissimo" access="CREATE"}
+
+
+
+ {/loop}
+
+
+
+ | {intl l="Weight lower than ... (kg)"} |
+ {intl l="Price (€)"} |
+ {intl l="Actions"} |
+
+
+
+ {loop type="colissimo" name="colissimo" area=$ID}
+
+ | {$MAX_WEIGHT} |
+ {$PRICE} |
+
+
+ {loop type="auth" name="can_change" role="ADMIN" module="colissimo" access="UPDATE"}
+
+ {/loop}
+
+ |
+
+ {/loop}
+
+
+
+ {/loop}
+
+
+
+
+
+
+{* -- Add price slice confirmation dialog ----------------------------------- *}
+
+{include
+ file = "includes/generic-create-dialog.html"
+
+ dialog_id = "price_slice_create_dialog"
+ dialog_title = {intl l="Create a price slice"}
+ dialog_body = "Not available yet."
+
+ dialog_ok_label = {intl l="Create"}
+ dialog_cancel_label = {intl l="Cancel"}
+}
+
+{* -- Delete price slice confirmation dialog ----------------------------------- *}
+
+{include
+ file = "includes/generic-confirm-dialog.html"
+
+ dialog_id = "price_slice_delete_dialog"
+ dialog_title = {intl l="Delete a price slice"}
+ dialog_message = "Not available yet."
+
+ dialog_ok_label = {intl l="Delete"}
+ dialog_cancel_label = {intl l="Cancel"}
+}
+
+
\ No newline at end of file
diff --git a/local/modules/Colissimo/Colissimo.php b/local/modules/Colissimo/Colissimo.php
index adbbb32c3..9d2734812 100755
--- a/local/modules/Colissimo/Colissimo.php
+++ b/local/modules/Colissimo/Colissimo.php
@@ -25,6 +25,7 @@ namespace Colissimo;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\HttpFoundation\Request;
+use Thelia\Exception\OrderException;
use Thelia\Model\Country;
use Thelia\Module\BaseModule;
use Thelia\Module\DeliveryModuleInterface;
@@ -34,6 +35,58 @@ class Colissimo extends BaseModule implements DeliveryModuleInterface
protected $request;
protected $dispatcher;
+ private static $prices = null;
+
+ const JSON_PRICE_RESOURCE = "prices.json";
+
+ public static function getPrices()
+ {
+ if(null === self::$prices) {
+ self::$prices = json_decode(file_get_contents(sprintf('%s/Config/%s', __DIR__, self::JSON_PRICE_RESOURCE)), true);
+ }
+
+ return self::$prices;
+ }
+
+ /**
+ * @param $areaId
+ * @param $weight
+ *
+ * @return mixed
+ * @throws \Thelia\Exception\OrderException
+ */
+ public static function getPostageAmount($areaId, $weight)
+ {
+ $prices = self::getPrices();
+
+ /* check if Colissimo delivers the asked area */
+ if(!isset($prices[$areaId]) || !isset($prices[$areaId]["slices"])) {
+ throw new OrderException("Colissimo delivery unavailable for the chosen delivery country", OrderException::DELIVERY_MODULE_UNAVAILABLE);
+ }
+
+ $areaPrices = $prices[$areaId]["slices"];
+ ksort($areaPrices);
+
+ /* check this weight is not too much */
+ end($areaPrices);
+ $maxWeight = key($areaPrices);
+ if($weight > $maxWeight) {
+ throw new OrderException(sprintf("Colissimo delivery unavailable for this cart weight (%s kg)", $weight), OrderException::DELIVERY_MODULE_UNAVAILABLE);
+ }
+
+ $postage = current($areaPrices);
+
+ while(prev($areaPrices)) {
+ if($weight > key($areaPrices)) {
+ break;
+ }
+
+ $postage = current($areaPrices);
+ }
+
+ return $postage;
+ }
+
public function setRequest(Request $request)
{
$this->request = $request;
@@ -60,11 +113,18 @@ class Colissimo extends BaseModule implements DeliveryModuleInterface
*
* @param Country $country
* @return mixed
+ * @throws \Thelia\Exception\OrderException
*/
public function getPostage(Country $country)
{
- // TODO: Implement getPostage() method.
- return 2;
+ $cartWeight = $this->getContainer()->get('request')->getSession()->getCart()->getWeight();
+
+ $postage = self::getPostageAmount(
+ $country->getAreaId(),
+ $cartWeight
+ );
+
+ return $postage;
}
public function getCode()
diff --git a/local/modules/Colissimo/Config/config.xml b/local/modules/Colissimo/Config/config.xml
index 2430f5027..f158e6526 100755
--- a/local/modules/Colissimo/Config/config.xml
+++ b/local/modules/Colissimo/Config/config.xml
@@ -5,9 +5,7 @@
xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">
-
+
diff --git a/local/modules/Colissimo/Config/prices.json b/local/modules/Colissimo/Config/prices.json
new file mode 100644
index 000000000..dd1888dc6
--- /dev/null
+++ b/local/modules/Colissimo/Config/prices.json
@@ -0,0 +1,128 @@
+{
+ "1": {
+ "_info": "area 1 : France",
+ "slices": {
+ "0.25": 5.23,
+ "0.5": 5.8,
+ "0.75": 6.56,
+ "1": 7.13,
+ "2": 8.08,
+ "3": 9.22,
+ "5": 11.31,
+ "7": 13.4,
+ "10": 16.53,
+ "15": 19.14,
+ "30": 26.93
+ }
+ },
+ "2": {
+ "_info": "area 2 : A Zone - Union Européenne et Suisse",
+ "slices": {
+ "1": 15.34,
+ "2": 16.96,
+ "3": 20.47,
+ "4": 23.99,
+ "5": 27.5,
+ "6": 31.02,
+ "7": 34.53,
+ "8": 38.05,
+ "9": 41.56,
+ "10": 45.08,
+ "15": 51.92,
+ "20": 58.76,
+ "25": 65.6,
+ "30": 72.44
+ }
+ },
+ "3": {
+ "_info": "area 3 : B Zone - Pays de l’Europe de l’Est (hors Union Européenne), Norvège, Maghreb",
+ "slices": {
+ "1": 18.81,
+ "2": 20.62,
+ "3": 24.94,
+ "4": 29.26,
+ "5": 33.58,
+ "6": 37.91,
+ "7": 42.23,
+ "8": 46.55,
+ "9": 50.87,
+ "10": 55.2,
+ "15": 65.08,
+ "20": 74.96
+ }
+ },
+ "4": {
+ "_info": "area 4 : C Zone - Pays d’Afrique hors Maghreb, Canada, Etats-Unis, Proche et Moyen Orient",
+ "slices": {
+ "1": 22.04,
+ "2": 29.55,
+ "3": 38.86,
+ "4": 48.17,
+ "5": 57.48,
+ "6": 66.79,
+ "7": 76.1,
+ "8": 85.41,
+ "9": 94.72,
+ "10": 104.03,
+ "15": 126.92,
+ "20": 149.82
+ }
+ },
+ "5": {
+ "_info": "area 5 : D Zone - Autres destinations",
+ "slices": {
+ "1": 25.08,
+ "2": 37.72,
+ "3": 50.26,
+ "4": 62.8,
+ "5": 75.34,
+ "6": 87.88,
+ "7": 100.42,
+ "8": 112.96,
+ "9": 125.5,
+ "10": 138.04,
+ "15": 162.74,
+ "20": 187.44
+ }
+ },
+ "6": {
+ "_info": "area 6 : France OM1",
+ "slices": {
+ "0.5": 8.27,
+ "1": 12.49,
+ "2": 17.05,
+ "3": 21.61,
+ "4": 26.17,
+ "5": 30.73,
+ "6": 35.29,
+ "7": 39.85,
+ "8": 44.41,
+ "9": 48.97,
+ "10": 53.53,
+ "15": 76.33,
+ "20": 99.13,
+ "25": 121.93,
+ "30": 144.73
+ }
+ },
+ "7": {
+ "_info": "area 7 : France OM2",
+ "slices": {
+ "0.5": 9.88,
+ "1": 14.92,
+ "2": 26.32,
+ "3": 37.72,
+ "4": 49.12,
+ "5": 60.52,
+ "6": 71.92,
+ "7": 83.32,
+ "8": 94.72,
+ "9": 106.12,
+ "10": 117.52,
+ "15": 174.52,
+ "20": 231.52,
+ "25": 288.52,
+ "30": 345.52
+ }
+ }
+}
\ No newline at end of file
diff --git a/local/modules/Colissimo/Loop/Price.php b/local/modules/Colissimo/Loop/Price.php
new file mode 100755
index 000000000..1f68df8a5
--- /dev/null
+++ b/local/modules/Colissimo/Loop/Price.php
@@ -0,0 +1,88 @@
+. */
+/* */
+/*************************************************************************************/
+
+namespace Colissimo\Loop;
+
+use Colissimo\Colissimo;
+use Thelia\Core\Template\Element\ArraySearchLoopInterface;
+use Thelia\Core\Template\Element\BaseLoop;
+use Thelia\Core\Template\Element\LoopResult;
+use Thelia\Core\Template\Element\LoopResultRow;
+
+use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
+use Thelia\Core\Template\Loop\Argument\Argument;
+
+/**
+ *
+ * Price loop
+ *
+ *
+ * Class Price
+ * @package Colissimo\Loop
+ * @author Etienne Roudeix
+ */
+class Price extends BaseLoop implements ArraySearchLoopInterface
+{
+ /* set countable to false since we need to preserve keys */
+ protected $countable = false;
+
+ /**
+ * @return ArgumentCollection
+ */
+ protected function getArgDefinitions()
+ {
+ return new ArgumentCollection(
+ Argument::createIntTypeArgument('area', null, true)
+ );
+ }
+
+ public function buildArray()
+ {
+ $area = $this->getArea();
+
+ $prices = Colissimo::getPrices();
+
+ if(!isset($prices[$area]) || !isset($prices[$area]["slices"])) {
+ return array();
+ }
+
+ $areaPrices = $prices[$area]["slices"];
+ ksort($areaPrices);
+
+ return $areaPrices;
+ }
+
+ public function parseResults(LoopResult $loopResult)
+ {
+ foreach ($loopResult->getResultDataCollection() as $maxWeight => $price) {
+ $loopResultRow = new LoopResultRow();
+ $loopResultRow->set("MAX_WEIGHT", $maxWeight)
+ ->set("PRICE", $price);
+
+ $loopResult->addRow($loopResultRow);
+ }
+
+ return $loopResult;
+
+ }
+}
diff --git a/local/modules/Colissimo/templates/admin.html b/local/modules/Colissimo/templates/backoffice/default/admin.html
similarity index 100%
rename from local/modules/Colissimo/templates/admin.html
rename to local/modules/Colissimo/templates/backoffice/default/admin.html
diff --git a/templates/backOffice/default/includes/module-block.html b/templates/backOffice/default/includes/module-block.html
index f0875230a..af58c3573 100644
--- a/templates/backOffice/default/includes/module-block.html
+++ b/templates/backOffice/default/includes/module-block.html
@@ -43,7 +43,7 @@
{loop type="auth" name="can_change" role="ADMIN" module=$CODE access="VIEW"}
- {intl l="Configure"}
+ {intl l="Configure"}
{/loop}
{*loop type="auth" name="can_change" role="ADMIN" resource="admin.modules" access="VIEW"}
diff --git a/templates/backOffice/default/module-configure.html b/templates/backOffice/default/module-configure.html
new file mode 100644
index 000000000..4074b00fc
--- /dev/null
+++ b/templates/backOffice/default/module-configure.html
@@ -0,0 +1,25 @@
+{extends file="admin-layout.tpl"}
+
+{block name="page-title"}{intl l='Modules'}{/block}
+
+{block name="check-resource"}admin.module{/block}
+{block name="check-access"}view{/block}
+
+{block name="main-content"}
+
+
+{/block}
\ No newline at end of file