ЦИТК-806 - Панель "Производственная программа" - кастомный диалог задачи, мягкие цвета заливки, единицы измерения, динамический заголовок

This commit is contained in:
Mikhail Chechnev 2024-04-03 16:11:04 +03:00
parent 6f55ac14da
commit 069007d6a6
2 changed files with 150 additions and 91 deletions

View File

@ -14,8 +14,12 @@ import {
Fab, Fab,
Box, Box,
List, List,
ListItem,
ListItemButton, ListItemButton,
ListItemText, ListItemText,
ListItemIcon,
Icon,
IconButton,
Typography, Typography,
Grid, Grid,
TextField, TextField,
@ -28,13 +32,17 @@ import {
Button, Button,
Dialog, Dialog,
DialogContent, DialogContent,
DialogActions DialogActions,
Card,
CardHeader,
CardContent,
CardActions
} from "@mui/material"; //Интерфейсные элементы } from "@mui/material"; //Интерфейсные элементы
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером
import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
import { P8PGantt } from "../../components/p8p_gantt"; //Диаграмма Ганта import { P8PGantt, taskLegendDesc } from "../../components/p8p_gantt"; //Диаграмма Ганта
import { xml2JSON, formatDateJSONDateOnly } from "../../core/utils"; //Вспомогательные функции import { xml2JSON, formatDateJSONDateOnly, formatDateRF } from "../../core/utils"; //Вспомогательные функции
import { useFilteredPlanCtlgs } from "./hooks"; //Вспомогательные хуки import { useFilteredPlanCtlgs } from "./hooks"; //Вспомогательные хуки
import { CostRouteListsDataGrid } from "./datagrids/fcroutlst"; import { CostRouteListsDataGrid } from "./datagrids/fcroutlst";
import { IncomFromDepsDataGrid } from "./datagrids/incomefromdeps"; import { IncomFromDepsDataGrid } from "./datagrids/incomefromdeps";
@ -72,7 +80,11 @@ const STYLES = {
}, },
GANTT_CONTAINER: { height: GANTT_HEIGHT, width: GANTT_WIDTH }, GANTT_CONTAINER: { height: GANTT_HEIGHT, width: GANTT_WIDTH },
GANTT_TITLE: { paddingLeft: "100px", paddingRight: "120px" }, GANTT_TITLE: { paddingLeft: "100px", paddingRight: "120px" },
SECOND_TABLE: { paddingTop: "30px" } SECOND_TABLE: { paddingTop: "30px" },
TASK_DIALOG_CARD_CONTAINER: { padding: "0px" },
TASK_DIALOG_LIST_ITEM_ICON: { justifyContent: "center" },
TASK_DIALOG_ICON: { fontSize: "2rem" },
TASK_DIALOG_ACTION_CONTAINER: { border: 1, borderColor: "text.primary", borderRadius: "5px", width: "100%" }
}; };
//------------------------------------ //------------------------------------
@ -83,7 +95,8 @@ const STYLES = {
const parseProdPlanSpXML = async xmlDoc => { const parseProdPlanSpXML = async xmlDoc => {
const data = await xml2JSON({ const data = await xml2JSON({
xmlDoc, xmlDoc,
attributeValueProcessor: (name, val) => (name == "numb" ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val) attributeValueProcessor: (name, val) =>
["numb", "title"].includes(name) ? undefined : ["start", "end"].includes(name) ? formatDateJSONDateOnly(val) : val
}); });
return data.XDATA; return data.XDATA;
}; };
@ -93,17 +106,11 @@ const formatCountDocs = nCountDocs => {
//Получаем последнюю цифру в значении //Получаем последнюю цифру в значении
let num = (nCountDocs % 100) % 10; let num = (nCountDocs % 100) % 10;
//Документов //Документов
if (nCountDocs > 10 && nCountDocs < 20) { if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;
return `${nCountDocs} ${DECLINATIONS[2]}`;
}
//Документа //Документа
if (num > 1 && num < 5) { if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;
return `${nCountDocs} ${DECLINATIONS[1]}`;
}
//Документ //Документ
if (num == 1) { if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;
return `${nCountDocs} ${DECLINATIONS[0]}`;
}
//Документов //Документов
return `${nCountDocs} ${DECLINATIONS[2]}`; return `${nCountDocs} ${DECLINATIONS[2]}`;
}; };
@ -126,14 +133,7 @@ const PlanCtlgsList = ({ planCtlgs = [], selectedPlanCtlg, filter, setFilter, on
></TextField> ></TextField>
<FormGroup sx={STYLES.PLANS_CHECKBOX_HAVEDOCS}> <FormGroup sx={STYLES.PLANS_CHECKBOX_HAVEDOCS}>
<FormControlLabel <FormControlLabel
control={ control={<Checkbox checked={filter.haveDocs} onChange={event => setFilter(pv => ({ ...pv, haveDocs: event.target.checked }))} />}
<Checkbox
checked={filter.haveDocs}
onChange={event => {
setFilter(pv => ({ ...pv, haveDocs: event.target.checked }));
}}
/>
}
label="Только с планами" label="Только с планами"
labelPlacement="end" labelPlacement="end"
/> />
@ -148,15 +148,7 @@ const PlanCtlgsList = ({ planCtlgs = [], selectedPlanCtlg, filter, setFilter, on
> >
<ListItemText <ListItemText
primary={<Typography sx={STYLES.PLANS_LIST_ITEM_PRIMARY}>{p.SNAME}</Typography>} primary={<Typography sx={STYLES.PLANS_LIST_ITEM_PRIMARY}>{p.SNAME}</Typography>}
secondary={ secondary={<Typography sx={{ ...STYLES.PLANS_LIST_ITEM_SECONDARY }}>{formatCountDocs(p.NCOUNT_DOCS)}</Typography>}
<Typography
sx={{
...STYLES.PLANS_LIST_ITEM_SECONDARY
}}
>
{formatCountDocs(p.NCOUNT_DOCS)}
</Typography>
}
/> />
</ListItemButton> </ListItemButton>
))} ))}
@ -174,6 +166,58 @@ PlanCtlgsList.propTypes = {
setFilter: PropTypes.func setFilter: PropTypes.func
}; };
//Генерация диалога задачи
const taskDialogRenderer = ({ task, taskColors, close, handleTaskDetailOpen }) => {
//Стиль и описание для легенды
const legendDesc = taskLegendDesc({ task, taskColors });
//Элемент карточки задачи
const cardItem = ({ listItemsStyle = {}, icon, primaryText = null, secondaryText = null }) => (
<ListItem disablePadding sx={listItemsStyle}>
<ListItemButton>
<ListItemIcon sx={STYLES.TASK_DIALOG_LIST_ITEM_ICON}>
<Icon sx={STYLES.TASK_DIALOG_ICON}>{icon}</Icon>
</ListItemIcon>
<ListItemText primary={primaryText} secondary={secondaryText} />
</ListItemButton>
</ListItem>
);
//Собираем содержимое диалога
return (
<Card>
<CardHeader
title={task.name}
titleTypographyProps={{ variant: "h6" }}
subheader={`${formatDateRF(task.start)} - ${formatDateRF(task.end)}`}
action={
<IconButton aria-label="Закрыть" onClick={close}>
<Icon>close</Icon>
</IconButton>
}
/>
<CardContent sx={STYLES.TASK_DIALOG_CARD_CONTAINER}>
<List>
{cardItem({ icon: "fast_forward", primaryText: `${task.start_fact} ${task.meas}`, secondaryText: "Запущено" })}
{cardItem({ icon: "assessment", primaryText: `${task.main_quant} ${task.meas}`, secondaryText: "Количество план" })}
{cardItem({ icon: "verified", primaryText: `${task.rel_fact} ${task.meas}`, secondaryText: "Количество сдано" })}
{cardItem({ icon: "date_range", primaryText: task.rep_date_to, secondaryText: "Дата выпуска план" })}
{legendDesc ? cardItem({ listItemsStyle: legendDesc.style, icon: "palette", secondaryText: legendDesc.text }) : null}
</List>
</CardContent>
<CardActions disableSpacing>
<Box p={2} display="flex" justifyContent="center" sx={STYLES.TASK_DIALOG_ACTION_CONTAINER}>
{task.type ? (
<Button size="large" variant="contained" color="primary" onClick={() => handleTaskDetailOpen(task.rn, task.type)}>
{task["detail_list"]}
</Button>
) : (
<Typography color="textSecondary">{`Анализ отклонений недоступен: ${task["detail_list"]}`}</Typography>
)}
</Box>
</CardActions>
</Card>
);
};
//----------- //-----------
//Тело модуля //Тело модуля
//----------- //-----------
@ -322,24 +366,6 @@ const MechRecCostProdPlans = () => {
setState(pv => ({ ...pv, selectedTaskDetail: taskRn, selectedTaskDetailType: taskType })); setState(pv => ({ ...pv, selectedTaskDetail: taskRn, selectedTaskDetailType: taskType }));
}; };
//Генерация ссылки на документы анализа отклонений
const taskAttributeRenderer = ({ task, attribute }) => {
// Если есть информация о детализации и указан тип - делаем кнопку открытия документов
if (attribute.name === "detail_list" && task.type !== null && task.type !== "") {
return (
<Button
onClick={() => {
handleTaskDetailOpen(task.rn, task.type);
}}
>
{task[attribute.name]}
</Button>
);
} else {
return null;
}
};
//Генерация содержимого //Генерация содержимого
return ( return (
<Box p={2}> <Box p={2}>
@ -417,7 +443,7 @@ const MechRecCostProdPlans = () => {
height={GANTT_HEIGHT} height={GANTT_HEIGHT}
titleStyle={STYLES.GANTT_TITLE} titleStyle={STYLES.GANTT_TITLE}
tasks={state.selectedPlanCtlgSpecs} tasks={state.selectedPlanCtlgSpecs}
taskAttributeRenderer={taskAttributeRenderer} taskDialogRenderer={prms => taskDialogRenderer({ ...prms, handleTaskDetailOpen })}
/> />
</Box> </Box>
) )

View File

@ -52,7 +52,7 @@ create or replace package PKG_P8PANELS_MECHREC as
NCRN in number, -- Рег. номер каталога NCRN in number, -- Рег. номер каталога
NLEVEL in number := null, -- Уровень отбора NLEVEL in number := null, -- Уровень отбора
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
COUT out clob, -- Список проектов COUT out clob, -- Список задач
NMAX_LEVEL out number -- Максимальный уровень иерархии NMAX_LEVEL out number -- Максимальный уровень иерархии
); );
@ -67,12 +67,13 @@ end PKG_P8PANELS_MECHREC;
create or replace package body PKG_P8PANELS_MECHREC as create or replace package body PKG_P8PANELS_MECHREC as
/* Константы - цвета отображения */ /* Константы - цвета отображения */
SBG_COLOR_RED constant PKG_STD.TSTRING := 'red'; -- Цвет заливки красный (Дефицит запуска != 0 или нет связей и дата запуска меньше текущей) SBG_COLOR_RED constant PKG_STD.TSTRING := '#ff000080'; -- Цвет заливки красный
SBG_COLOR_YELLOW constant PKG_STD.TSTRING := '#e0db44'; -- Цвет заливки желтый (Дефицит» запуска = 0 и Выпуск факт = 0) SBG_COLOR_YELLOW constant PKG_STD.TSTRING := '#e0db4480'; -- Цвет заливки желтый
SBG_COLOR_GREEN constant PKG_STD.TSTRING := 'lightgreen'; -- Цвет заливки зеленый (Дефицит выпуска = 0) SBG_COLOR_GREEN constant PKG_STD.TSTRING := '#90ee9080'; -- Цвет заливки зеленый
SBG_COLOR_GREY constant PKG_STD.TSTRING := 'lightgrey'; -- Цвет заливки серый (Дата запуска больше текущей) SBG_COLOR_GREY constant PKG_STD.TSTRING := '#d3d3d380'; -- Цвет заливки серый
SBG_COLOR_BLACK constant PKG_STD.TSTRING := 'black'; -- Цвет заливки черный (Нет дат и связей) SBG_COLOR_BLACK constant PKG_STD.TSTRING := '#00000080'; -- Цвет заливки черный
STEXT_COLOR_ORANGE constant PKG_STD.TSTRING := '#FF8C00'; -- Цвет текста для черной заливки (оранжевый) STEXT_COLOR_ORANGE constant PKG_STD.TSTRING := '#FF8C00'; -- Цвет текста оранжевый
STEXT_COLOR_GREY constant PKG_STD.TSTRING := '#555'; -- Цвет текста серый
/* Константы - параметры отборов планов */ /* Константы - параметры отборов планов */
NFCPRODPLAN_CATEGORY constant PKG_STD.TNUMBER := 1; -- Категория планов "Производственная программа" NFCPRODPLAN_CATEGORY constant PKG_STD.TNUMBER := 1; -- Категория планов "Производственная программа"
@ -86,6 +87,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
STASK_ATTR_REP_DATE_TO constant PKG_STD.TSTRING := 'rep_date_to'; -- Дата выпуска план STASK_ATTR_REP_DATE_TO constant PKG_STD.TSTRING := 'rep_date_to'; -- Дата выпуска план
STASK_ATTR_DL constant PKG_STD.TSTRING := 'detail_list'; -- Связанные документы STASK_ATTR_DL constant PKG_STD.TSTRING := 'detail_list'; -- Связанные документы
STASK_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Тип (0 - Деталь, 1 - Изделие/сборочная единица) STASK_ATTR_TYPE constant PKG_STD.TSTRING := 'type'; -- Тип (0 - Деталь, 1 - Изделие/сборочная единица)
STASK_ATTR_MEAS constant PKG_STD.TSTRING := 'meas'; -- Единица измнения
/* Инциализация списка маршрутных листов (с иерархией) */ /* Инциализация списка маршрутных листов (с иерархией) */
procedure UTL_FCROUTLST_IDENT_INIT procedure UTL_FCROUTLST_IDENT_INIT
@ -1505,6 +1507,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
NMAIN_QUANT in number, -- Выпуск NMAIN_QUANT in number, -- Выпуск
STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации STASK_BG_COLOR out varchar2, -- Цвет заливки спецификации
STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет заливки прогресса спецификации
STASK_TEXT_COLOR in out varchar2, -- Цвет текста
NTASK_PROGRESS out number -- Прогресс спецификации NTASK_PROGRESS out number -- Прогресс спецификации
) )
is is
@ -1515,6 +1518,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
if (NDEFSTART = 0) then if (NDEFSTART = 0) then
/* Полностью зеленый */ /* Полностью зеленый */
STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_BG_COLOR := SBG_COLOR_GREEN;
STASK_TEXT_COLOR := STEXT_COLOR_GREY;
STASK_BG_PROGRESS_COLOR := null; STASK_BG_PROGRESS_COLOR := null;
NTASK_PROGRESS := null; NTASK_PROGRESS := null;
else else
@ -1528,6 +1532,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
if (NDEFSTART = 0) then if (NDEFSTART = 0) then
/* Полностью зеленый */ /* Полностью зеленый */
STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_BG_COLOR := SBG_COLOR_GREEN;
STASK_TEXT_COLOR := STEXT_COLOR_GREY;
STASK_BG_PROGRESS_COLOR := null; STASK_BG_PROGRESS_COLOR := null;
NTASK_PROGRESS := null; NTASK_PROGRESS := null;
else else
@ -1543,6 +1548,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
/* Частично зелёный, прогресс жёлтый */ /* Частично зелёный, прогресс жёлтый */
STASK_BG_COLOR := SBG_COLOR_GREEN; STASK_BG_COLOR := SBG_COLOR_GREEN;
STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW; STASK_BG_PROGRESS_COLOR := SBG_COLOR_YELLOW;
STASK_TEXT_COLOR := STEXT_COLOR_GREY;
NTASK_PROGRESS := ROUND(NREL_FACT / NMAIN_QUANT * 100); NTASK_PROGRESS := ROUND(NREL_FACT / NMAIN_QUANT * 100);
end if; end if;
end if; end if;
@ -1608,15 +1614,17 @@ create or replace package body PKG_P8PANELS_MECHREC as
NHAVE_LINK in number := 0, -- Наличие связей с "Маршрутный лист" или "Приход из подразделения" NHAVE_LINK in number := 0, -- Наличие связей с "Маршрутный лист" или "Приход из подразделения"
DDATE_FROM out date, -- Итоговая дата запуска спецификации DDATE_FROM out date, -- Итоговая дата запуска спецификации
DDATE_TO out date, -- Итоговая дата выпуска спецификации DDATE_TO out date, -- Итоговая дата выпуска спецификации
STASK_BG_COLOR out varchar2, -- Цвет элемента (черный, если даты не заданы и нет связи, иначе null) STASK_BG_COLOR out varchar2, -- Цвет элемента
STASK_TEXT_COLOR out varchar2, -- Цвет текста элемента (хаки, если даты не заданы и нет связи, иначе null) STASK_BG_PROGRESS_COLOR out varchar2, -- Цвет прогресса элемента
NTASK_PROGRESS out number -- Прогресс элемента (проинициализирует null, если даты не заданы и нет связи) STASK_TEXT_COLOR out varchar2, -- Цвет текста элемента
NTASK_PROGRESS out number -- Прогресс элемента
) )
is is
begin begin
/* Проициниализируем цвет и прогресс */ /* Проициниализируем цвет и прогресс */
STASK_BG_COLOR := null; STASK_BG_COLOR := null;
STASK_TEXT_COLOR := null; STASK_TEXT_COLOR := null;
STASK_BG_PROGRESS_COLOR := null;
NTASK_PROGRESS := null; NTASK_PROGRESS := null;
/* Если даты запуска и выпуска пусты */ /* Если даты запуска и выпуска пусты */
if ((DREP_DATE is null) and (DREP_DATE_TO is null)) then if ((DREP_DATE is null) and (DREP_DATE_TO is null)) then
@ -1663,7 +1671,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
NCRN in number, -- Рег. номер каталога NCRN in number, -- Рег. номер каталога
NLEVEL in number := null, -- Уровень отбора NLEVEL in number := null, -- Уровень отбора
SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки SSORT_FIELD in varchar2 := 'DREP_DATE_TO', -- Поле сортировки
COUT out clob, -- Список проектов COUT out clob, -- Список задач
NMAX_LEVEL out number -- Максимальный уровень иерархии NMAX_LEVEL out number -- Максимальный уровень иерархии
) )
is is
@ -1680,6 +1688,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте STASK_CAPTION PKG_STD.TSTRING; -- Описание задачи в Ганте
NTYPE PKG_STD.TNUMBER; -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска") NTYPE PKG_STD.TNUMBER; -- Тип задачи (0/1 - для "Дата выпуска", 2/3/4 - для "Дата выпуска")
SDETAIL_LIST PKG_STD.TSTRING; -- Ссылки на детализацию SDETAIL_LIST PKG_STD.TSTRING; -- Ссылки на детализацию
SPLAN_TITLE PKG_STD.TSTRING; -- Заголовок плана
NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса
/* Объединение значений в строковое представление */ /* Объединение значений в строковое представление */
@ -1725,6 +1734,9 @@ create or replace package body PKG_P8PANELS_MECHREC as
SNAME => STASK_ATTR_DL, SNAME => STASK_ATTR_DL,
SCAPTION => 'Анализ отклонений'); SCAPTION => 'Анализ отклонений');
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, SNAME => STASK_ATTR_TYPE, SCAPTION => 'Тип'); PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG, SNAME => STASK_ATTR_TYPE, SCAPTION => 'Тип');
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_ATTR(RGANTT => RG,
SNAME => STASK_ATTR_MEAS,
SCAPTION => 'Единица измерения');
end TASK_ATTRS_INIT; end TASK_ATTRS_INIT;
/* Инициализация цветов */ /* Инициализация цветов */
@ -1744,10 +1756,12 @@ create or replace package body PKG_P8PANELS_MECHREC as
SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» = 0.'); SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» = 0.');
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG,
SBG_COLOR => SBG_COLOR_GREEN, SBG_COLOR => SBG_COLOR_GREEN,
STEXT_COLOR => STEXT_COLOR_GREY,
SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит выпуска» = 0.'); SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит выпуска» = 0.');
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG,
SBG_COLOR => SBG_COLOR_GREEN, SBG_COLOR => SBG_COLOR_GREEN,
SBG_PROGRESS_COLOR => SBG_COLOR_YELLOW, SBG_PROGRESS_COLOR => SBG_COLOR_YELLOW,
STEXT_COLOR => STEXT_COLOR_GREY,
SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» != 0. '); SDESC => 'Для спецификаций планов и отчетов производства изделий с «Дефицит запуска» = 0 и «Выпуск факт» != 0. ');
PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG, PKG_P8PANELS_VISUAL.TGANTT_ADD_TASK_COLOR(RGANTT => RG,
SBG_COLOR => SBG_COLOR_BLACK, SBG_COLOR => SBG_COLOR_BLACK,
@ -1768,7 +1782,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
NREL_FACT in number, -- Выпуск факт NREL_FACT in number, -- Выпуск факт
DREP_DATE_TO in date, -- Дата выпуска DREP_DATE_TO in date, -- Дата выпуска
NTYPE in number, -- Тип (0 - Деталь, 1 - Изделие/сборочная единица) NTYPE in number, -- Тип (0 - Деталь, 1 - Изделие/сборочная единица)
SDETAIL_LIST in varchar2 -- Ссылки на детализацию SDETAIL_LIST in varchar2, -- Ссылки на детализацию
SMEAS in varchar2 -- Единица измерения
) )
is is
begin begin
@ -1798,6 +1813,10 @@ create or replace package body PKG_P8PANELS_MECHREC as
RTASK => RGT, RTASK => RGT,
SNAME => STASK_ATTR_DL, SNAME => STASK_ATTR_DL,
SVALUE => SDETAIL_LIST); SVALUE => SDETAIL_LIST);
PKG_P8PANELS_VISUAL.TGANTT_TASK_ADD_ATTR_VAL(RGANTT => RG,
RTASK => RGT,
SNAME => STASK_ATTR_MEAS,
SVALUE => SMEAS);
end FILL_TASK_ATTRS; end FILL_TASK_ATTRS;
/* Получение типа задачи */ /* Получение типа задачи */
@ -1814,7 +1833,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
) )
is is
begin begin
/* Описание типов: /*
Описание типов:
0 - Маршрутные листы с развертыванием товарных запасов 0 - Маршрутные листы с развертыванием товарных запасов
1 - Маршрутные листы с развертыванием комплектаций 1 - Маршрутные листы с развертыванием комплектаций
2 - Приход из подразделений 2 - Приход из подразделений
@ -1904,8 +1924,15 @@ create or replace package body PKG_P8PANELS_MECHREC as
end if; end if;
end GET_TASK_TYPE; end GET_TASK_TYPE;
begin begin
/* Определяем заголовок плана */
FIND_ACATALOG_RN(NFLAG_SMART => 0,
NCOMPANY => NCOMPANY,
NVERSION => null,
SUNITCODE => 'CostProductPlans',
NRN => NCRN,
SNAME => SPLAN_TITLE);
/* Инициализируем диаграмму Ганта */ /* Инициализируем диаграмму Ганта */
RG := PKG_P8PANELS_VISUAL.TGANTT_MAKE(STITLE => 'Производственная программа', RG := PKG_P8PANELS_VISUAL.TGANTT_MAKE(STITLE => SPLAN_TITLE,
NZOOM => PKG_P8PANELS_VISUAL.NGANTT_ZOOM_DAY, NZOOM => PKG_P8PANELS_VISUAL.NGANTT_ZOOM_DAY,
BREAD_ONLY_DATES => BREAD_ONLY_DATES, BREAD_ONLY_DATES => BREAD_ONLY_DATES,
BREAD_ONLY_PROGRESS => true); BREAD_ONLY_PROGRESS => true);
@ -1947,12 +1974,14 @@ create or replace package body PKG_P8PANELS_MECHREC as
T.REP_DATE_TO T.REP_DATE_TO
else else
T.REP_DATE T.REP_DATE
end DORDER_DATE end DORDER_DATE,
DM.MEAS_MNEMO SMEAS
from FCPRODPLAN P, from FCPRODPLAN P,
FINSTATE FS, FINSTATE FS,
FCPRODPLANSP T, FCPRODPLANSP T,
FCMATRESOURCE FM, FCMATRESOURCE FM,
DICNOMNS D DICNOMNS D,
DICMUNTS DM
where P.CRN = NCRN where P.CRN = NCRN
and P.CATEGORY = NFCPRODPLAN_CATEGORY and P.CATEGORY = NFCPRODPLAN_CATEGORY
and P.STATUS = NFCPRODPLAN_STATUS and P.STATUS = NFCPRODPLAN_STATUS
@ -1979,7 +2008,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
and T.MAIN_QUANT > 0 and T.MAIN_QUANT > 0
and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null)) and ((T.REP_DATE is not null) or (T.REP_DATE_TO is not null) or (T.INCL_DATE is not null))
and FM.RN = T.MATRES and FM.RN = T.MATRES
and D.RN = FM.NOMENCLATURE) TMP and D.RN = FM.NOMENCLATURE
and D.UMEAS_MAIN = DM.RN) TMP
where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL))) where ((NLEVEL is null) or ((NLEVEL is not null) and (level <= NLEVEL)))
connect by prior TMP.NRN = TMP.NUP_LEVEL connect by prior TMP.NRN = TMP.NUP_LEVEL
start with TMP.NUP_LEVEL is null start with TMP.NUP_LEVEL is null
@ -1998,6 +2028,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
DDATE_FROM => DDATE_FROM, DDATE_FROM => DDATE_FROM,
DDATE_TO => DDATE_TO, DDATE_TO => DDATE_TO,
STASK_BG_COLOR => STASK_BG_COLOR, STASK_BG_COLOR => STASK_BG_COLOR,
STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
STASK_TEXT_COLOR => STASK_TEXT_COLOR, STASK_TEXT_COLOR => STASK_TEXT_COLOR,
NTASK_PROGRESS => NTASK_PROGRESS); NTASK_PROGRESS => NTASK_PROGRESS);
/* Если цвет изначально не указан и требуется анализирование */ /* Если цвет изначально не указан и требуется анализирование */
@ -2009,6 +2040,7 @@ create or replace package body PKG_P8PANELS_MECHREC as
NMAIN_QUANT => C.NMAIN_QUANT, NMAIN_QUANT => C.NMAIN_QUANT,
STASK_BG_COLOR => STASK_BG_COLOR, STASK_BG_COLOR => STASK_BG_COLOR,
STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR, STASK_BG_PROGRESS_COLOR => STASK_BG_PROGRESS_COLOR,
STASK_TEXT_COLOR => STASK_TEXT_COLOR,
NTASK_PROGRESS => NTASK_PROGRESS); NTASK_PROGRESS => NTASK_PROGRESS);
end if; end if;
/* Сформируем основную спецификацию */ /* Сформируем основную спецификацию */
@ -2042,7 +2074,8 @@ create or replace package body PKG_P8PANELS_MECHREC as
NREL_FACT => C.NREL_FACT, NREL_FACT => C.NREL_FACT,
DREP_DATE_TO => C.DREP_DATE_TO, DREP_DATE_TO => C.DREP_DATE_TO,
NTYPE => NTYPE, NTYPE => NTYPE,
SDETAIL_LIST => SDETAIL_LIST); SDETAIL_LIST => SDETAIL_LIST,
SMEAS => C.SMEAS);
/* Собираем зависимости */ /* Собираем зависимости */
for LINK in (select T.RN for LINK in (select T.RN
from FCPRODPLANSP T from FCPRODPLANSP T