[11/05/2025] On remplace les modules Colissimo par le combo ColissimoHomeDelivery + ColissimoPickupPoint + ColissimoLabel

This commit is contained in:
2025-05-11 23:38:10 +02:00
parent a09aa11f16
commit 49b1a63ecc
1528 changed files with 18449 additions and 62 deletions

View File

@@ -0,0 +1,166 @@
{javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'}
<script src='{$asset_url}'></script>
{/javascripts}
{javascripts file='assets/js/libs/underscore-min.js'}
<script src="{$asset_url}"></script>
{/javascripts}
<script>
var config = {
'urlAdd': '{url path="/admin/module/ColissimoHomeDelivery/price-slice/save"}',
'urlDelete': '{url path="/admin/module/ColissimoHomeDelivery/price-slice/delete"}',
'urlSave': '{url path="/admin/module/ColissimoHomeDelivery/price-slice/save"}'
};
$(document).ready(function() {
var checkboxes = [];
// Price slice
var tpl = _.template($("#tpl-slice").html());
var showMessage = function showMessage(message) {
$('#colissimo_home_delivery_dialog')
.find('.modal-body')
.html(message)
.end()
.modal("show");
};
var getSliceData = function getSliceData($slice) {
var data = {
id: $slice.data("id"),
area: $slice.data("area"),
shipping: $slice.find(".js-slice-shipping").first().val(),
maxPrice: $slice.find(".js-slice-max-price").first().val(),
maxWeight: $slice.find(".js-slice-max-weight").first().val()
};
return data;
};
// add new slice
$('.js-slice-add').on('click', function(){
var $slice = $(this).parents('tr').first();
var data = getSliceData($slice);
$.ajax({
type: "POST",
dataType: 'json',
data: data,
url: config.urlAdd
}).done(function(data, textStatus, jqXHR){
var sliceHtml = '';
if (data.success) {
// reset form
$slice.find('input').val('');
// add slice
sliceHtml = tpl(data.slice);
$(sliceHtml).insertBefore($slice);
} else {
showMessage(data.message.join('<br>'));
}
}).fail(function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
showMessage(jqXHR.responseText);
});
});
// save new slice
$('.slices').on('click', '.js-slice-save', function(){
var $slice = $(this).parents('tr').first();
var data = getSliceData($slice);
$.ajax({
type: "POST",
dataType: 'json',
data: data,
url: config.urlAdd
}).done(function(data, textStatus, jqXHR){
if (!data.success) {
showMessage(data.message.join('<br>'));
} else {
var sliceHtml = tpl(data.slice);
$(sliceHtml).insertBefore($slice);
$slice.remove();
// $slice.find('.js-slice-save').removeClass('btn-success');
}
}).fail(function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
showMessage(jqXHR.responseText);
});
});
$('.slices').on('change', '.js-slice input', function() {
$(this).parents('tr').first().find('.js-slice-save').addClass('btn-success');
});
// delete new slice
$('.slices').on('click', '.js-slice-delete', function(){
var $slice = $(this).parents('tr').first();
var data = getSliceData($slice);
$.ajax({
type: "POST",
dataType: 'json',
data: data,
url: config.urlDelete
}).done(function(data, textStatus, jqXHR){
var sliceHtml = '';
if (data.success) {
$slice.remove();
} else {
showMessage(data.message);
}
}).fail(function(jqXHR, textStatus, errorThrown){
console.log(jqXHR);
showMessage(jqXHR.responseText);
});
});
// add new slice
$('.js-slice input').on('change', function(){
});
$(".freeshipping-activation-ColissimoHomeDelivery").bootstrapSwitch();
$(".freeshipping-activation-ColissimoHomeDelivery").on("switch-change", function(e, data){
var is_checked = data.value;
var form = $("#freeshippingform");
$('body').append('<div class="modal-backdrop fade in" id="loading-event"><div class="loading"></div></div>');
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: form.serialize(),
}).done(function(){
$("#loading-event").remove();
}).fail(function(jqXHR, textStatus, errorThrown){
$('#freeshipping-failed-body').html(jqXHR.responseJSON.error);
$("#freeshipping-failed").modal("show");
});
});
$("#freeshippingform").submit(function(e, data){
var form = $("#freeshippingform");
$('body').append('<div class="modal-backdrop fade in" id="loading-event"><div class="loading"></div></div>');
$.ajax({
url: form.attr('action'),
type: form.attr('method'),
data: form.serialize(),
}).done(function(){
$("#loading-event").remove();
}).fail(function(jqXHR, textStatus, errorThrown){
$('#freeshipping-failed-body').html(jqXHR.responseJSON.error);
$("#freeshipping-failed").modal("show");
});
});
});
</script>

View File

@@ -0,0 +1,286 @@
{if isset($smarty.get.tab)}
{$tab=$smarty.get.tab}
{else}
{$tab='prices-dom'}
{/if}
<style>
input[type=number]
{
min-width:100px;
}
</style>
<div class="row">
<div class="col-md-12">
<div class="general-block-decorator">
<div class="row">
<div class="col-md-12">
<ul id="tabbed-menu" class="nav nav-tabs">
<li class="{if $tab eq "prices-dom"}active{/if}"><a data-toggle="tab" href="#prices-dom">{intl l="Price slices (Dom)" d='colissimo.home.delivery.bo.default'}</a> </li>
<li class="{if $tab eq "config"}active{/if}"><a data-toggle="tab" href="#config">{intl l="Configuration" d='colissimo.home.delivery.bo.default'}</a> </li>
</ul>
<div class="tab-content">
<!-- I have no idea why but I can't delete this without breaking the page -->
<div id="labels" class="tab-pane {if $tab eq "labels"}active{/if} form-container">
</div>
<div id="config" class="tab-pane {if $tab eq "config"}active{/if} form-container">
<br>
<div class="title">
{intl l="Colissimo Web service configuration" d='colissimo.home.delivery.bo.default'}
</div>
{form name="colissimo.homedelivery.configuration.form"}
{if $form_error}<div class="alert alert-danger">{$form_error_message}</div>{/if}
<form action="{url path="/admin/module/ColissimoHomeDelivery/configure"}" method="post">
{form_hidden_fields form=$form}
{include file = "includes/inner-form-toolbar.html"
hide_flags = true
page_url = "{url path='/admin/module/ColissimoHomeDelivery'}"
close_url = "{url path='/admin/modules'}"
}
{if $form_error}
<div class="alert alert-danger">{$form_error_message}</div>
{/if}
{if $smarty.get.success}
<div class="alert alert-success">Les données de configuration ont été mises à jour.</div>
{/if}
<div class="panel panel-default">
<div class="panel-heading">
<div class="panel-title">{intl d='colissimo.home.delivery.bo.default' l="Configuration du service"}</div>
</div>
<div class="panel-body">
<div class="row" style="margin-top: 20px;">
<div class="col-md-6">
{render_form_field field="colissimo_home_delivery_username" value=$colissimo_home_delivery_username}
{render_form_field field="colissimo_home_delivery_password" value=$colissimo_home_delivery_password}
</div>
<div class="col-md-6">
{render_form_field field="affranchissement_endpoint_url" value=$affranchissement_endpoint_url}
{render_form_field field="activate_detailed_debug" value=$activate_detailed_debug}
</div>
</div>
</div>
</div>
</form>
{/form}
</div>
<div id="prices-dom" class="tab-pane {if $tab eq "prices-dom"}active{/if} form-container">
<br>
<div class="title">
{intl l="Price slices for domicile delivery" d='colissimo.home.delivery.bo.default'}
</div>
<!-- ********* FREE SHIPPING BUTTON ********* -->
<div class="row">
<!-- checkbox free shipping -->
{assign var="isColissimoHomeDeliveryFreeshipping" value=0}
{form name="colissimo.homedelivery.freeshipping.form"}
<form action='{url path="/admin/module/ColissimoHomeDelivery/freeshipping"}' method="post" id="freeshippingform">
<div class="col-md-4">
{form_hidden_fields form=$form}
{form_field form=$form field="freeshipping"}
<label>
{intl l="Activate total free shipping " d="colissimo.home.delivery.bo.default"}
</label>
<div class="switch-small freeshipping-activation-ColissimoHomeDelivery" data-on="success" data-off="danger" data-on-label="<i class='glyphicon glyphicon-ok-circle'></i>" data-off-label="<i class='glyphicon glyphicon-remove-circle'></i>">
{loop type="colissimo.homedelivery.freeshipping" name="freeshipping_colissimo_home_delivery"}
<input type="checkbox" name="{$name}" value="true" {if $FREESHIPPING_ACTIVE}checked{assign var="isColissimoHomeDeliveryFreeshipping" value=1}{/if} />
{/loop}
</div>
{/form_field}
</div>
<div class="col-md-6" id="freeshipping-from">
<div class="input-group">
{form_field form=$form field="freeshipping_from"}
{loop type="colissimo.homedelivery.freeshipping" name="freeshipping_colissimo_home_delivery"}
<span class="input-group-addon {if $FREESHIPPING_FROM}alert-success{/if}">{intl l="Or activate free shipping from (€) :" d="colissimo.home.delivery.bo.default"}</span>
<input type="number" name="{$name}" class="form-control" value="{$value}" step="0.01">
{/loop}
{/form_field}
<span class="input-group-btn">
<button class="btn btn-default" type="submit">{intl l="Save"}</button>
</span>
</div>
</div>
</form>
{/form}
</div>
<br>
<!-- **************************************** -->
<div class="alert alert-info">
{intl l="You can create price slices by specifying a maximum cart weight and/or a maximum cart price." d='colissimo.home.delivery.bo.default'}
{intl l="The slices are ordered by maximum cart weight then by maximum cart price." d='colissimo.home.delivery.bo.default'}
{intl l="If a cart matches multiple slices, it will take the last slice following that order." d='colissimo.home.delivery.bo.default'}
{intl l="If you don't specify a cart weight in a slice, it will have priority over the slices with weight." d='colissimo.home.delivery.bo.default'}
{intl l="If you don't specify a cart price in a slice, it will have priority over the other slices with the same weight." d='colissimo.home.delivery.bo.default'}
{intl l="If you specify both, the cart will require to have a lower weight AND a lower price in order to match the slice." d='colissimo.home.delivery.bo.default'}
</div>
<div class="slices form-container">
{loop type="module" name="colissimo_home_delivery_id" code="ColissimoHomeDelivery"}
{loop type="area" name="area_loop" module_id=$ID backend_context=true}
{$area_id=$ID}
<div class="col-md-12">
<div class="table-responsive">
<table class="table table-striped table-condensed table-left-aligned">
<thead>
<tr>
<th>
<label class="clearfix">
<small>{intl d='colissimo.home.delivery.bo.default' l="Area : "}</small> {$NAME}
</label>
</th>
<th width="40%">
<div id="area-freeshipping-{$area_id}" {if $isColissimoHomeDeliveryFreeshipping eq 1} style="display:none;" {/if}>
<form action="{url path="/admin/module/ColissimoHomeDelivery/area_freeshipping"}" method="post">
<div class="input-group">
<span class="input-group-addon {if $area_id }alert-success{/if}">{intl l="Activate free shipping from (€) :" d="colissimo.home.delivery.bo.default"}</span>
<input type="hidden" name="area-id" value="{$area_id}">
<input type="hidden" name="delivery-mode" value="{$deliveryModeId}">
{ifloop rel="area_freeshipping"}
{loop type="colissimo.homedelivery.area.freeshipping" name="area_freeshipping" area_id=$area_id}
<input type="number" step="0.01" name="cart-amount" class="form-control" value="{$CART_AMOUNT}">
{/loop}
{/ifloop}
{elseloop rel="area_freeshipping"}
<input type="number" step="0.01" name="cart-amount" class="form-control" value="">
{/elseloop}
<span class="input-group-btn">
<button class="btn btn-default" type="submit">{intl l="Save"}</button>
</span>
</div>
</form>
</div>
</th>
</tr>
</thead>
<thead>
<tr>
<th class="col-md-3">{intl l="Weight up to ... kg" d='colissimo.home.delivery.bo.default'}</th>
<th class="col-md-3">{intl l="Untaxed Price up to ... ($)" d='colissimo.home.delivery.bo.default'}</th>
<th class="col-md-5">{intl l="Shipping Price ($)" d='colissimo.home.delivery.bo.default'}</th>
<th class="col-md-1">{intl l="Actions" d='colissimo.home.delivery.bo.default'}</th>
</tr>
</thead>
<tbody>
{loop type="colissimo.homedelivery.price-slices" name="colissimo_home_delivery_area_$ID" area_id={$area_id} }
<tr class="js-slice" data-area="{$area_id}" data-id="{$SLICE_ID}" >
<th class="col-md-3">
<input type="text" data-field="max-weight" class="form-control js-slice-max-weight" value="{$MAX_WEIGHT}" data-old="{$MAX_WEIGHT}" />
</th>
<th class="col-md-3">
<input type="text" data-field="max-price" class="form-control js-slice-max-price" value="{$MAX_PRICE}" data-old="{$MAX_PRICE}" />
</th>
<th class="col-md-5">
<input type="text" data-field="shipping" class="form-control js-slice-shipping" value="{$SHIPPING}" data-old="{$SHIPPING}" />
</th>
<th class="col-md-1">
<div class="btn-group">
{loop type="auth" name="can_change" role="ADMIN" module="customdelivery" access="UPDATE"}
<a class="btn btn-default btn-xs js-slice-save" title="{intl d='colissimo.home.delivery.bo.default' l='Save this price slice'}">
<span class="glyphicon glyphicon-floppy-disk"></span>
</a>
{/loop}
{loop type="auth" name="can_change" role="ADMIN" module="customdelivery" access="DELETE"}
<a class="btn btn-default btn-xs js-slice-delete" title="{intl d='colissimo.home.delivery.bo.default' l='Delete this price slice'}" data-id="{$ID}">
<span class="glyphicon glyphicon-trash"></span>
</a>
{/loop}
</div>
</th>
</tr>
{/loop}
{* New slice *}
{loop type="auth" name="can_change" role="ADMIN" module="colissimohomedelivery" access="CREATE"}
<tr class="js-slice-new" data-area="{$area_id}" data-id="0">
<th class="col-md-3">
<input type="text" data-field="max-weight" class="form-control js-slice-max-weight" value="" />
</th>
<th class="col-md-3">
<input type="text" data-field="max-price" class="form-control js-slice-max-price" value="" />
</th>
<th class="col-md-5">
<input type="text" data-field="shipping" class="form-control js-slice-shipping" value="" />
</th>
<th class="col-md-1">
<a class="btn btn-default btn-xs js-slice-add" title="{intl d='colissimo.home.delivery.bo.default' l='Add this price slice'}" >
<span class="glyphicon glyphicon-plus"></span>
</a>
</th>
</tr>
{/loop}
</tbody>
</table>
</div>
</div>
{/loop}
{elseloop rel="area_loop"}
<div class="col-md-12">
<div class="alert alert-warning">
{intl d='colissimo.home.delivery.bo.default' l="You should first attribute shipping zones to the modules: "}
<a href="{url path="/admin/configuration/shipping_zones/update/$module_id"}">
{intl d='colissimo.home.delivery.bo.default' l="manage shipping zones"}
</a>
</div>
</div>
{/elseloop}
{/loop}
</div>
</div>
{include
file = "includes/generic-warning-dialog.html"
dialog_id = "colissimo_home_delivery_dialog"
dialog_title = {intl d='colissimo.home.delivery.bo.default' l="Message"}
dialog_body = ""
}
{* JS Templates *}
<script id="tpl-slice" type="text/html">
<tr class="js-slice" data-area="<%=areaId %>" data-id="<%=id %>">
<th class="col-md-3">
<input type="text" data-field="max-weight" class="form-control js-slice-max-weight" value="<%=maxWeight %>" data-old="<%=maxWeight %>" />
</th>
<th class="col-md-3">
<input type="text" data-field="max-price" class="form-control js-slice-max-price" value="<%=maxPrice %>" data-old="<%=maxPrice %>" />
</th>
<th class="col-md-5">
<input type="text" data-field="shipping" class="form-control js-slice-shipping" value="<%=shipping %>" data-old="<%=shipping %>" />
</th>
<th class="col-md-1">
<div class="btn-group">
{loop type="auth" name="can_change" role="ADMIN" module="colissimohomedelivery" access="UPDATE"}
<a class="btn btn-default btn-xs js-slice-save" title="{intl d='colissimo.home.delivery.bo.default' l='Save this price slice'}">
<span class="glyphicon glyphicon-floppy-disk"></span>
</a>
{/loop}
{loop type="auth" name="can_change" role="ADMIN" module="colissimohomedelivery" access="DELETE"}
<a class="btn btn-default btn-xs js-slice-delete" title="{intl d='colissimo.home.delivery.bo.default' l='Delete this price slice'}" data-id="<%=id %>">
<span class="glyphicon glyphicon-trash"></span>
</a>
{/loop}
</div>
</th>
</tr>
</script>
</div>
</div>
</div>