- Coupon Add/Edit/Delete rule AJAX
This commit is contained in:
gmorel
2013-09-12 14:10:36 +02:00
parent 936d0dbe37
commit 8668bf93bd
5 changed files with 148 additions and 72 deletions

View File

@@ -22,17 +22,20 @@ $(function($){
};
// Add 1 Rule / or update the temporary Rules array then Save Rules via AJAX
couponManager.addRuleAjax = function(id) {
console.log('addRuleAjax '+ id);
couponManager.createOrUpdateRuleAjax = function() {
var id = couponManager.ruleToUpdateId;
console.log('createOrUpdateRuleAjax '+ id);
// If create
if(!id) {
console.log('pushing');
console.log(couponManager.ruleToSave);
couponManager.rulesToSave.push(couponManager.ruleToSave);
} else { // else update
console.log('editing ' + id);
console.log(couponManager.ruleToSave);
couponManager.rulesToSave[id] = couponManager.ruleToSave;
// reset edit mode to off
couponManager.ruleIdToUpdate = false;
couponManager.ruleToUpdateId = false;
}
// Save
@@ -40,21 +43,21 @@ $(function($){
};
// Set rule inputs to allow editing
couponManager.updateRuleAjax = function(id) {
couponManager.ruleToUpdate = couponManager.rulesToSave[id];
couponManager.updateRuleSelectAjax = function(id) {
couponManager.ruleToUpdateId = id;
couponManager.ruleToSave = couponManager.rulesToSave[id];
console.log('Set id to edit to ' + id);
couponManager.ruleIdToUpdate = id;
// Deleting this rule, we will reset it
delete couponManager.rulesToSave[id];
// // Deleting this rule, we will reset it
// delete couponManager.rulesToSave[id];
// Set the rule selector
$("#category-rule option").filter(function() {
return $(this).val() == couponManager.ruleToUpdate.serviceId;
return $(this).val() == couponManager.ruleToSave.serviceId;
}).prop('selected', true);
// Force rule input refresh
couponManager.loadRuleInputs(couponManager.ruleToUpdate.serviceId, function() {
couponManager.loadRuleInputs(couponManager.ruleToSave.serviceId, function() {
couponManager.fillInRuleInputs();
});
};
@@ -62,39 +65,40 @@ $(function($){
// Fill in rule inputs
couponManager.fillInRuleInputs = function() {
console.log('fillInRuleInputs with');
console.log(couponManager.ruleToUpdate);
console.log(couponManager.ruleToSave);
var operatorId = null;
var valueId = null;
var idName = null;
var id = couponManager.ruleToUpdateId;
if(id) {
couponManager.ruleToUpdate = couponManager.ruleToSave;
couponManager.ruleToSave = couponManager.rulesToSave[id];
}
for (idName in couponManager.ruleToUpdate.operators) {
for (idName in couponManager.ruleToSave.operators) {
// Setting idName operator select
operatorId = idName + '-operator';
$('#' + operatorId).val(couponManager.ruleToUpdate.operators[idName]);
$('#' + operatorId).val(couponManager.ruleToSave.operators[idName]);
valueId = idName + '-value';
// Setting idName value input
$('#' + valueId).val(couponManager.ruleToUpdate.values[idName]);
valueId = idName + '-value';
$('#' + valueId).val(couponManager.ruleToSave.values[idName]);
}
couponManager.ruleToSave = couponManager.ruleToUpdate;
// couponManager.ruleToSave = couponManager.ruleToUpdate;
var id = couponManager.ruleIdToUpdate;
console.log('id to edit = ' + id);
if(id) {
console.log('setint rulesToSave[' + id + ']');
console.log(couponManager.ruleToSave);
couponManager.rulesToSave[id] = couponManager.ruleToSave;
}
// var id = couponManager.ruleToUpdateId;
// console.log('id to edit = ' + id);
// if(id) {
// console.log('setint rulesToSave[' + id + ']');
// console.log(couponManager.ruleToSave);
// couponManager.rulesToSave[id] = couponManager.ruleToSave;
// }
};
// Save rules on click
couponManager.onClickSaveRule = function() {
$('#constraint-save-btn').on('click', function () {
couponManager.addRuleAjax(couponManager.ruleIdToUpdate);
couponManager.createOrUpdateRuleAjax();
});
};
couponManager.onClickSaveRule();
@@ -114,7 +118,7 @@ $(function($){
$('.constraint-update-btn').on('click', function (e) {
e.preventDefault();
var $this = $(this);
couponManager.updateRuleAjax($this.attr('data-int'));
couponManager.updateRuleSelectAjax($this.attr('data-int'));
// Hide row being updated
$this.parent().parent().remove();
@@ -134,7 +138,7 @@ $(function($){
// Reload rule inputs when changing effect
couponManager.onRuleChange = function() {
$('#category-rule').on('change', function () {
couponManager.loadRuleInputs($(this).val(), function(ruleToSave) {});
couponManager.loadRuleInputs($(this).val(), function() {});
});
};
couponManager.onRuleChange();
@@ -148,5 +152,12 @@ $(function($){
// Rule to save
var couponManager = {};
// Rule to be saved
couponManager.ruleToSave = {};
couponManager.ruleIdToUpdate = false;
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

@@ -87,6 +87,11 @@
}).done(function(data) {
$('#constraint-list').html(data);
$('#constraint-add-operators-values').html('');
// Set the rule selector
$("#category-rule option").filter(function() {
return $(this).val() == 'thelia.constraint.rule.available_for_everyone';
}).prop('selected', true);
couponManager.onClickUpdateRule();
couponManager.onClickDeleteRule();
});
@@ -108,6 +113,7 @@
}
}).done(function(data) {
$('#constraint-add-operators-values').html(data);
couponManager.ruleToSave.serviceId = ruleId;
return callBack();
});

View File

@@ -3,7 +3,7 @@
<div class="row">
<div class="col-lg-6">
<select class="form-control" id="{$name}-operator" name="{$name}[operator]">
{foreach from=$input.availableOperators key=k item=availableOperator}
{foreach from=$input.availableOperators key=k item=availableOperator name=availableOperators}
<option value="{$k}">{$availableOperator}</option>
{/foreach}
</select>
@@ -11,7 +11,7 @@
<div class="input-group col-lg-6">
{if $input.type == 'select'}
<select class="{$input.class}" id="{$name}-value" name="{$name}[value]">
{foreach from=$input.availableValues key=code item=availableValue}
{foreach from=$input.availableValues key=code item=availableValue name=availableValues}
<option value="{$code}">{$availableValue}</option>
{/foreach}
</select>
@@ -72,12 +72,20 @@
<script>
// Init Rules to set
couponManager.ruleToSave['serviceId'] = '{$ruleId}';
couponManager.ruleToSave['operators'] = {literal}{}{/literal};
couponManager.ruleToSave['values'] = {literal}{}{/literal};
// Update only if no rule are already set
if(!couponManager.ruleToSave){
console.log('considering couponManager.ruleToSave as null');
console.log(couponManager.ruleToSave);
couponManager.ruleToSave['serviceId'] = '{$ruleId}';
couponManager.ruleToSave['operators'] = {literal}{}{/literal};
couponManager.ruleToSave['values'] = {literal}{}{/literal};
} else {
console.log('considering couponManager.ruleToSave as not null');
console.log(couponManager.ruleToSave);
}
{foreach from=$inputs.inputs key=name item=input}
couponManager.ruleToSave['operators']['{$name nofilter}'] = '{foreach from=$inputs.inputs[$name].availableOperators key=keyOperator item=valueOperator name=operators}{if $smarty.foreach.operators.first}{$keyOperator nofilter}{/if}{/foreach}';
couponManager.ruleToSave['values']['{$name nofilter}'] = '{if count($inputs.inputs[$name].availableValues) != 0}{foreach from=$inputs.inputs[$name].availableValues key=keyValue item=valueValue name=values}{if $smarty.foreach.values.first}{$keyValue nofilter}{/if}{/foreach}{else}to set{/if}';
couponManager.ruleToSave['operators']['{$name nofilter}'] = '{foreach from=$inputs.inputs[$name].availableOperators key=keyOperator item=valueOperator name=operators}{if $smarty.foreach.operators.first}{$keyOperator nofilter}{/if}{/foreach}';
couponManager.ruleToSave['values']['{$name nofilter}'] = '{if count($inputs.inputs[$name].availableValues) != 0}{foreach from=$inputs.inputs[$name].availableValues key=keyValue item=valueValue name=values}{if $smarty.foreach.values.first}{$keyValue nofilter}{/if}{/foreach}{else}to set{/if}';
{/foreach}
@@ -86,15 +94,17 @@
{foreach from=$inputs.inputs key=name item=input}
// Operator selector
$('#{$name}-operator').change(function (e) {
console.log('changin operator');
console.log('changin operator {$name nofilter}');
var $this = $(this);
couponManager.ruleToSave['operators']['{$name nofilter}'] = $this.val();
console.log(couponManager.ruleToSave['operators']['{$name nofilter}']);
});
// Value input
$('#{$name}-value').change(function (e) {
console.log('changin value');
console.log('changin value {$name nofilter}');
var $this = $(this);
couponManager.ruleToSave['values']['{$name nofilter}'] = $this.val();
console.log(couponManager.ruleToSave['values']['{$name nofilter}']);
});
{/foreach}
{literal}}{/literal}