/*
Парус 8 - Панели мониторинга - ПУП - Экономика проектов
Дополнительная разметка и вёрстка клиентских элементов
*/
//---------------------
//Подключение библиотек
//---------------------
import React from "react"; //Классы React
import { Icon, Stack, Link } from "@mui/material"; //Интерфейсные компоненты
import { formatDateRF } from "../../core/utils"; //Вспомогательные функции
//-----------
//Тело модуля
//-----------
//Формирование значения для колонки "Состояние" этапа
const formatStageStatusValue = value => {
const [text, icon] =
value == 0
? ["Зарегистрирован", "app_registration"]
: value == 1
? ["Открыт", "lock_open"]
: value == 2
? ["Закрыт", "lock_outline"]
: value == 3
? ["Согласован", "thumb_up_alt"]
: value == 4
? ["Исполнение прекращено", "block"]
: ["Остановлен", "do_not_disturb_on"];
return (
{icon}
{text}
);
};
//Формирование значения для колонки "Состояние" работы
const formatJobStatusValue = (value, addText = false, justifyContent = null) => {
const [text, icon] =
value == 0
? ["Не начата", "not_started"]
: value == 1
? ["Выполняется", "loop"]
: value == 2
? ["Выполнена", "task_alt"]
: value == 3
? ["Остановлена", "do_not_disturb_on"]
: ["Отменена", "cancel"];
return (
{icon}
{addText == true ? text : null}
);
};
//Генерация кастомных представлений атрибутов задачи в редакторе
export const taskAttributeRenderer = ({ task, attribute }) => {
switch (attribute.name) {
case "type":
return task.type === 1 ? "Этап проекта" : "Работа проекта";
case "state":
return task.type === 1 ? formatStageStatusValue(task[attribute.name]) : formatJobStatusValue(task[attribute.name], true);
default:
return null;
}
};
//Форматирование значений колонок в таблице детализации трудоёмкости по графику
export const planJobsDtlValueFormatter = ({ value, columnDef }) => {
switch (columnDef.name) {
case "NJOB_STATE":
return formatJobStatusValue(value, false, "center");
case "DJOB_BEG":
case "DJOB_END":
return formatDateRF(value);
}
return value;
};
//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по графику
export const planJobsDtlHeadCellRender = ({ columnDef }) => {
switch (columnDef.name) {
case "NJOB_STATE":
return {
stackProps: { justifyContent: "center" },
cellProps: { align: "center" }
};
}
};
//Генерация представления ячейки c данными в таблице детализации трудоёмкости по графику
export const planJobsDtlDataCellRender = ({ row, columnDef, onProjectClick }) => {
switch (columnDef.name) {
case "SPRJ":
return {
data: row[columnDef.name] ? (
(onProjectClick ? onProjectClick({ sender: row }) : null)}
>
{row[columnDef.name]}
) : (
row[columnDef.name]
)
};
}
};
//Форматирование значений колонок в таблице детализации трудоёмкости по отчетам
export const factRptDtlValueFormatter = ({ value, columnDef }) => {
switch (columnDef.name) {
case "NJOB_STATE":
return formatJobStatusValue(value, false, "center");
case "DJOB_BEG":
case "DJOB_END":
return formatDateRF(value);
}
return value;
};
//Генерация представления ячейки заголовка в таблице детализации трудоёмкости по отчетам
export const factRptDtlHeadCellRender = ({ columnDef }) => {
switch (columnDef.name) {
case "NJOB_STATE":
return {
stackProps: { justifyContent: "center" },
cellProps: { align: "center" }
};
}
};
//Генерация представления ячейки c данными в таблице периодов балансировки
export const periodsDataCellRender = ({ row, columnDef, onLabPlanFOTClick, onLabFactRptClick, onLabPlanJobsClick }) => {
switch (columnDef.name) {
case "NLAB_PLAN_FOT":
case "NLAB_FACT_RPT":
case "NLAB_PLAN_JOBS":
return {
data: row[columnDef.name] ? (
columnDef.name === "NLAB_PLAN_FOT"
? onLabPlanFOTClick
? onLabPlanFOTClick({ sender: row })
: null
: columnDef.name === "NLAB_FACT_RPT"
? onLabFactRptClick
? onLabFactRptClick({ sender: row })
: null
: columnDef.name === "NLAB_PLAN_JOBS"
? onLabPlanJobsClick
? onLabPlanJobsClick({ sender: row })
: null
: null
}
>
{row[columnDef.name]}
) : (
row[columnDef.name]
)
};
case "NLAB_DIFF_RPT_FOT":
return { data:
{row[columnDef.name]}
};
case "NLAB_DIFF_JOBS_FOT":
return {
data: (
{row[columnDef.name]}
{row[columnDef.name] <= 0 ? "done" : "error"}
)
};
}
};