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/data_module.js
'use strict';
data_module.makeDatabaseCommon = function(content){
    var i, keys;
    keys = Object.keys(content);
    keys.forEach(function(item){
        data_module[item] = {};
        data_module[item].items = content[item];
        data_module[item].getIndex = function(id){
            for (var i = 0; i < data_module[item].items.length; i++){
                if (data_module[item].items[i].id == id) return i;
            }
            return -1;
        }
        if (item == "processes"){
            var x = contentModule.getProcessesSystem();
            var index;
            for (var i = 0; i < x.length; i++){
                index = data_module.processes.getIndex(x[i].id);
                if (index < 0){
                    data_module.processes.items.unshift(x[i]);
                }
                else {
                    data_module.processes.items[index].name = x[i].name;
                    data_module.processes.items[index].value = x[i].value;
                }
            }
        }
    });
};

data_module.loadInputFormList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        // rs(form_module.defaultInputFormForPrimitiveType().concat(content));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadMobileInputFormList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_mobile_load_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        // rs(form_module.defaultInputFormForPrimitiveType().concat(content));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadMobileOutputFormList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'output_form_mobile_load_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        // rs(form_module.defaultInputFormForPrimitiveType().concat(content));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOutputFormList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'output_form_load_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        // rs(form_module.defaultOutputFormForPrimitiveType().concat(content));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadType_listsList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["typelists"], function(){
            var content = data_module.getDataTablesFromCache("typelists");
            content.forEach((cur) => {
                cur.content = EncodingClass.string.toVariable(cur.content);
            });
            rs(content);
        });
    });
};

data_module.loadFormConfig = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(
            ["configs"],
            function () {
                var configs = data_module.getDataTablesFromCache("configs");
                var content = [];
                for (var i = 0; i < configs.length; i++){
                    if (configs[i].name == "form_config"){
                        content.push(configs[i]);
                        break;
                    }
                }
                var systemVariable = contentModule.getSystemVariable();
                var dict = {};
                if (content.length == 0){
                    systemVariable.forEach(function(elt){
                        dict[elt.task] = elt;
                        if (hr.isMobile){
                            dict[elt.task].input_form = dict[elt.task].mobile_input_form
                            dict[elt.task].output_form = dict[elt.task].mobile_output_form
                        }
                    });
                }
                else {
                    var form_config = EncodingClass.string.toVariable(content[0].content);
                    systemVariable.forEach(function(elt){
                        dict[elt.task] = elt;
                        if (form_config[elt.task]){
                            dict[elt.task].typeid = form_config[elt.task].typeid;
                            if (hr.isMobile) {
                                if (form_config[elt.task].mobile_input_form != 0) dict[elt.task].input_form = form_config[elt.task].mobile_input_form;
                                if (form_config[elt.task].mobile_output_form != 0) dict[elt.task].output_form = form_config[elt.task].mobile_output_form;
                            }
                            else {
                                if (form_config[elt.task].input_form != 0) dict[elt.task].input_form = form_config[elt.task].input_form;
                                if (form_config[elt.task].output_form != 0) dict[elt.task].output_form = form_config[elt.task].output_form;
                            }
                        }
                    });
                }
                rs(dict);
            }
        );
    });
};

data_module.loadDataCommon = function(){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_common"},
                {name: "privSystem", value: systemconfig.privSystem}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        data_module.employeeOfMe = content.employeeOfMe;
                        delete content.employeeOfMe;
                        if (content.config_checkin.length > 0){
                            var x = EncodingClass.string.toVariable(content.config_checkin[0].content);
                            hr.maximumDistance = x.distance_checkin;
                        }
                        else {
                            hr.maximumDistance = 100;
                        }
                        delete content.config_checkin;
                        if (systemconfig.privSystem < 2){
                            data_module.admin_rights_of_me = {};
                            for (var i = 0; i < content.admin_rights_of_me.length; i++){
                                data_module.admin_rights_of_me[content.admin_rights_of_me[i].priv] = true;
                            }
                            delete content.admin_rights_of_me;
                        }
                        data_module.makeDatabaseCommon(content);
                        resolve();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadTypeList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["typelists"], function(){
            rs(data_module.getDataTablesFromCache("typelists"));
        });
    });
};


data_module.loadFormContent = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: 'database_load.php',
            params: [
                {name: 'task', value: 'input_form_load_by_id'},
                {name: 'id', value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        if (content.length == 0) {
                            ModalElement.alert({message: "error"});
                            reject("error");
                        }
                        else {
                            content[0].content = EncodingClass.string.toVariable(content[0].content);
                            resolve(content[0].content);
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadMobileFormContent = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: 'database_load.php',
            params: [
                {name: 'task', value: 'input_form_mobile_load_by_id'},
                {name: 'id', value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        if (content.length == 0) {
                            ModalElement.alert({message: "error"});
                            reject("error");
                        }
                        else {
                            content[0].content = EncodingClass.string.toVariable(content[0].content);
                            resolve(content[0].content);
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadUsersList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_users_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPeoplesList = function(checkFunc){
    return new Promise(function(rs, rj){
        data_module.loadTables(["peoples"], function(){
            rs(data_module.getDataTablesFromCache("peoples", checkFunc));
        });
    });
};

data_module.loadOrgsList = function(checkFunc){
    return new Promise(function(rs, rj){
        data_module.loadTables(["orgs"], function(){
            rs(data_module.getOrgsFromCache(checkFunc));
        });
    });
};

data_module.loadEmployeesListByOrgid = function(orgid){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_employees_by_orgid'},
                {name: "orgid", value: orgid}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadEmployeesList = function(checkFunc){
    return new Promise(function(rs, rj){
        data_module.loadTables(["employees"], function(){
            rs(data_module.getEmpsFromCache(checkFunc));
        });
    });
};

data_module.loadTemplateGroupList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_template_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadEmployeeManagersList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["employee_managers"], function(){
            rs(data_module.getDataTablesFromCache("employee_managers"));
        });
    });
};

data_module.loadGeoposOrgsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_geopos_orgs_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadEmployeePositionsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_employee_position_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadEmployeePositions2List = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_employee_position_2_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPositionsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_positions_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPositions2List = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_positions_2_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadGeographiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_geographies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadWorktimeMachinesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_worktime_machines'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPositionsListByOrgid = function(orgid){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_positions_list_by_orgid'},
                {name: "orgid", value: orgid},
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPositionById2 = function(id){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_positions_by_id'},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

// data_module.loadPositionById = function(id){
//     return new Promise(function(rs, rj){
//         FormClass.api_call({
//             url: "database_load.php",
//             params: [
//                 {name: "task", value: 'position_load_by_id'},
//                 {name: "orgid", value: 0},
//                 {name: "id", value: id},
//             ],
//             func: function(success, message){
//                 if (success){
//                     if (message.substr(0, 2) == 'ok'){
//                         var content = EncodingClass.string.toVariable(message.substr(2));
//                         rs(content);
//                     }
//                     else {
//                         ModalElement.alert({message: message});
//                     }
//                 }
//                 else {
//                     ModalElement.alert({message: message});
//                 }
//             }
//         })
//     });
// };

data_module.generateOrgSelectItems = function(){
    return new Promise(function(resolve, reject){
        data_module.loadOrgsList().then(function(rs){
            var host = {database: {}};
            contentModule.makeDatabaseContent(host, {orgs: rs});
            contentModule.makeOrgsIndex(host);
            resolve(contentModule.getOrgsListSelectTreeMenu(host));
        }, function(rj){
            console.log(rj);
            reject();
        });
    });
};

data_module.generatePositionSelectItems = function(orgid){
    return new Promise(function(resolve, reject){
        data_module.loadPositionsListByOrgid(orgid).then(function(rs){
            var host = {database: {}};
            contentModule.makeDatabaseContent(host, {positions: rs});
            resolve(contentModule.getPositionsListSelectMenu(host));
        }, function(rj){
            console.log(rj);
            reject();
        });
    });
};

data_module.loadStaticFragmentClasses = function () {
    var module = hr.input_form.fragmentClasses;
    if (module.staticLoaded) return;
    module.staticLoaded = true;
    var OOP = absol.OOP;
    var FmFragment = absol.form.FmFragment;
    var NotLoadedLayout = {
        tag: 'LinearLayout',
        style: { width: 'auto', height: 'auto' },
        children: {
            tag: 'text',
            style: { top: 5, left: 5, right: 5, bottom: 5 },
            attributes: { text: 'Lỗi, nếu chưa tải layout!' }
        }
    }


    function SelectPositionInDepartment() {
        FmFragment.call(this);
        this.positionSyncCache = {};
    }

    OOP.mixClass(SelectPositionInDepartment, FmFragment);
    SelectPositionInDepartment.tag = 'unset';//chưa tải về database, không biết tag nào
    SelectPositionInDepartment.prototype.contentViewData = NotLoadedLayout;

    SelectPositionInDepartment.prototype.onCreated = function () {
        //type_select_position_orgid chính là name của input, chỉ cần thêm $ để truy cập vì đã bind sẵn
        var thisFrg = this;
        data_module.generateOrgSelectItems().then(function (orgItems){
            thisFrg.$type_select_position_orgid.domElt.items = orgItems;
            // thisFrg.$type_select_position_orgid.domElt.value = orgItems.length > 0 ? orgItems[0].value : 0;
            thisFrg.handleOrgChange();
        });

        this.$type_select_position_orgid.domElt.on('change', this.handleOrgChange.bind(this));
    };

    SelectPositionInDepartment.prototype.handleOrgChange = function () {
        var orgid = this.$type_select_position_orgid.domElt.value;
        var positionItemsSync = this.positionSyncCache[orgid];
        if (!positionItemsSync) {
            positionItemsSync = data_module.generatePositionSelectItems(orgid);
            this.positionSyncCache[orgid] = positionItemsSync;
        }
        var thisFrg = this;
        positionItemsSync.then(function (positionItems){
            thisFrg.$type_select_position_id.domElt.items = positionItems;
            // thisFrg.$type_select_position_id.domElt.value = positionItems.length > 0 ? positionItems[0].value : 0;
        })

    };

    module.SelectPositionInDepartment = SelectPositionInDepartment;


    function ValidTimeShift(){
        FmFragment.call(this);
    }

    module.ValidTimeShift = ValidTimeShift;

    OOP.mixClass(ValidTimeShift, FmFragment);

    ValidTimeShift.tag = 'unset';//chưa tải về database, không biết tag nào
    ValidTimeShift.prototype.contentViewData = NotLoadedLayout;

    ValidTimeShift.prototype.onCreated = function(){
        this._setupCheckboxTimeView(
            "type_shift_valid_time_check_in_for_first_half_shift_time_start",
            "type_shift_valid_time_check_in_for_first_half_shift_time_start_from",
            "type_shift_valid_time_check_in_for_first_half_shift_time_start_to",
            "type_shift_first_half_shift_time_start"
        );
        this._setupCheckboxTimeView(
            "type_shift_valid_time_check_out_for_first_half_shift_time_finish",
            "type_shift_valid_time_check_out_for_first_half_shift_time_finish_from",
            "type_shift_valid_time_check_out_for_first_half_shift_time_finish_to",
            "type_shift_first_half_shift_time_finish"
        );
        this._setupCheckboxTimeView(
            "type_shift_valid_time_check_in_for_second_half_shift_time_start",
            "type_shift_valid_time_check_in_for_second_half_shift_time_start_from",
            "type_shift_valid_time_check_in_for_second_half_shift_time_start_to",
            "type_shift_second_half_shift_time_start"
        );
        this._setupCheckboxTimeView(
            "type_shift_valid_time_check_out_for_second_half_shift_finish",
            "type_shift_valid_time_check_out_for_second_half_shift_finish_from",
            "type_shift_valid_time_check_out_for_second_half_shift_finish_to",
            "type_shift_second_half_shift_time_finish"
        );
        this._setupOvertimeAfterShiftAllowed(
            "type_shift_overtime_after_shift_allowed",
            "type_shift_overtime_after_shift_wage",
            "type_shift_overtime_after_shift_time_start",
            "type_shift_overtime_after_shift_time_finish",
            "type_shift_overtime_after_shift_min_time",
            "type_shift_overtime_after_shift_round_minute_to_hour"
        );
    };

    ValidTimeShift.prototype._setupCheckboxTimeView = function(checkboxName, startInputName, endInputName, eltDefautName){
        var checkboxElt = this.findViewByName(checkboxName).$content;
        var startInputElt = this.findViewByName(startInputName).domElt;
        var endInputElt = this.findViewByName(endInputName).domElt;
        var eltDefautElt = this.findViewByName(eltDefautName).domElt;
        var oldChecked;
        checkboxElt.on('change', function(){
            if (this.checked){
                startInputElt.disabled = false;
                if (oldChecked !== undefined) startInputElt.dayOffset = eltDefautElt.dayOffset;
                endInputElt.disabled = false;
                if (oldChecked !== undefined) endInputElt.dayOffset = eltDefautElt.dayOffset;
            }
            else {
                startInputElt.disabled = true;
                startInputElt.dayOffset = null;
                endInputElt.disabled = true;
                endInputElt.dayOffset = null;
            }
            oldChecked = this.checked;
        });
    };

    ValidTimeShift.prototype._setupOvertimeAfterShiftAllowed = function(checkboxName, wageName, time_startName, time_finishName, min_timeName, round_minute_to_hourName){
        var checkboxElt = this.findViewByName(checkboxName).$content;
        var wageElt = this.findViewByName(wageName).$content;
        var time_startElt = this.findViewByName(time_startName).domElt;
        var time_finishElt = this.findViewByName(time_finishName).domElt;
        var min_timeElt = this.findViewByName(min_timeName).domElt;
        var round_minute_to_hourElt = this.findViewByName(round_minute_to_hourName).domElt;
        checkboxElt.on('change', function(){
            if (this.checked){
                wageElt.disabled = false;
                time_startElt.disabled = false;
                time_finishElt.disabled = false;
                min_timeElt.disabled = false;
                round_minute_to_hourElt.disabled = false;
            }
            else {
                wageElt.disabled = true;
                wageElt.checked = false;
                time_startElt.disabled = true;
                time_startElt.dayOffset = null;
                time_finishElt.disabled = true;
                time_finishElt.dayOffset = null;
                min_timeElt.disabled = true;
                min_timeElt.value = 0;
                round_minute_to_hourElt.disabled = true;
                round_minute_to_hourElt.value = 0;
            }
        });
    };
};

data_module.makeImageContent = function(id){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_image_content'},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        if (content.length == 0) rs(null);
                        else {
                            if (content[0].file_new) content[0].url = window.domainFilesNew + content[0].id + "_" + content[0].name + ".upload";
                            else content[0].url = window.domainFiles + content[0].id + "_" + content[0].name + ".upload";
                            rs(content[0]);
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.makeFilesContent = function(id){
    return new Promise(function(rs, rj){
        var array = [];
        var arrayOld = [];
        id.forEach(function(elt){
            if (elt instanceof Object != true) array.push(elt);
            else {
                if (elt.filename) {
                    if (elt.type == "img"){
                        elt.url = window.domainImagesCD + elt.filename + ".upload";
                    }
                    else {
                        elt.url = window.domainFilesCD + elt.filename + ".upload";
                    }
                    arrayOld.push(elt);
                }
            }
        });
        if (array.length == 0){
            rs(arrayOld);
            return;
        }
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_files_content'},
                {name: "id", value: EncodingClass.string.fromVariable(array)}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        if (content.length == 0) rs(arrayOld);
                        else {
                            content.forEach(function(elt){
                                if (elt.file_new) elt.url = window.domainFilesNew + elt.id + "_" + elt.name + ".upload";
                                else elt.url = window.domainFiles + elt.id + "_" + elt.name + ".upload";
                            });
                            rs(arrayOld.concat(content));
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAssetsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_assets_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAssetsListByWarehouseid = function(warehouseid){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_assets_list_by_warehouseid'},
                {name: "warehouseid", value: warehouseid}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadInstruments_and_toolsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_instruments_and_tools_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadWarehousesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_warehouses_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAllowance_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_allowance_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadBonus_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_bonus_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPiece_wage_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_piece_wage_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        console.log(content);
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPiece_wage_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_piece_wage_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAttendance_clock_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_attendance_clock_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        console.log(content);
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAttendance_clock_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_attendance_clock_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadStandard_workday_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_standard_workday_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadStandard_workday_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_standard_workday_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadWork_flow_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_work_flow_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadWork_flowsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_work_flows_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

// data_module.loadObjectsList = function(tag){
//     console.log(tag, "load_api");
//     return new Promise(function(rs, rj){
//         FormClass.api_call({
//             url: "database_load.php",
//             params: [
//                 {name: "task", value: 'input_form_load_objects_list'}
//             ],
//             func: function(success, message){
//                 console.log(tag, success, message);
//                 if (success){
//                     if (message.substr(0, 2) == 'ok'){
//                         var content = EncodingClass.string.toVariable(message.substr(2));
//                         rs(content);
//                     }
//                     else {
//                         ModalElement.alert({message: message});
//                     }
//                 }
//                 else {
//                     ModalElement.alert({message: message});
//                 }
//             }
//         })
//     });
// };

data_module.loadPayrollCycleList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_payroll_cycle_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadLesson_categoriesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_lesson_categories_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPartner_classList = function(checkFunc){
    return new Promise(function(rs, rj){
        data_module.loadTables(["partner_class"], function(){
            rs(data_module.getDataTablesFromCache("partner_class", checkFunc));
        });
    });
};

data_module.loadPartnerList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["partner_class", "partners", "partner_class_links"], function(){
            var host = {database: {}};
            var content = {
                partner_class: data_module.getDataTablesFromCache("partner_class", function(record){
                    return {
                        id: record.id,
                        name: record.name,
                        available: record.available
                    };
                })
            };
            var loadPartnerFunc = new Promise(function(rss, rjj){
                data_module.cacheContent_partners.psearch({
                    searchFunc: function(record){
                        return {
                            id: record.id,
                            name: record.name
                        };
                    },
                    callbackfunc: function(values){
                        content.partner = values;
                        rss();
                    }
                });
            });
            var loadPartnerClassLinksFunc = new Promise(function(rss, rjj){
                data_module.cacheContent_partner_class_links.psearch({
                    searchFunc: function(record){
                        return record;
                    },
                    callbackfunc: function(values){
                        content.partner_class_links = values;
                        rss();
                    }
                });
            });
            Promise.all([loadPartnerFunc, loadPartnerClassLinksFunc]).then(function(){
                contentModule.makeDatabaseContent(host, content);
                contentModule.makePartnerClassLinksData(host);
                contentModule.makePartnerClassLinksDataText(host);
                host.database.partner_class.items = undefined;
                host.database.partner_class_links.items = undefined;
                rs(host.database.partner.items);
            });
        });
    });
};

data_module.loadTaskListLazySimpleData = function(){
    return new Promise(function(rs, rj){
        var task = [];
        var loadData = function(startIndex){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: 'view_column_load_task_single_list'},
                    {name: "startIndex", value: startIndex}
                ],
                func: function(success, message){
                    if (success){
                        if (message.substr(0, 2) == 'ok'){
                            var content = EncodingClass.string.toVariable(message.substr(2));
                            task = task.concat(content.task);
                            if (content.done){
                                rs(task);
                            }
                            else {
                                loadData(task.length);
                            }
                        }
                        else {
                            ModalElement.alert({message: message});
                        }
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
            })
        };
        loadData(0);
    });
};

data_module.loadPartnerGPSList = function(host){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'checkin_load_partner_list'},
                {name: "latLngScope", value: EncodingClass.string.fromVariable(host.latLngScope)}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        contentModule.makeDatabaseContent(host, content);
                        rs();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadContactList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["contacts"], function(){
            rs(data_module.getDataTablesFromCache("contacts", function(record){
                return {
                    id: record.id,
                    name: record.name
                }
            }));
        });
    });
};

data_module.loadOther_liability_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_other_liability_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content1);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOther_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_other_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadSalary_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_salary_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadTrade_union_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_trade_union_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOvertime_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_overtime_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadStandard_workday_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_standard_workday_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadStandard_workday_policiesList  = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_standard_workday_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOffboardingTypeList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_offboarding_type_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOffboardingReasonList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_offboarding_reason_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPunishment_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_punishment_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAssetCategoryList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_asset_category_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadInstrumentsAndToolsCategoryList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_instruments_and_tools_category_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadTax_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_tax_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAdvance_payment_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_advance_payment_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadLate_early_checkin_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_late_early_checkin_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadBenefit_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_benefit_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadLeave_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_leave_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadInsurance_policy_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_insurance_policy_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadTrainingProgram_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_training_program_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadShiftsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_shifts_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadTimesheetsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_timesheets_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        console.log(content);
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPayPercentageList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_pay_percentage_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadInsurance_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_insurance_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadTax_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_tax_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadTrade_union_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_trade_union_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadLeave_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_leave_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadBenefit_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_benefit_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAllowance_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_allowance_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadBonus_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_bonus_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOvertime_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_overtime_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPunishment_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_punishment_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadAdvance_payment_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_advance_payment_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadLate_early_checkin_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_late_early_checkin_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadSalary_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_salary_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOther_liability_policiesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_other_liability_policies_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadEmployment_contract_typesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_employment_contract_types_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadNationsList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["nations"], function(){
            var content = data_module.getDataTablesFromCache("nations");
            rs(content);
        });
    });
};

data_module.loadCitiesList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["cities"], function(){
            var content = data_module.getDataTablesFromCache("cities", function(record){
                return {
                    id: record.id,
                    nationid: record.nationid,
                    name: record.name,
                    available: record.available
                }
            });
            rs(content);
        });
    });
};

data_module.loadEthnicsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_ethnics_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOffboardingList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_offboarding_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadEmploymentContractAndTypesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_employment_contract_and_types_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadReligionsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_religions_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadProjectsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_projects_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadDocument_typesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_document_types_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadDocument_groupsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_document_groups_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadDocument_foldersList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_document_folders_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadWelcomeTemplatesList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_welcome_templates_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadProductGroupList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_product_group_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPositionGroupList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_position_group_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        var dic = contentModule.makeDictionaryIndex(content);
                        var systemData = contentModule.getPositionGroupsSystem();
                        systemData.forEach((cur) => {
                            var idx = dic[cur.id];
                            if (idx === undefined) content.unshift(cur);
                        });
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadProductsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_product_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.getOrgCompaniesFromCache = function(){
    var keys = data_module.getIDList("orgs");
    var res = [];
    var i, t;
    for (i = 0; i < keys.length; i++) {
        t = data_module.getContent("orgs", keys[i]);
        if ((t.parentid == 0) && (t.obsoletedby == 0) && (t.isdelete == 0)) {
            delete t.uts;
            res.push(t);
        }
    }
    return res;
};

data_module.loadOrgCompanysList = function(){
    return new Promise(function(rs, rj){
        data_module.loadTables(["orgs"], function(){
            rs(data_module.getOrgCompaniesFromCache());
        });
    });
};

data_module.loadOrgById = function(id){
    return new Promise(function(rs, rj){
        data_module.loadTables(["orgs"], function(){
            var t;
            if (data_module.cacheContent_orgs.exists(id)) {
                t = data_module.getContent("orgs", id);
                delete t.uts;
                rs(t);
            }
            else {
                ModalElement.alert({message: "Lỗi dữ liệu"});
                console.log("failed_id");
            }
        });
    });
};

data_module.loadEmployeeById = function(id){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'menu_quick_open_link_employee'},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadPositionById = function(id){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'menu_quick_open_link_position'},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadCommentList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_comment_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadChatList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_chat_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadCompanyInHrDB = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'hr_db_load_company'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadCompanyidFromEmployee_benefit_and_liability_requestById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_employee_benefit_and_liability_request_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadCompanyidFromAsset_transactionsById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_asset_transactions_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadCompanyidFromEmployment_ContractById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_employment_contract_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadCompanyidFromSalary_decisionById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_salary_decision_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        host.type.value = "salary_decisions";
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadCompanyidFromEmulationRewardById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_emulation_reward_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        host.type.value = "emulation_and_reward";
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadCompanyidFromDisciplineById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_dicipline_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        host.type.value = "discipline";
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadCompanyidFromOnboardingById = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "data_module_load_onboarding_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        var employeeid = content.employeeid;
                        var eIndex = host.database.employees.getIndex(employeeid);
                        if (eIndex >= 0){
                            var orgid = host.database.employees.items[eIndex].orgid;
                            var oIndex = host.database.orgs.getIndex(orgid);
                            while (host.database.orgs.items[oIndex].parentid > 0){
                                orgid = host.database.orgs.items[oIndex].parentid;
                                oIndex = host.database.orgs.getIndex(orgid);
                            }
                            var items = host.company_select.items;
                            for (var i = 0; i < items.length; i++){
                                if (items[i].value == orgid){
                                    host.company_select.value = orgid;
                                    resolve(orgid);
                                    break;
                                }
                            }
                        }
                    }
                    else if (message == "war_txt_failed_data"){
                        console.log(message);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadUserColumnConfigsByTypeList = function(typeList){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_user_column_config_by_typeList'},
                {name: "typeList", value: EncodingClass.string.fromVariable(typeList)}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadInput_formsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_input_forms_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadOutput_formsList = function(){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'input_form_load_output_forms_list'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loaddObjectsById = function(id){
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'objects_load_by_id'},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs(content);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.loadNumberOfChatUnread = function(){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'load_number_of_chat_unread'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        resolve(st.number_of);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};



data_module.loadAllEmployeesList = function(){
    return new Promise(function(resolve, reject){
        data_module.loadTables(
            ["employees"],
            function () {
                var all_employees = data_module.getDataTablesFromCache("employees", function(record){
                    return {
                        id: record.id,
                        peopleid: record.peopleid,
                        firstid: record.firstid,
                        obsoletedby: record.obsoletedby,
                        orgid: record.orgid
                    }
                });
                data_module.makeDatabaseCommon({all_employees: all_employees});
                contentModule.makeAllEmployeesDic();
                resolve();
                console.log(22, new Date().getTime());
            }
        );
    });
};

data_module.loadUserTagEmployeeLogs = function() {
    return new Promise(function(rs, rj){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: 'comment_load_user_tag_employee_logs'}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == 'ok'){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        rs({user_tag_employee_logs: content});
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
};

data_module.employee_benefit_and_liability_list_load_details = function(host, id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "employee_benefit_and_liability_list_load_details"},
                {name: "listid", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        contentModule.makeDatabaseContent(host, st);
                        resolve();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadSCLangNamespaceList = function(){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [{name: "task", value: "load_sclang_namespace_list"}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};



data_module.loadSCLangNodeInfoList = function(){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [{name: "task", value: "load_sclang_node_info_list"}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};



data_module.loadSCLangNamespaceById = function(id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "load_sclang_namespace_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadSCLangNodeContentList = function () {
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [{name: "task", value: "load_sclang_node_content_list"}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        st.forEach(function(it){
                            it.content = EncodingClass.string.toVariable(it.content);
                        })
                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadSCLangNodeById = function(id){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "load_sclang_node_by_id"},
                {name: "id", value: id}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        st.content = EncodingClass.string.toVariable(st.content);
                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};
data_module.loadSCLangNodeByNamespaceId = function(namespaceid){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "load_sclang_node_by_namespaceid"},
                {name: "namespaceid", value: namespaceid}
            ],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));

                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.loadConfigBsc = function(){
    return new Promise(function(resolve, reject){
        data_module.loadTables(
            ["configs"],
            function () {
                var configs = data_module.getDataTablesFromCache("configs");
                var st = [];
                for (var i = 0; i < configs.length; i++){
                    if (configs[i].name == "config_bsc"){
                        st.push(configs[i]);
                        break;
                    }
                }
                if (st.length > 0){
                    // for (var x in systemconfig){
                    //     if (x.startsWith("bsc_")){
                    //         delete systemconfig[x];
                    //     }
                    // }
                    var x = EncodingClass.string.toVariable(st[0].content);
                    for (var i in x){
                        systemconfig["bsc_" + i] = x[i];
                    }
                }
                resolve(st);
            }
        );
    });
};

data_module.onboardingDisplayStatusChange = function(id, value){
    return new Promise(function(rs, rj){
        ModalElement.show_loading();
        FormClass.api_call({
            url: "onboarding_change_display_status.php",
            params: [
                {name: "id", value: id},
                {name: "nodisplay", value: value}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success) {
                    if (message.substr(0, 2) == "ok"){
                        rs();
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        })
    });
}

data_module.welcomeFunc = function(onboarding){
    var employeeid = onboarding.employeeid;
    var callbackfunc = function(){
        for (var i = 0; i < ModalElement.layerstatus.length; i++){
            if ((ModalElement.layerstatus[i].index == -1) && (!ModalElement.layerstatus[i].visible)) ModalElement.show_loading();
        }
        if (data_module.pendingData.status == "error"){
            ModalElement.alert("Có lỗi trong quá trình khởi tạo dữ liệu");
            return;
        }
        else if (data_module.pendingData.status == "pending") {
            setTimeout(function(){
                callbackfunc();
            }, 500);
            return;
        }
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "welcome_templates_load_template_data"},
                {name: "employeeid", value: employeeid}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success) {
                    if (message.substr(0,2) == "ok"){
                        var value = EncodingClass.string.toVariable(message.substr(2));
                        var host = {
                            database: {}
                        };
                        host.employeeid = employeeid;
                        contentModule.makeDatabaseContent(host, value);
                        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){
                            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]
                            });
                            contentModule.makeOrgsIndex(host);
                            contentModule.makeEmployeeData(host);
                            contentModule.makeEmployeesIndex(host);
                            contentModule.makeEmployeePosition2Data(host);
                            // contentModule.makePositions2Index(host);
                            contentModule.makeGeoposOrgsData(host);
                            contentModule.makeEmployeeManagerData(host);
                            host.database.peoples.items.forEach(function(elt){
                                elt.content = EncodingClass.string.toVariable(elt.content);
                                elt.email = [];
                                if (elt.content.work_email) elt.email.push(elt.content.work_email);
                                if (elt.content.private_email) elt.email.push(elt.content.private_email);
                                elt.phone = [];
                                if (elt.content.phone_1) elt.email.push(elt.content.phone_1);
                                if (elt.content.phone_2) elt.email.push(elt.content.phone_2);
                            });
                            host.employeeDic = contentModule.makeDictionaryIndex(host.database.employees.items);
                            host.peopleDic = contentModule.makeDictionaryIndex(host.database.peoples.items);
                            host.positionDic = contentModule.makeDictionaryIndex(host.database.positions.items);
                            host.orgDic = contentModule.makeDictionaryIndex(host.database.orgs.items);
                            host.geoposDic = contentModule.makeDictionaryIndex(host.database.geopos.items);
                            host.onboardingDisplayStatusChange = function(value){
                                data_module.onboardingDisplayStatusChange(onboarding.id, value);
                            }
                            host.onboardingNoDisplay = onboarding.nodisplay;
                            theme.formWelcomeTemplatePreview(database.template[0], host);
                        });
                    }
                    else if (message == "no_onboarding_data"){
                        ModalElement.alert({message: "Nhân viên này chưa có dữ liệu onboarding"});
                    }
                    else {
                        console.log(message);
                    }
                }
                else {
                    console.log(message);
                }
            }
        });
    };
    callbackfunc();
};

data_module.loadProcessesList = function(){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [{name: "task", value: "load_processes_list"}],
            func: function(success, message){
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var st = EncodingClass.string.toVariable(message.substr(2));
                        resolve(st);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

data_module.fixPartnerExtraDataForTPN = function(){
    var pattern = {
        type: "struct",
        cond: "and",
        children: {
            type_3_1651584151929: {
                type: "array",
                cond: "true"
            },
            type_3_1651584164420: {
                type: "array",
                cond: "true"
            },
            type_3_1660616493114: {
                type: "string",
                cond: "true"
            },
            type_3_1681790565300: {
                type: "array",
                cond: "true"
            }
        },
        alwaysTrue: false
    }
    ModalElement.show_loading();
    fconnector.search("extradata_partner", pattern, function(idList) {
        if (idList && idList.length > 0){
            fconnector.read("extradata_partner", idList, function (success, value){
                if (success){
                    var t = [];
                    value.forEach((item, i) => {
                        var hasChange = false;
                        item.value.type_3_1651584164420.forEach((item2, i) => {
                            if(item2.type_3_1651582892584 == "") {
                                item2.type_3_1651582892584 = 0;
                                hasChange = true;
                            }
                        });
                        item.value.type_3_1681790565300.forEach((item2, i) => {
                            if(item2.type_3_1681790079160 == "") {
                                item2.type_3_1681790079160 = 0;
                                hasChange = true;
                            }
                            if(item2.type_3_1681790193600 == "") {
                                item2.type_3_1681790193600 = 0;
                                hasChange = true;
                            }
                            if(item2.type_3_1681790206782 == "") {
                                item2.type_3_1681790206782 = 0;
                                hasChange = true;
                            }
                        });
                        if (hasChange) t.push(item);
                    });
                    var run = function(content){
                        return new Promise(function(rs,rj) {
                            FormClass.api_call({
                                url: "fixPartnerExtraDataForTPN.php",
                                params: [
                                    {name: "content", value: EncodingClass.string.fromVariable(content)}
                                ],
                                func: function(success, message){
                                    if (success){
                                        if (message.substr(0, 2) == "ok"){
                                            rs();
                                        }
                                        else {
                                            rj();
                                        }
                                    }
                                    else {
                                        rj();
                                    }
                                }
                            });
                        })
                    }
                    var c = 0;
                    var s = t.length;
                    var run2 = function(){
                        run(t.splice(0, 200)).then(function(rs){
                            c+=200;
                            console.log(c + "/" + s);
                            if (t.length > 0) run2();
                            else {
                                ModalElement.close(-1);
                            }
                        }, function(err){console.log(err);})
                    }
                    if (t.length > 0) run2();
                    else ModalElement.close(-1);
                }
                else {
                    console.log(success, value);
                }
            });
        }
        else {
            console.log("failed", idList);
        }
    });
}

data_module.exportData = {};
data_module.exportData.makeData = function(content) {
    var data = [];
    content.forEach((item, i) => {
        data.push({
            row: i + 1,
            col: 0,
            value: item.id
        });
        data.push({
            row: i + 1,
            col: 1,
            value: item.name
        });
    });
    return data;
}

data_module.exportData.array = function(typeid, name) {
    var data = [];
    data.push({
        row: 0,
        col: 0,
        value: name
    });
    data.push({
        row: 2,
        col: 0,
        backgroundcolor: "FFDDEBF7",
        value: "Chỉ nhập dữ liệu vào ô màu trắng, không nhập dữ liệu vào ô bôi màu",
        textcolor: "FFFF0000",
        border: "thin #FF000000"
    });
    data.push({
        row: 3,
        col: 0,
        backgroundcolor: "FFDDEBF7",
        value: "Để import thêm mới: để trống cột A (Mã tự động)",
        textcolor: "FFFF0000",
        border: "thin #FF000000"
    });
    data.push({
        row: 4,
        col: 0,
        backgroundcolor: "FFDDEBF7",
        value: "Để import cập nhật dữ liệu đã có: Nhập ID vào cột A (Mã tự động)",
        textcolor: "FFFF0000",
        border: "thin #FF000000"
    });
    data.push({
        row: 5,
        col: 0,
        rowSpan: 2,
        value: "Mã tự động (không nhập)",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 7,
        col: 0,
        value: "id",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 5,
        col: 1,
        colSpan: 2,
        value: "Nhân viên",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 6,
        col: 1,
        value: "Mã",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 6,
        col: 2,
        value: "Họ và tên",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 7,
        col: 1,
        value: "employee_code",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 7,
        col: 2,
        value: "",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    var getType = function(id){
        var index = data_module.typelists.getIndex(id);
        var type = data_module.typelists.items[index].type;
        if (form_module.primitiveTypeList.indexOf(type) != -1){
            type = data_module.typelists.items[index].type2;
        }
        return type;
    }
    var noExportArray = [
        "structure", "extends_structure", "image_file", "any_file", "color_picker", "enum_multi", "extends_enum_multi", "nation_city",
        "userlist", "select_department_employee", "position_list", "employee_list", "multiselect_offboarding_reasons", "members_of_shifts", "members_of_partner_class",
        "members_of_locations", "array"
    ];
    var noneSheetData = [
        "string", "phonenumber", "website", "performance_chart", "gps", "variable_input", "variable_textarea", "number",
        "currency", "note", "html", "date", "datetime", "month", "week", "datemonth", "time", "hour_period",
        "boolean", "email_address", "date_level"
    ];
    var sIndex = data_module.typelists.getIndex(typeid);
    var content = data_module.typelists.items[sIndex].content.details;
    var type, excelData, promiseList, colIdx, c_dict;
    c_dict = {};
    excelData = [];
    promiseList = [];
    colIdx = 3;
    for (var i = 0; i < content.length; i++) {
        type = getType(content[i].type);
        content[i].t_type = type;
        if (noExportArray.indexOf(type) == -1){
            if(noneSheetData.indexOf(type) == -1) {
                content[i].sheetName = content[i].key;
                excelData.push({
                    name: content[i].sheetName,
                    data: data_module.exportData[type](content[i].type, content[i].name)
                });
            }
            if (type == "boolean") {
                data.push({row: 3, col: colIdx, value: 1, backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 3, col: colIdx + 1, value: "Có", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 4, col: colIdx, value: 0, backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 4, col: colIdx + 1, value: "Không", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});

                data.push({row: 5, col: colIdx, colSpan: 2, value: content[i].name, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx, value: "Mã", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx + 1, value: "Giá trị", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});

                data.push({row: 7, col: colIdx, value: content[i].key, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 7, col: colIdx + 1, value: "", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                colIdx = colIdx + 2;
            }
            if (type == "enum") {
                var items = form_module.tag2OnCreated.enum(content[i].type);
                content[i].itemDict = {};
                content[i].itemDict2 = {};
                items.forEach(function(cur){
                    content[i].itemDict[cur.value] = cur;
                    content[i].itemDict2[cur.key] = cur.value;
                });
                data.push({row: 5, col: colIdx, colSpan: 2, value: content[i].name, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx, value: "Mã", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx + 1, value: "Giá trị", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});

                data.push({row: 7, col: colIdx, value: content[i].key, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 7, col: colIdx + 1, value: "", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                colIdx = colIdx + 2;
            }
            else if (type == "date_level") {
                data.push({row: 2, col: colIdx, value: "D", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 2, col: colIdx + 1, value: "Ngày (dd/MM/yyyy)", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 3, col: colIdx, value: "M", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 3, col: colIdx + 1, value: "Tháng (MM/yyyy)", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 4, col: colIdx, value: "Y", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 4, col: colIdx + 1, value: "Năm (yyyy)", backgroundcolor: "FFDDEBF7", horizontal: "center", vertical: "middle", border: "thin #FF000000"});

                data.push({row: 5, col: colIdx, colSpan: 3, value: content[i].name, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx, value: "Mã kiểu ngày", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx + 1, value: "Mô tả", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 6, col: colIdx + 2, value: content[i].name, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});

                data.push({row: 7, col: colIdx, value: "date_level_" + content[i].key + "_code", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 7, col: colIdx + 1, value: "", backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 7, col: colIdx + 2, value: "date_level_" + content[i].key, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                colIdx = colIdx + 3;
            }
            else {
                data.push({row: 5, col: colIdx, rowSpan: 2, value: content[i].name, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                data.push({row: 7, col: colIdx, value: content[i].key, backgroundcolor: "FFC6E0B4", horizontal: "center", vertical: "middle", border: "thin #FF000000"});
                colIdx = colIdx + 1;
            }
        }
        c_dict[content[i].key] = content[i];
    }
    return {
        data: data,
        excelData: excelData,
        content: content,
        c_dict: c_dict
    };
}

data_module.exportData.enum = function(id, name) {
    var content = form_module.tag2OnCreated.enum(id);
    var dict = {};
    content.forEach((item, i) => {
        dict[item.localid] = item.key;
    });
    var data = [];
    data.push({
        row: 0,
        col: 0,
        value: name
    });
    data.push({
        row: 2,
        col: 0,
        backgroundcolor: "FFDDEBF7",
        value: "Không thay đổi nội dung trong sheet này",
        textcolor: "FFFF0000",
        border: "thin #FF000000"
    });
    data.push({
        row: 3,
        col: 0,
        backgroundcolor: "FFDDEBF7",
        value: "Bạn thay đổi trực tiếp trong phần mềm, rồi export lại",
        textcolor: "FFFF0000",
        border: "thin #FF000000"
    });
    data.push({
        row: 5,
        col: 0,
        value: "ID",
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    data.push({
        row: 5,
        col: 1,
        value: LanguageModule.text("txt_name"),
        backgroundcolor: "FFC6E0B4",
        horizontal: "center",
        vertical: "middle",
        border: "thin #FF000000"
    });
    var idx = 0;
    content.forEach((item, i) => {
        if (i == 0) return;
        data.push({
            row: idx + 6,
            col: 0,
            value: item.key,
            backgroundcolor: "FFDDEBF7",
            border: "thin #FF000000"
        });
        data.push({
            row: idx + 6,
            col: 1,
            value: item.text,
            backgroundcolor: "FFDDEBF7",
            border: "thin #FF000000"
        });
        idx++;
    });
    return data;
};

data_module.exportData.enum_multi = function(id, name) {
    return new Promise(function(rs, rj){
        form_module.tag2OnCreated.enum_multi(id).then(function(content){
            var data = [];
            data.push({
                row: 0,
                col: 0,
                value: name
            });
            data.push({
                row: 2,
                col: 0,
                backgroundcolor: "FFDDEBF7",
                value: "Không thay đổi nội dung trong sheet này",
                textcolor: "FFFF0000",
                border: "thin #FF000000"
            });
            data.push({
                row: 3,
                col: 0,
                backgroundcolor: "FFDDEBF7",
                value: "Bạn thay đổi trực tiếp trong phần mềm, rồi export lại",
                textcolor: "FFFF0000",
                border: "thin #FF000000"
            });
            data.push({
                row: 5,
                col: 0,
                value: "ID",
                backgroundcolor: "FFC6E0B4",
                horizontal: "center",
                vertical: "middle",
                border: "thin #FF000000"
            });
            data.push({
                row: 5,
                col: 1,
                value: LanguageModule.text("txt_name"),
                backgroundcolor: "FFC6E0B4",
                horizontal: "center",
                vertical: "middle",
                border: "thin #FF000000"
            });
            var idx = 0;
            content.forEach((item, i) => {
                if (i == 0) return;
                data.push({
                    row: idx + 6,
                    col: 0,
                    value: item.value,
                    backgroundcolor: "FFDDEBF7",
                    border: "thin #FF000000"
                });
                data.push({
                    row: idx + 6,
                    col: 1,
                    value: item.text,
                    backgroundcolor: "FFDDEBF7",
                    border: "thin #FF000000"
                });
                idx++;
            });
            rs(data);
        }, function(err){rj(err)});
    })
};

data_module.exportData.member_of_assets = function() {
    return new Promise(function(rs, rj){
        data_module.loadAssetsList().then(function(content){
            var host = {database: {}};
            contentModule.makeDatabaseContent(host, {assets: content});
            var data = data_module.exportData.makeData(host.database.assets.items);
            data.push({
                row: 0,
                col: 0,
                value: "ID"
            });
            data.push({
                row: 0,
                col: 1,
                value: LanguageModule.text("txt_asset")
            });
            data.push({
                row: 0,
                col: 2,
                value: "Không thay đổi nội dung trong sheet này",
                textcolor: "FFFF0000"
            });
            data.push({
                row: 1,
                col: 2,
                value: "Bạn thay đổi trực tiếp trong phần mềm, rồi export lại",
                textcolor: "FFFF0000"
            });
            rs(data);
        }, function(err){rj(err)});
    })
};

data_module.exportData.member_of_religions = function() {
    return new Promise(function(rs, rj){
        data_module.loadReligionsList().then(function(content){
            var host = {database: {}};
            contentModule.makeDatabaseContent(host, {religions: content});
            var data = data_module.exportData.makeData(host.database.religions.items);
            data.push({
                row: 0,
                col: 0,
                value: "ID"
            });
            data.push({
                row: 0,
                col: 1,
                value: LanguageModule.text("txt_religion")
            });
            data.push({
                row: 0,
                col: 2,
                value: "Không thay đổi nội dung trong sheet này",
                textcolor: "FFFF0000"
            });
            data.push({
                row: 1,
                col: 2,
                value: "Bạn thay đổi trực tiếp trong phần mềm, rồi export lại",
                textcolor: "FFFF0000"
            });
            rs(data);
        }, function(err){rj(err)});
    })
};

data_module.dataDataInitPrevMenu = function(){
    return new Promise(function(resolve, reject){
        console.log("a", new Date().getTime());
        data_module.loadTables(
            ["employees", "typelists", "configs"],
            function () {
                console.log("b", new Date().getTime());
                var typelists = data_module.getDataTablesFromCache("typelists");
                var content = {
                    typelists: typelists
                };
                var loadAllEmployeesFunc = new Promise(function(rs, rj){
                    data_module.cacheContent_employees.psearch({
                        searchFunc: function(record){
                            return {
                                id: record.id,
                                peopleid: record.peopleid,
                                firstid: record.firstid,
                                obsoletedby: record.obsoletedby,
                                orgid: record.orgid
                            };
                        },
                        callbackfunc: function(all_employees){
                            content.all_employees = all_employees;
                            rs();
                        }
                    });
                });
                Promise.all([loadAllEmployeesFunc, data_module.loadConfigsByNameWorker("form_config"), data_module.loadConfigsByNameWorker("config_bsc")]).then(function(values){
                    var contentForm_config = values[1];
                    var config_bsc = values[2];
                    data_module.makeDatabaseCommon(content);
                    data_module.typelists.items.forEach(function(item){
                        item.content = EncodingClass.string.toVariable(item.content);
                    });
                    data_module.typelists.items = contentModule.getDatatypePrimitiveList().concat(data_module.typelists.items);
                    contentModule.makeTypelistsIndex();
                    contentModule.makeAllEmployeesDic();
                    data_module.all_employees = null;
                    if (config_bsc.length > 0){
                        var x = EncodingClass.string.toVariable(config_bsc[0].content);
                        for (var i in x){
                            systemconfig["bsc_" + i] = x[i];
                        }
                    }
                    data_module.form_config = contentModule.configVariable2(contentForm_config);
                    resolve();
                });
            }
        );
    });
};

VaKeR 2022