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/tech_preview/hr/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /var/www/html/tech_preview/hr/activities.js
hr.activities.convert = function(host, id){
    var loadMeetingLinks = function(index, count){
        return new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "convert_db_load_meeting_links"},
                    {name: "index", value: index},
                    {name: "count", value: count}
                ],
                func: function(success, message){
                    if (success) {
                        if (message.substr(0 ,2) == "ok"){
                            var content = EncodingClass.string.toVariable(message.substr(2));
                            rs(content);
                        }
                        else {
                            console.log(message);
                            rj(message);
                        }
                    }
                    else {
                        console.log(message);
                        rj(message);
                    }
                }
            });
        });
    };
    var loadTaskLinks = function(index, count){
        return new Promise(function(rs, rj){
            FormClass.api_call({
                url: "database_load.php",
                params: [
                    {name: "task", value: "convert_db_load_task_links"},
                    {name: "index", value: index},
                    {name: "count", value: count}
                ],
                func: function(success, message){
                    if (success) {
                        if (message.substr(0 ,2) == "ok"){
                            var content = EncodingClass.string.toVariable(message.substr(2));
                            rs(content);
                        }
                        else {
                            console.log(message);
                            rj(message);
                        }
                    }
                    else {
                        console.log(message);
                        rj(message);
                    }
                }
            });
        });
    };

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

    loadTaskMeetingCount().then(function(rs){
        var taskPromiseArray = [];
        var i = 0;
        while (i <= rs.taskCount) {
            if (i >= rs.taskCount - 1) break;
            taskPromiseArray.push(loadList2(i, 1000));
            var max = i + 999;
            if (max > rs.taskCount - 1) max = rs.taskCount - 1;
            i = max + 1;
        };
        var meetingPromiseArray = [];
        var i = 0;
        while (i <= rs.meetingCount) {
            if (i >= rs.meetingCount - 1) break;
            var max = i + 999;
            if (max > rs.meetingCount - 1) max = rs.meetingCount - 1;
            meetingPromiseArray.push(loadList2(i, max));
            i = max + 1;
        };
        Promise.all(taskPromiseArray).then(function(content){
            var values = [];
            for (var i = 0; i < content.length; i++){
                content[i].forEach(function(cur_list){
                    values.push(cur_list);
                });
            }
            resolve(values);
        }, function(err) {console.log(err);});
    });

};

hr.activities.deleteActivitiesTask = function(host, id){
    var end, start, employeeid, activity_type, timeValue, status;
    if (!host.quick_open) {
        activity_type = host.activity_type.value;
        // employeeid = host.employee.value;
        employeeid = host.empDict;
        status = host.status.value;
        timeValue = host.time.getValue();
        start = new Date(timeValue.specificValue.start);
        end = new Date(timeValue.specificValue.end);
    }
    var today = new Date();
    today.setHours(0,0,0,0);
    return new Promise(function(resolve,reject){
        ModalElement.show_loading();
        FormClass.api_call({
            url: "tasks_delete.php",
            params: [{name: "id", value: id}],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var index = host.database.activities.getIndex("task_" + id);
                        var deleteContent = host.database.activities.items[index];
                        if (
                            (
                                !host.quick_open
                            ) && (
                                status == "all"
                                || (status == "completed" && deleteContent.status == 1)
                                || (status == "uncompleted" && deleteContent.status == 0)
                                || (status == "doing" && deleteContent.endtime >= today && deleteContent.status == 0)
                                || (status == "overdue" && deleteContent.endtime <= today && deleteContent.status == 0)
                            ) && (
                                activity_type == "all"
                                || deleteContent.activityType == activity_type
                            ) && (
                                employeeid[deleteContent.assignto]
                                // employeeid == 0
                                // || deleteContent.assignto == employeeid
                            ) && (
                                deleteContent.endtime >= start
                                && deleteContent.endtime < end
                            )
                        ) {
                            console.log("abc");
                            if (deleteContent.status == 1) host.chartContent.success--;
                            else if (deleteContent.endtime >= today) host.chartContent.pending--;
                            else host.chartContent.unsuccess--;
                            host.chartContent.count--;
                            host.chartContainer.clearChild();
                            host.chartContainer.addChild(theme.formOnboardingEmployeeInformationChart(host.chartContent));
                        }
                        host.database.activities.items.splice(index, 1);
                        host.loader.invalidate();
                        resolve();
                    }
                    else if (message == "lock_system"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                    }
                    else if (message == "failed_used"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_can_not_delete")
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

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

hr.activities.deleteActivitiesMeeting = function(host, id){
    var end, start, employeeid, activity_type, timeValue, status;
    if (!host.quick_open) {
        activity_type = host.activity_type.value;
        // employeeid = host.employee.value;
        employeeid = host.empDict;
        status = host.status.value;
        timeValue = host.time.getValue();
        start = new Date(timeValue.specificValue.start);
        end = new Date(timeValue.specificValue.end);
    }
    var today = new Date();
    today.setHours(0,0,0,0);
    return new Promise(function(resolve,reject){
        ModalElement.show_loading();
        FormClass.api_call({
            url: "meetings_delete.php",
            params: [{name: "id", value: id}],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var index = host.database.activities.getIndex("meeting_" + id);
                        var deleteContent = host.database.activities.items[index];
                        if (
                            (
                                !host.quick_open
                            ) && (
                                status == "all"
                                || (status == "completed" && deleteContent.status == 1)
                                || (status == "uncompleted" && deleteContent.status == 0)
                                || (status == "doing" && deleteContent.endtime >= today && deleteContent.status == 0)
                                || (status == "overdue" && deleteContent.endtime <= today && deleteContent.status == 0)
                            ) && (
                                activity_type == "all"
                                || deleteContent.activityType == activity_type
                            ) && (
                                employeeid[deleteContent.assignto]
                                // employeeid == 0
                                // || deleteContent.assignto == employeeid
                            ) && (
                                deleteContent.endtime >= start
                                && deleteContent.endtime < end
                            )
                        ) {
                            if (deleteContent.status == 1) host.chartContent.success--;
                            else if (deleteContent.endtime >= today) host.chartContent.pending--;
                            else host.chartContent.unsuccess--;
                            host.chartContent.count--;
                            host.chartContainer.clearChild();
                            host.chartContainer.addChild(theme.formOnboardingEmployeeInformationChart(host.chartContent));
                        }
                        host.database.activities.items.splice(index, 1);
                        host.loader.invalidate();
                        resolve();
                    }
                    else if (message == "lock_system"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                    }
                    else if (message == "failed_used"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_can_not_delete")
                        });
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.activities.deleteActivitiesMeetingConfirm = function(host, id){
    return new Promise(function(resolve,reject){
        var index = host.database.activities.getIndex("meeting_" + id);
        ModalElement.question({
            title: LanguageModule.text("war_title_delete_activities_meeting"),
            message: LanguageModule.text2("war_txt_detele", [host.database.activities.items[index].name]),
            onclick: function(sel){
                if (sel == 0){
                    hr.activities.deleteActivitiesMeeting(host, id).then(function(value){
                        resolve(value);
                    });
                }
            }
        });
    });
};
hr.activities.showActivities = function(host, params){
    host.drawGeneralInforFunc = function(viewGeneralInformation){
        if (viewGeneralInformation) host.viewGeneralInformation = viewGeneralInformation;
        else viewGeneralInformation = host.viewGeneralInformation;
        contentModule.makeOutputFormData({
            typeid: host.form_config[params.activityType].typeid,
            formid: host.form_config[params.activityType].output_form,
            initialValue: params.activityType == "meeting" ? host.dataMeetingEdit : host.dataTaskEdit,
            formContainer: viewGeneralInformation,
            typelists: host.database.typelists.items,
            variableType: "system"
        }).then(function(getValue){});
    };
    theme.formActivitiesView(host, params);
};

hr.activities.showActivitiesTaskQuickModePre = function(host, id){
    ModalElement.show_loading();
    FormClass.api_call({
        url: "database_load.php",
        params: [
            {name: "task", value: "task_load_by_id_quick_mode"},
            {name: "id", value: id}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    var st = EncodingClass.string.toVariable(message.substr(2));
                    host.dataTaskEdit = st.task;
                    host.employeeOfMe = st.employeeOfMe;
                    delete st.employeeOfMe;
                    delete st.task;
                    host.dataTaskEdit.activityid = id;
                    host.dataTaskEdit.id = "task_" + id;
                    st.activities = [host.dataTaskEdit];
                    host.database = {};
                    contentModule.makeDatabaseContent(host, st);
                    host.form_config = contentModule.configVariable(host);
                    host.user_column_configsDic = contentModule.getUser_column_configsDic(host);
                    if (host.dataTaskEdit.participant.indexOf("_") != -1) {
                        var participantStr = host.dataTaskEdit.participant.split("_");
                        var participant = [];
                        for (var i = 0; i < participantStr.length; i++) {
                            if (participantStr[i] == "") continue;
                            participant.push(parseInt(participantStr[i], 10));
                        }
                        host.dataTaskEdit.participant = participant;
                    }
                    else host.dataTaskEdit.participant = EncodingClass.string.toVariable(host.dataTaskEdit.participant);
                    hr.activities.showActivities(host, {
                        activityType: "task",
                        activityid: id,
                        editInforFunc: function(){
                            hr.activities.addActivitiesTask(host, id, function(){}, function(){}, function(){});
                        }
                    });
                }
                else if (message == "war_txt_failed_data"){
                    ModalElement.alert({
                        message: LanguageModule.text("war_txt_failed_data"),
                        func: function(){
                            hr.activities.init(host);
                        }
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.activities.showActivitiesTaskPre = function(host, id, resolve){
    if (host.database.activities.getIndex("task_" + id) < 0) return;
    ModalElement.show_loading();
    FormClass.api_call({
        url: "database_load.php",
        params: [
            {name: "task", value: "task_load_by_id"},
            {name: "id", value: id}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    host.dataTaskEdit = EncodingClass.string.toVariable(message.substr(2));
                    if (host.dataTaskEdit.extrainfo == "") host.dataTaskEdit.extrainfo = {};
                    else host.dataTaskEdit.extrainfo = EncodingClass.string.toVariable(host.dataTaskEdit.extrainfo);
                    if (host.dataTaskEdit.participant.indexOf("_") != -1) {
                        var participantStr = host.dataTaskEdit.participant.split("_");
                        var participant = [];
                        for (var i = 0; i < participantStr.length; i++) {
                            if (participantStr[i] == "") continue;
                            participant.push(parseInt(participantStr[i], 10));
                        }
                        host.dataTaskEdit.participant = participant;
                    }
                    else host.dataTaskEdit.participant = EncodingClass.string.toVariable(host.dataTaskEdit.participant);
                    hr.activities.showActivities(host, {
                        activityType: "task",
                        activityid: id,
                        editInforFunc: function(){
                            hr.activities.addActivitiesTask(host, id, resolve, function(){}, function(){});
                        }
                    });
                }
                else if (message == "war_txt_failed_data"){
                    ModalElement.alert({
                        message: LanguageModule.text("war_txt_failed_data"),
                        func: function(){
                            hr.activities.init(host);
                        }
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.activities.showActivitiesMeetingQuickModePre = function(host, id){
    ModalElement.show_loading();
    FormClass.api_call({
        url: "database_load.php",
        params: [
            {name: "task", value: "meeting_load_by_id_quick_mode"},
            {name: "id", value: id}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    var st = EncodingClass.string.toVariable(message.substr(2));
                    host.dataMeetingEdit = st.meeting;
                    host.employeeOfMe = st.employeeOfMe;
                    delete st.employeeOfMe;
                    delete st.meeting;
                    host.dataMeetingEdit.activityid = id;
                    host.dataMeetingEdit.id = "meeting_" + id;
                    st.activities = [host.dataMeetingEdit];
                    host.database = {};
                    contentModule.makeDatabaseContent(host, st);
                    host.form_config = contentModule.configVariable(host);
                    host.user_column_configsDic = contentModule.getUser_column_configsDic(host);
                    if (host.dataMeetingEdit.participant.indexOf("_") != -1) {
                        var participantStr = host.dataMeetingEdit.participant.split("_");
                        var participant = [];
                        for (var i = 0; i < participantStr.length; i++) {
                            if (participantStr[i] == "") continue;
                            participant.push(parseInt(participantStr[i], 10));
                        }
                        host.dataMeetingEdit.participant = participant;
                    }
                    else host.dataMeetingEdit.participant = EncodingClass.string.toVariable(host.dataMeetingEdit.participant);
                    hr.activities.showActivities(host, {
                        activityType: "meeting",
                        activityid: id,
                        editInforFunc: function(){
                            hr.activities.addActivitiesMeeting(host, id, function(){}, function(){}, function(){});
                        }
                    });
                }
                else if (message == "war_txt_failed_data"){
                    ModalElement.alert({
                        message: LanguageModule.text("war_txt_failed_data"),
                        func: function(){
                            hr.activities.init(host);
                        }
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.activities.showActivitiesMeetingPre = function(host, id, resolve){
    if (host.database.activities.getIndex("meeting_" + id) < 0) return;
    ModalElement.show_loading();
    FormClass.api_call({
        url: "database_load.php",
        params: [
            {name: "task", value: "meeting_load_by_id"},
            {name: "id", value: id}
        ],
        func: function(success, message){
            ModalElement.close(-1);
            if (success){
                if (message.substr(0, 2) == "ok"){
                    host.dataMeetingEdit = EncodingClass.string.toVariable(message.substr(2));
                    if (host.dataMeetingEdit.extrainfo == "") host.dataMeetingEdit.extrainfo = {};
                    else host.dataMeetingEdit.extrainfo = EncodingClass.string.toVariable(host.dataMeetingEdit.extrainfo);
                    if (host.dataMeetingEdit.participant.indexOf("_") != -1) {
                        var participantStr = host.dataMeetingEdit.participant.split("_");
                        var participant = [];
                        for (var i = 0; i < participantStr.length; i++) {
                            if (participantStr[i] == "") continue;
                            participant.push(parseInt(participantStr[i], 10));
                        }
                        host.dataMeetingEdit.participant = participant;
                    }
                    else host.dataMeetingEdit.participant = EncodingClass.string.toVariable(host.dataMeetingEdit.participant);
                    hr.activities.showActivities(host, {
                        activityType: "meeting",
                        activityid: id,
                        editInforFunc: function(){
                            hr.activities.addActivitiesMeeting(host, id, resolve, function(){}, function(){});
                        }
                    });
                }
                else if (message == "war_txt_failed_data"){
                    ModalElement.alert({
                        message: LanguageModule.text("war_txt_failed_data"),
                        func: function(){
                            hr.activities.init(host);
                        }
                    });
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
            else {
                ModalElement.alert({message: message});
            }
        }
    });
};

hr.activities.addActivitiesMeeting = function(host, id, resolve, resolveAdd, resolveClose){
    if (id > 0) hr.menu.changeCurrentUrlTab(host, "activities_meeting/" + id);
    host.id = id;
    function redraw(value){
        var formContainer = DOMElement.div({});
        theme.addActivitiesMeetingForm({
            title: LanguageModule.text("txt_activities_meeting"),
            formContainer: formContainer,
            frameList: host.frameList,
            func: {
                save: function(){
                    if (host.id == 0){
                        return hr.activities.addActivitiesMeetingSubmit(host, host.id, getValueFunction).then(function(value){
                            if (value !== undefined) resolveAdd(value);
                        });
                    }
                    else {
                        return hr.activities.addActivitiesMeetingSubmit(host, host.id, getValueFunction).then(function(value){
                            resolve(value);
                        });
                    }
                },
                cancel: function(){
                    resolveClose();
                    return hr.activities.addActivitiesMeetingClose(host, host.id, getValueFunction, resolve, resolveAdd);
                }
            }
        });
        var getValueFunction;
        contentModule.makeFormData({
            typeid: host.form_config.meeting.typeid,
            formid: host.form_config.meeting.input_form,
            initialValue: value,
            formContainer: formContainer,
            typelists: host.database.typelists.items,
            variableType: "system"
        }).then(function(getValue){
            getValueFunction = getValue;
            absol.form.traversal(formContainer.formFragment.view, function(item){
                if (item.node.tag === "TextInput") {
                    item.node.domElt.focus();
                    item.stop();
                    return;
                }
            });
        });
    };
    if (id > 0){
        redraw(host.dataMeetingEdit);
    }
    else {
        redraw({assignto: host.employeeOfMe[0]});
    }
};

hr.activities.addActivitiesMeetingSubmit = function(host, id, getValueFunction){
    var end, start, employeeid, activity_type, timeValue, status;
    if (!host.quick_open) {
        activity_type = host.activity_type.value;
        // employeeid = host.employee.value;
        employeeid = host.empDict;
        status = host.status.value;
        timeValue = host.time.getValue();
        start = new Date(timeValue.specificValue.start);
        end = new Date(timeValue.specificValue.end);
    }
    return new Promise(function(resolve, reject){
        var today = new Date();
        today.setHours(0,0,0,0);
        var data = getValueFunction();
        if (!data) return;
        var oldData;
        if (id > 0){
            oldData = host.dataMeetingEdit;
            var ischange = contentModule.isChanged(oldData, data,
                ["name", "type", "location", "status", "starttime", "endtime", "allday", "reminder", "assignto", "participant", "result"]
            );
            if (!ischange){
                resolve(hr.activities.getCellActivities(host, "meeting_" + id));
                return;
            }
        }
        for (var i = 0; i < host.database.activities.items.length; i++){
            if (host.database.activities.items[i].id == "meeting_" + id) continue;
            if (host.database.activities.items[i].name.toLowerCase() == data.name.toLowerCase()){
                ModalElement.alert({message: LanguageModule.text("war_txt_exist_name")});
                return;
            }
        }
        data.id = id;
        data.status = data.status ? 1 : 0;
        data.allday = data.allday ? 1 : 0;
        participantStr = "";
        data.participant.forEach(function(elt){
            participantStr += "_" + elt;
        });
        if (participantStr != "") participantStr += "_";
        data.participant = participantStr;
        if (id > 0){
            var index = host.database.activities.getIndex("meeting_" + id);
            data.ver = host.dataMeetingEdit.ver;
        }
        else {
            data.ver = 1;
        }
        data.extrainfo = EncodingClass.string.fromVariable(data.extrainfo);
        ModalElement.show_loading();
        FormClass.api_call({
            url: "activities_meeting_save.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(data)}],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        host.dataMeetingEdit = EncodingClass.string.toVariable(message.substr(2));
                        if (host.dataMeetingEdit.extrainfo == "") host.dataMeetingEdit.extrainfo = {};
                        else host.dataMeetingEdit.extrainfo = EncodingClass.string.toVariable(host.dataMeetingEdit.extrainfo);
                        if (host.dataMeetingEdit.participant.indexOf("_") != -1) {
                            var participantStr = host.dataMeetingEdit.participant.split("_");
                            var participant = [];
                            for (var i = 0; i < participantStr.length; i++) {
                                if (participantStr[i] == "") continue;
                                participant.push(parseInt(participantStr[i], 10));
                            }
                            host.dataMeetingEdit.participant = participant;
                        }
                        else host.dataMeetingEdit.participant = EncodingClass.string.toVariable(host.dataMeetingEdit.participant);
                        host.dataMeetingEdit.meetingid = host.dataMeetingEdit.id;
                        host.dataMeetingEdit.id = "meeting_" + host.dataMeetingEdit.id;
                        host.dataMeetingEdit.activityType = "type_meeting";
                        if (id > 0){
                            var index = host.database.activities.getIndex("meeting_" + id);
                            if (!host.quick_open){
                                if (host.database.activities.items[index].status == 1) host.chartContent.success--;
                                else if (host.database.activities.items[index].endtime >= today) host.chartContent.pending--;
                                else host.chartContent.unsuccess--;
                                host.chartContent.count--;
                            }
                            host.database.activities.items[index] = host.dataMeetingEdit;
                            host.drawGeneralInforFunc();
                        }
                        else {
                            id = host.dataMeetingEdit.meetingid;
                            data.id = host.dataMeetingEdit.id;
                            host.id = host.dataMeetingEdit.id;
                            host.database.activities.items.push(host.dataMeetingEdit);
                            hr.menu.changeCurrentUrlTab(host, "activities");

                        }
                        if (
                            (
                                !host.quick_open
                            ) && (
                                status == "all"
                                || (status == "completed" && host.dataMeetingEdit.status == 1)
                                || (status == "uncompleted" && host.dataMeetingEdit.status == 0)
                                || (status == "doing" && host.dataMeetingEdit.endtime >= today && host.dataMeetingEdit.status == 0)
                                || (status == "overdue" && host.dataMeetingEdit.endtime <= today && host.dataMeetingEdit.status == 0)
                            ) && (
                                activity_type == "all"
                                || host.dataMeetingEdit.activityType == activity_type
                            ) && (
                                employeeid[host.dataMeetingEdit.assignto]
                                // employeeid == 0
                                // || host.dataMeetingEdit.assignto == employeeid
                            ) && (
                                host.dataMeetingEdit.endtime >= start
                                && host.dataMeetingEdit.endtime < end
                            )
                        ) {
                            console.log(host.dataMeetingEdit.endtime, today);
                            if (host.dataMeetingEdit.status == 1) host.chartContent.success++;
                            else if (host.dataMeetingEdit.endtime >= today) host.chartContent.pending++;
                            else host.chartContent.unsuccess++;
                            host.chartContent.count++;
                            host.chartContainer.clearChild();
                            host.chartContainer.addChild(theme.formOnboardingEmployeeInformationChart(host.chartContent));
                            resolve(hr.activities.getCellActivities(host, "meeting_" + id));
                        }
                        else {
                            // hr.activities.redraw(host);
                            resolve(undefined);
                        }
                    }
                    else if (message == "lock_system"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                    }
                    else if (message == "deleted" || message == "edited"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_failed_ver_reload_data")
                        });
                    }
                    else if (message == "exist_name"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_exist_name")});
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.activities.addActivitiesMeetingClose = function(host, id, getValueFunction, resolve, resolveAdd){
    return new Promise(function(rs, rj){
        var data = getValueFunction("no_alert");
        if (!data) {
            rs();
            return;
        }
        var oldData;
        if (id > 0){
            oldData = host.dataMeetingEdit;
        }
        else {
            oldData = {
                name: "",
                type: "type_visit",
                location: "",
                status: 0,
                starttime: new Date(),
                endtime: new Date(),
                allday: 0,
                reminder: "type_reminder_none",
                assignto: 0,
                participant: [],
                result: ""
            };
        }
        data.allday = data.allday ? 1 : 0;
        data.status = data.status ? 1 : 0;
        if (oldData.participant === undefined) oldData.participant = [];
        var ischange = contentModule.isChanged(oldData, data,
            ["name", "type", "location", "status", "starttime", "endtime", "allday", "reminder", "assignto", "participant", "result"]
        );
        if (!ischange){
            rs();
            return;
        }
        contentModule.questionChange({
            onclick: function(sel){
                if (sel == 0){
                    if (host.id == 0){
                        hr.activities.addActivitiesMeetingSubmit(host, host.id, getValueFunction).then(function(value){
                            if (value !== undefined) resolveAdd(value);
                            rs();
                        });
                    }
                    else {
                        hr.activities.addActivitiesMeetingSubmit(host, host.id, getValueFunction).then(function(value){
                            resolve(value);
                            rs();
                        });
                    }
                }
                else if (sel == 1){
                    rs();
                }
            }
        });
    });
};

hr.activities.addActivitiesTask = function(host, id, resolve, resolveAdd, resolveClose){
    if (id > 0) hr.menu.changeCurrentUrlTab(host, "activities_task/" + id);
    host.id = id;
    function redraw(value){
        var formContainer = DOMElement.div({});
        theme.addActivitiesTaskForm({
            title: LanguageModule.text("txt_activities_task"),
            formContainer: formContainer,
            frameList: host.frameList,
            func: {
                save: function(){
                    if (host.id == 0){
                        return hr.activities.addActivitiesTaskSubmit(host, host.id, getValueFunction).then(function(value){
                            if (value !== undefined) resolveAdd(value);
                        });
                    }
                    else {
                        return hr.activities.addActivitiesTaskSubmit(host, host.id, getValueFunction).then(function(value){
                            resolve(value);
                        });
                    }
                },
                cancel: function(){
                    resolveClose();
                    return hr.activities.addActivitiesTaskClose(host, host.id, getValueFunction, resolve, resolveAdd);
                }
            }
        });
        var getValueFunction;
        contentModule.makeFormData({
            typeid: host.form_config.task.typeid,
            formid: host.form_config.task.input_form,
            initialValue: value,
            formContainer: formContainer,
            typelists: host.database.typelists.items,
            variableType: "system"
        }).then(function(getValue){
            getValueFunction = getValue;
            absol.form.traversal(formContainer.formFragment.view, function(item){
                if (item.node.tag === "TextInput") {
                    item.node.domElt.focus();
                    item.stop();
                    return;
                }
            });
        });
    };
    if (id > 0){
        redraw(host.dataTaskEdit);
    }
    else {
        redraw({assignto: host.employeeOfMe[0]});
    }
};

hr.activities.addActivitiesTaskClose = function(host, id, getValueFunction, resolve, resolveAdd){
    return new Promise(function(rs, rj){
        var data = getValueFunction("no_alert");
        if (!data) {
            rs();
            return;
        }
        var oldData;
        if (id > 0){
            oldData = host.dataTaskEdit;
        }
        else {
            oldData = {
                name: "",
                status: 0,
                endtime: new Date(),
                reminder: "type_reminder_none",
                assignto: 0,
                participant: [],
                result: ""
            };
        }
        data.status = data.status ? 1 : 0;
        if (oldData.participant === undefined) oldData.participant = [];
        var ischange = contentModule.isChanged(oldData, data,
            ["name", "status", "endtime", "reminder", "assignto", "participant", "result"]
        );
        if (!ischange){
            rs();
            return;
        }
        contentModule.questionChange({
            onclick: function(sel){
                if (sel == 0){
                    if (host.id == 0){
                        hr.activities.addActivitiesTaskSubmit(host, host.id, getValueFunction).then(function(value){
                            if (value !== undefined) resolveAdd(value);
                            rs();
                        });
                    }
                    else {
                        hr.activities.addActivitiesTaskSubmit(host, host.id, getValueFunction).then(function(value){
                            resolve(value);
                            rs();
                        });
                    }
                }
                else if (sel == 1){
                    rs();
                }
            }
        });
    });
};

hr.activities.addActivitiesTaskSubmit = function(host, id, getValueFunction){
    var end, start, employeeid, activity_type, timeValue, status;
    activity_type = host.activity_type.value;
    // employeeid = host.employee.value;
    employeeid = host.empDict;
    status = host.status.value;
    timeValue = host.time.getValue();
    start = new Date(timeValue.specificValue.start);
    end = new Date(timeValue.specificValue.end);
    return new Promise(function(resolve, reject){
        var today = new Date();
        today.setHours(0,0,0,0);
        var data = getValueFunction();
        if (!data) return;
        var oldData;
        if (id > 0){
            oldData = host.dataTaskEdit;
            var ischange = contentModule.isChanged(oldData, data,
                ["name", "status", "endtime", "reminder", "assignto", "participant", "result"]
            );
            if (!ischange){
                resolve(hr.activities.getCellActivities(host, "task_" + id));
                return;
            }
        }
        for (var i = 0; i < host.database.activities.items.length; i++){
            if (host.database.activities.items[i].id == "task_" + id) continue;
            if (host.database.activities.items[i].name.toLowerCase() == data.name.toLowerCase()){
                ModalElement.alert({message: LanguageModule.text("war_txt_exist_name")});
                return;
            }
        }
        data.id = id;
        data.status = data.status? 1 : 0;
        participantStr = "";
        data.participant.forEach(function(elt){
            participantStr += "_" + elt;
        });
        if (participantStr != "") participantStr += "_";
        data.participant = participantStr;
        if (id > 0){
            var index = host.database.activities.getIndex("task_" + id);
            data.ver = host.dataTaskEdit.ver;
        }
        else {
            data.ver = 1;
        }
        data.extrainfo = EncodingClass.string.fromVariable(data.extrainfo);
        console.log(data);
        ModalElement.show_loading();
        FormClass.api_call({
            url: "activities_task_save.php",
            params: [{name: "data", value: EncodingClass.string.fromVariable(data)}],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        host.dataTaskEdit = EncodingClass.string.toVariable(message.substr(2));
                        if (host.dataTaskEdit.extrainfo == "") host.dataTaskEdit.extrainfo = {};
                        else host.dataTaskEdit.extrainfo = EncodingClass.string.toVariable(host.dataTaskEdit.extrainfo);
                        if (host.dataTaskEdit.participant.indexOf("_") != -1) {
                            var participantStr = host.dataTaskEdit.participant.split("_");
                            var participant = [];
                            for (var i = 0; i < participantStr.length; i++) {
                                if (participantStr[i] == "") continue;
                                participant.push(parseInt(participantStr[i], 10));
                            }
                            host.dataTaskEdit.participant = participant;
                        }
                        else host.dataTaskEdit.participant = EncodingClass.string.toVariable(host.dataTaskEdit.participant);
                        host.dataTaskEdit.taskid = host.dataTaskEdit.id;
                        host.dataTaskEdit.id = "task_" + host.dataTaskEdit.id;
                        host.dataTaskEdit.activityType = "type_task";
                        if (id > 0){
                            var index = host.database.activities.getIndex("task_" + id);
                            if (host.database.activities.items[index].status == 1) host.chartContent.success--;
                            else if (host.database.activities.items[index].endtime >= today) host.chartContent.pending--;
                            else host.chartContent.unsuccess--;
                            host.chartContent.count--;
                            host.database.activities.items[index] = host.dataTaskEdit;
                            host.drawGeneralInforFunc();
                        }
                        else {
                            id = host.dataTaskEdit.taskid;
                            data.id = host.dataTaskEdit.id;
                            host.id = host.dataTaskEdit.id;
                            host.database.activities.items.push(host.dataTaskEdit);
                            hr.menu.changeCurrentUrlTab(host, "activities");
                        }
                        if (
                            (
                                status == "all"
                                || (status == "completed" && host.dataTaskEdit.status == 1)
                                || (status == "uncompleted" && host.dataTaskEdit.status == 0)
                                || (status == "doing" && host.dataTaskEdit.endtime >= today && host.dataTaskEdit.status == 0)
                                || (status == "overdue" && host.dataTaskEdit.endtime <= today && host.dataTaskEdit.status == 0)
                            ) && (
                                activity_type == "all"
                                || host.dataTaskEdit.activityType == activity_type
                            ) && (
                                employeeid[host.dataTaskEdit.assignto]
                                // employeeid == 0
                                // || host.dataTaskEdit.assignto == employeeid
                            ) && (
                                host.dataTaskEdit.endtime >= start
                                && host.dataTaskEdit.endtime < end
                            )
                        ) {
                            if (host.dataTaskEdit.status == 1) host.chartContent.success++;
                            else if (host.dataTaskEdit.endtime >= today) host.chartContent.pending++;
                            else host.chartContent.unsuccess++;
                            host.chartContent.count++;
                            host.chartContainer.clearChild();
                            host.chartContainer.addChild(theme.formOnboardingEmployeeInformationChart(host.chartContent));
                            resolve(hr.activities.getCellActivities(host, "task_" + id));
                        }
                        else {
                            // hr.activities.redraw(host);
                            resolve(undefined);
                        }
                    }
                    else if (message == "lock_system"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_system_lock")});
                    }
                    else if (message == "deleted" || message == "edited"){
                        ModalElement.alert({
                            message: LanguageModule.text("war_txt_failed_ver_reload_data")
                        });
                    }
                    else if (message == "exist_name"){
                        ModalElement.alert({message: LanguageModule.text("war_txt_exist_name")});
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.activities.activitiesStatusChangeSave = function(host, activityName, id, status, params){
    return new Promise(function(resolve, reject){
        var status_filter = host.status.value;
        var today = new Date();
        today.setHours(0,0,0,0);
        ModalElement.show_loading();
        FormClass.api_call({
            url: "onboarding_activities_status_change_save.php",
            params: [
                {name: "activityName", value: activityName},
                {name: "id", value: id},
                {name: "status", value: status ? 1 : 0}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success) {
                    if (message.substr(0, 2) == "ok"){
                        var index;
                        if(activityName == "task") {
                            index = host.database.activities.getIndex("task_" + id);
                        }
                        else {
                            index = host.database.activities.getIndex("meeting_" + id);
                        }
                        host.database.activities.items[index].status = status ? 1 : 0;
                        if (
                            status_filter == "all"
                            || (status_filter == "completed" && host.database.activities.items[index].status == 1)
                            || (status_filter == "uncompleted" && host.database.activities.items[index].status == 0)
                            || (status_filter == "doing" && host.database.activities.items[index].endtime >= today && host.database.activities.items[index].status == 0)
                            || (status_filter == "overdue" && host.database.activities.items[index].endtime <= today && host.database.activities.items[index].status == 0)
                        ) {
                            if (host.database.activities.items[index].status == 1) host.chartContent.success++;
                            else if (host.database.activities.items[index].endtime >= today) host.chartContent.pending++;
                            else host.chartContent.unsuccess++;
                            host.chartContent.count++;
                            params.chartContainer.clearChild();
                            params.chartContainer.addChild(theme.formOnboardingEmployeeInformationChart(host.chartContent));
                            resolve("");
                        }
                        else {
                            resolve("remove");
                        }
                    }
                    else {
                        console.log(message);
                        reject(message);
                    }
                }
                else {
                    console.log(message);
                    reject(message);
                }
            }
        });
    });
}

hr.activities.getCellActivities = function(host, id){
    var today = new Date();
    today.setHours(0,0,0,0);
    var relativeId = id;
    var index = host.database.activities.getIndex(id);
    var activityType = host.database.activities.items[index].activityType;
    if (activityType == "type_meeting") id = host.database.activities.items[index].meetingid;
    else id = host.database.activities.items[index].taskid;
    var func = {
        view: function(resolve){
            if (activityType == "type_meeting") {
                hr.activities.showActivitiesMeetingPre(host, id, resolve);
            }
            else {
                hr.activities.showActivitiesTaskPre(host, id, resolve);
            }
        },
    };
    func.delete = function(){
        return new Promise(function(resolve,reject){
            if (activityType == "type_meeting") {
                hr.activities.deleteActivitiesMeetingConfirm(host, id).then(function(value){
                    resolve(value);
                });
            }
            else {
                hr.activities.deleteActivitiesTaskConfirm(host, id).then(function(value){
                    resolve(value);
                });
            }
        });
    };
    func.changeStatus = function(value){
        return new Promise(function(resolve, reject){
            if (host.database.activities.items[index].status == 1) host.chartContent.success--;
            else if (host.database.activities.items[index].endtime >= today) host.chartContent.pending--;
            else host.chartContent.unsuccess--;
            host.chartContent.count--;
            hr.activities.activitiesStatusChangeSave(host, activityType == "type_meeting" ? "meeting" : "task", id, value, {chartContainer: host.chartContainer}).then(function(message){
                resolve(message);
            });
        }, function(err){console.log(err);});
    };
    var res = host.database.activities.items[index];
    if (host.database.activities.items[index].tablename) {
        res.activityPurpose = {
            tablename: host.database.activities.items[index].tablename,
            instanceid: host.database.activities.items[index].instanceid
        };
    }
    func.markedFunc = function(marked){
        return contentModule.markedFunc(host, {
            id: relativeId,
            marked: marked,
            task: "activities",
            tablename: "activities"
        });
    };
    res.func = func;
    return res;
};


hr.activities.redraw = function(host){
    host.tableContent = {
        database: host.database,
        form_config: host.form_config,
        user_column_configsDic: host.user_column_configsDic,
        inputsearchbox: host.inputsearchbox,
        status: host.status,
        activity_type: host.activity_type,
        time: host.time,
        employee: host.employee,
        data_container: host.data_container,
        getRow: function(id){
            return hr.activities.getCellActivities(host, id);
        },
        tableView: null,
        configColumnActivities: null
    };

    host.mIndex = 0;
    host.tIndex = 0;
    host.mNumber = 500;
    host.tNumber = 500;
    host.mDone = false;
    host.tDone = false;

    host.funcs.formActivitiesContentData(host.tableContent).then(function(){
        // var timeValue = host.time.getValue();
        // var start = new Date(timeValue.specificValue.start);
        // var end = new Date(timeValue.specificValue.end);
        // hr.activities.loadLazyData(host, start, end, host.sessionid);
        host.loader = new hr.activities.ActivitiesListLoader({holderView:host.frameList, host: host });
        host.loader.resume();
        host.loader.requestQuery();
    });
};

hr.activities.init = function(host){
    return new Promise(function(resolveMn, rejectMn){
        host.database = {};
        ModalElement.show_loading();
        FormClass.api_call({
            url: "database_load.php",
            params: [
                {name: "task", value: "activities_load_init"}
            ],
            func: function(success, message){
                ModalElement.close(-1);
                if (success){
                    if (message.substr(0, 2) == "ok"){
                        var content = EncodingClass.string.toVariable(message.substr(2));
                        contentModule.makeDatabaseContent(host, content);
                        host.form_config = contentModule.configVariable(host);
                        contentModule.makeOrgsIndex(host);
                        contentModule.makeEmployeeData(host);
                        contentModule.makeEmployeesIndex(host);
                        var orgDict = {};
                        var root = [];
                        host.database.orgs.items.forEach((item, i) => {
                            orgDict[item.id] = i;
                            if (item.parentid == 0) root.push(item.id);
                        });
                        var createAllEmployeeInOrg = function(orgid){
                            var index = orgDict[orgid];
                            host.database.orgs.items[index].allEmployeeIdList = host.database.orgs.items[index].employeeIdList;
                            host.database.orgs.items[index].childIndexList.forEach((item, i) => {
                                createAllEmployeeInOrg(host.database.orgs.items[item].id);
                                host.database.orgs.items[index].allEmployeeIdList = host.database.orgs.items[index].allEmployeeIdList.concat(
                                    host.database.orgs.items[item].allEmployeeIdList
                                );
                            });
                        };
                        root.forEach(function(elt){
                            createAllEmployeeInOrg(elt);
                        });
                        host.user_column_configsDic = contentModule.getUser_column_configsDic(host);
                        host.dictionary = {
                            employees: contentModule.makeDictionaryIndex(host.database.employees.items),
                            peoples: contentModule.makeDictionaryIndex(host.database.peoples.items),
                            orgs: orgDict
                        };
                        host.dictionary.users = {};
                        host.database.users.items.forEach(function(elt, index){
                            host.dictionary.users[elt.homeid] = index;
                        });
                        host.employeeOfMe = content.employeeOfMe;
                        contentModule.makeEmployeeGroupMemberIndex(host);
                        contentModule.makePrivilegesActivitiesConfigs(host);
                        host.sessionid = (new Date()).getTime();
                        var cmdbutton = {
                            close: function (event, me) {
                                if (hr.isMobile){
                                    hr.menu.loadPage(1000);
                                }
                                else {
                                    hr.menu.tabPanel.removeTab(host.holder.id);
                                }
                            },
                            addMeeting: function(host){
                                return function (event, me) {
                                    hr.activities.addActivitiesMeeting(host, 0, function onSave(value){
                                    }, function onAdd(value){
                                        host.newRecord = host.data_container.insertData([value]);
                                        host.newRecord.view();
                                        host.loader.invalidate();
                                    }, function onRemove(){if (hr.isMobile) hr.menu.showMobileTabbar(true);});
                                }
                            } (host),
                            addTask: function(host){
                                return function (event, me) {
                                    hr.activities.addActivitiesTask(host, 0, function onSave(value){
                                    }, function onAdd(value){
                                        host.newRecord = host.data_container.insertData([value]);
                                        host.newRecord.view();
                                        host.loader.invalidate();
                                    }, function onRemove(){if (hr.isMobile) hr.menu.showMobileTabbar(true);});
                                }
                            } (host)
                        };

                        var employeeItems = contentModule.getMemberOfEmployeeSelectMenu(host);
                        employeeItems.splice(0, 1);
                        // employeeItems[0].text = LanguageModule.text("txt_all_employee");

                        host.chartContainer = absol._({});
                        host.data_container = absol._({
                            style: {paddingBottom: "var(--footer-margin)"}
                        });

                        host.holder.addChild(host.frameList);
                        var singlePage = host.funcs.formActivitiesInit({
                            cmdbutton: cmdbutton,
                            holder: host.holder,
                            data_container: host.data_container,
                            chartContainer: host.chartContainer,
                            employeeItems: employeeItems,
                            timeClass: "activities-time-class",
                            filter_change_func: function(){
                                host.sessionid = (new Date()).getTime();
                                hr.activities.redraw(host);
                            }
                        });
                        host.status = singlePage.status;
                        host.activity_type = singlePage.activity_type;
                        host.inputsearchbox = singlePage.inputsearchbox;
                        host.time = singlePage.time;
                        host.employee = singlePage.employee;
                        host.employee.values = host.employeeOfMe;
                        host.frameList.addChild(singlePage);
                        singlePage.requestActive();
                        hr.activities.redraw(host);

                        resolveMn(host);
                    }
                    else {
                        ModalElement.alert({message: message});
                    }
                }
                else {
                    ModalElement.alert({message: message});
                }
            }
        });
    });
};

hr.activities.ActivitiesListLoader = (function(){

function ActivitiesListLoader(opt){
    setTimeout(this.attachToTabView.bind(this), 1000);
    this.holderView = opt.holderView;
    this.host = opt.host;
    this.tableView = this.host.tableContent.tableView;
    this.attachChangeEvent();
    this.state = 'STAND';
    this.tasks = {};
    this.cTaskId = -1;
}


ActivitiesListLoader.prototype.attachToTabView = function(){
    var c = this.holderView;
    var stack = [];
    while (c) {
        stack.unshift(c);
        c = c.parentElement;
    }
    var mainTabView = null;
    var frame = null;
    for (var i  = 0; i < stack.length; ++i){
        if (stack[i].classList.contains('absol-tabview')){
            mainTabView = stack[i];
            frame =  stack[i + 2];
        }
    }

    if (!frame) return ;
    this.frame = frame;
    frame.on({
        active: this.resume.bind(this),
        deactive: this.pause.bind(this),
        remove: this.stop.bind(this)
    });
};

ActivitiesListLoader.prototype.attachChangeEvent  = function(){
    var host = this.host;
    host.status.on('change', this.requestQuery.bind(this));
    host.activity_type.on('change', this.requestQuery.bind(this));
    host.employee.on('change', this.requestQuery.bind(this));
    host.time.on('change', this.requestQuery.bind(this));
};


ActivitiesListLoader.prototype.pause = function(){
    if (this.state !== 'RUNNING') return;
    this.state = 'PAUSE';
};


ActivitiesListLoader.prototype.resume = function(){
    if (this.state !== 'STAND' && this.state !== 'PAUSE') return;
    this.state = 'RUNNING';
    if (this.tasks[this.cTaskId]){
        this.doTask(this.tasks[this.cTaskId]);
    }
};




ActivitiesListLoader.prototype.stop = function(){
    if (this.state == 'RUNNING') this.pause();
    //clear data
    this.state = "STOP";
    if (this.frame) this.frame.off({
        active: this.resume.bind(this),
        deactive: this.pause.bind(this),
        remove: this.stop.bind(this)
    });
};


ActivitiesListLoader.prototype.requestQuery = function(){
    var query = this.getQuery();
    var ident = absol.$.calcDTQueryHash(query);
    var task;
    if (this.tasks[ident]){
        task = this.tasks[ident];
    }
    else {
        task = {
            id: ident,
            query: query,
            mIdx: 0,
            tIdx: 0,
            mDone: false,
            tDone: false,
            chartContent : {
                count: 0,
                success: 0,
                unsuccess: 0,
                pending: 0
            },
            database:{
                activities:{
                    items: []
                }
            },
            sync: Promise.resolve()
        };
        this.tasks[ident] = task;
    }
    this.host.chartContent = task.chartContent;
    if (this.cTaskId != ident){
        this.cTaskId = ident;
        this.tableView.clearRows();
        this.doTask(task);
    }

};


ActivitiesListLoader.prototype.doTask = function(task){
    var taskId = task.id;
    var self = this;
    var host = this.host;
    task.sync = task.sync.then(function(){
        if (self.cTaskId !== taskId) {
            return;
        }
        //push loaded items to view
        self.tableView.clearRows();
        self.host.database.activities.items = task.database.activities.items;
        self.addRowToTable(task.database.activities.items);


        return new Promise(function(resolve){
            function load(){
                if (self.state !=='RUNNING') {
                    resolve();
                    return;
                }

                if (self.cTaskId !== taskId) {
                    resolve();
                    return;
                }
                if (task.mDone &&task.tDone){
                    self.drawChart(task.chartContent);
                    resolve();
                    return ;
                }
                var params = Object.assign({}, task.query, {
                    mIndex: task.mIdx,
                    tIndex: task.tIdx,
                    mNumber: 500,
                    tNumber: 500
                });
                FormClass.api_call({
                    url: "database_load.php",
                    params: [
                        {name: "task", value: hr.isMobile? "activities_load_lazy_mobile" : "activities_load_lazy"},
                        {name: "params", value: EncodingClass.string.fromVariable(params)}
                    ],
                    func: function(success, message){
                        ModalElement.close(-1);
                        if (success){
                            if (message.substr(0, 2) == "ok"){
                                var content = EncodingClass.string.toVariable(message.substr(2));
                                task.mDone = content.mDone || false;
                                task.tDone = content.tDone || false;
                                task.mIdx += content.meetings.length;
                                task.tIdx += content.tasks.length;

                                delete(content.mDone);
                                delete(content.tDone);

                                var meeting_link_dict = {};
                                content.meeting_links.forEach(function(elt){
                                    meeting_link_dict[elt.meetingid] = elt;
                                });

                                var task_link_dict = {};
                                content.task_links.forEach(function(elt){
                                    task_link_dict[elt.taskid] = elt;
                                });

                                var t = {activities: []};
                                content.meetings.forEach(function(elt){
                                    if (!params.empDict[elt.assignto]) return;
                                    var isView = false;
                                    if (elt.participant.indexOf("_") != -1) {
                                        var participantStr = elt.participant.split("_");
                                        var participant = [];
                                        for (var i = 0; i < participantStr.length; i++) {
                                            if (participantStr[i] == "") continue;
                                            participant.push(parseInt(participantStr[i], 10));
                                        }
                                        elt.participant = participant;
                                    }
                                    else if (elt.participant == "") elt.participant = [];
                                    else elt.participant = EncodingClass.string.toVariable(elt.participant);
                                    for (i = 0; i < elt.participant.length; i++){
                                        if (host.employeeEditDic[elt.participant[i]]) {
                                            isView = true;
                                            break;
                                        }
                                    }
                                    if (meeting_link_dict[elt.id]){
                                        elt.tablename = meeting_link_dict[elt.id].tablename;
                                        elt.instanceid = meeting_link_dict[elt.id].instanceid;
                                    }
                                    elt.meetingid = elt.id;
                                    elt.id = "meeting_" + elt.id;
                                    elt.activityType = "type_meeting";
                                    if (host.employeeEditDic[elt.assignto]) isView = true;
                                    if (isView) t.activities.push(elt);
                                });
                                content.tasks.forEach(function(elt){
                                    if (!params.empDict[elt.assignto]) return;
                                    var isView = false;
                                    if (elt.participant.indexOf("_") != -1) {
                                        var participantStr = elt.participant.split("_");
                                        var participant = [];
                                        for (var i = 0; i < participantStr.length; i++) {
                                            if (participantStr[i] == "") continue;
                                            participant.push(parseInt(participantStr[i], 10));
                                        }
                                        elt.participant = participant;
                                    }
                                    else if (elt.participant == "") elt.participant = [];
                                    else elt.participant = EncodingClass.string.toVariable(elt.participant);
                                    for (i = 0; i < elt.participant.length; i++){
                                        if (host.employeeEditDic[elt.participant[i]]) {
                                            isView = true;
                                            break;
                                        }
                                    }
                                    if (task_link_dict[elt.id]) {
                                        elt.tablename = task_link_dict[elt.id].tablename;
                                        elt.instanceid = task_link_dict[elt.id].instanceid;
                                    }
                                    elt.taskid = elt.id;
                                    elt.id = "task_" + elt.id;
                                    elt.activityType = "type_task";
                                    if (host.employeeEditDic[elt.assignto]) isView = true;
                                    if (isView) t.activities.push(elt);
                                });

                                var x = {
                                    database: {}
                                };
                                contentModule.makeDatabaseContent(x, t);
                                x.database.user_marked = host.database.user_marked;
                                contentModule.makeUserMarkerData(x, "activities");

                                var data = [];
                                var today = new Date();
                                today.setHours(0,0,0,0);
                                for (var i = 0; i < x.database.activities.items.length; i++){
                                    if (x.database.activities.items[i].status == 1) task.chartContent.success++;
                                    else if (x.database.activities.items[i].endtime >= today) task.chartContent.pending++;
                                    else task.chartContent.unsuccess++;
                                    task.chartContent.count++;
                                }

                                task.database.activities.items = task.database.activities.items.concat(x.database.activities.items);
                                if (self.cTaskId == taskId){
                                    self.host.database.activities.items = task.database.activities.items;
                                    self.addRowToTable(x.database.activities.items);

                                }
                                load();
                            }
                            else {
                                ModalElement.alert({message: message});
                            }
                        }
                        else {
                            ModalElement.alert({message: message});
                        }
                    }
                });
            }


            if (task.mDone && task.tDone) {
                self.drawChart(task.chartContent);
                resolve();
            }
            else
            ModalElement.show_loading();
                load();
        });
    }) ;
};

ActivitiesListLoader.prototype.drawChart = function(chartContent){
    // console.log("TODO", chartContent);
    this.host.chartContainer.clearChild();
    this.host.chartContainer.addChild(theme.formOnboardingEmployeeInformationChart(chartContent));
};

ActivitiesListLoader.prototype.addRowToTable = function(items){
    this.host.data_container.list = items;
    this.host.data_container.insertData(items);
};

ActivitiesListLoader.prototype.getQuery = function(){
    var host  = this.host;
    var timeValue = host.time.getValue();
    var start = new Date(timeValue.specificValue.start);
    var end = new Date(timeValue.specificValue.end);
    var query = {
        status: host.status.value,
        activity_type: host.activity_type.value,
        starttime: start,
        endtime: end,
        privSystem: systemconfig.privSystem
        // privSystem: 1
    };
    query.employeeid = [];
    var employeeid = host.employee.values;

    host.employee.values.forEach((item, i) => {
        if (item > 0) query.employeeid.push(item);
        else {
            query.employeeid = query.employeeid.concat(host.database.orgs.items[host.dictionary.orgs[-item]].allEmployeeIdList);
        }
    });

    query.employeeid = query.employeeid.filter(function(elt, index){
        return query.employeeid.indexOf(elt) == index && host.employeeEditDic[elt];
    });


    // if (employeeid != 0) query.employeeid = [employeeid];
    // else query.employeeid = Object.keys(host.employeeEditDic);
    // query.employeeid = Object.keys(host.employeeEditDic);

    query.empDict = {};


    query.employeeid.forEach((item, i) => {
        query.empDict[item] = 1;
    });

    host.empDict = query.empDict;

    return query;
};

ActivitiesListLoader.prototype.invalidate = function(){
    //TODO: còn trường hợp thêm/ xóa tác vụ ở máy khác/ tab khác,....
    this.tasks = {};
};


return ActivitiesListLoader;
})();

VaKeR 2022