LivraisonParSecteurs : finalisation (suppression et création de secteur)

This commit is contained in:
2021-03-01 19:46:36 +01:00
parent ac82e779da
commit 37433f2f66
8 changed files with 244 additions and 2 deletions

View File

@@ -5,6 +5,7 @@
xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd">
<forms>
<form name="lps-area-create" class="LivraisonParSecteurs\Form\CreateForm"/>
<form name="lps-area-general-update" class="LivraisonParSecteurs\Form\GeneralForm"/>
<form name="lps-area-cities-update" class="LivraisonParSecteurs\Form\CitiesForm" />
<form name="lps-area-schedule-update" class="LivraisonParSecteurs\Form\ScheduleUpdateForm" />

View File

@@ -4,7 +4,7 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<route id="livraisonparsecteurs.area.list" path="/admin/module/LivraisonParSecteurs" methods="get">
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\ListController::viewAction</default>
</route>
<route id="livraisonparsecteurs.toggle.active" path="/admin/module/LivraisonParSecteurs/toggle-online/{id}" methods="post">
@@ -18,6 +18,12 @@
<route id="livraisonparsecteurs.area.edit" path="/admin/module/LivraisonParSecteurs/edit" methods="post">
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\GeneralController::editArea</default>
</route>
<route id="lps-area-create" path="/admin/module/LivraisonParSecteurs" methods="post">
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\GeneralController::createArea</default>
</route>
<route id="livraisonparsecteurs.area.delete" path="/admin/module/LivraisonParSecteurs/delete">
<default key="_controller">LivraisonParSecteurs\Controller\backOffice\GeneralController::deleteArea</default>
</route>
<route id="livraisonparsecteurs.area.schedule.delete" path="/admin/module/LivraisonParSecteurs/schedule/delete" methods="post">

View File

@@ -3,13 +3,17 @@
namespace LivraisonParSecteurs\Controller\backOffice;
use LivraisonParSecteurs\LivraisonParSecteurs;
use LivraisonParSecteurs\Model\LpsArea;
use LivraisonParSecteurs\Model\LpsAreaQuery;
use Propel\Runtime\ActiveQuery\Criteria;
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 GeneralController
@@ -68,4 +72,64 @@ class GeneralController extends BaseAdminController
return $this->render("deliveryarea-list");
}
public function createArea()
{
// Check current user authorization
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::VIEW))
return $response;
$con = Propel::getConnection();
$con->beginTransaction();
$error_msg = "";
$createForm = $this->createForm("lps-area-create", "form");
try {
$form = $this->validateForm($createForm, "POST");
$data = $form->getData();
$newArea = new LpsArea();
$newArea->fromArray($data, TableMap::TYPE_FIELDNAME);
$newArea->setId(LpsAreaQuery::create()->orderById(Criteria::DESC)->findOne($con)->getId() + 1);
$newArea->save();
$con->commit();
} catch (FormValidationException $ex) {
$error_msg = $this->createStandardFormValidationErrorMessage($ex);
}
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")));
}
}
public function deleteArea()
{
// Check current user authorization
if (null !== $response = $this->checkAuth(AdminResources::MODULE, LivraisonParSecteurs::getModuleCode(), AccessManager::VIEW))
return $response;
$areaCity_id = $this->getRequest()->get('attr-area-id');
$query = LpsAreaQuery::create()->findById($areaCity_id);
if ($query === null)
$error_msg = "Area 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")));
}
}
}

View File

@@ -0,0 +1,65 @@
<?php
namespace LivraisonParSecteurs\Form;
use LivraisonParSecteurs\LivraisonParSecteurs;
use Symfony\Component\Validator\Constraints\GreaterThanOrEqual;
use Thelia\Form\BaseForm;
use Symfony\Component\Validator\Constraints;
/**
* Class CreateForm
* @package LivraisonParSecteurs\Form
*/
class CreateForm extends BaseForm
{
/**
* @inheritDoc
*/
protected function buildForm()
{
$this->formBuilder
->add(
"title",
"text",
[
"required" => true,
"constraints" => [new Constraints\NotBlank()],
"label" => $this->translator->trans('Area name', [], LivraisonParSecteurs::DOMAIN_NAME),
"label_attr" => ['for' => 'title']
])
->add(
"price",
"number",
[
"required" => true,
"constraints" => [new GreaterThanOrEqual(["value" => 0])],
"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",
[
"required" => true
]
);
}
/**
* @inheritDoc
*/
public function getName()
{
return "lps-area-create";
}
}

View File

@@ -10,6 +10,8 @@ return array(
'Cities' => 'Communes desservies',
'City' => 'Commune',
'Create a delivery day' => 'Créer un nouveau jour de livraison',
'Create a new area' => 'Créer un nouveau secteur',
'Delete an area' => 'Supprimer un secteur',
'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',
@@ -19,6 +21,7 @@ return array(
'Delivery delay' => 'Délai de livraison',
'Delivery ending time' => 'Fin de la tournée',
'Delivery price' => 'Frais de livraison',
'Do you really want to remove this area ?' => 'Voulez-vous réellement supprimer ce secteur ?',
'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',

View File

@@ -71,6 +71,11 @@
$("#active").val(data['value'] ? 1 : 0);
});
$('a.cities-remove').click(function (ev) {
$('#attr-cities-id-remove').val($(this).data('id'));
});
var hash = location.hash.slice(1);
if (!hash) hash = "general";
$('#tabbed-menu a[href="#' + hash + '"]').tab('show');

View File

@@ -38,6 +38,18 @@ mais{extends file="admin-layout.tpl"}
</tr>
</thead>
<caption class="clearfix">
{loop name="auth-create" type="auth" role="ADMIN" resource="admin.lps.general" access="CREATE" module="LivraisonParSecteurs"}
<div class="pull-right">
<a class="btn btn-default btn-primary"
title="{intl l='Add a new area' d='livraisonparsecteurs'}"
data-target="#area-create-modal" data-toggle="modal">
<i class="glyphicon glyphicon-plus-sign"></i>
</a>
</div>
{/loop}
</caption>
<tbody>
{loop name="areas" type="lps_area"}
<tr>
@@ -71,6 +83,44 @@ mais{extends file="admin-layout.tpl"}
</div>
</div>
</div>
{* CREATE Modal *}
{form name="lps-area-create"}
{capture "area_create"}
{include file="form/area-create.html" form_name="lps-area-create"}
{/capture}
{include file="includes/generic-create-dialog.html"
dialog_id = "area-create-modal"
dialog_title = {intl l="Create a new area" d="livraisonparsecteurs"}
dialog_body = {$smarty.capture.area_create nofilter}
dialog_ok_label = {intl l="Create"}
dialog_cancel_label = {intl l="Cancel"}
form_action = {$current_url}
form_enctype = {form_enctype form=$form}
}
{/form}
{* DELETE modal *}
{capture "area_delete"}
{intl l="Do you really want to remove this area ?" d="livraisonparsecteurs"}
<input type="hidden" name="attr-area-id" id="attr-area-id" value="999"/>
<input type="hidden" name="success_url" value="{url path='/admin/module/LivraisonParSecteurs'}"/>
{/capture}
{include file="includes/generic-confirm-dialog.html"
dialog_id = "area-delete"
dialog_title = {intl l="Delete an area" d="livraisonparsecteurs"}
dialog_message = {$smarty.capture.area_delete nofilter}
dialog_ok_label = {intl l="Delete"}
dialog_cancel_label = {intl l="Cancel"}
form_action = {token_url path='/admin/module/LivraisonParSecteurs/delete'}
}
{/block}
{block name="javascript-initialization"}
@@ -78,10 +128,12 @@ mais{extends file="admin-layout.tpl"}
<script src="{$asset_url}"></script>
<script>
$(function() {
$('a.area-delete').click(function(ev) {
$('#area_delete_id').val($(this).data('id'));
$('#attr-area-id').val($(this).data('id'));
});
$(".toggle-visible").on('switch-change', function (event, data) {
$.ajax({
method: "POST",

View File

@@ -0,0 +1,46 @@
{form name=$form_name}
{form_hidden_fields form=$form}
{render_form_field form=$form field="success_url" value={$success_url|default:{url path='/admin/module/LivraisonParSecteurs'}}}
{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>
{form_error form=$form field="title"}{$message}{/form_error}
<input type="text" class="form-control" name="{$name}" id="{$label_attr.for}" value="{$TITLE}" {if $required}required{/if} />
</div>
{/form_field}
{form_field form=$form field="price"}
<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 etroit" name="{$name}" value="{$PRICE}" {if $required}required{/if} />&nbsp;
</div>
{form_error form=$form field="price"}{$message}{/form_error}
{/form_field}
{form_field form=$form field="minimum_amount"}
<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 etroit" name="{$name}" value="{$MINIMUM_AMOUNT}" {if $required}required{/if} />&nbsp;
</div>
{form_error form=$form field="minimum_amount"}{$message}{/form_error}
{/form_field}
{form_field form=$form field="active"}
<input type="hidden" id="{$label_attr.for}" name="{$name}" value="1"/>
{/form_field}
{/form}