晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/akaindir/www/crm/layouts/v7/modules/Settings/Vtiger/resources/ |
Upload File : |
/*+**********************************************************************************
* The contents of this file are subject to the vtiger CRM Public License Version 1.1
* ("License"); You may not use this file except in compliance with the License
* The Original Code is: vtiger CRM Open Source
* The Initial Developer of the Original Code is vtiger.
* Portions created by vtiger are Copyright (C) vtiger.
* All Rights Reserved.
*************************************************************************************/
Vtiger.Class("Settings_Vtiger_TaxIndex_Js",{
updateSelectElement : function(selectedRegions, skippedRegions, regionsElement){
var allRegions = jQuery('.taxRegionElements');
var prevSelectedRegions = regionsElement.val();
regionsElement.html(allRegions.clone().html());
for(var index in selectedRegions) {
if (jQuery.inArray(selectedRegions[index], skippedRegions) == '-1') {
regionsElement.find("option[value='"+selectedRegions[index]+"']").remove();
}
}
if(prevSelectedRegions) {
regionsElement.select2("val", prevSelectedRegions);
}
}
},{
init : function () {
this.addModuleSpecificComponent('Index','Vtiger',app.getParentModuleName());
},
//Stored history of TaxName and duplicate check result
duplicateCheckCache : {},
taxContainer : false,
getContainer : function(){
if(this.taxContainer == false){
this.taxContainer = jQuery("#TaxCalculationsContainer");
}
return this.taxContainer;
},
/**
* This function will show the model for Add/Edit tax
*/
editTax : function(url, currentTrElement) {
var aDeferred = jQuery.Deferred();
var thisInstance = this;
app.helper.showProgress();
app.request.post({url:url}).then(
function(err,data) {
app.helper.hideProgress();
if(err == null){
var callBackFunction = function(data) {
//cache should be empty when modal opened
thisInstance.duplicateCheckCache = {};
var form = jQuery('#editTax');
app.helper.showVerticalScroll(jQuery('#scrollContainer'), {setHeight:'80%'});
thisInstance.registerUpdateRegionsElementEvent();
jQuery('.regions').trigger('change');
form.find('#simple').click(function(e) {
form.find('.compoundOnContainer').addClass('hide');
form.find('.dedcutedTaxDesc').addClass('hide');
form.find('.taxTypeContainer').removeClass('hide').show();
form.find('#compoundOn').select2('val', null);
var container = form.find('.taxTypeContainer');
var taxType = jQuery(':checked', container).val();
if (taxType == 'Variable') {
form.find('.taxValueContainer').addClass('hide');
form.find('.regionsContainer').removeClass('hide').show();
}
});
form.find('#compound').click(function(e) {
form.find('.dedcutedTaxDesc').addClass('hide');
form.find('.taxTypeContainer').removeClass('hide').show();
form.find('.compoundOnContainer').removeClass('hide').show();
var container = form.find('.taxTypeContainer');
var taxType = jQuery(':checked', container).val();
if (taxType == 'Variable') {
form.find('.taxValueContainer').addClass('hide');
form.find('.regionsContainer').removeClass('hide').show();
}
});
form.find('#deducted').click(function(e) {
form.find('.compoundOnContainer').addClass('hide');
form.find('.taxTypeContainer').addClass('hide');
form.find('.regionsContainer').addClass('hide');
form.find('.dedcutedTaxDesc').removeClass('hide').show();
form.find('.taxValueContainer').removeClass('hide').show();
form.find('#compoundOn').select2('val', null);
});
form.find('#fixed').click(function(e) {
form.find('.regionsContainer').addClass('hide');
form.find('.taxValueContainer').removeClass('hide').show();
});
form.find('#variable').click(function(e) {
form.find('.taxValueContainer').addClass('hide');
form.find('.regionsContainer').removeClass('hide').show();
});
form.on('click', '.deleteRow', function(e) {
var element = jQuery(e.currentTarget);
element.parent().parent().remove();
});
form.find('.addNewTaxBracket').click(function(e) {
e.preventDefault(e);
var taxRegionsTable = form.find('.regionsTable');
var taxRegionsCount = form.find('.regionsCount').val();
var widthHeight = form.find('#widthHeight').val();
var taxBracketBlock = jQuery('<tr>\n\
<td class="regionsList '+widthHeight+'">\n\
<div class="deleteRow close" style="float:left;margin-top:3px">×</div>  \n\
<select id="'+taxRegionsCount+'" data-placeholder="'+app.vtranslate('JS_SELECT_REGIONS')+'" name="regions['+taxRegionsCount+'][list]" class="regions select2 inputElement" multiple="" data-rule-required="true" style="width: 90%;">'
+form.find('.taxRegionElements').html().toString()+'\n\
</select>\n\
</td>\n\
<td class="'+widthHeight+'" style="text-align: center;">\n\
<input class="inputElement" type="text" name="regions['+taxRegionsCount+'][value]" class="input-medium" value="" data-rule-required="true" data-rule-inventory_percentage="true" />\n\
</td>\n\
</tr>');
var selectedRegions = [];
var regionElements = jQuery('.regionsTable select.regions');
jQuery.each(regionElements, function(index, element) {
var selectedValues = jQuery(element).val();
if (jQuery.isArray(selectedValues)) {
for (var i=0; i<selectedValues.length; i++) {
selectedRegions.push(selectedValues[i]);
}
}
});
for(var index in selectedRegions) {
taxBracketBlock.find("option[value='"+selectedRegions[index]+"']").remove();
}
form.find('.regionsCount').val(parseInt (taxRegionsCount) + 1);
taxRegionsTable.append(taxBracketBlock);
vtUtils.showSelect2ElementView(taxRegionsTable.find('tr:last td.regionsList select.select2'));
});
var params = {
submitHandler : function(form){
var form = jQuery(form);
thisInstance.saveTaxDetails(form, currentTrElement);
}
}
form.vtValidate(params);
form.submit(function(e) {
e.preventDefault();
})
}
app.helper.showModal(data, {cb:callBackFunction});
}
}
);
return aDeferred.promise();
},
/*
* Function to check Duplication of Tax Name
*/
checkDuplicateTaxName : function(details) {
var aDeferred = jQuery.Deferred();
var taxName = details.taxlabel;
var taxId = details.taxid;
var moduleName = app.getModuleName();
var params = {
'module' : moduleName,
'parent' : app.getParentModuleName(),
'action' : 'TaxAjax',
'mode' : 'checkDuplicateTaxName',
'taxlabel' : taxName,
'taxid' : taxId,
'type' : details.type
}
app.request.post({data:params}).then(function(err,data) {
if(err == null){
var result = data['success'];
if(result == true) {
aDeferred.reject(data);
} else {
aDeferred.resolve(data);
}
} else {
aDeferred.reject();
}
});
return aDeferred.promise();
},
/*
* Function to validate the TaxName to avoid duplicates
*/
validateTaxName : function(data) {
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var taxName = data.taxlabel;
var form = jQuery('#editTax');
var taxLabelElement = form.find('[name="taxlabel"]');
if(!(taxName in thisInstance.duplicateCheckCache)) {
thisInstance.checkDuplicateTaxName(data).then(
function(data){
thisInstance.duplicateCheckCache[taxName] = data['success'];
aDeferred.resolve();
},
function(data, err){
thisInstance.duplicateCheckCache[taxName] = data['success'];
thisInstance.duplicateCheckCache['message'] = data['message'];
aDeferred.reject(data);
}
);
} else {
if(thisInstance.duplicateCheckCache[taxName] == true){
var result = thisInstance.duplicateCheckCache['message'];
aDeferred.reject();
} else {
aDeferred.resolve();
}
}
return aDeferred.promise();
},
/*
* Function to Save the Tax Details
*/
saveTaxDetails : function(form, currentTrElement) {
var thisInstance = this;
var params = form.serializeFormData();
if(typeof params == 'undefined' ) {
params = {};
}
thisInstance.validateTaxName(params).then(
function(data) {
app.helper.showProgress();
params.module = app.getModuleName();
params.parent = app.getParentModuleName();
params.action = 'TaxAjax';
app.request.post({data:params}).then(
function(err,data) {
app.helper.hideModal();
app.helper.hideProgress();
//Adding or update the tax details in the list
if(form.find('[name="taxid"]').val() == "") {
thisInstance.addTaxDetails(data);
} else {
thisInstance.updateTaxDetails(data, currentTrElement);
}
//show notification after tax details saved
var params = {
message: app.vtranslate('JS_TAX_SAVED_SUCCESSFULLY')
};
app.helper.showSuccessNotification(params);
}
);
},
function(err){
app.helper.hideModal();
app.helper.showErrorNotification({"message":err["message"]});
}
);
},
addTaxDetails : function(details) {
var container = this.getContainer();
//Based on tax type, we will add the tax details row
if(details.type == '0') {
var taxTable = jQuery('.inventoryTaxTable', container);
} else {
var taxTable = jQuery('.shippingTaxTable', container);
}
var isChecked = '';
if (details.deleted != 1) {
isChecked = 'checked';
}
var trElementForTax =
jQuery('<tr class="opacity" data-taxid="'+details.taxid+'" data-taxtype="'+details.type+'">\n\
<td style="border-left: none;border-right: none;" '+details.row_type+'"><span class="taxLabel">'+details.taxlabel+'</span></td>\n\
<td style="border-left: none;border-right: none;" '+details.row_type+'"><span class="taxType">'+details.taxType+'</span></td>\n\
<td style="border-left: none;border-right: none;" '+details.row_type+'"><span class="taxMethod">'+details.method+'</span></td>\n\
<td style="border-left: none;border-right: none;" '+details.row_type+'"><span class="taxPercentage">'+details.percentage+'%</span></td>\n\
<td style="border-left: none;border-right: none;" '+details.row_type+'"><input class="editTaxStatus" type="checkbox" '+isChecked+' >\n\
</td><td style="border-left: none;border-right: none;">\n\
<div class="pull-right actions">\n\
<a class="editTax cursorPointer" data-url="'+details._editurl+'">\n\
<i class="fa fa-pencil alignMiddle" title="'+app.vtranslate('JS_EDIT')+'"></i>\n\
</a>\n\
</div>\n\</td></tr>');
taxTable.append(trElementForTax);
},
/*
* Function to update the tax details in the list after edit
*/
updateTaxDetails : function(data, currentTrElement) {
currentTrElement.find('.taxLabel').text(data['taxlabel']);
currentTrElement.find('.taxPercentage').text(data['percentage']+'%');
currentTrElement.find('.taxType').text(data['taxType']);
currentTrElement.find('.taxMethod').text(data['method']);
if(data['deleted'] == '0') {
currentTrElement.find('.editTaxStatus').attr('checked', 'true');
} else {
currentTrElement.find('.editTaxStatus').removeAttr('checked');
}
},
/**
* Function to register the click event for charges list tab
*/
registerChargesClickEvent : function() {
var thisInstance = this;
var taxContainer = this.getContainer();
var contents = taxContainer.find('.contents');
var relatedContainer = contents.find('#charges');
var relatedTab = contents.find('.chargesTab');
relatedTab.click(function() {
if(relatedContainer.find('.chargesContainer').length > 0) {
} else {
var params = {};
params['module'] = app.getModuleName();
params['parent'] = app.getParentModuleName();
params['view'] = 'TaxIndex';
params['mode'] = 'showChargesAndItsTaxes';
app.request.post({data:params}).then(function(err,data) {
relatedContainer.html(data);
if(contents.find('.chargesContainer').length > 0) {
contents.find('.addCharge').click(function(e) {
var addChargeButton = jQuery(e.currentTarget);
thisInstance.editCharge(addChargeButton.data('url'));
});
contents.on('click', '.editCharge', function(e) {
var editChargeButton = jQuery(e.currentTarget);
var currentTrElement = editChargeButton.closest('tr');
thisInstance.editCharge(editChargeButton.data('url'), currentTrElement);
});
contents.find('.addChargeTax').click(function(e) {
var addTaxButton = jQuery(e.currentTarget);
var createTaxUrl = addTaxButton.data('url')+'&type='+addTaxButton.data('type');
thisInstance.editTax(createTaxUrl);
});
contents.on('click', '.editChargeTax', function(e) {
var editTaxButton = jQuery(e.currentTarget);
var currentTrElement = editTaxButton.closest('tr');
thisInstance.editTax(editTaxButton.data('url'), currentTrElement);
});
}
});
}
});
},
editCharge : function(url, currentTrElement) {
var aDeferred = jQuery.Deferred();
var thisInstance = this;
app.helper.showProgress();
app.request.post({url:url}).then(
function(err,data) {
var callBackFunction = function(data) {
//cache should be empty when modal opened
thisInstance.duplicateCheckCache = {};
var form = jQuery('#editCharge');
thisInstance.registerUpdateRegionsElementEvent();
jQuery('.regions').trigger('change');
var container = jQuery('#scrollContainer');
form.find('#flat').click(function(e) {
form.find('.percentIcon').addClass('hide');
jQuery('[name="value"]', container).data('ruleInventory_percentage',false).data('rulePositivenumber',true);
jQuery('[name="defaultValue"]', container).data('ruleInventory_percentage',false).data('rulePositivenumber',true);
var valuesObjsList = jQuery('.valuesList', container);
jQuery.each(valuesObjsList, function(index, element) {
jQuery(element).data('ruleInventory_percentage',false).data('rulePositivenumber',true);
});
});
form.find('#percent').click(function(e) {
form.find('.percentIcon').removeClass('hide');
jQuery('[name="value"]', container).data('ruleInventory_percentage',true).data('rulePositivenumber',true);
jQuery('[name="defaultValue"]', container).data('ruleInventory_percentage',true).data('rulePositivenumber',true);
var valuesObjsList = jQuery('.valuesList', container);
jQuery.each(valuesObjsList, function(index, element) {
jQuery(element).data('ruleInventory_percentage',true).data('rulePositivenumber',true);
});
});
form.find('#fixed').click(function(e) {
form.find('.regionsContainer').addClass('hide');
form.find('.chargeValueContainer').removeClass('hide').show();
});
form.find('#variable').click(function(e) {
form.find('.chargeValueContainer').addClass('hide');
form.find('.regionsContainer').removeClass('hide').show();
});
form.find('.isTaxable').click(function(e) {
var element = jQuery(e.currentTarget);
var isChecked = element.is(':checked');
if (isChecked) {
form.find('.taxContainer').removeClass('hide').show();
} else {
form.find('.taxContainer').addClass('hide');
}
});
form.on('click', '.deleteRow', function(e) {
var element = jQuery(e.currentTarget);
element.parent().parent().remove();
});
form.find('.addNewTaxBracket').click(function(e) {
e.preventDefault(e);
var taxRegionsTable = form.find('.regionsTable');
var taxRegionsCount = form.find('.regionsCount').val();
var widthHeight = form.find('#widthHeight').val();
var selectedFormat = jQuery(':checked', form.find('.formatContainer')).val();
var validator = 'PositiveNumber';
if (selectedFormat == 'Percent') {
validator = 'inventory_percentage';
}
var taxBracketBlock = jQuery('<tr>\n\
<td class="regionsList '+widthHeight+'">\n\
<span class="deleteRow close" style="float:left;margin-top:3px;">×</span> \n\
<select id="'+taxRegionsCount+'" data-placeholder="'+app.vtranslate('JS_SELECT_REGIONS')+'" name="regions['+taxRegionsCount+'][list]" class="select2 regions columns span3" multiple="" data-rule-required="true" style="width:90%;">'
+form.find('.taxRegionElements').html().toString()+'\n\
</select>\n\
</td>\n\
<td class="'+widthHeight+'" style="text-align: center;">\n\
<input class="inputElement valuesList" type="text" name="regions['+taxRegionsCount+'][value]" class="input-medium" value="" data-rule-required="true" data-rule-'+validator+'="true"/>\n\
</td>\n\
</tr>');
var selectedRegions = [];
var regionElements = jQuery('.regionsTable select.regions');
jQuery.each(regionElements, function(index, element) {
var selectedValues = jQuery(element).val();
if (jQuery.isArray(selectedValues)) {
for (var i=0; i<selectedValues.length; i++) {
selectedRegions.push(selectedValues[i]);
}
}
});
for(var index in selectedRegions) {
taxBracketBlock.find("option[value='"+selectedRegions[index]+"']").remove();
}
form.find('.regionsCount').val(parseInt (taxRegionsCount) + 1);
taxRegionsTable.append(taxBracketBlock);
vtUtils.showSelect2ElementView(taxRegionsTable.find('tr:last td.regionsList select.select2'));
});
var params = {
submitHandler : function(form){
var form = jQuery(form);
thisInstance.saveChargeDetails(form, currentTrElement);
}
}
form.vtValidate(params);
form.submit(function(e) {
e.preventDefault();
});
}
app.helper.hideProgress();
app.helper.showModal(data,{cb:callBackFunction});
},
function(error) {
//TODO : Handle error
aDeferred.reject(error);
}
);
return aDeferred.promise();
},
saveChargeDetails : function(form, currentTrElement) {
var thisInstance = this;
var params = form.serializeFormData();
if(typeof params == 'undefined' ) {
params = {};
}
thisInstance.validateChargeName(params).then(function(data) {
app.helper.showProgress();
params.module = app.getModuleName();
params.parent = app.getParentModuleName();
params.action = 'TaxAjax';
params.mode = 'saveCharge';
app.request.post({data:params}).then(
function(err,data) {
app.helper.hideProgress();
app.helper.hideModal();
if(form.find('[name="chargeid"]').val() == "") {
thisInstance.addChargeDetails(data);
} else {
var result = data;
currentTrElement.find('.chargeName').text(result['name']);
currentTrElement.find('.chargeValue').text(result['value']);
currentTrElement.find('.chargeIsTaxable').text(result['isTaxable']);
currentTrElement.find('.chargeTaxes').text(result['selectedTaxes']);
}
var params = {
message: app.vtranslate('JS_INVENTORY_CHARGE_SAVED_SUCCESSFULLY')
};
app.helper.showSuccessNotification(params);
}
);
});
},
addChargeDetails : function(details) {
var container = jQuery('#TaxCalculationsContainer');
var trElementForCharge =
jQuery('<tr class="opacity">\n\
<td style="border-left: none;border-right: none;" class="'+details.row_type+'"><span class="chargeName" style="width:100px;">'+details.name+'</span></td>\n\
<td style="border-left: none;border-right: none;" class="'+details.row_type+'"><span class="chargeValue" style="width:105px;">'+details.value+'</span></td>\n\
<td style="border-left: none;border-right: none;" class="'+details.row_type+'"><span class="chargeIsTaxable">'+details.isTaxable+'</span></td>\n\
<td style="border-left: none;border-right: none;" class="'+details.row_type+'"><span class="chargeTaxes span2">'+details.selectedTaxes+'</span></td>\n\
<td style="border-left: none;border-right: none;" class="'+details.row_type+'">\n\
<div class="pull-right actions">\n\
<a class="editCharge cursorPointer" data-url="'+details._editurl+'">\n\
<i class="fa fa-pencil alignBottom" title="'+app.vtranslate('JS_EDIT')+'"></i>\n\
</a>\n\
</div>\n\
</td></tr>');
jQuery('.inventoryChargesTable', container).append(trElementForCharge);
},
validateChargeName : function(data) {
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var chargeName = data.name;
var form = jQuery('#editCharge');
var chargeNameElement = form.find('[name="name"]');
if(!(chargeName in thisInstance.duplicateCheckCache)) {
thisInstance.checkDuplicateChargeName(data).then(
function(data){
thisInstance.duplicateCheckCache[chargeName] = data['success'];
aDeferred.resolve(data);
},
function(data, err){
thisInstance.duplicateCheckCache[chargeName] = data['success'];
thisInstance.duplicateCheckCache['message'] = data['message'];
app.helper.showErrorNotification({message:data['message']});
aDeferred.reject(data);
}
);
} else {
if(thisInstance.duplicateCheckCache[chargeName] == true){
var result = thisInstance.duplicateCheckCache['message'];
app.helper.showErrorNotification({message:result});
aDeferred.reject();
} else {
aDeferred.resolve();
}
}
return aDeferred.promise();
},
checkDuplicateChargeName : function(details) {
var aDeferred = jQuery.Deferred();
var params = {
'module' : app.getModuleName(),
'parent' : app.getParentModuleName(),
'action' : 'TaxAjax',
'mode' : 'checkDuplicateInventoryCharge',
'name' : details.name,
'chargeid' : details.chargeid
}
app.request.post({data:params}).then(function(err,data) {
if(err == null){
var response = data;
var result = response['success'];
if(result == true) {
aDeferred.reject(response);
} else {
aDeferred.resolve(response);
}
} else {
aDeferred.reject();
}
});
return aDeferred.promise();
},
registerUpdateRegionsElementEvent : function() {
jQuery('.regionsTable').on('change', '.regions', function(e) {
var currentElement = e.currentTarget;
var selectedRegions = [];
var regionElements = jQuery('.regionsTable select.regions');
jQuery.each(regionElements, function(index, element) {
var selectedValues = jQuery(element).val();
if (jQuery.isArray(selectedValues)) {
for (var i=0; i<selectedValues.length; i++) {
selectedRegions.push(selectedValues[i]);
}
}
});
jQuery.each(regionElements, function(index, element) {
if (element != currentElement) {
var skippedValues = jQuery(element).val();
if (!jQuery.isArray(skippedValues)) {
skippedValues = [];
}
Settings_Vtiger_TaxIndex_Js.updateSelectElement(selectedRegions, skippedValues, jQuery(element));
}
});
});
},
/**
* Function to register the click event for regions list tab
*/
registerRegionsClickEvent : function() {
var thisInstance = this;
var taxContainer = this.getContainer();
var contents = taxContainer.find('.contents');
var relatedContainer = contents.find('#taxRegions');
var relatedTab = contents.find('.taxRegionsTab');
relatedTab.click(function() {
if(relatedContainer.find('.taxRegionsContainer').length > 0) {
} else {
var params = {};
params['module'] = app.getModuleName();
params['parent'] = app.getParentModuleName();
params['view'] = 'TaxIndex';
params['mode'] = 'showTaxRegions';
app.request.post({data:params}).then(function(err,data) {
relatedContainer.html(data);
contents.find('.addRegion').click(function(e) {
var addRegionButton = jQuery(e.currentTarget);
thisInstance.editRegion(addRegionButton.data('url'));
});
contents.on('click', '.editRegion', function(e) {
var editRegionButton = jQuery(e.currentTarget);
var currentTrElement = editRegionButton.closest('tr');
thisInstance.editRegion(editRegionButton.data('url'), currentTrElement);
});
contents.on('click', '.deleteRegion', function(e) {
var deleteRegionButton = jQuery(e.currentTarget);
var currentTrElement = deleteRegionButton.closest('tr');
thisInstance.deleteRegion(deleteRegionButton.data('url'), currentTrElement);
});
});
}
});
},
deleteRegion : function(url, currentElement) {
var message = app.vtranslate('JS_DELETE_REGION_DESC');
app.helper.showConfirmationBox({'message' : message}).then(function(e) {
app.helper.showProgress();
app.request.post({url:url}).then(function(err,data){
app.helper.hideProgress();
if(err == null) {
currentElement.remove();
var params = {
message: app.vtranslate('JS_TAX_REGION_DELETED_SUCCESSFULLY')
};
app.helper.showSuccessNotification(params);
} else {
var params = {
message : app.vtranslate('JS_LBL_PERMISSION')
}
app.helper.showErrorNotification(params);
}
});
});
},
editRegion : function(url, currentTrElement) {
var aDeferred = jQuery.Deferred();
var thisInstance = this;
app.helper.showProgress();
app.request.post({url:url}).then(
function(err,data) {
if(err == null){
var callBackFunction = function(data) {
var form = jQuery('#editTaxRegion');
//cache should be empty when modal opened
thisInstance.duplicateCheckCache = {};
var params = {
submitHandler : function(form){
var form = jQuery(form);
thisInstance.saveRegionDetails(form, currentTrElement);
}
}
form.vtValidate(params);
form.submit(function(e) {
e.preventDefault();
})
}
app.helper.hideProgress();
app.helper.showModal(data,{cb:callBackFunction});
}else {
aDeferred.reject(err);
}
});
return aDeferred.promise();
},
saveRegionDetails : function(form, currentTrElement) {
var thisInstance = this;
var params = form.serializeFormData();
if(typeof params == 'undefined' ) {
params = {};
}
thisInstance.validateRegionName(params).then(
function(data) {
app.helper.showProgress();
params.module = app.getModuleName();
params.parent = app.getParentModuleName();
params.action = 'TaxAjax';
params.mode = 'saveTaxRegion';
app.request.post({data:params}).then(
function(err,data) {
app.helper.hideProgress();
app.helper.hideModal();
if(form.find('[name="taxRegionId"]').val() == "") {
thisInstance.addRegionDetails(data);
} else {
currentTrElement.find('.taxRegionName').text(data['name']);
}
var params = {
message: app.vtranslate('JS_TAX_REGION_SAVED_SUCCESSFULLY')
};
app.helper.showSuccessNotification(params);
}
);
},
function(data,err){
app.helper.hideModal();
app.helper.showErrorNotification({message:data["message"]});
}
);
},
validateRegionName : function(data) {
var thisInstance = this;
var aDeferred = jQuery.Deferred();
var regionName = data.name;
var form = jQuery('#editTaxRegion');
var regionNameElement = form.find('[name="name"]');
if(!(regionName in thisInstance.duplicateCheckCache)) {
thisInstance.checkDuplicateRegionName(data).then(
function(data){
thisInstance.duplicateCheckCache[regionName] = true;
thisInstance.duplicateCheckCache['message'] = app.vtranslate('JS_LBL_TAX_REGION_EXIST');
aDeferred.resolve(data);
},
function(data, err){
thisInstance.duplicateCheckCache[regionName] = data['success'];
thisInstance.duplicateCheckCache['message'] = data['message'];
aDeferred.reject(data);
}
);
} else {
if(thisInstance.duplicateCheckCache[regionName] == true){
aDeferred.reject({message:thisInstance.duplicateCheckCache['message']});
} else {
aDeferred.resolve();
}
}
return aDeferred.promise();
},
checkDuplicateRegionName : function(details) {
var aDeferred = jQuery.Deferred();
var params = {
'module' : app.getModuleName(),
'parent' : app.getParentModuleName(),
'action' : 'TaxAjax',
'mode' : 'checkDuplicateTaxRegion',
'taxRegionName' : details.name,
'taxRegionId' : details.taxRegionId
}
app.request.post({data:params}).then(function(err,data) {
if(err == null){
var result = data['success'];
if(result == true) {
aDeferred.reject(data);
} else {
aDeferred.resolve(data);
}
}else {
aDeferred.reject();
}
});
return aDeferred.promise();
},
addRegionDetails : function(details) {
var container = this.getContainer();
var trElementForRegion =
jQuery('<tr class="opacity" data-key-name="'+details.name+'" data-key="'+details.name+'">\n\
<td style="border-right:none;border-left:none;;" class="textAlignLeft '+details.row_type+'">\n\
<span class="taxRegionName">'+details.name+'</span>\n\
</td>\n\
<td style="border-right:none;border-left:none" class="'+details.row_type+'">\n\
<div class="pull-right actions">\n\
<a class="editRegion" data-url="'+details._editurl+'">\n\
<i class="fa fa-pencil alignMiddle" title="'+app.vtranslate('JS_EDIT')+'"></i>\n\
</a>\n\
<a class="deleteRegion" data-url="'+details._deleteurl+'">\n\
<i class="fa fa-trash alignMiddle" title="'+app.vtranslate('JS_DELETE')+'"></i>\n\
</a>\n\
</div>\n\
</td></tr>');
jQuery('.taxRegionsTable', container).append(trElementForRegion);
},
/*
* Function to update tax status as enabled or disabled
*/
updateTaxStatus : function(currentTarget) {
var aDeferred = jQuery.Deferred();
var currentTrElement = currentTarget.closest('tr');
var taxId = currentTrElement.data('taxid');
var taxType = currentTrElement.data('taxtype');
var deleted = currentTarget.is(':checked') ? 0 : 1;
app.helper.showProgress();
var params = {
'module' : app.getModuleName(),
'parent' : app.getParentModuleName(),
'action' : 'TaxAjax',
'mode' : 'updateTaxStatus',
'taxid' : taxId,
'type' : taxType,
'deleted' : deleted
}
app.request.post({data:params}).then(
function(err,data) {
if(err == null){
app.helper.hideProgress();
aDeferred.resolve(data);
}else {
app.helper.hideProgress();
aDeferred.reject(err);
}
});
return aDeferred.promise();
},
/*
* Function to register all actions in the Tax List
*/
registerActions : function() {
var thisInstance = this;
var container = this.getContainer();
//register click event for Add New Tax button
container.find('.addTax').click(function(e) {
var addTaxButton = jQuery(e.currentTarget);
var createTaxUrl = addTaxButton.data('url')+'&type='+addTaxButton.data('type');
thisInstance.editTax(createTaxUrl);
});
//register event for edit tax icon
container.on('click', '.editTax', function(e) {
var editTaxButton = jQuery(e.currentTarget);
var currentTrElement = editTaxButton.closest('tr');
thisInstance.editTax(editTaxButton.data('url'), currentTrElement);
});
//register event for checkbox to change the tax Status
container.on('click', '.editTaxStatus', function(e) {
var currentTarget = jQuery(e.currentTarget);
thisInstance.updateTaxStatus(currentTarget).then(
function(data){
var params = {};
if(currentTarget.is(':checked')) {
params.message = app.vtranslate('JS_TAX_ENABLED');
} else {
params.message = app.vtranslate('JS_TAX_DISABLED');
}
app.helper.showSuccessNotification(params);
},
function(error){
//TODO: Handle Error
}
);
});
container.on('click', '[name="default_tax_mode"]', function(e) {
var currentTarget = jQuery(e.currentTarget);
var value = currentTarget.val();
var prevSelectedValue = jQuery('#selectedTaxMode').val();
if(value != prevSelectedValue) {
var params = {
'module' : app.getModuleName(),
'parent' : app.getParentModuleName(),
'action' : 'TaxAjax',
'mode' : 'updateDefaultTaxMode',
'defaultTaxMode': value
}
app.request.post({data:params}).then(function(err,data) {
if(err == null){
jQuery('#selectedTaxMode').val(value);
var selectedType = currentTarget.parent().find('.mode').text();
app.helper.showSuccessNotification({
"message":app.vtranslate('JS_DEFAULT_TAX_MODE_SET_AS') + selectedType
});
} else {
app.helper.showErrorNotification({
"message": err
});
}
});
}
});
},
registerEvents : function(){
this.registerChargesClickEvent();
this.registerRegionsClickEvent();
this.registerActions();
}
});