ЦИТК-957, ЦИТК-953, ЦИТК-939 - Исправление панели "Производственная программа"
Reviewed-on: #34
This commit is contained in:
commit
c6688bd451
@ -48,7 +48,8 @@ const useCostRouteLists = (task, taskType) => {
|
||||
NPAGE_SIZE: DATA_GRID_PAGE_SIZE,
|
||||
NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1
|
||||
},
|
||||
attributeValueProcessor: (name, val) => (["DEXEC_DATE", "DREL_DATE"].includes(name) ? formatDateRF(val) : val),
|
||||
attributeValueProcessor: (name, val) =>
|
||||
["DEXEC_DATE", "DREL_DATE"].includes(name) ? formatDateRF(val) : ["SDOCPREF", "SDOCNUMB"].includes(name) ? undefined : val,
|
||||
respArg: "COUT"
|
||||
});
|
||||
setCostRouteLists(pv => ({
|
||||
|
@ -84,7 +84,26 @@ const STYLES = {
|
||||
TASK_DIALOG_ACTION_CONTAINER: { border: 1, borderColor: "text.primary", borderRadius: "5px", width: "100%" },
|
||||
FILTERS: { display: "table", float: "right" },
|
||||
FILTERS_DATE: { display: "table-cell", verticalAlign: "middle" },
|
||||
FILTERS_LEVEL: { display: "table-cell", verticalAlign: "middle", paddingLeft: "15px" }
|
||||
FILTERS_LEVEL: { display: "table-cell", verticalAlign: "middle", paddingLeft: "15px" },
|
||||
FILTERS_LEVEL_CAPTION: { display: "flex", alignItems: "center" },
|
||||
FILTERS_LEVEL_LIMIT_ICON: { padding: "0px 8px", color: "#9f9c9c" },
|
||||
FILTERS_LIMIT_SELECT: nOutOfLimit => {
|
||||
return nOutOfLimit === 1
|
||||
? {
|
||||
".MuiOutlinedInput-notchedOutline": {
|
||||
borderColor: "#e9863c"
|
||||
},
|
||||
"&:hover .MuiOutlinedInput-notchedOutline": {
|
||||
borderColor: "#e9863c",
|
||||
borderWidth: "0.15rem"
|
||||
},
|
||||
"&.Mui-focused .MuiOutlinedInput-notchedOutline": {
|
||||
borderColor: "#e9863c",
|
||||
borderWidth: "0.15rem"
|
||||
}
|
||||
}
|
||||
: {};
|
||||
}
|
||||
};
|
||||
|
||||
//------------------------------------
|
||||
@ -236,6 +255,7 @@ const MechRecCostProdPlans = () => {
|
||||
selectedPlanCtlg: null,
|
||||
selectedPlanCtlgMaxLevel: null,
|
||||
selectedPlanCtlgLevel: null,
|
||||
selectedPlanCtlgOutOfLimit: 0,
|
||||
selectedPlanCtlgSort: null,
|
||||
selectedPlanCtlgMenuItems: null,
|
||||
gantt: {},
|
||||
@ -258,6 +278,9 @@ const MechRecCostProdPlans = () => {
|
||||
//Подключение к контексту навигации
|
||||
const { getNavigationSearch } = useContext(NavigationCtx);
|
||||
|
||||
//Подключение к контексту сообщений
|
||||
const { showMsgInfo } = useContext(MessagingСtx);
|
||||
|
||||
//Инициализация каталогов планов
|
||||
const initPlanCtlgs = useCallback(async () => {
|
||||
if (!state.init) {
|
||||
@ -280,6 +303,7 @@ const MechRecCostProdPlans = () => {
|
||||
selectedPlanCtlgSpecsLoaded: false,
|
||||
selectedPlanCtlgMaxLevel: null,
|
||||
selectedPlanCtlgLevel: null,
|
||||
selectedPlanCtlgOutOfLimit: 0,
|
||||
selectedPlanCtlgSort: null,
|
||||
selectedPlanCtlgMenuItems: null,
|
||||
gantt: {},
|
||||
@ -297,6 +321,7 @@ const MechRecCostProdPlans = () => {
|
||||
selectedPlanCtlg: null,
|
||||
selectedPlanCtlgMaxLevel: null,
|
||||
selectedPlanCtlgLevel: null,
|
||||
selectedPlanCtlgOutOfLimit: 0,
|
||||
selectedPlanCtlgSort: null,
|
||||
selectedPlanCtlgMenuItems: null,
|
||||
gantt: {},
|
||||
@ -317,6 +342,7 @@ const MechRecCostProdPlans = () => {
|
||||
...pv,
|
||||
selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,
|
||||
selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,
|
||||
selectedPlanCtlgOutOfLimit: data.NOUT_OF_LIMIT,
|
||||
selectedPlanCtlgSort: sort,
|
||||
selectedPlanCtlgMenuItems: state.selectedPlanCtlgMenuItems
|
||||
? state.selectedPlanCtlgMenuItems
|
||||
@ -370,6 +396,17 @@ const MechRecCostProdPlans = () => {
|
||||
setState(pv => ({ ...pv, selectedTaskDetail: taskRn, selectedTaskDetailType: taskType }));
|
||||
};
|
||||
|
||||
//При открытии окна информации об ограничении уровня
|
||||
const handleLevelLimitInfoOpen = () => {
|
||||
//Отображаем информацию
|
||||
showMsgInfo(
|
||||
`Размер производственной программы превышает предельно допустимый для одновременного отображения в виде диаграммы Ганта.
|
||||
Доступные для просмотра уровни вложенности ограничены.
|
||||
Вы можете просматривать производственную программу частями, используя действие "Открытие панели Производственная программа" в спецификации "Выпуск"
|
||||
раздела "Планы и отчеты производства изделий".`
|
||||
);
|
||||
};
|
||||
|
||||
//Генерация содержимого
|
||||
return (
|
||||
<Box>
|
||||
@ -434,8 +471,16 @@ const MechRecCostProdPlans = () => {
|
||||
</Select>
|
||||
</Box>
|
||||
<Box sx={STYLES.FILTERS_LEVEL}>
|
||||
<Box sx={STYLES.FILTERS_LEVEL_CAPTION}>
|
||||
<InputLabel id="select-label-level">До уровня</InputLabel>
|
||||
{state.selectedPlanCtlgOutOfLimit === 1 ? (
|
||||
<IconButton sx={STYLES.FILTERS_LEVEL_LIMIT_ICON} onClick={handleLevelLimitInfoOpen}>
|
||||
<Icon>info</Icon>
|
||||
</IconButton>
|
||||
) : null}
|
||||
</Box>
|
||||
<Select
|
||||
sx={STYLES.FILTERS_LIMIT_SELECT(state.selectedPlanCtlgOutOfLimit)}
|
||||
labelId="select-label-level"
|
||||
id="select-level"
|
||||
value={state.selectedPlanCtlgLevel}
|
||||
|
@ -85,7 +85,8 @@ create or replace package PKG_P8PANELS_MECHREC as
|
||||
NLEVEL in number := null, -- Уровень отбора
|
||||
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
|
||||
COUT out clob, -- Список задач
|
||||
NMAX_LEVEL out number -- Максимальный уровень иерархии
|
||||
NMAX_LEVEL out number, -- Максимальный уровень иерархии
|
||||
NOUT_OF_LIMIT out number -- Признак превышения лимита (0 - нет, 1 - да)
|
||||
);
|
||||
|
||||
/* Инициализация каталогов раздела "Планы и отчеты производства изделий" для панели "Производственная программа" */
|
||||
@ -1403,11 +1404,6 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
NSTORAGE_IN := null;
|
||||
NNOMENCLATURE := null;
|
||||
end;
|
||||
/* Если номенклатура не указана */
|
||||
if ((NNOMENCLATURE is null) or ((NSTORAGE is null) and (NSTORAGE_IN is null))) then
|
||||
/* Не идем дальше */
|
||||
return;
|
||||
end if;
|
||||
/* Инициализируем даты */
|
||||
DDATE := TRUNC(sysdate);
|
||||
/* Читем сортировки */
|
||||
@ -1455,6 +1451,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR,
|
||||
BVISIBLE => true,
|
||||
BORDER => true);
|
||||
/* Если номенклатура или хранилища указаны */
|
||||
if ((NNOMENCLATURE is not null) or ((NSTORAGE is not null) and (NSTORAGE_IN is not null))) then
|
||||
/* Обходим данные */
|
||||
begin
|
||||
/* Добавляем подсказку совместимости */
|
||||
@ -1574,6 +1572,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR);
|
||||
raise;
|
||||
end;
|
||||
end if;
|
||||
/* Сериализуем описание */
|
||||
COUT := PKG_P8PANELS_VISUAL.TDG_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
||||
end GOODSPARTIES_DG_GET;
|
||||
@ -2264,7 +2263,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
NLEVEL in number := null, -- Уровень отбора
|
||||
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
|
||||
COUT out clob, -- Список задач
|
||||
NMAX_LEVEL out number -- Максимальный уровень иерархии
|
||||
NMAX_LEVEL out number, -- Максимальный уровень иерархии
|
||||
NOUT_OF_LIMIT out number -- Признак превышения лимита (0 - нет, 1 - да)
|
||||
)
|
||||
is
|
||||
/* Переменные */
|
||||
@ -2305,15 +2305,20 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
end MAKE_INFO;
|
||||
|
||||
/* Считывание максимального уровня иерархии плана по каталогу */
|
||||
function PRODPLAN_MAX_LEVEL_GET
|
||||
procedure PRODPLAN_MAX_LEVEL_GET
|
||||
(
|
||||
NCRN in number, -- Рег. номер каталога планов
|
||||
NFCPRODPLANSP in number -- Рег. номер позиции спецификации
|
||||
) return number -- Максимальный уровень иерархии
|
||||
NFCPRODPLANSP in number, -- Рег. номер позиции спецификации
|
||||
NMAX_LEVEL out number, -- Максимальный уровень иерархии
|
||||
NOUT_OF_LIMIT out number -- Признак превышения лимита (0 - нет, 1 - да)
|
||||
)
|
||||
is
|
||||
NRESULT PKG_STD.TNUMBER := 1; -- Максимальный уровень иерархии
|
||||
NTOTAL PKG_STD.TNUMBER := 0; -- Сумма документов по проверяемому уровню
|
||||
begin
|
||||
/* Обнуляем признак привышения лимита */
|
||||
NOUT_OF_LIMIT := 0;
|
||||
/* Инициализируем максимальный уровень иерархии */
|
||||
NMAX_LEVEL := 1;
|
||||
/* Цикл по уровням каталога планов */
|
||||
for REC in (select level,
|
||||
count(TMP.RN) COUNT_DOCS
|
||||
@ -2358,14 +2363,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
NTOTAL := NTOTAL + REC.COUNT_DOCS;
|
||||
/* Если сумма документов по текущему уровню превышает максимальное количество задач */
|
||||
if (NTOTAL >= NMAX_TASKS) then
|
||||
/* Устанавливаем признак превышения лимита */
|
||||
NOUT_OF_LIMIT := 1;
|
||||
/* Выходим из цикла */
|
||||
exit;
|
||||
end if;
|
||||
/* Указываем текущий уровень */
|
||||
NRESULT := REC.LEVEL;
|
||||
NMAX_LEVEL := REC.LEVEL;
|
||||
end loop;
|
||||
/* Возвращаем результат */
|
||||
return NRESULT;
|
||||
end PRODPLAN_MAX_LEVEL_GET;
|
||||
|
||||
/* Определение дат спецификации плана */
|
||||
@ -2745,7 +2750,10 @@ create or replace package body PKG_P8PANELS_MECHREC as
|
||||
/* Инициализируем описания цветов */
|
||||
TASK_COLORS_INIT(RG => RG);
|
||||
/* Определяем максимальный уровень иерархии */
|
||||
NMAX_LEVEL := PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN, NFCPRODPLANSP => NFCPRODPLANSP);
|
||||
PRODPLAN_MAX_LEVEL_GET(NCRN => NCRN,
|
||||
NFCPRODPLANSP => NFCPRODPLANSP,
|
||||
NMAX_LEVEL => NMAX_LEVEL,
|
||||
NOUT_OF_LIMIT => NOUT_OF_LIMIT);
|
||||
/* Определяем уровень фильтра */
|
||||
NLEVEL_FILTER := COALESCE(NLEVEL, NMAX_LEVEL);
|
||||
/* Обходим данные */
|
||||
|
Loading…
x
Reference in New Issue
Block a user