diff --git a/local/modules/LivraisonParSecteurs/Config/insert.sql b/local/modules/LivraisonParSecteurs/Config/insert.sql
index 13a635a6..b3070af5 100644
--- a/local/modules/LivraisonParSecteurs/Config/insert.sql
+++ b/local/modules/LivraisonParSecteurs/Config/insert.sql
@@ -1,8 +1,8 @@
-INSERT INTO `lps_area`(`id`,`title`) VALUES
- (1, 'Capso'),
- (2, 'Pays de Lumbres'),
- (3, 'Haut des Flandres'),
- (4, 'Flandres intérieur');
+INSERT INTO `lps_area`(`id`,`title`,`minimum_amount`) VALUES
+ (1, 'Capso', 15.0),
+ (2, 'Pays de Lumbres', 15.0),
+ (3, 'Haut des Flandres', 15.0),
+ (4, 'Flandres intérieur', 15.0);
diff --git a/local/modules/LivraisonParSecteurs/Config/schema.xml b/local/modules/LivraisonParSecteurs/Config/schema.xml
index afcbbbfd..2a98c589 100644
--- a/local/modules/LivraisonParSecteurs/Config/schema.xml
+++ b/local/modules/LivraisonParSecteurs/Config/schema.xml
@@ -8,6 +8,7 @@
+
diff --git a/local/modules/LivraisonParSecteurs/Config/sqldb.map b/local/modules/LivraisonParSecteurs/Config/sqldb.map
deleted file mode 100644
index 63a93baa..00000000
--- a/local/modules/LivraisonParSecteurs/Config/sqldb.map
+++ /dev/null
@@ -1,2 +0,0 @@
-# Sqlfile -> Database map
-thelia.sql=thelia
diff --git a/local/modules/LivraisonParSecteurs/Config/thelia.sql b/local/modules/LivraisonParSecteurs/Config/thelia.sql
deleted file mode 100644
index ccc1b2a4..00000000
--- a/local/modules/LivraisonParSecteurs/Config/thelia.sql
+++ /dev/null
@@ -1,71 +0,0 @@
-
-# This is a fix for InnoDB in MySQL >= 4.1.x
-# It "suspends judgement" for fkey relationships until are tables are set.
-SET FOREIGN_KEY_CHECKS = 0;
-
--- ---------------------------------------------------------------------
--- lps_area
--- ---------------------------------------------------------------------
-
-DROP TABLE IF EXISTS `lps_area`;
-
-CREATE TABLE `lps_area`
-(
- `id` INTEGER NOT NULL,
- `title` VARCHAR(50) NOT NULL,
- `active` TINYINT DEFAULT 1 NOT NULL,
- `price` FLOAT DEFAULT 0 NOT NULL,
- `created_at` DATETIME,
- `updated_at` DATETIME,
- PRIMARY KEY (`id`)
-) ENGINE=InnoDB;
-
--- ---------------------------------------------------------------------
--- lps_area_city
--- ---------------------------------------------------------------------
-
-DROP TABLE IF EXISTS `lps_area_city`;
-
-CREATE TABLE `lps_area_city`
-(
- `id` INTEGER NOT NULL AUTO_INCREMENT,
- `id_area` INTEGER NOT NULL,
- `zipcode` VARCHAR(10) NOT NULL,
- `title` VARCHAR(50) NOT NULL,
- `latitude` DOUBLE,
- `longitude` DOUBLE,
- `created_at` DATETIME,
- `updated_at` DATETIME,
- PRIMARY KEY (`id`),
- INDEX `fi_area_area_city` (`id_area`),
- CONSTRAINT `fk_area_area_city`
- FOREIGN KEY (`id_area`)
- REFERENCES `lps_area` (`id`)
- ON DELETE CASCADE
-) ENGINE=InnoDB;
-
--- ---------------------------------------------------------------------
--- lps_area_schedule
--- ---------------------------------------------------------------------
-
-DROP TABLE IF EXISTS `lps_area_schedule`;
-
-CREATE TABLE `lps_area_schedule`
-(
- `id` INTEGER NOT NULL AUTO_INCREMENT,
- `id_area` INTEGER NOT NULL,
- `day` INTEGER NOT NULL,
- `begin_time` TIME NOT NULL,
- `end_time` TIME NOT NULL,
- `created_at` DATETIME,
- `updated_at` DATETIME,
- PRIMARY KEY (`id`),
- INDEX `fi_area_area_schedule` (`id_area`),
- CONSTRAINT `fk_area_area_schedule`
- FOREIGN KEY (`id_area`)
- REFERENCES `lps_area` (`id`)
- ON DELETE CASCADE
-) ENGINE=InnoDB;
-
-# This restores the fkey checks, after having unset them earlier
-SET FOREIGN_KEY_CHECKS = 1;
diff --git a/local/modules/LivraisonParSecteurs/Form/GeneralForm.php b/local/modules/LivraisonParSecteurs/Form/GeneralForm.php
index eef6a5ba..f20e5120 100644
--- a/local/modules/LivraisonParSecteurs/Form/GeneralForm.php
+++ b/local/modules/LivraisonParSecteurs/Form/GeneralForm.php
@@ -35,6 +35,15 @@ class GeneralForm extends BaseForm
"label" => $this->translator->trans('Delivery price', [], LivraisonParSecteurs::DOMAIN_NAME),
"label_attr" => ['for' => 'price']
])
+ ->add(
+ "minimum_amount",
+ "number",
+ [
+ "required" => true,
+ "constraints" => [new GreaterThanOrEqual(["value" => 0])],
+ "label" => $this->translator->trans('Minimum amount', [], LivraisonParSecteurs::DOMAIN_NAME),
+ "label_attr" => ['for' => 'minimum_amount']
+ ])
->add(
"active",
"number",
diff --git a/local/modules/LivraisonParSecteurs/Hook/AdminHook.php b/local/modules/LivraisonParSecteurs/Hook/AdminHook.php
index b7306849..fec57cb3 100644
--- a/local/modules/LivraisonParSecteurs/Hook/AdminHook.php
+++ b/local/modules/LivraisonParSecteurs/Hook/AdminHook.php
@@ -3,6 +3,7 @@
namespace LivraisonParSecteurs\Hook;
use LivraisonParSecteurs\LivraisonParSecteurs;
+use Thelia\Core\Event\Hook\HookRenderBlockEvent;
use Thelia\Core\Event\Hook\HookRenderEvent;
use Thelia\Core\Hook\BaseHook;
use Thelia\Core\Security\AccessManager;
@@ -34,6 +35,7 @@ class AdminHook extends BaseHook
}
}
+ /* Pour intégrer la date prévue de livraison dans différents formulaires (email, backOffice, ...) */
public function displayDeliveryDate(HookRenderEvent $event)
{
@@ -60,4 +62,18 @@ class AdminHook extends BaseHook
}
}
+ /* Pour afficher la liste des livraisons à effectuer dans la page d'accueil backOffice */
+ public function displayScheduledDeliveries(HookRenderBlockEvent $event)
+ {
+ $content = trim($this->render("scheduled-deliveries.html"));
+ if (!empty($content)) {
+ $event->add([
+ "id" => "block-scheduled-deliveries",
+ "title" => $this->trans("Scheduled deliveries", [], LivraisonParSecteurs::DOMAIN_NAME),
+ "content" => $content,
+ "class" => "col-md-8"
+ ]);
+ }
+ }
+
}
diff --git a/local/modules/LivraisonParSecteurs/I18n/fr_FR.php b/local/modules/LivraisonParSecteurs/I18n/fr_FR.php
index a31a0e48..aa3a0efa 100644
--- a/local/modules/LivraisonParSecteurs/I18n/fr_FR.php
+++ b/local/modules/LivraisonParSecteurs/I18n/fr_FR.php
@@ -4,8 +4,9 @@ return array(
'Actions' => 'Actions',
'Add a new city' => 'Rajouter une commune',
'Add a new delivery day' => 'Ajouter un jour de livraison',
+ 'Area' => 'Secteur',
'Area name' => 'Nom du secteur',
- 'Choose this day' => 'Choisissez ce jour',
+ 'Choose this day' => 'Je choisis ce créneau',
'Cities' => 'Communes desservies',
'City' => 'Commune',
'Create a delivery day' => 'Créer un nouveau jour de livraison',
@@ -23,16 +24,21 @@ return array(
'Format to respect' => 'Merci de respecter le format 50.255612 ou -3.121146 (le séparateur est un point et le nombre peut être négatif)',
'General' => 'Général',
'Home delivery cost' => 'Frais de livraison à domicile',
+ 'Message info minimum de commande' => 'La livraison à domicile est soumise à un montant minimum de commande sur votre secteur : il est possible que vous n\'ayez pas atteint ce minimum.',
+ 'Minimum amount' => 'Montant minimum de commande',
'Modify a delivery day' => 'Modifier un jour de livraison',
'Module name' => 'Livraison à domicile',
'My areas' => 'Mes secteurs de livraison',
'Next delivery day' => 'Prochain jour de livraison',
+ 'Order number' => 'Commande n°',
'Please select a delivery day' => 'Veuillez choisir un jour de livraison',
'Remove this city' => 'Retirer cette commune',
'Save' => 'Sauvegarder',
'Schedule' => 'Horaires de livraison',
'Scheduled date' => 'Livraison prévue le',
+ 'Scheduled deliveries' => 'Livraisons à domicile planifiées',
'There is no city delivered in this area' => 'Aucune commune desservie dans ce secteur',
+ 'There is no order to deliver' => 'Aucune commande à livrer à domicile',
'There is no schedule for this area' => 'Aucune livraison actuellement sur ce secteur',
'Title of config view' => 'Module LivraisonParSecteurs - Confiwguration',
'Zipcode' => 'Code postal',
diff --git a/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php b/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php
index 2a4ca59f..47ad6110 100644
--- a/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php
+++ b/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php
@@ -7,6 +7,7 @@ use LivraisonParSecteurs\Model\LpsAreaCityQuery;
use LivraisonParSecteurs\Model\LpsAreaQuery;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Propel;
+use Symfony\Component\Form\FormError;
use Thelia\Core\Translation\Translator;
use Thelia\Install\Database;
use Thelia\Model\AddressQuery;
@@ -28,6 +29,10 @@ class LivraisonParSecteurs extends AbstractDeliveryModule
const LPS_DELIVERY_DATE = 'lps_delivery_date';
const LPS_DELIVERY_BEGIN_TIME = 'lps_begin_time';
const LPS_DELIVERY_END_TIME = 'lps_end_time';
+ const FORMAT_DATES = 'd/m/Y';
+ const FORMAT_HEURES = 'H:i';
+ const FORMAT_DATE_COMPLETE = 'Y-m-d H:i:s';
+
/**
* @param ConnectionInterface|null $con
@@ -59,8 +64,17 @@ class LivraisonParSecteurs extends AbstractDeliveryModule
if (!empty($currentAddressId)) {
$zipcode = AddressQuery::create()->filterById($currentAddressId)->findOne($con)->getZipcode();
- if (null !== LpsAreaCityQuery::create()->filterByZipcode($zipcode)->findOne($con))
- $isValid = true;
+ // Condition 1 : le client doit être situé dans un secteur couvert par la livraison à domicile.
+ if (null !== $areaId = LpsAreaCityQuery::create()->filterByZipcode($zipcode)->findOne($con))
+ {
+
+ // Condition 2 : il doit avoir atteint le minimum de commande.
+ $montantPanier = $this->getRequest()->getSession()->getSessionCart($this->getDispatcher())->getTaxedAmount($country);
+ $montantMinimum = LpsAreaQuery::create()->findOneById($areaId)->getMinimumAmount();
+
+ if ($montantPanier >= $montantMinimum)
+ $isValid = true;
+ }
}
return $isValid;
diff --git a/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php b/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php
index 6d441f82..2d2c7f9c 100644
--- a/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php
+++ b/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php
@@ -48,6 +48,7 @@ class AreaLoop extends BaseLoop implements PropelSearchLoopInterface
->set("TITLE", $lps_area->getTitle())
->set("ACTIVE", $lps_area->getActive())
->set("PRICE", $lps_area->getPrice())
+ ->set("MINIMUM_AMOUNT", $lps_area->getMinimumAmount())
->set("DELIVERY_DAYS", $deliveryDays)
->set("COVERED_CITIES_NUMBER", $citiesCount)
;
diff --git a/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php b/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php
index 62a16711..3bcbfcd1 100644
--- a/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php
+++ b/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php
@@ -34,11 +34,12 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
$loopResultRow = new LoopResultRow($lps_area_schedule);
$loopResultRow
->set("ID", $lps_area_schedule->getId())
+ ->set("AREA_ID", $lps_area_schedule->getIdArea())
->set("DAY", $lps_area_schedule->getDay())
->set("DAY_LABEL", LivraisonParSecteurs::getDayLabel($lps_area_schedule->getDay()))
->set("BEGIN", $lps_area_schedule->getBeginTime())
->set("END", $lps_area_schedule->getEndTime())
- ->set("CALCULATED_DAY", LivraisonParSecteurs::calculateRelativeDate($lps_area_schedule->getDay())->format("d/m"))
+ ->set("CALCULATED_DAY", LivraisonParSecteurs::calculateRelativeDate($lps_area_schedule->getDay())->format(LivraisonParSecteurs::FORMAT_DATES))
;
$loopResult->addRow($loopResultRow);
}
@@ -51,6 +52,7 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
protected function getArgDefinitions()
{
return new ArgumentCollection(
+ Argument::createIntListTypeArgument('id'),
Argument::createIntListTypeArgument('area_id')
);
}
@@ -61,6 +63,9 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
public function buildModelCriteria()
{
$area = LpsAreaScheduleQuery::create();
+ if (null != $id = $this->getId()) {
+ $area->filterById($id);
+ }
if (null != $id = $this->getAreaId()) {
$area->filterByIdArea($id);
}
diff --git a/local/modules/LivraisonParSecteurs/templates/backOffice/default/delivery-address.html b/local/modules/LivraisonParSecteurs/templates/backOffice/default/delivery-address.html
index a4768c65..ac2b3a2e 100644
--- a/local/modules/LivraisonParSecteurs/templates/backOffice/default/delivery-address.html
+++ b/local/modules/LivraisonParSecteurs/templates/backOffice/default/delivery-address.html
@@ -2,7 +2,7 @@
| {intl l="Scheduled date" d="livraisonparsecteurs"} |
- {$day} entre {format_date date=$begin_time format="H:i"} et {format_date date=$end_time format="H:i"} |
+ {$day} entre {format_date date=$begin_time format="H\hi"} et {format_date date=$end_time format="H\hi"} |
| |
diff --git a/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-list.html b/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-list.html
index 99601424..dbc6423f 100644
--- a/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-list.html
+++ b/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-list.html
@@ -31,6 +31,7 @@
{intl l="Area name" d='livraisonparsecteurs'} |
{intl l="Active" d='livraisonparsecteurs'} |
{intl l="Delivery price" d='livraisonparsecteurs'} |
+ {intl l="Minimum amount" d='livraisonparsecteurs'} |
{intl l="Delivery days" d='livraisonparsecteurs'} |
{intl l="Delivered cities count" d='livraisonparsecteurs'} |
|
@@ -38,7 +39,7 @@
- {loop name="areas" type="lps_area" backend_context="yes"}
+ {loop name="areas" type="lps_area"}
| {$TITLE} |
@@ -49,6 +50,7 @@
|
{$PRICE} € |
+ {$MINIMUM_AMOUNT} € |
{$DELIVERY_DAYS}{if $DELIVERY_DAYS eq ''}{intl l="There is no schedule for this area" d="livraisonparsecteurs"}{/if} |
{$COVERED_CITIES_NUMBER} |
diff --git a/local/modules/LivraisonParSecteurs/templates/backOffice/default/form/area-schedule-create.html b/local/modules/LivraisonParSecteurs/templates/backOffice/default/form/area-schedule-create.html
index 8030641e..32f52721 100644
--- a/local/modules/LivraisonParSecteurs/templates/backOffice/default/form/area-schedule-create.html
+++ b/local/modules/LivraisonParSecteurs/templates/backOffice/default/form/area-schedule-create.html
@@ -52,7 +52,7 @@
{form_error form=$form field="begin_time"}{$message}{/form_error}
|