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/email_templates.js
hr.email_templates.getValueOfVariableForTemplate = function(employeeIdArray) {
    return new Promise(function(resolve, reject){
        Promise.all([
            data_module.loadCompanyInHrDB(),
            data_module.loadOrgsList(),
            data_module.loadEmployeesList(),
            data_module.loadGeographiesList(),
            data_module.loadEmployeeManagersList(),
            data_module.loadGeoposOrgsList(),
            data_module.loadPeoplesList(),
            data_module.loadUsersList(),
            data_module.loadPositions2List(),
            data_module.loadEmployeePositions2List()
        ]).then(function(rs){
            var host = {
                database: {}
            };
            contentModule.makeDatabaseContent(host, {
                hr_company: rs[0],
                orgs: rs[1],
                employees: rs[2],
                geopos: rs[3],
                employee_managers: rs[4],
                geopos_orgs: rs[5],
                peoples: rs[6],
                users: rs[7],
                positions: rs[8],
                employee_positions: rs[9]
            });
            host.dict = {};
            host.dict.peoples = {};
            host.database.peoples.items.forEach((item, i) => {
                item.content = EncodingClass.string.toVariable(item.content);
                host.dict.peoples[item.id] = i;
            });
            host.dict.orgs = {};
            host.database.orgs.items.forEach((item, i) => {
                host.dict.orgs[item.id] = i;
            });
            host.database.employees.items.forEach((item, i) => {
                item.fullname = host.database.peoples.items[host.dict.peoples[item.peopleid]].fullname;
            });
            contentModule.makeEmployeesIndex(host);
            contentModule.makeOrgsIndex(host);
            contentModule.makeEmployeePosition2Data(host);
            // contentModule.makePositionsIndex(host);
            contentModule.makeGeoposOrgsData(host);
            contentModule.makeEmployeeManagerData(host);
            var cpn = {};
            var cpnToString = {};
            if (host.database.hr_company.name) {
                cpn.company_name_of_employee = host.database.hr_company.name;
                cpnToString.company_name_of_employee = host.database.hr_company.name;
            }
            if (host.database.hr_company.config) {
                host.database.hr_company.config = EncodingClass.string.toVariable(host.database.hr_company.config);
                if (host.database.hr_company.config.address) {
                    cpn.company_address_of_employee = host.database.hr_company.config.address;
                    cpnToString.company_address_of_employee = host.database.hr_company.config.address;
                }
                if (host.database.hr_company.config.email) {
                    cpn.company_email_of_employee = host.database.hr_company.config.email;
                    cpnToString.company_email_of_employee = host.database.hr_company.config.email;
                }
                if (host.database.hr_company.config.website) {
                    cpn.company_website_of_employee = host.database.hr_company.config.website;
                    cpnToString.company_website_of_employee = host.database.hr_company.config.website;
                }
            }
            else {
                cpn.company_address_of_employee = "";
                cpnToString.company_address_of_employee = "";
                cpn.company_email_of_employee = "";
                cpnToString.company_email_of_employee = "";
                cpn.company_website_of_employee = "";
                cpnToString.company_website_of_employee = "";
            }
            host.dict.employees = {};
            host.database.employees.items.forEach((item, i) => {
                host.dict.employees[item.id] = i;
            });

            host.dict.positions = {};
            host.database.positions.items.forEach((item, i) => {
                host.dict.positions[item.id] = i;
            });

            host.dict.geopos = {};
            host.database.geopos.items.forEach((item, i) => {
                host.dict.geopos[item.id] = i;
            });

            var getValueOfVariableForEmployee = function(employeeid){
                var retval = {
                    today: new Date(),
                    software_link: window.domain,
                    username: systemconfig.userid,
                    link_to_open_form: window.location.href
                };
                Object.assign(retval, cpn);
                var retvalToString = {
                    // today: absol.datetime.formatDateTime(new Date(), 'dd/MM/yyyy'),
                    today: new Date(),
                    software_link: window.domain,
                    username: host.database.users.items[host.database.users.getByhomeid(systemconfig.userid)].username,
                    link_to_open_form: window.location.href
                };
                Object.assign(retvalToString, cpnToString);
                var eIndex = host.dict.employees[employeeid];
                var peopleid = host.database.employees.items[eIndex].peopleid;
                var pIndex = host.dict.peoples[peopleid];
                retval.employee_name = employeeid;
                retvalToString.employee_name = host.database.employees.items[eIndex].fullname;
                if (host.database.peoples.items[pIndex].content.phone_1) {
                    retval.phonenumber_of_employee = host.database.peoples.items[pIndex].content.phone_1;
                    retvalToString.phonenumber_of_employee = host.database.peoples.items[pIndex].content.phone_1;
                }
                else if (host.database.peoples.items[pIndex].content.phone_2) {
                    retval.phonenumber_of_employee = host.database.peoples.items[pIndex].content.phone_2;
                    retvalToString.phonenumber_of_employee = host.database.peoples.items[pIndex].content.phone_2;
                }
                else {
                    retval.phonenumber_of_employee = "";
                    retvalToString.phonenumber_of_employee = "";
                }

                if (host.database.peoples.items[pIndex].content.work_email) {
                    retval.email_of_employee = host.database.peoples.items[pIndex].content.work_email;
                    retvalToString.email_of_employee = host.database.peoples.items[pIndex].content.work_email;
                }
                else if (host.database.peoples.items[pIndex].content.private_email) {
                    retval.email_of_employee = host.database.peoples.items[pIndex].content.private_email;
                    retvalToString.email_of_employee = host.database.peoples.items[pIndex].content.private_email;
                }
                else {
                    retval.email_of_employee = "";
                    retvalToString.email_of_employee = "";
                }
                retval.permanent_address = host.database.peoples.items[pIndex].content.permanent_address;
                retval.probation_start_date = host.database.peoples.items[pIndex].content.start_date;
                retval.start_date_of_work = host.database.peoples.items[pIndex].content.official_date;
                retvalToString.permanent_address = host.database.peoples.items[pIndex].content.permanent_address;
                retvalToString.probation_start_date = host.database.peoples.items[pIndex].content.start_date;
                retvalToString.start_date_of_work = host.database.peoples.items[pIndex].content.official_date;
                retval.position_of_employee = host.database.employees.items[eIndex].position;
                retvalToString.position_of_employee = host.database.employees.items[eIndex].positionName;
                retval.department_of_employee = host.database.employees.items[eIndex].orgid;
                retvalToString.department_of_employee = host.database.orgs.items[host.dict.orgs[retval.department_of_employee]].name;
                var orgid = host.database.employees.items[eIndex].orgid;

                if (host.database.orgs.items[host.dict.orgs[orgid]].geopos.length > 0) {
                    var geoposContent = host.database.geopos.items[host.dict.geopos[host.database.orgs.items[host.dict.orgs[orgid]].geopos[0]]];
                    retval.workplace_address_of_employee = geoposContent.address;
                    retvalToString.workplace_address_of_employee = geoposContent.address;
                    retval.workplace_name_of_employee = geoposContent.name;
                    retvalToString.workplace_name_of_employee = geoposContent.name;
                    retval.workplace_gps_address_of_employee = geoposContent.location;
                    retvalToString.workplace_gps_address_of_employee = geoposContent.location;
                }
                else {
                    retval.workplace_address_of_employee = "";
                    retvalToString.workplace_address_of_employee = "";
                    retval.workplace_name_of_employee = "";
                    retvalToString.workplace_name_of_employee = "";
                    retval.workplace_gps_address_of_employee = "";
                    retvalToString.workplace_gps_address_of_employee = "";
                }

                retval.name_of_support_staff_hr = host.database.peoples.items[pIndex].content.hr_support_employee;
                retvalToString.name_of_support_staff_hr = "";
                if (retval.name_of_support_staff_hr && retval.name_of_support_staff_hr != 0) retvalToString.name_of_support_staff_hr = host.database.employees.items[host.dict.employees[retval.name_of_support_staff_hr]].fullname;
                if (retval.name_of_support_staff_hr && retval.name_of_support_staff_hr != 0){
                    var dmIndex = host.dict.employees[retval.name_of_support_staff_hr];
                    if (dmIndex != 0) {
                        var peopleid = host.database.employees.items[dmIndex].peopleid;
                        var pIndexOfDirectManager = host.dict.peoples[peopleid];
                        var email, phone, position, depar;
                        if (host.database.peoples.items[pIndexOfDirectManager].content.phone_1) {
                            retval.phonenumber_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.phone_1;
                            retvalToString.phonenumber_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.phone_1;
                        }
                        else if (host.database.peoples.items[pIndexOfDirectManager].content.phone_2) {
                            retval.phonenumber_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.phone_2;
                            retvalToString.phonenumber_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.phone_2;
                        }
                        else {
                            retval.phonenumber_of_support_staff_hr = "";
                            retvalToString.phonenumber_of_support_staff_hr = "";
                        }

                        if (host.database.peoples.items[pIndexOfDirectManager].content.work_email) {
                            retval.email_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.work_email;
                            retvalToString.email_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.work_email;
                        }
                        else if (host.database.peoples.items[pIndexOfDirectManager].content.private_email) {
                            retval.email_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.private_email;
                            retvalToString.email_of_support_staff_hr = host.database.peoples.items[pIndexOfDirectManager].content.private_email;
                        }
                        else {
                            retval.email_of_support_staff_hr = "";
                            retvalToString.email_of_support_staff_hr = "";
                        }
                        retval.position_of_support_staff_hr = host.database.employees.items[dmIndex].position;
                        retvalToString.position_of_support_staff_hr = host.database.employees.items[dmIndex].positionName;
                        retval.department_of_support_staff_hr = host.database.employees.items[dmIndex].orgid;
                        retvalToString.department_of_support_staff_hr = host.database.orgs.items[host.dict.orgs[host.database.employees.items[dmIndex].orgid]].name;
                    }
                }
                else {
                    retval.email_of_support_staff_hr = "";
                    retvalToString.email_of_support_staff_hr = "";

                    retval.phonenumber_of_support_staff_hr = "";
                    retvalToString.phonenumber_of_support_staff_hr = "";

                    retval.position_of_support_staff_hr = 0;
                    retvalToString.position_of_support_staff_hr = "";

                    retval.department_of_support_staff_hr = 0;
                    retvalToString.department_of_support_staff_hr = "";
                }

                retval.name_of_direct_manager = host.database.employees.items[eIndex].direct_manager;
                retvalToString.name_of_direct_manager = "";
                if (retval.name_of_direct_manager != 0) retvalToString.name_of_direct_manager = host.database.employees.items[host.dict.employees[retval.name_of_direct_manager]].fullname;

                retval.name_of_indirect_manager = host.database.employees.items[eIndex].indirect_manager;
                retvalToString.name_of_indirect_manager = "";
                if (retval.name_of_indirect_manager != 0) retvalToString.name_of_indirect_manager = host.database.employees.items[host.dict.employees[retval.name_of_indirect_manager]].fullname;
                if (retval.name_of_direct_manager != 0){
                    var dmIndex = host.dict.employees[retval.name_of_direct_manager];
                    if (dmIndex != 0) {
                        var peopleid = host.database.employees.items[dmIndex].peopleid;
                        var pIndexOfDirectManager = host.dict.peoples[peopleid];
                        var email, phone, position, depar;
                        if (host.database.peoples.items[pIndexOfDirectManager].content.phone_1) {
                            retval.phonenumber_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_1;
                            retvalToString.phonenumber_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_1;
                        }
                        else if (host.database.peoples.items[pIndexOfDirectManager].content.phone_2) {
                            retval.phonenumber_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_2;
                            retvalToString.phonenumber_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_2;
                        }
                        else {
                            retval.phonenumber_of_direct_manager = "";
                            retvalToString.phonenumber_of_direct_manager = "";
                        }

                        if (host.database.peoples.items[pIndexOfDirectManager].content.work_email) {
                            retval.email_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.work_email;
                            retvalToString.email_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.work_email;
                        }
                        else if (host.database.peoples.items[pIndexOfDirectManager].content.private_email) {
                            retval.email_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.private_email;
                            retvalToString.email_of_direct_manager = host.database.peoples.items[pIndexOfDirectManager].content.private_email;
                        }
                        else {
                            retval.email_of_direct_manager = "";
                            retvalToString.email_of_direct_manager = "";
                        }
                        retval.position_of_direct_manager = host.database.employees.items[dmIndex].position;
                        retvalToString.position_of_direct_manager = host.database.employees.items[dmIndex].positionName;
                        retval.department_of_direct_manager = host.database.employees.items[dmIndex].orgid;
                        retvalToString.department_of_direct_manager = host.database.orgs.items[host.dict.orgs[host.database.employees.items[dmIndex].orgid]].name;
                    }
                }
                else {
                    retval.email_of_direct_manager = "";
                    retvalToString.email_of_direct_manager = "";

                    retval.phonenumber_of_direct_manager = "";
                    retvalToString.phonenumber_of_direct_manager = "";

                    retval.position_of_direct_manager = 0;
                    retvalToString.position_of_direct_manager = "";

                    retval.department_of_direct_manager = 0;
                    retvalToString.department_of_direct_manager = "";
                }
                if (retval.name_of_indirect_manager) {
                    var idmIndex = host.dict.employees[retval.name_of_indirect_manager];
                    if (idmIndex != 0) {
                        var peopleid = host.database.employees.items[idmIndex].peopleid;
                        var pIndex = host.dict.peoples[peopleid];
                        var email, phone, position, depar;
                        if (host.database.peoples.items[pIndexOfDirectManager].content.phone_1) {
                            retval.phonenumber_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_1;
                            retvalToString.phonenumber_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_1;
                        }
                        else if (host.database.peoples.items[pIndexOfDirectManager].content.phone_2) {
                            retval.phonenumber_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_2;
                            retvalToString.phonenumber_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.phone_2;
                        }
                        else {
                            retval.phonenumber_of_indirect_manager = "";
                            retvalToString.phonenumber_of_indirect_manager = "";
                        }

                        if (host.database.peoples.items[pIndexOfDirectManager].content.work_email) {
                            retval.email_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.work_email;
                            retvalToString.email_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.work_email;
                        }
                        else if (host.database.peoples.items[pIndexOfDirectManager].content.private_email) {
                            retval.email_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.private_email;
                            retvalToString.email_of_indirect_manager = host.database.peoples.items[pIndexOfDirectManager].content.private_email;
                        }
                        else {
                            retval.email_of_indirect_manager = "";
                            retvalToString.email_of_indirect_manager = "";
                        }
                        retval.position_of_indirect_manager = host.database.employees.items[idmIndex].position;
                        retvalToString.position_of_indirect_manager = host.database.employees.items[idmIndex].positionName;
                        retval.department_of_indirect_manager = host.database.employees.items[idmIndex].orgid;
                        retvalToString.department_of_indirect_manager = host.database.orgs.items[host.dict.orgs[host.database.employees.items[idmIndex].orgid]].name;
                    }
                }
                else {
                    retval.email_of_indirect_manager = "";
                    retvalToString.email_of_indirect_manager = "";

                    retval.phonenumber_of_indirect_manager = "";
                    retvalToString.phonenumber_of_indirect_manager = "";

                    retval.position_of_indirect_manager = 0;
                    retvalToString.position_of_indirect_manager = "";

                    retval.department_of_indirect_manager = 0;
                    retvalToString.department_of_indirect_manager = "";
                }


                return {
                    originVariable: retval,
                    variableToString: retvalToString
                };
            };

            var retval = {};

            employeeIdArray.forEach((item, i) => {
                retval[item] = getValueOfVariableForEmployee(item);
            });
            resolve(retval);
        });
    });
};

hr.email_templates.parseTemplate = function(template, employeeIdArray, examinationPluginVariable) {
    hr.email_templates.getValueOfVariableForTemplate(employeeIdArray).then(function(rs){
        var email_array = [];
        employeeIdArray.forEach((item, i) => {
            var originVariable, variableToString;
            originVariable = Object.assign(rs[item].originVariable, examinationPluginVariable.originVariable);
            variableToString = Object.assign(rs[item].variableToString, examinationPluginVariable.variableToString);
            if (template.receiver.startsWith("{{") && template.receiver.endsWith("}}")){
                var t_content = {};
                t_content.receiver = hr.sclang.executeExpression(template.receiver.substring(3, template.receiver.length - 3), originVariable);
                if (template.carbon_copy.startsWith("{{") && template.carbon_copy.endsWith("}}")){
                    t_content.carbon_copy = [hr.sclang.executeExpression(template.carbon_copy.substring(3, template.carbon_copy.length - 3), originVariable)];
                }
                else t_content.carbon_copy = [];
                if (template.blind_carbon_copy.startsWith("{{") && template.blind_carbon_copy.endsWith("}}")){
                    t_content.blind_carbon_copy = hr.sclang.executeExpression(template.blind_carbon_copy.substring(3, template.blind_carbon_copy.length - 3), originVariable);
                }
                else t_content.blind_carbon_copy = [];
                t_content.email_content = hr.sclang.executeTemplate(template.email_content, variableToString);
                t_content.subject = template.subject;
                email_array.push(t_content);
            }
        });
        ModalElement.showWindow({
            title: "Nội dung email mẫu",
            bodycontent: absol._({
                props: {
                    innerHTML: email_array[0].email_content
                }
            }),
            buttonlist: [
                {
                    text: "Gửi mail",
                    onclick: function(){
                        var processBar = absol._({
                            id: "progress-bar-id",
                            class: ['progress-bar', 'progress-bar-striped', 'active'],
                            props: {
                                role: "progressbar"
                            },
                            width: "0%"
                        })
                        var barContainer = absol._({
                            child: [
                                {
                                    style: {
                                        height: "34px",
                                        textAlign: "center"
                                    },
                                    child: {
                                        tag: 'h2',
                                        child: {text: "Đang gửi..."}
                                    }
                                },
                                {
                                    class: "progress",
                                    style: {
                                        width: "600px"
                                    },
                                    child: processBar
                                }
                            ]
                        });
                        ModalElement.show({
                            index: 24,
                            bodycontent: barContainer
                        });
                        var run2 = function(data){
                            return new Promise(function(rs, rj){
                                FormClass.api_call({
                                    url: "email_template_send.php",
                                    params: [
                                        {name: "data", value: EncodingClass.string.fromVariable([data])}
                                    ],
                                    func: function(success, message){
                                        if (success){
                                            if (message.substr(0, 2) == "ok"){
                                                var content = EncodingClass.string.toVariable(message.substr(2));
                                                if (content[0].email_record == 0) {
                                                    rs(content[0].receiver);
                                                }
                                                else {
                                                    rs("ok")
                                                }
                                            }
                                            else {
                                                rj(message);
                                            }
                                        }
                                        else {
                                            rj(message);
                                        }
                                    }
                                });
                            })
                        }
                        var t = "";
                        var count = 0;
                        var run = function(idx) {
                            run2(email_array[idx]).then(function(message){
                                if (message != "ok") {
                                    count++;
                                    if (t.length > 0) t += ", ";
                                    t += message;
                                }
                                if (idx < email_array.length - 1) {
                                    var percent = parseInt(((idx + 1) / email_array.length * 100), 10);
                                    processBar.style.width = percent+"%";
                                    run(idx + 1);
                                }
                                else {
                                    processBar.style.width = "100%";
                                    setTimeout(function(){
                                        ModalElement.closeAll();
                                        if (count > 0) {
                                            ModalElement.alert({message: "Gửi mail không thành công tới " + count + "/" + email_array.length + ": " + t });
                                        }
                                    }, 500)
                                }
                            }, function(err){console.log(err);})
                        }
                        run(0);
                    }
                },
                {
                    text: "Hủy",
                    onclick: function(){
                        ModalElement.close();
                    }
                }
            ]
        })

    }, function(err){console.log(err);});
};

hr.email_templates.deleteEmailTemplate = function(host, id){
    return new Promise(function(resolve,reject){
        ModalElement.show_loading();
        FormClass.api_call({
            url: "email_templates_delete.php",
            params: [{name: "id", value: id}],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var index = host.database.email_templates.getIndex(id);
                        host.database.email_templates.items.splice(index, 1);
                        resolve();
                    }
                    else if (message == "lock_system"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                    }
                    else if (message == "failed_used"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_can_not_delete")
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.email_templates.deleteEmailTemplateConfirm = function(host, id){
    return new Promise(function(resolve,reject){
        var index = host.database.email_templates.getIndex(id);
        ModalElement.question({
            title: LanguageModule.text("war_title_delete_email_template"),
            message: LanguageModule.text2("war_txt_detele", [host.database.email_templates.items[index].name]),
            onclick: function(sel){
                if (sel == 0){
                    hr.email_templates.deleteEmailTemplate(host, id).then(function(value){
                        resolve(value);
                    });
                }
            }
        });
    });
};

hr.email_templates.addEmailTemplatesubmit = function(host, id, getValueFunction){
    return new Promise(function(resolve,reject){
        var data = getValueFunction();
        if (!data) return;
        var oldData;
        if (id != 0){
            oldData = host.dataEmailTemplateEdit;
        }
        else {
            oldData = {
                name: "",
                comment: "",
                available: 1
            };
        }
        var ischange = contentModule.isChanged(oldData, data, [
            "name", "comment", "available", "receiver", "carbon_copy", "blind_carbon_copy", "subject", "email_content"
        ]);
        if (!ischange){
            ModalElement.close();
            hr.menu.changeCurrentUrlTab(host, "templates");
            return;
        }
        for (var i = 0; i < host.database.email_templates.items.length; i++){
            if (host.database.email_templates.items[i].id == id) continue;
            if (host.database.email_templates.items[i].name == data.name){
                ModalElement.alert({message: LanguageModule.text("war_txt_exist_name")});
                return;
            }
        }
        var rs = {
            id: id,
            groupid: data.groupid,
            name: data.name,
            comment: data.comment,
            available: data.available ? 1 : 0
        };
        rs.content = {
            receiver: data.receiver,
            carbon_copy: data.carbon_copy,
            blind_carbon_copy: data.blind_carbon_copy,
            subject: data.subject,
            email_content: data.email_content
        }
        if (id != 0){
            rs.ver = host.dataEmailTemplateEdit.ver;
        }
        else {
            rs.ver = 1;
        }
        rs.extrainfo = EncodingClass.string.fromVariable(data.extrainfo);
        rs.content = EncodingClass.string.fromVariable(rs.content);
        ModalElement.show_loading();
        FormClass.api_call({
            url: "email_template_save.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(rs)}],
            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);
                        if (id != 0){
                            var index = host.database.email_templates.getIndex(id);
                            host.database.email_templates.items[index] = st;
                            host.dataEmailTemplateEdit = host.database.email_templates.items[index];
                        }
                        else {
                            id = st.id;
                            data.id = id;
                            host.id = id;
                            host.database.email_templates.items.push(st);
                            host.dataEmailTemplateEdit = st;
                        }
                        resolve(hr.email_templates.getCellEmailTemplate(host, id));
                        ModalElement.close();
                        hr.menu.changeCurrentUrlTab(host, "templates");
                    }
                    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 if (message == "exist_name"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_exist_name")});
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.email_templates.addEmailTemplateClose = function(host, id, getValueFunction, resolve, resolveAdd){
    var data = getValueFunction();
    if (!data) {
        ModalElement.close();
        ModalElement.close();
        hr.menu.changeCurrentUrlTab(host, "templates");
        return;
    }
    var oldData;
    if (id != 0){
        oldData = host.dataEmailTemplateEdit;
    }
    else {
        oldData = {
            name: "",
            comment: "",
            available: 1
        };
    }
    var ischange = contentModule.isChanged(oldData, data, ["name", "comment", "available"]);
    if (!ischange){
        ModalElement.close();
        hr.menu.changeCurrentUrlTab(host, "templates");
        return;
    }
    contentModule.questionChange({
        onclick: function(sel){
            if (sel == 0){
                if (host.id == 0){
                    hr.email_templates.addEmailTemplatesubmit(host, host.id, getValueFunction).then(function(value){
                        resolveAdd(value);
                    });
                }
                else {
                    hr.email_templates.addEmailTemplatesubmit(host, host.id, getValueFunction).then(function(value){
                        resolve(value);
                    });
                }
            }
            else if (sel == 1){
                ModalElement.close();
                hr.menu.changeCurrentUrlTab(host, "templates");
            }
        }
    });
};

hr.email_templates.redrawDetails = function(host, id, resolve, resolveAdd){
    if (id > 0) hr.menu.changeCurrentUrlTab(host, "email_templates/" + id);
    host.id = id;
    function redraw(value){
        var formContainer = DOMElement.div({});
        ModalElement.showWindow({
            title: (id == 0)? LanguageModule.text("txt_add") : LanguageModule.text("txt_edit"),
            bodycontent: formContainer,
            buttonlist: [
                {
                    text: LanguageModule.text("txt_save"),
                    onclick: function(){
                        if (host.id == 0){
                            hr.email_templates.addEmailTemplatesubmit(host, host.id, getValueFunction).then(function(value){
                                resolveAdd(value);
                            });
                        }
                        else {
                            hr.email_templates.addEmailTemplatesubmit(host, host.id, getValueFunction).then(function(value){
                                resolve(value);
                            });
                        }
                    }
                },
                {
                    text: LanguageModule.text("txt_cancel"),
                    onclick: function(){
                        hr.email_templates.addEmailTemplateClose(host, host.id, getValueFunction, resolve, resolveAdd);
                    }
                }
            ]
        });
        var getValueFunction;
        contentModule.makeFormData({
            typeid: host.form_config.email_templates.typeid,
            formid: host.form_config.email_templates.input_form,
            initialValue: value,
            formContainer: formContainer,
            typelists: host.database.typelists.items,
            variableType: "system"
        }).then(function(getValue){
            getValueFunction = getValue;
            absol.form.traversal(formContainer.formFragment.view, function(item){
                if (item.node.tag === "TextInput") {
                    item.node.domElt.focus();
                    item.stop();
                    return;
                }
                if (id < 0){
                    var activeElt = absol.form.findComponent(formContainer.formFragment.view, {
                        name: 'type_email_template_active',
                        depth: false
                    });
                    if (activeElt) activeElt.attributes.disabled = true;
                }
            });
        });
    };
    if (id != 0){
        redraw(host.dataEmailTemplateEdit);
    }
    else {
        redraw({groupid: host.groupidToAddNewRecord});
    }
};

hr.email_templates.addEmailTemplate = function(host, id, resolve, resolveAdd){
    if (id == 0){
        var groupItems = host.database.template_groups.items.map(function(elt){
            return {
                value: elt.id,
                text: elt.name,
                sortText: absol.string.nonAccentVietnamese(elt.name.toLowerCase())
            };
        });
        groupItems.sort(function(a, b){
            if (a.sortText > b.sortText) return 1;
            if (a.sortText < b.sortText) return -1;
            return 0;
        });
        host.funcs.formEmailTemplateChooseGroup(groupItems).then(function(value){
            if (value === null) return;
            host.groupidToAddNewRecord = value;
            hr.email_templates.redrawDetails(host, id, resolve, resolveAdd);
        });
    }
    else {
        if (host.database.email_templates.getIndex(id) < 0) return;
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "email_templates_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));
                        if (st.id !== undefined){
                            st.content = EncodingClass.string.toVariable(st.content);
                            st.receiver = st.content.receiver;
                            st.carbon_copy = st.content.carbon_copy;
                            st.blind_carbon_copy = st.content.blind_carbon_copy;
                            st.subject = st.content.subject;
                            st.email_content = st.content.email_content;
                            host.dataEmailTemplateEdit = st;
                            if (host.dataEmailTemplateEdit.extrainfo == "") host.dataEmailTemplateEdit.extrainfo = {};
                            else host.dataEmailTemplateEdit.extrainfo = EncodingClass.string.toVariable(host.dataEmailTemplateEdit.extrainfo);
                        }
                        else {
                            var index = host.database.email_templates.getIndex(id);
                            host.dataEmailTemplateEdit = host.database.email_templates.items[index];
                            host.dataEmailTemplateEdit.content = EncodingClass.string.toVariable(host.dataEmailTemplateEdit.content);
                            host.dataEmailTemplateEdit.receiver = host.dataEmailTemplateEdit.content.receiver;
                            host.dataEmailTemplateEdit.carbon_copy = host.dataEmailTemplateEdit.content.carbon_copy;
                            host.dataEmailTemplateEdit.blind_carbon_copy = host.dataEmailTemplateEdit.content.blind_carbon_copy;
                            host.dataEmailTemplateEdit.subject = host.dataEmailTemplateEdit.content.subject;
                            host.dataEmailTemplateEdit.email_content = host.dataEmailTemplateEdit.content.email_content;
                        }
                        hr.email_templates.redrawDetails(host, id, resolve, resolveAdd);
                    }
                    else if (message == "war_txt_failed_data"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_failed_data"),
                            func: function(){
                                hr.email_templates.init(host);
                            }
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    }
};

hr.email_templates.getCellEmailTemplate = function(host, id){
    var index = host.database.email_templates.getIndex(id);
    var func = {
        edit: function(resolve){
            if (id < 0) return;
            hr.email_templates.addEmailTemplate(host, id, resolve);
        }
    };
    if (id > 0) func.delete = function(){
        return new Promise(function(resolve,reject){
            hr.email_templates.deleteEmailTemplateConfirm(host, id).then(function(value){
                resolve(value);
            });
        });
    };
    var res = host.database.email_templates.items[index];
    res.func = func;
    return res;
};

hr.email_templates.redraw = function(host, groupid){
    var displayDic = {
        name: true,
        groupid: true,
        available: true
    };
    var columnList = contentModule.getColumnListFromDatatype(host, "email_templates", displayDic);
    var redrawTableFunc = function(){
        var data = [];
        for (var i = 0; i < host.database.email_templates.items.length; i++){
            if (groupid == 0 || host.database.email_templates.items[i].groupid == groupid) {
                data.push(hr.email_templates.getCellEmailTemplate(host, host.database.email_templates.items[i].id));
            }
        }
        contentModule.getColumnListConfig(host, host.user_column_configsDic, columnList, "email_template_list").then(function(value){
            host.configColumnEmailTemplates = value;
            host.dataView = host.funcs.formEmailTemplatesContentData({
                data: data,
                inputsearchbox: host.inputsearchbox,
                configColumnEmailTemplates: host.configColumnEmailTemplates,
                configColumnFunc: function(){
                    contentModule.userColumnConfigForm({
                        type: "email_template_list",
                        columnList: columnList
                    }).then(function(value){
                        host.user_column_configsDic["email_template_list"] = value;
                        redrawTableFunc();
                    });
                }
            });
            host.data_container.appendChild(host.dataView);
        });
    };
    redrawTableFunc();
};

hr.email_templates.init = function(host){
    return new Promise(function(resolveMn, rejectMn){
        hr.menu.changeCurrentUrlTab(host, "templates");
        host.database = {};
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "email_templates_load_init"}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        contentModule.makeDatabaseContent(host, content);
                        host.database.template_groups.items.unshift({
                            id: -1,
                            name: LanguageModule.text("txt_onboarding"),
                            comment: "",
                            extrainfo: "obj#0#",
                            available: 1,
                            ver: 1
                        });
                        host.database.template_groups.items.unshift({
                            id: -2,
                            name: "Khác...",
                            comment: "",
                            extrainfo: "obj#0#",
                            available: 1,
                            ver: 1
                        });
                        host.database.email_templates.items.forEach(function(elt){
                            elt.content = EncodingClass.string.toVariable(elt.content);
                            elt.receiver = elt.content.receiver,
                            elt.carbon_copy = elt.content.carbon_copy,
                            elt.blind_carbon_copy = elt.content.blind_carbon_copy,
                            elt.subject = elt.content.subject,
                            elt.content = elt.content.content
                        });
                        host.form_config = contentModule.configVariable(host);
                        contentModule.makeInputFormDecode(host.database.input_forms.items);
                        hr.input_form.loadFormConstructorToAssembler(host.database.input_forms.items, host.database.typelists.items);
                        host.user_column_configsDic = contentModule.getUser_column_configsDic(host);
                        host.inputsearchbox = absol.buildDom({
                            tag:'searchcrosstextinput',
                            style: {
                                width: "var(--searchbox-width)"
                            },
                            props:{
                                placeholder: LanguageModule.text("txt_search")
                            }
                        });
                        var cmdbutton = {
                            close: function(host){
                                return function (event, me) {
                                    if (hr.isMobile){
                                        host.holder.selfRemove();
                                        hr.menu.loadPage(100);
                                    }
                                    else {
                                        hr.menu.tabPanel.removeTab(host.holder.id);
                                    }
                                }
                            } (host),
                            add: function(host){
                                return function (event, me) {
                                    hr.email_templates.addEmailTemplate(host, 0, function onSave(value){
                                        host.newRecord = host.newRecord.updateCurrentRow(host.funcs.formEmailTemplateGetRow(host.configColumnEmailTemplates, value));
                                    }, function onAdd(value){
                                        host.newRecord = host.dataView.insertRow(host.funcs.formEmailTemplateGetRow(host.configColumnEmailTemplates, value));
                                    });
                                }
                            } (host)
                        };
                        host.groupid = 0;
                        var groupItems = host.database.template_groups.items.map(function(elt){
                            return {value: elt.id, text: elt.name};
                        });
                        groupItems.unshift({value: 0, text: LanguageModule.text("txt_all")});
                        var groupChange = function(host){
                            return function(groupid){
                                hr.email_templates.redraw(host, groupid);
                            }
                        }(host);
                        host.data_container = DOMElement.div({attrs: {style: {paddingBottom: "var(--footer-margin)"}}});
                        host.holder.addChild(host.frameList);
                        var singlePage = host.funcs.formEmailTemplatesInit({
                            cmdbutton: cmdbutton,
                            data_container: host.data_container,
                            inputsearchbox: host.inputsearchbox,
                            groupItems: groupItems,
                            groupChange: groupChange
                        });
                        host.frameList.addChild(singlePage);
                        singlePage.requestActive();
                        hr.email_templates.redraw(host, 0);
                        resolveMn(host);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

VaKeR 2022