function getDocumentUrl(doc,id)
{
    var dc = {
        "FUND_TRANSFER":"",
        "DEBIT_INVOICE":"",
        "DEBIT_NOTE":"",
        "SALES_INVOICE":"",
        "PURCHASE_INVOICE":"/workspace/purchase/purchase_invoice/edit?id="+id,
        "EXPANCE_CLAME":"",
        "PAYMENT_ENTRY":"",
        "POS":"",
        "EXPANCE_INVOICE":"",
        "POS_SUMMRIZATION":"",
        "TDS":"",
        "INVOICE":""
    }
    return dc[doc]
}
Date.prototype.toName=function()
{
    return (1900+this.getYear())+"-"+((this.getMonth()+1)+"").padStart(2,"0")+"-"+(this.getDate()+"").padStart(2,"0");
}
function PROFILE_HANDLER()
{
    this._onSelect = null;
    this.otpVarification = false;
    this.securityToken=null;
    this._onCancel = null;
    this.onCancel=function(callback)
    {
        this._onCancel=callback;
    }
    this.query = function(data)
    {
        this.data = data
        if(this.otpVarification)
        {
            var base = this;
            var contact = this.data.mobile;
            if (contact == "")
            {
                contact = this.data.email;
            }
            //  base.otpWindow();
            
            ajaxJson("/www/sendOtp","csrfmiddlewaretoken="+csrf_token+"&contact="+contact,function(resp)
            {
                if(resp.type=="success")
                {
                    base.otpWindow();
                }
            })
            
            
        }
        else
        {
            this.queryWindow();
        }
    }
    this.onSelect = function(callback)
    {
        this._onSelect = callback
    }
    this.otpWindow=function()
    {
        var f = SC.form();
        var base = this;
        var dc = new UIDoc(f.content);
        var contact = this.data.mobile;
        if(contact=="")
        {
            contact = this.data.email;
        }
        
        if (contact == undefined)
        {
            contact = this.data.email;
        }
        dc.setStructure({
        "id":"otp",
        "name":"OTP Confirmation",
        "mode":"form",
        "isEditable":true,
        "isSubmitable":false,
        "fields":[
            {"id":"contact","name":"Contact","type":"Div","default":contact},
            {"id":"otp","name":"OTP","type":"TextBox"},
            {"id":"submit","name":"","type":"Button","default":"Submit"},
        ]
        })
        dc.onclick("submit",function(obj,row)
        {
            dc.sync();
        ajaxJson("/www/checkOtp","csrfmiddlewaretoken="+csrf_token+"&contact="+contact+"&otp="+dc.otp.value(),function(resp)
        {
            if(resp.type=="success")
            {
                if(resp.extra.length==0)
                {
                    alert("No record found.");
                    f.close();
                    base._onSelect([]);
                }
                else
                {
                    list = new UIListOfValue(f.content);
                    
                    list.loadOptionFromJson(resp.extra,{"code":"profile_id","name":"name"});
                    list.listColumns(["profile_id","name","mobile","address","awgp_account"])
                    list.onchange(function(obj)
                    {
                        f.close();
                        base._onSelect(obj);
                    });
                    list.showList();
                }
            }
            else
            {
            docResponse(resp);
            }
        })
        })
        dc.update();
    }
    this.queryWindow=function()
    {
        var base = this;
        qForm = SC.form("Select AWGP Profile");
        qForm.closeButton.remove();
        var d = new UIObject("div",qForm.content);
        d.style({"width":"100%"});
        var d2 = new UIObject("div",qForm.content);
        d2.style({"width":"100%"});


        l1 = new UIDoc(d);
        l1.setStructure({
            "id":"profileQuery",
            "name":"",
            "mode":"form",
            "isSubmitable":"False",
            "isEditable":"True",
            "fields":[
                {"id":"name","name":"Name","type":"TextBox"},            
                {"id":"city","name":"District","type":"UIListOfValue","binding":{"code":"code","name":"name"}},
                {"id":"mobile","name":"Mobile","type":"TextBox","column":"2"},
                {"id":"email","name":"Email","type":"TextBox","column":"2"},
                {"id":"submit","name":"","type":"Button","default":"Search","style":{"margin-top":"10px","color":"#fff","background-color":"#6777EF","border-color":"#007bff"}},   
                {"id":"close","name":"","type":"Button","column":2,"default":"Close","style":{"margin-top":"10px","color":"#fff","background-color":"#6777EF","border-color":"#007bff"}},   
            ]
        })
        l1.onclick("close",function()
        {
            if(base._onCancel!=null && base._onCancel!=undefined)
            {
                base._onCancel();
            }
            qForm.close();
        })
        l1.onclick("submit",function()
        {
            ajaxJson("/api/organization/profile_member/query","csrfmiddlewaretoken="+csrf_token+"&securityToken="+base.securityToken+"&data="+JSON.stringify(l1.value()),function(resp)
            {
                if(resp.extra.length==0)
                {
                    alert("No record found")
                    base._onSelect(null);
                }
                else if(resp.extra.length==1)
                {
                    base._onSelect(resp.extra[0]);
                }
                else
                {
                    d3 = new UIObject("div",d2);
                    d3.style({"height":"300px","overflow":"auto"});
                    
                    
                    l = new UIListOfValue(d3)
                    l.style({"display":"none"});
                    l.onchange(function(obj)
                    {
                        if(obj!=null)
                        {
                            if(base._onSelect!=null)
                            {
                                base._onSelect(obj)
                            }
                            
                        }
                        else
                        {
                            if(base._onCancel!=null)
                            {
                                base._onCancel(l);
                            }
                        }
                        
                    })
                    qForm.close();
                    l.listView=null;
                    l.loadOptionFromJson(resp.extra,{"code":"profile_id","name":"name"});
                    l.listColumns(["profile_id","name","mobile","permanent_address"])
                    l.searchColumns(["profile_id",{"name":"like"}]);
                    l.style({"width":"400px"})
                    l.showList();
                    l.listView.header.getChild()[0].getChild()[0].object.focus();
                }
                

            });
        })
        l1.update();
        if(this.data.mobile!=undefined)
        {
            l1.mobile.value(this.data.mobile);
            l1.submit.object.click();
            qForm.close();
        }
        if(this.data.email!=undefined)
        {
            l1.email.value(this.data.email);
            l1.submit.object.click();
            qForm.close();
        }
        // ajaxJson('/api/hrm/emp_master/get?data={"code":"","name":""}&order=["name"]',"csrfmiddlewaretoken="+csrf_token,function(resp)
        // {
        //     l1.name.loadOptionFromJson(resp.extra);
        //     l1.name.value("");
        // },true);
        ajaxJson('//yugrishi.awgp.org/api/core/city/get?data={"code":"","name":""}&order=["name"]',"csrfmiddlewaretoken="+csrf_token,function(resp)
        {
            l1.city.loadOptionFromJson(resp.extra);
            l1.city.value("");
        },true);
    }
}


function queryProfile(callback,data,otpConfirmation,securityToken,cancelCallback)
{
    if(typeof securityToken=="undefined")
    {
        securityToken=null;
    }
    if(otpConfirmation==undefined)
    {
        otpConfirmation=false;
    }
    // if(data==undefined)
    // {
    //     data={};
    // }
    
    // if(otpConfirmation==false)
    // {
    //     openProfileQueryList(callback,data);
    // }

    profileHander = new PROFILE_HANDLER();
    profileHander.securityToken=securityToken;
    profileHander.otpVarification=otpConfirmation;
    profileHander.onCancel(cancelCallback);
    profileHander.onSelect(callback);
    profileHander.query(data);
    

}
YRItemList = null;
function _updateItemList(callback,warehouse,pricelist,invoiceProfile,taxModel)
{
    ajaxJson("/api/inventory/item_master/getItemList","csrfmiddlewaretoken="+csrf_token+"&warehouse="+warehouse+"&pricelist="+pricelist+"&invoiceProfile="+invoiceProfile+"&taxModel="+taxModel,function(resp)
    {
        YRItemList = resp.extra;
        if(callback!=undefined)
        {
            callback();
        }
    })
}

function selectItemDetail(callback,item_code,warehouse,pricelist,focusObject)
{
    var f = SC.form("Product Selection")
    var dc = new UIDoc(f.content)
    dc.setStructure({
        "id":"itemList",
        "name":"Item Selector",
        "mode":"form",
        "isEditable":true,
        "isSubmitable":false,
        "columns":1,
        "fields":[
            
            {"id":"detail","name":"Product Detail","type":"UIListOfValue","property":{"searchColumns":[{"name":"like"},{"code":"like"}]}},
        ]
    })
    dc.onchange("detail",function(obj,data)
    {
        var detail = obj.getSelected();
        if(detail==null)
        {
            return;
        }
        f.close();
        if(focusObject!=undefined)
        {
            focusObject.focus();
        }
        callback(dc.detail.getSelected());
        
    })
    dc.update();
    dc.update();
    if(warehouse==undefined)
    {
        ajaxJson("/api/inventory/item_master/itemItemSpecification?item="+item_code,"csrfmiddlewaretoken="+csrf_token,function(resp)
        {
            if(resp.extra.specification.length==0)
            {
                f.close();
                if(focusObject!=undefined)
                {
                    focusObject.focus();
                }
                callback(dc.detail.getSelected());
                return;
            }
            else
            {
                dc.detail.loadOptionFromJson(resp.extra.specification);
                dc.detail.showList();
            }
            
        })
    }
    else
    {
        ajaxJson("/api/inventory/item_master/getItemDetail?item="+item_code+"&warehouse="+warehouse+"&pricelist="+pricelist,"csrfmiddlewaretoken="+csrf_token,function(resp)
        {
            if(resp.extra.length==0)
            {
                f.close();
                if(focusObject!=undefined)
                {
                    focusObject.focus();
                }
                callback(dc.detail.getSelected());
                
                return;
            }
            else
            {
                dc.detail.loadOptionFromJson(resp.extra);
                dc.detail.showList();
            }
            
        })
    }
}
function selectItem(callback,warehouse,pricelist,focusObject,onlyItem,invoiceProfile,taxModel)
{
    
    if(warehouse==null)
    {
        warehouse=undefined;
    }
    if(pricelist==null)
    {
        pricelist=undefined;
    }
    if(typeof invoiceProfile=="undefined")
    {
        invoiceProfile=""
    }
    if(typeof warehouse!="undefined" && (warehouse == ""))
    {
        alert("Please select warehouse first");
        return;
    }
    if(typeof pricelist!="undefined" && (pricelist == "" || pricelist==null))
    {
        alert("Please select pricelist first");
        return;
    }
    if(typeof onlyItem=="undefined")
    {
        onlyItem=true;
    }
    if(typeof focusObject=="undefined")
    {
        focusObject=null;
    }
    if(typeof taxModel=="undefined")
    {
        taxModel=null;
    }
    function _showItemSelectorView()
    {   
        var f = SC.form("Product Selection")
        var dc = new UIDoc(f.content)
        dc.setStructure({
            "id":"itemList",
            "name":"Item Selector",
            "mode":"form",
            "isEditable":true,
            "isSubmitable":false,
            "columns":1,
            "fields":[
                {"id":"item","name":"Product","type":"UIListOfValue","property":{"searchColumns":[{"name":"like"},{"code":"equle"}],"pageSize":"100"}},
                {"id":"detail","name":"Product Detail","type":"UIListOfValue","property":{"multiSelect":false,"listColumns":["code","name","stock"],"searchColumns":[{"name":"like"},{"code":"equle"}]}},
            ]
        })
        dc.onchange("item",function(obj,data)
        {
            
            var item = obj.getSelected();
            if(item==null)
            {
                return;
            }
            if(warehouse==undefined)
            {
                ajaxJson("/api/inventory/item_master/itemItemSpecification?item="+item.code+"&invoiceProfile="+invoiceProfile,"csrfmiddlewaretoken="+csrf_token,function(resp)
                {
                    if(resp.extra.specification.length==0)
                    {
                        f.close();
                        if(focusObject!=undefined)
                        {
                            focusObject.focus();
                        }
                        callback(dc.item.returnObject,dc.detail.returnObject);
                        return;
                    }
                    else
                    {
                        if(onlyItem==true)
                        {
                            dc.detail.loadOptionFromJson(resp.extra.specification);
                            dc.detail.showList();
                        }
                        else
                        {
                            f.close();
                            if(focusObject!=undefined)
                            {
                                focusObject.focus();
                            }
                            callback(dc.item.returnObject,dc.detail.returnObject);
                            return;
                        }
                        
                    }
                    
                })
            }
            else
            {
                ajaxJson("/api/inventory/item_master/getItemDetail?item="+item.code+"&warehouse="+warehouse+"&pricelist="+pricelist+"&invoiceProfile="+invoiceProfile,"csrfmiddlewaretoken="+csrf_token,function(resp)
                {
                    if(resp.extra.length==0)
                    {
                        f.close();
                        if(focusObject!=undefined)
                        {
                            focusObject.focus();
                        }
                        callback(dc.item.returnObject,dc.detail.returnObject);
                        
                        return;
                    }
                    else
                    {
                        if(onlyItem==true)
                        {
                            dc.detail.loadOptionFromJson(resp.extra);
                            dc.detail.showList();
                        }
                        else
                        {
                            f.close();
                            if(focusObject!=undefined)
                            {
                                focusObject.focus();
                            }
                            callback(dc.item.returnObject,dc.detail.returnObject);
                            
                            return;
                        }
                        
                    }
                    
                })
            }
            
        })
        dc.onchange("detail",function(obj,data)
        {
            var detail = obj.getSelected();
            if(detail==null)
            {
                return;
            }
            f.close();
            if(focusObject!=undefined)
            {
                focusObject.focus();
            }
            callback(dc.item.returnObject,dc.detail.returnObject);
            
        })
        dc.update();
        
        dc.item.loadOptionFromJson(YRItemList);
        dc.item.showList();


        var b = new UIObject("button",f.tools);
        b.innerHTML("Select");
        b.className("awgp-button awgp-whight");
        b.onclick(function()
        {
            callback(dc.item.returnObject,dc.detail.returnObject);
        })

        var show = new UIObject("button",f.tools);
        show.innerHTML("Refresh Item List");
        show.className("awgp-button awgp-whight");
        show.onclick(function()
        {
            f.close();
            _updateItemList(function()
            {
                _showItemSelectorView()
            },warehouse,pricelist,invoiceProfile,taxModel)
        })

    }
    if(YRItemList==null)
    {
        _updateItemList(function()
        {
            _showItemSelectorView()
        },warehouse,pricelist,invoiceProfile,taxModel);
    }
    else
    {
        _showItemSelectorView();
    }
}

function docResponse(resp,success,failure)
{
    var resp = new Response(resp);
    if(resp.isError()==true)
    {
        resp.showMessage();
        if(typeof(failure) != "undefined")
        {
            return failure(resp)
        }
        return false;
    }
    else
    {
        resp.showMessage();
        if(typeof(success) != "undefined")
        {
            return success(resp)
        }
        return true;
    }
}



function printToolbar(view,reportObj,download,pageControl,parm,efile,filename)
{

    if(typeof download=="undefined")
    {
        download=true;
    }

    if(typeof efile=="undefined")
    {
        efile=false;

    }    

    if(typeof pageControl=="undefined")
    {
        pageControl=true;
    }

    if(typeof reportObj!=undefined)
    {
        reportView = reportObj;
    }
    if(typeof parm==undefined)
    {
        parm = {}
    }
    var rt = new UIObject("div",view);
    rt.className("noPrint");
    rt.style({"marginTop":"40px","botder":"1px solid #000"})

    st = {"page":"A4","oriantation":"portrait","margin":"1cm","scale":"14px"};

    var stTag = new UIObject("style","head");
    
    stTag.innerHTML("@media print{ body,table{font-size: "+st.scale+"; } @page{  size: "+st.page+" "+st.oriantation+"; }}")


    var p = new UIObject("button",rt);
    p.innerHTML("Print");
    p.className("awgp-button awgp-whight");
    p.onclick(function()
    {
        window.scrollTo(0, 0);
        window.print();
    });


    if(pageControl)
    {
        var l1 =new UIObject("span",rt);
        l1.innerHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Page Size: ");
        var page = new UIObject("ComboBox",rt);
        page.addOption("A4","A4");
        page.addOption("A5","A5");
        page.addOption("JIS B5","JIS B5");
        page.value(st.page);
        page.className("awgp-button awgp-whight");
        page.style({"width":"unset"});
        page.onchange(function()
        {
            st.page = this.handler.value();
            stTag.innerHTML("@media print{ body,table{font-size: "+st.scale+"} @page{  size: "+st.page+" "+st.oriantation+"; margin: "+st.margin+"}}")
        })


        var l1 =new UIObject("span",rt);
        l1.innerHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Orientation: ");
        var oriantation = new UIObject("ComboBox",rt);
        oriantation.id("page_oriantation")
        oriantation.addOption("Portrait","portrait");
        oriantation.addOption("Landscape","landscape");
        oriantation.value(st.oriantation);
        oriantation.style({"width":"unset"});
        oriantation.className("awgp-button awgp-whight");
        oriantation.onchange(function()
        {
            st.oriantation = this.handler.value();
            stTag.innerHTML("@media print{ body,table{font-size: "+st.scale+"} @page{  size: "+st.page+" "+st.oriantation+"; margin: "+st.margin+"}}")
        })

        // var l1 =new UIObject("span",rt);
        // l1.innerHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Margin: ");
        // var margin = new UIObject("ComboBox",rt);
        // margin.addOption("1 CM","1cm");
        // margin.addOption("1.5 CM","1.5cm");
        // margin.addOption("0.5 CM","5mm");
        // margin.addOption("None","0px");
        // margin.value(st.margin);
        // margin.className("awgp-button awgp-whight");
        // margin.style({"width":"unset"});
        // margin.onchange(function()
        // {
        //     st.margin = this.handler.value();
        //     stTag.innerHTML("@media print{ body,table{font-size: "+st.scale+"} @page{  size: "+st.page+" "+st.oriantation+"; margin: "+st.margin+"}}")
        // })
        // margin.style({"width":"unset"});


        var l1 =new UIObject("span",rt);
        l1.innerHTML("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Font Size: ");
        var scale = new UIObject("ComboBox",rt);
        scale.addOption("Normal","14px");
        scale.addOption("Small","12px");
        scale.addOption("Very Small","10px");
        scale.addOption("Big","16px");
        scale.value(st.scale);
        scale.className("awgp-button awgp-whight");
        scale.style({"width":"unset"});
        scale.onchange(function()
        {
            st.scale = this.handler.value();
            stTag.innerHTML("@media print{ body,table{font-size: "+st.scale+"} @page{  size: "+st.page+" "+st.oriantation+"; margin: "+st.margin+"}}")
        
        })



    
    
    }
    

    if(download==true)
    {
        var p = new UIObject("button",rt);
        p.innerHTML("Download");
        p.className("awgp-button awgp-whight");
        p.onclick(function()
        {
            var fn = reportView.struct.name;
            if(typeof filename !="undefined")
            {
                fn=filename
            }
            if(fn=="" || fn==undefined||fn==null)
            {
                fn="noname"
            }
            reportView.downloadCSV(fn+".csv",parm,true);
        });
    }

    if(efile==true)
    {
        var p = new UIObject("button",rt);
        p.innerHTML("Save as E-File");
        p.className("awgp-button awgp-whight");
        p.onclick(function()
        {
            var pStr = "<div>"
            var name = ""
            if(parm!=null)
            {

            
                parm.sync();
                var p = parm.getDisplayValue();
                
                for(var k in p[0])
                {
                    pStr += "<div>"+p[0][k].name+" : "+p[0][k].displayValue+"</div>"
                    name += p[0][k].displayValue+", "
                }

                
            }
            pStr+="</div><br><br>"
            var data = Base64.encode(pStr+reportView.base.object.outerHTML)
            
            ajaxJson("/api/digital_docs/efile/saveAutoFile","csrfmiddlewaretoken="+csrf_token+"&name="+filename+" - "+name+"&data="+data,function(resp)
            {
                docResponse(resp)
            })
        });
    }
    
}

function roundOff2(value)
{
    var place = 2;
    var p = paddy(1,place,"0")
    p = parseInt(p)
    value = value * p
    value = Math.round(value) / p;
    return value; 
}


function roundOff4(value)
{
    var place = 4;
    var p = paddy(1,place,"0")
    p = parseInt(p)
    value = value * p
    value = Math.round(value) / p;
    return value; 
}

function ddmmyy(value)
{
    if(value=="")
    {
        return "";
    }
    var d = new Date(Date.parse(value))
    var str =   String(d.getDate()).padStart(2,"0")+"/"
                +String(d.getMonth()+1).padStart(2,"0")+"/"
                +String(d.getYear()-100).padStart(2,"0")
    return str;
}

function ddmmyyyy(value)
{
    if(value=="")
    {
        return "";
    }
    var d = new Date(Date.parse(value))
    var str =   String(d.getDate()).padStart(2,"0")+"/"
                +String(d.getMonth()+1).padStart(2,"0")+"/"
                +String(d.getFullYear()).padStart(2,"0")
    return str;
}


function money_balance(value)
{
    if(value=="" || value == null || value==0)
    {
        return "Nill";
    }
    if(value>0)
    {
        var f = formats.formatIndianMoney(value);
        return "<e style='color:#0A0'>"+f+" DR</e>";
    }
    else if(value<0)
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#F00'>"+f+" CR</e>";
    }
    else
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#00F'></e>";
    }
    
}


function money_cr(value)
{
    if(value=="" || value == null || value==0)
    {
        return "Nill";
    }
    if(value>0)
    {
        var f = formats.formatIndianMoney(value);
        return "<e style='color:#080'>"+f+" CR</e>";
    }
    else if(value<0)
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#F00'>"+f+" DR</e>";
    }
    else
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#00F'></e>";
    }
    
}


function money_dr(value)
{
    if(value=="" || value == null || value==0)
    {
        return "Nill";
    }
    if(value>0)
    {
        var f = formats.formatIndianMoney(value);
        return "<e style='color:#080'>"+f+" DR</e>";
    }
    else if(value<0)
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#F00'>"+f+" CR</e>";
    }
    else
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#00F'></e>";
    }
    
}

function money_dr_cr(value)
{
    if(value=="" || value == null || value==0)
    {
        return "Nill";
    }
    if(value>0)
    {
        var f = formats.formatIndianMoney(value);
        return "<e style='color:#F00'>"+f+" DR</e>";
    }
    else if(value<0)
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#080'>"+f+" CR</e>";
    }
    else
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#00F'></e>";
    }
    
}

function money_cr_dr(value)
{
    if(value=="" || value == null || value==0)
    {
        return "Nill";
    }
    if(value>0)
    {
        var f = formats.formatIndianMoney(value);
        return "<e style='color:#080'>"+f+" DR</e>";
    }
    else if(value<0)
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#F00'>"+f+" CR</e>";
    }
    else
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#00F'></e>";
    }
    
}

function money_minus(value)
{
    if(value=="" || value == null || value==0)
    {
        return "Nill";
    }
    if(value>0)
    {
        var f = formats.formatIndianMoney(value);
        return "<e style='color:#080'>"+f+"</e>";
    }
    else if(value<0)
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#F00'>("+f+")</e>";
    }
    else
    {
        var f = formats.formatIndianMoney(0-value);
        return "<e style='color:#00F'></e>";
    }
    
}


function activityLogForm(event,id,path,callback,title,disposition)
{
    if(title == undefined)
    {
        title = "Action Detail";
    }
    if(message==undefined)
    {
        message = "Why are you apply this change? please tell more"
    }
    var win = SC.form();
    var wDoc = new UIDoc(win.content);
    wDoc.setStructure({
        "id":"docCancilation",
        "name":title,
        "mode":"form",
        "isEditable":true,
        "isSubmitable":false,
        "columns":1,
        "fields":[
            {"id":"resion","name":message,"type":"TextArea"}
        ]
    });
    wDoc.update();
    var submit = new UIObject("button",win.tools);
    submit.className("awgp-button awgp-whight");
    submit.innerHTML("OK");
    submit.onclick(function()
    {
        win.close();
        ajaxJson("/api/core/activity_log/event","csrfmiddlewaretoken="+csrf_token+"&id="+id+"&event="+event+"&path="+path+"&text="+wDoc.resion.value(),function(resp)
        {
            if(resp.type=="success")
            {
                
                callback(resp)
                
            }
            else
            {
                docResponse(resp);
            }
        })
        
    })
}

function downloadResponse(response,filename,type,description)
{
        
        var blob = new Blob([response], { type: type });

        if (typeof window.navigator.msSaveBlob !== 'undefined') {
            // IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
            window.navigator.msSaveBlob(blob, filename);
        } else {
            var URL = window.URL || window.webkitURL;
            var downloadUrl = URL.createObjectURL(blob);

            if (filename) {
                // use HTML5 a[download] attribute to specify filename
                var a = document.createElement("a");
                // safari doesn't support this yet
                if (typeof a.download === 'undefined') {
                    window.location = downloadUrl;
                } else {
                    a.href = downloadUrl;
                    a.download = filename;
                    document.body.appendChild(a);
                    a.click();
                }
            } else {
                window.location = downloadUrl;
            }

            setTimeout(function () { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
        }
}

function addWidgetLable(base,label,value,color)
{
    var info = new UIObject("div",base);
    info.block = new UIObject("div",info);
    info.block.style({"float":"left","border":"1px solid "+color,"padding":"10px","margin":"10px","minWidth":"80px","textAlign":"center"});
    info.text = new UIObject("div",info.block);
    info.text.style({"fontSize":"20px","color":color});
    info.text.innerHTML(value);
    info.label = new UIObject("div",info.block);
    info.label.style({"color":color});
    info.label.innerHTML(label);
    return info;
}




Date.prototype.addDays = function(days) {
    var date = new Date(this.valueOf());
    date.setDate(date.getDate() + days);
    return date;
}







function RollupData()
{
    this.parse=function(data)
    {
        this.data = data;       
    }
    this.filterData=function(dataset,field,value)
    {
        var output = [];
        for(var i=0;i<dataset.length;i++)
        {
            if(dataset[i][field]==value)
            {
                output[output.length]=dataset[i];
            }
        }
        return output;
    }
    this.rollup=function(fields)
    {
        this.fields = {};
        for(var i=0;i<fields.length;i++)
        {
            var o =[]
            for(var r=0;r<this.data.length;r++)
            {
                o[o.length] = this.data[r][fields[i]];
            }
            this.fields[fields[i]] = Array.from(new Set(o));
        }

        var output = [];
        var dataset = this.data;
        var base = this;
        this.fields.forEach(element => {
            for(var i=0;i<this.fields[element].length;i++)
            {
                var dataOutput = base.filterData(dataset,element,this.fields[element][i]);
                output[output.length] = {
                    element:this.fields[element][i],
                    "chileds":dataOutput
                }
            }
        });
    }
}



window.openPostRequest=function(url,data)
{
    var f = new UIObject("form","body")
    f.attribute("method","post")
    f.attribute("action",url)
    var uuid = btoa(new Date().toTimeString())
    f.attribute("target",uuid);

    var d = new UIObject("input",f);
    d.value(csrf_token)
    d.attribute("name","csrfmiddlewaretoken");
    d.attribute("type","hidden")

    var d = new UIObject("input",f);
    d.value(data)
    d.attribute("name","data");
    d.attribute("type","hidden")
    window.open('',uuid);
    
    f.object.submit();
    f.remove();
}

// ---- written by Akash Bhardwaj on 26 May 2023 ----
// ---- to check special characters in the string and written true or false----
function valid_txt(str)
{
    var result =[]
    for(let i = 0; i < str.length; i++)
    {
        var format = /[`!@#$%^&_+{};':"\|<>\?~]/;
        result.push(format.test(str[i]));
    }
    return result.includes(true);
}

//  ---- changes from 26 May 2023 ended here----



// -----Created By Deepak Chauhan 24 Nov 2023 -----
function alphaNumericValidate(data)
{
    
    //console.log(data,"deepak")
    // for(let i = 0; i < data.length; i++)
    // {
    //     var format = /^(?=.*[a-zA-Z])[a-zA-Z0-9 -]*$/;
    //     result= format.test(data[i]);
    // }
    var format = /^[a-zA-Z0-9\s]*$/;
    var result= format.test(data);
    return result;
}

function hindiNumericValidate(data)
{
    var result =[]
    //console.log(data,"deepak")
    for(let i = 0; i < data.length; i++)
    {
        var format = /^(?=.*[\u0900-\u097F])[\u0900-\u097F0-9 -]*$/;
        result.push(format.test(data[i]));
    }
    return result.includes(true);
}
// changes  on 24 Nov ended here --

function validatePAN(panNumber) {
      
      var panRegex = /^[A-Z]{5}[0-9]{4}[A-Z]$/;

      // Check if the provided PAN number matches the pattern
      if (panNumber.match(panRegex)) {
        //alert('PAN Card Number is valid!');
        console.info("PAN Card Number is valid")
        return true;
      } else {
        alert('Invalid PAN Card Number! Please enter a valid PAN.');
        return false;
      }
    }


function validateEmail(email) {
    if(email=="")
    {
        return true;
    }
        const re = /\S+@\S+\.\S+/;
        return re.test(email);
    }

    function validateMobile(number) {
        if(number=="")
        {
            return true;
        }
        // Country code followed by 10 digits (assuming 10-digit phone numbers)
        const re = /^\+[0-9]{1,3}?[0-9]{10}$/;
        return re.test(number);
    }
    
    // // Example usage:
    // // const phoneNumber = "+123-4567890123";
    // if (validateMobileNumberWithCountryCode(phoneNumber)) {
    //     console.log("Valid mobile number with country code");
    // } else {
    //     console.log("Invalid mobile number with country code");
    // }
    

    function alphabhetValidate(data)
    {

        var format = /^[a-zA-Z\s]*$/;
        var result= format.test(data);
        return result;
    }


    function isNumber(value) {
        return !isNaN(value);
    }

    function number_format2(val)
    {
        if(isNumber(val)==false)
            {
                return val;
            }
        return number_format(val,2);        
    }


    function avoidSpecialValidate(data)
    {
    
        
        var format = /^[a-zA-Z0-9\s\-,'/]*$/;
        var result= format.test(data);
        return result;
    }



    function closeNotice(id,reload)
    {
      ajaxJson("/api/core/activity_log/closeEnvent?id="+id,"csrfmidlewaretoken="+csrf_token,function(resp)
      {
        if(typeof reload=="undefined" || closeNotice==true)
        {
          window.location.reload();
        }
        
      })
    }

function imageViewPopUp(imagesrc){
    var f = SC.form();
    f.content.style({"overflow":"auto","height":"600px"})
    var im = new UIObject("img",f.content);
    im.style({"width":"100%"})
    im.src(imagesrc)
}