LivraisonParSecteurs : On avance sur la partie front...

This commit is contained in:
2021-02-17 20:31:11 +01:00
parent c3af0a66ba
commit 37220bfef9
41 changed files with 2522 additions and 25 deletions

View File

@@ -23,6 +23,9 @@
<tag name="hook.event_listener" event="module.configuration" type="back" method="onModuleConfig" />
<argument type="service" id="thelia.securityContext"/>
</hook>
<hook id="lps.front.hookmanager" class="LivraisonParSecteurs\Hook\FrontHook">
<tag name="hook.event_listener" event="order-delivery.extra" type="front" method="onOrderDeliveryExtra" />
</hook>
</hooks>
</config>

View File

@@ -0,0 +1,46 @@
<?php
namespace LivraisonParSecteurs\Hook;
use LivraisonParSecteurs\LivraisonParSecteurs;
use LivraisonParSecteurs\Model\Base\LpsAreaCityQuery;
use Propel\Runtime\Exception\PropelException as PropelException;
use Propel\Runtime\Propel;
use Thelia\Core\Event\Hook\HookRenderEvent;
use Thelia\Core\Hook\BaseHook;
use Thelia\Core\Translation\Translator;
use Thelia\Model\AddressQuery;
use Thelia\Module\Exception\DeliveryException;
class FrontHook extends BaseHook
{
public function onOrderDeliveryExtra(HookRenderEvent $event)
{
$con = Propel::getConnection();
$addressId = $this->getRequest()->getSession()->getOrder()->getChoosenDeliveryAddress();
$zipcode = AddressQuery::create()->filterById($addressId)->findOne($con)->getZipcode();
try {
$areaId = LpsAreaCityQuery::create()->findOneByZipcode($zipcode)->getIdArea();
}
catch (PropelException $e) {
throw new DeliveryException(
Translator::getInstance()->trans("This module cannot be used on the current cart."));
}
$event->add(
$this->render(
'order-delivery-extra.html',
[
'module_id' => LivraisonParSecteurs::getModuleId(),
'address_id' => $addressId,
'area_id' => $areaId
]
)
);
}
}

View File

@@ -23,6 +23,7 @@ return array(
'General' => 'Général',
'Home delivery cost' => 'Frais de livraison à domicile',
'Modify a delivery day' => 'Modifier un jour de livraison',
'Module name' => 'Livraison à domicile',
'My areas' => 'Mes secteurs de livraison',
'Remove this city' => 'Retirer cette commune',
'Save' => 'Sauvegarder',

View File

@@ -2,8 +2,10 @@
namespace LivraisonParSecteurs;
use LivraisonParSecteurs\Model\LpsAreaCityQuery;
use LivraisonParSecteurs\Model\LpsAreaQuery;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Propel;
use Thelia\Core\Translation\Translator;
use Thelia\Install\Database;
use Thelia\Model\AddressQuery;
@@ -43,20 +45,18 @@ class LivraisonParSecteurs extends AbstractDeliveryModule
*/
public function isValidDelivery(Country $country)
{
// Get current addressId
$currentAddressId = $this->getRequest()->request->get('address_id');
$isValid = false;
$con = Propel::getConnection();
if (empty($currentAddressId)) {
if (null !== $customer = $this->getRequest()->getSession()->getCustomerUser()) {
$currentAddressId = AddressQuery::create()
->filterByCustomer($customer)
->filterByIsDefault(1)
->select('ID')
->findOne();
} else {
return false;
}
$currentAddressId = $this->getRequest()->getSession()->getOrder()->getChoosenDeliveryAddress();
if (!empty($currentAddressId)) {
$zipcode = AddressQuery::create()->filterById($currentAddressId)->findOne($con)->getZipcode();
if (null !== LpsAreaCityQuery::create()->filterByZipcode($zipcode)->findOne($con))
$isValid = true;
}
return $isValid;
}
@@ -76,7 +76,16 @@ class LivraisonParSecteurs extends AbstractDeliveryModule
);
}
return LpsAreaQuery::create()->findOneByActive(1)->getPrice();
$price = 0;
$con = Propel::getConnection();
$currentAddressId = $this->getRequest()->getSession()->getOrder()->getChoosenDeliveryAddress();
if (!empty($currentAddressId)) {
$zipcode = AddressQuery::create()->filterById($currentAddressId)->findOne($con)->getZipcode();
$areaId = LpsAreaCityQuery::create()->findOneByZipcode($zipcode)->getIdArea();
$price = LpsAreaQuery::create()->findOneById($areaId)->getPrice();
}
return $price;
}
static public function getDayLabel($int)

View File

@@ -62,24 +62,24 @@ class AreaCitiesLoop extends BaseLoop implements PropelSearchLoopInterface
*/
public function buildModelCriteria()
{
$query = LpsAreaCityQuery::create();
$area = LpsAreaCityQuery::create();
if (null != $id = $this->getAreaId()) {
$query->filterByIdArea($id);
$area->filterByIdArea($id);
}
foreach ($this->getOrder() as $order) {
switch ($order) {
case 'title':
$query->orderByTitle();
$area->orderByTitle();
break;
case 'zipcode':
$query->orderByZipcode()->orderByTitle();
$area->orderByZipcode()->orderByTitle();
break;
}
}
return $query;
return $area;
}
}

View File

@@ -72,17 +72,17 @@ class AreaLoop extends BaseLoop implements PropelSearchLoopInterface
*/
public function buildModelCriteria()
{
$query = LpsAreaQuery::create();
$area = LpsAreaQuery::create();
/* Filtrage éventuel */
if (null != $id = $this->getId()) {
$query->filterById($id);
$area->filterById($id);
}
if (null != $active = $this->getActive()) {
$query->filterByActive($active);
$area->filterByActive($active);
}
return $query->orderByTitle();
return $area->orderByTitle();
}
}

View File

@@ -59,11 +59,11 @@ class AreaScheduleLoop extends BaseLoop implements PropelSearchLoopInterface
*/
public function buildModelCriteria()
{
$query = LpsAreaScheduleQuery::create();
$area = LpsAreaScheduleQuery::create();
if (null != $id = $this->getAreaId()) {
$query->filterByIdArea($id);
$area->filterByIdArea($id);
}
return $query->orderByDay()->orderByBeginTime();
return $area->orderByDay()->orderByBeginTime();
}
}

View File

@@ -0,0 +1,73 @@
<script type="text/html" id="lps_ui">
<td colspan="3">
<div class="row">
<div class="col-sm-4">
<label for="livraisonparsecteurs">
{form name="thelia.order.delivery"}
{form_field field='delivery-module'}
<label for="delivery-method_{$module_id}">
<input type="radio" delivery-mode="lps" name="{$name}" id="delivery-method_{$module_id}" value="{$module_id}">
<strong>{intl l="Module name" d="livraisonparsecteurs"}</strong>
<br>
</label>
{/form_field}
{/form}
</label>
</div>
<div class="col-sm-4">
<div class="price text-right">
{loop type="lps_area" name="area-price" id={$area_id}}
{format_money number=$PRICE symbol={currency attr='symbol'}}
{/loop}
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="select-delivery-day">
{form name="thelia.order.delivery"}
<div class="table-responsive">
<table class="table table-striped table-condensed">
<thead>
<th>{intl l='Delivery day' d='livraisonparsecteurs'}</th>
<th>{intl l='Schedule' d='livraisonparsecteurs'}</th>
</thead>
<tbody>
{loop type="lps_area_schedule" name="area-schedule" area_id={$area_id}}
<tr>
<td style="padding:10px;">{$DAY_LABEL}</td>
<td style="padding:10px;">{format_date date=$BEGIN format="H:i"} / {format_date date=$END format="H:i"}</td>
</tr>
{/loop}
</tbody>
</table>
</div>
{/form}
</div>
</div>
</div>
</td>
</script>
<script>
$(document).ready(function(){
$("#delivery-module-38").html($('#lps_ui').html());
$('#select-delivery-day').slideUp('fast');
});
$('input[type=radio]').click(function() {
if ($('[delivery-mode=lps]').is(':checked')) {
$('#select-delivery-day').slideDown('fast');
} else {
$('#select-delivery-day').slideUp('fast');
}
});
</script>