dynamic delivery modules on delivery front template

This commit is contained in:
Etienne Roudeix
2013-12-20 12:14:20 +01:00
parent b3ac365b45
commit 22efc21bfe
4 changed files with 64 additions and 22 deletions

View File

@@ -131,6 +131,10 @@
<default key="_view">order-delivery</default> <default key="_view">order-delivery</default>
</route> </route>
<route id="admin.delivery.ajax-module-list" path="/order/deliveryModuleList">
<default key="_controller">Front\Controller\OrderController::getDeliveryModuleListAjaxAction</default>
</route>
<route id="order.invoice.process" path="/order/invoice" methods="post"> <route id="order.invoice.process" path="/order/invoice" methods="post">
<default key="_controller">Front\Controller\OrderController::invoice</default> <default key="_controller">Front\Controller\OrderController::invoice</default>
<default key="_view">order-invoice</default> <default key="_view">order-invoice</default>

View File

@@ -41,6 +41,7 @@ use Thelia\Model\Base\OrderQuery;
use Thelia\Model\ConfigQuery; use Thelia\Model\ConfigQuery;
use Thelia\Model\ModuleQuery; use Thelia\Model\ModuleQuery;
use Thelia\Model\Order; use Thelia\Model\Order;
use Thelia\TaxEngine\TaxEngine;
use Thelia\Tools\URL; use Thelia\Tools\URL;
/** /**
@@ -260,5 +261,18 @@ class OrderController extends BaseFrontController
return $this->generateOrderPdf($order_id, ConfigQuery::read('pdf_delivery_file', 'delivery')); return $this->generateOrderPdf($order_id, ConfigQuery::read('pdf_delivery_file', 'delivery'));
} }
public function getDeliveryModuleListAjaxAction()
{
$country = $this->getRequest()->get(
'country_id',
TaxEngine::getInstance($this->getRequest()->getSession())->getDeliveryCountry()->getId()
);
$this->checkXmlHttpRequest();
$args = array('country' => $country);
return $this->render('ajax/order-delivery-module-list', $args);
}
} }

View File

@@ -0,0 +1,22 @@
{form name="thelia.order.delivery"}
{loop type="delivery" name="deliveries" force_return="true" country=$country}
{assign var="isDeliveryMethodChecked" value="0"}
<div class="radio">
{form_field form=$form field='delivery-module'}
{if $isPost}
{if $value == $ID}
{assign var="isDeliveryMethodChecked" value="1"}
{/if}
{elseif $LOOP_COUNT == 1}
{assign var="isDeliveryMethodChecked" value="1"}
{/if}
<label for="delivery-method_{$ID}">
<input type="radio" name="{$name}" id="delivery-method_{$ID}"{if $isDeliveryMethodChecked} checked="checked"{/if} value="{$ID}">
<strong>{$TITLE}</strong> / {$POSTAGE} {currency attr="symbol"}
</label>
{/form_field}
</div>
{/loop}
{elseloop rel="deliveries"}<div class="deliveries-warning">{intl l="<strong>Sorry!</strong> We are not able to give you a delivery method for your order."}</div>{/elseloop}
{/form}

View File

@@ -19,6 +19,7 @@
{block name="main-content"} {block name="main-content"}
<div class="main"> <div class="main">
<article id="cart" class="col-main" role="main" aria-labelledby="main-label"> <article id="cart" class="col-main" role="main" aria-labelledby="main-label">
@@ -60,7 +61,7 @@
<th> <th>
<div class="radio"> <div class="radio">
<label for="delivery-address_{$ID}"> <label for="delivery-address_{$ID}">
<input type="radio" name="{$name}" value="{$ID}"{if $isDeliveryAddressChecked} checked="checked"{/if} id="delivery-address_{$ID}"> <input type="radio" class="js-change-delivery-address" data-country="{$COUNTRY}" name="{$name}" value="{$ID}"{if $isDeliveryAddressChecked} checked="checked"{/if} id="delivery-address_{$ID}">
{$LABEL|default:"{intl l='Address %nb' nb={$LOOP_COUNT}}"} {$LABEL|default:"{intl l='Address %nb' nb={$LOOP_COUNT}}"}
</label> </label>
</div> </div>
@@ -120,27 +121,7 @@
<span class="help-block"><span class="icon-remove"></span> {$message}</span> <span class="help-block"><span class="icon-remove"></span> {$message}</span>
{/if} {/if}
</div> </div>
<div class="panel-body"> <div class="panel-body" id="delivery-module-list-block"></div>
{loop type="delivery" name="deliveries" force_return="true"}
{assign var="isDeliveryMethodChecked" value="0"}
<div class="radio">
{form_field form=$form field='delivery-module'}
{if $isPost}
{if $value == $ID}
{assign var="isDeliveryMethodChecked" value="1"}
{/if}
{elseif $LOOP_COUNT == 1}
{assign var="isDeliveryMethodChecked" value="1"}
{/if}
<label for="delivery-method_{$ID}">
<input type="radio" name="{$name}" id="delivery-method_{$ID}"{if $isDeliveryMethodChecked} checked="checked"{/if} value="{$ID}">
<strong>{$TITLE}</strong> / {$POSTAGE} {currency attr="symbol"}
</label>
{/form_field}
</div>
{/loop}
{elseloop rel="deliveries"}<div class="deliveries-warning">{intl l="<strong>Sorry!</strong> We are not able to give you a delivery method for your order."}</div>{/elseloop}
</div>
</div> </div>
{/form_field} {/form_field}
@@ -153,4 +134,25 @@
</article> </article>
</div> </div>
{/block} {/block}
{block name="javascript-initialization"}
<script type="text/javascript">
jQuery(function($) {
$('#delivery-module-list-block').load('{url path="/order/deliveryModuleList"}');
$('.js-change-delivery-address').change(function(e) {
$('#delivery-module-list-block').load(
'{url path="/order/deliveryModuleList"}',
{literal}
{country_id: $(this).data('country')}
{/literal}
);
});
});
</script>
{/block}