VaKeR CYBER ARMY
Logo of a company Server : Apache/2.4.41 (Ubuntu)
System : Linux absol.cf 5.4.0-198-generic #218-Ubuntu SMP Fri Sep 27 20:18:53 UTC 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Directory :  /var/www/html/keeview_app/html/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/keeview_app/html/advance_payment_request.js
hr.advance_payment_request.deleteAdvance_payment_request = function(host, id){
    ModalElement.show_loading();
    FormClass.api_call({
        url: "employee_benefit_and_liability_request_delete.php",
        params: [
            {name: "id", value: id},
            {name: "type", value: "advance_payment"}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    var index = host.database.advance_payment_request.getIndex(id);
                    host.database.advance_payment_request.items.splice(index, 1);
                    host.database.employee_benefit_and_liability_request_approvers.items = host.database.employee_benefit_and_liability_request_approvers.items.filter(function(item){
                        return item.requestid != id;
                    });
                    hr.advance_payment_request.redraw(host);
                }
                else if (message == "lock_system"){
                    ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                }
                else if (message == "failed_calc"){
                    ModalElement.alert({
                        message: LanguageModule.text("war_txt_can_not_delete_request")
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.advance_payment_request.deleteAdvance_payment_requestConfirm = function(host, id){
    var index = host.database.advance_payment_request.getIndex(id);
    ModalElement.question({
        title: LanguageModule.text("war_title_delete_advance_payment_request"),
        message: LanguageModule.text2("war_txt_detele", [""]),
        onclick: function(sel){
            if (sel == 0){
                hr.advance_payment_request.deleteAdvance_payment_request(host, id);
            }
        }
    });
};

hr.advance_payment_request.cancelAdvance_payment_request = function(host, id){
    ModalElement.show_loading();
    FormClass.api_call({
        url: "employee_benefit_and_liability_request_cancel.php",
        params: [
            {name: "id", value: id},
            {name: "type", value: "advance_payment"}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    var index = host.database.advance_payment_request.getIndex(id);
                    host.database.advance_payment_request.items[index].status = 3;
                    host.database.advance_payment_request.items[index].statusType = "canceled";
                    hr.advance_payment_request.redraw(host);
                }
                else if (message == "lock_system"){
                    ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                }
                else if (message == "failed_calc"){
                    ModalElement.alert({
                        message: LanguageModule.text("war_txt_can_not_cancel_request")
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.advance_payment_request.cancelAdvance_payment_requestConfirm = function(host, id){
    var index = host.database.advance_payment_request.getIndex(id);
    ModalElement.question({
        title: LanguageModule.text("war_title_cancel_advance_payment_request"),
        message: LanguageModule.text("war_txt_cancel_advance_payment_request"),
        onclick: function(sel){
            if (sel == 0){
                hr.advance_payment_request.cancelAdvance_payment_request(host, id);
            }
        }
    });
};

hr.advance_payment_request.approvalRequest = function(host, id, inside){
    var listData = [];
    if (!id){
        host.database.advance_payment_request.items.forEach(function(item){
            if (host.inputidboxes["checkbox_" + item.id] && host.inputidboxes["checkbox_" + item.id].checked){
                listData.push(item);
            }
        });
    }
    else {
        var index = host.database.advance_payment_request.getIndex(id);
        listData = [host.database.advance_payment_request.items[index]];
    }
    if (listData.length == 0) return;
    console.log(listData);
    ModalElement.show_loading();
    FormClass.api_call({
        url: "employee_benefit_and_liability_request_approval.php",
        params: [
            {name: "listData", value: EncodingClass.string.fromVariable(listData)},
            {name: "type", value: "advance_payment"}
        ],
        func: function(success, message){
            if (success){
                if (message.substr(0, 2) == "ok"){
                    host.status_select.value = "all";
                    hr.advance_payment_request.init2(host).then(function(){
                        if (inside){
                            host.frameList.removeLast();
                            ModalElement.close();
                            hr.advance_payment_request.viewAdvance_payment_requestPre(host, host.id);
                        }
                        else {
                            ModalElement.close(-1);
                        }
                    });
                }
                else if (message == "failed_employee"){
                    ModalElement.alert({message: LanguageModule.text("war_user_not_link_employee")});
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.advance_payment_request.denyRequest = function(host, listData, comment, inside){
    ModalElement.show_loading();
    FormClass.api_call({
        url: "employee_benefit_and_liability_request_deny.php",
        params: [
            {name: "listData", value: EncodingClass.string.fromVariable(listData)},
            {name: "type", value: "advance_payment"},
            {name: "comment", value: comment}
        ],
        func: function(success, message){
            if (success){
                if (message.substr(0, 2) == "ok"){
                    ModalElement.close();
                    if (host.status_select.value != "all") host.status_select.value = "deny";
                    hr.advance_payment_request.init2(host).then(function(){
                        if (inside){
                            host.frameList.removeLast();
                            hr.advance_payment_request.viewAdvance_payment_requestPre(host, host.id);
                        }
                        else {
                            ModalElement.close(-1);
                        }
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.advance_payment_request.denyRequestConfirm = function(host, id, inside){
    var listData = [];
    if (!id){
        host.database.advance_payment_request.items.forEach(function(item){
            if (host.inputidboxes["checkbox_" + item.id] && host.inputidboxes["checkbox_" + item.id].checked){
                listData.push(item);
            }
        });
    }
    else {
        var index = host.database.advance_payment_request.getIndex(id);
        listData = [host.database.advance_payment_request.items[index]];
    }
    if (listData.length == 0) return;
    var comment_input = DOMElement.textarea({
        attrs: {
            className: "cardSimpleTextarea",
            style: {
                minWidth: "250px",
                width: "100%",
                height: "100px"
            }
        }
    });
    ModalElement.showWindow({
        title: LanguageModule.text("txt_deny_request"),
        bodycontent: DOMElement.div({
            children: [
                DOMElement.div({
                    attrs: {
                        style: {
                            height: "var(--control-height)",
                            lineHeight: "var(--control-height)",
                            width: "300px"
                        }
                    },
                    text: LanguageModule.text("txt_reason_deny")
                }),
                comment_input
            ]
        }),
        buttonlist: [
            {
                text: LanguageModule.text("txt_save"),
                onclick: function(){
                    ModalElement.close();
                    var comment = comment_input.value.trim();
                    hr.advance_payment_request.denyRequest(host, listData, comment, inside);
                }
            },
            {
                text: LanguageModule.text("txt_cancel"),
                onclick: function(){
                    ModalElement.close();
                }
            }
        ]
    });
    comment_input.focus();
};

hr.advance_payment_request.addAdvance_payment_requestSubmit = function(host, id, getValueFunction){
    return new Promise(function(resolve, reject){
        var data = getValueFunction();
        if (!data) return;
        data.status = 0;
        if (id != 0){
            var ischange = contentModule.isChanged(host.dataAdvance_payment_requestEdit, data, ["employeeid", "policyid", "amount", "date", "reason", "attachments", "extrainfo", "status"]);
            if (!ischange){
                resolve();
                return;
            }
        }
        data.id = id;
        var isCheckTime;
        if (id > 0){
            if (EncodingClass.string.compare(data.date, host.dataAdvance_payment_requestEdit.date)){
                isCheckTime = true;
            }
        }
        else {
            isCheckTime = true;
        }
        if (id != 0){
            data.ver = host.dataAdvance_payment_requestEdit.ver;
        }
        else {
            data.ver = 1;
        }
        var pIndex = host.database.advance_payment_policies.getIndex(data.policyid);
        if (pIndex >= 0){
            if (isCheckTime){
                if (host.database.advance_payment_policies.items[pIndex].proposal_submitted_before > 0){
                    if ((new Date()).getTime() + host.database.advance_payment_policies.items[pIndex].proposal_submitted_before*24*60*60*1000 > data.date.getTime()){
                        ModalElement.alert({message: LanguageModule.text("war_txt_date_request_leave_invalid")});
                        return;
                    }
                }
            }
        }
        data.type = "advance_payment";
        data.extrainfo = EncodingClass.string.fromVariable(data.extrainfo);
        data.attachments = EncodingClass.string.fromVariable(data.attachments);
        ModalElement.show_loading();
        FormClass.api_call({
            url: "employee_benefit_and_liability_request_save.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(data)}],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        st.extrainfo = EncodingClass.string.toVariable(st.extrainfo);
                        st.attachments = EncodingClass.string.toVariable(st.attachments);
                        if (host.policy_select.value != 0) host.policy_select.value = st.policyid;
                        resolve();
                        if (id != 0){
                            var index = host.database.advance_payment_request.getIndex(id);
                            st.status = host.database.advance_payment_request.items[index].status;
                            host.database.advance_payment_request.items[index] = st;
                            host.dataAdvance_payment_requestEdit = host.database.advance_payment_request.items[index];
                            hr.advance_payment_request.makePrivilegeAdvancePaymentRequest(host);
                            host.drawGeneralInforFunc();
                            host.drawIntroFunc();
                        }
                        else {
                            id = st.id;
                            data.id = id;
                            st.status = 0;
                            host.database.advance_payment_request.items.push(st);
                            host.dataAdvance_payment_requestEdit = st;
                            hr.advance_payment_request.makePrivilegeAdvancePaymentRequest(host);
                            hr.advance_payment_request.viewAdvance_payment_requestPre(host);
                        }
                    }
                    else if (message.startsWith("approved")){
                        ModalElement.alert({
                            message: "Đề xuất đã được duyệt, không được sửa",
                            func: function(){
                                var st = EncodingClass.string.toVariable(message.substr("approved".length));
                                resolve();
                                host.database.employee_benefit_and_liability_request_approvers.items = host.database.employee_benefit_and_liability_request_approvers.items.filter(function(item){
                                    return item.requestid != id;
                                });
                                host.database.employee_benefit_and_liability_request_approvers.items = host.database.employee_benefit_and_liability_request_approvers.items.concat(st);
                                host.drawIntroFunc();
                                host.drawGeneralInforFunc();
                                host.drawApprovalFunc();
                            }
                        });
                    }
                    else if (message == "amount_invalid") {
                        ModalElement.alert({message: LanguageModule.text("txt_the_proposal_amount_is_not_valid")});
                    }
                    else if (message == "not_employee_salary_decisions") {
                        ModalElement.alert({message: LanguageModule.text("txt_the_proposal_amount_is_not_valid_because_you_dont_have_an_active_salary_decision")});
                    }
                    else if (message == "lock_system"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                    }
                    else if (message == "deleted" || message == "edited"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_failed_ver_reload_data")
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.advance_payment_request.addAdvance_payment_requestClose = function(host, id, getValueFunction){
    return new Promise(function(resolve, reject){
        var data = getValueFunction("no_alert");
        if (!data) {
            resolve();
            return;
        }
        var oldData;
        if (id != 0){
            oldData = host.dataAdvance_payment_requestEdit;
        }
        else {
            oldData = {
                employeeid: 0,
                policyid: 0,
                amount: 0,
                date: new Date(),
                reason: "",
                attachments: [],
                extrainfo: {}
            };
        }
        var ischange = contentModule.isChanged(oldData, data, ["employeeid", "policyid", "amount", "date", "reason", "attachments", "extrainfo"]);
        if (!ischange){
            resolve();
            return;
        }
        contentModule.questionChange({
            onclick: function(sel){
                if (sel == 0){
                    hr.advance_payment_request.addAdvance_payment_requestSubmit(host, id, getValueFunction).then(function(){
                        resolve();
                    });
                }
                else if (sel == 1){
                    resolve();
                }
            }
        });
    });
};

hr.advance_payment_request.redrawDetails = function(host, id){
    function redraw(value){
        theme.formAdvance_payment_requestEdit({
            id: id,
            value: value,
            form_config: data_module.form_config,
            database: host.database,
            employeeOfMe: host.employeeOfMe,
            frameList: host.frameList,
            cmdbutton: {
                save: function(getValueFunction){
                    return new Promise(function(rs, rj){
                        hr.advance_payment_request.addAdvance_payment_requestSubmit(host, id, getValueFunction).then(function(){
                            rs();
                        });
                    });
                },
                cancel: function(getValueFunction){
                    return new Promise(function(rs, rj){
                        hr.advance_payment_request.addAdvance_payment_requestClose(host, id, getValueFunction).then(function(){
                            rs();
                        });
                    })
                }
            }
        });
    };
    if (id != 0){
        redraw(host.dataAdvance_payment_requestEdit);
    }
    else {
        redraw();
    }
};

hr.advance_payment_request.addAdvance_payment_request = function(host, id){
    if (id == 0){
        hr.advance_payment_request.redrawDetails(host, id);
    }
    else {
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "advance_payment_request_load_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        host.dataAdvance_payment_requestEdit = st;
                        if (host.dataAdvance_payment_requestEdit.extrainfo == "") host.dataAdvance_payment_requestEdit.extrainfo = {};
                        else host.dataAdvance_payment_requestEdit.extrainfo = EncodingClass.string.toVariable(host.dataAdvance_payment_requestEdit.extrainfo);
                        if (host.dataAdvance_payment_requestEdit.attachments == "") host.dataAdvance_payment_requestEdit.attachments = {};
                        else host.dataAdvance_payment_requestEdit.attachments = EncodingClass.string.toVariable(host.dataAdvance_payment_requestEdit.attachments);
                        hr.advance_payment_request.redrawDetails(host, id);
                    }
                    else if (message == "war_txt_failed_data"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_failed_data"),
                            func: function(){
                                hr.advance_payment_request.init2(host);
                            }
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    }
};

hr.advance_payment_request.drawIntro = function(host){
    var res = DOMElement.div({
        attrs: {
            className: "hr-intro-view-form request-approval-list"
        }
    });
    host.drawIntroFunc = function(){
        var index = host.database.advance_payment_request.getIndex(host.id);
        var pIndex = host.database.advance_payment_policies.getIndex(host.database.advance_payment_request.items[index].policyid);
        var eIndex = host.employeeDic[host.database.advance_payment_request.items[index].employeeid];
        var fullname = host.database.employees.items[eIndex].fullname;
        var oIndex = host.database.employees.items[eIndex].orgIndex;
        var orgName = host.database.orgs.items[oIndex].name;

        var statusElt;
        switch (host.dataAdvance_payment_requestEdit.status) {
            case 0:
                var datetime = host.database.advance_payment_request.items[index].fromdate.setHours(0, 0, 0, 0);
                var expire_time = datetime - host.database.advance_payment_policies.items[pIndex].time_hours_needed_for_approval*60*60*1000;
                if (new Date().getTime() > expire_time){
                    statusElt = DOMElement.div({
                        attrs: {
                            className: "hr-status-view-btn over-due"
                        },
                        text: LanguageModule.text("txt_over_due")
                    });
                }
                else {
                    var remainTime = expire_time - new Date().getTime();
                    if (remainTime > 24*60*60*1000){
                        statusElt = DOMElement.div({
                            attrs: {
                                className: "hr-status-view-btn waiting-approval"
                            },
                            text: LanguageModule.text("txt_waiting_approval")
                        });
                    }
                    else {
                        var countdownText = absol.buildDom({
                            tag: 'countdowntext',
                            props: {
                                finishTime: new Date(expire_time),
                                format: "HH:mm:ss"
                            },
                            on: {
                                finish: function(){
                                    hr.advance_payment_request.init2(host);
                                    host.frameList.removeLast();
                                    hr.advance_payment_request.viewAdvance_payment_requestPre(host, host.id);
                                }
                            }
                        });
                        statusElt = DOMElement.div({
                            attrs: {
                                className: "hr-status-view-btn waiting-approval"
                            },
                            children: [
                                DOMElement.span({
                                    attrs: {
                                        style: {marginRight: "5px"}
                                    },
                                    text: LanguageModule.text("txt_waiting_approval")
                                }),
                                countdownText
                            ]
                        });
                    }
                }
                break;
            case 1:
                statusElt = DOMElement.div({
                    attrs: {
                        className: "hr-status-view-btn approved"
                    },
                    text: LanguageModule.text("txt_approved")
                });
                break;
            case 2:
                statusElt = DOMElement.div({
                    attrs: {
                        className: "hr-status-view-btn deny"
                    },
                    text: LanguageModule.text("txt_deny")
                });
                break;
            case 3:
                statusElt = DOMElement.div({
                    attrs: {
                        className: "hr-status-view-btn canceled"
                    },
                    text: LanguageModule.text("txt_canceled")
                });
                break;

        }
        DOMElement.removeAllChildren(res);
        res.appendChild(DOMElement.table({
            data: [
                [
                    {text: LanguageModule.text("txt_approval_status")},
                    {attrs: {style: {width: "40px"}}},
                    statusElt
                ]
            ]
        }));
    };
    host.drawIntroFunc();
    return res;
};

hr.advance_payment_request.drawGeneralInformation = function(host){
    var cmdbutton = {};
    if (host.dataAdvance_payment_requestEdit.privEdit) cmdbutton.editFunc = function(){
        hr.advance_payment_request.addAdvance_payment_request(host, host.id);
    };
    var res = theme.showAdvancePaymentRequestGeneralInfomation({
        cmdbutton: cmdbutton
    });
    host.drawGeneralInforFunc = function(){
        contentModule.makeOutputFormData({
            typeid: data_module.form_config.request_advance_payment.typeid,
            formid: hr.isMobile? data_module.form_config.request_advance_payment.mobile_output_form : data_module.form_config.request_advance_payment.output_form,
            initialValue: host.dataAdvance_payment_requestEdit,
            formContainer: res.viewGeneralInformation,
            typelists: data_module.typelists.items,
            variableType: "system"
        }).then(function(getValue){
            res.viewGeneralInformation.formFragment.setContext('host', host);
        });
    };
    contentModule.getApproversTextOfPolicy(host, "advance_payment", host.dataAdvance_payment_requestEdit.policyid, host.dataAdvance_payment_requestEdit.employeeid).then(function(value){
        host.dataAdvance_payment_requestEdit.approvers = value;
        host.dataAdvance_payment_requestEdit.time_hours_needed_for_approval = contentModule.getTime_hours_needed_for_approvalByPolicy(host, "advance_payment", host.dataAdvance_payment_requestEdit.policyid);
        host.drawGeneralInforFunc();
    });
    return res;
};

hr.advance_payment_request.drawApproval = function(host){
    var getApprovalMethod = function(value){
        var list = contentModule.getListApprovalMethod();
        for (var i = 0; i < list.length; i++){
            if (list[i].value == value) return list[i].text;
        }
        return "";
    };
    var pIndex = host.database.advance_payment_policies.getIndex(host.dataAdvance_payment_requestEdit.policyid);
    if (pIndex >= 0){
        var approval_methodText = getApprovalMethod(host.database.advance_payment_policies.items[pIndex].approval_method);
    }
    else {
        return DOMElement.div({});
    }
    var res = theme.showAdvancePaymentRequestApproval({
        approval_methodText: approval_methodText
    });
    host.drawApprovalFunc = function(){
        res.drawApprovalFunc({
            database: host.database,
            dataAdvance_payment_requestEdit: host.dataAdvance_payment_requestEdit,
            employeeDic: host.employeeDic
        });
    };
    host.drawApprovalFunc();
    return res;
};

hr.advance_payment_request.viewAdvance_payment_request = function(host, id){
    host.id = id;
    var cmdbutton = {};
    if (host.dataAdvance_payment_requestEdit.privApproval){
        cmdbutton.approval = function(){
            hr.advance_payment_request.approvalRequest(host, host.id, true);
        };
        cmdbutton.deny = function(){
            hr.advance_payment_request.denyRequestConfirm(host, host.id, true);
        };
    }
    theme.showAdvancePaymentRequest({
        id: host.id,
        frameList: host.frameList,
        cmdbutton: cmdbutton,
        info_ctn: hr.advance_payment_request.drawIntro(host),
        general_information_ctn: hr.advance_payment_request.drawGeneralInformation(host),
        approval_ctn: hr.advance_payment_request.drawApproval(host),
        holder: host.holder
    });
};

hr.advance_payment_request.viewAdvance_payment_requestPre = function(host, id){
    var index = host.database.advance_payment_request.getIndex(id);
    if (index < 0 || !host.database.advance_payment_request.items[index].privView){
        ModalElement.alert({message: LanguageModule.text("war_txt_no_privilege_view_request")});
        return;
    }
    ModalElement.show_loading();
    FormClass.api_call({
        url: "database_load.php",
        params: [
            {name: "task", value: "view_advance_payment_request_load_by_id"},
            {name: "id", value: id}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    var st = EncodingClass.string.toVariable(message.substr(2));
                    st.data.extrainfo = EncodingClass.string.toVariable(st.data.extrainfo);
                    st.data.attachments = EncodingClass.string.toVariable(st.data.attachments);
                    host.database.advance_payment_request.items[index] = st.data;
                    console.log(host.database.advance_payment_request.items[index]);
                    host.database.employee_benefit_and_liability_request_approvers.items = host.database.employee_benefit_and_liability_request_approvers.items.filter(function(item){
                        return item.requestid != id;
                    });
                    host.database.employee_benefit_and_liability_request_approvers.items = host.database.employee_benefit_and_liability_request_approvers.items.concat(st.employee_benefit_and_liability_request_approvers);
                    host.dataAdvance_payment_requestEdit = host.database.advance_payment_request.items[index];
                    hr.advance_payment_request.makePrivilegeAdvancePaymentRequest(host);
                    hr.advance_payment_request.viewAdvance_payment_request(host, id);
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.advance_payment_request.getCellAdvance_payment_request = function(host, id){
    var index = host.database.advance_payment_request.getIndex(id);
    var content = host.database.advance_payment_request.items[index];
    var func = {
        view: function(resolve){
            hr.advance_payment_request.viewAdvance_payment_requestPre(host, id);
        },
        approval: function(){
            hr.advance_payment_request.approvalRequest(host, id, false);
        },
        deny: function(){
            hr.advance_payment_request.denyRequestConfirm(host, id, false);
        }
    };
    func.markedFunc = function(marked){
        return new Promise(function(resolve, reject){
            contentModule.markedFunc(host, {
                id: id,
                marked: marked,
                task: "advance_payment_request",
                tablename: "employee_benefit_and_liability_request"
            }).then(function(v){
                resolve(v);
            });
        });
    };
    if (content.privDel){
        func.delete = function(){
            hr.advance_payment_request.deleteAdvance_payment_requestConfirm(host, id);
        };
        if (content.status == 0 || content.status == 1) func.cancel = function(){
            hr.advance_payment_request.cancelAdvance_payment_requestConfirm(host, id);
        };
    }
    var employeeIndex = host.employeeDic[content.employeeid];
    var employeeName = host.database.employees.items[employeeIndex].fullname;
    var oIndex = host.database.employees.items[employeeIndex].orgIndex;
    var departmentName = host.database.orgs.items[oIndex].name;
    var row = EncodingClass.string.duplicate(content);
    row.employeeName = employeeName;
    row.departmentName = departmentName;
    switch (host.status_select.value) {
        case "waiting_approval":
            if (content.status != 0) return null;
            break;
        case "over_due":
        case "approved":
        case "deny":
            if (content.statusType != host.status_select.value) return null;
            break;
        default:
    }
    if (content.privApproval) host.hasPriv = true;
    row.status = content.statusType;
    row.func = func;
    return row;
};

hr.advance_payment_request.toggleBtn = function(host){
    if (hr.isMobile) return;
    var ex = 0;
    for (var i = 0; i < host.database.advance_payment_request.items.length; i++){
        if (host.inputidboxes["checkbox_" + host.database.advance_payment_request.items[i].id]){
            if (host.inputidboxes["checkbox_" + host.database.advance_payment_request.items[i].id].checked){
                ex = 1;
                break;
            }
        }
    }
    if (ex){
        host.approval_btn_ctn.classList.remove("hidden");
        host.deny_btn_ctn.classList.remove("hidden");
    }
    else {
        host.approval_btn_ctn.classList.add("hidden");
        host.deny_btn_ctn.classList.add("hidden");
    }
};

hr.advance_payment_request.redraw = function(host){
    host.hasPriv = false;
    host.inputidboxes = {};
    hr.advance_payment_request.toggleBtn(host);
    var data = [], row;
    for (var i = 0; i < host.database.advance_payment_request.items.length; i++){
        if (!host.database.advance_payment_request.items[i].privView) continue;
        if (host.policy_select.value != 0 && host.policy_select.value != host.database.advance_payment_request.items[i].policyid) continue;
        row = hr.advance_payment_request.getCellAdvance_payment_request(host, host.database.advance_payment_request.items[i].id);
        if (row) data.push(row);
    }
    DOMElement.removeAllChildren(host.data_container);
    var checkbox_all;
    if (host.hasPriv){
        checkbox_all = absol.buildDom({
            tag: "checkbox",
            on: {
                change: function(){
                    var item;
                    for (var i = 0; i < host.database.advance_payment_request.items.length; i++){
                        item = host.database.advance_payment_request.items[i];
                        if (host.inputidboxes["checkbox_" + item.id]){
                            host.inputidboxes["checkbox_" + item.id].checked = this.checked;
                        }
                    }
                    hr.advance_payment_request.toggleBtn(host);
                }
            }
        });
    }
    else {
        checkbox_all = DOMElement.span({});
    }
    host.dataView = theme.formAdvance_payment_requestContentData({
        data: data,
        inputsearchbox: host.inputsearchbox,
        checkbox_all: checkbox_all,
        inputidboxes: host.inputidboxes,
        toggleBtnFunc: function(){
            hr.advance_payment_request.toggleBtn(host);
        },
        configColumnAdvancePaymentRequest: host.configColumnAdvancePaymentRequest,
        configColumnFunc: host.configColumnFunc
    });
    host.data_container.appendChild(host.dataView);
};

hr.advance_payment_request.init3 = function(host){
    var displayDic = {
        policyid: true,
        employeeid: true,
        date: true,
        reason: true,
        amount: true
    };
    var columnList = contentModule.getColumnListFromDatatype(host, "request_advance_payment", displayDic);
    columnList.splice(1, 0, {value: "departmentName", display: true, main: true, type: -1, text: LanguageModule.text("txt_department")});
    columnList.push({value: "status", display: true, main: true, type: -1, text: LanguageModule.text("txt_status")});
    var redrawTableFunc = function(){
        ModalElement.show_loading();
        contentModule.getColumnListConfig(host, host.user_column_configsDic, columnList, "advance_payment_request_list").then(function(value){
            ModalElement.close(-1);
            host.configColumnAdvancePaymentRequest = value;
            host.configColumnFunc = function(){
                contentModule.userColumnConfigForm({
                    type: "advance_payment_request_list",
                    columnList: columnList
                }).then(function(value){
                    host.user_column_configsDic["advance_payment_request_list"] = value;
                    redrawTableFunc();
                });
            };
            hr.advance_payment_request.redraw(host);
        });
    };
    redrawTableFunc();
};

hr.advance_payment_request.makePrivilegeAdvancePaymentRequest = function(host){
    host.database.advance_payment_request.items.sort(function(a, b){
        return a.fromdate.getTime() - b.fromdate.getTime();
    });
    var advance_payment_requestDic = contentModule.makeDictionaryIndex(host.database.advance_payment_request.items);
    var k;
    for (var i = 0; i < host.database.user_marked.items.length; i++){
        k = advance_payment_requestDic[host.database.user_marked.items[i].taskid];
        if (k >= 0) host.database.advance_payment_request.items[k].marked = true;
    }
    for (var i = 0; i < host.database.advance_payment_request.items.length; i++){
        host.database.advance_payment_request.items[i].approverIds = [];
    }
    for (var i = 0; i < host.database.employee_benefit_and_liability_request_approvers.items.length; i++){
        k = advance_payment_requestDic[host.database.employee_benefit_and_liability_request_approvers.items[i].requestid];
        if (k >= 0){
            host.database.advance_payment_request.items[k].approverIds.push(host.database.employee_benefit_and_liability_request_approvers.items[i].employeeid);
        }
    }
    var employeeid;
    var pIndex, employeeIndex;
    host.database.advance_payment_request.items.forEach(function(item){
        employeeIndex = host.employeeDic[item.employeeid];
        if (employeeIndex === undefined) return;
        employeeid = item.employeeid;
        pIndex = host.policyDic[item.policyid];
        if (pIndex === undefined) return;
        if (systemconfig.privSystem >= 2){
            item.privDel = true;
        }
        else if (item.userid == systemconfig.userid || (host.employeeOfMe.length > 0 && item.employeeid == host.employeeOfMe[0])){
            item.privDel = true;
        }
        switch (item.status) {
            case 0:
            case 2:
                if (item.status == 0){
                    var time_hours_needed_for_approval = host.database.advance_payment_policies.items[host.policyDic[item.policyid]].time_hours_needed_for_approval;
                    var datetime = item.fromdate.setHours(0, 0, 0, 0);
                    if (datetime - time_hours_needed_for_approval*60*60*1000 < new Date().getTime()){
                        status = "over_due";
                    }
                    else {
                        status = "waiting_approval";
                    }
                }
                else if (item.status == 2){
                    status = "deny";
                }
                if ((item.userid == systemconfig.userid || (host.employeeOfMe.length > 0 && item.employeeid == host.employeeOfMe[0])) && item.approverIds.length == 0){
                    item.privEdit = true;
                }
                if (host.database.advance_payment_policies.items[pIndex].direct_manager_approves_first){
                    if (host.directSubOfMe.indexOf(employeeid) >= 0){
                        item.privView = true;
                        if (item.status == 0){
                            if (item.approverIds.indexOf(host.employeeOfMe[0]) < 0){
                                ex = true;
                                item.privApproval = true;
                                item.approvalRole = "direct_manager";
                                var done = !host.database.advance_payment_policies.items[pIndex].indirect_manager_approves_first;
                                if (!done){
                                    if (host.employeeOfMe[0] == host.database.employees.items[employeeIndex].indirect_manager) done = true;
                                    else if (item.approverIds.indexOf(host.database.employees.items[employeeIndex].indirect_manager) >= 0) done = true;
                                }
                                if (done){
                                    host.database.advance_payment_policies.items[pIndex].approvers.forEach((ee) => {
                                        if (host.employeeOfMe[0] != ee.employeeid){
                                            if (item.approverIds.indexOf(ee.employeeid) < 0) done = false;
                                        }
                                    });
                                }
                                if (done) item.approvalUpdateStatus = true;
                            }
                        }
                    }
                }
                if (host.database.advance_payment_policies.items[pIndex].indirect_manager_approves_first){
                    if (host.indirectSubOfMe.indexOf(employeeid) >= 0){
                        item.privView = true;
                        if (item.status == 0){
                            if (item.approverIds.indexOf(host.employeeOfMe[0]) < 0){
                                ex = true;
                                item.privApproval = true;
                                item.approvalRole = "indirect_manager";
                                var done = !host.database.advance_payment_policies.items[pIndex].direct_manager_approves_first;
                                if (!done){
                                    if (host.employeeOfMe[0] == host.database.employees.items[employeeIndex].indirect_manager) done = true;
                                    else if (item.approverIds.indexOf(host.database.employees.items[employeeIndex].indirect_manager) >= 0) done = true;
                                }
                                if (done){
                                    host.database.advance_payment_policies.items[pIndex].approvers.forEach((ee) => {
                                        if (host.employeeOfMe[0] != ee.employeeid){
                                            if (item.approverIds.indexOf(ee.employeeid) < 0) done = false;
                                        }
                                    });
                                }
                                if (done) item.approvalUpdateStatus = true;
                            }
                        }
                    }
                }
                var prev_done = true;
                if (host.database.advance_payment_policies.items[pIndex].direct_manager_approves_first && host.database.employees.items[employeeIndex].direct_manager > 0){
                    var ex = false;
                    if (item.approverIds.indexOf(host.database.employees.items[employeeIndex].direct_manager) >= 0) ex = true;
                    if (!ex) prev_done = false;
                }
                if (prev_done){
                    if (host.database.advance_payment_policies.items[pIndex].indirect_manager_approves_first && host.database.employees.items[employeeIndex].indirect_manager > 0){
                        var ex = false;
                        if (item.approverIds.indexOf(host.database.employees.items[employeeIndex].indirect_manager) >= 0) ex = true;
                        if (!ex) prev_done = false;
                    }
                }
                var approvers = host.database.advance_payment_policies.items[pIndex].approvers;
                var approval_method = host.database.advance_payment_policies.items[pIndex].approval_method;
                approvers.forEach(function(item1, stt){
                    var eid = item1.employeeid;
                    if (host.employeeOfMe[0] == eid){
                        switch (approval_method){
                            case "one_approver":
                                item.privView = true;
                                break;
                            case "parallel":
                                item.privView = true;
                                break;
                            case "sequence":
                                var checkMe = true;
                                for (i = 0; i < stt; i++){
                                    if (item.approverIds.indexOf(item1.employeeid) < 0){
                                        checkMe = false;
                                    }
                                }
                                if (checkMe){
                                    item.privView = true;
                                }
                                break;
                        }
                    }
                });
                if (item.status == 0 && !item.privApproval && prev_done){
                    var ni;
                    for (var i = 0; i < approvers.length; i++){
                        ni = approvers[i].employeeid;
                        if (host.employeeOfMe.indexOf(ni) >= 0){
                            if (item.approverIds.indexOf(ni) < 0){
                                if (approval_method != "sequence"){
                                    item.privApproval = true;
                                    item.approvalRole = "";
                                }
                                else if (approval_method == "sequence" && prev_done) {
                                    item.privApproval = true;
                                    item.approvalRole = "";
                                }
                            }
                            break;
                        }
                        else {
                            if (approval_method == "sequence" && item.approverIds.indexOf(ni) < 0){
                                prev_done = false;
                                break;
                            }
                        }
                    }
                    if (item.privApproval){
                        if (approval_method == "one_approver"){
                            item.approvalUpdateStatus = true;
                        }
                        else {
                            var done = true;
                            for (var i = 0; i < approvers.length; i++){
                                ni = approvers[i].employeeid;
                                if (ni != host.employeeOfMe[0]){
                                    if (item.approverIds.indexOf(ni) < 0){
                                        done = false;
                                        break;
                                    }
                                }
                            }
                            if (done){
                                item.approvalUpdateStatus = true;
                            }
                        }
                    }
                }
                if (item.userid == systemconfig.userid || host.employeeOfMe[0] == employeeid){
                    item.privView = true
                }
                break;
            case 1:
                status = "approved";
                if (host.database.advance_payment_policies.items[pIndex].direct_manager_approves_first && host.directSubOfMe.indexOf(employeeid) >= 0){
                    item.privView = true;
                }
                if (host.database.advance_payment_policies.items[pIndex].indirect_manager_approves_first && host.indirectSubOfMe.indexOf(employeeid) >= 0){
                    item.privView = true;
                }
                var approvers = host.database.advance_payment_policies.items[pIndex].approvers;
                approvers.forEach(function(item1){
                    if (host.employeeOfMe.indexOf(item1.employeeid) >= 0){
                        item.privView = true;
                    }
                });
                break;
            case 3:
                status = "canceled";
                if (host.database.advance_payment_policies.items[pIndex].indirect_manager_approves_first && host.indirectSubOfMe.indexOf(employeeid) >= 0){
                    item.privView = true;
                }
                var approvers = host.database.advance_payment_policies.items[pIndex].approvers;
                approvers.forEach(function(item1){
                    if (host.employeeOfMe.indexOf(item1.employeeid) >= 0){
                        item.privView = true;
                    }
                });
                break;
            default:
        }
        item.statusType = status;
        if (systemconfig.privSystem >= 2 ||  item.employeeid == host.employeeOfMe[0] || item.userid == systemconfig.userid){
            item.privView = true;
        }
    });
    if (hr.isMobile) hr.advance_payment_request.redraw(host);
    else hr.advance_payment_request.init3(host);
};

hr.advance_payment_request.init2 = function(host){
    return new Promise(function(resolveMn, rejectMn){
        var employeeIdList = host.employee_select.values;
        employeeIdList.sort(function(a, b){
            return a - b;
        });
        if (employeeIdList.length == 0){
            DOMElement.removeAllChildren(host.data_container);
            var st = {
                advance_payment_request: [],
                employee_benefit_and_liability_request_approvers: []
            };
            contentModule.makeDatabaseContent(host, st);
            return;
        }
        var timestart, timeend;
        switch (host.period_select.value) {
            case "month":
                timestart = absol.datetime.beginOfMonth(host.month_select.value);
                timeend = absol.datetime.nextMonth(host.month_select.value);
                break;
            case "quarter":
                timestart = absol.datetime.beginOfQuarter(host.quarter_select.value);
                timeend = absol.datetime.nextQuarter(host.quarter_select.value);
                break;
            case "year":
                timestart = absol.datetime.beginOfYear(host.year_select.value);
                timeend = absol.datetime.nextYear(host.year_select.value);
                break;

        }
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "advance_payment_request_load_init2"},
                {name: "employeeIdList", value: EncodingClass.string.fromVariable(employeeIdList)},
                {name: "timestart", value: EncodingClass.string.fromVariable(timestart)},
                {name: "timeend", value: EncodingClass.string.fromVariable(timeend)},
                {name: "status", value: host.status_select.value}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        console.log(st);
                        contentModule.makeDatabaseContent(host, st);
                        hr.advance_payment_request.makePrivilegeAdvancePaymentRequest(host);
                        resolveMn(host);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.advance_payment_request.init = function(host){
    return new Promise(function(resolveMn, rejectMn){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "advance_payment_request_load_init"}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        contentModule.makeDatabaseContent(host, content);
                        host.user_column_configsDic = contentModule.getUser_column_configsDic(host);
                        host.policyDic = contentModule.makeDictionaryIndex(host.database.advance_payment_policies.items);
                        var k;
                        for (var i = 0; i < host.database.advance_payment_policies.items.length; i++){
                            host.database.advance_payment_policies.items[i].approvers = [];
                        }
                        for (var i = 0; i < host.database.policies_approvers.items.length; i++){
                            k = host.policyDic[host.database.policies_approvers.items[i].policyid];
                            host.database.advance_payment_policies.items[k].approvers.push(host.database.policies_approvers.items[i]);
                        }
                        host.employee_peopleDic = {};
                        for (var i = 0; i < host.database.employees.items.length; i++){
                            host.employee_peopleDic[host.database.employees.items[i].peopleid] = host.database.employees.items[i].id;
                        }
                        var listPolicy = [];
                        for (var i = 0; i < host.database.advance_payment_policies.items.length; i++){
                            if (!host.database.advance_payment_policies.items[i].available) continue;
                            listPolicy.push({
                                value: host.database.advance_payment_policies.items[i].id,
                                text: host.database.advance_payment_policies.items[i].name
                            });
                        }
                        listPolicy.unshift({value: 0, text: LanguageModule.text("txt_all_policy")});
                        host.listPolicy = listPolicy;
                        host.policy_change_func = function(){
                            hr.advance_payment_request.redraw(host);
                        };
                        resolveMn();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

VaKeR 2022