forked from CITKParus/P8-Panels
ЦИТК-806 - Панель "Производственная программа" - кастомный диалог задачи, мягкие цвета заливки, единицы измерения, динамический заголовок
This commit is contained in:
parent
6f55ac14da
commit
069007d6a6
@ -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>
|
||||||
)
|
)
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user