LivraisonParSecteurs : partie back-office terminée !!!
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
<form name="lps-area-cities-update" class="LivraisonParSecteurs\Form\CitiesForm" />
|
||||
<form name="lps-area-schedule-update" class="LivraisonParSecteurs\Form\ScheduleUpdateForm" />
|
||||
<form name="lps-area-schedule-create" class="LivraisonParSecteurs\Form\ScheduleCreateForm"/>
|
||||
<form name="lps-area-cities-add" class="LivraisonParSecteurs\Form\CitiesAddForm"/>
|
||||
</forms>
|
||||
|
||||
<loops>
|
||||
|
||||
@@ -5,30 +5,40 @@
|
||||
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
|
||||
|
||||
<route id="livraisonparsecteurs.area.list" path="/admin/module/LivraisonParSecteurs">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::viewAction</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\ListController::viewAction</default>
|
||||
</route>
|
||||
<route id="livraisonparsecteurs.toggle.active" path="/admin/module/LivraisonParSecteurs/toggle-online/{id}" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::toggleActive</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\ListController::toggleActive</default>
|
||||
<requirement key="id">\d+</requirement>
|
||||
</route>
|
||||
|
||||
<route id="livraisonparsecteurs.area.view" path="/admin/module/LivraisonParSecteurs/edit" methods="get">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::viewArea</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\GeneralController::viewArea</default>
|
||||
</route>
|
||||
<route id="livraisonparsecteurs.area.edit" path="/admin/module/LivraisonParSecteurs/edit" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::editArea</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\GeneralController::editArea</default>
|
||||
</route>
|
||||
|
||||
|
||||
<route id="livraisonparsecteurs.area.schedule.delete" path="/admin/module/LivraisonParSecteurs/schedule/delete" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::deleteSchedule</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\ScheduleController::deleteSchedule</default>
|
||||
</route>
|
||||
|
||||
<route id="livraisonparsecteurs.area.schedule.update" path="admin/module/LivraisonParSecteurs/schedule/update" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::updateSchedule</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\ScheduleController::updateSchedule</default>
|
||||
</route>
|
||||
|
||||
<route id="livraisonparsecteurs.area.schedule.create" path="admin/module/LivraisonParSecteurs/schedule/create" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\BackOfficeController::createSchedule</default>
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\ScheduleController::createSchedule</default>
|
||||
</route>
|
||||
|
||||
|
||||
<route id="livraisonparsecteurs.area.cities.remove" path="/admin/module/LivraisonParSecteurs/city/remove" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\CitiesController::removeCity</default>
|
||||
</route>
|
||||
<route id="livraisonparsecteurs.area.cities.add" path="/admin/module/LivraisonParSecteurs/city/add" methods="post">
|
||||
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\CitiesController::addCity</default>
|
||||
</route>
|
||||
|
||||
|
||||
</routes>
|
||||
|
||||
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace LivraisonParSecteurs\Controller\backOffice;
|
||||
|
||||
use LivraisonParSecteurs\LivraisonParSecteurs;
|
||||
use LivraisonParSecteurs\Model\LpsAreaCity;
|
||||
use LivraisonParSecteurs\Model\LpsAreaCityQuery;
|
||||
use LivraisonParSecteurs\Model\LpsAreaSchedule;
|
||||
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 CitiesController
|
||||
* @package LivraisonParSecteurs\Controller
|
||||
*/
|
||||
class CitiesController extends BaseAdminController
|
||||
{
|
||||
|
||||
/*
|
||||
* Remove a city from an area delivery tour
|
||||
*/
|
||||
public function removeCity()
|
||||
{
|
||||
// Check current user authorization
|
||||
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::UPDATE))
|
||||
return $response;
|
||||
|
||||
$areaCity_id = $this->getRequest()->get('area-cities_id');
|
||||
$query = LpsAreaCityQuery::create()->findById($areaCity_id);
|
||||
if ($query === null)
|
||||
$error_msg = "City not found by Id in this area";
|
||||
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")));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Add a new delivered city in an area
|
||||
*/
|
||||
public function addCity()
|
||||
{
|
||||
// Check current user authorization
|
||||
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::UPDATE))
|
||||
return $response;
|
||||
|
||||
$con = Propel::getConnection();
|
||||
$con->beginTransaction();
|
||||
|
||||
$error_msg = "";
|
||||
$addForm = $this->createForm("lps-area-cities-add", "form");
|
||||
try {
|
||||
$form = $this->validateForm($addForm, "POST");
|
||||
$data = $form->getData();
|
||||
|
||||
$query = new LpsAreaCity();
|
||||
$query->fromArray($data, TableMap::TYPE_FIELDNAME);
|
||||
$query->setIdArea($data['area_id']);
|
||||
$query->save($con);
|
||||
$con->commit();
|
||||
|
||||
} catch (FormValidationException $ex) {
|
||||
$error_msg = $this->createStandardFormValidationErrorMessage($ex);
|
||||
|
||||
if (false !== $error_msg) {
|
||||
$this->setupFormErrorContext(
|
||||
$this->getTranslator()->trans("City add"),
|
||||
$error_msg,
|
||||
$addForm,
|
||||
$ex
|
||||
);
|
||||
|
||||
return $this->generateErrorRedirect($addForm);
|
||||
}
|
||||
}
|
||||
|
||||
if ($data['success_url'] == null) {
|
||||
return new RedirectResponse(URL::getInstance()->absoluteUrl("/admin/module/LivraisonParSecteurs"));
|
||||
} else {
|
||||
return $this->generateSuccessRedirect($addForm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace LivraisonParSecteurs\Controller\backOffice;
|
||||
|
||||
use LivraisonParSecteurs\LivraisonParSecteurs;
|
||||
use LivraisonParSecteurs\Model\LpsAreaQuery;
|
||||
use Propel\Runtime\Map\TableMap;
|
||||
use Propel\Runtime\Propel;
|
||||
use Thelia\Controller\Admin\BaseAdminController;
|
||||
use Thelia\Core\Security\AccessManager;
|
||||
use Thelia\Core\Security\Resource\AdminResources;
|
||||
use Thelia\Form\Exception\FormValidationException;
|
||||
|
||||
/**
|
||||
* Class GeneralController
|
||||
* @package LivraisonParSecteurs\Controller
|
||||
*/
|
||||
class GeneralController extends BaseAdminController
|
||||
{
|
||||
|
||||
public function updatePrice($params = [])
|
||||
{
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
|
||||
|
||||
public function viewArea()
|
||||
{
|
||||
$selectedArea = LpsAreaQuery::create()->findOneById($this->getRequest()->query->get("area_id"));
|
||||
|
||||
return $this->render("deliveryarea-edit", array('module_code' => LivraisonParSecteurs::getModuleCode(),
|
||||
'area_id' => $selectedArea));
|
||||
}
|
||||
|
||||
|
||||
public function editArea()
|
||||
{
|
||||
// Check current user authorization
|
||||
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::VIEW))
|
||||
return $response;
|
||||
|
||||
$con = Propel::getConnection();
|
||||
$con->beginTransaction();
|
||||
|
||||
$error_msg = "";
|
||||
$changeForm = $this->createForm("lps-area-general-update", "form");
|
||||
|
||||
try {
|
||||
$form = $this->validateForm($changeForm, "POST");
|
||||
|
||||
$data = $form->getData();
|
||||
$area = LpsAreaQuery::create()->findOneById($data['area_id']);
|
||||
if ($area === null) {
|
||||
$error_msg = "Delivery area not found by Id";
|
||||
}
|
||||
else {
|
||||
$area->fromArray($data, TableMap::TYPE_FIELDNAME);
|
||||
$area->save();
|
||||
$con->commit();
|
||||
}
|
||||
} catch (FormValidationException $ex) {
|
||||
$error_msg = $this->createStandardFormValidationErrorMessage($ex);
|
||||
}
|
||||
|
||||
if ($this->getRequest()->get('save_mode') == 'stay')
|
||||
return $this->render("deliveryarea-edit");
|
||||
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace LivraisonParSecteurs\Controller\backOffice;
|
||||
|
||||
use LivraisonParSecteurs\LivraisonParSecteurs;
|
||||
use LivraisonParSecteurs\Model\LpsAreaQuery;
|
||||
use Thelia\Controller\Admin\BaseAdminController;
|
||||
use Thelia\Core\Security\AccessManager;
|
||||
use Thelia\Core\Security\Resource\AdminResources;
|
||||
|
||||
/**
|
||||
* Class ListController
|
||||
* @package LivraisonParSecteurs\Controller
|
||||
*/
|
||||
class ListController extends BaseAdminController
|
||||
{
|
||||
public function viewAction($params = [])
|
||||
{
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
|
||||
|
||||
public function toggleActive($id)
|
||||
{
|
||||
// Check current user authorization
|
||||
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::UPDATE))
|
||||
return $response;
|
||||
|
||||
$deliveryarea = LpsAreaQuery::create()->findOneById($id);
|
||||
$deliveryarea->setActive($deliveryarea->getActive() ? 0 : 1)->save();
|
||||
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace LivraisonParSecteurs\Controller;
|
||||
namespace LivraisonParSecteurs\Controller\backOffice;
|
||||
|
||||
use LivraisonParSecteurs\LivraisonParSecteurs;
|
||||
use LivraisonParSecteurs\Model\LpsAreaQuery;
|
||||
use LivraisonParSecteurs\Model\LpsAreaSchedule;
|
||||
use LivraisonParSecteurs\Model\LpsAreaScheduleQuery;
|
||||
use Propel\Runtime\Map\TableMap;
|
||||
@@ -16,75 +15,11 @@ use Thelia\Form\Exception\FormValidationException;
|
||||
use Thelia\Tools\URL;
|
||||
|
||||
/**
|
||||
* Class BackOfficeController
|
||||
* Class ScheduleController
|
||||
* @package LivraisonParSecteurs\Controller
|
||||
*/
|
||||
class BackOfficeController extends BaseAdminController
|
||||
class ScheduleController extends BaseAdminController
|
||||
{
|
||||
public function viewAction($params = [])
|
||||
{
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
|
||||
public function toggleActive($id)
|
||||
{
|
||||
// Check current user authorization
|
||||
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::UPDATE))
|
||||
return $response;
|
||||
|
||||
$deliveryarea = LpsAreaQuery::create()->findOneById($id);
|
||||
$deliveryarea->setActive($deliveryarea->getActive() ? 0 : 1)->save();
|
||||
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
|
||||
public function updatePrice($params = [])
|
||||
{
|
||||
return $this->render("deliveryarea-list");
|
||||
}
|
||||
|
||||
public function viewArea()
|
||||
{
|
||||
$selectedArea = LpsAreaQuery::create()->findOneById($this->getRequest()->query->get("area_id"));
|
||||
|
||||
return $this->render("deliveryarea-edit", array('module_code' => LivraisonParSecteurs::getModuleCode(),
|
||||
'area_id' => $selectedArea));
|
||||
}
|
||||
|
||||
public function editArea()
|
||||
{
|
||||
// Check current user authorization
|
||||
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::VIEW))
|
||||
return $response;
|
||||
|
||||
$con = Propel::getConnection();
|
||||
$con->beginTransaction();
|
||||
|
||||
$error_msg = "";
|
||||
$changeForm = $this->createForm("lps-area-general-update", "form");
|
||||
|
||||
try {
|
||||
$form = $this->validateForm($changeForm, "POST");
|
||||
|
||||
$data = $form->getData();
|
||||
$area = LpsAreaQuery::create()->findOneById($data['area_id']);
|
||||
if ($area === null) {
|
||||
$error_msg = "Delivery area not found by Id";
|
||||
}
|
||||
else {
|
||||
$area->fromArray($data, TableMap::TYPE_FIELDNAME);
|
||||
$area->save();
|
||||
$con->commit();
|
||||
}
|
||||
} catch (FormValidationException $ex) {
|
||||
$error_msg = $this->createStandardFormValidationErrorMessage($ex);
|
||||
}
|
||||
|
||||
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
|
||||
@@ -167,8 +102,8 @@ class BackOfficeController extends BaseAdminController
|
||||
|
||||
|
||||
/*
|
||||
* Update a day in an area's delivery schedule
|
||||
*/
|
||||
* Add a new delivery day in an area
|
||||
*/
|
||||
public function createSchedule()
|
||||
{
|
||||
// Check current user authorization
|
||||
@@ -210,7 +145,6 @@ class BackOfficeController extends BaseAdminController
|
||||
} else {
|
||||
return $this->generateSuccessRedirect($changeForm);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
58
local/modules/LivraisonParSecteurs/Form/CitiesAddForm.php
Normal file
58
local/modules/LivraisonParSecteurs/Form/CitiesAddForm.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace LivraisonParSecteurs\Form;
|
||||
|
||||
use LivraisonParSecteurs\LivraisonParSecteurs;
|
||||
use Thelia\Form\BaseForm;
|
||||
use Symfony\Component\Validator\Constraints;
|
||||
|
||||
/**
|
||||
* Class CitiesAddForm
|
||||
* @package LivraisonParSecteurs\Form
|
||||
*/
|
||||
class CitiesAddForm extends BaseForm
|
||||
{
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
protected function buildForm()
|
||||
{
|
||||
$this->formBuilder
|
||||
->add("area_id","integer", [
|
||||
"label_attr" => ["for" => "attr-area-id"],
|
||||
"required" => true,
|
||||
"constraints" => [new Constraints\NotBlank()]
|
||||
])
|
||||
->add("zipcode", "integer", [
|
||||
"label" => $this->translator->trans("Zipcode", [], LivraisonParSecteurs::MESSAGE_DOMAIN),
|
||||
"label_attr" => ["for" => "attr-city-zipcode"],
|
||||
"required" => true,
|
||||
"constraints" => [new Constraints\NotBlank(), new Constraints\NotNull()],
|
||||
])
|
||||
->add("title", "text", [
|
||||
"label" => $this->translator->trans("City", [], LivraisonParSecteurs::MESSAGE_DOMAIN),
|
||||
"label_attr" => ["for" => "attr-city-title"],
|
||||
"required" => true,
|
||||
"constraints" => [new Constraints\NotBlank(), new Constraints\NotNull()],
|
||||
"attr" => array()
|
||||
])
|
||||
->add("latitude", "number", [
|
||||
"label" => $this->translator->trans("Latitude", [], LivraisonParSecteurs::MESSAGE_DOMAIN),
|
||||
"label_attr" => ["for" => "attr-city-latitude"],
|
||||
"required" => false
|
||||
])
|
||||
->add("longitude", "number", [
|
||||
"label" => $this->translator->trans("Longitude", [], LivraisonParSecteurs::MESSAGE_DOMAIN),
|
||||
"label_attr" => ["for" => "attr-city-longitude"],
|
||||
"required" => false
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return "lps-area-cities-add";
|
||||
}
|
||||
}
|
||||
@@ -23,14 +23,15 @@ class CitiesForm extends BaseForm
|
||||
"integer",
|
||||
[
|
||||
"required" => true,
|
||||
"constraints" => [new Constraints\NotBlank()]
|
||||
"constraints" => [new Constraints\NotBlank()],
|
||||
'label' => $this->translator->trans('Area Id', [], LivraisonParSecteurs::DOMAIN_NAME)
|
||||
])
|
||||
->add(
|
||||
'zipcode',
|
||||
'integer',
|
||||
[
|
||||
'constraints' => [new Constraints\NotBlank()],
|
||||
'label' => $this->translator->trans('Delivery price', [], LivraisonParSecteurs::DOMAIN_NAME)
|
||||
'label' => $this->translator->trans('Zipcode', [], LivraisonParSecteurs::DOMAIN_NAME)
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
@@ -35,11 +35,10 @@ class ScheduleCreateForm extends BaseForm
|
||||
])
|
||||
->add("begin_time", "time", [
|
||||
"label" => $this->translator->trans("Delivery beginning time", [], LivraisonParSecteurs::MESSAGE_DOMAIN),
|
||||
"label_attr" => ["for" => "attr-area-schedule-begin"],
|
||||
"label_attr" => ["for" => "attr-area-schedule-start"],
|
||||
"input" => "string",
|
||||
"widget" => "single_text",
|
||||
"required" => true,
|
||||
"constraints" => [new Constraints\NotBlank(), new Constraints\NotNull()],
|
||||
"required" => true,"constraints" => [new Constraints\NotBlank(), new Constraints\NotNull()],
|
||||
"attr" => array()
|
||||
])
|
||||
->add("end_time", "time", [
|
||||
|
||||
@@ -2,11 +2,13 @@
|
||||
return array(
|
||||
'Active' => 'Actif',
|
||||
'Actions' => 'Actions',
|
||||
'Add a new city' => 'Rajouter une commune',
|
||||
'Add a new delivery day' => 'Ajouter un jour de livraison',
|
||||
'Area name' => 'Nom du secteur',
|
||||
'Cities' => 'Communes desservies',
|
||||
'City' => 'Commune',
|
||||
'Create a delivery day' => 'Créer un nouveau jour de livraison',
|
||||
'Delete a city from this area' => 'Supprimer une commune de livraison',
|
||||
'Delete an entry of schedule' => 'Supprimer un jour de livraison',
|
||||
'Delivered cities count' => 'Nb de communes desservies',
|
||||
'Delivery beginning time' => 'Début de la tournée',
|
||||
@@ -14,14 +16,18 @@ return array(
|
||||
'Delivery days' => 'Jours de livraison',
|
||||
'Delivery ending time' => 'Fin de la tournée',
|
||||
'Delivery price' => 'Frais de livraison',
|
||||
'Do you really want to remove this city ?' => 'Voulez-vous réellement retirer cette commune de ce secteur 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',
|
||||
'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',
|
||||
'Modify a delivery day' => 'Modifier un jour de livraison',
|
||||
'My areas' => 'Mes secteurs de livraison',
|
||||
'Remove this city' => 'Retirer cette commune',
|
||||
'Save' => 'Sauvegarder',
|
||||
'Schedule' => 'Horaires de livraison',
|
||||
'There is no city delivered in this area' => 'Aucune commune desservie dans ce secteur',
|
||||
'There is no schedule for this area' => 'Aucune livraison actuellement sur ce secteur',
|
||||
'Title of config view' => 'Module LivraisonParSecteurs - Configuration',
|
||||
'Zipcode' => 'Code postal',
|
||||
|
||||
@@ -3,12 +3,15 @@
|
||||
namespace LivraisonParSecteurs\Loop;
|
||||
|
||||
use LivraisonParSecteurs\Model\LpsAreaCityQuery;
|
||||
use Propel\Runtime\ActiveQuery\Criteria;
|
||||
use Thelia\Core\Template\Element\BaseLoop;
|
||||
use Thelia\Core\Template\Element\LoopResult;
|
||||
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 Thelia\Type\EnumListType;
|
||||
use Thelia\Type\TypeCollection;
|
||||
|
||||
/**
|
||||
* Class AreaCitiesLoop
|
||||
@@ -48,7 +51,9 @@ class AreaCitiesLoop extends BaseLoop implements PropelSearchLoopInterface
|
||||
protected function getArgDefinitions()
|
||||
{
|
||||
return new ArgumentCollection(
|
||||
Argument::createIntListTypeArgument('area_id')
|
||||
Argument::createIntListTypeArgument('area_id'),
|
||||
Argument::createEnumListTypeArgument('order',
|
||||
['title', 'zipcode'], 'title')
|
||||
);
|
||||
}
|
||||
|
||||
@@ -58,11 +63,23 @@ class AreaCitiesLoop extends BaseLoop implements PropelSearchLoopInterface
|
||||
public function buildModelCriteria()
|
||||
{
|
||||
$query = LpsAreaCityQuery::create();
|
||||
|
||||
if (null != $id = $this->getAreaId()) {
|
||||
$query->filterByIdArea($id);
|
||||
}
|
||||
|
||||
return $query->orderByZipcode();
|
||||
foreach ($this->getOrder() as $order) {
|
||||
switch ($order) {
|
||||
case 'title':
|
||||
$query->orderByTitle();
|
||||
break;
|
||||
case 'zipcode':
|
||||
$query->orderByZipcode()->orderByTitle();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -64,6 +64,6 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
|
||||
$query->filterByIdArea($id);
|
||||
}
|
||||
|
||||
return $query->orderByDay();
|
||||
return $query->orderByDay()->orderByBeginTime();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,6 +52,7 @@
|
||||
</div>
|
||||
|
||||
{include file="modal/area-schedule-modal.html"}
|
||||
{include file="modal/area-cities-modal.html"}
|
||||
|
||||
{/block}
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
</div>
|
||||
</td>
|
||||
<td>{$PRICE} €</td>
|
||||
<td>{$DELIVERY_DAYS}</td>
|
||||
<td>{$DELIVERY_DAYS}{if $DELIVERY_DAYS eq ''}<i>{intl l="There is no schedule for this area" d="livraisonparsecteurs"}</i>{/if}</td>
|
||||
<td>{$COVERED_CITIES_NUMBER}</td>
|
||||
<td class="actions">
|
||||
<div class="btn-group" role="group">
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
{form name=$form_name}
|
||||
{form_hidden_fields form=$form}
|
||||
|
||||
{render_form_field form=$form field="success_url" value={url path="/admin/module/LivraisonParSecteurs/edit?area_id={$area_id}#cities"}}
|
||||
{render_form_field form=$form field="error_url" value={url path="/admin/module/LivraisonParSecteurs/edit?area_id={$area_id}#cities"}}
|
||||
|
||||
{form_field form=$form field="area_id"}
|
||||
<div class="form-group hidden">
|
||||
<input type="hidden" class="form-control" name="{$name}" id="{$label_attr.for}"
|
||||
value="{$area_id}"/>
|
||||
</div>
|
||||
{/form_field}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
|
||||
{form_field form=$form field="zipcode"}
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="{$label_attr.for}">
|
||||
{intl l=$label d='livraisonparsecteurs'}
|
||||
{if $required}<span class="required">*</span>{/if}
|
||||
</label>
|
||||
<input type="text" id="{$label_attr.for}" class="form-control" name="{$name}" value="" {if $required}required{/if} />
|
||||
</div>
|
||||
{form_error form=$form field="zipcode"}{$message}{/form_error}
|
||||
{/form_field}
|
||||
|
||||
{form_field form=$form field="title"}
|
||||
<div class="form-group">
|
||||
<label class="control-label" for="{$label_attr.for}">
|
||||
{intl l=$label d='livraisonparsecteurs'}
|
||||
{if $required}<span class="required">*</span>{/if}
|
||||
</label>
|
||||
<input type="text" id="{$label_attr.for}" class="form-control" name="{$name}" value="" {if $required}required{/if} />
|
||||
</div>
|
||||
{form_error form=$form field="title"}{$message}{/form_error}
|
||||
{/form_field}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-6">
|
||||
{form_field form=$form field="latitude"}
|
||||
<div class="form-group form-inline">
|
||||
<label class="control-label" for="{$label_attr.for}">
|
||||
{intl l=$label d='livraisonparsecteurs'}
|
||||
{if $required}<span class="required">*</span>{/if}
|
||||
</label>
|
||||
<input type="text" id="{$label_attr.for}" class="form-control" name="{$name}" value="" {if $required}required{/if} />
|
||||
</div>
|
||||
{form_error form=$form field="latitude"}{$message}{/form_error}
|
||||
{/form_field}
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
{form_field form=$form field="longitude"}
|
||||
<div class="form-group form-inline">
|
||||
<label class="control-label" for="{$label_attr.for}">
|
||||
{intl l=$label d='livraisonparsecteurs'}
|
||||
{if $required}<span class="required">*</span>{/if}
|
||||
</label>
|
||||
<input type="text" id="{$label_attr.for}" class="form-control" name="{$name}" value="" {if $required}required{/if} />
|
||||
</div>
|
||||
{form_error form=$form field="longitude"}{$message}{/form_error}
|
||||
{/form_field}
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<span class="help-block" style="text-align: center">{intl l="Format to respect" d="livraisonparsecteurs"}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
{/form}
|
||||
@@ -23,91 +23,121 @@
|
||||
}
|
||||
|
||||
.city-remove {
|
||||
height: 30x !important;
|
||||
height: 30px !important;
|
||||
}
|
||||
|
||||
.pin {
|
||||
height: 25px;
|
||||
margin-left: 12px;
|
||||
}
|
||||
|
||||
.legende {
|
||||
margin-top: 25px;
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
{form name='lps-area-cities-update'}
|
||||
<div class="form-container">
|
||||
<div class="form-container">
|
||||
|
||||
{if $form_error}
|
||||
<div class="alert alert-danger">{$form_error_message}</div>
|
||||
{/if}
|
||||
{if $form_error}
|
||||
<div class="alert alert-danger">{$form_error_message}</div>
|
||||
{/if}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
<div class="row">
|
||||
<div class="col-md-4">
|
||||
|
||||
{loop name="area" type="lps_area" id="$area_id"}
|
||||
<form action="{url path='/admin/module/LivraisonParSecteurs/edit' area_id={$area_id}}" method="POST" class="clearfix" {form_enctype form=$form}>
|
||||
{form_hidden_fields form=$form}
|
||||
{loop name="area" type="lps_area" id="$area_id"}
|
||||
<form action="{url path='/admin/module/LivraisonParSecteurs/edit' area_id={$area_id}}" method="POST" class="clearfix" {form_enctype form=$form}>
|
||||
{form_hidden_fields form=$form}
|
||||
|
||||
{form_field form=$form field="area_id"}
|
||||
<input type="hidden" name="{$name}" value="{$area_id}"/>
|
||||
{/form_field}
|
||||
{form_field form=$form field="area_id"}
|
||||
<input type="hidden" name="{$name}" value="{$area_id}"/>
|
||||
{/form_field}
|
||||
|
||||
<div class="general-block-decorator">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-condensed" id="areas-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{intl l="Zipcode" d="livraisonparsecteurs"}</th>
|
||||
<th>{intl l="City" d="livraisonparsecteurs"}</th>
|
||||
<th class="pull-right">
|
||||
<div>
|
||||
<a class="btn btn-default btn-primary city-add"
|
||||
title="{intl l='Add a new city' d='livraisonparsecteurs'}"
|
||||
data-target="#city-add" data-toggle="modal">
|
||||
<i class="glyphicon glyphicon-plus-sign"></i>
|
||||
</a>
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{loop name="cities" type="lps_area_cities" area_id="$area_id"}
|
||||
<tr>
|
||||
<td>{$ZIPCODE}</td>
|
||||
<td>{$TITLE}</td>
|
||||
<td class="actions">
|
||||
<div class="btn-group" role="group">
|
||||
<a class="btn btn-danger btn-responsive city-remove" title="{intl l='Remove this city'}" data-target="#city-remove" data-toggle="modal" data-id="{$ID}">
|
||||
<i class="glyphicon glyphicon-trash"></i>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/loop}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="general-block-decorator">
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-condensed" id="areas-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{intl l="Zipcode" d="livraisonparsecteurs"}</th>
|
||||
<th>{intl l="City" d="livraisonparsecteurs"}</th>
|
||||
<th class="pull-right">
|
||||
<div>
|
||||
{loop name="auth-delete" type="auth" role="ADMIN" resource="admin.lps.cities" access="CREATE" module="LivraisonParSecteurs"}
|
||||
<a class="btn btn-default btn-primary city-add"
|
||||
title="{intl l='Add a new city' d='livraisonparsecteurs'}"
|
||||
data-target="#area-cities-add" data-toggle="modal">
|
||||
<i class="glyphicon glyphicon-plus-sign"></i>
|
||||
</a>
|
||||
{/loop}
|
||||
</div>
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{loop name="cities" type="lps_area_cities" area_id="$area_id" order="title"}
|
||||
<tr>
|
||||
<td>{$ZIPCODE}</td>
|
||||
<td>{$TITLE}{if $LATITUDE eq '' or $LONGITUDE eq ''}<img src="{image file='assets/img/pin.svg'}" title="Pas de coordonnées pour cette commune" alt="Pas de coordonnées" class="pin" />{/if}</td>
|
||||
<td class="actions">
|
||||
<div class="btn-group" role="group">
|
||||
{loop name="auth-delete" type="auth" role="ADMIN" resource="admin.lps.cities" access="DELETE" module="LivraisonParSecteurs"}
|
||||
<a class="btn btn-danger btn-responsive cities-remove" title="{intl l='Remove this city'}" data-target="#area-cities-remove" data-toggle="modal" data-id="{$ID}">
|
||||
<i class="glyphicon glyphicon-trash"></i>
|
||||
</a>
|
||||
{/loop}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/loop}
|
||||
{elseloop rel="cities"}
|
||||
<tr>
|
||||
<td colspan="1000">
|
||||
<div class="alert alert-info">
|
||||
{intl l="There is no city delivered in this area" d="livraisonparsecteurs"}
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
{/elseloop}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<table id="coordinates" class="hidden">
|
||||
<thead></thead>
|
||||
<tbody>
|
||||
{loop name="cities-coordinates" type="lps_area_cities" area_id="$area_id"}
|
||||
<tr>
|
||||
<td>{$LATITUDE}</td>
|
||||
<td>{$LONGITUDE}</td>
|
||||
<td>{$TITLE}</td>
|
||||
</tr>
|
||||
{/loop}
|
||||
</tbody>
|
||||
</table>
|
||||
<table id="coordinates" class="hidden">
|
||||
<thead></thead>
|
||||
<tbody>
|
||||
{loop name="cities-coordinates" type="lps_area_cities" area_id="$area_id"}
|
||||
<tr>
|
||||
<td>{$LATITUDE}</td>
|
||||
<td>{$LONGITUDE}</td>
|
||||
<td>{$TITLE}</td>
|
||||
</tr>
|
||||
{/loop}
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</form>
|
||||
{/loop}
|
||||
</div>
|
||||
<input id="attr-city-id-remove" type="hidden" value=""/>
|
||||
|
||||
<div class="col-md-8">
|
||||
<input type="hidden" id="map-center-lon" value="2.2667287624488397" />
|
||||
<input type="hidden" id="map-center-lat" value="50.749980292425974" />
|
||||
</form>
|
||||
{/loop}
|
||||
</div>
|
||||
|
||||
<div id="map" class="locationMap"></div>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBb07YA_unrh5w821I1xHxbeYb5KCF_WaM&libraries=&v=weekly" async></script>
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<input type="hidden" id="map-center-lon" value="2.2667287624488397" />
|
||||
<input type="hidden" id="map-center-lat" value="50.749980292425974" />
|
||||
|
||||
<div id="map" class="locationMap"></div>
|
||||
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBb07YA_unrh5w821I1xHxbeYb5KCF_WaM&libraries=&v=weekly" async></script>
|
||||
|
||||
<caption class="clearfix">
|
||||
<div class="legende">NB : Les communes sans coordonnées GPS n'apparaitront pas sur la carte ci-dessus.</div>
|
||||
</caption>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/form}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
{/if}
|
||||
|
||||
{loop name="area" type="lps_area" id="$area_id"}
|
||||
<form action="{url path='/admin/module/LivraisonParSecteurs/edit' area_id={$area_id}}" method="POST" class="clearfix" {form_enctype form=$form}>
|
||||
<form action="{url path='/admin/module/LivraisonParSecteurs/edit' area_id={$area_id}}" method="POST" class="clearfix" {form_enctype form=$form}>
|
||||
{form_hidden_fields form=$form}
|
||||
|
||||
{include
|
||||
@@ -57,7 +57,7 @@
|
||||
<td>
|
||||
<div class="btn-group">
|
||||
{loop name="auth-edit" type="auth" role="ADMIN" resource="admin.lps.schedule" access="UPDATE" module="LivraisonParSecteurs"}
|
||||
<a class="btn btn-default btn-xs area-schedule-update-default"
|
||||
<a class="btn btn-info btn-responsive area-schedule-update-default"
|
||||
title="{intl l='Modify this delivery day' d='livraisonparsecteurs'}"
|
||||
data-target="#area-schedule-update" data-toggle="modal" data-id="{$ID}"
|
||||
data-day="{$DAY}" data-begin="{format_date date=$BEGIN format="H:i"}"
|
||||
@@ -66,7 +66,7 @@
|
||||
</a>
|
||||
{/loop}
|
||||
{loop name="auth-delete" type="auth" role="ADMIN" resource="admin.lps.schedule" access="DELETE" module="LivraisonParSecteurs"}
|
||||
<a class="btn btn-default btn-xs area-schedule-delete"
|
||||
<a class="btn btn-danger btn-responsive area-schedule-delete"
|
||||
title="{intl l='Delete this delivery day' d='livraisonparsecteurs'}"
|
||||
data-target="#area-schedule-delete" data-toggle="modal" data-id="{$ID}">
|
||||
<i class="glyphicon glyphicon-trash"></i>
|
||||
|
||||
@@ -5,7 +5,6 @@
|
||||
(function($){
|
||||
|
||||
$('a[href="#cities"]').on("shown.bs.tab",function(){
|
||||
|
||||
var opt = {
|
||||
center: new google.maps.LatLng($("#map-center-lat").val(), $("#map-center-lon").val()),
|
||||
zoom: 12,
|
||||
@@ -24,7 +23,6 @@
|
||||
});
|
||||
|
||||
function displayPins() {
|
||||
|
||||
var arrays = [];
|
||||
$('#coordinates').eq(0).find('tr').each((r,row) => arrays.push($(row).find('td,th').map((c,cell) => $(cell).text()).toArray()))
|
||||
|
||||
@@ -37,6 +35,18 @@
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// On sélectionne une commune à supprimer
|
||||
$('a.cities-remove').click(function (ev) {
|
||||
$('#attr-cities-id-remove').val($(this).data('id'));
|
||||
});
|
||||
|
||||
// On ajoute une commune au secteur
|
||||
$('a.city-add').click(function (ev) {
|
||||
$("#attr-city-zipcode input, #attr-city-title input").prop('required', true);
|
||||
$("#attr-city-latitude input, #attr-city-longitude input").prop('required', false);
|
||||
});
|
||||
|
||||
})(jQuery);
|
||||
|
||||
</script>
|
||||
@@ -17,10 +17,11 @@
|
||||
});
|
||||
|
||||
$('a.area-schedule-add').click(function (ev) {
|
||||
$("#attr-area-schedule-begin input, #attr-area-schedule-end input").prop('required', false);
|
||||
$("#attr-area-schedule-begin input, #attr-area-schedule-end input").prop('required', true);
|
||||
$("#attr-area-schedule-day").prop('required', true);
|
||||
});
|
||||
|
||||
|
||||
{$langcode = {lang attr="code"}|substr:0:2}
|
||||
$(document).ready(function () {
|
||||
$('.input-group.time').datetimepicker({
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
{* DELETE modal *}
|
||||
{capture "cities_delete"}
|
||||
{intl l="Do you really want to remove this city ?" d="livraisonparsecteurs"}
|
||||
<input type="hidden" name="area-cities_id" id="attr-cities-id-remove" value=""/>
|
||||
<input type="hidden" name="area_id" value="{$smarty.get.area_id}"/>
|
||||
<input type="hidden" name="success_url" value="{url path="/admin/module/LivraisonParSecteurs/edit?area_id={$area_id}#cities"}"/>
|
||||
{/capture}
|
||||
|
||||
{include file="includes/generic-confirm-dialog.html"
|
||||
dialog_id = "area-cities-remove"
|
||||
dialog_title = {intl l="Delete a city from this area" d="livraisonparsecteurs"}
|
||||
dialog_message = {$smarty.capture.cities_delete nofilter}
|
||||
dialog_ok_label = {intl l="Delete"}
|
||||
dialog_cancel_label = {intl l="Cancel"}
|
||||
form_action = {token_url path='/admin/module/LivraisonParSecteurs/city/remove'}
|
||||
}
|
||||
|
||||
|
||||
{* CREATE Modal *}
|
||||
{form name="lps-area-cities-add"}
|
||||
{capture "cities_add"}
|
||||
{include file="form/area-cities-add.html" form_name="lps-area-cities-add" area_id=$smarty.get.area_id}
|
||||
{/capture}
|
||||
|
||||
{include file="includes/generic-create-dialog.html"
|
||||
dialog_id = "area-cities-add"
|
||||
dialog_title = {intl l="Add a new city" d="livraisonparsecteurs"}
|
||||
dialog_body = {$smarty.capture.cities_add nofilter}
|
||||
dialog_ok_label = {intl l="Create"}
|
||||
dialog_cancel_label = {intl l="Cancel"}
|
||||
form_action = {url path="admin/module/LivraisonParSecteurs/city/add"}
|
||||
form_enctype = {form_enctype form=$form}
|
||||
}
|
||||
{/form}
|
||||
16
templates/backOffice/custom/assets/img/pin.svg
Normal file
16
templates/backOffice/custom/assets/img/pin.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 117 KiB |
44
templates/backOffice/custom/template.xml
Normal file
44
templates/backOffice/custom/template.xml
Normal file
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<template xmlns="http://thelia.net/schema/dic/template"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://thelia.net/schema/dic/template http://thelia.net/schema/dic/template/template-1_0.xsd">
|
||||
<descriptive locale="fr">
|
||||
<title>Template back office par défaut</title>
|
||||
</descriptive>
|
||||
<descriptive locale="en">
|
||||
<title>Default back-office template</title>
|
||||
</descriptive>
|
||||
<parent>default</parent>
|
||||
<languages>
|
||||
<language>ar_SA</language>
|
||||
<language>cs_CZ</language>
|
||||
<language>de_DE</language>
|
||||
<language>el_GR</language>
|
||||
<language>en_US</language>
|
||||
<language>es_ES</language>
|
||||
<language>fa_IR</language>
|
||||
<language>fr_FR</language>
|
||||
<language>hu_HU</language>
|
||||
<language>id_ID</language>
|
||||
<language>it_IT</language>
|
||||
<language>nl_NL</language>
|
||||
<language>pl_PL</language>
|
||||
<language>pt_BR</language>
|
||||
<language>pt_PT</language>
|
||||
<language>ru_RU</language>
|
||||
<language>sk_SK</language>
|
||||
<language>tr_TR</language>
|
||||
<language>uk_UA</language>
|
||||
</languages>
|
||||
<version>1.0.0</version>
|
||||
<authors>
|
||||
<author>
|
||||
<name>Thelia team</name>
|
||||
<company>thelia.net</company>
|
||||
<email>contact@thelia.net</email>
|
||||
<website>thelia.net</website>
|
||||
</author>
|
||||
</authors>
|
||||
<thelia>2.4.3</thelia>
|
||||
<stability>prod</stability>
|
||||
</template>
|
||||
Reference in New Issue
Block a user