(function() { if($.isFunction(Validator)){ /** * Function to show field errors by field object error cfg * * @this {Validator} * @author Mareks Keišs * @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 * @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 = $(""); 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 = $("").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);