Загрузка данных
function GetExpertTasksList() {
try {
/** Определение текущего пользователя */
curUserID = Int(CurRequest.Session.Env.curUserID);
xCurUser = custom_lib.ForeignElem(curUserID);
tasksList = {
amountOverdueTasks: 0,
amountUnverifiedTasks: 0,
tasks: [],
archiveTasks: []
};
/** Определение прав доступа */
bIsAdmin = false;
query = "for $elem in group_collaborators where $elem/code = 'track_view_all_groups' and $elem/collaborator_id = " + xCurUser.id + " return $elem";
bIsAdmin = !custom_lib.isEmpty(XQuery(query));
if(!bIsAdmin) {
/** Задания, где текущий пользователь указан в качестве эксперта */
query = "for $elem in learning_task_results where $elem/expert_id = " + xCurUser.id + " order by $elem/learning_task_name, $elem/person_fullname ascending return $elem";
arr_xLearningTaskResults = XQuery(query);
/** Задания, где текущий пользователь выступает в качестве бизнес-тренера */
query = "for $elem in object_datas where ForeignElem($elem/object_data_type_id)/code = 'education_plan_tutors' and $elem/sec_object_id = "
+ xCurUser.id + " return $elem";
arr_xObjectDatas = ArraySelectDistinct(XQuery(query), "This.object_id");
if(!custom_lib.isEmpty(arr_xObjectDatas)) {
query = "for $lt in learning_task_results, $elem in education_plan_collaborators where $lt/id = $elem/result_object_id and $elem/type = 'learning_task' and MatchSome($elem/education_plan_id, ("
+ ArrayMerge(arr_xObjectDatas, "This.object_id", ",") + ")) order by $lt/learning_task_name, $lt/person_fullname ascending return $lt";
arr_xLearningTaskResults = ArrayUnion(arr_xLearningTaskResults, XQuery(query));
arr_xLearningTaskResults = ArraySort(arr_xLearningTaskResults, "This.learning_task_name", "+", "This.person_fullname", "+");
arr_xLearningTaskResults = ArraySelectDistinct(arr_xLearningTaskResults, "This.id");
}
} else {
query = "for $elem in learning_task_results where $elem/status_id != 'success'" +
" or ($elem/status_id = 'success' and $elem/finish_date > " + XQueryLiteral(DateOffset(Date(), - (182 * 86400))) + ")" +
" order by $elem/learning_task_name, $elem/person_fullname ascending return $elem";
arr_xLearningTaskResults = XQuery(query);
}
arr_xLearningTasks = ArrayExtract(ArraySelectDistinct(arr_xLearningTaskResults, "This.learning_task_id"), "This.learning_task_id.ForeignElem");
/** Глобальные значения для виджетов */
iAmountOverdueTasks = 0;
iAmountUnverifiedTasks = 0;
for(xLearningTask in arr_xLearningTasks) {
try {
/** Значения по умолчанию */
/** TO DO: настроить дополнительно добавление изображения при создании задания */
oLearningTask = {
id: StrInt(xLearningTask.id),
title: xLearningTask.name,
amountUnverifiedTasks: 0,
amountPassedTasks: 0,
activeTaskResults: [],
passedTaskResults: [],
image: {
url: "/download_file.html?file_id=6267075769506796660"
}
};
/** Значения для конкретных заданий */
iAmountUnverifiedCurrentTask = 0;
iAmountPassedCurrentTask = 0;
/** Изображение */
if(custom_lib.IsValid(xLearningTask.resource_id)) {
oLearningTask.image.url = "/download_file.html?file_id=" + xLearningTask.resource_id;
}
arr_xCurrentLearningTaskResults = ArraySelect(arr_xLearningTaskResults, ("This.learning_task_id == " + xLearningTask.id));
arr_xCurrentLearningTaskResults = ArraySort(arr_xCurrentLearningTaskResults, "finish_execution_date", "-", "person_fullname", "+");
for(xLearningTaskResult in arr_xCurrentLearningTaskResults) {
try {
/** Статусы заданий */
oStatuses = {
"assign": "plan",
"process": "active",
"evaluation": "evaluation",
"viewed": "viewed",
"success": "passed",
"failed": "failed"
};
xCollaborator = custom_lib.ForeignElem(xLearningTaskResult.person_id);
/** Название программы обучения */
query = "for $elem in object_datas where ForeignElem($elem/object_data_type_id)/code = 'learning_results' and $elem/object_id = "
+ xLearningTaskResult.id + " return $elem";
xObjectData = ArrayOptFirstElem(XQuery(query));
sProgramName = custom_lib.IsValid(xObjectData) ? custom_lib.ForeignElem(xObjectData.sec_object_id).name : null;
/** Дата отправки задания */
sSendDate = custom_lib.IsValid(xLearningTaskResult.finish_execution_date) ? Date(xLearningTaskResult.finish_execution_date) : null;
oTask = {
id: StrInt(xLearningTaskResult.id),
title: xLearningTask.name,
status: oStatuses[xLearningTaskResult.status_id],
person: {
id: StrInt(xCollaborator.id),
fullname: xCollaborator.fullname,
position: xCollaborator.position_name
},
programName: sProgramName,
/**
* TODO: Добавить временную зону в даты
*/
sendDate: sSendDate,
finishDate: null,
score: null,
expertFullname: custom_lib.IsValid(xLearningTaskResult.expert_id) && custom_lib.IsValid(xLearningTaskResult.expert_id.OptForeignElem) ?
custom_lib.ForeignElem(xLearningTaskResult.expert_id).fullname: null,
};
switch (xLearningTaskResult.status_id) {
case "evaluation":
iAmountUnverifiedTasks++;
iAmountUnverifiedCurrentTask++
case "assign":
case "process":
case "viewed":
oLearningTask.activeTaskResults.push(oTask);
if(DateNewTime(Date(), 0, 0, 0) > DateNewTime(xLearningTaskResult.plan_end_date, 0, 0, 0)) {
iAmountOverdueTasks++;
}
break;
case "success":
case "failed":
iAmountPassedCurrentTask++;
/** Дата проверки задания */
if(custom_lib.IsValid(xLearningTaskResult.finish_date)) {
oTask.finishDate = Date(xLearningTaskResult.finish_date);
}
/** Оценка */
if(custom_lib.IsValid(xLearningTaskResult.mark)) {
oTask.score = xLearningTaskResult.mark;
}
oLearningTask.passedTaskResults.push(oTask);
break;
default:
break;
}
} catch (error) {
log("ERROR: " + error,
"GetExpertTasksList");
}
}
oLearningTask.amountUnverifiedTasks = iAmountUnverifiedCurrentTask;
oLearningTask.amountPassedTasks = iAmountPassedCurrentTask;
tasksList.tasks.push(oLearningTask);
} catch (error) {
log("ERROR: " + error,
"GetExpertTasksList");
}
}
tasksList.amountOverdueTasks = iAmountOverdueTasks;
tasksList.amountUnverifiedTasks = iAmountUnverifiedTasks;
return {
success: true,
data: {
tasksList: tasksList
},
error: null
};
} catch (error) {
log("ERROR: " + error,
"GetExpertTasksList");
return {
success: false,
data: null,
error: "Ошибка на стороне сервера"
};
}
}