From 9e7232d209ef488f181ca2a126cb85ee409e85da Mon Sep 17 00:00:00 2001 From: TheCoreDev Date: Thu, 11 Feb 2021 17:28:25 +0100 Subject: [PATCH] On avance sur LivraisonParSecteurs --- .../LivraisonParSecteurs/Config/config.xml | 3 +- .../LivraisonParSecteurs/Config/routing.xml | 10 ++ .../Controller/BackOfficeController.php | 64 ++++++- .../Form/ScheduleCreateForm.php | 68 ++++++++ .../Form/ScheduleForm.php | 40 ----- .../Form/ScheduleUpdateForm.php | 68 ++++++++ .../LivraisonParSecteurs/I18n/fr_FR.php | 20 ++- .../LivraisonParSecteurs.php | 33 +++- .../LivraisonParSecteurs/Loop/AreaLoop.php | 12 +- .../Loop/AreaScheduleLoop.php | 22 +-- .../backOffice/default/deliveryarea-edit.html | 36 ++-- .../default/form/area-schedule-create.html | 116 +++++++++++++ .../default/includes/area-general.html | 28 +-- .../default/includes/area-schedule.html | 164 +++++++++--------- .../default/js/area-schedule-js.html | 65 +++++++ .../modal/area-schedule-modal-FULL.html | 62 +++++++ .../default/modal/area-schedule-modal.html | 41 +++++ 17 files changed, 685 insertions(+), 167 deletions(-) create mode 100644 local/modules/LivraisonParSecteurs/Form/ScheduleCreateForm.php delete mode 100644 local/modules/LivraisonParSecteurs/Form/ScheduleForm.php create mode 100644 local/modules/LivraisonParSecteurs/Form/ScheduleUpdateForm.php create mode 100644 local/modules/LivraisonParSecteurs/templates/backOffice/default/form/area-schedule-create.html create mode 100644 local/modules/LivraisonParSecteurs/templates/backOffice/default/js/area-schedule-js.html create mode 100644 local/modules/LivraisonParSecteurs/templates/backOffice/default/modal/area-schedule-modal-FULL.html create mode 100644 local/modules/LivraisonParSecteurs/templates/backOffice/default/modal/area-schedule-modal.html diff --git a/local/modules/LivraisonParSecteurs/Config/config.xml b/local/modules/LivraisonParSecteurs/Config/config.xml index 513530ff..c2e7951e 100644 --- a/local/modules/LivraisonParSecteurs/Config/config.xml +++ b/local/modules/LivraisonParSecteurs/Config/config.xml @@ -6,8 +6,9 @@
- + + diff --git a/local/modules/LivraisonParSecteurs/Config/routing.xml b/local/modules/LivraisonParSecteurs/Config/routing.xml index 179a27e2..39f4a72c 100644 --- a/local/modules/LivraisonParSecteurs/Config/routing.xml +++ b/local/modules/LivraisonParSecteurs/Config/routing.xml @@ -11,6 +11,7 @@ LivraisonParSecteurs\Controller\BackOfficeController::toggleActive \d+ + LivraisonParSecteurs\Controller\BackOfficeController::viewArea @@ -18,4 +19,13 @@ LivraisonParSecteurs\Controller\BackOfficeController::editArea + + LivraisonParSecteurs\Controller\BackOfficeController::deleteSchedule + + + + LivraisonParSecteurs\Controller\BackOfficeController::updateSchedule + + + diff --git a/local/modules/LivraisonParSecteurs/Controller/BackOfficeController.php b/local/modules/LivraisonParSecteurs/Controller/BackOfficeController.php index 8ece9d53..66b4b12a 100644 --- a/local/modules/LivraisonParSecteurs/Controller/BackOfficeController.php +++ b/local/modules/LivraisonParSecteurs/Controller/BackOfficeController.php @@ -4,12 +4,15 @@ namespace LivraisonParSecteurs\Controller; use LivraisonParSecteurs\LivraisonParSecteurs; use LivraisonParSecteurs\Model\LpsAreaQuery; +use LivraisonParSecteurs\Model\LpsAreaScheduleQuery; use Propel\Runtime\Map\TableMap; use Propel\Runtime\Propel; +use Symfony\Component\HttpFoundation\RedirectResponse; use Thelia\Controller\Admin\BaseAdminController; use Thelia\Core\Security\AccessManager; use Thelia\Core\Security\Resource\AdminResources; use Thelia\Form\Exception\FormValidationException; +use Thelia\Tools\URL; /** * Class BackOfficeController @@ -76,11 +79,68 @@ class BackOfficeController extends BaseAdminController $error_msg = $this->createStandardFormValidationErrorMessage($ex); } - /* Laurent : à faire --> changer le redirect si "Enregistrer et fermer" */ - if ($this->getRequest()->get('save_mode') == 'stay') return $this->render("deliveryarea-edit"); return $this->render("deliveryarea-list"); } + + /* + * Delete a day in an area's delivery schedule + */ + public function deleteSchedule() + { + // Check current user authorization + if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::UPDATE)) + return $response; + + $areaSchedule_id = $this->getRequest()->get('area-schedule_id'); + $query = LpsAreaScheduleQuery::create()->findById($areaSchedule_id); + if ($query === null) + $error_msg = "Delivery area schedule not found by Id"; + else + { + $con = Propel::getConnection(); + $con->beginTransaction(); + $query->delete($con); + $con->commit(); + } + + if ($this->getRequest()->request->get("success_url") == null) { + return new RedirectResponse(URL::getInstance()->absoluteUrl("/admin/module/LivraisonParSecteurs")); + } else { + return new RedirectResponse(URL::getInstance()->absoluteUrl($this->getRequest()->request->get("success_url"))); + } + } + + + /* + * Update a day in an area's delivery schedule + */ + public function updateSchedule() + { + // Check current user authorization + if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::UPDATE)) + return $response; + + $areaSchedule_id = $this->getRequest()->get('area-schedule_id'); + $query = LpsAreaScheduleQuery::create()->findById($areaSchedule_id); + if ($query === null) + $error_msg = "Delivery area schedule not found by Id"; + else + { + $con = Propel::getConnection(); + $con->beginTransaction(); +// $query->delete($con); + $con->commit(); + } + + if ($this->getRequest()->request->get("success_url") == null) { + return new RedirectResponse(URL::getInstance()->absoluteUrl("/admin/module/LivraisonParSecteurs")); + } else { + return new RedirectResponse(URL::getInstance()->absoluteUrl($this->getRequest()->request->get("success_url"))); + } + + } + } \ No newline at end of file diff --git a/local/modules/LivraisonParSecteurs/Form/ScheduleCreateForm.php b/local/modules/LivraisonParSecteurs/Form/ScheduleCreateForm.php new file mode 100644 index 00000000..f8448fb8 --- /dev/null +++ b/local/modules/LivraisonParSecteurs/Form/ScheduleCreateForm.php @@ -0,0 +1,68 @@ +formBuilder + ->add( + "area_id", + "integer", + [ + "required" => true, + "constraints" => [new Constraints\NotBlank()] + ]) + ->add( + "area-schedule_id", + "integer", + [ + "required" => true, + "constraints" => [new Constraints\NotBlank()] + ]) + ->add("day", "choice", [ + "choices" => $this->getDay(), + "label" => $this->translator->trans("Day", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + "label_attr" => ["for" => "attr-area-schedule-day"], + "required" => false, + "multiple" => true, + "attr" => array() + ]) + ->add("begin", "time", [ + "label" => $this->translator->trans("Begin", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + "label_attr" => ["for" => "attr-area-schedule-begin"], + "input" => "string", + "widget" => "single_text", + "required" => false, + "attr" => array() + ]) + ->add("end", "time", [ + "label" => $this->translator->trans("End", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + "label_attr" => ["for" => "attr-area-schedule-end"], + "input" => "string", + "widget" => "single_text", + "required" => false, + "attr" => array() + ]); + } + + /** + * @inheritDoc + */ + public function getName() + { + return "lps-area-schedule-create"; + } +} diff --git a/local/modules/LivraisonParSecteurs/Form/ScheduleForm.php b/local/modules/LivraisonParSecteurs/Form/ScheduleForm.php deleted file mode 100644 index 7b5189e6..00000000 --- a/local/modules/LivraisonParSecteurs/Form/ScheduleForm.php +++ /dev/null @@ -1,40 +0,0 @@ -formBuilder - ->add( - 'price', - 'number', - [ - 'constraints' => [new Constraints\NotBlank()], - 'required' => true, - 'label' => $this->translator->trans('Delivery price', [], LivraisonParSecteurs::DOMAIN_NAME), - 'label_attr' => ['for' => 'price'], - 'attr' => array() - ]); - } - - /** - * @inheritDoc - */ - public function getName() - { - return "lps-area-schedule.update"; - } -} diff --git a/local/modules/LivraisonParSecteurs/Form/ScheduleUpdateForm.php b/local/modules/LivraisonParSecteurs/Form/ScheduleUpdateForm.php new file mode 100644 index 00000000..3afcfd83 --- /dev/null +++ b/local/modules/LivraisonParSecteurs/Form/ScheduleUpdateForm.php @@ -0,0 +1,68 @@ +formBuilder + ->add( + "area_id", + "integer", + [ + "required" => true, + "constraints" => [new Constraints\NotBlank()] + ]) + ->add( + "area-schedule_id", + "integer", + [ + "required" => true, + "constraints" => [new Constraints\NotBlank()] + ]) + ->add("day", "choice", [ + "choices" => LivraisonParSecteurs::getDayLabel(null), + "label" => $this->translator->trans("Delivery day", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + "label_attr" => ["for" => "attr-area-schedule-day"], + "required" => true, + "multiple" => false, + "attr" => array() + ]) + ->add("begin", "time", [ + "label" => $this->translator->trans("Delivery beginning time", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + "label_attr" => ["for" => "attr-area-schedule-begin"], + "input" => "string", + "widget" => "single_text", + "required" => true, + "attr" => array() + ]) + ->add("end", "time", [ + "label" => $this->translator->trans("Delivery ending time", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + "label_attr" => ["for" => "attr-area-schedule-end"], + "input" => "string", + "widget" => "single_text", + "required" => true, + "attr" => array() + ]); + } + + /** + * @inheritDoc + */ + public function getName() + { + return "lps-area-schedule-update"; + } +} diff --git a/local/modules/LivraisonParSecteurs/I18n/fr_FR.php b/local/modules/LivraisonParSecteurs/I18n/fr_FR.php index 1fb4f419..5db234ba 100644 --- a/local/modules/LivraisonParSecteurs/I18n/fr_FR.php +++ b/local/modules/LivraisonParSecteurs/I18n/fr_FR.php @@ -2,15 +2,29 @@ return array( 'Active' => 'Actif', 'Actions' => 'Actions', + 'Add a new delivery day' => 'Ajouter un jour de livraison', 'Area name' => 'Nom du secteur', - 'Cities' => 'Communes couvertes', + 'Cities' => 'Communes desservies', + 'Delete an entry of schedule' => 'Supprimer un jour de livraison', + 'Delivery beginning time' => 'Début de la tournée', + 'Delivery day' => 'Jour de livraison', 'Delivery days' => 'Jours de livraison', + 'Delivery ending time' => 'Fin de la tournée', 'Delivery price' => 'Frais de livraison', + 'Do you really want to delete this delivery day ?' => 'Voulez-vous réellement supprimer ce jour de livraison ?', 'Edit an area' => 'Modifier le secteur', 'General' => 'Général', 'Home delivery cost' => 'Frais de livraison à domicile', + 'Modify a schedule' => 'Modifier un jour de livraison', 'My areas' => 'Mes secteurs de livraison', 'Save' => 'Sauvegarder', - 'Schedule' => 'Horaires', - 'Title of config view' => 'Module LivraisonParSecteurs - Configuration' + 'Schedule' => 'Horaires de livraison', + 'Title of config view' => 'Module LivraisonParSecteurs - Configuration', + 'Monday' => 'Lundi', + 'Tuesday' => 'Mardi', + 'Wednesday' => 'Mercredi', + 'Thursday' => 'Jeudi', + 'Friday' => 'Vendredi', + 'Saturday' => 'Samedi', + 'Sunday' => 'Dimanche', ); diff --git a/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php b/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php index 5fe7093d..53382cfd 100644 --- a/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php +++ b/local/modules/LivraisonParSecteurs/LivraisonParSecteurs.php @@ -2,7 +2,7 @@ namespace LivraisonParSecteurs; -use LivraisonParSecteurs\Model\LpsSecteurQuery; +use LivraisonParSecteurs\Model\LpsAreaQuery; use Propel\Runtime\Connection\ConnectionInterface; use Thelia\Core\Translation\Translator; use Thelia\Install\Database; @@ -12,6 +12,7 @@ use Thelia\Model\OrderPostage; use Thelia\Module\AbstractDeliveryModule; use Thelia\Module\Exception\DeliveryException; + class LivraisonParSecteurs extends AbstractDeliveryModule { /** @var string */ @@ -75,7 +76,35 @@ class LivraisonParSecteurs extends AbstractDeliveryModule ); } - return LpsSecteurQuery::create()->findOneByActive(1)->getPrice(); + return LpsAreaQuery::create()->findOneByActive(1)->getPrice(); } + static public function getDayLabel($int) + { + $translator = Translator::getInstance(); + + if ($int === null) { + return [ + $translator->trans("Monday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Tuesday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Wednesday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Thursday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Friday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Saturday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Sunday", [], LivraisonParSecteurs::MESSAGE_DOMAIN) + ]; + } + else + { + return [ + $translator->trans("Monday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Tuesday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Wednesday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Thursday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Friday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Saturday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), + $translator->trans("Sunday", [], LivraisonParSecteurs::MESSAGE_DOMAIN) + ][$int]; + } + } } diff --git a/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php b/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php index f50d6885..32cb562f 100644 --- a/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php +++ b/local/modules/LivraisonParSecteurs/Loop/AreaLoop.php @@ -2,6 +2,8 @@ namespace LivraisonParSecteurs\Loop; +use LivraisonParSecteurs\LivraisonParSecteurs; +use LivraisonParSecteurs\Model\LpsAreaScheduleQuery; use Thelia\Core\Template\Element\BaseLoop; use Thelia\Core\Template\Element\LoopResult; use Thelia\Core\Template\Element\LoopResultRow; @@ -30,12 +32,20 @@ class AreaLoop extends BaseLoop implements PropelSearchLoopInterface foreach ($loopResult->getResultDataCollection() as $lps_area) { $loopResultRow = new LoopResultRow($lps_area); + + $schedule = LpsAreaScheduleQuery::create()->findByIdArea($lps_area->getId()); + $deliveryDays = ""; + foreach ($schedule as $day) { + $deliveryDays .= LivraisonParSecteurs::getDayLabel($day->getDay()) . ', '; + } + $deliveryDays = substr($deliveryDays, 0, strlen($deliveryDays)-2); + $loopResultRow ->set("ID", $lps_area->getId()) ->set("TITLE", $lps_area->getTitle()) ->set("ACTIVE", $lps_area->getActive()) ->set("PRICE", $lps_area->getPrice()) - ->set("DELIVERY_DAYS", "Lundi....") + ->set("DELIVERY_DAYS", $deliveryDays) ; $loopResult->addRow($loopResultRow); } diff --git a/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php b/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php index e720df88..2b1ef92c 100644 --- a/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php +++ b/local/modules/LivraisonParSecteurs/Loop/AreaScheduleLoop.php @@ -2,6 +2,7 @@ namespace LivraisonParSecteurs\Loop; +use LivraisonParSecteurs\LivraisonParSecteurs; use LivraisonParSecteurs\Model\LpsAreaScheduleQuery; use Thelia\Core\Template\Element\BaseLoop; use Thelia\Core\Template\Element\LoopResult; @@ -9,7 +10,7 @@ use Thelia\Core\Template\Element\LoopResultRow; use Thelia\Core\Template\Element\PropelSearchLoopInterface; use Thelia\Core\Template\Loop\Argument\Argument; use Thelia\Core\Template\Loop\Argument\ArgumentCollection; -use LivraisonParSecteurs\Model\LpsAreaQuery; + /** * Class AreaScheduleLoop @@ -32,11 +33,11 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface $loopResultRow = new LoopResultRow($lps_area_schedule); $loopResultRow - ->set("ID", $lps_area->getId()) - ->set("TITLE", $lps_area->getTitle()) - ->set("ACTIVE", $lps_area->getActive()) - ->set("PRICE", $lps_area->getPrice()) - ->set("DELIVERY_DAYS", "Lundi....") + ->set("ID", $lps_area_schedule->getId()) + ->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()) ; $loopResult->addRow($loopResultRow); } @@ -49,7 +50,7 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface protected function getArgDefinitions() { return new ArgumentCollection( - Argument::createIntListTypeArgument('id_area') + Argument::createIntListTypeArgument('area_id') ); } @@ -59,9 +60,10 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface public function buildModelCriteria() { $query = LpsAreaScheduleQuery::create(); - $query->filterByIdArea($this->getIdArea()); + if (null != $id = $this->getAreaId()) { + $query->filterByIdArea($id); + } - return $query->orderByDay()->orderByBeginTime(); + return $query->orderByDay(); } - } diff --git a/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-edit.html b/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-edit.html index 6bb18386..f88c524a 100644 --- a/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-edit.html +++ b/local/modules/LivraisonParSecteurs/templates/backOffice/default/deliveryarea-edit.html @@ -5,6 +5,11 @@ {block name="check-access"}update{/block} {block name="check-module"}LivraisonParSecteurs{/block} +{block name="after-bootstrap-css"} + +{/block} + {block name="main-content"}
{assign "area_id" $smarty.get.area_id} @@ -14,7 +19,6 @@ {intl l='Edit an area' d='livraisonparsecteurs'} : {loop name="area" type="lps_area" id={$area_id}}{$TITLE}{/loop}
- {hookblock name="area.tabs" area=$area_id}