LivraisonParSecteurs : On avance sur la partie front...
This commit is contained in:
@@ -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>
|
||||
|
||||
46
local/modules/LivraisonParSecteurs/Hook/FrontHook.php
Normal file
46
local/modules/LivraisonParSecteurs/Hook/FrontHook.php
Normal 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
|
||||
]
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user