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_2.js
'use strict';

data_module.getConfigs_privilegesFromCache = function(name){
    var employees = data_module.getDataTablesFromCache("employees");
    var fdic = {};
    for (var i = 0; i < employees.length; i++){
        if (employees[i].obsoletedby != 0) continue;
        fdic[employees[i].firstid] = employees[i].id;
    }
    var dDic = {};
    for (var i = 0; i < employees.length; i++){
        if (fdic[employees[i].firstid]) dDic[employees[i].id] = fdic[employees[i].firstid];
    }
    var res = data_module.loadConfigsByName(name);
    for (var i = 0; i < res.length; i++){
        res[i].content = EncodingClass.string.toVariable(res[i].content);
        var emps = res[i].content.employees;
        res[i].content.employees = [];
        for (var j = 0; j < emps.length; j++){
            if (emps[j] == 0) res[i].content.employees.push(0);
            if (dDic[emps[j]]) res[i].content.employees.push(dDic[emps[j]]);
        }
    }
    return res;
};

data_module.getConfigs_privilegesFromCacheWorker = function(name){
    return new Promise(function(resolve, reject){
        data_module.cacheContent_employees.psearch({
            searchFunc: function(record){
                return {
                    id: record.id,
                    firstid: record.firstid,
                    obsoletedby: record.obsoletedby
                };
            },
            callbackfunc: function(employees){
                var fdic = {};
                for (var i = 0; i < employees.length; i++){
                    if (employees[i].obsoletedby != 0) continue;
                    fdic[employees[i].firstid] = employees[i].id;
                }
                var dDic = {};
                for (var i = 0; i < employees.length; i++){
                    if (fdic[employees[i].firstid]) dDic[employees[i].id] = fdic[employees[i].firstid];
                }
                data_module.loadConfigsByNameWorker(name).then(function(res){
                    for (var i = 0; i < res.length; i++){
                        res[i].content = EncodingClass.string.toVariable(res[i].content);
                        var emps = res[i].content.employees;
                        res[i].content.employees = [];
                        for (var j = 0; j < emps.length; j++){
                            if (emps[j] == 0) res[i].content.employees.push(0);
                            if (dDic[emps[j]]) res[i].content.employees.push(dDic[emps[j]]);
                        }
                    }
                    resolve(res);
                });
            }
        })
    });
};

data_module.loadWorkflows_and_crmPrivileges = function(){
    return new Promise(function(resolve, reject){
        var tablesList = ["orgs", "employees", "peoples"];
        if (systemconfig.privSystem < 2){
            tablesList.push("configs", "employee_groups", "employee_group_members");
        }
        data_module.loadTables(tablesList, function(){
            data_module.getEmpsFromCacheWorker(true).then(function(content){
                content.orgs = data_module.getOrgsFromCache();
                if (systemconfig.privSystem < 2){
                    content.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    content.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    data_module.getConfigs_privilegesFromCacheWorker("work_flows_and_crm_privileges").then(function(configs_privileges){
                        content.configs_privileges = configs_privileges;
                        resolve(content);
                    });
                }
                else {
                    resolve(content);
                }
            });
        });
    });
};

data_module.loadDataOrgs = function(host){
    return new Promise(function(resolve, reject){
        data_module.loadTables(["orgs", "employees", "peoples", "positions", "employee_positions",], function(){
            data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(content){
                content.orgs = data_module.getOrgsFromCache();
                content.positions = data_module.getConfigs_privilegesFromCache("positions");
                content.employee_positions = data_module.getDataTablesFromCache("employee_positions");
                contentModule.makeDatabaseContent(host, content);
                contentModule.makeOrgsIndex(host);
                contentModule.makeEmployeeData(host);
                contentModule.makeEmployeesIndex(host);
                contentModule.makeEmployeePositionData(host);
                resolve();
            });
        });
    });
};

data_module.loadWorktimeLogsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(st){
                    st.orgs = data_module.getOrgsFromCache();
                    if (loadPriv){
                        data_module.getConfigs_privilegesFromCacheWorker("timekeeping_privileges").then(function(configs_privileges){
                            st.configs_privileges = configs_privileges;
                            st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                            st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                            rs(st);
                        });
                    }
                    else {
                        rs(st);
                    }
                });
            });
        });
        Promise.all([loadDataFromCache, data_module.loadUserColumnConfigsByTypeList(["worktime_logs_list"])]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.loadWorktimeChekinsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(st){
                    st.orgs = data_module.getOrgsFromCache();
                    if (loadPriv){
                        data_module.getConfigs_privilegesFromCacheWorker("timekeeping_privileges").then(function(configs_privileges){
                            st.configs_privileges = configs_privileges;
                            st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                            st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                            rs(st);
                        });
                    }
                    else {
                        rs(st);
                    }
                });
            });
        });
        Promise.all([loadDataFromCache, data_module.loadUserColumnConfigsByTypeList(["worktime_checkins_list"])]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.loadPositionsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["positions"], function(){
                    rs({
                        positions: data_module.getDataTablesFromCache("positions")
                    });
                });
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["position_2_list"])]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.loadPaySheetsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "pay_sheet_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "positions",
                "employee_positions",
                "geopos_orgs",
                "typelists"
            ];
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.pay_sheet){
                loadPriv = true;
            }
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                data_module.getEmpsFromCacheWorker(true).then(function(st){
                    st.orgs = data_module.getOrgsFromCache();
                    st.positions = data_module.getDataTablesFromCache("positions");
                    st.employee_positions = data_module.getDataTablesFromCache("employee_positions");
                    st.geopos_orgs = data_module.getDataTablesFromCache("geopos_orgs");
                    st.typelists = data_module.getDataTablesFromCache("typelists");
                    if (loadPriv){
                        data_module.getConfigs_privilegesFromCacheWorker("payroll_privileges").then(function(configs_privileges){
                            st.configs_privileges = configs_privileges;
                            st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                            st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                            rs(st);
                        });
                    }
                    else {
                        rs(st);
                    }

                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadTimesheetsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "timesheet_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.time_sheet){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(st){
                    st.orgs = data_module.getOrgsFromCache();
                    if (loadPriv){
                        data_module.getConfigs_privilegesFromCacheWorker("timekeeping_privileges").then(function(configs_privileges){
                            st.configs_privileges = configs_privileges;
                            st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                            st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                            rs(st);
                        });
                    }
                    else {
                        rs(st);
                    }
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadFunctionalMatrixsInit = function(){
    return new Promise(function(resolve, reject){
        var loadPriv = false;
        if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.time_sheet){
            loadPriv = true;
        }
        var tablesList = [
            "employees",
            "peoples",
            "orgs"
        ];
        if (loadPriv){
            tablesList.push("configs", "employee_groups", "employee_group_members");
        }
        data_module.loadTables(tablesList, function(){
            data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(st){
                st.orgs = data_module.getOrgsFromCache();
                data_module.loadConfigsByNameWorker("config_functional_matrix").then(function(config_functional_matrix){
                    st.config_functional_matrix = config_functional_matrix;
                    if (loadPriv){
                        data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                            st.configs_privileges = configs_privileges;
                            st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                            st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                            resolve(st);
                        });
                    }
                    else {
                        resolve(st);
                    }
                });
            });
        });
    });
};

data_module.loadDocumentManagersInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "document_manager_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "configs",
                "employee_groups",
                "employee_group_members"
            ];
            data_module.loadTables(tablesList, function(){
                Promise.all([
                    data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]),
                    data_module.getConfigs_privilegesFromCacheWorker("document_privileges")
                ]).then(function(values){
                    var st = {
                        employeeOfMe: values[0].employeeOfMe,
                        employee_groups: data_module.getDataTablesFromCache("employee_groups"),
                        employee_group_members: data_module.getDataTablesFromCache("employee_group_members"),
                        configs_document_privileges: values[1]
                    };
                    rs(st);
                })
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadEmploymentContactsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "employment_contract_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (systemconfig.privSystem < 2){
                tablesList.push("employee_groups", "employee_group_members", "configs");
            }
            data_module.loadTables(tablesList, function(){
                var promiseList = [data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"])];
                if (systemconfig.privSystem < 2) promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("human_resource_privileges"));
                Promise.all(promiseList).then(function(values){
                    var st = values[0];
                    st.orgs = data_module.getOrgsFromCache();
                    if (systemconfig.privSystem < 2){
                        st.configs_privileges = values[1];
                        st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                        st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    }
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadDecisionOnMeInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "orgs",
                "peoples",
                "positions",
                "employee_positions"
            ];
            if (systemconfig.privSystem < 2){
                tablesList.push("employee_groups", "employee_group_members", "configs");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache(),
                    positions: data_module.getDataTablesFromCache("positions"),
                    employee_positions: data_module.getDataTablesFromCache("employee_positions")
                };
                var promiseList = [
                    data_module.getEmpsFromCacheWorker(false, ["id", "code", "orgid", "peopleid", "firstid", "available"]).then(function(res){
                        st.employees = res.employees;
                        st.employeeOfMe = res.employeeOfMe;
                    })
                ];
                if (systemconfig.privSystem < 2){
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("human_resource_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        var user_column_configsList = [
            'salary_decision_list',
            'emulation_reward_list',
            'discipline_list'
        ];
        Promise.all([loadDataFromCache, data_module.loadUserColumnConfigsByTypeList(user_column_configsList)]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.getEmployeeRelateMeWorker = function(employeeOfMe){
    return new Promise(function(resolve, reject){
        var res = {
            directSubOfMe: [],
            directManageOfMe: [],
            indirectSubOfMe: [],
            indirectManageOfMe: []
        };
        if (employeeOfMe.length == 0) resolve(res);
        data_module.cacheContent_employee_managers.psearch({
            postFunc: function(record){
                switch (record.type) {
                    case "direct":
                        if (employeeOfMe.indexOf(record.managerid) >= 0){
                            res.directSubOfMe.push(record.employeeid);
                        }
                        else if (employeeOfMe.indexOf(record.employeeid) >= 0){
                            res.directManageOfMe.push(record.managerid);
                        }
                        break;
                    case "indirect":
                        if (employeeOfMe.indexOf(record.managerid) >= 0){
                            res.indirectSubOfMe.push(record.employeeid);
                        }
                        else if (employeeOfMe.indexOf(record.employeeid) >= 0){
                            res.indirectManageOfMe.push(record.managerid);
                        }
                }
            },
            searchFunc: function(record){
                if (extraParams.employeeOfMe.indexOf(record.managerid) >= 0 || extraParams.employeeOfMe.indexOf(record.employeeid) >= 0){
                    return record;
                }
                return null;
            },
            extraParams: {
                employeeOfMe: employeeOfMe
            },
            callbackfunc: function(values){
                resolve(res);
            }
        });
    });
};

data_module.loadHumanResourcePoliciesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "employee_managers",
                "configs",
                "employee_groups",
                "employee_group_members"
            ];
            data_module.loadTables(tablesList, function(){
                Promise.all([
                    data_module.getEmpsFromCacheWorker(false, ["id"]),
                    data_module.getConfigs_privilegesFromCacheWorker("org_privileges")
                ]).then(function(values){
                    var st = {
                        employeeOfMe: values[0].employeeOfMe,
                        config_orgs_privileges: values[1],
                        employee_groups: data_module.getDataTablesFromCache("employee_groups"),
                        employee_group_members: data_module.getDataTablesFromCache("employee_group_members")
                    };
                    data_module.getEmployeeRelateMeWorker(st.employeeOfMe).then(function(res){
                        st.directSubOfMe = res.directSubOfMe;
                        rs(st);
                    });
                });
            });
        });
        var user_column_configsList = [
            'bonus_policy_list',
            'allowance_policy_list',
            'benefit_policy_list',
            'advance_payment_policy_list',
            'insurance_policy_list',
            'late_early_checkin_policy_list',
            'leave_policy_list',
            'other_liability_policy_list',
            'punishment_policy_list',
            'tax_policy_list',
            'trade_union_policy_list',
            'overtime_policy_list'
        ];
        Promise.all([loadDataFromCache, data_module.loadUserColumnConfigsByTypeList(user_column_configsList)]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.loadHumanResourceListInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "human_resource_list_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.human_resource_list){
                tablesList.push("employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var promiseList = [data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"])];
                if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.human_resource_list){
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("payroll_privileges"));
                }
                Promise.all(promiseList).then(function(values){
                    var employeeOfMe = values[0].employeeOfMe;
                    var st = {
                        employeeOfMe: employeeOfMe,
                        orgs: data_module.getOrgsFromCache(),
                        employees: values[0].employees
                    };
                    if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.human_resource_list){
                        st.configs_privileges = values[1]
                        st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                        st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    }
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadHumanResourceRequestInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "human_resource_request_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "employee_managers"
            ];
            data_module.loadTables(tablesList, function(){
                data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(st){
                    st.orgs = data_module.getOrgsFromCache();
                    st.employee_managers = data_module.getDataTablesFromCache("employee_managers");
                    data_module.getEmployeeRelateMeWorker(st.employeeOfMe).then(function(res){
                        for (var x in res){
                            st[x] = res[x];
                        }
                        rs(st);
                    });
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscApprovalValuesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "bsc_approval_values_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "configs"
            ];
            if (loadPriv){
                tablesList.push("employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [
                    data_module.loadConfigsByNameWorker("config_bsc").then(function(config_bsc){
                        if (config_bsc.length > 0){
                            var x = EncodingClass.string.toVariable(config_bsc[0].content);
                            for (var i in x){
                                systemconfig["bsc_" + i] = x[i];
                            }
                        }
                    })
                ];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscLockValuesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "bsc_lock_values_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "configs"
            ];
            if (loadPriv){
                tablesList.push("employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [
                    data_module.loadConfigsByNameWorker("config_bsc").then(function(config_bsc){
                        if (config_bsc.length > 0){
                            var x = EncodingClass.string.toVariable(config_bsc[0].content);
                            for (var i in x){
                                systemconfig["bsc_" + i] = x[i];
                            }
                        }
                    })
                ];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscInputValuesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "bsc_input_values_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "configs"
            ];
            if (loadPriv){
                tablesList.push("employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [
                    data_module.loadConfigsByNameWorker("config_bsc").then(function(config_bsc){
                        if (config_bsc.length > 0){
                            var x = EncodingClass.string.toVariable(config_bsc[0].content);
                            for (var i in x){
                                systemconfig["bsc_" + i] = x[i];
                            }
                        }
                    })
                ];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscAccumulateValuesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "bsc_accumulate_values_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscScorecardsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "bsc_scorecards_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscLockScorecardsInit = function(){
    return new Promise(function(resolve, reject){
        var loadPriv = false;
        if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
            loadPriv = true;
        }
        var tablesList = [
            "employees",
            "peoples",
            "orgs"
        ];
        if (loadPriv){
            tablesList.push("configs", "employee_groups", "employee_group_members");
        }
        data_module.loadTables(tablesList, function(){
            var st = {
                orgs: data_module.getOrgsFromCache()
            };
            var promiseList = [];
            promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                st.employees = res.employees;
                st.employeeOfMe = res.employeeOfMe;
            }));
            if (loadPriv){
                st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                    st.configs_privileges = configs_privileges;
                }));
            }
            Promise.all(promiseList).then(function(){
                resolve(st);
            });
        });
    });
};

data_module.loadBscOveriddenResultsInit = function(){
    return new Promise(function(resolve, reject){
        var loadPriv = false;
        if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
            loadPriv = true;
        }
        var tablesList = [
            "employees",
            "peoples",
            "orgs"
        ];
        if (loadPriv){
            tablesList.push("configs", "employee_groups", "employee_group_members");
        }
        data_module.loadTables(tablesList, function(){
            var st = {
                orgs: data_module.getOrgsFromCache()
            };
            var promiseList = [];
            promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                st.employees = res.employees;
                st.employeeOfMe = res.employeeOfMe;
            }));
            if (loadPriv){
                st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                    st.configs_privileges = configs_privileges;
                }));
            }
            Promise.all(promiseList).then(function(){
                resolve(st);
            });
        });
    });
};

data_module.loadProjectsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "projects_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.projects){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "nations",
                "cities"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache(),
                    nations: data_module.getDataTablesFromCache("nations"),
                    cities: data_module.getDataTablesFromCache("cities")
                };
                var promiseList = [
                    data_module.getEmpsFromCacheWorker(false, ["id", "code", "orgid", "firstid", "peopleid", "available"]).then(function(res){
                        st.employees = res.employees;
                        st.employeeOfMe = res.employeeOfMe;
                    })
                ];
                if (loadPriv){
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("org_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadAssign_employee_shifts = function(params){
    return new Promise(function(resolve, reject){
        data_module.loadTables(["assign_employee_shifts"], function(){
            var employeeIdDic = {};
            params.employeeIdList.forEach(function(employeeid){
                employeeIdDic[employeeid] = true;
            });
            data_module.cacheContent_assign_employee_shifts.psearch({
                searchFunc: function(record){
                    if (record.date < extraParams.timestart) return null;
                    if (record.date > extraParams.timeend) return null;
                    if (!extraParams.employeeIdDic[record.employeeid] && !extraParams.employeeIdDic[record.substitute]) return null;
                    if (extraParams.typeDic){
                        if (!extraParams.typeDic[record.type]) return null;
                    }
                    return record;
                },
                extraParams: {
                    timestart: params.timestart,
                    timeend: params.timeend,
                    typeDic: params.typeDic,
                    employeeIdDic: employeeIdDic
                },
                callbackfunc: function(assign_employee_shifts){
                    resolve(assign_employee_shifts);
                }
            });
        });
    });
};

data_module.loadShiftSchedulesInit2 = function(params){
    return new Promise(function(resolve, reject){
        data_module.loadAssign_employee_shifts(params).then(function(content){
            resolve({assign_employee_shifts: content});
        });
    });
};

data_module.loadShiftSchedulesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "shift_schedule_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs",
                "positions",
                "employee_positions"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache(),
                    positions: data_module.getDataTablesFromCache("positions"),
                    employee_positions: data_module.getDataTablesFromCache("employee_positions")
                };
                var promiseList = [
                    data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "code", "available", "peopleid"]).then(function(res){
                        st.employees = res.employees;
                        st.employeeOfMe = res.employeeOfMe;
                    })
                ];
                if (loadPriv){
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("timekeeping_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadBscReportsInit = function(host){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "bsc_reports_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadPriv = false;
        if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
            loadPriv = true;
        }
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("bsc_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache, data_module.loadConfigBsc()]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            var content = values[0];
            if (loadPriv) content.configs_privileges = data_module.getConfigs_privilegesFromCache("bsc_privileges");
            host.employeeOfMe = content.employeeOfMe;
            delete content.employeeOfMe;
            contentModule.makeDatabaseContent(host, content);
            contentModule.makeOrgsIndex(host);
            contentModule.makeEmployeeData(host);
            contentModule.makeEmployeesIndex(host);
            contentModule.makeBscCriteriaDefinitionsData(host);
            if (content.employee_groups){
                contentModule.makeEmployeeGroupMemberIndex(host);
                contentModule.makeConfigPrivileges(host);
            }
            host.orgFirstidDic = {};
            for (var i = 0; i < host.database.orgs.items.length; i++){
                host.orgFirstidDic[host.database.orgs.items[i].firstid] = i;
            }
            host.orgIdDic = {};
            for (var i = 0; i < host.database.orgs.items.length; i++){
                host.orgIdDic[host.database.orgs.items[i].id] = i;
            }
            host.orgsDic = contentModule.makeDictionaryIndex(host.database.orgs.items);
            host.employeesDic = contentModule.makeDictionaryIndex(host.database.employees.items);
            host.empFirstidDic = {};
            for (var i = 0; i < host.database.employees.items.length; i++){
                host.empFirstidDic[host.database.employees.items[i].firstid] = i;
            }
            host.noSelectCreateDic = {};
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                host.database.orgs.items.forEach(function(item){
                    if (!host.privilegesDic[item.id] || !host.privilegesDic[item.id].create_report){
                        host.noSelectCreateDic[item.id] = true;
                    }
                });
                host.database.employees.items.forEach(function(item){
                    if (!host.privilegesDic[-item.id] || !host.privilegesDic[-item.id].create_report){
                        host.noSelectCreateDic[-item.id] = true;
                    }
                });
            }
            host.noSelectLockDic = {};
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                host.database.orgs.items.forEach(function(item){
                    if (!host.privilegesDic[item.id] || !host.privilegesDic[item.id].lock_unlock_bsc){
                        host.noSelectLockDic[item.id] = true;
                    }
                });
                host.database.employees.items.forEach(function(item){
                    if (!host.privilegesDic[-item.id] || !host.privilegesDic[-item.id].lock_unlock_bsc){
                        host.noSelectLockDic[-item.id] = true;
                    }
                });
            }
            host.noSelectDeleteDic = {};
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.functional_matrixs_scorecards){
                host.database.orgs.items.forEach(function(item){
                    if (!host.privilegesDic[item.id] || !host.privilegesDic[item.id].create_report){
                        host.noSelectDeleteDic[item.id] = true;
                    }
                });
                host.database.employees.items.forEach(function(item){
                    if (!host.privilegesDic[-item.id] || !host.privilegesDic[-item.id].create_report){
                        host.noSelectDeleteDic[-item.id] = true;
                    }
                });
            }
            resolve();
        });
    });
};

data_module.getSubOfMeFromCacheWorker = function(employeeOfMe){
    return new Promise(function(resolve, reject){
        if (employeeOfMe.length == 0) resolve([]);
        data_module.cacheContent_employee_managers.psearch({
            extraParams: {
                employeeOfMe: employeeOfMe
            },
            searchFunc: function(record){
                if (extraParams.employeeOfMe.indexOf(record.managerid) >= 0){
                    return record;
                }
                return null;
            },
            callbackfunc: function(values){
                resolve(values);
            }
        });
    });
};

data_module.loadPartnerCheckinsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["orgs", "employees", "peoples", "nations", "cities", "employee_managers"], function(){
                    data_module.getEmpsFromCacheWorker(true).then(function(content){
                        content.orgs = data_module.getOrgsFromCache();
                        content.nations = data_module.getDataTablesFromCache("nations");
                        content.cities = data_module.getDataTablesFromCache("cities", function(record){
                            return {
                                id: record.id,
                                nationid: record.nationid,
                                name: record.name,
                                available: record.available
                            }
                        });
                        data_module.getSubOfMeFromCacheWorker(content.employeeOfMe).then(function(subOfMe){
                            content.subOfMe = subOfMe;
                        });
                        rs(content);
                    });
                });
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["partner_checkin_list"])]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.loadMyAssetsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadOrgsTree(rs);
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["my_asset_list"])]).then(function(values){
            values[0].user_column_configs = values[1];
            resolve(values[0]);
        });
    });
};

data_module.loadAssetTransactionsInit = function(type){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "asset_transactions_load_init"},
                    {name: "type", value: type}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var loadPriv = false;
            if (systemconfig.privSystem < 2 && !data_module.admin_rights_of_me.asset_list){
                loadPriv = true;
            }
            var tablesList = [
                "employees",
                "peoples",
                "orgs"
            ];
            if (loadPriv){
                tablesList.push("configs", "employee_groups", "employee_group_members");
            }
            data_module.loadTables(tablesList, function(){
                var st = {
                    orgs: data_module.getOrgsFromCache()
                };
                var promiseList = [];
                promiseList.push(data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "code"]).then(function(res){
                    st.employees = res.employees;
                    st.employeeOfMe = res.employeeOfMe;
                }));
                if (loadPriv){
                    st.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    st.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(data_module.getConfigs_privilegesFromCacheWorker("asset_privileges").then(function(configs_privileges){
                        st.configs_privileges = configs_privileges;
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(st);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadWarehouseInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "warehouses_load_init"}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            data_module.loadOrgsTree(rs);
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            resolve(values[0]);
        });
    });
};

data_module.loadCompanyInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["orgs", "geopos_orgs"], function(){
                    var companies = data_module.getOrgCompaniesFromCache("nations");
                    var geopos_orgs = data_module.getDataTablesFromCache("geopos_orgs");
                    rs({
                        companies: companies,
                        geopos_orgs: geopos_orgs
                    });
                });
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["company_list"])]).then(function(values){
            var st = {
                companies: values[0].companies,
                geopos_orgs: values[0].geopos_orgs,
                user_column_configs: values[1]
            };
            resolve(st);
        });
    });
};

data_module.loadContactsInit = function(host){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "contact_load_init"},
                    {name: "isMobile", value: hr.isMobile? 1 : 0}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            var tablesList = ["employees", "contacts", "orgs", "peoples"];
            if (systemconfig.privSystem < 2) tablesList.push("configs", "employee_group_members", "employee_groups");
            data_module.loadTables(tablesList, function(){
                var content = {
                    orgs: data_module.getOrgsFromCache()
                };
                var loadEmployeesFunc = new Promise(function(rss, rjj){
                    data_module.getEmpsFromCacheWorker(false, ["id", "firstid", "orgid", "peopleid", "available", "userid"]).then(function(values){
                        content.employees = values.employees;
                        content.employeeOfMe = values.employeeOfMe;
                        rss();
                    });
                });
                var loadContactFunc = new Promise(function(rss, rjj){
                    data_module.cacheContent_contacts.psearch({
                        searchFunc: function(record){
                            return {
                                id: record.id,
                                name: record.name,
                                owner: record.owner
                            };
                        },
                        callbackfunc: function(values){
                            content.contact = values;
                            rss();
                        }
                    });
                });
                var promiseList = [loadContactFunc, loadEmployeesFunc];
                if (systemconfig.privSystem < 2){
                    content.employee_groups = data_module.getDataTablesFromCache("employee_groups");
                    content.employee_group_members = data_module.getDataTablesFromCache("employee_group_members");
                    promiseList.push(new Promise(function(rss, rjj){
                        data_module.getConfigs_privilegesFromCacheWorker("work_flows_and_crm_privileges").then(function(configs_privileges){
                            content.configs_privileges = configs_privileges;
                            rss();
                        });
                    }));
                }
                Promise.all(promiseList).then(function(){
                    rs(content);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            values[0].markedDic = {};
            values[0].user_marked.forEach(function(item){
                values[0].markedDic[parseInt(item.taskid, 10)] = true;
            });
            delete values[0].user_marked;
            var k, t = [];
            var holderForSort = values[1].contact.map(function(item){
                return {
                    item: item,
                    val: absol.string.nonAccentVietnamese(item.name.toLowerCase())
                }
            });
            holderForSort.sort(function(a, b){
                if (values[0].markedDic[a.item.id] != values[0].markedDic[b.item.id]){
                    if (values[0].markedDic[a.item.id]) return -1;
                    if (values[0].markedDic[b.item.id]) return 1;
                }
                if (a.val < b.val) return -1;
                if (a.val > b.val) return 1;
                return 0;
            });
            values[1].contact = holderForSort.map(function(holder){
                return holder.item;
            });
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            host.employeeOfMe = values[0].employeeOfMe;
            delete values[0].employeeOfMe;
            host.markedDic = values[0].markedDic;
            delete values[0].markedDic;
            contentModule.makeDatabaseContent(host, values[0]);
            contentModule.makeOrgsIndex(host);
            contentModule.makeEmployeeData(host);
            contentModule.makeEmployeesIndex(host);
            if (values[0].configs_privileges){
                contentModule.makeEmployeeGroupMemberIndex(host);
                contentModule.makeConfigPrivileges(host);
            }
            host.allContactIDList = [];
            host.database.contact.items.forEach(function(item){
                if ((systemconfig.privSystem < 2) && (host.employeeOfMe.indexOf(item.owner) < 0)){
                    if (!host.privilegesDic[-item.owner] || !host.privilegesDic[-item.owner].edit_employees_contacts) return;
                }
                host.allContactIDList.push(item.id);
            });
            host.database.contact = null;
            resolve();
        });
    });
};

data_module.loadPartnersInit = function(host){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "partner_load_init"},
                    {name: "isMobile", value: hr.isMobile? 1 : 0}
                ],
                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});
                    }
                }
            });
        });
        var loadDataFromCache = new Promise(function(rs, rj){
            data_module.loadTables(["employees", "partners", "partner_class_links", "nations", "cities", "partner_class", "peoples"], function(){
                var content = {
                    nations: data_module.getDataTablesFromCache("nations", function(record){
                        return {
                            id: record.id
                        }
                    }),
                    cities: data_module.getDataTablesFromCache("cities", function(record){
                        return {
                            id: record.id,
                            nationid: record.nationid
                        }
                    })
                };
                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 loadEmployeesFunc = new Promise(function(rss, rjj){
                    data_module.getEmpsFromCacheWorker(false, ["id", "peopleid", "userid"]).then(function(values){
                        content.employees = values.employees;
                        content.employeeOfMe = values.employeeOfMe;
                        rss();
                    });
                });
                Promise.all([loadPartnerFunc, loadEmployeesFunc]).then(function(){
                    rs(content);
                });
            });
        });
        Promise.all([loadDataFromDB, loadDataFromCache]).then(function(values){
            values[0].markedDic = {};
            values[0].user_marked.forEach(function(item){
                values[0].markedDic[parseInt(item.taskid, 10)] = true;
            });
            delete values[0].user_marked;
            var k, t = [];
            var holderForSort = values[1].partner.map(function(item){
                return {
                    id: item.id,
                    val: absol.string.nonAccentVietnamese(item.name.toLowerCase())
                }
            });
            holderForSort.sort(function(a, b){
                if (values[0].markedDic[a.id] != values[0].markedDic[b.id]){
                    if (values[0].markedDic[a.id]) return -1;
                    if (values[0].markedDic[b.id]) return 1;
                }
                if (a.val < b.val) return -1;
                if (a.val > b.val) return 1;
                return 0;
            });
            values[0].partnerIDList = holderForSort.map(function(holder){
                return holder.id;
            });
            delete values[1].partner;
            for (var x in values[1]){
                values[0][x] = values[1][x];
            }
            host.allPartnerIDList = values[0].partnerIDList;
            delete values[0].partnerIDList;
            host.markedDic = values[0].markedDic;
            delete values[0].markedDic;
            contentModule.makeDatabaseContent(host, values[0]);
            contentModule.makeCitiesIndex(host);
            host.user_column_configsDic = contentModule.getUser_column_configsDic(host);
            host.usersDic = {};
            host.database.employees.items.forEach(function(item){
                host.usersDic[item.userid] = item.peopleid;
            });
            resolve();
        });
    });
};

data_module.loadPartnerClassInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["partner_class"], function(){
                    var partner_class = data_module.getDataTablesFromCache("partner_class");
                    rs({
                        partner_class: partner_class
                    });
                });
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["partner_class_list"])]).then(function(values){
            var st = {
                partner_class: values[0].partner_class,
                user_column_configs: values[1]
            };
            resolve(st);
        });
    });
};

data_module.loadCitiesInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["nations", "cities"], function(){
                    var nations = data_module.getDataTablesFromCache("nations");
                    var cities = data_module.getDataTablesFromCache("cities");
                    rs({
                        nations: nations,
                        cities: cities
                    });
                });
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["city_list"])]).then(function(values){
            var st = {
                nations: values[0].nations,
                cities: values[0].cities,
                user_column_configs: values[1]
            };
            resolve(st);
        });
    });
};

data_module.loadNationsInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["nations"], function(){
                    var nations = data_module.getDataTablesFromCache("nations");
                    rs({
                        nations: nations
                    });
                });
            });
        };
        Promise.all([loadDataFromCache(), data_module.loadUserColumnConfigsByTypeList(["nation_list"])]).then(function(values){
            var st = {
                nations: values[0].nations,
                user_column_configs: values[1]
            };
            resolve(st);
        });
    });
};

data_module.loadAccountInit = function(){
    return new Promise(function(resolve, reject){
        FormClass.api_call({
            url: "database_load.php",
            params: [{name: "task", value: "accouns_load_init"}],
            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.loadDatatypeInit = function(){
    return new Promise(function(resolve, reject){
        var loadDataFromDB = function(){
            return new Promise(function(rs, rj){
                FormClass.api_call({
                    url: "database_load.php",
                    params: [{name: "task", value: "datatypes_load_init"}],
                    func: function(success, message){
                        if (success){
                            if (message.substr(0, 2) == "ok"){
                                var st = EncodingClass.string.toVariable(message.substr(2));
                                rs(st);
                            }
                            else {
                                ModalElement.alert({message: message});
                            }
                        }
                        else {
                            ModalElement.alert({message: message});
                        }
                    }
                });
            });
        };
        var loadDataFromCache = function(){
            return new Promise(function(rs, rj){
                data_module.loadTables(["typelists"], function(){
                    var typelists = data_module.getDataTablesFromCache("typelists");
                    rs({
                        typelists: typelists
                    });
                });
            });
        };
        Promise.all([loadDataFromDB(), loadDataFromCache()]).then(function(values){
            var st = {
                users: values[0].users,
                typelists: values[1].typelists,
                user_column_configs: values[0].user_column_configs
            };
            resolve(st);
        });
    });
};

VaKeR 2022