ElixirVault/www/system-brs-core/cms/cmsOrders/js/cmsOrders.js

712 lines
26 KiB
JavaScript

(function() {
if($.isFunction(Validator)){
/**
* Function to show field errors by field object error cfg
*
* @this {Validator}
* @author Mareks Keišs <keiss.mareks@gmail.com>
* @param {object} caller - field object for which to add error
* @param {object} errors - error cfg array
*/
Validator.prototype.showErrorsByObject = function(errors){
this.hideAllErrors();
// Set errors
if($.isDefined(errors) && errors){
if(errors.base){
for(var key in errors.base){
this.showError($(this.sel + " span." + key), errors.base[key]);
}
}
if(errors.table){
for(var i in errors.table){
for(var key in errors.table[i]){
this.showError($(this.sel + " #table ul.body:nth-child(" + (parseInt(i)+3) + ") span." + key), errors.table[i][key]);
}
}
}
}
};
Validator.prototype.hideAllErrors = function(){
$(this.sel + " .v-error," + this.sel + " .v-ok").removeClass("v-ok v-error");
};
/**
* Function to clear current field error
*
* @this {Validator}
* @author Mareks Keišs <keiss.mareks@gmail.com>
* @param {object} caller - field object for which to hide error
*/
Validator.prototype.hideError = function(caller){
if(caller){
if(jQuery().tipsy){
var eMsg = $(caller).closest(".v-error");
if(eMsg.length) eMsg.tipsy("hide");
}
$(caller).closest(".validate").addClass("v-ok").removeClass("v-error").attr("title", "").find(".errMsg").hide();
}
};
}
oFieldBinds = (function() {
function oFieldBinds(jqObj, data) {
var _this = this;
_this.jqModuleObj = $.isDefined(jqObj) ? jqObj : $(".form-data");
_this.oData = {};
_this.oData = (data ? data : {});
_this.bindEvents();
}
oFieldBinds.prototype.jqModuleObj = $("");
oFieldBinds.prototype.oData = {};
oFieldBinds.prototype.sActiveElementClass = "";
oFieldBinds.prototype.iPvn = 21;
oFieldBinds.prototype.iClonableObjects = 32; // + 2 because of clone object & header;
oFieldBinds.prototype.oProdCatalog = false;
oFieldBinds.prototype.oProdCatalogTable = false;
oFieldBinds.prototype.oProdData = {};
oFieldBinds.prototype.bindEvents = function(){
var _this = this;
// Fill data;
if(_this.oData)
_this.fillData();
// Bind field edit on click;
_this.jqModuleObj.find(".dataBox li:not(.dummy, .noEdit)").bind("click", function(){
var jqLi = $(this);
if(!jqLi.hasClass("active")){
jqLi.addClass("active");
var jqSpan = jqLi.find("div > span");
var val = jqSpan.html();
_this.sActiveElementClass = jqSpan.attr("class");
if(jqLi.hasClass("dec_2")){
val = parseFloat(val.replace(',', '.'));
val = (!isNaN(val) ? CBase.formatNumber(val,2,".","") : 0.000)
}
if(jqLi.hasClass("dec_3")){
val = parseFloat(val.replace(',', '.'));
val = (!isNaN(val) ? CBase.formatNumber(val,3,".","") : 0.000)
}
var jqDiv = jqLi.find(">div");
var jqInput = $("<input value='"+ (val ? val : '') +"' data-validator='"+ jqDiv.attr("name") +"'/>");
jqDiv.append(jqInput);
jqInput.select().focus().blur(function(){
_this.inputBinds(jqLi);
}).keypress(function (e) {
var iKeyCode = (e.keyCode ? e.keyCode : e.which);
if(iKeyCode == '13'){ // On enter call our row input binds function
_this.inputBinds(jqLi);
}else if(iKeyCode == '9'){
_this.inputBinds(jqLi);
var jqNext = (e.shiftKey ? jqLi.prev() : jqLi.next());
while(jqNext.length && jqNext.hasClass("noEdit"))
jqNext = (e.shiftKey ? jqNext.prev() : jqNext.next());
jqNext.click();
}
});
}
});
var jqTable = _this.jqModuleObj.find("div#table");
// Bind add row
jqTable.parent().find(".add_more").bind("click", function(){
if(jqTable.find("ul").length < _this.iClonableObjects)
_this.createRow(false, true);
});
// Bind product catalog button
jqTable.parent().find(".prod_catalog").bind("click", function(){
_this.createCatalog();
});
// Bind row delete button;
jqTable.find("ul span.delete").bind("click", function(){
_this.removeRow($(this).closest("ul"));
});
// Bind calendar to date picker
_this.jqModuleObj.find("span.calendar").bind("click", function(){
var jqInp = $(this).parent().find("input");
_this.sActiveElementClass = jqInp.attr("id");
jqInp.datepicker("show");
});
};
oFieldBinds.prototype.createCatalog = function(){
var _this = this;
// Construct New dialog if necessary
if(!_this.oProdCatalog){
_this.oProdCatalog = new ConfirmDialog("prodCatalog");
var jqClone = $(".content").find("#catalog-clone").clone();
jqClone.attr("id", "catalog");
// Show dialog with HTML
_this.oProdCatalog.show({
bSkipShow : true,
closeBtn: true,
title : defaultVal(CBase.gM.sProdCatalogTitle, "Select product"),
message : jqClone,
buttons : {
1 : {
lbl : defaultVal(CBase.gM.sProdSel, "Select product"),
id : "buttonYes",
click : function(){
_this.oProdCatalog.hide();
_this.addSelectedProducts();
}
},
2 : {
lbl : defaultVal(CBase.gM.sProdCancel, "Cancel"),
id : "buttonNo",
click : function(){
_this.oProdCatalog.hide();
}
}
}
});
// Construct New table if necessary
var oForm = CBase.oForm;
var oTable = CBase.oTable;
_this.oProdCatalogTable = new CTable("catalog", CBase.dt.productUrl);
_this.oProdCatalogTable.bInitEdit = false;
_this.oProdCatalogTable.getTableData = function(){
return {
action : "loadProdCatalog"
}
};
_this.oProdCatalogTable.tableShowCallback = function(jqObj, d){
if(d.prodData){
$.each(d.prodData, function(k, data){
_this.oProdData[data['rid']] = $.extend({}, data);
});
jqObj.find("ul.dxr.single").click(function(){
$(this).find("div.chk").trigger("click");
});
}
};
_this.oProdCatalogTable.loadTableData();
CBase.oForm = oForm;
CBase.oTable = oTable;
}
_this.oProdCatalog.show();
};
oFieldBinds.prototype.addSelectedProducts = function(){
var _this = this;
_this.oProdCatalog.oDialog.find("#cms-table-drop-marker").find(".chked").each(function(){
// If its not table head check all box then add this product;
if(_this.oProdData && !$(this).closest("ul").hasClass("thead")){
var id = $(this).closest("ul").attr("id");
if(_this.oProdData[id]){
var jqRow = _this.createRow(false, true);
jqRow.find("span.p_name").closest("li").unbind();
jqRow.find("span.p_count").html(1);
_this.oData['table'][jqRow.attr("id").substr(1) - 1]["p_count"] = 1;
$.each(_this.oProdData[id], function(key, val){
if(key != "id" && key != "p_name"){
_this.oData['table'][jqRow.attr("id").substr(1) - 1][key] = val;
jqRow.find("span." + key).html(val);
if(key == "p_price_vat"){
_this.sActiveElementClass = "p_price_vat";
var oImp = $("<input data-validator='p_price_vat'>").val(val).hide();
jqRow.find("span." + key).after(oImp);
_this.inputBinds(oImp.closest("li"));
}
}
});
_this.oData['table'][jqRow.attr("id").substr(1) - 1]['p_name'] = _this.oProdData[id].full_title;
jqRow.find("span.p_name").html(_this.oProdData[id].full_title);
}
}
// Remove checked class;
$(this).removeClass("chked");
});
_this.recalculateSubTotal();
};
oFieldBinds.prototype.removeRow = function(jqRow){
var _this = this;
var jqParent = jqRow.parent();
jqRow.css({opacity : 0.5}).delay(50).slideUp("fast", function(){
var id = (jqRow.attr("id").substr(1)) - 1;
$(this).remove();
delete _this.oData['table'][id];
_this.recalculateRowNr(jqParent);
// Recalculate total sum
_this.recalculateSubTotal();
_this.reformatRowsAndCols();
});
};
oFieldBinds.prototype.fillData = function(bOnlyOne, jqObj, val){
var _this = this;
if(bOnlyOne){
jqObj.find("span." + _this.sActiveElementClass).html(val);
}else{
if(_this.oData['data']){
for(var id in _this.oData['data']){
if(_this.oData['data'].hasOwnProperty(id))
_this.jqModuleObj.find("span." + id).html(_this.oData['data'][id]);
}
}
// Fill table data
if(_this.oData['table']){
for(var i in _this.oData['table']){
if(_this.oData['table'].hasOwnProperty(i)){
var jqRow = _this.createRow(true);
for(var id in _this.oData['table'][i]){
if(_this.oData['table'][i].hasOwnProperty(id)){
jqRow.find("span." + id).html(_this.oData['table'][i][id]);
}
}
// Add no edit on title if this row has id
if(_this.oData['table'][i]['p_id'] > 0)
jqRow.find("span.p_name").closest("li").addClass("noEdit");
if(_this.oData.table[i].split)
jqRow.addClass("split");
_this.recalculateTable(jqRow, false);
}
}
_this.recalculateRowNr(_this.jqModuleObj.find("div#table"));
_this.recalculateSubTotal();
}else
_this.oData['table'] = {};
}
};
oFieldBinds.prototype.recalculateTable = function(jqRow,bSumCalc){
var _this = this;
bSumCalc = defaultVal(bSumCalc, true);
if(jqRow.length){
// Recalculate row sums etc.
var iCount = parseInt(jqRow.find("span.p_count").html());
var iPrice = parseFloat(jqRow.find("span.p_price").html().replace(',', '.'));
jqRow.find("span.p_count").html(iCount);
jqRow.find("span.p_price").html(CBase.formatNumber(iPrice,3,".",""));
var jqPriceSum = jqRow.find("span.p_price_sum");
var jqPriceVat = jqRow.find("span.p_price_vat");
var jqPvn = jqRow.find("span.p_pvn");
if(!isNaN(iCount) && !isNaN(iPrice)){
jqPvn.html(CBase.formatNumber(iPrice*_this.iPvn/100,2,".",""));
jqPriceVat.html(CBase.formatNumber(iPrice*(1+_this.iPvn/100),2,".",""));
jqPriceSum.html(CBase.formatNumber(iPrice*iCount*(1+_this.iPvn/100),2,".",""));
}
}
if(bSumCalc)
_this.recalculateSubTotal();
};
oFieldBinds.prototype.recalculateSubTotal = function(){
var _this = this;
var iSubTotal = 0;
var iPvnSum = 0;
var iTotal = 0;
_this.jqModuleObj.find("div#table").find("ul.lbody:not(.clone)").each(function(){
var iPriceSum = parseFloat($(this).find("span.p_price_sum").html());
if(!isNaN(iPriceSum)) iTotal += iPriceSum;
});
if(iTotal > 0){
iSubTotal = iTotal*100/(100+_this.iPvn);
iPvnSum = iSubTotal*_this.iPvn/100;
}
_this.jqModuleObj.find("span.sub_total").html(CBase.formatNumber(iSubTotal,2,"."," "));
_this.jqModuleObj.find("span.pvn_sum").html(CBase.formatNumber(iPvnSum,2,"."," "));
var iPrevTotal = parseFloat(_this.jqModuleObj.find("span.total").html());
_this.jqModuleObj.find("span.total").html(CBase.formatNumber(iTotal,2,"."," "));
if(iPrevTotal != iTotal){
CBase.oTable.sendAjaxActionAdvanced({
action: "sum2words",
sum: CBase.formatNumber(iTotal, 2, ".", "")
},
function(d){
if(d && d.jsonok && d.w){
_this.jqModuleObj.find(".a_p_amount_words").html(d.w);
_this.oData.data["a_p_amount_words"] = d.w;
}
});
}
};
oFieldBinds.prototype.reformatRowsAndCols = function(){
var jqTable = $("#table ul.body, .sub_total li");
// Style
jqTable.removeClass("odd");
$("#table ul.body:odd, .sub_total li:odd").addClass("odd");
jqTable.each(function(){
$(this).find("li:even").addClass("even");
});
};
oFieldBinds.prototype.createRow = function(bNewNode, bAnimate){
var _this = this;
// Clone cloneable obj.
var jqTable = _this.jqModuleObj.find("div#table");
var jqClone = jqTable.find("> ul.clone").clone(true, true);
jqClone.removeClass("clone");
// Add nr.
var i = 1;
while(jqTable.find("> ul#r" +i).length) i++;
jqClone.attr("id", "r" + i);
var nr = (parseInt(jqTable.find("> ul.lbody:last span.nr").html()) || 0) +1;
jqClone.find("span.nr").html((nr+"."));
if(!bNewNode){
var ii = i - 1;
_this.oData['table'][ii] = {
row_nr : nr,
p_price : 0.000,
p_count : 0,
p_name : ""
};
for(var sClass in _this.oData['table'][ii]){
if(_this.oData['table'][ii].hasOwnProperty(sClass)){
jqClone.find("span." + sClass).html(_this.oData['table'][ii][sClass]);
}
}
}
// Append cloneable object with or without animation
if(bAnimate){
jqTable.append(jqClone.css({opacity : 0.5}).hide());
jqClone.slideDown("fast", function(){
$(this).css({opacity : 1});
});
}else{
jqTable.append(jqClone.show());
}
if(!bNewNode) _this.recalculateTable(jqClone);
_this.reformatRowsAndCols();
return jqClone;
};
oFieldBinds.prototype.inputBinds = function(jqLi){
var _this = this;
var jqActiveInput = jqLi.find("input");
var val = jqActiveInput.val();
if(jqLi.hasClass("dec_2")){
val = parseFloat(val.replace(',', '.'));
val = (!isNaN(val) ? CBase.formatNumber(val,2,".","") : 0);
}
if(jqLi.hasClass("dec_3")){
val = parseFloat(val.replace(',', '.'));
val = (!isNaN(val) ? CBase.formatNumber(val,3,".","") : 0);
}
var id = jqLi.closest(".dataBox").attr("id");
// _this.iActiveRowId = id ? id.substr(1) : 0;
if(id === "table"){
var i = (jqLi.parent().attr("id").substr(1)) - 1;
_this.oData['table'][i][_this.sActiveElementClass] = val;
_this.fillData(true, jqLi, val);
// Recalc sum if p_price_sum changed
if(_this.sActiveElementClass == "p_price_vat"){
_this.oData['table'][i]["p_price"] = CBase.formatNumber(val / (1 + _this.iPvn / 100),3,".","");
jqLi.closest("ul").find("span.p_price").html(_this.oData['table'][i]["p_price"]);
}
_this.recalculateTable(jqLi.closest("ul"));
}else{
_this.oData['data'][_this.sActiveElementClass] = val;
_this.fillData(true, jqLi, val);
}
// Send error check on action
CBase.oForm.validator.checkThis(jqActiveInput);
// If its date picker, update the second field else we remove input
if(jqActiveInput.hasClass("date"))
jqActiveInput.parent().find("span").html(val);
else
jqActiveInput.remove();
// Remove class active and show span
jqLi.removeClass("active");
};
oFieldBinds.prototype.recalculateRowNr = function(jqProdTable){
var _this = this;
// Recalculate the row nr.
var i = 1;
jqProdTable.find("ul:not(.clone, .lHeader)").each(function(){
var rowId = parseInt($(this).attr("id").substr(1))-1;
_this.oData.table[rowId].row_nr = i;
$(this).find("li span.nr").html((i + "."));
i++;
});
};
return oFieldBinds;
})();
CmsOrders = (function() {
function CmsOrders(){
var _this = this;
_this.oTable = new CTable("data");
_this.oTable.loadTableData();
}
CmsOrders.prototype.oModFieldBinds = {};
CmsOrders.prototype.bNewClone = false;
// Rewrite CTable object callback
CTable.prototype.tableObjectCallback = function(oTable){
var _this = this;
oTable.find("a#icloneBlank").click(function(){
CBase.jsModule.bNewClone = true;
CBase.message.hide(true, false);
_this.loadRecord(false, $(".dxr:not(.head) div.chked:first").closest("ul").find("#ledit").attr("href"));
});
};
// Ajax load cfg object
CBlank.prototype.getAjaxData = function(){
var d = {
action : "selfLoad"
};
if(CBase.jsModule.bNewClone){
d["action"] = "cloneBlank";
CBase.jsModule.bNewClone = false;
}
return d;
};
// Rewrite CBase form callback
CBlank.prototype.viewCallback = function(obj){
var _this = this;
obj.find(".settings").click(function(){
if($(this).hasClass("load"))
CBase.jsModule.loadSubcontent(_this, $(this));
else
CBase.jsModule.showHideSubcontent(this);
});
this.oBtnPan.find("#fcancel").click(function(){
CBase.message.hide();
if(_this.isModiffied){
CBase.oTable.filterTableData(false);
}else{
CBase.oTable.show();
}
});
this.oBtnPan.find("#fsave, #fsend").click(function(){
_this.saveBlankView(($(this).attr("id") === "fsend" ? {send : 1} : {}));
});
this.bindBlankActions(obj);
};
CBlank.prototype.viewCallbackAfterAppend = function(jqObj, d){
var _this = this;
_this.oBtnPan.find("#exportExcel, #exportPdf").click(function(e){
var el = $(this);
CBase.message.disableNextMsg = true;
if(!el.hasClass("sv")){
e.preventDefault(true, true);
_this.saveBlankView({genFile : el.attr("id")}, function(d){
if(d.jsonok || d.locked){
el.addClass("sv");
el.click();
}
});
}else{
el.removeClass("sv");
window.location = el.attr("href");
}
});
// If form is locked show overlay over the form;
if(d['form_locked'] === '1')
jqObj.find("div#send_overlay").show();
CBase.jsModule.oModFieldBinds = new oFieldBinds(jqObj, d['data']);
jqObj.find("input.date").datepicker({
dateFormat: 'dd.mm.yy',
// dateFormat: 'yy. d. MM',
changeMonth: true,
changeYear: true,
onClose: function () {
CBase.jsModule.oModFieldBinds.inputBinds($(this).closest("li"));
}
});
var jqProdTable = jqObj.find("#table");
jqProdTable.sortable({
//axis: "y",
handle: "li.w5 span",
items: "ul.body",
helper: "clone",
stop: function() {
CBase.jsModule.oModFieldBinds.reformatRowsAndCols();
CBase.jsModule.oModFieldBinds.recalculateRowNr(jqProdTable);
}
});
};
CBlank.prototype.addAdditionalSaveData = function(){
return CBase.jsModule.oModFieldBinds.oData;
};
CBlank.prototype.saveBlankViewCallback = function(d){
var jqProdTable = $("div#table");
jqProdTable.find("ul").removeClass("c-error");
if(d && d['jsonok']){
if(d['send']){
$("div#send_overlay").show();
$("#fsave, #fsend").fadeOut("fast");
}
// If we get new Nr then update or nr span;
if(d['newNr']){
$("span.o_nr").html(d['newNr']);
CBase.jsModule.oModFieldBinds.oData.data.o_nr = d['newNr'];
}
}else{
if(d && d.availableProdErr){
$.each(CBase.jsModule.oModFieldBinds.oData.table, function(tableRow, dd){
if(dd && dd.p_id != 0 && dd.rid != 0){
if(d.availableProdErr[dd.p_id] && d.availableProdErr[dd.p_id][dd.rid]){
var iRowId = parseInt(tableRow) + 1;
jqProdTable.find("ul#r" + iRowId).addClass("c-error");
jqProdTable.find("ul#r" + iRowId).find("span.p_count").attr("title", d.availableProdErr[dd.p_id][dd.rid]);
}
}
});
}
}
};
CmsOrders.prototype.showHideSubcontent = function(_this, show){
var oCnt = $(_this).parent().next();
var noskip = oCnt.hasClass("noskip") ? true : false;
var hide = oCnt.is(":visible");
if($.isDefined(show))
hide = !show;
if(hide){
$(_this).addClass("show").removeClass("hide");
oCnt.stop(true, true).fadeOut("fast", function(){
CBase.resizeLeftMenu(true);
if(!noskip)
oCnt.find("input, textarea").addClass("skip");
});
}else{
$(_this).addClass("hide").removeClass("show");
oCnt.stop(true, true).fadeIn("fast", function(){
CBase.resizeLeftMenu(true);
if(!noskip)
oCnt.find("input, textarea").removeClass("skip");
});
}
};
// Function to load subcontent
CmsOrders.prototype.loadSubcontent = function(_this, obj){
var _this = this;
if(obj.hasClass("load")){
CBase.ajax({ action : obj.attr("id")}, _this.url, function(d){
obj.removeClass("load");
if(d && $.isDefined(d.html)){
var html = $(d.html);
obj.parent().next().find("div.clear").before(html);
CBase.checkboxes.bindBaseCheckboxes(html);
//cmsItems.bindSelectorControls(html.parent());
}
_this.showHideSubcontent(obj);
});
}else{
_this.showHideSubcontent(obj);
}
};
return CmsOrders;
})();
}).call(this);