Working : coupon creation : add default rule (thelia.constraint.rule.available_for_everyone)

This commit is contained in:
gmorel
2013-09-23 23:04:00 +02:00
parent e4658d2fa2
commit d0f20cca1d
12 changed files with 154 additions and 156 deletions

View File

@@ -147,7 +147,7 @@
{loop name="menu-auth-coupon" type="auth" roles="ADMIN" permissions="admin.coupon.view"}
<li class="{if $admin_current_location == 'coupon'}active{/if}" id="coupon_menu">
<a href="{url path='/admin/coupon/'}">{intl l="Coupons"}</a>
<a href="{url path='/admin/coupon'}">{intl l="Coupons"}</a>
</li>
{/loop}

View File

@@ -1,5 +1,17 @@
$(function($){
// Manage how coupon and rules are saved
$.couponManager = {};
// Rule to be saved
$.couponManager.ruleToSave = {};
$.couponManager.ruleToSave.serviceId = false;
$.couponManager.ruleToSave.operators = {};
$.couponManager.ruleToSave.values = {};
// Rules payload to save
$.couponManager.rulesToSave = [];
// Rule being updated id
$.couponManager.ruleToUpdateId = false;
// Clean array from deleteValue (undefined) keys
Array.prototype.clean = function(deleteValue) {
for (var i = 0; i < this.length; i++) {
@@ -12,109 +24,109 @@ $(function($){
};
// Remove 1 Rule then Save Rules AJAX
couponManager.removeRuleAjax = function(id) {
$.couponManager.removeRuleAjax = function(id) {
// Delete rule in temporary array
delete couponManager.rulesToSave[id];
couponManager.rulesToSave.clean(undefined);
delete $.couponManager.rulesToSave[id];
$.couponManager.rulesToSave.clean(undefined);
// Save
couponManager.saveRuleAjax();
$.couponManager.saveRuleAjax();
};
// Add 1 Rule / or update the temporary Rules array then Save Rules via AJAX
couponManager.createOrUpdateRuleAjax = function() {
var id = couponManager.ruleToUpdateId;
$.couponManager.createOrUpdateRuleAjax = function() {
var id = $.couponManager.ruleToUpdateId;
// If create
if(!id) {
couponManager.rulesToSave.push(couponManager.ruleToSave);
$.couponManager.rulesToSave.push($.couponManager.ruleToSave);
} else { // else update
couponManager.rulesToSave[id] = couponManager.ruleToSave;
$.couponManager.rulesToSave[id] = $.couponManager.ruleToSave;
// reset edit mode to off
couponManager.ruleToUpdateId = false;
$.couponManager.ruleToUpdateId = false;
}
// Save
couponManager.saveRuleAjax();
$.couponManager.saveRuleAjax();
};
// Set rule inputs to allow editing
couponManager.updateRuleSelectAjax = function(id) {
couponManager.ruleToUpdateId = id;
couponManager.ruleToSave = couponManager.rulesToSave[id];
$.couponManager.updateRuleSelectAjax = function(id) {
$.couponManager.ruleToUpdateId = id;
$.couponManager.ruleToSave = $.couponManager.rulesToSave[id];
// Set the rule selector
$("#category-rule option").filter(function() {
return $(this).val() == couponManager.ruleToSave.serviceId;
return $(this).val() == $.couponManager.ruleToSave.serviceId;
}).prop('selected', true);
// Force rule input refresh
couponManager.loadRuleInputs(couponManager.ruleToSave.serviceId, function() {
couponManager.fillInRuleInputs();
$.couponManager.loadRuleInputs($.couponManager.ruleToSave.serviceId, function() {
$.couponManager.fillInRuleInputs();
});
};
// Fill in rule inputs
couponManager.fillInRuleInputs = function() {
$.couponManager.fillInRuleInputs = function() {
var operatorId = null;
var valueId = null;
var idName = null;
var id = couponManager.ruleToUpdateId;
var id = $.couponManager.ruleToUpdateId;
if(id) {
couponManager.ruleToSave = couponManager.rulesToSave[id];
$.couponManager.ruleToSave = $.couponManager.rulesToSave[id];
}
for (idName in couponManager.ruleToSave.operators) {
for (idName in $.couponManager.ruleToSave.operators) {
// Setting idName operator select
operatorId = idName + '-operator';
$('#' + operatorId).val(couponManager.ruleToSave.operators[idName]);
$('#' + operatorId).val($.couponManager.ruleToSave.operators[idName]);
// Setting idName value input
valueId = idName + '-value';
$('#' + valueId).val(couponManager.ruleToSave.values[idName]);
$('#' + valueId).val($.couponManager.ruleToSave.values[idName]);
}
};
// Save rules on click
couponManager.onClickSaveRule = function() {
$.couponManager.onClickSaveRule = function() {
$('#constraint-save-btn').on('click', function () {
if($('#category-rule').val() == 'thelia.constraint.rule.available_for_everyone') {
// @todo translate + modal
var r= confirm("Do you really want to set this coupon available to everyone ?");
if (r == true) {
couponManager.createOrUpdateRuleAjax();
$.couponManager.createOrUpdateRuleAjax();
}
}
});
};
couponManager.onClickSaveRule();
$.couponManager.onClickSaveRule();
// Remove rule on click
couponManager.onClickDeleteRule = function() {
$.couponManager.onClickDeleteRule = function() {
$('.constraint-delete-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
couponManager.removeRuleAjax($this.attr('data-int'));
$.couponManager.removeRuleAjax($this.attr('data-int'));
});
};
couponManager.onClickDeleteRule();
$.couponManager.onClickDeleteRule();
// Update rule on click
couponManager.onClickUpdateRule = function() {
$.couponManager.onClickUpdateRule = function() {
$('.constraint-update-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
couponManager.updateRuleSelectAjax($this.attr('data-int'));
$.couponManager.updateRuleSelectAjax($this.attr('data-int'));
// Hide row being updated
$this.parent().parent().remove();
});
};
couponManager.onClickUpdateRule();
$.couponManager.onClickUpdateRule();
// Reload effect inputs when changing effect
couponManager.onEffectChange = function() {
$.couponManager.onEffectChange = function() {
var optionSelected = $("option:selected", this);
$('#effectToolTip').html(optionSelected.attr("data-description"));
$('#effect').on('change', function () {
@@ -122,22 +134,22 @@ $(function($){
$('#effectToolTip').html(optionSelected.attr("data-description"));
});
};
couponManager.onEffectChange();
$.couponManager.onEffectChange();
// Reload rule inputs when changing effect
couponManager.onRuleChange = function() {
$.couponManager.onRuleChange = function() {
$('#category-rule').on('change', function () {
couponManager.loadRuleInputs($(this).val(), function() {});
$.couponManager.loadRuleInputs($(this).val(), function() {});
});
};
couponManager.onRuleChange();
$.couponManager.onRuleChange();
// Fill in ready to be saved rule array
// var onInputsChange = function()
// In AJAX response
// Set max usage to unlimited or not
couponManager.onUsageUnlimitedChange = function() {
$.couponManager.onUsageUnlimitedChange = function() {
var isUnlimited = $('#is-unlimited');
if ($('#max-usage').val() == -1) {
isUnlimited.prop('checked', true);
@@ -160,20 +172,9 @@ $(function($){
}
});
};
couponManager.onUsageUnlimitedChange();
$.couponManager.onUsageUnlimitedChange();
});
// Rule to save
var couponManager = {};
// Rule to be saved
couponManager.ruleToSave = {};
couponManager.ruleToSave.serviceId = false;
couponManager.ruleToSave.operators = {};
couponManager.ruleToSave.values = {};
// Rules payload to save
couponManager.rulesToSave = [];
// Rule being updated id
couponManager.ruleToUpdateId = false;

View File

@@ -8,7 +8,7 @@
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/coupon/'}">{intl l='Coupon'}</a></li>
<li><a href="{url path='admin/coupon'}">{intl l='Coupon'}</a></li>
<li>{intl l='Create'}</li>
</ul>
</nav>

View File

@@ -8,7 +8,7 @@
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/coupon/'}">{intl l='Coupon'}</a></li>
<li><a href="{url path='admin/coupon'}">{intl l='Coupon'}</a></li>
<li>{intl l='Browse'}</li>
</ul>
</nav>
@@ -39,13 +39,29 @@
<tbody>
{loop type="coupon" name="list_coupon" is_enabled="1" backend_context="true"}
<tr>
<td>{block name="coupon-code"}<a href="{$urlReadCoupon|replace:'couponId':$ID}">{$CODE}</a>{/block}</td>
<td>{block name="coupon-code"}<a href="{$urlReadCoupon|replace:'0':$ID}">{$CODE}</a>{/block}</td>
<td>{block name="coupon-title"}{$TITLE}{/block}</td>
<td>{block name="coupon-expiration-date"}{$EXPIRATION_DATE}{/block}</td>
<td>{block name="coupon-usage-left"}{$USAGE_LEFT}{/block}</td>
<td>
{block name="coupon-usage-left"}
{if $USAGE_LEFT == -1}
<span class="label label-success">
{intl l="Unlimited"}
</span>
{elseif $USAGE_LEFT}
<span class="label label-success">
{$USAGE_LEFT}
</span>
{else}
<span class="label label-warning">
0
</span>
{/if}
{/block}
</td>
<td>
{block name="coupon-action"}
<a href="{$urlEditCoupon|replace:'couponId':$ID}" class="btn btn-default btn-primary btn-medium">
<a href="{$urlEditCoupon|replace:'0':$ID}" class="btn btn-default btn-primary btn-medium">
<span class="glyphicon glyphicon-edit"></span> {intl l='Edit'}
</a>
{/block}
@@ -80,7 +96,23 @@
<td>{block name="coupon-code"}<a href="{$urlReadCoupon|replace:'couponId':$ID}">{$CODE}</a>{/block}</td>
<td>{block name="coupon-title"}{$TITLE}{/block}</td>
<td>{block name="coupon-expiration-date"}{$EXPIRATION_DATE}{/block}</td>
<td>{block name="coupon-usage-left"}{$USAGE_LEFT}{/block}</td>
<td>
{block name="coupon-usage-left"}
{if $USAGE_LEFT == -1}
<span class="label label-success">
{intl l="Unlimited"}
</span>
{elseif $USAGE_LEFT}
<span class="label label-success">
{$USAGE_LEFT}
</span>
{else}
<span class="label label-warning">
0
</span>
{/if}
{/block}
</td>
<td>
{block name="coupon-action"}
<a href="{$urlEditCoupon|replace:'couponId':$ID}" class="btn btn-default btn-primary btn-medium">

View File

@@ -8,7 +8,7 @@
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/coupon/'}">{intl l='Coupon'}</a></li>
<li><a href="{url path='admin/coupon'}">{intl l='Coupon'}</a></li>
<li>{$CODE}</li>
</ul>
</nav>
@@ -64,7 +64,11 @@
<tr>
<td>{intl l='Usage left'}</td>
<td>
{if $USAGE_LEFT}
{if $USAGE_LEFT == -1}
<span class="label label-success">
{intl l="Unlimited"}
</span>
{elseif $USAGE_LEFT}
<span class="label label-success">
{$USAGE_LEFT}
</span>

View File

@@ -8,7 +8,7 @@
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/coupon/'}">{intl l='Coupon'}</a></li>
<li><a href="{url path='admin/coupon'}">{intl l='Coupon'}</a></li>
<li>{intl l='Update'} {$couponCode}</li>
</ul>
</nav>
@@ -48,7 +48,7 @@
miniBrowser(0, '/test_to_remove/datas_coupon_edit.json');
// Init Rules
couponManager.initRules = function() {
$.couponManager.initRules = function() {
var rules = [];
{foreach from=$rulesObject key=k item=rule}
// Init rule
@@ -70,13 +70,13 @@
};
// Save Rules AJAX
couponManager.saveRuleAjax = function() {
$.couponManager.saveRuleAjax = function() {
$('#constraint-add-operators-values').html('<div class="loading" ></div>');
var $url = '{$urlAjaxUpdateRules}';
$.ajax({
type: "POST",
url: $url,
data: {literal}{{/literal}rules:JSON.stringify(couponManager.rulesToSave){literal}}{/literal},
data: {literal}{{/literal}rules:JSON.stringify($.couponManager.rulesToSave){literal}}{/literal},
statusCode: {
404: function() {
$('#constraint-add-operators-values').html(
@@ -92,13 +92,13 @@
return $(this).val() == 'thelia.constraint.rule.available_for_everyone';
}).prop('selected', true);
couponManager.onClickUpdateRule();
couponManager.onClickDeleteRule();
$.couponManager.onClickUpdateRule();
$.couponManager.onClickDeleteRule();
});
};
// Reload rule inputs
couponManager.loadRuleInputs = function(ruleId, callBack) {
$.couponManager.loadRuleInputs = function(ruleId, callBack) {
$('#constraint-add-operators-values').html('<div class="loading" ></div>');
var url = "{$urlAjaxGetRuleInput}";
url = url.replace('ruleId', ruleId)
@@ -113,7 +113,7 @@
}
}).done(function(data) {
$('#constraint-add-operators-values').html(data);
couponManager.ruleToSave.serviceId = ruleId;
$.couponManager.ruleToSave.serviceId = ruleId;
if (ruleId == -1) {
// Placeholder can't be saved
$('#constraint-save-btn').hide();
@@ -125,7 +125,7 @@
};
// Rules which will be saved
couponManager.rulesToSave = couponManager.initRules();
$.couponManager.rulesToSave = $.couponManager.initRules();
$('#constraint-save-btn').hide();

View File

@@ -11,7 +11,7 @@
{/form_field}
{form_field form=$form field='success_url'}
<input type="hidden" name="{$name}" value="{url path='/admin/coupon/update/{id}/'}" />
<input type="hidden" name="{$name}" value="{url path='/admin/coupon/update/{id}'}" />
{/form_field}
<div class="span4">
@@ -104,10 +104,10 @@
{form_field form=$form field='type'}
<div class="form-group {if $error}has-error{/if}">
<label for="type" class="control-label">{intl l='Type :'}</label>
<select name="{$name}" value="{$value}" id="type" class="col-md-12 form-control">
<option value="-1" data-description="">{intl l='Please select an type'}</option>
<select name="{$name}" id="type" class="col-md-12 form-control">
<option value="-1" data-description="">{intl l='Please select a coupon type'}</option>
{foreach from=$availableCoupons item=availableCoupon}
<option value="{$availableCoupon.serviceId}" data-description="{$availableCoupon.toolTip}" {if $value == $availableCoupon.serviceId}selected="selected"{/if}>
<option value="{$availableCoupon.serviceId}" data-description="{$availableCoupon.toolTip}" {if $value == $availableCoupon.serviceId}selected{/if}>
{$availableCoupon.name}
</option>
{/foreach}
@@ -285,4 +285,3 @@
</section>
{/if}
</form>