//--- Utility Script //--- (C) Digital Scorpions, India //--- http://www.digitalscorpions.in //--- support@digitalscorpions.in function isJson(str) { try { JSON.parse(str); return true; } catch (e) { return false; } } function dateDiff(sDt, eDt, sorceFmt, returnType = 'd'){ //--- Note: Infomplete! Need modification for time part. //--- Currently working with d, m, y only if(sorceFmt != 'mdy'){ sDt = ChangeDateFormat(sDt, sorceFmt, 'mdy'); eDt = ChangeDateFormat(eDt, sorceFmt, 'mdy'); } milisec = ((new Date(eDt)).getTime() - (new Date(sDt)).getTime()); switch(returnType){ case 's': return milisec/1000; break; case 'i': return milisec/1000/60; break; case 'h': return milisec/1000/60/60; break; case 'd': return milisec/1000/60/60/24; break; case 'm': return (((eDt.getFullYear() - sDt.getFullYear()) * 12) - sDt.getMonth() + eDt.getMonth()); break; case 'y': return (eDt.getFullYear() - sDt.getFullYear()); break; } } function showLoading() { $('.loadAnim').remove(); let bgDiv = $('
') .addClass('loadAnim no-select d-flex justify-content-center align-item-center') .css({ 'width': '100%', 'height': '100%', 'background-color': 'rgba(0,0,0,0.5)', 'position': 'absolute', 'top': '0px', 'left': '0px', 'display': 'none'}); let fr1 = $('
') .css({ 'color': 'rgba(0,0,0,0.5)', 'position': 'absolute', 'top': '45vh', 'left': '45vw', 'font-size': '10vw', 'animation': 'lr 1s ease-in-out infinite' }) .html(''); let fr2 = $('
') .css({ 'color': 'rgba(222,193,2,0.8)', 'position': 'absolute', 'top': '45vh', 'left': '45vw', 'font-size': '10vw', 'animation': 'rl 1s ease-in-out infinite' }) .html(''); bgDiv.append(fr1).append(fr2); $('body').append(bgDiv); $('.loadAnim').fadeIn(); } function hideLoading(){ $('.loadAnim').remove(); } //--- Utility for showing messages function showMessage(mIcon = 'info', mMessage){ mParentTag = "ds_system_message"; mClass = "ds-msgbox col-12 col-md-6 col-lg-4 ml-auto rounded p-1 mb-1 bg-"; switch(mIcon) { case "success": mClass += "success text-white"; break; case "error": mClass += "danger text-white"; break; case "warning": mClass += "warning text-dark"; break; default: mClass += "info text-white"; break; } $("#" + mParentTag).append($("
").addClass(mClass).html("
" + mMessage + "
").delay(5000).hide("slow", "swing", function() { $(this).remove(); })); $("#" + mParentTag + " td:last").append($("").prop("href", "#").html("").on("click", function (e) { e.preventDefault(); $(this).closest('.ds-msgbox').remove(); })); } //--- Utility for opening page in modal dialog box function saveDialogLocation(obj){ obj.prop('original-top', obj.parent().position().top + 1); obj.prop('original-left', obj.parent().position().left + 1); obj.prop('original-height', obj.parent().outerHeight()); obj.prop('original-width', obj.parent().outerWidth() - 7); } function resetDialogs(){ $(".ds-dialog.ds-maximized").dialog({ resizable: false, draggable: false, width: $('#divMain').width() - 15, height: $('#divMain').height(), position: { my: 'left top', at: 'left top', of: $('#divMain') } }) .parent() .draggable({ containment: '#divMain'}); let offsetL = 0, offsetB = 10, totalW = $("#divMain").width(); $(".ds-dialog.ds-minimized").each(function(){ $(this).dialog({ resizable: false, draggable: false, height: 40, minWidth: minWinW - winGap, width: minWinW - winGap, position: { my: 'left bottom', at: 'left+' + offsetL + ' bottom-' + offsetB, of: $('#divMain') } }); if((offsetL + (minWinW*2)) <= totalW){ offsetL += minWinW; } else { offsetL = 0; offsetB += 50; } }); $("#lst").addClass('d-none').removeClass('position-fixed'); } function showDialog(mTitle, mAction, mTarget = 'dialog' + Date.now()){ mThisWin = $('#' + mTarget); if(mThisWin.length > 0){ if(mThisWin.hasClass('ds-minimized')){ mThisWin.closest('.ui-dialog').find('button.ui-dialog-titlebar-close:eq(1)').trigger('click'); } mThisWin.dialog( "moveToTop" ); return false; } tArr = mAction.split('|'); mAction = tArr[0]; //--- Check if Called From Sub Window if($('#divMain').length){ dMain = $('#divMain'); dDown = $('#lstOpenWindow'); } else { dMain = window.parent.$('#divMain'); dDown = window.parent.$('#lstOpenWindow'); } diagW = dMain.width() * tArr[1] / 100; diagH = dMain.height() * tArr[2] / 100; diagPosition = 'center'; if(screen.width < 900){ diagW = dMain.width() - 15; diagH = dMain.height(); diagPosition = 'left top'; } opt = new Option(mTitle, mTarget); dDown.append(opt).selectpicker('refresh') .val(mTarget).selectpicker('refresh') .closest('.form-group').slideDown('slow'); let t = ""; let w = "
"; dMain.append(w); dMain.find('#' + mTarget).dialog({ appendTo: '#divMain', title : t + "   " + mTitle, modal: false, resizable: true, draggable: true, autoOpen: false, closeOnEscape: true, width: diagW, minWidth: minWinW - winGap, height: diagH, minHeight: 40, position: { my: diagPosition, at: diagPosition, of: dMain }, show: { effect: "blind", duration: 500 }, hide: { effect: "blind", duration: 500 }, create: function(){ //--- Add Maximize / Restore Button btn = $(this).parent().find("button:first").clone(); btn.addClass('p-0').css('margin-right', '25px').attr('title', 'Reshape').find('.ui-icon-closethick').removeClass('ui-icon-closethick').addClass('ui-icon-newwin'); btn.html(btn.html().replace("Close", "Reshape")); //--- Maximise / Restore Dialogue btn.click(function(){ obj = $(this).parent().next('.ds-dialog'); $(this).siblings(':hidden').show(); if(obj.hasClass("ds-minimized")) obj.toggleClass('ds-minimized'); else obj.toggleClass('ds-maximized'); if(obj.hasClass("ds-maximized")){ saveDialogLocation(obj); saveDialogLocation(obj); resetDialogs(); } else { obj.dialog({ resizable: true, draggable: true, height: obj.prop('original-height'), width: obj.prop('original-width'), position: { my: 'left top', at: 'left+' + obj.prop('original-left') + ' top+' + obj.prop('original-top'), of: dMain } }) .parent() .draggable({ containment: '#divMain'}); } }); $(this).parent().find(".ui-dialog-titlebar").append(btn); //--- Add Minimize Button in Large Screen btn = $(this).parent().find("button:first").clone(); btn.addClass('p-0').css('margin-right', '50px').attr('title', 'Minimize').find('.ui-icon-closethick').removeClass('ui-icon-closethick').addClass('ui-icon-caret-1-s'); btn.html(btn.html().replace("Close", "Minimize"));; //--- minimize Dialogue btn.click(function(){ obj = $(this).parent().next('.ds-dialog'); obj.addClass('ds-minimized'); if(obj.hasClass("ds-maximized")) obj.removeClass("ds-maximized"); else saveDialogLocation(obj); $(this).hide(); resetDialogs(); }); $(this).parent().find(".ui-dialog-titlebar").append(btn); $(this).parent().find(".ui-dialog-titlebar").dblclick(function(){ $(this).find('button .ui-icon-newwin').trigger('click'); }); }, focus: function() { dDown.val($(this).prop('id')).selectpicker('refresh'); }, close: function () { dDown.find("option[value='" + $(this).prop('id') + "']").remove() dDown.selectpicker('refresh'); if(dDown.find("option").length <= 0) dDown.closest('.form-group').slideUp('slow'); else $('#' + dDown.val()).dialog( "moveToTop" ); dMain.find('#' + $(this).prop('id')).dialog('destroy').remove(); } }) .parent() .draggable({ containment: '#divMain'}) .end() .dialog('open') .find('iframe').attr('src', mAction); } function InitDialog(){ $('.ds-dialog').dialog('destroy').remove(); $('#lstOpenWindow option').remove(); $('#lstOpenWindow').closest('.form-group').slideUp('slow'); } function distributeData(mTarget, result = '', mHide = '', mDtls = false) { if(!mDtls){ //--- Initialize form mTarget.find('.form-group .validate').hide('blind'); mTarget.find('.form-group :input:not(#submit-mode, [data-toggle=toggle])').val(''); mTarget.find('.form-group :input:not(#submit-mode, [data-toggle=toggle])').val(''); mTarget.find('.form-group select').selectpicker('refresh'); mTarget.find('.border-error').removeClass('border-error'); mTarget.find('.form-group input[data-toggle=toggle]').prop('checked', false).change(); if(mHide !== '') $('#P' + mHide + ' option').show(); if(result == '') return true; //--- Populate form var res = $.parseJSON(result); mTarget.find(':input').each(function() { if(typeof $(this).attr('id') !== 'undefined' && typeof res[0][$(this).attr('id')] !== 'undefined') { if(!isJson(res[0][$(this).attr('id')])){ if($(this).attr('data-toggle') == 'toggle'){ $(this).prop('checked', ($(this).data('on-value') == res[0][$(this).attr('id')]) ? true : false).change(); } else { if($(this).attr('type') !== 'password') $(this).val(res[0][$(this).attr('id')]); } if($(this).attr('onchange')){ $(this).trigger('change'); } } else { //--- Load Detail Parts distributeData($("#" + $(this).attr('id')), res[0][$(this).attr('id')], '', true); } } if($(this).attr('id') == 'P' + mHide) $(this).find('option[value="' + $('#' + mHide).val() + '"]').hide(); $(this).hasClass('selectpicker') && $(this).selectpicker('refresh'); }); } else { initTable('#' + mTarget.prop('id') + "-Table"); var res = $.parseJSON(result); alert("In Dtl Part - " + result + " :: " + res.length); for(let i = 0; i < res.length; i++){ if(i > 0) addRow("#" + mTarget.prop('id') + "-Table"); mTargetS = $('#' + mTarget.prop('id') + "-Table tr:last"); alert('Populate Rec. : ' + i); mTargetS.find(':input').each(function() { if(typeof $(this).attr('id') !== 'undefined' && typeof res[0][$(this).attr('id')] !== 'undefined') { if(!isJson(res[0][$(this).attr('id')])){ if($(this).attr('data-toggle') == 'toggle'){ $(this).prop('checked', ($(this).data('on-value') == res[0][$(this).attr('id')]) ? true : false).change(); } else { if(isDate(res[0][$(this).attr('id')])) res[0][$(this).attr('id')] = ChangeDateFormat(res[0][$(this).attr('id')], "ymd", "dmy"); if($(this).attr('type') !== 'password') $(this).val(res[0][$(this).attr('id')]); } } else { //--- Load Detail Parts distributeData($("#" + $(this).attr('id')), res[0][$(this).attr('id')], '', true); } } if($(this).attr('id') == 'P' + mHide) $(this).find('option[value="' + $('#' + mHide).val() + '"]').hide(); $(this).hasClass('selectpicker') && $(this).selectpicker('refresh'); }); } } } //--- Utility for loading form in Div on click on list function loadForm(mTitle, mAction, mTarget, mHide = ''){ mTitle = ((mTitle=='New Record') ? 'Add : ' : 'Edit : ') + mTitle; mTarget.find('#secTitle').html("" + mTitle); //--- Make the form Empty distributeData(mTarget.find('#secBody')); const a = mAction.split('?'); $.ajax({ type: 'POST', url: a[0], data: "submit-mode=LOAD_DATA&" + a[1], success: function(result) { mTarget.find('#secTitle').html(mTitle); if(result.indexOf('||') >=0){ var res = result.split('||'); showMessage(res[0], res[1]); } else { //alert(result); distributeData(mTarget.find('#secBody'), result, mHide); } //mTarget.find('#secTitle') } }); } //--- Convert Dialog Title to HTML $.widget("ui.dialog", $.extend({}, $.ui.dialog.prototype, { _title: function(title) { title.html(this.options.title); } })); String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); }; String.prototype.replaceAll = function(stringToFind,stringToReplace){ var temp = this; mHoldString = stringToReplace; stringToReplace = "<£Ü>"; var index = temp.indexOf(stringToFind); while(index != -1){ temp = temp.replace(stringToFind,stringToReplace); index = temp.indexOf(stringToFind); } stringToFind = "<£Ü>"; stringToReplace = mHoldString; var index = temp.indexOf(stringToFind); while(index != -1){ temp = temp.replace(stringToFind,stringToReplace); index = temp.indexOf(stringToFind); } return temp; } String.prototype.toCapitalize = function(force = false){ if(this.trim() !== ''){ force && this.toLowerCase(); words = this.split(' '); for(i = 0; i < words.length; i++) words[i] = words[i][0].toUpperCase() + words[i].substr(1); return words.join(' '); } return this; } function formatUnixTimestamp(unixTimestamp) { var date = new Date(unixTimestamp * 1000); // Convert to milliseconds var day = ('0' + date.getDate()).slice(-2); // Add leading zero var month = ('0' + (date.getMonth() + 1)).slice(-2); // Months are zero-based var year = date.getFullYear(); var hours = ('0' + date.getHours()).slice(-2); var minutes = ('0' + date.getMinutes()).slice(-2); return `${day}/${month}/${year} ${hours}:${minutes}`; } function isDate(dateString) { var regEx = /^\d{4}-\d{2}-\d{2}$/; return dateString.match(regEx) != null; } function ChangeDateFormat(Dt, Fmt, RetFmt) { switch(Fmt) { case "dmy": y=6; m=3; d=0; b1=2; b2=5; break; case "mdy": y=6; m=0; d=3; b1=2; b2=5; break; case "myd": y=3; m=0; d=8; b1=2; b2=7; break; case "dym": y=3; m=8; d=0; b1=2; b2=7; break; case "ydm": y=0; m=8; d=5; b1=4; b2=7; break; default: //"ymd": y=0; m=5; d=8; b1=4; b2=7; break; } mRet = ""; switch(RetFmt) { case "ymd": mRet = Dt.substr(y,4) + '/' + Dt.substr(m,2) + '/' + Dt.substr(d,2); break; case "mdy": mRet = Dt.substr(m,2) + '/' + Dt.substr(d,2) + '/' + Dt.substr(y,4); break; case "myd": mRet = Dt.substr(m,2) + '/' + Dt.substr(y,4) + '/' + Dt.substr(d,2); break; case "dym": mRet = Dt.substr(d,2) + '/' + Dt.substr(y,4) + '/' + Dt.substr(m,2); break; case "ydm": mRet = Dt.substr(y,4) + '/' + Dt.substr(d,2) + '/' + Dt.substr(m,2); break; default: //"dmy": mRet = Dt.substr(d,2) + '/' + Dt.substr(m,2) + '/' + Dt.substr(y,4); break; } return mRet; } //---------- function isTime(Tm, Fmt){ if(!Fmt){Fmt="hms";} h=0; m=3; s=6; b1=2; b2=5; b3=8; ap=9; if(isNaN(Tm.substr(h,2)-0)||(Tm.substr(h,2)-0<0) || (Tm.substr(h,2)-0>12)) return false; if(Tm.substr(b1,1)!=":") return false; if(isNaN(Tm.substr(m,2)-0)||(Tm.substr(m,2)-0<0) || (Tm.substr(m,2)-0>59)) return false; if(Tm.substr(b2,1)!=":") return false; if(isNaN(Tm.substr(s,2)-0)||(Tm.substr(s,2)-0<0) || (Tm.substr(s,2)-0>59)) return false; if(Tm.substr(b3,1)!=" ") return false; if(Tm.substr(ap,2).toUpperCase()!="AM" && Tm.substr(ap,2).toUpperCase()!="PM") return false; return true; } //.............. function isEmail(Ml){ if(!Ml){return true} if(Ml.indexOf("@")<=0 || Ml.indexOf("@")==Ml.length-1 || Ml.indexOf(".")<=0 || Ml.indexOf(".")==Ml.length-1 || Ml.indexOf("..")!=-1 || Ml.indexOf("@@")!=-1 || Ml.indexOf("{")!=-1 || Ml.indexOf("}")!=-1 || Ml.indexOf("(")!=-1 || Ml.indexOf(")")!=-1 || Ml.indexOf("[")!=-1 || Ml.indexOf("]")!=-1 || Ml.indexOf("@.")!=-1 || Ml.indexOf(".@")!=-1) return false; else return true; } //.............. function isInt(theNum) { if(Trim(theNum) == "") return true; else if(theNum.indexOf(".") != -1) return false; else if(!isNaN(theNum)) return true; } function isDecimal(str) { mystring = str; if (mystring.match(/^\d+\.\d/ )) return true; else if(isInt(mystring)) return true; else return false; } function Trim(s){return LTrim(RTrim(' '+s));} //.............. function LTrim (s){ if(!s){return '';} while(s.charAt(0)==' ') s = s.substring(1,s.length); return s; } //.............. function RTrim (s){ if(!s || s==' '){return '';} if (s.length > 1){ while(s.charAt(s.length-1)==' ') s = s.substring(0,s.length-2); return s; } } function setNumRange(t) { if(!t.value) return if(t.value - 0 < t.min - 0){ showMessage('error', 'Invalid out of range value.'); t.value = t.min; } if(t.value - 0 > t.max - 0){ showMessage('error', 'Invalid out of range value.'); t.value = t.max; } } function addRow(mTable) { m = $(mTable).find("tr:last").clone(); m.find(":input[type!='checkbox']").val(''); m.find(".border-error").removeClass('border-error'); m.find("[actual-type='toggle']").next().remove().end().unwrap().bootstrapToggle(); m.find(".selectpicker").next().remove().end().next().remove().end().unwrap().selectpicker(); $(mTable).append(m); $(mTable).trigger('change'); } //.............. function initTable(mTable){ do { delRow(mTable, $(mTable + " td:last")); } while($(mTable).find("tr").size() > 2); } function delRow(mTable, t) { if($(mTable).find("tr").size() > 2) t.closest('tr').remove(); else if($(mTable).find("tr").size() > 1){ t.closest('tr').find('input[type!=button]').val(''); t.closest('tr').find(".border-error").removeClass('border-error'); } $(mTable).trigger('change'); } var isSupported = function (t) { var input = document.createElement('input'); var v = 'a'; input.setAttribute('type', t); input.setAttribute('value', v); return (input.value !== v); }; $(function (){ if(!isSupported('date')){ $(document).on('focus', '[type=date]', (e) => { $(e.target).datepicker( "destroy" ).datepicker({ constrainInput: true, dateFormat: 'yy-mm-dd', changeMonth: true, changeYear: true, minDate: $(e.target).attr('min'), maxDate: $(e.target).attr('max') }).datepicker("show"); }); } if(!isSupported('month')){ $(document).on('focus', '[type=month]', (e) => { var today = new Date(); var dd = String(today.getDate()).padStart(2, '0'); var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0! var yyyy = today.getFullYear(); if(!$(e.target).val()) $(e.target).val(yyyy + '-' + mm); if(!$(e.target).attr('min')) $(e.target).val($(e.target).sttr('min').substring(0,7)); $(e.target).datepicker( "destroy" ).datepicker({ defaultDate : new Date($(e.target).val() + "-15"), constrainInput: true, dateFormat: "yy-mm", changeMonth: true, changeYear: true, showButtonPanel: true, onClose: function() { var iMonth = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); var iYear = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); $(this).datepicker('setDate', new Date(iYear, iMonth, 1)); } }).datepicker("show"); $("#ui-datepicker-div table.ui-datepicker-calendar").css('display', 'none'); }); } }); // Initialize and add Google Map function loadURL(mId, mURL) { mlat = 22.51155; mlng = 88.36536; mId.html(''); } function openFullscreen(elem) { if (elem.requestFullscreen) { elem.requestFullscreen(); } else if (elem.webkitRequestFullscreen) { /* Safari */ elem.webkitRequestFullscreen(); } else if (elem.msRequestFullscreen) { /* IE11 */ elem.msRequestFullscreen(); } } //--- Table to JSON function TableToJSON(oTbl) { mData = ""; oTbl.find('tbody tr').each(function(){ mData1 = ""; $(this).find('td input, td select').each(function(){ if(mData1 != "") {mData1 += ", ";} if($(this).attr("actual-type") == "toggle"){ mData1 += '"' + $(this).attr('id') + '" : "' + ( $(this).prop('checked')==true ? $(this).attr('data-on-value') : $(this).attr('data-off-value') ) + '"'; } else mData1 += '"' + $(this).attr('id') + '" : "' + $(this).val() + '"'; }); if(mData1 != ""){ if(mData != "") {mData += ", ";} mData += "{" + mData1 + "}"; } }); if(mData != "") {mData = "[" + mData + "]";} return mData; } //--------------------- //JSON To Table function JSONToTable(r, cls = ""){ let res = $.parseJSON(r); let thead = ""; let tbody = ""; let align = ""; for(let j2t_i=0; j2t_i < res.length; j2t_i++){ tbody += ""; for (let j2t_x in res[j2t_i]) { var j2tHd = j2t_x.split('_'); if(parseInt(j2tHd[1]) !== 0) mStyle = "width: " + j2tHd[1] + "%;"; else mStyle = "display: none;"; align = ""; if(j2tHd[2] == 'BTN') align = "text-center"; if(!isNaN(res[j2t_i][j2t_x])) align = "text-right"; if(j2t_i == 0){ thead += "" + j2tHd[0] + ""; } if(isDate(res[j2t_i][j2t_x])) res[j2t_i][j2t_x] = ChangeDateFormat(res[j2t_i][j2t_x], 'ymd', 'dmy'); tbody += "" + res[j2t_i][j2t_x] + ""; } tbody += ""; } thead += ""; tbody += ""; return "" + thead + tbody + "
"; } function FormToJSON(form) { var array = form.serializeArray(); var json = {}; $.each(array, function() { json[this.name] = this.value || ''; }); return JSON.stringify(json); } function getRandom(len = 6){ let enc = window.btoa($.now()).replaceAll("=", "").replaceAll("O", "0").toUpperCase(); return enc.substr(enc.length - len); } function getQueryString(formID, fldList){ var fieldArray = fldList.split(','); var queryString = ""; fieldArray.forEach(function(field) { queryString += $("#" + formID).find(":input[name='" + field.trim() + "']").serialize() + "&"; }); // Remove the trailing ampersand queryString = queryString.slice(0, -1); return queryString }