diff --git a/README.md b/README.md index 2163ed8..c076574 100644 --- a/README.md +++ b/README.md @@ -647,8 +647,8 @@ const MyPanel = () => { В состав API входят: - `pOnlineShowTab` - функция, отображение типовой закладки "ПАРУС 8 Онлайн" -- `pOnlineShowUnit` - функция, отображение раздела "ПАРУС 8 Онлайн" в модальном режиме -- `pOnlineShowDocument` - функция, отображение раздела "ПАРУС 8 Онлайн" в модальном режиме с позиционированием/отбором по документу +- `pOnlineShowUnit` - функция, отображение раздела "ПАРУС 8 Онлайн" в модальном режиме или на закладке +- `pOnlineShowDocument` - функция, отображение раздела "ПАРУС 8 Онлайн" в модальном режиме (или на закладке) с позиционированием/отбором по документу - `pOnlineShowDictionary` - функция, отображение раздела "ПАРУС 8 Онлайн" в режиме словаря - `pOnlineUserProcedure` - функция, исполнение "Пользовательской процедуры" - `pOnlineUserReport` - функция, печать "Пользовательского отчёта" @@ -684,13 +684,15 @@ const MyPanel = () => { { unitCode, showMethod = "main", - inputParameters + inputParameters, + modal = true } ``` `unitCode` - обязательный, строка, код раздела Системы\ `showMethod` - необязательный, строка, метод вызова раздела Системы (если не указан - будет использован метод вызова "main")\ -`inputParameters` - необязательный, массив объектов вида `[{name: ИМЯ_ПАРАМЕТРА, value: ЗНАЧЕНИЕ_ПАРАМЕТРА},...]`, параметры метода вызова раздела Системы +`inputParameters` - необязательный, массив объектов вида `[{name: ИМЯ_ПАРАМЕТРА, value: ЗНАЧЕНИЕ_ПАРАМЕТРА},...]`, параметры метода вызова раздела Системы\ +`modal` - необязательный, логический, true (по умолчанию) - открыть в модальном окне, false - открыть в закладке (если закладка ранее была открыта с таким же набором параметров - она будет активирована), поддерживается для "ПАРУС 8 Онлайн" с версии 26.12.2024 **Результат:** функция не возвращает значимого результата @@ -705,14 +707,16 @@ const MyPanel = () => { unitCode, document, showMethod = "main", - inRnParameter = "in_RN" + inRnParameter = "in_RN", + modal = true } ``` `unitCode` - обязательный, строка, код раздела Системы\ `document` - обязательный, число, регистрационный номер документа или иной его идентификатор `showMethod` - необязательный, строка, метод вызова раздела Системы (если не указан - будет использован метод вызова "main")\ -`inRnParameter` - необязательный, строка, имя параметра метода вызова для позиционирования/отбора (если не указан, будет применён параметр метода вызова с именем "in_RN") +`inRnParameter` - необязательный, строка, имя параметра метода вызова для позиционирования/отбора (если не указан, будет применён параметр метода вызова с именем "in_RN")\ +`modal` - необязательный, логический, true (по умолчанию) - открыть в модальном окне, false - открыть в закладке (если закладка ранее была открыта с таким же набором параметров - она будет активирована), поддерживается для "ПАРУС 8 Онлайн" с версии 26.12.2024 **Результат:** функция не возвращает значимого результата @@ -1351,7 +1355,7 @@ const MyPanel = () => { `PKG_P8PANELS_VISUAL.TDG_TO_XML` - функция, производит сериализацию объекта, описывающего таблицу данных, в специальный XML-формат, корректно интерпретируемый клиентским компонентом `P8PDataGrid` при передаче в WEB-приложение\ `PKG_P8PANELS_VISUAL.TDG_ORDERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния сортировок в коллекцию формата `TORDERS`, на вход принимает `CLOB` с сериализованным состоянием сортировок таблицы в виде `BASE64(ИМЯASC|DESC...)` (клиентское приложение должно обеспечить передачу состояния сортировок в этом формате, см. пример ниже)\ `PKG_P8PANELS_VISUAL.TDG_ORDERS_SET_QUERY` - процедура, вспомогательная утилита, производит в тексте SQL-запроса, поданного на вход, замену указанного шаблона на конструкцию `order by`, сформированную с учётом переданной коллекции `RORDERS`\ -`PKG_P8PANELS_VISUAL.TDG_FILTERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния фильтров в коллекцию формата `TFILTERS`, на вход принимает `CLOB` с сериализованным состоянием фильтров таблицы в виде `BASE64(ИМЯЗНАЧЕНИЕЗНАЧЕНИЕ...)` (клиентское приложение должно обеспечить передачу состояния фильтров в этом формате, см. пример ниже)\ +`PKG_P8PANELS_VISUAL.TDG_FILTERS_FROM_XML` - функция, служит для десериализации (как правило, полученного от клиентского приложения) состояния фильтров в коллекцию формата `TDG_FILTERS`, на вход принимает `CLOB` с сериализованным состоянием фильтров таблицы в виде `BASE64(ИМЯЗНАЧЕНИЕЗНАЧЕНИЕ...)` (клиентское приложение должно обеспечить передачу состояния фильтров в этом формате, см. пример ниже)\ `PKG_P8PANELS_VISUAL.TDG_FILTERS_SET_QUERY` - процедура, вспомогательная утилита, производит вызов указанной серверной процедуры отбора с учётом переданных переменных окружения и значений в `RFILTERS`\ `PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC` - процедура, вспомогательная утилита, служит для конвертации номера страницы данных и размера страницы данных в границы диапазона строк выборки (как правило, клиентскому приложению удобнее прислать на сервер текущий номер страницы и её размер, в то время к в запросах, для выборки, удобнее применять границы диапазонов строк) diff --git a/app.text.js b/app.text.js index 131baf9..f6e8b7c 100644 --- a/app.text.js +++ b/app.text.js @@ -53,6 +53,7 @@ export const CAPTIONS = { export const ERRORS = { UNDER_CONSTRUCTION: "Панель в разработке", P8O_API_UNAVAILABLE: '"ПАРУС 8 Онлайн" недоступен', + P8O_API_UNSUPPORTED: 'Функция "ПАРУС 8 Онлайн" не поддерживается', DEFAULT: "Неожиданная ошибка" }; diff --git a/app/components/p8p_app_workspace.js b/app/components/p8p_app_workspace.js index 88a37fd..334ad76 100644 --- a/app/components/p8p_app_workspace.js +++ b/app/components/p8p_app_workspace.js @@ -23,7 +23,8 @@ import { ListItemIcon, ListItemText } from "@mui/material"; //Интерфейсные компоненты -import { P8PPanelsMenuDrawer, P8P_PANELS_MENU_PANEL_SHAPE } from "./p8p_panels_menu"; +import { P8PPanelsMenuDrawer, P8P_PANELS_MENU_PANEL_SHAPE } from "./p8p_panels_menu"; //Меню +import { APP_STYLES } from "../../app.styles"; //Типовые стили //--------- //Константы @@ -34,6 +35,7 @@ const APP_BAR_HEIGHT = "64px"; //Стили const STYLES = { + DRAWER: { [`& .MuiDrawer-paper`]: { ...APP_STYLES.SCROLL } }, ROOT_BOX: { display: "flex" }, APP_BAR: { position: "fixed" }, APP_BAR_BUTTON: { mr: 2 }, @@ -88,7 +90,7 @@ const P8PAppWorkspace = ({ children, panels = [], selectedPanel, closeCaption, h - + diff --git a/app/components/p8p_fullscreen_dialog.js b/app/components/p8p_fullscreen_dialog.js index c51a4ff..b37fd3a 100644 --- a/app/components/p8p_fullscreen_dialog.js +++ b/app/components/p8p_fullscreen_dialog.js @@ -27,7 +27,7 @@ const STYLES = { //----------- //Полноэкранный диалог -const P8PFullScreenDialog = ({ title, onClose, children }) => { +const P8PFullScreenDialog = ({ title, onClose, contentProps, children }) => { const handleClose = () => { onClose ? onClose() : null; }; @@ -46,7 +46,7 @@ const P8PFullScreenDialog = ({ title, onClose, children }) => { - {children} + {children} ); }; @@ -55,7 +55,8 @@ const P8PFullScreenDialog = ({ title, onClose, children }) => { P8PFullScreenDialog.propTypes = { title: PropTypes.string.isRequired, onClose: PropTypes.func, - children: PropTypes.element + children: PropTypes.element, + contentProps: PropTypes.object }; //---------------- diff --git a/app/context/application.js b/app/context/application.js index d613fcc..6ff8919 100644 --- a/app/context/application.js +++ b/app/context/application.js @@ -22,7 +22,8 @@ const P8O_API = window.top?.parus?.clientApi; //Структура объекта с описанием ошибок const APPLICATION_CONTEXT_ERRORS_SHAPE = PropTypes.shape({ - P8O_API_UNAVAILABLE: PropTypes.string.isRequired + P8O_API_UNAVAILABLE: PropTypes.string.isRequired, + P8O_API_UNSUPPORTED: PropTypes.string.isRequired }); //---------------- @@ -72,21 +73,38 @@ export const ApplicationContext = ({ errors, displaySizeGetter, guidGenerator, c //Отображение раздела "ПАРУС 8 Онлайн" const pOnlineShowUnit = useCallback( - ({ unitCode, showMethod = "main", inputParameters }) => { - if (P8O_API) P8O_API.fn.openDocumentModal({ unitcode: unitCode, method: showMethod, inputParameters }); + ({ unitCode, showMethod = "main", inputParameters, modal = true }) => { + if (P8O_API) + modal + ? P8O_API.fn.openDocumentModal({ unitcode: unitCode, method: showMethod, inputParameters }) + : P8O_API.fn.openDocument + ? P8O_API.fn.openDocument({ unitcode: unitCode, method: showMethod, inputParameters }) + : showMsgErr(errors.P8O_API_UNSUPPORTED); else showMsgErr(errors.P8O_API_UNAVAILABLE); }, - [showMsgErr, errors.P8O_API_UNAVAILABLE] + [showMsgErr, errors.P8O_API_UNAVAILABLE, errors.P8O_API_UNSUPPORTED] ); //Отображение документа "ПАРУС 8 Онлайн" const pOnlineShowDocument = useCallback( - ({ unitCode, document, showMethod = "main", inRnParameter = "in_RN" }) => { + ({ unitCode, document, showMethod = "main", inRnParameter = "in_RN", modal = true }) => { if (P8O_API) - P8O_API.fn.openDocumentModal({ unitcode: unitCode, method: showMethod, inputParameters: [{ name: inRnParameter, value: document }] }); + modal + ? P8O_API.fn.openDocumentModal({ + unitcode: unitCode, + method: showMethod, + inputParameters: [{ name: inRnParameter, value: document }] + }) + : P8O_API.fn.openDocument + ? P8O_API.fn.openDocument({ + unitcode: unitCode, + method: showMethod, + inputParameters: [{ name: inRnParameter, value: document }] + }) + : showMsgErr(errors.P8O_API_UNSUPPORTED); else showMsgErr(errors.P8O_API_UNAVAILABLE); }, - [showMsgErr, errors.P8O_API_UNAVAILABLE] + [showMsgErr, errors.P8O_API_UNAVAILABLE, errors.P8O_API_UNSUPPORTED] ); //Отображение словаря "ПАРУС 8 Онлайн" diff --git a/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js b/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js index 46225a3..90fcf63 100644 --- a/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js +++ b/app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js @@ -27,6 +27,7 @@ import { Icon } from "@mui/material"; //Интерфейсные элементы import { ThemeProvider } from "@mui/material/styles"; //Подключение темы +import { APP_STYLES } from "../../../app.styles"; //Типовые стили import { PlanSpecsList } from "./components/plans_list"; //Список планов import { PlanSpecDetail } from "./components/plan_detail"; //Детали плана import { lightTheme, darkTheme } from "./styles/themes"; //Стиль темы @@ -63,7 +64,8 @@ const STYLES = { display: "inline-block", boxSizing: "border-box", backgroundColor: "background.plans_drawer_paper", - color: "text.plans_finder.fontColor" + color: "text.plans_finder.fontColor", + ...APP_STYLES.SCROLL } }, PLANS_LIST_BOX: { paddingTop: "20px" }, diff --git a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js index 5d97e7d..ae7643b 100644 --- a/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js +++ b/app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js @@ -10,6 +10,7 @@ import React, { useContext, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, TextField } from "@mui/material"; //Интерфейсные элементы +import { APP_STYLES } from "../../../app.styles"; //Типовые стили import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { CostJobsSpecsDataGrid } from "./fcjobssp"; //Собственные хуки таблиц import { useCostJobs, useFilteredFcjobs } from "./hooks"; //Вспомогательные хуки @@ -35,7 +36,7 @@ const STYLES = { width: "350px", display: "inline-block", flexShrink: 0, - [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } + [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box", ...APP_STYLES.SCROLL } }, CONTAINER: { textAlign: "center" } }; diff --git a/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js b/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js index ea989a4..8c009b2 100644 --- a/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js +++ b/app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js @@ -43,11 +43,12 @@ import { MessagingСtx } from "../../context/messaging"; //Контекст со import { NavigationCtx } from "../../context/navigation"; //Контекст навигации import { P8P_GANTT_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { APP_STYLES } from "../../../app.styles"; //Типовые стили import { P8PGantt, taskLegendDesc } from "../../components/p8p_gantt"; //Диаграмма Ганта import { xml2JSON, formatDateJSONDateOnly, formatDateRF, hasValue } from "../../core/utils"; //Вспомогательные функции import { useFilteredPlanCtlgs } from "./hooks"; //Вспомогательные хуки -import { CostRouteListsDataGrid } from "./datagrids/fcroutlst"; -import { IncomFromDepsDataGrid } from "./datagrids/incomefromdeps"; +import { CostRouteListsDataGrid } from "./datagrids/fcroutlst"; //Таблица "Маршрутные листы" +import { IncomFromDepsDataGrid } from "./datagrids/incomefromdeps"; //Таблица "Приходы из подразделений" //--------- //Константы @@ -72,7 +73,7 @@ const STYLES = { width: "350px", display: "inline-block", flexShrink: 0, - [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } + [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box", ...APP_STYLES.SCROLL } }, GANTT_CONTAINER: { height: `calc(100vh - ${APP_BAR_HEIGHT})`, width: "100vw", paddingTop: "24px" }, GANTT_TITLE: { paddingLeft: "250px", paddingRight: "250px" }, diff --git a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js index 4dbde82..f037bb1 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js @@ -41,7 +41,7 @@ const STYLES = { width: "350px", display: "inline-block", flexShrink: 0, - [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } + [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box", ...APP_STYLES.SCROLL } }, CONTAINER: { textAlign: "center" }, TITLE: { height: TITLE_HEIGHT, overflow: "hidden", paddingTop: TITLE_PADDING_TOP, paddingBottom: TITLE_PADDING_BOTTOM, display: "inline-table" }, diff --git a/app/panels/prj_fin/layouts.js b/app/panels/prj_fin/layouts.js index 0984959..d3488d7 100644 --- a/app/panels/prj_fin/layouts.js +++ b/app/panels/prj_fin/layouts.js @@ -23,6 +23,13 @@ export const PANEL_UNITS = { PROJECT_STAGE_ARTS: "PROJECT_STAGE_ARTS" }; +//Общие стили +export const COMMON_PROJECTS_STYLES = { + FULL_SCREEN_DIALOG_CONTENT: { + padding: 0 + } +}; + //----------- //Тело модуля //----------- @@ -250,6 +257,7 @@ export const rowExpandRender = ({ columnsDef, row, pOnlineShowDocument, + pOnlineShowUnit, showStages, showPayNotes, showCostNotes, @@ -275,42 +283,55 @@ export const rowExpandRender = ({ const linkButtons = () => panelUnit === PANEL_UNITS.PROJECTS ? ( <> - - ) : panelUnit === PANEL_UNITS.PROJECT_STAGES ? ( <> - - - ) : panelUnit === PANEL_UNITS.PROJECT_STAGE_CONTRACTS ? ( ) : null; //Сборка содержимого return ( - - {linkButtons()} + + + {linkButtons()} + - + diff --git a/app/panels/prj_fin/projects.js b/app/panels/prj_fin/projects.js index d5f0501..e692926 100644 --- a/app/panels/prj_fin/projects.js +++ b/app/panels/prj_fin/projects.js @@ -11,23 +11,34 @@ import React, { useState, useCallback, useEffect, useContext } from "react"; // import { Box, Grid, Paper, Fab, Icon } from "@mui/material"; //Интерфейсные компоненты import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных +import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_MORE_HEIGHT, P8P_DATA_GRID_FILTERS_HEIGHT } from "../../components/p8p_data_grid"; //Таблица данных import { P8PFullScreenDialog } from "../../components/p8p_fullscreen_dialog"; //Полноэкранный диалог import { P8PChart } from "../../components/p8p_chart"; //График import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { COMMON_PROJECTS_STYLES, PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов import { Stages } from "./stages"; //Список этапов проекта //--------- //Константы //--------- +//Высота графиков +const CHART_HEIGHT = "300px"; + //Стили const STYLES = { - CHART: { maxHeight: "300px", display: "flex", justifyContent: "center" }, + TABLE_PROJECTS: (showCharts, morePages, filters) => ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${showCharts ? CHART_HEIGHT : "0px"} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - ${ + filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px" + } - 25px)`, + ...APP_STYLES.SCROLL + }), + CHART: { maxHeight: CHART_HEIGHT, display: "flex", justifyContent: "center" }, CHART_PAPER: { height: "100%" }, CHART_FAB: { position: "absolute", top: 80, left: 16 } }; @@ -220,12 +231,16 @@ const Projects = () => { {projectsDataGrid.dataLoaded ? ( 0) + }} columnsDef={projectsDataGrid.columnsDef} rows={projectsDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} filtersInitial={projectsDataGrid.filters} morePages={projectsDataGrid.morePages} reloading={projectsDataGrid.reload} + fixedHeader={true} expandable={true} headCellRender={headCellRender} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECTS, showStages })} @@ -245,7 +260,11 @@ const Projects = () => { /> ) : null} {projectsDataGrid.selectedProject ? ( - + ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px"} - 16px)`, + ...APP_STYLES.SCROLL + }) +}; + //----------- //Тело модуля //----------- @@ -100,10 +114,12 @@ const StageArts = ({ stage, filters }) => { {stageArtsDataGrid.dataLoaded ? ( 0), elevation: 0 }} columnsDef={stageArtsDataGrid.columnsDef} filtersInitial={filters} rows={stageArtsDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} + fixedHeader={true} morePages={false} reloading={stageArtsDataGrid.reload} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGE_ARTS, showCostNotes, showContracts })} diff --git a/app/panels/prj_fin/stage_contracts.js b/app/panels/prj_fin/stage_contracts.js index 0953a75..01ed0a9 100644 --- a/app/panels/prj_fin/stage_contracts.js +++ b/app/panels/prj_fin/stage_contracts.js @@ -12,13 +12,35 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Box } from "@mui/material"; //Интерфейсные компоненты import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных +import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { + P8PDataGrid, + P8P_DATA_GRID_SIZE, + P8P_DATA_GRID_FILTER_SHAPE, + P8P_DATA_GRID_MORE_HEIGHT, + P8P_DATA_GRID_FILTERS_HEIGHT +} from "../../components/p8p_data_grid"; //Таблица данных import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { PANEL_UNITS, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + TABLE_CONTRACTS: (morePages, filters) => ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - ${ + filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px" + } - 16px)`, + ...APP_STYLES.SCROLL + }) +}; + //----------- //Тело модуля //----------- @@ -137,12 +159,17 @@ const StageContracts = ({ stage, filters }) => { {stageContractsDataGrid.dataLoaded ? ( 0), + elevation: 0 + }} columnsDef={stageContractsDataGrid.columnsDef} filtersInitial={filters} rows={stageContractsDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} morePages={stageContractsDataGrid.morePages} reloading={stageContractsDataGrid.reload} + fixedHeader={true} expandable={true} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGE_CONTRACTS, pOnlineShowDocument })} rowExpandRender={prms => diff --git a/app/panels/prj_fin/stages.js b/app/panels/prj_fin/stages.js index 7cc1f3b..2f5969d 100644 --- a/app/panels/prj_fin/stages.js +++ b/app/panels/prj_fin/stages.js @@ -12,7 +12,15 @@ import PropTypes from "prop-types"; //Контроль свойств компо import { Box } from "@mui/material"; //Интерфейсные компоненты import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции import { TEXTS } from "../../../app.text"; //Тектовые ресурсы и константы -import { P8PDataGrid, P8P_DATA_GRID_SIZE, P8P_DATA_GRID_FILTER_SHAPE } from "../../components/p8p_data_grid"; //Таблица данных +import { APP_STYLES } from "../../../app.styles"; //Типовые стили +import { APP_BAR_HEIGHT } from "../../components/p8p_app_workspace"; //Заголовок страницы +import { + P8PDataGrid, + P8P_DATA_GRID_SIZE, + P8P_DATA_GRID_FILTER_SHAPE, + P8P_DATA_GRID_MORE_HEIGHT, + P8P_DATA_GRID_FILTERS_HEIGHT +} from "../../components/p8p_data_grid"; //Таблица данных import { P8PFullScreenDialog } from "../../components/p8p_fullscreen_dialog"; //Полноэкранный диалог import { StageArts } from "./stage_arts"; //Калькуляция этапа проекта import { StageContracts } from "./stage_contracts"; //Договоры с соисполнителями этапа проекта @@ -20,7 +28,21 @@ import { BackEndСtx } from "../../context/backend"; //Контекст взаи import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { COMMON_PROJECTS_STYLES, PANEL_UNITS, headCellRender, dataCellRender, valueFormatter, rowExpandRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + TABLE_STAGES: (morePages, filters) => ({ + height: `calc(100vh - ${APP_BAR_HEIGHT} - ${morePages ? P8P_DATA_GRID_MORE_HEIGHT : "0px"} - ${ + filters ? P8P_DATA_GRID_FILTERS_HEIGHT : "0px" + } - 16px)`, + ...APP_STYLES.SCROLL + }) +}; //----------- //Тело модуля @@ -155,12 +177,17 @@ const Stages = ({ project, projectName, filters }) => { {stagesDataGrid.dataLoaded ? ( 0), + elevation: 0 + }} columnsDef={stagesDataGrid.columnsDef} filtersInitial={filters} rows={stagesDataGrid.rows} size={P8P_DATA_GRID_SIZE.SMALL} morePages={stagesDataGrid.morePages} reloading={stagesDataGrid.reload} + fixedHeader={true} expandable={true} headCellRender={headCellRender} dataCellRender={prms => dataCellRender({ ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGES, showStageArts, showContracts })} @@ -169,6 +196,7 @@ const Stages = ({ project, projectName, filters }) => { ...prms, panelUnit: PANEL_UNITS.PROJECT_STAGES, pOnlineShowDocument, + pOnlineShowUnit, showStageArts, showContracts, showPayNotes, @@ -186,6 +214,7 @@ const Stages = ({ project, projectName, filters }) => { @@ -194,6 +223,7 @@ const Stages = ({ project, projectName, filters }) => { diff --git a/app/panels/samples/data_grid.js b/app/panels/samples/data_grid.js index 6e61d15..9421d03 100644 --- a/app/panels/samples/data_grid.js +++ b/app/panels/samples/data_grid.js @@ -15,6 +15,7 @@ import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid" import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { ApplicationСtx } from "../../context/application"; //Контекст приложения +import { APP_STYLES } from "../../../app.styles"; //Типовые стили //--------- //Константы @@ -27,7 +28,7 @@ const DATA_GRID_PAGE_SIZE = 5; const STYLES = { CONTAINER: { textAlign: "center", paddingTop: "20px" }, TITLE: { paddingBottom: "15px" }, - DATA_GRID_CONTAINER: { maxWidth: 700, maxHeight: 500, minHeight: 500 } + DATA_GRID_CONTAINER: { maxWidth: 700, maxHeight: 500, minHeight: 500, ...APP_STYLES.SCROLL } }; //--------------------------------------------- @@ -166,7 +167,7 @@ const DataGrid = ({ title }) => { {dataGrid.dataLoaded ? ( 'EDCOST_READYTo', BORDER => true, BFILTER => true); + PKG_P8PANELS_VISUAL.TDG_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPROJECT', + SCAPTION => 'Рег. номер проекта', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); /* Обходим данные */ begin /* Добавляем подсказку совместимости */ @@ -2860,7 +2865,8 @@ create or replace package body PKG_P8PANELS_PROJECTS as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ' NLNK_DOCUMENT_NSUMM_REALIZ,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_PROJECTS.STAGES_GET_CTRL_COST') || '(PS.RN) NCTRL_COST,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_PROJECTS.STAGES_GET_CTRL_ACT') || '(PS.RN) NCTRL_ACT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_PROJECTS.STAGES_GET_COST_READY') || '(PS.RN) NCOST_READY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_PROJECTS.STAGES_GET_COST_READY') || '(PS.RN) NCOST_READY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PS.PRN NPROJECT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from PROJECTSTAGE PS'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FACEACC FAC on PS.FACEACC = FAC.RN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PROJECT P,'); @@ -2924,6 +2930,7 @@ create or replace package body PKG_P8PANELS_PROJECTS as PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 29); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 30); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 31); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 32); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -3052,6 +3059,10 @@ create or replace package body PKG_P8PANELS_PROJECTS as SNAME => 'NCOST_READY', ICURSOR => ICURSOR, NPOSITION => 30); + PKG_P8PANELS_VISUAL.TDG_ROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPROJECT', + ICURSOR => ICURSOR, + NPOSITION => 31); /* Добавляем строку в таблицу */ PKG_P8PANELS_VISUAL.TDG_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 6bffbdb..e7e0499 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -4470,7 +4470,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BUTTONS: () => (/* binding */ BUTTONS),\n/* harmony export */ CAPTIONS: () => (/* binding */ CAPTIONS),\n/* harmony export */ ERRORS: () => (/* binding */ ERRORS),\n/* harmony export */ ERRORS_HTTP: () => (/* binding */ ERRORS_HTTP),\n/* harmony export */ TEXTS: () => (/* binding */ TEXTS),\n/* harmony export */ TITLES: () => (/* binding */ TITLES)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Текстовые ресурсы и константы\r\n*/\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Заголовки\nconst TITLES = {\n INFO: \"Информация\",\n //Информационный блок\n WARN: \"Предупреждение\",\n //Блок предупреждения\n ERR: \"Ошибка\",\n //Информация об ошибке\n DEFAULT_PANELS_GROUP: \"Без привязки к группе\" //Заголовок группы панелей по умолчанию\n};\n\n//Текст\nconst TEXTS = {\n LOADING: \"Ожидайте...\",\n //Ожидание завершения процесса\n NO_DATA_FOUND: \"Данных не найдено\" //Отсутствие данных\n};\n\n//Текст кнопок\nconst BUTTONS = {\n NAVIGATE_HOME: \"Домой\",\n //Переход к домашней странице\n NAVIGATE_BACK: \"Назад\",\n //Возврат назад по навигации\n NAVIGATE: \"Перейти\",\n //Переход к разделу/панели/адресу\n OK: \"ОК\",\n //Ок\n CANCEL: \"Отмена\",\n //Отмена\n CLOSE: \"Закрыть\",\n //Сокрытие\n CLEAR: \"Очистить\",\n //Очистка\n ORDER_ASC: \"По возрастанию\",\n //Сортировка по возрастанию\n ORDER_DESC: \"По убыванию\",\n //Сортировка по убыванию\n FILTER: \"Фильтр\",\n //Фильтрация\n MORE: \"Ещё\" //Догрузка данных\n};\n\n//Метки атрибутов, сопроводительные надписи\nconst CAPTIONS = {\n VALUE: \"Значение\",\n VALUE_FROM: \"С\",\n VALUE_TO: \"По\",\n NUMB: \"Номер\",\n NAME: \"Наименование\",\n START: \"Начало\",\n END: \"Окончание\",\n PROGRESS: \"Прогресс\",\n LEGEND: \"Легенда\"\n};\n\n//Типовые сообщения об ошибках\nconst ERRORS = {\n UNDER_CONSTRUCTION: \"Панель в разработке\",\n P8O_API_UNAVAILABLE: '\"ПАРУС 8 Онлайн\" недоступен',\n DEFAULT: \"Неожиданная ошибка\"\n};\n\n//Типовые сообщения для ошибок HTTP\nconst ERRORS_HTTP = {\n 404: \"Адрес не найден\"\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app.text.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ BUTTONS: () => (/* binding */ BUTTONS),\n/* harmony export */ CAPTIONS: () => (/* binding */ CAPTIONS),\n/* harmony export */ ERRORS: () => (/* binding */ ERRORS),\n/* harmony export */ ERRORS_HTTP: () => (/* binding */ ERRORS_HTTP),\n/* harmony export */ TEXTS: () => (/* binding */ TEXTS),\n/* harmony export */ TITLES: () => (/* binding */ TITLES)\n/* harmony export */ });\n/*\r\n Парус 8 - Панели мониторинга\r\n Текстовые ресурсы и константы\r\n*/\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Заголовки\nconst TITLES = {\n INFO: \"Информация\",\n //Информационный блок\n WARN: \"Предупреждение\",\n //Блок предупреждения\n ERR: \"Ошибка\",\n //Информация об ошибке\n DEFAULT_PANELS_GROUP: \"Без привязки к группе\" //Заголовок группы панелей по умолчанию\n};\n\n//Текст\nconst TEXTS = {\n LOADING: \"Ожидайте...\",\n //Ожидание завершения процесса\n NO_DATA_FOUND: \"Данных не найдено\" //Отсутствие данных\n};\n\n//Текст кнопок\nconst BUTTONS = {\n NAVIGATE_HOME: \"Домой\",\n //Переход к домашней странице\n NAVIGATE_BACK: \"Назад\",\n //Возврат назад по навигации\n NAVIGATE: \"Перейти\",\n //Переход к разделу/панели/адресу\n OK: \"ОК\",\n //Ок\n CANCEL: \"Отмена\",\n //Отмена\n CLOSE: \"Закрыть\",\n //Сокрытие\n CLEAR: \"Очистить\",\n //Очистка\n ORDER_ASC: \"По возрастанию\",\n //Сортировка по возрастанию\n ORDER_DESC: \"По убыванию\",\n //Сортировка по убыванию\n FILTER: \"Фильтр\",\n //Фильтрация\n MORE: \"Ещё\" //Догрузка данных\n};\n\n//Метки атрибутов, сопроводительные надписи\nconst CAPTIONS = {\n VALUE: \"Значение\",\n VALUE_FROM: \"С\",\n VALUE_TO: \"По\",\n NUMB: \"Номер\",\n NAME: \"Наименование\",\n START: \"Начало\",\n END: \"Окончание\",\n PROGRESS: \"Прогресс\",\n LEGEND: \"Легенда\"\n};\n\n//Типовые сообщения об ошибках\nconst ERRORS = {\n UNDER_CONSTRUCTION: \"Панель в разработке\",\n P8O_API_UNAVAILABLE: '\"ПАРУС 8 Онлайн\" недоступен',\n P8O_API_UNSUPPORTED: 'Функция \"ПАРУС 8 Онлайн\" не поддерживается',\n DEFAULT: \"Неожиданная ошибка\"\n};\n\n//Типовые сообщения для ошибок HTTP\nconst ERRORS_HTTP = {\n 404: \"Адрес не найден\"\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app.text.js?"); /***/ }), @@ -4525,7 +4525,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ APP_BAR_HEIGHT: () => (/* binding */ APP_BAR_HEIGHT),\n/* harmony export */ P8PAppWorkspace: () => (/* binding */ P8PAppWorkspace)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CssBaseline/CssBaseline.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Рабочее пространство\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n\n//---------\n//Константы\n//---------\n\n//Высота главного меню\nconst APP_BAR_HEIGHT = \"64px\";\n\n//Стили\nconst STYLES = {\n ROOT_BOX: {\n display: \"flex\"\n },\n APP_BAR: {\n position: \"fixed\"\n },\n APP_BAR_BUTTON: {\n mr: 2\n },\n MAIN: {\n flexGrow: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Рабочее пространство\nconst P8PAppWorkspace = ({\n children,\n panels = [],\n selectedPanel,\n closeCaption,\n homeCaption,\n onHomeNavigate,\n onItemNavigate\n} = {}) => {\n //Собственное состояния\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Отработка открытия бокового меню\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n\n //Отработка закрытия бового меню\n const handleDrawerClose = () => {\n setOpen(false);\n };\n\n //Отработка нажатия на домашнюю страницу\n const handleHomeClick = () => onHomeNavigate ? onHomeNavigate() : null;\n\n //Отработка нажатия на элемент бокового меню\n const handleItemNavigate = panel => {\n handleDrawerClose();\n onItemNavigate ? onItemNavigate(panel) : null;\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.ROOT_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n color: \"inherit\",\n \"aria-label\": \"open drawer\",\n onClick: open ? handleDrawerClose : handleDrawerOpen,\n edge: \"start\",\n sx: STYLES.APP_BAR_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, open ? \"chevron_left\" : \"menu\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\",\n noWrap: true,\n component: \"div\"\n }, selectedPanel?.caption))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n anchor: \"left\",\n open: open,\n onClose: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: closeCaption\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: handleHomeClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"home\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n primary: homeCaption\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8PPanelsMenuDrawer, {\n panels: panels,\n selectedPanel: selectedPanel,\n onItemNavigate: handleItemNavigate\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"main\", {\n style: STYLES.MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null), children));\n};\n\n//Контроль свойств - Рабочее пространство\nP8PAppWorkspace.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().element),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE,\n closeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n homeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().string).isRequired,\n onHomeNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_workspace.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ APP_BAR_HEIGHT: () => (/* binding */ APP_BAR_HEIGHT),\n/* harmony export */ P8PAppWorkspace: () => (/* binding */ P8PAppWorkspace)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CssBaseline/CssBaseline.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./p8p_panels_menu */ \"./app/components/p8p_panels_menu.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../app.styles */ \"./app.styles.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Рабочее пространство\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Меню\n //Типовые стили\n\n//---------\n//Константы\n//---------\n\n//Высота главного меню\nconst APP_BAR_HEIGHT = \"64px\";\n\n//Стили\nconst STYLES = {\n DRAWER: {\n [`& .MuiDrawer-paper`]: {\n ..._app_styles__WEBPACK_IMPORTED_MODULE_2__.APP_STYLES.SCROLL\n }\n },\n ROOT_BOX: {\n display: \"flex\"\n },\n APP_BAR: {\n position: \"fixed\"\n },\n APP_BAR_BUTTON: {\n mr: 2\n },\n MAIN: {\n flexGrow: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Рабочее пространство\nconst P8PAppWorkspace = ({\n children,\n panels = [],\n selectedPanel,\n closeCaption,\n homeCaption,\n onHomeNavigate,\n onItemNavigate\n} = {}) => {\n //Собственное состояния\n const [open, setOpen] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Отработка открытия бокового меню\n const handleDrawerOpen = () => {\n setOpen(true);\n };\n\n //Отработка закрытия бового меню\n const handleDrawerClose = () => {\n setOpen(false);\n };\n\n //Отработка нажатия на домашнюю страницу\n const handleHomeClick = () => onHomeNavigate ? onHomeNavigate() : null;\n\n //Отработка нажатия на элемент бокового меню\n const handleItemNavigate = panel => {\n handleDrawerClose();\n onItemNavigate ? onItemNavigate(panel) : null;\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.ROOT_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n color: \"inherit\",\n \"aria-label\": \"open drawer\",\n onClick: open ? handleDrawerClose : handleDrawerOpen,\n edge: \"start\",\n sx: STYLES.APP_BAR_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, open ? \"chevron_left\" : \"menu\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"h6\",\n noWrap: true,\n component: \"div\"\n }, selectedPanel?.caption))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n anchor: \"left\",\n open: open,\n onClose: handleDrawerClose,\n sx: STYLES.DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleDrawerClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n primary: closeCaption\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: handleHomeClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"home\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n primary: homeCaption\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8PPanelsMenuDrawer, {\n panels: panels,\n selectedPanel: selectedPanel,\n onItemNavigate: handleItemNavigate\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"main\", {\n style: STYLES.MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null), children));\n};\n\n//Контроль свойств - Рабочее пространство\nP8PAppWorkspace.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().element),\n panels: prop_types__WEBPACK_IMPORTED_MODULE_15___default().arrayOf(_p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE).isRequired,\n selectedPanel: _p8p_panels_menu__WEBPACK_IMPORTED_MODULE_1__.P8P_PANELS_MENU_PANEL_SHAPE,\n closeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string).isRequired,\n homeCaption: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string).isRequired,\n onHomeNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func),\n onItemNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_app_workspace.js?"); /***/ }), @@ -4569,7 +4569,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PFullScreenDialog: () => (/* binding */ P8PFullScreenDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Полноэкранный диалог\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_TITLE: {\n padding: 0\n },\n APP_BAR: {\n position: \"relative\"\n },\n TITLE_TYPOGRAPHY: {\n ml: 2,\n flex: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Полноэкранный диалог\nconst P8PFullScreenDialog = ({\n title,\n onClose,\n children\n}) => {\n const handleClose = () => {\n onClose ? onClose() : null;\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n fullScreen: true,\n open: true,\n onClose: handleClose,\n scroll: \"paper\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.DIALOG_TITLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n edge: \"start\",\n color: \"inherit\",\n onClick: handleClose,\n \"aria-label\": \"close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE_TYPOGRAPHY,\n variant: \"h6\",\n component: \"div\"\n }, title)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, children));\n};\n\n//Контроль свойств - Полноэкранный диалог\nP8PFullScreenDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().element)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_fullscreen_dialog.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ P8PFullScreenDialog: () => (/* binding */ P8PFullScreenDialog)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/AppBar/AppBar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Toolbar/Toolbar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Компонент: Полноэкранный диалог\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DIALOG_TITLE: {\n padding: 0\n },\n APP_BAR: {\n position: \"relative\"\n },\n TITLE_TYPOGRAPHY: {\n ml: 2,\n flex: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Полноэкранный диалог\nconst P8PFullScreenDialog = ({\n title,\n onClose,\n contentProps,\n children\n}) => {\n const handleClose = () => {\n onClose ? onClose() : null;\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n fullScreen: true,\n open: true,\n onClose: handleClose,\n scroll: \"paper\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.DIALOG_TITLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n sx: STYLES.APP_BAR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n edge: \"start\",\n color: \"inherit\",\n onClick: handleClose,\n \"aria-label\": \"close\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TITLE_TYPOGRAPHY,\n variant: \"h6\",\n component: \"div\"\n }, title)))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], contentProps ? contentProps : {}, children));\n};\n\n//Контроль свойств - Полноэкранный диалог\nP8PFullScreenDialog.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n children: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().element),\n contentProps: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/components/p8p_fullscreen_dialog.js?"); /***/ }), @@ -4646,7 +4646,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ApplicationContext: () => (/* binding */ ApplicationContext),\n/* harmony export */ \"ApplicationСtx\": () => (/* binding */ ApplicationСtx)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _application_reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./application_reducer */ \"./app/context/application_reducer.js\");\n/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Приложение\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Редьюсер состояния\n //Контекст отображения сообщений\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Клиентский API \"ПАРУС 8 Онлайн\"\nconst P8O_API = window.top?.parus?.clientApi;\n\n//Структура объекта с описанием ошибок\nconst APPLICATION_CONTEXT_ERRORS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n P8O_API_UNAVAILABLE: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст приложения\nconst ApplicationСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста приложения\nconst ApplicationContext = ({\n errors,\n displaySizeGetter,\n guidGenerator,\n config,\n children\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_application_reducer__WEBPACK_IMPORTED_MODULE_1__.applicationReducer, (0,_application_reducer__WEBPACK_IMPORTED_MODULE_1__.INITIAL_STATE)(displaySizeGetter));\n\n //Подключение к контексту взаимодействия с сервером\n const {\n getConfig,\n getRespPayload\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту отображения сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Установка флага инициализированности приложения\n const setInitialized = () => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_INITIALIZED\n });\n\n //Установка текущего размера экрана\n const setDisplaySize = displaySize => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_DISPLAY_SIZE,\n payload: displaySize\n });\n\n //Установка базового URL приложения\n const setUrlBase = urlBase => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_URL_BASE,\n payload: urlBase\n });\n\n //Установка списка панелей\n const setPanels = panels => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.LOAD_PANELS,\n payload: panels\n });\n\n //Поиск раздела по имени\n const findPanelByName = name => state.panels.find(panel => panel.name == name);\n\n //Отображение закладки \"ПАРУС 8 Онлайн\" с указанным URL\n const pOnlineShowTab = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n url,\n caption,\n onClose\n }) => {\n if (P8O_API) {\n const _id = id || guidGenerator();\n P8O_API.ui.openTab({\n id: _id,\n url,\n caption,\n onClose: () => onClose ? onClose(_id) : null\n });\n return _id;\n } else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, guidGenerator, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение раздела \"ПАРУС 8 Онлайн\"\n const pOnlineShowUnit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение документа \"ПАРУС 8 Онлайн\"\n const pOnlineShowDocument = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n document,\n showMethod = \"main\",\n inRnParameter = \"in_RN\"\n }) => {\n if (P8O_API) P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters: [{\n name: inRnParameter,\n value: document\n }]\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение словаря \"ПАРУС 8 Онлайн\"\n const pOnlineShowDictionary = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.openDictionary({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательской процедуры \"ПАРУС 8 Онлайн\"\n const pOnlineUserProcedure = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.performUserProcedureSync({\n code,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательского отчёта \"ПАРУС 8 Онлайн\"\n const pOnlineUserReport = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.performUserReport({\n code,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Получение количества записей на странице\n const configSystemPageSize = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => config.SYSTEM.PAGE_SIZE, [config.SYSTEM.PAGE_SIZE]);\n\n //Получение базового URL приложения\n const configUrlBase = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => state.urlBase, [state.urlBase]);\n\n //Инициализация приложения\n const initApp = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Читаем конфигурацию с сервера\n let res = await getConfig();\n //Сохраняем базовый URL приложения\n setUrlBase(getRespPayload(res)?.Panels?.urlBase);\n //Сохраняем список панелей\n setPanels(getRespPayload(res)?.Panels?.Panel);\n //Установим флаг завершения инициализации\n setInitialized();\n }, [getConfig, getRespPayload]);\n\n //Обработка подключения контекста к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!state.initialized) {\n //Слушаем изменение размеров окна\n window.addEventListener(\"resize\", () => {\n if (displaySizeGetter) setDisplaySize(displaySizeGetter());\n });\n //Инициализируем приложение\n initApp();\n }\n }, [state.initialized, initApp, displaySizeGetter]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ApplicationСtx.Provider, {\n value: {\n findPanelByName,\n pOnlineShowTab,\n pOnlineShowUnit,\n pOnlineShowDocument,\n pOnlineShowDictionary,\n pOnlineUserProcedure,\n pOnlineUserReport,\n configSystemPageSize,\n configUrlBase,\n appState: state\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста приложения\nApplicationContext.propTypes = {\n errors: APPLICATION_CONTEXT_ERRORS_SHAPE.isRequired,\n displaySizeGetter: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n guidGenerator: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired,\n config: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/application.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ApplicationContext: () => (/* binding */ ApplicationContext),\n/* harmony export */ \"ApplicationСtx\": () => (/* binding */ ApplicationСtx)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _application_reducer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./application_reducer */ \"./app/context/application_reducer.js\");\n/* harmony import */ var _messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"./app/context/backend.js\");\n/*\r\n Парус 8 - Панели мониторинга\r\n Контекст: Приложение\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //ReactJS\n //Контроль свойств компонента\n //Редьюсер состояния\n //Контекст отображения сообщений\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Клиентский API \"ПАРУС 8 Онлайн\"\nconst P8O_API = window.top?.parus?.clientApi;\n\n//Структура объекта с описанием ошибок\nconst APPLICATION_CONTEXT_ERRORS_SHAPE = prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({\n P8O_API_UNAVAILABLE: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired,\n P8O_API_UNSUPPORTED: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().string).isRequired\n});\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n//Контекст приложения\nconst ApplicationСtx = /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)();\n\n//Провайдер контекста приложения\nconst ApplicationContext = ({\n errors,\n displaySizeGetter,\n guidGenerator,\n config,\n children\n}) => {\n //Подключим редьюсер состояния\n const [state, dispatch] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)(_application_reducer__WEBPACK_IMPORTED_MODULE_1__.applicationReducer, (0,_application_reducer__WEBPACK_IMPORTED_MODULE_1__.INITIAL_STATE)(displaySizeGetter));\n\n //Подключение к контексту взаимодействия с сервером\n const {\n getConfig,\n getRespPayload\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту отображения сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Установка флага инициализированности приложения\n const setInitialized = () => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_INITIALIZED\n });\n\n //Установка текущего размера экрана\n const setDisplaySize = displaySize => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_DISPLAY_SIZE,\n payload: displaySize\n });\n\n //Установка базового URL приложения\n const setUrlBase = urlBase => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.SET_URL_BASE,\n payload: urlBase\n });\n\n //Установка списка панелей\n const setPanels = panels => dispatch({\n type: _application_reducer__WEBPACK_IMPORTED_MODULE_1__.APP_AT.LOAD_PANELS,\n payload: panels\n });\n\n //Поиск раздела по имени\n const findPanelByName = name => state.panels.find(panel => panel.name == name);\n\n //Отображение закладки \"ПАРУС 8 Онлайн\" с указанным URL\n const pOnlineShowTab = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n id,\n url,\n caption,\n onClose\n }) => {\n if (P8O_API) {\n const _id = id || guidGenerator();\n P8O_API.ui.openTab({\n id: _id,\n url,\n caption,\n onClose: () => onClose ? onClose(_id) : null\n });\n return _id;\n } else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, guidGenerator, errors.P8O_API_UNAVAILABLE]);\n\n //Отображение раздела \"ПАРУС 8 Онлайн\"\n const pOnlineShowUnit = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters,\n modal = true\n }) => {\n if (P8O_API) modal ? P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n }) : P8O_API.fn.openDocument ? P8O_API.fn.openDocument({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n }) : showMsgErr(errors.P8O_API_UNSUPPORTED);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE, errors.P8O_API_UNSUPPORTED]);\n\n //Отображение документа \"ПАРУС 8 Онлайн\"\n const pOnlineShowDocument = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n document,\n showMethod = \"main\",\n inRnParameter = \"in_RN\",\n modal = true\n }) => {\n if (P8O_API) modal ? P8O_API.fn.openDocumentModal({\n unitcode: unitCode,\n method: showMethod,\n inputParameters: [{\n name: inRnParameter,\n value: document\n }]\n }) : P8O_API.fn.openDocument ? P8O_API.fn.openDocument({\n unitcode: unitCode,\n method: showMethod,\n inputParameters: [{\n name: inRnParameter,\n value: document\n }]\n }) : showMsgErr(errors.P8O_API_UNSUPPORTED);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE, errors.P8O_API_UNSUPPORTED]);\n\n //Отображение словаря \"ПАРУС 8 Онлайн\"\n const pOnlineShowDictionary = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n unitCode,\n showMethod = \"main\",\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.openDictionary({\n unitcode: unitCode,\n method: showMethod,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательской процедуры \"ПАРУС 8 Онлайн\"\n const pOnlineUserProcedure = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters,\n callBack\n }) => {\n if (P8O_API) P8O_API.fn.performUserProcedureSync({\n code,\n inputParameters\n }, res => callBack ? callBack(res) : null);else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Исполнение пользовательского отчёта \"ПАРУС 8 Онлайн\"\n const pOnlineUserReport = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(({\n code,\n inputParameters\n }) => {\n if (P8O_API) P8O_API.fn.performUserReport({\n code,\n inputParameters\n });else showMsgErr(errors.P8O_API_UNAVAILABLE);\n }, [showMsgErr, errors.P8O_API_UNAVAILABLE]);\n\n //Получение количества записей на странице\n const configSystemPageSize = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => config.SYSTEM.PAGE_SIZE, [config.SYSTEM.PAGE_SIZE]);\n\n //Получение базового URL приложения\n const configUrlBase = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(() => state.urlBase, [state.urlBase]);\n\n //Инициализация приложения\n const initApp = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Читаем конфигурацию с сервера\n let res = await getConfig();\n //Сохраняем базовый URL приложения\n setUrlBase(getRespPayload(res)?.Panels?.urlBase);\n //Сохраняем список панелей\n setPanels(getRespPayload(res)?.Panels?.Panel);\n //Установим флаг завершения инициализации\n setInitialized();\n }, [getConfig, getRespPayload]);\n\n //Обработка подключения контекста к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!state.initialized) {\n //Слушаем изменение размеров окна\n window.addEventListener(\"resize\", () => {\n if (displaySizeGetter) setDisplaySize(displaySizeGetter());\n });\n //Инициализируем приложение\n initApp();\n }\n }, [state.initialized, initApp, displaySizeGetter]);\n\n //Вернём компонент провайдера\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ApplicationСtx.Provider, {\n value: {\n findPanelByName,\n pOnlineShowTab,\n pOnlineShowUnit,\n pOnlineShowDocument,\n pOnlineShowDictionary,\n pOnlineUserProcedure,\n pOnlineUserReport,\n configSystemPageSize,\n configUrlBase,\n appState: state\n }\n }, children);\n};\n\n//Контроль свойств - Провайдер контекста приложения\nApplicationContext.propTypes = {\n errors: APPLICATION_CONTEXT_ERRORS_SHAPE.isRequired,\n displaySizeGetter: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),\n guidGenerator: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().func).isRequired,\n config: (prop_types__WEBPACK_IMPORTED_MODULE_4___default().object).isRequired,\n children: prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)), (prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)])\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/context/application.js?"); /***/ }), @@ -4723,7 +4723,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ formatDateJSONDateOnly: () => (/* binding */ formatDateJSONDateOnly),\n/* harmony export */ formatDateRF: () => (/* binding */ formatDateRF),\n/* harmony export */ formatDateTimeRF: () => (/* binding */ formatDateTimeRF),\n/* harmony export */ formatNumberRFCurrency: () => (/* binding */ formatNumberRFCurrency),\n/* harmony export */ genGUID: () => (/* binding */ genGUID),\n/* harmony export */ getDisplaySize: () => (/* binding */ getDisplaySize),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ object2Base64XML: () => (/* binding */ object2Base64XML),\n/* harmony export */ xml2JSON: () => (/* binding */ xml2JSON)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Ядро: Вспомогательные функции\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n\n//---------\n//Константы\n//---------\n\n//Коды типовых размеров экранов\nconst DISPLAY_SIZE_CODE = {\n XS: \"XS\",\n //eXtra Small - супер маленький экран\n SM: \"SM\",\n //Small - маленький экран\n MD: \"MD\",\n //Middle - средний экран\n LG: \"LG\" //Large - большой экран\n};\n\n//Типовые размеры экранов\nconst DISPLAY_SIZE = {\n [DISPLAY_SIZE_CODE.XS]: {\n WIDTH_FROM: 0,\n WIDTH_TO: 767\n },\n //eXtra Small - супер маленький экран < 768px\n [DISPLAY_SIZE_CODE.SM]: {\n WIDTH_FROM: 768,\n WIDTH_TO: 991\n },\n //Small - маленький экран >= 768px\n [DISPLAY_SIZE_CODE.MD]: {\n WIDTH_FROM: 992,\n WIDTH_TO: 1199\n },\n //Middle - средний экран >= 992px\n [DISPLAY_SIZE_CODE.LG]: {\n WIDTH_FROM: 1200,\n WIDTH_TO: 1000000\n } //Large - большой экран >= 1200px\n};\n\n//Типовые пути конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATHS = [\"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS\", \"XRESPOND.XPAYLOAD.XROWS\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF\", \"XRESPOND.XPAYLOAD.XCOLUMNS_DEF.values\", \"XRESPOND.XPAYLOAD.XGROUPS\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT_DEF.taskColors\", \"XRESPOND.XPAYLOAD.XGANTT_TASKS\", \"XRESPOND.XPAYLOAD.XGANTT_TASKS.dependencies\", \"XRESPOND.XPAYLOAD.XCHART.labels\", \"XRESPOND.XPAYLOAD.XCHART.datasets\", \"XRESPOND.XPAYLOAD.XCHART.datasets.data\", \"XRESPOND.XPAYLOAD.XCHART.datasets.items\"];\n\n//Типовые шаблоны конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATH_PATTERNS = [/(.*)XROWS$/, /(.*)XCOLUMNS_DEF$/, /(.*)XCOLUMNS_DEF.values$/, /(.*)XGROUPS$/, /(.*)XGANTT_DEF.taskAttributes$/, /(.*)XGANTT_DEF.taskColors$/, /(.*)XGANTT_TASKS$/, /(.*)XGANTT_TASKS.dependencies$/, /(.*)XCHART.labels$/, /(.*)XCHART.datasets$/, /(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.items$/];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)\nconst XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [/(.*)XCOLUMNS_DEF.name$/, /(.*)XCOLUMNS_DEF.caption$/, /(.*)XCOLUMNS_DEF.parent$/, /(.*)XGROUPS.name$/, /(.*)XGROUPS.caption$/];\n\n//-----------\n//Тело модуля\n//-----------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Проверка типа устройства\nconst getDisplaySize = () => {\n let res = DISPLAY_SIZE_CODE.MD;\n Object.keys(DISPLAY_SIZE).map(dspl => {\n if (window.innerWidth >= DISPLAY_SIZE[dspl].WIDTH_FROM && window.innerWidth <= DISPLAY_SIZE[dspl].WIDTH_TO) res = dspl;\n });\n return res;\n};\n\n//Глубокое копирование объекта\nconst deepCopyObject = obj => JSON.parse(JSON.stringify(obj));\n\n//Конвертация объекта в Base64 XML\nconst object2Base64XML = (obj, builderOptions) => {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder(builderOptions);\n //onOrderChanged({ orders: btoa(ordersBuilder.build(newOrders)) });\n return btoa(unescape(encodeURIComponent(builder.build(obj))));\n};\n\n//Конвертация XML в JSON\nconst xml2JSON = ({\n xmlDoc,\n isArray,\n transformTagName,\n tagValueProcessor,\n attributeValueProcessor,\n useDefaultPatterns = true\n}) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (useDefaultPatterns) {\n opts.isArray = (name, jPath, isLeafNode, isAttribute) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath, isLeafNode, isAttribute) : undefined);\n opts.attributeValueProcessor = (name, val, jPath) => XML_ATTR_ALWAYS_STR_PATH_PATTERNS.some(pattern => pattern.test(`${jPath}.${name}`)) ? undefined : attributeValueProcessor ? attributeValueProcessor(name, val, jPath) : val;\n } else {\n if (isArray) opts.isArray = isArray;\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n }\n if (transformTagName) opts.transformTagName = transformTagName;\n if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLParser(opts);\n resolve(parser.parse(xmlDoc));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Форматирование даты в формат РФ\nconst formatDateRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY\") : null;\n\n//Форматирование даты и времени в формат РФ\nconst formatDateTimeRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY HH:mm:ss\") : null;\n\n//Форматирование даты в формат JSON (только дата, без времени)\nconst formatDateJSONDateOnly = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DD\") : null;\n\n//Форматирование числа в \"Денежном\" формате РФ\nconst formatNumberRFCurrency = value => hasValue(value) ? new Intl.NumberFormat(\"ru-RU\", {\n minimumFractionDigits: 2\n}).format(value) : null;\n\n//Формирование уникального идентификатора\nconst genGUID = () => \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/utils.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ deepCopyObject: () => (/* binding */ deepCopyObject),\n/* harmony export */ formatDateJSONDateOnly: () => (/* binding */ formatDateJSONDateOnly),\n/* harmony export */ formatDateRF: () => (/* binding */ formatDateRF),\n/* harmony export */ formatDateTimeRF: () => (/* binding */ formatDateTimeRF),\n/* harmony export */ formatNumberRFCurrency: () => (/* binding */ formatNumberRFCurrency),\n/* harmony export */ genGUID: () => (/* binding */ genGUID),\n/* harmony export */ getDisplaySize: () => (/* binding */ getDisplaySize),\n/* harmony export */ hasValue: () => (/* binding */ hasValue),\n/* harmony export */ object2Base64XML: () => (/* binding */ object2Base64XML),\n/* harmony export */ xml2JSON: () => (/* binding */ xml2JSON)\n/* harmony export */ });\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! fast-xml-parser */ \"./node_modules/fast-xml-parser/src/fxp.js\");\n/* harmony import */ var fast_xml_parser__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! dayjs */ \"./node_modules/dayjs/dayjs.min.js\");\n/* harmony import */ var dayjs__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(dayjs__WEBPACK_IMPORTED_MODULE_1__);\n/*\r\n Парус 8 - Панели мониторинга\r\n Ядро: Вспомогательные функции\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Конвертация XML в JSON и JSON в XML\n //Работа с датами\n\n//---------\n//Константы\n//---------\n\n//Коды типовых размеров экранов\nconst DISPLAY_SIZE_CODE = {\n XS: \"XS\",\n //eXtra Small - супер маленький экран\n SM: \"SM\",\n //Small - маленький экран\n MD: \"MD\",\n //Middle - средний экран\n LG: \"LG\" //Large - большой экран\n};\n\n//Типовые размеры экранов\nconst DISPLAY_SIZE = {\n [DISPLAY_SIZE_CODE.XS]: {\n WIDTH_FROM: 0,\n WIDTH_TO: 767\n },\n //eXtra Small - супер маленький экран < 768px\n [DISPLAY_SIZE_CODE.SM]: {\n WIDTH_FROM: 768,\n WIDTH_TO: 991\n },\n //Small - маленький экран >= 768px\n [DISPLAY_SIZE_CODE.MD]: {\n WIDTH_FROM: 992,\n WIDTH_TO: 1199\n },\n //Middle - средний экран >= 992px\n [DISPLAY_SIZE_CODE.LG]: {\n WIDTH_FROM: 1200,\n WIDTH_TO: 1000000\n } //Large - большой экран >= 1200px\n};\n\n//Типовые пути конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATHS = [\"XRESPOND.XPAYLOAD.XOUT_ARGUMENTS\", \"XRESPOND.XPAYLOAD.XDATA_GRID.rows\", \"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef\", \"XRESPOND.XPAYLOAD.XDATA_GRID.columnsDef.values\", \"XRESPOND.XPAYLOAD.XDATA_GRID.groups\", \"XRESPOND.XPAYLOAD.XGANTT.taskAttributes\", \"XRESPOND.XPAYLOAD.XGANTT.taskColors\", \"XRESPOND.XPAYLOAD.XGANTT.tasks\", \"XRESPOND.XPAYLOAD.XGANTT.tasks.dependencies\", \"XRESPOND.XPAYLOAD.XCHART.labels\", \"XRESPOND.XPAYLOAD.XCHART.datasets\", \"XRESPOND.XPAYLOAD.XCHART.datasets.data\", \"XRESPOND.XPAYLOAD.XCHART.datasets.items\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.taskAttributes\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.columns\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.groups\", \"XRESPOND.XPAYLOAD.XCYCLOGRAM.tasks\"];\n\n//Типовые шаблоны конвертации в массив (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_PATH_PATTERNS = [/(.*)XDATA_GRID.rows$/, /(.*)XDATA_GRID.columnsDef$/, /(.*)XDATA_GRID.columnsDef.values$/, /(.*)XDATA_GRID.groups$/, /(.*)XGANTT.taskAttributes$/, /(.*)XGANTT.taskColors$/, /(.*)XGANTT.tasks$/, /(.*)XGANTT.tasks.dependencies$/, /(.*)XCHART.labels$/, /(.*)XCHART.datasets$/, /(.*)XCHART.datasets.data$/, /(.*)XCHART.datasets.items$/, /(.*)XCYCLOGRAM.taskAttributes$/, /(.*)XCYCLOGRAM.columns$/, /(.*)XCYCLOGRAM.groups$/, /(.*)XCYCLOGRAM.tasks$/];\n\n//Типовой постфикс тега для массива (при переводе XML -> JSON)\nconst XML_ALWAYS_ARRAY_POSTFIX = \"__SYSTEM__ARRAY__\";\n\n//Типовые шаблоны конвертации значения атрибута в строку (при переводе XML -> JSON)\nconst XML_ATTR_ALWAYS_STR_PATH_PATTERNS = [/(.*)XDATA_GRID.columnsDef.name$/, /(.*)XDATA_GRID.columnsDef.caption$/, /(.*)XDATA_GRID.columnsDef.parent$/, /(.*)XDATA_GRID.groups.name$/, /(.*)XDATA_GRID.groups.caption$/, /(.*)XCYCLOGRAM.columns.name$/, /(.*)XCYCLOGRAM.groups.name$/];\n\n//-----------\n//Тело модуля\n//-----------\n\n//Проверка существования значения\nconst hasValue = value => typeof value !== \"undefined\" && value !== null && value !== \"\";\n\n//Проверка типа устройства\nconst getDisplaySize = () => {\n let res = DISPLAY_SIZE_CODE.MD;\n Object.keys(DISPLAY_SIZE).map(dspl => {\n if (window.innerWidth >= DISPLAY_SIZE[dspl].WIDTH_FROM && window.innerWidth <= DISPLAY_SIZE[dspl].WIDTH_TO) res = dspl;\n });\n return res;\n};\n\n//Глубокое копирование объекта\nconst deepCopyObject = obj => JSON.parse(JSON.stringify(obj));\n\n//Конвертация объекта в Base64 XML\nconst object2Base64XML = (obj, builderOptions) => {\n const builder = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLBuilder(builderOptions);\n //onOrderChanged({ orders: btoa(ordersBuilder.build(newOrders)) });\n return btoa(unescape(encodeURIComponent(builder.build(obj))));\n};\n\n//Конвертация XML в JSON\nconst xml2JSON = ({\n xmlDoc,\n isArray,\n transformTagName,\n tagValueProcessor,\n attributeValueProcessor,\n useDefaultPatterns = true\n}) => {\n return new Promise((resolve, reject) => {\n try {\n let opts = {\n ignoreDeclaration: true,\n ignoreAttributes: false,\n parseAttributeValue: true,\n attributeNamePrefix: \"\"\n };\n if (useDefaultPatterns) {\n opts.isArray = (name, jPath, isLeafNode, isAttribute) => XML_ALWAYS_ARRAY_PATHS.indexOf(jPath) !== -1 || XML_ALWAYS_ARRAY_PATH_PATTERNS.some(pattern => pattern.test(jPath)) || jPath.endsWith(XML_ALWAYS_ARRAY_POSTFIX) || (isArray ? isArray(name, jPath, isLeafNode, isAttribute) : undefined);\n opts.attributeValueProcessor = (name, val, jPath) => XML_ATTR_ALWAYS_STR_PATH_PATTERNS.some(pattern => pattern.test(`${jPath}.${name}`)) ? undefined : attributeValueProcessor ? attributeValueProcessor(name, val, jPath) : val;\n } else {\n if (isArray) opts.isArray = isArray;\n if (attributeValueProcessor) opts.attributeValueProcessor = attributeValueProcessor;\n }\n if (transformTagName) opts.transformTagName = transformTagName;\n if (tagValueProcessor) opts.tagValueProcessor = tagValueProcessor;\n const parser = new fast_xml_parser__WEBPACK_IMPORTED_MODULE_0__.XMLParser(opts);\n resolve(parser.parse(xmlDoc));\n } catch (e) {\n reject(e);\n }\n });\n};\n\n//Форматирование даты в формат РФ\nconst formatDateRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY\") : null;\n\n//Форматирование даты и времени в формат РФ\nconst formatDateTimeRF = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"DD.MM.YYYY HH:mm:ss\") : null;\n\n//Форматирование даты в формат JSON (только дата, без времени)\nconst formatDateJSONDateOnly = value => value ? dayjs__WEBPACK_IMPORTED_MODULE_1___default()(value).format(\"YYYY-MM-DD\") : null;\n\n//Форматирование числа в \"Денежном\" формате РФ\nconst formatNumberRFCurrency = value => hasValue(value) ? new Intl.NumberFormat(\"ru-RU\", {\n minimumFractionDigits: 2\n}).format(value) : null;\n\n//Формирование уникального идентификатора\nconst genGUID = () => \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, c => (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16));\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/core/utils.js?"); /***/ }), @@ -4767,7 +4767,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./filter */ \"./app/panels/eqs_prfrm/filter.js\");\n/* harmony import */ var _filter_dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./filter_dialog */ \"./app/panels/eqs_prfrm/filter_dialog.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./hooks */ \"./app/panels/eqs_prfrm/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Тектовые ресурсы и константы\n //Компонент фильтра\n //Компонент диалогового окна фильтра отбора\n //Пользовательские хуки\n\n//---------\n//Константы\n//---------\n\n//Высота меню Парус (пиксели)\nconst pxOuterMenuH = 53;\n//Высота заголовка панели (пиксели)\nconst pxPanelHeaderH = 64;\n//Минимальная ширина таблицы (пиксели)\nconst minGridW = 800;\n//Минимальная высота таблицы (пиксели)\nconst minGridH = 200;\n\n//Стили\nconst STYLES = {\n BOX_ROW: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n GRID_PADDING: {\n paddingTop: 1,\n paddingBottom: 1\n },\n GRID_SIZES: (width, height) => ({\n padding: \"0px\",\n minWidth: minGridW,\n maxWidth: width * 0.975 > minGridW ? width * 0.975 : minGridW,\n minHeight: minGridH,\n maxHeight: (height - pxOuterMenuH - pxPanelHeaderH) * 0.975 > minGridH ? (height - pxOuterMenuH - pxPanelHeaderH) * 0.975 : minGridH\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n fixedHeader: false,\n fixedColumns: 0,\n reload: false\n });\n\n //Состояние фильтра\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n isOpen: false,\n isDefault: false,\n isSetByUser: false,\n needSave: false,\n values: {\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 1990,\n toMonth: 1,\n toYear: 1990\n }\n });\n\n //Состояние ячейки заголовка даты (по раскрытию/скрытию)\n const [activeRef, setActiveRef] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n\n //Состояние актуальности ссылки на ячейку\n const [refIsDeprecated, setRidFlag] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_5__[\"MessagingСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.values.belong,\n SPRODOBJ: filter.values.prodObj,\n STECHSERV: filter.values.techServ,\n SRESPDEP: filter.values.respDep,\n NFROMMONTH: filter.values.fromMonth,\n NFROMYEAR: filter.values.fromYear,\n NTOMONTH: filter.values.toMonth,\n NTOYEAR: filter.values.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XROWS != null) {\n data.XROWS.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n let info2 = properties.find(element => {\n return element.name === \"SINFO2\";\n });\n if (info2 != undefined) {\n if (info2.data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (info2.data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_6__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //Загрузка значений фильтра по умолчанию\n const loadDefaultFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_DEFAULT_FP\",\n respArg: \"COUT\"\n });\n setFilter(pv => ({\n ...pv,\n values: {\n ...pv.values,\n belong: data.JURPERS,\n fromMonth: 1,\n fromYear: data.YEAR,\n toMonth: 12,\n toYear: data.YEAR\n },\n isDefault: true\n }));\n }, [executeStored]);\n\n //Загрузка значений фильтра из локального хранилища браузера\n const loadLocalFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n let vs = filter.values;\n Object.keys(vs).map(function (k) {\n vs[k] = k == \"fromMonth\" || k == \"fromYear\" || k == \"toMonth\" || k == \"toYear\" ? Number(localStorage.getItem(k)) : localStorage.getItem(k);\n });\n setFilter(pv => ({\n ...pv,\n isDefault: true,\n values: {\n ...vs\n }\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты\n const showEquipSrv = async ({\n date,\n workType,\n info\n }) => {\n const [techName, servKind] = info.split(\"_\");\n let type;\n if (workType == \"План\") type = 0;else type = 1;\n let [year, month, day] = date.substring(1).split(\"_\");\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.SELECT_EQUIPSRV\",\n args: {\n SBELONG: filter.values.belong,\n SPRODOBJ: filter.values.prodObj,\n STECHSERV: filter.values.techServ ? filter.values.techServ : null,\n SRESPDEP: filter.values.respDep ? filter.values.respDep : null,\n STECHNAME: techName,\n SSRVKIND: servKind,\n NYEAR: Number(year),\n NMONTH: Number(month),\n NDAY: day ? Number(day) : null,\n NWORKTYPE: type\n }\n });\n if (data.NIDENT) {\n if (type == 0) pOnlineShowUnit({\n unitCode: \"EquipTechServices\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });else pOnlineShowUnit({\n unitCode: \"EquipRepairSheets\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_7__.TEXTS.NO_DATA_FOUND);\n };\n\n //Показать/скрыть фильтр\n const setFilterOpen = isOpen => setFilter(pv => ({\n ...pv,\n isOpen\n }));\n\n //Установить значение фильтра\n const setFilterValues = values => setFilter(pv => ({\n ...pv,\n isSetByUser: true,\n needSave: true,\n values: {\n ...values\n }\n }));\n\n //Отработка события скрытия/раскрытия ячейки даты\n const handleClick = (e, ref) => {\n const curCell = ref.current;\n if (e.target.type == \"button\" || e.target.offsetParent.type == \"button\") {\n setActiveRef(curCell);\n setRidFlag(false);\n }\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n //При изменении фильтра\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filter.isSetByUser) setDataGrid({\n reload: true\n });\n }, [filter.isSetByUser, filter.values.belong, filter.values.prodObj, filter.values.techServ, filter.values.respDep, filter.values.fromMonth, filter.values.fromYear, filter.values.toMonth, filter.values.toYear]);\n\n //При нажатии скрытии/раскрытии ячейки даты, фокус на неё\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!refIsDeprecated) {\n if (activeRef) {\n var cellRect = activeRef.getBoundingClientRect();\n window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);\n setRidFlag(true);\n }\n }\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refIsDeprecated]);\n\n //При закрытии панели\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n filter.needSave ? window.addEventListener(\"beforeunload\", function () {\n Object.keys(filter.values).map(function (k) {\n localStorage.setItem(k, filter.values[k]);\n });\n }) : null;\n }, [filter.needSave, filter.values]);\n\n //При загрузке фильтра по умолчанию\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filter.isDefault) setFilterOpen(true);\n }, [filter.isDefault]);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n localStorage.getItem(\"belong\") ? loadLocalFilter() : loadDefaultFilter();\n }, [loadDefaultFilter, loadLocalFilter]);\n\n //При открытии диалога фильтра\n const handleFilterClick = () => setFilterOpen(true);\n\n //При изменении фильтра в диалоге\n const handleFilterOk = filter => {\n setFilterValues(filter);\n setFilterOpen(false);\n };\n\n //При закрытии диалога фильтра\n const handleFilterCancel = () => setFilterOpen(false);\n\n //Состояние ширины и высоты рабочей области окна\n const [width, height] = (0,_hooks__WEBPACK_IMPORTED_MODULE_10__.useWindowResize)();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, filter.isOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_filter_dialog__WEBPACK_IMPORTED_MODULE_9__.FilterDialog, {\n initial: filter.values,\n onOk: handleFilterOk,\n onCancel: handleFilterCancel\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_filter__WEBPACK_IMPORTED_MODULE_8__.Filter, {\n filter: filter.values,\n onClick: handleFilterClick\n }), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: {\n ...STYLES.GRID_PADDING,\n ...STYLES.BOX_ROW\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n style: {\n ...STYLES.GRID_SIZES(width, height)\n }\n },\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.headCellRender)({\n ...prms\n }, handleClick),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.dataCellRender)({\n ...prms\n }, width * 0.2, showEquipSrv),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n }))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ EqsPrfrm: () => (/* binding */ EqsPrfrm)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./layouts */ \"./app/panels/eqs_prfrm/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _filter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./filter */ \"./app/panels/eqs_prfrm/filter.js\");\n/* harmony import */ var _filter_dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./filter_dialog */ \"./app/panels/eqs_prfrm/filter_dialog.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./hooks */ \"./app/panels/eqs_prfrm/hooks.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ТОиР - Выполнение работ\r\n Панель мониторинга: Корневая панель выполнения работ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Дополнительная разметка и вёрстка клиентских элементов\n //Тектовые ресурсы и константы\n //Компонент фильтра\n //Компонент диалогового окна фильтра отбора\n //Пользовательские хуки\n\n//---------\n//Константы\n//---------\n\n//Высота меню Парус (пиксели)\nconst pxOuterMenuH = 53;\n//Высота заголовка панели (пиксели)\nconst pxPanelHeaderH = 64;\n//Минимальная ширина таблицы (пиксели)\nconst minGridW = 800;\n//Минимальная высота таблицы (пиксели)\nconst minGridH = 200;\n\n//Стили\nconst STYLES = {\n BOX_ROW: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n GRID_PADDING: {\n paddingTop: 1,\n paddingBottom: 1\n },\n GRID_SIZES: (width, height) => ({\n padding: \"0px\",\n minWidth: minGridW,\n maxWidth: width * 0.975 > minGridW ? width * 0.975 : minGridW,\n minHeight: minGridH,\n maxHeight: (height - pxOuterMenuH - pxPanelHeaderH) * 0.975 > minGridH ? (height - pxOuterMenuH - pxPanelHeaderH) * 0.975 : minGridH\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выполнения работ\nconst EqsPrfrm = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n fixedHeader: false,\n fixedColumns: 0,\n reload: false\n });\n\n //Состояние фильтра\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n isOpen: false,\n isDefault: false,\n isSetByUser: false,\n needSave: false,\n values: {\n belong: \"\",\n prodObj: \"\",\n techServ: \"\",\n respDep: \"\",\n fromMonth: 1,\n fromYear: 1990,\n toMonth: 1,\n toYear: 1990\n }\n });\n\n //Состояние ячейки заголовка даты (по раскрытию/скрытию)\n const [activeRef, setActiveRef] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)();\n\n //Состояние актуальности ссылки на ячейку\n const [refIsDeprecated, setRidFlag] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_4__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"BackEndСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_5__[\"MessagingСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.EQUIPSRV_GRID\",\n args: {\n SBELONG: filter.values.belong,\n SPRODOBJ: filter.values.prodObj,\n STECHSERV: filter.values.techServ,\n SRESPDEP: filter.values.respDep,\n NFROMMONTH: filter.values.fromMonth,\n NFROMYEAR: filter.values.fromYear,\n NTOMONTH: filter.values.toMonth,\n NTOYEAR: filter.values.toYear\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"caption\", \"name\", \"parent\"].includes(name) ? undefined : val\n });\n let cP = 0;\n let sP = 0;\n let cF = 0;\n let sF = 0;\n let properties = [];\n if (data.XDATA_GRID.rows != null) {\n data.XDATA_GRID.rows.map(row => {\n properties = [];\n Object.entries(row).forEach(([key, value]) => properties.push({\n name: key,\n data: value\n }));\n let info2 = properties.find(element => {\n return element.name === \"SINFO2\";\n });\n if (info2 != undefined) {\n if (info2.data == \"План\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cP = cP + 1;\n });\n } else if (info2.data == \"Факт\") {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.DAY_NAME_REG_EXP.test(p.name)) cF = cF + 1;\n });\n }\n } else {\n properties.map(p => {\n if (_layouts__WEBPACK_IMPORTED_MODULE_6__.MONTH_NAME_REG_EXP.test(p.name)) {\n let str = p.data;\n let m = [];\n let i = 0;\n while ((m = _layouts__WEBPACK_IMPORTED_MODULE_6__.DIGITS_REG_EXP.exec(str)) != null) {\n if (i == 0) sP = sP + Number(m[0].replace(\",\", \".\"));else {\n sF = sF + Number(m[0].replace(\",\", \".\"));\n }\n i++;\n }\n }\n });\n }\n });\n }\n setDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: [...(data.XDATA_GRID.rows || [])],\n groups: [...(data.XDATA_GRID.groups || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, filter, executeStored]);\n\n //Загрузка значений фильтра по умолчанию\n const loadDefaultFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.GET_DEFAULT_FP\",\n respArg: \"COUT\"\n });\n setFilter(pv => ({\n ...pv,\n values: {\n ...pv.values,\n belong: data.JURPERS,\n fromMonth: 1,\n fromYear: data.YEAR,\n toMonth: 12,\n toYear: data.YEAR\n },\n isDefault: true\n }));\n }, [executeStored]);\n\n //Загрузка значений фильтра из локального хранилища браузера\n const loadLocalFilter = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n let vs = filter.values;\n Object.keys(vs).map(function (k) {\n vs[k] = k == \"fromMonth\" || k == \"fromYear\" || k == \"toMonth\" || k == \"toYear\" ? Number(localStorage.getItem(k)) : localStorage.getItem(k);\n });\n setFilter(pv => ({\n ...pv,\n isDefault: true,\n values: {\n ...vs\n }\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Отбор документа (ТОиР или Ремонтных ведомостей) по ячейке даты\n const showEquipSrv = async ({\n date,\n workType,\n info\n }) => {\n const [techName, servKind] = info.split(\"_\");\n let type;\n if (workType == \"План\") type = 0;else type = 1;\n let [year, month, day] = date.substring(1).split(\"_\");\n const data = await executeStored({\n stored: \"PKG_P8PANELS_EQUIPSRV.SELECT_EQUIPSRV\",\n args: {\n SBELONG: filter.values.belong,\n SPRODOBJ: filter.values.prodObj,\n STECHSERV: filter.values.techServ ? filter.values.techServ : null,\n SRESPDEP: filter.values.respDep ? filter.values.respDep : null,\n STECHNAME: techName,\n SSRVKIND: servKind,\n NYEAR: Number(year),\n NMONTH: Number(month),\n NDAY: day ? Number(day) : null,\n NWORKTYPE: type\n }\n });\n if (data.NIDENT) {\n if (type == 0) pOnlineShowUnit({\n unitCode: \"EquipTechServices\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });else pOnlineShowUnit({\n unitCode: \"EquipRepairSheets\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_7__.TEXTS.NO_DATA_FOUND);\n };\n\n //Показать/скрыть фильтр\n const setFilterOpen = isOpen => setFilter(pv => ({\n ...pv,\n isOpen\n }));\n\n //Установить значение фильтра\n const setFilterValues = values => setFilter(pv => ({\n ...pv,\n isSetByUser: true,\n needSave: true,\n values: {\n ...values\n }\n }));\n\n //Отработка события скрытия/раскрытия ячейки даты\n const handleClick = (e, ref) => {\n const curCell = ref.current;\n if (e.target.type == \"button\" || e.target.offsetParent.type == \"button\") {\n setActiveRef(curCell);\n setRidFlag(false);\n }\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [loadData, dataGrid.reload]);\n\n //При изменении фильтра\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filter.isSetByUser) setDataGrid({\n reload: true\n });\n }, [filter.isSetByUser, filter.values.belong, filter.values.prodObj, filter.values.techServ, filter.values.respDep, filter.values.fromMonth, filter.values.fromYear, filter.values.toMonth, filter.values.toYear]);\n\n //При нажатии скрытии/раскрытии ячейки даты, фокус на неё\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (!refIsDeprecated) {\n if (activeRef) {\n var cellRect = activeRef.getBoundingClientRect();\n window.scrollTo(window.scrollX + cellRect.left + activeRef.clientWidth / 2 - window.innerWidth / 2, 0);\n setRidFlag(true);\n }\n }\n //eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refIsDeprecated]);\n\n //При закрытии панели\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n filter.needSave ? window.addEventListener(\"beforeunload\", function () {\n Object.keys(filter.values).map(function (k) {\n localStorage.setItem(k, filter.values[k]);\n });\n }) : null;\n }, [filter.needSave, filter.values]);\n\n //При загрузке фильтра по умолчанию\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filter.isDefault) setFilterOpen(true);\n }, [filter.isDefault]);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n localStorage.getItem(\"belong\") ? loadLocalFilter() : loadDefaultFilter();\n }, [loadDefaultFilter, loadLocalFilter]);\n\n //При открытии диалога фильтра\n const handleFilterClick = () => setFilterOpen(true);\n\n //При изменении фильтра в диалоге\n const handleFilterOk = filter => {\n setFilterValues(filter);\n setFilterOpen(false);\n };\n\n //При закрытии диалога фильтра\n const handleFilterCancel = () => setFilterOpen(false);\n\n //Состояние ширины и высоты рабочей области окна\n const [width, height] = (0,_hooks__WEBPACK_IMPORTED_MODULE_10__.useWindowResize)();\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, filter.isOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_filter_dialog__WEBPACK_IMPORTED_MODULE_9__.FilterDialog, {\n initial: filter.values,\n onOk: handleFilterOk,\n onCancel: handleFilterCancel\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_filter__WEBPACK_IMPORTED_MODULE_8__.Filter, {\n filter: filter.values,\n onClick: handleFilterClick\n }), dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: {\n ...STYLES.GRID_PADDING,\n ...STYLES.BOX_ROW\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n style: {\n ...STYLES.GRID_SIZES(width, height)\n }\n },\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n headCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.headCellRender)({\n ...prms\n }, handleClick),\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.dataCellRender)({\n ...prms\n }, width * 0.2, showEquipSrv),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_6__.groupCellRender)({\n ...prms\n }),\n showCellRightBorder: true\n }))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/eqs_prfrm/eqs_prfrm.js?"); /***/ }), @@ -4888,7 +4888,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n planSpecs: [],\n planSpecsLoaded: false,\n selectedPlanSpec: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planSpecs: [...(data?.XFCPRODPLAN_INFO || [])],\n planSpecsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlanSpec: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlanSpec: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n planSpecs: [],\n planSpecsLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = planSpec => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLANSP: planSpec\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL,\n selectedProduct: null\n }));\n };\n if (planSpec) loadData();\n }, [planSpec, executeStored]);\n\n //Вернём данные\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (planSpec, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NFCPRODPLANSP: planSpec,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\",\n loader: false\n });\n setData(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE,\n init: true\n }));\n } finally {\n setLoading(false);\n }\n };\n if (planSpec && product) loadData();\n }, [planSpec, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostProductComposition: () => (/* binding */ useCostProductComposition),\n/* harmony export */ useFilteredPlanCtlgs: () => (/* binding */ useFilteredPlanCtlgs),\n/* harmony export */ useMechRecAssemblyMon: () => (/* binding */ useMechRecAssemblyMon),\n/* harmony export */ useProductDetailsTable: () => (/* binding */ useProductDetailsTable)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlanCtlgs = (planCtlgs, filter) => {\n const filteredPlanCtlgs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return planCtlgs.filter(catalog => catalog.SNAME.toString().toLowerCase().includes(filter.ctlgName) && (filter.haveDocs ? catalog.NCOUNT_DOCS > 0 : catalog.NCOUNT_DOCS >= 0));\n }, [planCtlgs, filter]);\n return filteredPlanCtlgs;\n};\n\n//Хук для основной таблицы панели\nconst useMechRecAssemblyMon = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlg: {},\n planSpecs: [],\n planSpecsLoaded: false,\n selectedPlanSpec: {}\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_AM_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Получение информации о планах каталога\n const loadPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NCRN => {\n if (NCRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_GET\",\n args: {\n NCRN: NCRN\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_INFO\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planSpecs: [...(data?.XFCPRODPLAN_INFO || [])],\n planSpecsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [executeStored]);\n\n //Выбор каталога планов\n const selectPlanCtlg = planCtlg => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: {\n ...planCtlg\n },\n selectedPlanSpec: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlanSpec: {},\n showPlanList: false\n }));\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При изменении каталога\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если каталог выбран\n if (state.selectedPlanCtlg) {\n loadPlans(state.selectedPlanCtlg.NRN);\n } else {\n setState(pv => ({\n ...pv,\n planSpecs: [],\n planSpecsLoaded: false\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.selectedPlanCtlg]);\n return [state, setState, selectPlanCtlg, unselectPlanCtlg];\n};\n\n//Хук для информации по производственным составам\nconst useCostProductComposition = planSpec => {\n //Собственное состояние\n let [costProductComposition, setCostProductComposition] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n showPlanList: false,\n products: [],\n productsLoaded: false,\n model: null,\n selectedProduct: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET\",\n args: {\n NFCPRODPLANSP: planSpec\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODCMP\"\n });\n setCostProductComposition(pv => ({\n ...pv,\n products: [...(data?.XFCPRODCMP || [])],\n productsLoaded: true,\n model: data?.BMODEL,\n selectedProduct: null\n }));\n };\n if (planSpec) loadData();\n }, [planSpec, executeStored]);\n\n //Вернём данные\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (planSpec, product, orders, pageNumber, stored) => {\n //Собственное состояние - флаг загрузки\n const [isLoading, setLoading] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Собственное состояние - таблица данных\n const [data, setData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n columnsDef: [],\n rows: [],\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных при изменении зависимостей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n try {\n setLoading(true);\n const data = await executeStored({\n stored,\n args: {\n NFCPRODPLANSP: planSpec,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: pageNumber == 1 ? 1 : 0\n },\n respArg: \"COUT\",\n loader: false\n });\n setData(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n morePages: DATA_GRID_PAGE_SIZE == 0 ? false : (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE,\n init: true\n }));\n } finally {\n setLoading(false);\n }\n };\n if (planSpec && product) loadData();\n }, [planSpec, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Вернём данные\n return {\n data,\n isLoading\n };\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/hooks.js?"); /***/ }), @@ -4910,7 +4910,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecAssemblyMon: () => (/* binding */ MechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/ThemeProvider.js\");\n/* harmony import */ var _components_plans_list__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./components/plans_list */ \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\");\n/* harmony import */ var _components_plan_detail__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/plan_detail */ \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\");\n/* harmony import */ var _styles_themes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./styles/themes */ \"./app/panels/mech_rec_assembly_mon/styles/themes.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Корневая панель мониторинга сборки изделий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Подключение темы\n //Список планов\n //Детали плана\n //Стиль темы\n //Вспомогательные хуки\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\",\n [`& .MuiFormLabel-root.Mui-focused`]: {\n color: \"text.title.fontColor\"\n },\n [`& .MuiInputBase-root`]: {\n color: \"text.plans_finder.fontColor\"\n },\n [`& .MuiInputBase-root.Mui-focused::after`]: {\n borderBottom: \"2px solid black\"\n }\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\",\n [`& .MuiCheckbox-root.Mui-checked`]: {\n color: \"text.title.fontColor\"\n }\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"background.plans_zero_docs\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n backgroundColor: \"background.plans_drawer_paper\",\n color: \"text.plans_finder.fontColor\"\n }\n },\n PLANS_LIST_BOX: {\n paddingTop: \"20px\"\n },\n ROOT_BG: {\n backgroundColor: \"background.main\",\n minHeight: \"calc(100vh - 64px)\",\n overflow: \"hidden\"\n },\n THEME_CHANGER: {\n color: \"text.title.fontColor\"\n },\n MAIN_TITLE: {\n textAlign: \"center\",\n color: \"text.title.fontColor\",\n marginTop: \"-24px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick({\n NRN: p.NRN,\n SNAME: p.SNAME,\n NMIN_YEAR: p.NMIN_YEAR,\n NMAX_YEAR: p.NMAX_YEAR\n }) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n ...STYLES.PLANS_LIST_ITEM_SECONDARY\n }\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель мониторинга сборки изделий\nconst MechRecAssemblyMon = () => {\n //Состояние - текущая тема\n const [theme, setTheme] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_styles_themes__WEBPACK_IMPORTED_MODULE_3__.lightTheme);\n //Собственное состояние\n const [state, setState, selectPlanCtlg, unselectPlanCtlg] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useMechRecAssemblyMon)();\n\n //Состояние фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Состояние навигации по карточкам детализации\n const [planDetailNavigation, setPlanDetailNavigation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n disableNavigatePrev: false,\n disableNavigateNext: false,\n currentPlanIndex: 0\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handlePlanCtlgClick = planCtlg => {\n if (state.selectedPlanCtlg.NRN != planCtlg.NRN) selectPlanCtlg(planCtlg);else unselectPlanCtlg();\n };\n\n //Перемещение к нужному плану\n const navigateToPlan = planIndex => {\n if (planIndex < 0) planIndex = 0;\n if (planIndex > state.planSpecs.length - 1) planIndex = state.planSpecs.length - 1;\n setState(pv => ({\n ...pv,\n selectedPlanSpec: {\n ...state.planSpecs[planIndex]\n }\n }));\n setPlanDetailNavigation(pv => ({\n ...pv,\n disableNavigatePrev: planIndex == 0 ? true : false,\n disableNavigateNext: planIndex == state.planSpecs.length - 1 ? true : false,\n currentPlanIndex: planIndex\n }));\n };\n\n //Обработка нажатия на документ плана\n const handlePlanClick = (plan, planIndex) => navigateToPlan(planIndex);\n\n //Обработка нажатия на кнопку \"Назад\"\n const handlePlanDetailBackClick = () => {\n setState(pv => ({\n ...pv,\n selectedPlanSpec: {}\n }));\n };\n\n //Обработка навигации из карточки с деталями плана\n const handlePlanDetailNavigateClick = direction => navigateToPlan(planDetailNavigation.currentPlanIndex + direction);\n\n //Обработка изменения темы\n const handleThemeChange = () => {\n setTheme(theme.palette.type === \"light\" ? _styles_themes__WEBPACK_IMPORTED_MODULE_3__.darkTheme : _styles_themes__WEBPACK_IMPORTED_MODULE_3__.lightTheme);\n };\n\n //Формирование текста заголовка\n const title = `${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR} ${state.selectedPlanCtlg.NMIN_YEAR == state.selectedPlanCtlg.NMAX_YEAR ? \"г.\" : `- ${state.selectedPlanCtlg.NMAX_YEAR} г.г.`} `;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_styles__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n theme: theme\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n maxWidth: false,\n disableGutters: true,\n sx: STYLES.ROOT_BG\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0438 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg.NRN,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanCtlgClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n onClick: () => handleThemeChange()\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n sx: STYLES.THEME_CHANGER\n }, theme.palette.type === \"light\" ? \"brightness_4\" : \"brightness_7\"))), state.init == true ? state.selectedPlanCtlg.NRN ? state.planSpecs.length !== 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"h3\",\n sx: STYLES.MAIN_TITLE,\n pb: 2\n }, title), state.planSpecsLoaded == true ? state.selectedPlanSpec.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plan_detail__WEBPACK_IMPORTED_MODULE_2__.PlanSpecDetail, {\n planSpec: state.selectedPlanSpec,\n disableNavigatePrev: planDetailNavigation.disableNavigatePrev,\n disableNavigateNext: planDetailNavigation.disableNavigateNext,\n onNavigate: handlePlanDetailNavigateClick,\n onBack: handlePlanDetailBackClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: STYLES.PLANS_LIST_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plans_list__WEBPACK_IMPORTED_MODULE_1__.PlanSpecsList, {\n planSpecs: state.planSpecs,\n onItemClick: handlePlanClick\n })) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"h4\",\n sx: STYLES.MAIN_TITLE\n }, \"\\u0412 \\u043A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0435 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432 \\u043E\\u0442\\u0441\\u0443\\u0442\\u0441\\u0442\\u0432\\u0443\\u044E\\u0442 \\u0437\\u0430\\u043F\\u0438\\u0441\\u0438 \\u043F\\u043E\\u0434\\u0445\\u043E\\u0434\\u044F\\u0449\\u0438\\u0445 \\u043F\\u0435\\u0440\\u0432\\u0438\\u0447\\u043D\\u044B\\u0445 \\u0434\\u043E\\u043A\\u0443\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"h4\",\n sx: STYLES.MAIN_TITLE\n }, \"\\u0423\\u043A\\u0430\\u0436\\u0438\\u0442\\u0435 \\u043A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432 \\u0434\\u043B\\u044F \\u043E\\u0442\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u0438\\u044F \\u0441\\u043F\\u0435\\u0446\\u0438\\u0444\\u0438\\u043A\\u0430\\u0446\\u0438\\u0439\") : null)));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecAssemblyMon: () => (/* binding */ MechRecAssemblyMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_14___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_14__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/ThemeProvider.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_plans_list__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./components/plans_list */ \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\");\n/* harmony import */ var _components_plan_detail__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./components/plan_detail */ \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\");\n/* harmony import */ var _styles_themes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./styles/themes */ \"./app/panels/mech_rec_assembly_mon/styles/themes.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий\r\n Панель мониторинга: Корневая панель мониторинга сборки изделий\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Подключение темы\n //Типовые стили\n //Список планов\n //Детали плана\n //Стиль темы\n //Вспомогательные хуки\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\",\n [`& .MuiFormLabel-root.Mui-focused`]: {\n color: \"text.title.fontColor\"\n },\n [`& .MuiInputBase-root`]: {\n color: \"text.plans_finder.fontColor\"\n },\n [`& .MuiInputBase-root.Mui-focused::after`]: {\n borderBottom: \"2px solid black\"\n }\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\",\n [`& .MuiCheckbox-root.Mui-checked`]: {\n color: \"text.title.fontColor\"\n }\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"background.plans_zero_docs\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n backgroundColor: \"background.plans_drawer_paper\",\n color: \"text.plans_finder.fontColor\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n }\n },\n PLANS_LIST_BOX: {\n paddingTop: \"20px\"\n },\n ROOT_BG: {\n backgroundColor: \"background.main\",\n minHeight: \"calc(100vh - 64px)\",\n overflow: \"hidden\"\n },\n THEME_CHANGER: {\n color: \"text.title.fontColor\"\n },\n MAIN_TITLE: {\n textAlign: \"center\",\n color: \"text.title.fontColor\",\n marginTop: \"-24px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick({\n NRN: p.NRN,\n SNAME: p.SNAME,\n NMIN_YEAR: p.NMIN_YEAR,\n NMAX_YEAR: p.NMAX_YEAR\n }) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: {\n ...STYLES.PLANS_LIST_ITEM_SECONDARY\n }\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель мониторинга сборки изделий\nconst MechRecAssemblyMon = () => {\n //Состояние - текущая тема\n const [theme, setTheme] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(_styles_themes__WEBPACK_IMPORTED_MODULE_4__.lightTheme);\n //Собственное состояние\n const [state, setState, selectPlanCtlg, unselectPlanCtlg] = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useMechRecAssemblyMon)();\n\n //Состояние фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Состояние навигации по карточкам детализации\n const [planDetailNavigation, setPlanDetailNavigation] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n disableNavigatePrev: false,\n disableNavigateNext: false,\n currentPlanIndex: 0\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_5__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handlePlanCtlgClick = planCtlg => {\n if (state.selectedPlanCtlg.NRN != planCtlg.NRN) selectPlanCtlg(planCtlg);else unselectPlanCtlg();\n };\n\n //Перемещение к нужному плану\n const navigateToPlan = planIndex => {\n if (planIndex < 0) planIndex = 0;\n if (planIndex > state.planSpecs.length - 1) planIndex = state.planSpecs.length - 1;\n setState(pv => ({\n ...pv,\n selectedPlanSpec: {\n ...state.planSpecs[planIndex]\n }\n }));\n setPlanDetailNavigation(pv => ({\n ...pv,\n disableNavigatePrev: planIndex == 0 ? true : false,\n disableNavigateNext: planIndex == state.planSpecs.length - 1 ? true : false,\n currentPlanIndex: planIndex\n }));\n };\n\n //Обработка нажатия на документ плана\n const handlePlanClick = (plan, planIndex) => navigateToPlan(planIndex);\n\n //Обработка нажатия на кнопку \"Назад\"\n const handlePlanDetailBackClick = () => {\n setState(pv => ({\n ...pv,\n selectedPlanSpec: {}\n }));\n };\n\n //Обработка навигации из карточки с деталями плана\n const handlePlanDetailNavigateClick = direction => navigateToPlan(planDetailNavigation.currentPlanIndex + direction);\n\n //Обработка изменения темы\n const handleThemeChange = () => {\n setTheme(theme.palette.type === \"light\" ? _styles_themes__WEBPACK_IMPORTED_MODULE_4__.darkTheme : _styles_themes__WEBPACK_IMPORTED_MODULE_4__.lightTheme);\n };\n\n //Формирование текста заголовка\n const title = `${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR} ${state.selectedPlanCtlg.NMIN_YEAR == state.selectedPlanCtlg.NMAX_YEAR ? \"г.\" : `- ${state.selectedPlanCtlg.NMAX_YEAR} г.г.`} `;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_styles__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n theme: theme\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n maxWidth: false,\n disableGutters: true,\n sx: STYLES.ROOT_BG\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0438 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg.NRN,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanCtlgClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n onClick: () => handleThemeChange()\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.THEME_CHANGER\n }, theme.palette.type === \"light\" ? \"brightness_4\" : \"brightness_7\"))), state.init == true ? state.selectedPlanCtlg.NRN ? state.planSpecs.length !== 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"h3\",\n sx: STYLES.MAIN_TITLE,\n pb: 2\n }, title), state.planSpecsLoaded == true ? state.selectedPlanSpec.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plan_detail__WEBPACK_IMPORTED_MODULE_3__.PlanSpecDetail, {\n planSpec: state.selectedPlanSpec,\n disableNavigatePrev: planDetailNavigation.disableNavigatePrev,\n disableNavigateNext: planDetailNavigation.disableNavigateNext,\n onNavigate: handlePlanDetailNavigateClick,\n onBack: handlePlanDetailBackClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.PLANS_LIST_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plans_list__WEBPACK_IMPORTED_MODULE_2__.PlanSpecsList, {\n planSpecs: state.planSpecs,\n onItemClick: handlePlanClick\n })) : null) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"h4\",\n sx: STYLES.MAIN_TITLE\n }, \"\\u0412 \\u043A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0435 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432 \\u043E\\u0442\\u0441\\u0443\\u0442\\u0441\\u0442\\u0432\\u0443\\u044E\\u0442 \\u0437\\u0430\\u043F\\u0438\\u0441\\u0438 \\u043F\\u043E\\u0434\\u0445\\u043E\\u0434\\u044F\\u0449\\u0438\\u0445 \\u043F\\u0435\\u0440\\u0432\\u0438\\u0447\\u043D\\u044B\\u0445 \\u0434\\u043E\\u043A\\u0443\\u043C\\u0435\\u043D\\u0442\\u043E\\u0432\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n variant: \"h4\",\n sx: STYLES.MAIN_TITLE\n }, \"\\u0423\\u043A\\u0430\\u0436\\u0438\\u0442\\u0435 \\u043A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432 \\u0434\\u043B\\u044F \\u043E\\u0442\\u043E\\u0431\\u0440\\u0430\\u0436\\u0435\\u043D\\u0438\\u044F \\u0441\\u043F\\u0435\\u0446\\u0438\\u0444\\u0438\\u043A\\u0430\\u0446\\u0438\\u0439\") : null)));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js?"); /***/ }), @@ -4943,7 +4943,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostJobs: () => (/* binding */ useCostJobs),\n/* harmony export */ useCostJobsSpecs: () => (/* binding */ useCostJobsSpecs),\n/* harmony export */ useEquipConfiguration: () => (/* binding */ useEquipConfiguration),\n/* harmony export */ useFilteredFcjobs: () => (/* binding */ useFilteredFcjobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор сменных заданий по поисковой фразе\nconst useFilteredFcjobs = (jobs, filter) => {\n const filteredJobs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return jobs.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.jobName));\n }, [jobs, filter]);\n return filteredJobs;\n};\n\n//Хук для основной таблицы\nconst useCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showJobList: false,\n jobList: [],\n jobListLoaded: false,\n selectedJob: {},\n fromAction: false\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const initPlans = async fcJob => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {\n NFCJOBS: fcJob ? parseInt(fcJob) : null\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCJOBS\",\n attributeValueProcessor: (name, val) => [\"NHAVE_NOTE\"].includes(name) ? val == 1 : val\n });\n setState(pv => ({\n ...pv,\n init: true,\n jobList: [...(data.XFCJOBS || [])],\n selectedJob: data.XFCJOBS_SELECTED ? data.XFCJOBS_SELECTED : {},\n jobListLoaded: true,\n fromAction: fcJob ? true : false\n }));\n };\n if (!state.init) {\n //Считаем параметры, переданные из действия\n const actionPrms = getNavigationSearch();\n //Иницализируем планы\n initPlans(actionPrms.NRN);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [state, setState];\n};\n\n//Хук для таблицы операций\nconst useCostJobsSpecs = task => {\n //Собственное состояние - таблица данных\n const [costJobsSpecs, setCostJobsSpecs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Выдача задания\n const issueCostJobsSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_ISSUE\",\n args: {\n NFCJOBS: prms.NFCJOBS,\n SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если изменилось сменное задание - обновляем состояние\n if (costJobsSpecs.dataLoaded && costJobsSpecs.task !== task) {\n setCostJobsSpecs(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }\n //Если необходимо перезагрузить\n if (costJobsSpecs.reload) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET\",\n args: {\n NFCJOBS: task,\n NPAGE_NUMBER: costJobsSpecs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(costJobsSpecs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_DEF: costJobsSpecs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostJobsSpecs(pv => ({\n ...pv,\n task: task,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n };\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, costJobsSpecs.dataLoaded, costJobsSpecs.orders, costJobsSpecs.pageNumber, costJobsSpecs.reload, costJobsSpecs.selectedRow, costJobsSpecs.task, executeStored, task]);\n return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs];\n};\n\n//Хук для таблицы рабочих центров\nconst useEquipConfiguration = (task, fromAction) => {\n //Собственное состояние - таблица данных\n const [equipConfiguration, setEquipConfiguration] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Включение станка в строку сменного задания\n const includeEquipConfiguration = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_INC_EQCONFIG\",\n args: {\n NEQCONFIG: prms.NEQCONFIG,\n NFCJOBSSP: prms.NFCJOBSSP,\n NQUANT_PLAN: prms.NQUANT_PLAN\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Исключение станка из строки сменного задания\n const excludeEquipConfiguration = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_EQCONFIG\",\n args: {\n NFCJOBSSP: prms.NFCJOBSSP\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если изменилось сменное задание - обновляем состояние\n if (equipConfiguration.dataLoaded && equipConfiguration.task !== task) {\n setEquipConfiguration(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }\n if (equipConfiguration.reload) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.EQCONFIG_DG_GET\",\n args: {\n NFCJOBS: task,\n NFROM_ACTION: fromAction ? 1 : 0,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(equipConfiguration.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: equipConfiguration.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: equipConfiguration.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setEquipConfiguration(pv => ({\n ...pv,\n task: task,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n };\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, equipConfiguration.dataLoaded, equipConfiguration.orders, equipConfiguration.pageNumber, equipConfiguration.reload, equipConfiguration.selectedRow, equipConfiguration.task, task, executeStored, fromAction]);\n return [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostJobs: () => (/* binding */ useCostJobs),\n/* harmony export */ useCostJobsSpecs: () => (/* binding */ useCostJobsSpecs),\n/* harmony export */ useEquipConfiguration: () => (/* binding */ useEquipConfiguration),\n/* harmony export */ useFilteredFcjobs: () => (/* binding */ useFilteredFcjobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 50;\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор сменных заданий по поисковой фразе\nconst useFilteredFcjobs = (jobs, filter) => {\n const filteredJobs = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return jobs.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.jobName));\n }, [jobs, filter]);\n return filteredJobs;\n};\n\n//Хук для основной таблицы\nconst useCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showJobList: false,\n jobList: [],\n jobListLoaded: false,\n selectedJob: {},\n fromAction: false\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_2__.NavigationCtx);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const initPlans = async fcJob => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {\n NFCJOBS: fcJob ? parseInt(fcJob) : null\n },\n respArg: \"COUT\",\n isArray: name => name === \"XFCJOBS\",\n attributeValueProcessor: (name, val) => [\"NHAVE_NOTE\"].includes(name) ? val == 1 : val\n });\n setState(pv => ({\n ...pv,\n init: true,\n jobList: [...(data.XFCJOBS || [])],\n selectedJob: data.XFCJOBS_SELECTED ? data.XFCJOBS_SELECTED : {},\n jobListLoaded: true,\n fromAction: fcJob ? true : false\n }));\n };\n if (!state.init) {\n //Считаем параметры, переданные из действия\n const actionPrms = getNavigationSearch();\n //Иницализируем планы\n initPlans(actionPrms.NRN);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [state, setState];\n};\n\n//Хук для таблицы операций\nconst useCostJobsSpecs = task => {\n //Собственное состояние - таблица данных\n const [costJobsSpecs, setCostJobsSpecs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Выдача задания\n const issueCostJobsSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_ISSUE\",\n args: {\n NFCJOBS: prms.NFCJOBS,\n SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если изменилось сменное задание - обновляем состояние\n if (costJobsSpecs.dataLoaded && costJobsSpecs.task !== task) {\n setCostJobsSpecs(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }\n //Если необходимо перезагрузить\n if (costJobsSpecs.reload) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET\",\n args: {\n NFCJOBS: task,\n NPAGE_NUMBER: costJobsSpecs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(costJobsSpecs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_DEF: costJobsSpecs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostJobsSpecs(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n task: task,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n };\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, costJobsSpecs.dataLoaded, costJobsSpecs.orders, costJobsSpecs.pageNumber, costJobsSpecs.reload, costJobsSpecs.selectedRow, costJobsSpecs.task, executeStored, task]);\n return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs];\n};\n\n//Хук для таблицы рабочих центров\nconst useEquipConfiguration = (task, fromAction) => {\n //Собственное состояние - таблица данных\n const [equipConfiguration, setEquipConfiguration] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Включение станка в строку сменного задания\n const includeEquipConfiguration = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_INC_EQCONFIG\",\n args: {\n NEQCONFIG: prms.NEQCONFIG,\n NFCJOBSSP: prms.NFCJOBSSP,\n NQUANT_PLAN: prms.NQUANT_PLAN\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Исключение станка из строки сменного задания\n const excludeEquipConfiguration = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_EQCONFIG\",\n args: {\n NFCJOBSSP: prms.NFCJOBSSP\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если изменилось сменное задание - обновляем состояние\n if (equipConfiguration.dataLoaded && equipConfiguration.task !== task) {\n setEquipConfiguration(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRow: {},\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }\n if (equipConfiguration.reload) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.EQCONFIG_DG_GET\",\n args: {\n NFCJOBS: task,\n NFROM_ACTION: fromAction ? 1 : 0,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(equipConfiguration.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: equipConfiguration.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: equipConfiguration.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setEquipConfiguration(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n task: task,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n };\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, equipConfiguration.dataLoaded, equipConfiguration.orders, equipConfiguration.pageNumber, equipConfiguration.reload, equipConfiguration.selectedRow, equipConfiguration.task, task, executeStored, fromAction]);\n return [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/hooks.js?"); /***/ }), @@ -4965,7 +4965,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MAIN_HEADER_HEIGHT: () => (/* binding */ MAIN_HEADER_HEIGHT),\n/* harmony export */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs),\n/* harmony export */ SUB_HEADER_HEIGHT: () => (/* binding */ SUB_HEADER_HEIGHT)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_9__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _fcjobssp__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./fcjobssp */ \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Панель мониторинга: Корневая панель выдачи сменного задания\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст сообщений\n //Собственные хуки таблиц\n //Вспомогательные хуки\n\n//---------\n//Константы\n//---------\n\n//Высота основного заголовка\nconst MAIN_HEADER_HEIGHT = \"35px\";\n\n//Высота подзаголовка\nconst SUB_HEADER_HEIGHT = \"35px\";\n\n//Стили\nconst STYLES = {\n MAIN_HEADER: {\n height: MAIN_HEADER_HEIGHT,\n overflow: \"hidden\"\n },\n SUB_HEADER: {\n height: SUB_HEADER_HEIGHT,\n overflow: \"hidden\"\n },\n JOBS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n JOBS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n JOBS_BUTTON: {\n position: \"absolute\"\n },\n JOBS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n CONTAINER: {\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список сменных заданий\nconst JobList = ({\n jobs = [],\n selectedJob,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.JOBS_FINDER,\n name: \"jobFilter\",\n label: \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u043E\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\",\n value: filter.jobName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n jobName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, jobs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedJob.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.JOBS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nJobList.propTypes = {\n jobs: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().array),\n selectedJob: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выдачи сменного задания\nconst MechRecCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useCostJobs)();\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n jobName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredJobs = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilteredFcjobs)(state.jobList, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\n\n //Выбор плана\n const selectJob = job => {\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: job,\n showJobList: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false\n }));\n };\n\n //Обработка нажатия на элемент в списке планов\n const handleJobClick = job => {\n if (state.selectedJob.NRN != job.NRN) selectJob(job);else unselectJob();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.JOBS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showJobList: !pv.showJobList\n }))\n }, \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u044B\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n anchor: \"left\",\n open: state.showJobList,\n onClose: () => setState(pv => ({\n ...pv,\n showJobList: false\n })),\n sx: STYLES.JOBS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(JobList, {\n jobs: filteredJobs,\n selectedJob: state.selectedJob,\n filter: filter,\n setFilter: setFilter,\n onClick: handleJobClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.MAIN_HEADER,\n variant: \"h6\"\n }, `Сменное задание №${state.selectedJob.SDOC_NUMB} на ${state.selectedJob.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.SUB_HEADER,\n variant: \"h6\"\n }, `${state.selectedJob.SSUBDIV}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcjobssp__WEBPACK_IMPORTED_MODULE_2__.CostJobsSpecsDataGrid, {\n task: state.selectedJob.NRN,\n haveNote: state.selectedJob.NHAVE_NOTE,\n fromAction: state.fromAction\n })) : !state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите сменное задание для отображения информации\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MAIN_HEADER_HEIGHT: () => (/* binding */ MAIN_HEADER_HEIGHT),\n/* harmony export */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs),\n/* harmony export */ SUB_HEADER_HEIGHT: () => (/* binding */ SUB_HEADER_HEIGHT)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _fcjobssp__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./fcjobssp */ \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Панель мониторинга: Корневая панель выдачи сменного задания\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовые стили\n //Контекст сообщений\n //Собственные хуки таблиц\n //Вспомогательные хуки\n\n//---------\n//Константы\n//---------\n\n//Высота основного заголовка\nconst MAIN_HEADER_HEIGHT = \"35px\";\n\n//Высота подзаголовка\nconst SUB_HEADER_HEIGHT = \"35px\";\n\n//Стили\nconst STYLES = {\n MAIN_HEADER: {\n height: MAIN_HEADER_HEIGHT,\n overflow: \"hidden\"\n },\n SUB_HEADER: {\n height: SUB_HEADER_HEIGHT,\n overflow: \"hidden\"\n },\n JOBS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n JOBS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n JOBS_BUTTON: {\n position: \"absolute\"\n },\n JOBS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n }\n },\n CONTAINER: {\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Список сменных заданий\nconst JobList = ({\n jobs = [],\n selectedJob,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.JOBS_FINDER,\n name: \"jobFilter\",\n label: \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u043E\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\",\n value: filter.jobName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n jobName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, jobs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedJob.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.JOBS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nJobList.propTypes = {\n jobs: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().array),\n selectedJob: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель выдачи сменного задания\nconst MechRecCostJobs = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostJobs)();\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n jobName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredJobs = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useFilteredFcjobs)(state.jobList, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Выбор плана\n const selectJob = job => {\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: job,\n showJobList: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false\n }));\n };\n\n //Обработка нажатия на элемент в списке планов\n const handleJobClick = job => {\n if (state.selectedJob.NRN != job.NRN) selectJob(job);else unselectJob();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.JOBS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showJobList: !pv.showJobList\n }))\n }, \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u044B\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n anchor: \"left\",\n open: state.showJobList,\n onClose: () => setState(pv => ({\n ...pv,\n showJobList: false\n })),\n sx: STYLES.JOBS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(JobList, {\n jobs: filteredJobs,\n selectedJob: state.selectedJob,\n filter: filter,\n setFilter: setFilter,\n onClick: handleJobClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.MAIN_HEADER,\n variant: \"h6\"\n }, `Сменное задание №${state.selectedJob.SDOC_NUMB} на ${state.selectedJob.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.SUB_HEADER,\n variant: \"h6\"\n }, `${state.selectedJob.SSUBDIV}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcjobssp__WEBPACK_IMPORTED_MODULE_3__.CostJobsSpecsDataGrid, {\n task: state.selectedJob.NRN,\n haveNote: state.selectedJob.NHAVE_NOTE,\n fromAction: state.fromAction\n })) : !state.selectedJob.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите сменное задание для отображения информации\"\n }) : null));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js?"); /***/ }), @@ -4976,7 +4976,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostDeliveryLists: () => (/* binding */ useCostDeliveryLists),\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists),\n/* harmony export */ useGoodsParties: () => (/* binding */ useGoodsParties),\n/* harmony export */ useIncomFromDeps: () => (/* binding */ useIncomFromDeps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 10;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = (task, taskType) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n quantPlanSum: 0,\n uniqueNomns: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n NTYPE: taskType,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DEXEC_DATE\", \"DREL_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE,\n quantPlanSum: data.XROWS ? data.XROWS.reduce((a, b) => a + b[\"NQUANT_PLAN\"], 0) : 0,\n uniqueNomns: data.XROWS ? data.XROWS.reduce((accumulator, current) => {\n if (!accumulator.find(item => item.SMATRES_PLAN_NOMEN === current.SMATRES_PLAN_NOMEN)) {\n accumulator.push(current);\n }\n return accumulator;\n }, []) : []\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n return [costRouteLists, setCostRouteLists];\n};\n\n//Хук для таблицы приходов из подразделений\nconst useIncomFromDeps = (task, taskType) => {\n //Собственное состояние - таблица данных\n const [incomFromDeps, setIncomFromDeps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (incomFromDeps.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n NTYPE: taskType,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(incomFromDeps.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: incomFromDeps.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DWORK_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setIncomFromDeps(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [incomFromDeps.reload, incomFromDeps.orders, incomFromDeps.dataLoaded, incomFromDeps.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [incomFromDeps.reload, loadData]);\n return [incomFromDeps, setIncomFromDeps];\n};\n\n//Хук для таблицы товарных запасов\nconst useGoodsParties = mainRowRN => {\n //Собственное состояние - таблица данных\n const [goodsParties, setGoodsParties] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (goodsParties.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.GOODSPARTIES_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(goodsParties.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: goodsParties.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: goodsParties.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setGoodsParties(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [goodsParties.reload, goodsParties.orders, goodsParties.dataLoaded, goodsParties.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [goodsParties.reload, loadData]);\n return [goodsParties, setGoodsParties];\n};\n\n//Хук для таблицы строк комплектации\nconst useCostDeliveryLists = mainRowRN => {\n //Собственное состояние - таблица данных\n const [costDeliveryLists, setCostDeliveryLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы строк комплектации с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costDeliveryLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVERYLISTSP_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costDeliveryLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costDeliveryLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costDeliveryLists.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name === \"DRES_DATE_TO\" ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setCostDeliveryLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costDeliveryLists.reload, costDeliveryLists.orders, costDeliveryLists.dataLoaded, costDeliveryLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costDeliveryLists.reload, loadData]);\n return [costDeliveryLists, setCostDeliveryLists];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostDeliveryLists: () => (/* binding */ useCostDeliveryLists),\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists),\n/* harmony export */ useGoodsParties: () => (/* binding */ useGoodsParties),\n/* harmony export */ useIncomFromDeps: () => (/* binding */ useIncomFromDeps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 10;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = (task, taskType) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n quantPlanSum: 0,\n uniqueNomns: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n NTYPE: taskType,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DEXEC_DATE\", \"DREL_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE,\n quantPlanSum: data.XDATA_GRID.rows ? data.XDATA_GRID.rows.reduce((a, b) => a + b[\"NQUANT_PLAN\"], 0) : 0,\n uniqueNomns: data.XDATA_GRID.rows ? data.XDATA_GRID.rows.reduce((accumulator, current) => {\n if (!accumulator.find(item => item.SMATRES_PLAN_NOMEN === current.SMATRES_PLAN_NOMEN)) {\n accumulator.push(current);\n }\n return accumulator;\n }, []) : []\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n return [costRouteLists, setCostRouteLists];\n};\n\n//Хук для таблицы приходов из подразделений\nconst useIncomFromDeps = (task, taskType) => {\n //Собственное состояние - таблица данных\n const [incomFromDeps, setIncomFromDeps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (incomFromDeps.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n NTYPE: taskType,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(incomFromDeps.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: incomFromDeps.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DWORK_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setIncomFromDeps(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [incomFromDeps.reload, incomFromDeps.orders, incomFromDeps.dataLoaded, incomFromDeps.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [incomFromDeps.reload, loadData]);\n return [incomFromDeps, setIncomFromDeps];\n};\n\n//Хук для таблицы товарных запасов\nconst useGoodsParties = mainRowRN => {\n //Собственное состояние - таблица данных\n const [goodsParties, setGoodsParties] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (goodsParties.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.GOODSPARTIES_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(goodsParties.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: goodsParties.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: goodsParties.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setGoodsParties(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [goodsParties.reload, goodsParties.orders, goodsParties.dataLoaded, goodsParties.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [goodsParties.reload, loadData]);\n return [goodsParties, setGoodsParties];\n};\n\n//Хук для таблицы строк комплектации\nconst useCostDeliveryLists = mainRowRN => {\n //Собственное состояние - таблица данных\n const [costDeliveryLists, setCostDeliveryLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы строк комплектации с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costDeliveryLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVERYLISTSP_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costDeliveryLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costDeliveryLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: costDeliveryLists.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name === \"DRES_DATE_TO\" ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setCostDeliveryLists(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costDeliveryLists.reload, costDeliveryLists.orders, costDeliveryLists.dataLoaded, costDeliveryLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costDeliveryLists.reload, loadData]);\n return [costDeliveryLists, setCostDeliveryLists];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js?"); /***/ }), @@ -5053,7 +5053,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostProdPlans: () => (/* binding */ MechRecCostProdPlans)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_19___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_19__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_prod_plans/hooks.js\");\n/* harmony import */ var _datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./datagrids/fcroutlst */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\");\n/* harmony import */ var _datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datagrids/incomefromdeps */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Корневая панель производственной программы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст навигации\n //Подключение компонентов к настройкам приложения\n //Заголовок страницы\n //Диаграмма Ганта\n //Вспомогательные функции\n //Вспомогательные хуки\n\n\n\n//---------\n//Константы\n//---------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Поля сортировки\nconst SORT_REP_DATE = \"DREP_DATE\";\nconst SORT_REP_DATE_TO = \"DREP_DATE_TO\";\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n left: \"16px\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n paddingTop: \"24px\"\n },\n GANTT_TITLE: {\n paddingLeft: \"250px\",\n paddingRight: \"250px\"\n },\n SECOND_TABLE: {\n paddingTop: \"30px\"\n },\n TASK_DIALOG_CARD_CONTAINER: {\n padding: \"0px\"\n },\n TASK_DIALOG_LIST_ITEM_ICON: {\n justifyContent: \"center\"\n },\n TASK_DIALOG_ICON: {\n fontSize: \"2rem\"\n },\n TASK_DIALOG_ACTION_CONTAINER: {\n border: 1,\n borderColor: \"text.primary\",\n borderRadius: \"5px\",\n width: \"100%\"\n },\n FILTERS: {\n display: \"table\",\n float: \"right\"\n },\n FILTERS_DATE: {\n display: \"table-cell\",\n verticalAlign: \"middle\"\n },\n FILTERS_LEVEL: {\n display: \"table-cell\",\n verticalAlign: \"middle\",\n paddingLeft: \"15px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Разбор XML с данными спецификации производственной программы\nconst parseProdPlanSpXML = async xmlDoc => {\n const data = await (0,_core_utils__WEBPACK_IMPORTED_MODULE_7__.xml2JSON)({\n xmlDoc,\n attributeValueProcessor: (name, val) => [\"numb\", \"title\"].includes(name) ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_7__.formatDateJSONDateOnly)(val) : val\n });\n return data.XDATA;\n};\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_SECONDARY\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_19___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_19___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_19___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_19___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_19___default().func)\n};\n\n//Генерация диалога задачи\nconst taskDialogRenderer = ({\n task,\n taskColors,\n close,\n handleTaskDetailOpen\n}) => {\n //Стиль и описание для легенды\n const legendDesc = (0,_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.taskLegendDesc)({\n task,\n taskColors\n });\n //Элемент карточки задачи\n const cardItem = ({\n listItemsStyle = {},\n icon,\n primaryText = null,\n secondaryText = null\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n disablePadding: true,\n sx: listItemsStyle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n sx: STYLES.TASK_DIALOG_LIST_ITEM_ICON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.TASK_DIALOG_ICON\n }, icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n primary: primaryText,\n secondary: secondaryText\n })));\n //Собираем содержимое диалога\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], {\n title: task.name,\n titleTypographyProps: {\n variant: \"h6\"\n },\n subheader: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_7__.formatDateRF)(task.start)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_7__.formatDateRF)(task.end)}`,\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n \"aria-label\": \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\",\n onClick: close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, \"close\"))\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n sx: STYLES.TASK_DIALOG_CARD_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, cardItem({\n icon: \"fast_forward\",\n primaryText: `${task.start_fact} ${task.meas}`,\n secondaryText: \"Запущено\"\n }), cardItem({\n icon: \"assessment\",\n primaryText: `${task.main_quant} ${task.meas}`,\n secondaryText: \"Количество план\"\n }), cardItem({\n icon: \"verified\",\n primaryText: `${task.rel_fact} ${task.meas}`,\n secondaryText: \"Количество сдано\"\n }), cardItem({\n icon: \"date_range\",\n primaryText: task.rep_date_to,\n secondaryText: \"Дата выпуска план\"\n }), legendDesc ? cardItem({\n listItemsStyle: legendDesc.style,\n icon: \"palette\",\n secondaryText: legendDesc.text\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n disableSpacing: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n p: 2,\n display: \"flex\",\n justifyContent: \"center\",\n sx: STYLES.TASK_DIALOG_ACTION_CONTAINER\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_7__.hasValue)(task.type) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n size: \"large\",\n variant: \"contained\",\n color: \"primary\",\n onClick: () => handleTaskDetailOpen(task.rn, task.type)\n }, task[\"detail_list\"]) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n color: \"textSecondary\"\n }, `Анализ отклонений недоступен${task[\"detail_list\"] ? `: ${task[\"detail_list\"]}` : \"\"}`))));\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственной программы\nconst MechRecCostProdPlans = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n selectedPlanCtlgGanttDef: {},\n selectedPlanCtlgSpecs: [],\n selectedTaskDetail: null,\n selectedTaskDetailType: null,\n planSpec: null\n });\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_8__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_PP_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Выбор каталога планов\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n selectedPlanCtlgSpecs: [],\n selectedPlanCtlgGanttDef: {},\n showPlanList: false,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n selectedPlanCtlgSpecs: [],\n selectedPlanCtlgGanttDef: {},\n showPlanList: false,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n\n //Загрузка списка спецификаций каталога планов\n const loadPlanCtglSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (level = null, sort = null) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET\",\n args: {\n NCRN: state.selectedPlanCtlg,\n NLEVEL: level,\n SSORT_FIELD: sort,\n NFCPRODPLANSP: state.planSpec\n }\n });\n let doc = await parseProdPlanSpXML(data.COUT);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,\n selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,\n selectedPlanCtlgSort: sort,\n selectedPlanCtlgMenuItems: state.selectedPlanCtlgMenuItems ? state.selectedPlanCtlgMenuItems : [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),\n selectedPlanCtlgSpecsLoaded: true,\n selectedPlanCtlgGanttDef: doc.XGANTT_DEF ? {\n ...doc.XGANTT_DEF\n } : {},\n selectedPlanCtlgSpecs: [...(doc?.XGANTT_TASKS || [])]\n }));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored, state.ident, state.selectedPlanCtlg, state.planSpec]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handleProjectClick = project => {\n if (state.selectedPlanCtlg != project.NRN) selectPlan(project.NRN);else unselectPlan();\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const actionPrms = getNavigationSearch();\n if (actionPrms.NSPRN) setState(pv => ({\n ...pv,\n planSpec: parseInt(actionPrms.NSPRN),\n init: true\n }));else initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При смене выбранного каталога плана или при явном указании позиции спецификации плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlanCtlg || state.planSpec) loadPlanCtglSpecs(null, SORT_REP_DATE_TO);\n }, [state.selectedPlanCtlg, state.planSpec, loadPlanCtglSpecs]);\n\n //Выбор уровня\n const handleChangeSelectLevel = selectedLevel => {\n loadPlanCtglSpecs(selectedLevel, state.selectedPlanCtlgSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgLevel: selectedLevel\n }));\n };\n\n //Выбор сортировки\n const handleChangeSelectSort = selectedSort => {\n loadPlanCtglSpecs(state.selectedPlanCtlgLevel, selectedSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgSort: selectedSort\n }));\n };\n\n //При закрытии окна детализации\n const handleTaskDetailClose = () => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //При открытии окна детализации\n const handleTaskDetailOpen = (taskRn, taskType) => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: taskRn,\n selectedTaskDetailType: taskType\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], null, !state.planSpec ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0438 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_31__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n }))) : null, state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_32__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_32__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedPlanCtlgSpecsLoaded ? state.selectedPlanCtlgSpecs.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Не найдено данных для выбранной позиции плана\" : \"В каталоге планов отсутствуют записи спецификации\"\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], null, state.selectedPlanCtlgMaxLevel ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n sx: STYLES.FILTERS,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n sx: STYLES.FILTERS_DATE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n id: \"select-label-sort\"\n }, \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n labelId: \"select-label-sort\",\n id: \"select-sort\",\n value: state.selectedPlanCtlgSort,\n label: \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\",\n onChange: event => {\n handleChangeSelectSort(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n value: SORT_REP_DATE_TO,\n key: \"1\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n value: SORT_REP_DATE,\n key: \"2\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0437\\u0430\\u043F\\u0443\\u0441\\u043A\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n id: \"select-label-level\"\n }, \"\\u0414\\u043E \\u0443\\u0440\\u043E\\u0432\\u043D\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n labelId: \"select-label-level\",\n id: \"select-level\",\n value: state.selectedPlanCtlgLevel,\n label: \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\",\n onChange: event => {\n handleChangeSelectLevel(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, state.selectedPlanCtlgMenuItems.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n value: el,\n key: el\n }, el))))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_6__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.selectedPlanCtlgGanttDef, {\n containerStyle: STYLES.GANTT_CONTAINER,\n titleStyle: STYLES.GANTT_TITLE,\n tasks: state.selectedPlanCtlgSpecs,\n taskDialogRenderer: prms => taskDialogRenderer({\n ...prms,\n handleTaskDetailOpen\n })\n }))) : !state.selectedPlanCtlg ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Загружаю график для выбранной позиции плана...\" : \"Укажите каталог планов для отображения их спецификаций\"\n })) : null)) : null, state.selectedTaskDetail ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n open: true,\n onClose: handleTaskDetailClose,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_37__[\"default\"], null, [0, 1, 4].includes(state.selectedTaskDetailType) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_9__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_10__.IncomFromDepsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }), state.selectedTaskDetailType === 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n sx: STYLES.SECOND_TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_9__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_38__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n onClick: handleTaskDetailClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecCostProdPlans: () => (/* binding */ MechRecCostProdPlans)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_20___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_20__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormGroup/FormGroup.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_33__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_34__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_35__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Select/Select.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_36__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/MenuItem/MenuItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_37__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_38__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_39__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_prod_plans/hooks.js\");\n/* harmony import */ var _datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datagrids/fcroutlst */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\");\n/* harmony import */ var _datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./datagrids/incomefromdeps */ \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственная программа\r\n Панель мониторинга: Корневая панель производственной программы\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст навигации\n //Подключение компонентов к настройкам приложения\n //Заголовок страницы\n //Типовые стили\n //Диаграмма Ганта\n //Вспомогательные функции\n //Вспомогательные хуки\n //Таблица \"Маршрутные листы\"\n //Таблица \"Приходы из подразделений\"\n\n//---------\n//Константы\n//---------\n\n//Склонения для документов\nconst DECLINATIONS = [\"план\", \"плана\", \"планов\"];\n\n//Поля сортировки\nconst SORT_REP_DATE = \"DREP_DATE\";\nconst SORT_REP_DATE_TO = \"DREP_DATE_TO\";\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_CHECKBOX_HAVEDOCS: {\n alignContent: \"space-around\"\n },\n PLANS_LIST_ITEM_ZERODOCS: {\n backgroundColor: \"#ebecec\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.6rem\",\n textTransform: \"uppercase\"\n },\n PLANS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n left: \"16px\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n paddingTop: \"24px\"\n },\n GANTT_TITLE: {\n paddingLeft: \"250px\",\n paddingRight: \"250px\"\n },\n SECOND_TABLE: {\n paddingTop: \"30px\"\n },\n TASK_DIALOG_CARD_CONTAINER: {\n padding: \"0px\"\n },\n TASK_DIALOG_LIST_ITEM_ICON: {\n justifyContent: \"center\"\n },\n TASK_DIALOG_ICON: {\n fontSize: \"2rem\"\n },\n TASK_DIALOG_ACTION_CONTAINER: {\n border: 1,\n borderColor: \"text.primary\",\n borderRadius: \"5px\",\n width: \"100%\"\n },\n FILTERS: {\n display: \"table\",\n float: \"right\"\n },\n FILTERS_DATE: {\n display: \"table-cell\",\n verticalAlign: \"middle\"\n },\n FILTERS_LEVEL: {\n display: \"table-cell\",\n verticalAlign: \"middle\",\n paddingLeft: \"15px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Разбор XML с данными спецификации производственной программы\nconst parseProdPlanSpXML = async xmlDoc => {\n const data = await (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.xml2JSON)({\n xmlDoc,\n attributeValueProcessor: (name, val) => [\"numb\", \"title\"].includes(name) ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateJSONDateOnly)(val) : val\n });\n return data.XDATA.XGANTT;\n};\n\n//Форматирование для отображения количества документов\nconst formatCountDocs = nCountDocs => {\n //Получаем последнюю цифру в значении\n let num = nCountDocs % 100 % 10;\n //Документов\n if (nCountDocs > 10 && nCountDocs < 20) return `${nCountDocs} ${DECLINATIONS[2]}`;\n //Документа\n if (num > 1 && num < 5) return `${nCountDocs} ${DECLINATIONS[1]}`;\n //Документ\n if (num == 1) return `${nCountDocs} ${DECLINATIONS[0]}`;\n //Документов\n return `${nCountDocs} ${DECLINATIONS[2]}`;\n};\n\n//Список каталогов планов\nconst PlanCtlgsList = ({\n planCtlgs = [],\n selectedPlanCtlg,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\",\n value: filter.ctlgName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n ctlgName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: STYLES.PLANS_CHECKBOX_HAVEDOCS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n checked: filter.haveDocs,\n onChange: event => setFilter(pv => ({\n ...pv,\n haveDocs: event.target.checked\n }))\n }),\n label: \"\\u0422\\u043E\\u043B\\u044C\\u043A\\u043E \\u0441 \\u043F\\u043B\\u0430\\u043D\\u0430\\u043C\\u0438\",\n labelPlacement: \"end\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, planCtlgs.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: p.NCOUNT_DOCS == 0 ? STYLES.PLANS_LIST_ITEM_ZERODOCS : null,\n key: p.NRN,\n selected: p.NRN === selectedPlanCtlg,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_SECONDARY\n }, formatCountDocs(p.NCOUNT_DOCS))\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanCtlgsList.propTypes = {\n planCtlgs: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().array),\n selectedPlanCtlg: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func)\n};\n\n//Генерация диалога задачи\nconst taskDialogRenderer = ({\n task,\n taskColors,\n close,\n handleTaskDetailOpen\n}) => {\n //Стиль и описание для легенды\n const legendDesc = (0,_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.taskLegendDesc)({\n task,\n taskColors\n });\n //Элемент карточки задачи\n const cardItem = ({\n listItemsStyle = {},\n icon,\n primaryText = null,\n secondaryText = null\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n disablePadding: true,\n sx: listItemsStyle\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: STYLES.TASK_DIALOG_LIST_ITEM_ICON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n sx: STYLES.TASK_DIALOG_ICON\n }, icon)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n primary: primaryText,\n secondary: secondaryText\n })));\n //Собираем содержимое диалога\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n title: task.name,\n titleTypographyProps: {\n variant: \"h6\"\n },\n subheader: `${(0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateRF)(task.start)} - ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.formatDateRF)(task.end)}`,\n action: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n \"aria-label\": \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\",\n onClick: close\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], null, \"close\"))\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n sx: STYLES.TASK_DIALOG_CARD_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, cardItem({\n icon: \"fast_forward\",\n primaryText: `${task.start_fact} ${task.meas}`,\n secondaryText: \"Запущено\"\n }), cardItem({\n icon: \"assessment\",\n primaryText: `${task.main_quant} ${task.meas}`,\n secondaryText: \"Количество план\"\n }), cardItem({\n icon: \"verified\",\n primaryText: `${task.rel_fact} ${task.meas}`,\n secondaryText: \"Количество сдано\"\n }), cardItem({\n icon: \"date_range\",\n primaryText: task.rep_date_to,\n secondaryText: \"Дата выпуска план\"\n }), legendDesc ? cardItem({\n listItemsStyle: legendDesc.style,\n icon: \"palette\",\n secondaryText: legendDesc.text\n }) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n disableSpacing: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n p: 2,\n display: \"flex\",\n justifyContent: \"center\",\n sx: STYLES.TASK_DIALOG_ACTION_CONTAINER\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_8__.hasValue)(task.type) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n size: \"large\",\n variant: \"contained\",\n color: \"primary\",\n onClick: () => handleTaskDetailOpen(task.rn, task.type)\n }, task[\"detail_list\"]) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n color: \"textSecondary\"\n }, `Анализ отклонений недоступен${task[\"detail_list\"] ? `: ${task[\"detail_list\"]}` : \"\"}`))));\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственной программы\nconst MechRecCostProdPlans = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n planCtlgs: [],\n planCtlgsLoaded: false,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n gantt: {},\n selectedTaskDetail: null,\n selectedTaskDetailType: null,\n planSpec: null\n });\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ctlgName: \"\",\n haveDocs: false\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_9__.useFilteredPlanCtlgs)(state.planCtlgs, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //Инициализация каталогов планов\n const initPlanCtlgs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_PP_CTLG_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLAN_CRNS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n planCtlgs: [...(data?.XFCPRODPLAN_CRNS || [])],\n planCtlgsLoaded: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Выбор каталога планов\n const selectPlan = project => {\n setState(pv => ({\n ...pv,\n selectedPlanCtlg: project,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n gantt: {},\n showPlanList: false,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlan = () => setState(pv => ({\n ...pv,\n selectedPlanCtlgSpecsLoaded: false,\n selectedPlanCtlg: null,\n selectedPlanCtlgMaxLevel: null,\n selectedPlanCtlgLevel: null,\n selectedPlanCtlgSort: null,\n selectedPlanCtlgMenuItems: null,\n gantt: {},\n showPlanList: false,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n\n //Загрузка списка спецификаций каталога планов\n const loadPlanCtglSpecs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (level = null, sort = null) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_GET\",\n args: {\n NCRN: state.selectedPlanCtlg,\n NLEVEL: level,\n SSORT_FIELD: sort,\n NFCPRODPLANSP: state.planSpec\n }\n });\n let doc = await parseProdPlanSpXML(data.COUT);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgMaxLevel: data.NMAX_LEVEL,\n selectedPlanCtlgLevel: level || level === 0 ? level : data.NMAX_LEVEL,\n selectedPlanCtlgSort: sort,\n selectedPlanCtlgMenuItems: state.selectedPlanCtlgMenuItems ? state.selectedPlanCtlgMenuItems : [...Array(data.NMAX_LEVEL).keys()].map(el => el + 1),\n selectedPlanCtlgSpecsLoaded: true,\n gantt: {\n ...doc,\n tasks: [...(doc?.tasks || [])]\n }\n }));\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored, state.ident, state.selectedPlanCtlg, state.planSpec]);\n\n //Обработка нажатия на элемент в списке каталогов планов\n const handleProjectClick = project => {\n if (state.selectedPlanCtlg != project.NRN) selectPlan(project.NRN);else unselectPlan();\n };\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const actionPrms = getNavigationSearch();\n if (actionPrms.NSPRN) setState(pv => ({\n ...pv,\n planSpec: parseInt(actionPrms.NSPRN),\n init: true\n }));else initPlanCtlgs();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //При смене выбранного каталога плана или при явном указании позиции спецификации плана\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlanCtlg || state.planSpec) loadPlanCtglSpecs(null, SORT_REP_DATE_TO);\n }, [state.selectedPlanCtlg, state.planSpec, loadPlanCtglSpecs]);\n\n //Выбор уровня\n const handleChangeSelectLevel = selectedLevel => {\n loadPlanCtglSpecs(selectedLevel, state.selectedPlanCtlgSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgLevel: selectedLevel\n }));\n };\n\n //Выбор сортировки\n const handleChangeSelectSort = selectedSort => {\n loadPlanCtglSpecs(state.selectedPlanCtlgLevel, selectedSort);\n setState(pv => ({\n ...pv,\n selectedPlanCtlgSort: selectedSort\n }));\n };\n\n //При закрытии окна детализации\n const handleTaskDetailClose = () => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: null,\n selectedTaskDetailType: null\n }));\n };\n\n //При открытии окна детализации\n const handleTaskDetailOpen = (taskRn, taskType) => {\n setState(pv => ({\n ...pv,\n selectedTaskDetail: taskRn,\n selectedTaskDetailType: taskType\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null, !state.planSpec ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_31__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041A\\u0430\\u0442\\u0430\\u043B\\u043E\\u0433\\u0438 \\u043F\\u043B\\u0430\\u043D\\u043E\\u0432\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_32__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg,\n filter: filter,\n setFilter: setFilter,\n onClick: handleProjectClick\n }))) : null, state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_33__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedPlanCtlgSpecsLoaded ? state.gantt.tasks.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Не найдено данных для выбранной позиции плана\" : \"В каталоге планов отсутствуют записи спецификации\"\n })) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null, state.selectedPlanCtlgMaxLevel ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS,\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS_DATE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n id: \"select-label-sort\"\n }, \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n labelId: \"select-label-sort\",\n id: \"select-sort\",\n value: state.selectedPlanCtlgSort,\n label: \"\\u0421\\u043E\\u0440\\u0442\\u0438\\u0440\\u043E\\u0432\\u043A\\u0430\",\n onChange: event => {\n handleChangeSelectSort(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n value: SORT_REP_DATE_TO,\n key: \"1\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n value: SORT_REP_DATE,\n key: \"2\"\n }, \"\\u0414\\u0430\\u0442\\u0430 \\u0437\\u0430\\u043F\\u0443\\u0441\\u043A\\u0430\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.FILTERS_LEVEL\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_34__[\"default\"], {\n id: \"select-label-level\"\n }, \"\\u0414\\u043E \\u0443\\u0440\\u043E\\u0432\\u043D\\u044F\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_35__[\"default\"], {\n labelId: \"select-label-level\",\n id: \"select-level\",\n value: state.selectedPlanCtlgLevel,\n label: \"\\u0423\\u0440\\u043E\\u0432\\u0435\\u043D\\u044C\",\n onChange: event => {\n handleChangeSelectLevel(event.target.value);\n },\n defaultValue: state.selectedPlanCtlgLevel\n }, state.selectedPlanCtlgMenuItems.map(el => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_36__[\"default\"], {\n value: el,\n key: el\n }, el))))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_7__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.gantt, {\n containerStyle: STYLES.GANTT_CONTAINER,\n titleStyle: STYLES.GANTT_TITLE,\n taskDialogRenderer: prms => taskDialogRenderer({\n ...prms,\n handleTaskDetailOpen\n })\n }))) : !state.selectedPlanCtlg ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: state.planSpec ? \"Загружаю график для выбранной позиции плана...\" : \"Укажите каталог планов для отображения их спецификаций\"\n })) : null)) : null, state.selectedTaskDetail ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_37__[\"default\"], {\n open: true,\n onClose: handleTaskDetailClose,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_38__[\"default\"], null, [0, 1, 4].includes(state.selectedTaskDetailType) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_incomefromdeps__WEBPACK_IMPORTED_MODULE_11__.IncomFromDepsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n }), state.selectedTaskDetailType === 3 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], {\n sx: STYLES.SECOND_TABLE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_datagrids_fcroutlst__WEBPACK_IMPORTED_MODULE_10__.CostRouteListsDataGrid, {\n task: state.selectedTaskDetail,\n taskType: state.selectedTaskDetailType\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_39__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n onClick: handleTaskDetailClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js?"); /***/ }), @@ -5086,7 +5086,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useFilter: () => (/* binding */ useFilter),\n/* harmony export */ useInsDepartment: () => (/* binding */ useInsDepartment),\n/* harmony export */ useMechRecDeptCostJobs: () => (/* binding */ useMechRecDeptCostJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Загрузка цеха\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE_SMALL = 5;\nconst DATA_GRID_PAGE_SIZE_LARGE = 12;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для основной таблицы панели\nconst useMechRecDeptCostJobs = (subdiv, fullDate, workHours) => {\n //Собственное состояние - таблица данных\n const [costJobs, setCostJobs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0,\n date: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если указано подразделение и необходимо обновить, либо изменилась дата\n if (subdiv && (costJobs.reload || costJobs.date !== fullDate)) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET\",\n args: {\n NSUBDIV: subdiv,\n SMONTH_YEAR: fullDate,\n NWORKHOURS: workHours,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costJobs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costJobs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: 1\n },\n respArg: \"COUT\"\n });\n setCostJobs(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE,\n date: fullDate\n }));\n };\n loadData();\n }\n }, [costJobs.reload, subdiv, fullDate, costJobs.date, costJobs.orders, costJobs.pageNumber, executeStored, workHours, SERV_DATA_TYPE_CLOB]);\n return [costJobs, setCostJobs];\n};\n\n//Хук таблицы подразделений цехов\nconst useInsDepartment = fullDate => {\n //Собственное состояние\n let [insDepartments, setInsDepartments] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INS_DEPARTMENT_DG_GET\",\n args: {\n SMONTH_YEAR: fullDate,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_SMALL,\n NINCLUDE_DEF: insDepartments.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"DBGNDATE\", \"DENDDATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val\n });\n setInsDepartments(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_SMALL\n }));\n };\n if (insDepartments.reload) {\n loadData();\n }\n }, [executeStored, fullDate, insDepartments.dataLoaded, insDepartments.reload]);\n return [insDepartments, setInsDepartments];\n};\n\n//Хук для диалога фильтра\nconst useFilter = (currentMonth, currentYear) => {\n //Собственное состояние - фильтр\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: true,\n openedDepartment: false,\n date: {\n month: currentMonth,\n year: currentYear,\n fullDate: currentMonth.toString().padStart(2, \"0\") + \".\" + currentYear\n },\n department: {\n NRN: null,\n SCODE: \"\",\n SNAME: \"\"\n },\n workDays: 0,\n workHours: 0,\n totalWorkHours: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Считываем количества рабочих дней\n const getWorkDays = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n newDate,\n init\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.ENPERIOD_WORKDAYS_GET\",\n args: {\n SMONTH_YEAR: newDate.fullDate\n }\n });\n if (init) {\n setFilter(pv => ({\n ...pv,\n workDays: data.NWORKDAYS,\n init: false\n }));\n } else {\n setFilter(pv => ({\n ...pv,\n date: {\n ...newDate\n },\n department: filter.department,\n workDays: data.NWORKDAYS,\n totalWorkHours: data.NWORKDAYS * filter.workHours\n }));\n }\n }, [executeStored, filter]);\n\n //Считываем количество рабочих часов\n const getWorkHours = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async department => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INS_DEPARTMENT_WORKHOURS_GET\",\n args: {\n NSUBDIV: department.NRN\n }\n });\n setFilter(pv => ({\n ...pv,\n openedDepartment: false,\n department: {\n ...department\n },\n workHours: data.NWORKHOURS,\n totalWorkHours: Math.round(filter.workDays * data.NWORKHOURS)\n }));\n }, [executeStored, filter.workDays]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filter.init) {\n getWorkDays({\n newDate: {\n month: filter.date.month,\n year: filter.date.year,\n fullDate: filter.date.fullDate\n },\n init: filter.init\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filter.init]);\n return [filter, setFilter, getWorkDays, getWorkHours];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useFilter: () => (/* binding */ useFilter),\n/* harmony export */ useInsDepartment: () => (/* binding */ useInsDepartment),\n/* harmony export */ useMechRecDeptCostJobs: () => (/* binding */ useMechRecDeptCostJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Загрузка цеха\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE_SMALL = 5;\nconst DATA_GRID_PAGE_SIZE_LARGE = 12;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для основной таблицы панели\nconst useMechRecDeptCostJobs = (subdiv, fullDate, workHours) => {\n //Собственное состояние - таблица данных\n const [costJobs, setCostJobs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0,\n date: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Если указано подразделение и необходимо обновить, либо изменилась дата\n if (subdiv && (costJobs.reload || costJobs.date !== fullDate)) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET\",\n args: {\n NSUBDIV: subdiv,\n SMONTH_YEAR: fullDate,\n NWORKHOURS: workHours,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costJobs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costJobs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: 1\n },\n respArg: \"COUT\"\n });\n setCostJobs(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE,\n date: fullDate\n }));\n };\n loadData();\n }\n }, [costJobs.reload, subdiv, fullDate, costJobs.date, costJobs.orders, costJobs.pageNumber, executeStored, workHours, SERV_DATA_TYPE_CLOB]);\n return [costJobs, setCostJobs];\n};\n\n//Хук таблицы подразделений цехов\nconst useInsDepartment = fullDate => {\n //Собственное состояние\n let [insDepartments, setInsDepartments] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INS_DEPARTMENT_DG_GET\",\n args: {\n SMONTH_YEAR: fullDate,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_SMALL,\n NINCLUDE_DEF: insDepartments.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"DBGNDATE\", \"DENDDATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val\n });\n setInsDepartments(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_SMALL\n }));\n };\n if (insDepartments.reload) {\n loadData();\n }\n }, [executeStored, fullDate, insDepartments.dataLoaded, insDepartments.reload]);\n return [insDepartments, setInsDepartments];\n};\n\n//Хук для диалога фильтра\nconst useFilter = (currentMonth, currentYear) => {\n //Собственное состояние - фильтр\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: true,\n openedDepartment: false,\n date: {\n month: currentMonth,\n year: currentYear,\n fullDate: currentMonth.toString().padStart(2, \"0\") + \".\" + currentYear\n },\n department: {\n NRN: null,\n SCODE: \"\",\n SNAME: \"\"\n },\n workDays: 0,\n workHours: 0,\n totalWorkHours: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Считываем количества рабочих дней\n const getWorkDays = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n newDate,\n init\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.ENPERIOD_WORKDAYS_GET\",\n args: {\n SMONTH_YEAR: newDate.fullDate\n }\n });\n if (init) {\n setFilter(pv => ({\n ...pv,\n workDays: data.NWORKDAYS,\n init: false\n }));\n } else {\n setFilter(pv => ({\n ...pv,\n date: {\n ...newDate\n },\n department: filter.department,\n workDays: data.NWORKDAYS,\n totalWorkHours: data.NWORKDAYS * filter.workHours\n }));\n }\n }, [executeStored, filter]);\n\n //Считываем количество рабочих часов\n const getWorkHours = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async department => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INS_DEPARTMENT_WORKHOURS_GET\",\n args: {\n NSUBDIV: department.NRN\n }\n });\n setFilter(pv => ({\n ...pv,\n openedDepartment: false,\n department: {\n ...department\n },\n workHours: data.NWORKHOURS,\n totalWorkHours: Math.round(filter.workDays * data.NWORKHOURS)\n }));\n }, [executeStored, filter.workDays]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (filter.init) {\n getWorkDays({\n newDate: {\n month: filter.date.month,\n year: filter.date.year,\n fullDate: filter.date.fullDate\n },\n init: filter.init\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filter.init]);\n return [filter, setFilter, getWorkDays, getWorkHours];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/hooks.js?"); /***/ }), @@ -5141,7 +5141,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists),\n/* harmony export */ useCostRouteListsSpecs: () => (/* binding */ useCostRouteListsSpecs),\n/* harmony export */ useDeptCostProdPlans: () => (/* binding */ useDeptCostProdPlans),\n/* harmony export */ useFilteredPlans: () => (/* binding */ useFilteredPlans),\n/* harmony export */ useIncomFromDeps: () => (/* binding */ useIncomFromDeps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE_SMALL = 5;\nconst DATA_GRID_PAGE_SIZE_LARGE = 10;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlans = (plans, filter) => {\n const filteredPlans = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return plans.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.planName));\n }, [plans, filter]);\n return filteredPlans;\n};\n\n//Хук для основной таблицы\nconst useDeptCostProdPlans = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n planList: [],\n planListLoaded: false,\n selectedPlan: {},\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlan.NRN) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET\",\n args: {\n NFCPRODPLAN: state.selectedPlan.NRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(state.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: state.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: state.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => name === \"caption\" ? undefined : val\n });\n setState(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE\n }));\n };\n if (state.reload) {\n loadData();\n }\n }\n }, [state.selectedPlan, state.reload, state.orders, state.pageNumber, state.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const initPlans = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLANS\",\n attributeValueProcessor: (name, val) => name === \"SPERIOD\" ? undefined : val\n });\n setState(pv => ({\n ...pv,\n init: true,\n planList: [...(data?.XFCPRODPLANS || [])],\n planListLoaded: true\n }));\n };\n if (!state.init) {\n initPlans();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [state, setState];\n};\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = task => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n editPriorNRN: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_SMALL,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_SMALL\n }));\n };\n if (costRouteLists.reload && task) {\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, costRouteLists.dataLoaded, costRouteLists.orders, costRouteLists.pageNumber, costRouteLists.reload, executeStored, task]);\n return [costRouteLists, setCostRouteLists];\n};\n\n//Хук для таблицы строк маршрутного листа\nconst useCostRouteListsSpecs = mainRowRN => {\n //Собственное состояние - таблица данных\n const [costRouteListsSpecs, setCostRouteListsSpecs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLSTSP_DEPT_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteListsSpecs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteListsSpecs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: costRouteListsSpecs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteListsSpecs(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE\n }));\n };\n if (costRouteListsSpecs.reload) {\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, costRouteListsSpecs.dataLoaded, costRouteListsSpecs.orders, costRouteListsSpecs.pageNumber, costRouteListsSpecs.reload, executeStored, mainRowRN]);\n return [costRouteListsSpecs, setCostRouteListsSpecs];\n};\n\n//Хук для таблицы сдачи продукции\nconst useIncomFromDeps = task => {\n //Собственное состояние - таблица данных\n const [incomFromDeps, setIncomFromDeps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(incomFromDeps.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: incomFromDeps.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DDUE_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setIncomFromDeps(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE\n }));\n };\n if (incomFromDeps.reload) {\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, executeStored, incomFromDeps.dataLoaded, incomFromDeps.orders, incomFromDeps.pageNumber, incomFromDeps.reload, task]);\n return [incomFromDeps, setIncomFromDeps];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists),\n/* harmony export */ useCostRouteListsSpecs: () => (/* binding */ useCostRouteListsSpecs),\n/* harmony export */ useDeptCostProdPlans: () => (/* binding */ useDeptCostProdPlans),\n/* harmony export */ useFilteredPlans: () => (/* binding */ useFilteredPlans),\n/* harmony export */ useIncomFromDeps: () => (/* binding */ useIncomFromDeps)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE_SMALL = 5;\nconst DATA_GRID_PAGE_SIZE_LARGE = 10;\n\n//-----------\n//Тело модуля\n//-----------\n\n//Клиентский отбор каталогов по поисковой фразе и наличию планов\nconst useFilteredPlans = (plans, filter) => {\n const filteredPlans = react__WEBPACK_IMPORTED_MODULE_0___default().useMemo(() => {\n return plans.filter(catalog => catalog.SDOC_INFO.toString().toLowerCase().includes(filter.planName));\n }, [plans, filter]);\n return filteredPlans;\n};\n\n//Хук для основной таблицы\nconst useDeptCostProdPlans = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showPlanList: false,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n planList: [],\n planListLoaded: false,\n selectedPlan: {},\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlan.NRN) {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET\",\n args: {\n NFCPRODPLAN: state.selectedPlan.NRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(state.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: state.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: state.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => name === \"caption\" ? undefined : val\n });\n setState(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE\n }));\n };\n if (state.reload) {\n loadData();\n }\n }\n }, [state.selectedPlan, state.reload, state.orders, state.pageNumber, state.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const initPlans = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT\",\n args: {},\n respArg: \"COUT\",\n isArray: name => name === \"XFCPRODPLANS\",\n attributeValueProcessor: (name, val) => name === \"SPERIOD\" ? undefined : val\n });\n setState(pv => ({\n ...pv,\n init: true,\n planList: [...(data?.XFCPRODPLANS || [])],\n planListLoaded: true\n }));\n };\n if (!state.init) {\n initPlans();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return [state, setState];\n};\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = task => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n editPriorNRN: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteLists.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteLists.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_SMALL,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteLists(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_SMALL\n }));\n };\n if (costRouteLists.reload && task) {\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, costRouteLists.dataLoaded, costRouteLists.orders, costRouteLists.pageNumber, costRouteLists.reload, executeStored, task]);\n return [costRouteLists, setCostRouteLists];\n};\n\n//Хук для таблицы строк маршрутного листа\nconst useCostRouteListsSpecs = mainRowRN => {\n //Собственное состояние - таблица данных\n const [costRouteListsSpecs, setCostRouteListsSpecs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLSTSP_DEPT_DG_GET\",\n args: {\n NFCROUTLST: mainRowRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costRouteListsSpecs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costRouteListsSpecs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: costRouteListsSpecs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostRouteListsSpecs(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE\n }));\n };\n if (costRouteListsSpecs.reload) {\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, costRouteListsSpecs.dataLoaded, costRouteListsSpecs.orders, costRouteListsSpecs.pageNumber, costRouteListsSpecs.reload, executeStored, mainRowRN]);\n return [costRouteListsSpecs, setCostRouteListsSpecs];\n};\n\n//Хук для таблицы сдачи продукции\nconst useIncomFromDeps = task => {\n //Собственное состояние - таблица данных\n const [incomFromDeps, setIncomFromDeps] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(incomFromDeps.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: incomFromDeps.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE,\n NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => [\"DDUE_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.formatDateRF)(val) : val,\n respArg: \"COUT\"\n });\n setIncomFromDeps(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE_LARGE\n }));\n };\n if (incomFromDeps.reload) {\n loadData();\n }\n }, [SERV_DATA_TYPE_CLOB, executeStored, incomFromDeps.dataLoaded, incomFromDeps.orders, incomFromDeps.pageNumber, incomFromDeps.reload, task]);\n return [incomFromDeps, setIncomFromDeps];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/hooks.js?"); /***/ }), @@ -5174,7 +5174,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecDeptCostProdPlans: () => (/* binding */ MechRecDeptCostProdPlans),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _incomefromdeps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./incomefromdeps */ \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\");\n/* harmony import */ var _fcroutlst__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fcroutlst */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Панель мониторинга: Корневая панель производственного плана цеха\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовые стили\n //Заголовок страницы\n //Вспомогательные хуки\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст сообщений\n //Диалог сдачи продукции\n //Диалог маршрутных листов\n\n//---------\n//Константы\n//---------\n\n//Высота заголовка\nconst TITLE_HEIGHT = \"35px\";\n\n//Верхний отступ заголовка\nconst TITLE_PADDING_TOP = \"10px\";\n\n//Нижний отступ заголовка\nconst TITLE_PADDING_BOTTOM = \"20px\";\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\"\n }\n },\n CONTAINER: {\n textAlign: \"center\"\n },\n TITLE: {\n height: TITLE_HEIGHT,\n overflow: \"hidden\",\n paddingTop: TITLE_PADDING_TOP,\n paddingBottom: TITLE_PADDING_BOTTOM,\n display: \"inline-table\"\n },\n DATA_GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${TITLE_PADDING_TOP} - ${TITLE_PADDING_BOTTOM} - 29px)`,\n width: \"98vw\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n },\n DATA_GRID_GROUP_CELL: {\n padding: \"2px\"\n },\n DATA_GRID_CELL: {\n padding: \"8px\",\n maxWidth: \"300px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\"\n },\n DATA_GRID_CELL_STATUS: (currentStyle, row) => ({\n backgroundColor: getRowBackgroudColor(row),\n ...currentStyle\n }),\n DATA_GRID_CELL_PLAN_FACT: currentStyle => ({\n ...currentStyle,\n backgroundColor: \"lightgrey\"\n }),\n DATA_GRID_CELL_MATRES_CODE: (currentStyle, row) => ({\n backgroundColor: getRowBackgroudColor(row),\n ...currentStyle\n }),\n PLAN_FACT_VALUE: {\n textAlign: \"center\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n PLAN_FACT_DELIMITER: {\n padding: \"0px 5px\"\n },\n FACT_VALUE: {\n color: \"blue\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = ({\n group\n}) => ({\n cellStyle: STYLES.DATA_GRID_GROUP_CELL,\n data: group.caption\n});\n\n//Вычисление цвета заливки для строки\nconst getRowBackgroudColor = row => {\n //Факт === План\n if (row[\"NMAIN_QUANT\"] === row[\"NREL_FACT\"]) return \"lightgreen\";\n //План <= (Факт + Запущено)\n if (row[\"NMAIN_QUANT\"] <= row[\"NREL_FACT\"] + row[\"NFCROUTLST_QUANT\"]) return \"lightblue\";\n //Сумма \"Количество план\" = 0 или < \"План\"\n if (row[\"NSUM_PLAN\"] === 0 || row[\"NSUM_PLAN\"] !== 0 && row[\"NSUM_PLAN\"] < row[\"NMAIN_QUANT\"]) {\n //\"Факт\" >= \"План\"\n if (row[\"NREL_FACT\"] >= row[\"NMAIN_QUANT\"]) return \"#F0E68C\";\n } else {\n //Сумма \"Количество факт\" >= сумма \"Количество план\"\n if (row[\"NSUM_FACT\"] >= row[\"NSUM_PLAN\"]) return \"#F0E68C\";\n }\n return \"lightcoral\";\n};\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef,\n handleProdOrderClick,\n handleMatresCodeClick\n}) => {\n //Описываем общие свойства\n let cellProps = {\n title: row[columnDef.name]\n };\n //Описываем общий стиль\n let cellStyle = STYLES.DATA_GRID_CELL;\n //Для колонки \"Статус\"\n if (columnDef.name === \"SSTATUS\") return {\n cellProps,\n cellStyle: STYLES.DATA_GRID_CELL_STATUS(cellStyle, row),\n data: row[columnDef]\n };\n //Для колонки даты\n if (columnDef.name.indexOf(\"PLAN_FACT\") >= 0) {\n //Получаем текущий день\n let curDay = new Date().getDate().toString().padStart(2, \"0\");\n //Формируем regex для проверки\n let regex = new RegExp(`N_${curDay}.*`, \"g\");\n //Если это значение текущего дня\n if (columnDef.name.match(regex)) cellStyle = STYLES.DATA_GRID_CELL_PLAN_FACT(cellStyle);\n //Если в колонке есть значение\n if (row[columnDef.name]) {\n //Разбиваем его на план/факт\n let values = row[columnDef.name].split(\"/\");\n //Разбиваем значения на блоки\n return {\n cellProps,\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PLAN_FACT_VALUE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, values[0]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PLAN_FACT_DELIMITER\n }, \"/\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.FACT_VALUE\n }, values[1]))\n };\n } else return {\n cellProps,\n cellStyle,\n data: row[columnDef]\n };\n }\n //Для колонки \"Заказ\"\n if (columnDef.name === \"SPROD_ORDER\") {\n return {\n cellProps,\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => handleProdOrderClick(row[\"NRN\"])\n }, row[columnDef.name])\n };\n }\n //Для колонки \"Обозначение\"\n if (columnDef.name === \"SMATRES_CODE\") return {\n cellProps,\n cellStyle: STYLES.DATA_GRID_CELL_MATRES_CODE(cellStyle, row),\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => handleMatresCodeClick(row[\"NRN\"])\n }, row[columnDef.name])\n };\n //Для всех остальных\n return {\n cellProps,\n cellStyle,\n data: row[columnDef]\n };\n};\n\n//Список каталогов планов\nconst PlanList = ({\n plans = [],\n selectedPlan,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041F\\u043B\\u0430\\u043D\",\n value: filter.planName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n planName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, plans.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedPlan.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanList.propTypes = {\n plans: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().array),\n selectedPlan: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственного плана цеха\nconst MechRecDeptCostProdPlans = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useDeptCostProdPlans)();\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n planName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilteredPlans)(state.planList, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Выбор плана\n const selectPlan = plan => {\n setState(pv => ({\n ...pv,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n selectedPlan: plan,\n showPlanList: false,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n };\n\n //Сброс выбора плана\n const unselectPlan = () => setState(pv => ({\n ...pv,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n selectedPlan: {},\n showPlanList: false,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n\n //Обработка нажатия на элемент в списке планов\n const handlePlanClick = plan => {\n if (state.selectedPlan.NRN != plan.NRN) selectPlan(plan);else unselectPlan();\n };\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на \"Заказ\"\n const handleProdOrderClick = planSp => {\n setState(pv => ({\n ...pv,\n showIncomeFromDeps: planSp\n }));\n };\n\n //При нажатии на \"Обозначение\"\n const handleMatresCodeClick = planSp => {\n setState(pv => ({\n ...pv,\n showFcroutelst: planSp\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u043B\\u0430\\u043D\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanList, {\n plans: filteredPlanCtgls,\n selectedPlan: state.selectedPlan,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, state.dataLoaded ? state.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"В плане отсутствуют записи спецификации\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, `Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n sx: STYLES.DATA_GRID_CONTAINER\n },\n fixedHeader: state.fixedHeader,\n fixedColumns: state.fixedColumns,\n columnsDef: state.columnsDef,\n rows: state.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_SIZE.MEDIUM,\n morePages: state.morePages,\n reloading: state.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleProdOrderClick,\n handleMatresCodeClick\n }),\n groupCellRender: groupCellRender\n })))) : !state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите план для отображения спецификаций\"\n }) : null))), state.showIncomeFromDeps ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_incomefromdeps__WEBPACK_IMPORTED_MODULE_7__.IncomFromDepsDataGridDialog, {\n task: state.showIncomeFromDeps,\n onClose: () => handleProdOrderClick(null)\n }) : null, state.showFcroutelst ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlst__WEBPACK_IMPORTED_MODULE_8__.CostRouteListsDataGridDialog, {\n task: state.showFcroutelst,\n onClose: () => handleMatresCodeClick(null)\n }) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecDeptCostProdPlans: () => (/* binding */ MechRecDeptCostProdPlans),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _incomefromdeps__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./incomefromdeps */ \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\");\n/* harmony import */ var _fcroutlst__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./fcroutlst */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Панель мониторинга: Корневая панель производственного плана цеха\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Типовые стили\n //Заголовок страницы\n //Вспомогательные хуки\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст сообщений\n //Диалог сдачи продукции\n //Диалог маршрутных листов\n\n//---------\n//Константы\n//---------\n\n//Высота заголовка\nconst TITLE_HEIGHT = \"35px\";\n\n//Верхний отступ заголовка\nconst TITLE_PADDING_TOP = \"10px\";\n\n//Нижний отступ заголовка\nconst TITLE_PADDING_BOTTOM = \"20px\";\n\n//Стили\nconst STYLES = {\n PLANS_FINDER: {\n marginTop: \"10px\",\n marginLeft: \"10px\",\n width: \"93%\"\n },\n PLANS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PLANS_BUTTON: {\n position: \"absolute\"\n },\n PLANS_DRAWER: {\n width: \"350px\",\n display: \"inline-block\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"350px\",\n display: \"inline-block\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n }\n },\n CONTAINER: {\n textAlign: \"center\"\n },\n TITLE: {\n height: TITLE_HEIGHT,\n overflow: \"hidden\",\n paddingTop: TITLE_PADDING_TOP,\n paddingBottom: TITLE_PADDING_BOTTOM,\n display: \"inline-table\"\n },\n DATA_GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${TITLE_PADDING_TOP} - ${TITLE_PADDING_BOTTOM} - 29px)`,\n width: \"98vw\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n },\n DATA_GRID_GROUP_CELL: {\n padding: \"2px\"\n },\n DATA_GRID_CELL: {\n padding: \"8px\",\n maxWidth: \"300px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\"\n },\n DATA_GRID_CELL_STATUS: (currentStyle, row) => ({\n backgroundColor: getRowBackgroudColor(row),\n ...currentStyle\n }),\n DATA_GRID_CELL_PLAN_FACT: currentStyle => ({\n ...currentStyle,\n backgroundColor: \"lightgrey\"\n }),\n DATA_GRID_CELL_MATRES_CODE: (currentStyle, row) => ({\n backgroundColor: getRowBackgroudColor(row),\n ...currentStyle\n }),\n PLAN_FACT_VALUE: {\n textAlign: \"center\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n PLAN_FACT_DELIMITER: {\n padding: \"0px 5px\"\n },\n FACT_VALUE: {\n color: \"blue\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = ({\n group\n}) => ({\n cellStyle: STYLES.DATA_GRID_GROUP_CELL,\n data: group.caption\n});\n\n//Вычисление цвета заливки для строки\nconst getRowBackgroudColor = row => {\n //Факт === План\n if (row[\"NMAIN_QUANT\"] === row[\"NREL_FACT\"]) return \"lightgreen\";\n //План <= (Факт + Запущено)\n if (row[\"NMAIN_QUANT\"] <= row[\"NREL_FACT\"] + row[\"NFCROUTLST_QUANT\"]) return \"lightblue\";\n //Сумма \"Количество план\" = 0 или < \"План\"\n if (row[\"NSUM_PLAN\"] === 0 || row[\"NSUM_PLAN\"] !== 0 && row[\"NSUM_PLAN\"] < row[\"NMAIN_QUANT\"]) {\n //\"Факт\" >= \"План\"\n if (row[\"NREL_FACT\"] >= row[\"NMAIN_QUANT\"]) return \"#F0E68C\";\n } else {\n //Сумма \"Количество факт\" >= сумма \"Количество план\"\n if (row[\"NSUM_FACT\"] >= row[\"NSUM_PLAN\"]) return \"#F0E68C\";\n }\n return \"lightcoral\";\n};\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef,\n handleProdOrderClick,\n handleMatresCodeClick\n}) => {\n //Описываем общие свойства\n let cellProps = {\n title: row[columnDef.name]\n };\n //Описываем общий стиль\n let cellStyle = STYLES.DATA_GRID_CELL;\n //Для колонки \"Статус\"\n if (columnDef.name === \"SSTATUS\") return {\n cellProps,\n cellStyle: STYLES.DATA_GRID_CELL_STATUS(cellStyle, row),\n data: row[columnDef]\n };\n //Для колонки даты\n if (columnDef.name.indexOf(\"PLAN_FACT\") >= 0) {\n //Получаем текущий день\n let curDay = new Date().getDate().toString().padStart(2, \"0\");\n //Формируем regex для проверки\n let regex = new RegExp(`N_${curDay}.*`, \"g\");\n //Если это значение текущего дня\n if (columnDef.name.match(regex)) cellStyle = STYLES.DATA_GRID_CELL_PLAN_FACT(cellStyle);\n //Если в колонке есть значение\n if (row[columnDef.name]) {\n //Разбиваем его на план/факт\n let values = row[columnDef.name].split(\"/\");\n //Разбиваем значения на блоки\n return {\n cellProps,\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PLAN_FACT_VALUE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, values[0]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.PLAN_FACT_DELIMITER\n }, \"/\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.FACT_VALUE\n }, values[1]))\n };\n } else return {\n cellProps,\n cellStyle,\n data: row[columnDef]\n };\n }\n //Для колонки \"Заказ\"\n if (columnDef.name === \"SPROD_ORDER\") {\n return {\n cellProps,\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => handleProdOrderClick(row[\"NRN\"])\n }, row[columnDef.name])\n };\n }\n //Для колонки \"Обозначение\"\n if (columnDef.name === \"SMATRES_CODE\") return {\n cellProps,\n cellStyle: STYLES.DATA_GRID_CELL_MATRES_CODE(cellStyle, row),\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => handleMatresCodeClick(row[\"NRN\"])\n }, row[columnDef.name])\n };\n //Для всех остальных\n return {\n cellProps,\n cellStyle,\n data: row[columnDef]\n };\n};\n\n//Список каталогов планов\nconst PlanList = ({\n plans = [],\n selectedPlan,\n filter,\n setFilter,\n onClick\n} = {}) => {\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PLANS_FINDER,\n name: \"planFilter\",\n label: \"\\u041F\\u043B\\u0430\\u043D\",\n value: filter.planName,\n variant: \"standard\",\n fullWidth: true,\n onChange: event => {\n setFilter(pv => ({\n ...pv,\n planName: event.target.value\n }));\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], null, plans.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n key: p.NRN,\n selected: p.NRN === selectedPlan.NRN,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.PLANS_LIST_ITEM_PRIMARY\n }, p.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanList.propTypes = {\n plans: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().array),\n selectedPlan: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func),\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object),\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель производственного плана цеха\nconst MechRecDeptCostProdPlans = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useDeptCostProdPlans)();\n\n //Состояние для фильтра каталогов\n const [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n planName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilteredPlans)(state.planList, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Выбор плана\n const selectPlan = plan => {\n setState(pv => ({\n ...pv,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n selectedPlan: plan,\n showPlanList: false,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n };\n\n //Сброс выбора плана\n const unselectPlan = () => setState(pv => ({\n ...pv,\n showIncomeFromDeps: null,\n showFcroutelst: null,\n selectedPlan: {},\n showPlanList: false,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n\n //Обработка нажатия на элемент в списке планов\n const handlePlanClick = plan => {\n if (state.selectedPlan.NRN != plan.NRN) selectPlan(plan);else unselectPlan();\n };\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на \"Заказ\"\n const handleProdOrderClick = planSp => {\n setState(pv => ({\n ...pv,\n showIncomeFromDeps: planSp\n }));\n };\n\n //При нажатии на \"Обозначение\"\n const handleMatresCodeClick = planSp => {\n setState(pv => ({\n ...pv,\n showFcroutelst: planSp\n }));\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PLANS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPlanList: !pv.showPlanList\n }))\n }, \"\\u041F\\u043B\\u0430\\u043D\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n anchor: \"left\",\n open: state.showPlanList,\n onClose: () => setState(pv => ({\n ...pv,\n showPlanList: false\n })),\n sx: STYLES.PLANS_DRAWER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanList, {\n plans: filteredPlanCtgls,\n selectedPlan: state.selectedPlan,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanClick\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, state.dataLoaded ? state.rows.length === 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"В плане отсутствуют записи спецификации\"\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, `Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n sx: STYLES.DATA_GRID_CONTAINER\n },\n fixedHeader: state.fixedHeader,\n fixedColumns: state.fixedColumns,\n columnsDef: state.columnsDef,\n rows: state.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_SIZE.MEDIUM,\n morePages: state.morePages,\n reloading: state.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleProdOrderClick,\n handleMatresCodeClick\n }),\n groupCellRender: groupCellRender\n })))) : !state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите план для отображения спецификаций\"\n }) : null))), state.showIncomeFromDeps ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_incomefromdeps__WEBPACK_IMPORTED_MODULE_7__.IncomFromDepsDataGridDialog, {\n task: state.showIncomeFromDeps,\n onClose: () => handleProdOrderClick(null)\n }) : null, state.showFcroutelst ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlst__WEBPACK_IMPORTED_MODULE_8__.CostRouteListsDataGridDialog, {\n task: state.showFcroutelst,\n onClose: () => handleMatresCodeClick(null)\n }) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js?"); /***/ }), @@ -5218,7 +5218,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PANEL_UNITS: () => (/* binding */ PANEL_UNITS),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender),\n/* harmony export */ valueFormatter: () => (/* binding */ valueFormatter)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n\n//---------\n//Константы\n//---------\n\n//Разделы панелей экономики проектов\nconst PANEL_UNITS = {\n PROJECTS: \"PROJECTS\",\n PROJECT_STAGES: \"PROJECT_STAGES\",\n PROJECT_STAGE_CONTRACTS: \"PROJECT_STAGE_CONTRACTS\",\n PROJECT_STAGE_ARTS: \"PROJECT_STAGE_ARTS\"\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для колонки \"Состояние\" проекта\nconst formatPrjStateValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Остановлен\", \"do_not_disturb_on\"] : value == 3 ? [\"Закрыт\", \"lock_outline\"] : value == 4 ? [\"Согласован\", \"thumb_up_alt\"] : [\"Исполнение прекращено\", \"block\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = (value, addText = false) => {\n 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\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Подбор функции форматирования колонки \"Состояние\" по разделу панели\nconst getStatusFormatter = panelUnit => panelUnit === PANEL_UNITS.PROJECTS ? formatPrjStateValue : formatStageStatusValue;\n\n//Формирование значения для контрольных колонок\nconst formatCtrlValue = (value, addText = false) => {\n if ((0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(value)) {\n const [text, icon, color] = value == 0 ? [\"В норме\", \"done\", \"green\"] : [\"Требует внимания\", \"error\", \"red\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text,\n sx: {\n color\n }\n }, icon), addText == true ? text : null);\n } else return value;\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n panelUnit,\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NSTATE\":\n return getStatusFormatter(panelUnit)(value, true);\n case \"DBEGPLAN\":\n case \"DENDPLAN\":\n case \"DDOC_DATE\":\n case \"DCSTAGE_BEGIN_DATE\":\n case \"DCSTAGE_END_DATE\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value);\n case \"NPLAN\":\n case \"NCOST_FACT\":\n case \"NCONTR\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(value);\n case \"NCTRL_FIN\":\n case \"NCTRL_CONTR\":\n case \"NCTRL_COEXEC\":\n case \"NCTRL_PERIOD\":\n case \"NCTRL_COST\":\n case \"NCTRL_ACT\":\n return formatCtrlValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NSTATE\":\n case \"NCTRL_FIN\":\n case \"NCTRL_CONTR\":\n case \"NCTRL_COEXEC\":\n case \"NCTRL_PERIOD\":\n case \"NCTRL_COST\":\n case \"NCTRL_ACT\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n panelUnit,\n row,\n columnDef,\n pOnlineShowDocument,\n showStages,\n showStageArts,\n showCostNotes,\n showContracts\n}) => {\n //Подбор функции на нажатие в ячейки контрольной колонки в зависимости от контекста\n const getCrlOnClick = () => panelUnit == PANEL_UNITS.PROJECT_STAGES ? [\"NCTRL_FIN\", \"NCTRL_COEXEC\"].includes(columnDef.name) ? showContracts : showStageArts : showStages;\n //Подбор представления ячейки контрольной колонки в зависимости от контекста\n const renderCtl = () => ({\n cellProps: {\n align: panelUnit == PANEL_UNITS.PROJECT_STAGES && columnDef.name == \"NCTRL_PERIOD\" || panelUnit == PANEL_UNITS.PROJECT_STAGE_CONTRACTS && columnDef.name == \"NCTRL_FIN\" || panelUnit == PANEL_UNITS.PROJECT_STAGE_ARTS && [\"NCTRL_COST\", \"NCTRL_CONTR\"].includes(columnDef.name) ? \"right\" : \"center\"\n },\n data: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[columnDef.name]) ? panelUnit == PANEL_UNITS.PROJECT_STAGES && columnDef.name == \"NCTRL_PERIOD\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n justifyContent: \"right\"\n },\n direction: \"row\",\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] === 1 ? \"red\" : \"green\",\n display: \"flex\",\n alignItems: \"center\"\n }\n }, row.NDAYS_LEFT, \" \\u0434\\u043D.\"), formatCtrlValue(row[columnDef.name], false)) : panelUnit == PANEL_UNITS.PROJECT_STAGE_CONTRACTS && columnDef.name == \"NCTRL_FIN\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n justifyContent: \"right\"\n },\n direction: \"row\",\n spacing: 1\n }, row[columnDef.name] === 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: \"red\",\n display: \"flex\",\n alignItems: \"center\"\n },\n title: \"\\u0421\\u0447\\u0435\\u0442\\u043E\\u0432 \\u043A \\u043E\\u043F\\u043B\\u0430\\u0442\\u0435\"\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(row[\"NPAY_IN_REST\"])) : null, formatCtrlValue(row[columnDef.name], false)) : panelUnit == PANEL_UNITS.PROJECT_STAGES && columnDef.name == \"NCTRL_ACT\" || panelUnit == PANEL_UNITS.PROJECT_STAGE_CONTRACTS && columnDef.name == \"NCTRL_COEXEC\" ? formatCtrlValue(row[columnDef.name], false) : panelUnit == PANEL_UNITS.PROJECT_STAGE_ARTS && [\"NCTRL_COST\", \"NCTRL_CONTR\"].includes(columnDef.name) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n justifyContent: \"right\"\n },\n direction: \"row\",\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] === 1 ? \"red\" : \"green\",\n display: \"flex\",\n alignItems: \"center\"\n }\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(row[columnDef.name === \"NCTRL_COST\" ? \"NCOST_DIFF\" : \"NCONTR_LEFT\"])), formatCtrlValue(row[columnDef.name], false)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => getCrlOnClick()({\n sender: row,\n filters: [{\n name: columnDef.name,\n from: row[columnDef.name]\n }]\n })\n }, formatCtrlValue(row[columnDef.name], false)) : null\n });\n //Формирование представлений\n switch (columnDef.name) {\n case \"SCODE\":\n case \"SNAME_USL\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => showStages({\n sender: row\n })\n }, row[columnDef.name])\n };\n case \"SDOC_PREF\":\n case \"SDOC_NUMB\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => pOnlineShowDocument({\n unitCode: row[`SLNK_UNIT_${columnDef.name}`],\n document: row[`NLNK_DOCUMENT_${columnDef.name}`]\n })\n }, row[columnDef.name])\n };\n case \"NCOST_FACT\":\n case \"NCONTR\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => columnDef.name === \"NCOST_FACT\" ? showCostNotes({\n sender: row\n }) : showContracts({\n sender: row\n })\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(row[columnDef.name])) : null\n };\n case \"NSTATE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: getStatusFormatter(panelUnit)(row[columnDef.name], false)\n };\n case \"NCTRL_FIN\":\n case \"NCTRL_CONTR\":\n case \"NCTRL_COEXEC\":\n case \"NCTRL_PERIOD\":\n case \"NCTRL_COST\":\n case \"NCTRL_ACT\":\n return renderCtl();\n }\n};\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n panelUnit,\n columnsDef,\n row,\n pOnlineShowDocument,\n showStages,\n showPayNotes,\n showCostNotes,\n showPaymentAccountsIn,\n showIncomingInvoices,\n showGoodsTransInvoicesToConsumers,\n showStageArts,\n showContracts\n}) => {\n //Фильтруем системные атрибуты и атрибуты без значений\n const cardColumns = columnsDef.filter(columnDef => columnDef.visible == false && columnDef.name != \"NRN\" && !columnDef.name.startsWith(\"SLNK_UNIT_\") && !columnDef.name.startsWith(\"NLNK_DOCUMENT_\") && (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[columnDef.name]));\n //Автоформатирование значения (N* - число, D* - дата, всё остальное - строка)\n const formatColumnValue = (name, value) => name.startsWith(\"N\") ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(value) : name.startsWith(\"D\") ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value) : value;\n //Формирование кнопок переходов\n const linkButtons = () => panelUnit === PANEL_UNITS.PROJECTS ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n onClick: () => showStages({\n sender: row\n })\n }, \"\\u042D\\u0442\\u0430\\u043F\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n onClick: () => pOnlineShowDocument({\n unitCode: \"Projects\",\n document: row.NRN\n })\n }, \"\\u0412 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\")) : panelUnit === PANEL_UNITS.PROJECT_STAGES ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n onClick: () => showStageArts({\n sender: row\n })\n }, \"\\u0421\\u0442\\u0430\\u0442\\u044C\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n onClick: () => showContracts({\n sender: row\n })\n }, \"\\u0421\\u0438\\u0441\\u043F\\u043E\\u043B\\u043D\\u0438\\u0442\\u0435\\u043B\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n onClick: () => pOnlineShowDocument({\n unitCode: \"ProjectsStages\",\n document: row.NRN\n })\n }, \"\\u0412 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\")) : panelUnit === PANEL_UNITS.PROJECT_STAGE_CONTRACTS ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n onClick: () => pOnlineShowDocument({\n unitCode: row.SLNK_UNIT_SDOC_PREF,\n document: row.NLNK_DOCUMENT_SDOC_PREF\n })\n }, \"\\u0412 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\") : null;\n //Сборка содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12,\n md: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n spacing: 2\n }, linkButtons())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12,\n md: 11\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n elevation: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: {\n width: \"100%\"\n },\n size: \"small\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, cardColumns.map((cardColumn, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: {\n width: \"1px\",\n whiteSpace: \"nowrap\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\",\n color: \"primary\",\n noWrap: true\n }, cardColumn.caption, \":\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: {\n paddingLeft: 0\n }\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[`SLNK_UNIT_${cardColumn.name}`]) && (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[`NLNK_DOCUMENT_${cardColumn.name}`]) || [\"NPAY_IN\", \"NFIN_OUT\", \"NCOEXEC_IN\"].includes(cardColumn.name) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => [\"NFIN_IN\", \"NFIN_OUT\"].includes(cardColumn.name) ? showPayNotes({\n sender: row,\n direction: row[`NLNK_DOCUMENT_${cardColumn.name}`]\n }) : cardColumn.name == \"NCOST_FACT\" ? showCostNotes({\n sender: row\n }) : cardColumn.name == \"NSUMM_REALIZ\" ? showGoodsTransInvoicesToConsumers({\n sender: row\n }) : cardColumn.name == \"NPAY_IN\" ? showPaymentAccountsIn({\n sender: row\n }) : cardColumn.name == \"NCOEXEC_IN\" ? showIncomingInvoices({\n sender: row\n }) : pOnlineShowDocument({\n unitCode: row[`SLNK_UNIT_${cardColumn.name}`],\n document: row[`NLNK_DOCUMENT_${cardColumn.name}`]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\",\n color: \"text.secondary\"\n }, formatColumnValue(cardColumn.name, row[cardColumn.name]))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\",\n color: \"text.secondary\"\n }, [\"NDAYS_LEFT\", \"NINCOME_PRC\"].includes(cardColumn.name) ? row[cardColumn.name] : formatColumnValue(cardColumn.name, row[cardColumn.name])))))))))));\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COMMON_PROJECTS_STYLES: () => (/* binding */ COMMON_PROJECTS_STYLES),\n/* harmony export */ PANEL_UNITS: () => (/* binding */ PANEL_UNITS),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender),\n/* harmony export */ valueFormatter: () => (/* binding */ valueFormatter)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Table/Table.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableBody/TableBody.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableRow/TableRow.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TableCell/TableCell.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n\n//---------\n//Константы\n//---------\n\n//Разделы панелей экономики проектов\nconst PANEL_UNITS = {\n PROJECTS: \"PROJECTS\",\n PROJECT_STAGES: \"PROJECT_STAGES\",\n PROJECT_STAGE_CONTRACTS: \"PROJECT_STAGE_CONTRACTS\",\n PROJECT_STAGE_ARTS: \"PROJECT_STAGE_ARTS\"\n};\n\n//Общие стили\nconst COMMON_PROJECTS_STYLES = {\n FULL_SCREEN_DIALOG_CONTENT: {\n padding: 0\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Формирование значения для колонки \"Состояние\" проекта\nconst formatPrjStateValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Зарегистрирован\", \"app_registration\"] : value == 1 ? [\"Открыт\", \"lock_open\"] : value == 2 ? [\"Остановлен\", \"do_not_disturb_on\"] : value == 3 ? [\"Закрыт\", \"lock_outline\"] : value == 4 ? [\"Согласован\", \"thumb_up_alt\"] : [\"Исполнение прекращено\", \"block\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Формирование значения для колонки \"Состояние\" этапа\nconst formatStageStatusValue = (value, addText = false) => {\n 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\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Подбор функции форматирования колонки \"Состояние\" по разделу панели\nconst getStatusFormatter = panelUnit => panelUnit === PANEL_UNITS.PROJECTS ? formatPrjStateValue : formatStageStatusValue;\n\n//Формирование значения для контрольных колонок\nconst formatCtrlValue = (value, addText = false) => {\n if ((0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(value)) {\n const [text, icon, color] = value == 0 ? [\"В норме\", \"done\", \"green\"] : [\"Требует внимания\", \"error\", \"red\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n title: text,\n sx: {\n color\n }\n }, icon), addText == true ? text : null);\n } else return value;\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n panelUnit,\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NSTATE\":\n return getStatusFormatter(panelUnit)(value, true);\n case \"DBEGPLAN\":\n case \"DENDPLAN\":\n case \"DDOC_DATE\":\n case \"DCSTAGE_BEGIN_DATE\":\n case \"DCSTAGE_END_DATE\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value);\n case \"NPLAN\":\n case \"NCOST_FACT\":\n case \"NCONTR\":\n return (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(value);\n case \"NCTRL_FIN\":\n case \"NCTRL_CONTR\":\n case \"NCTRL_COEXEC\":\n case \"NCTRL_PERIOD\":\n case \"NCTRL_COST\":\n case \"NCTRL_ACT\":\n return formatCtrlValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NSTATE\":\n case \"NCTRL_FIN\":\n case \"NCTRL_CONTR\":\n case \"NCTRL_COEXEC\":\n case \"NCTRL_PERIOD\":\n case \"NCTRL_COST\":\n case \"NCTRL_ACT\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n panelUnit,\n row,\n columnDef,\n pOnlineShowDocument,\n showStages,\n showStageArts,\n showCostNotes,\n showContracts\n}) => {\n //Подбор функции на нажатие в ячейки контрольной колонки в зависимости от контекста\n const getCrlOnClick = () => panelUnit == PANEL_UNITS.PROJECT_STAGES ? [\"NCTRL_FIN\", \"NCTRL_COEXEC\"].includes(columnDef.name) ? showContracts : showStageArts : showStages;\n //Подбор представления ячейки контрольной колонки в зависимости от контекста\n const renderCtl = () => ({\n cellProps: {\n align: panelUnit == PANEL_UNITS.PROJECT_STAGES && columnDef.name == \"NCTRL_PERIOD\" || panelUnit == PANEL_UNITS.PROJECT_STAGE_CONTRACTS && columnDef.name == \"NCTRL_FIN\" || panelUnit == PANEL_UNITS.PROJECT_STAGE_ARTS && [\"NCTRL_COST\", \"NCTRL_CONTR\"].includes(columnDef.name) ? \"right\" : \"center\"\n },\n data: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[columnDef.name]) ? panelUnit == PANEL_UNITS.PROJECT_STAGES && columnDef.name == \"NCTRL_PERIOD\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n justifyContent: \"right\"\n },\n direction: \"row\",\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] === 1 ? \"red\" : \"green\",\n display: \"flex\",\n alignItems: \"center\"\n }\n }, row.NDAYS_LEFT, \" \\u0434\\u043D.\"), formatCtrlValue(row[columnDef.name], false)) : panelUnit == PANEL_UNITS.PROJECT_STAGE_CONTRACTS && columnDef.name == \"NCTRL_FIN\" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n justifyContent: \"right\"\n },\n direction: \"row\",\n spacing: 1\n }, row[columnDef.name] === 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: \"red\",\n display: \"flex\",\n alignItems: \"center\"\n },\n title: \"\\u0421\\u0447\\u0435\\u0442\\u043E\\u0432 \\u043A \\u043E\\u043F\\u043B\\u0430\\u0442\\u0435\"\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(row[\"NPAY_IN_REST\"])) : null, formatCtrlValue(row[columnDef.name], false)) : panelUnit == PANEL_UNITS.PROJECT_STAGES && columnDef.name == \"NCTRL_ACT\" || panelUnit == PANEL_UNITS.PROJECT_STAGE_CONTRACTS && columnDef.name == \"NCTRL_COEXEC\" ? formatCtrlValue(row[columnDef.name], false) : panelUnit == PANEL_UNITS.PROJECT_STAGE_ARTS && [\"NCTRL_COST\", \"NCTRL_CONTR\"].includes(columnDef.name) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n justifyContent: \"right\"\n },\n direction: \"row\",\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: {\n color: row[columnDef.name] === 1 ? \"red\" : \"green\",\n display: \"flex\",\n alignItems: \"center\"\n }\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(row[columnDef.name === \"NCTRL_COST\" ? \"NCOST_DIFF\" : \"NCONTR_LEFT\"])), formatCtrlValue(row[columnDef.name], false)) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => getCrlOnClick()({\n sender: row,\n filters: [{\n name: columnDef.name,\n from: row[columnDef.name]\n }]\n })\n }, formatCtrlValue(row[columnDef.name], false)) : null\n });\n //Формирование представлений\n switch (columnDef.name) {\n case \"SCODE\":\n case \"SNAME_USL\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => showStages({\n sender: row\n })\n }, row[columnDef.name])\n };\n case \"SDOC_PREF\":\n case \"SDOC_NUMB\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => pOnlineShowDocument({\n unitCode: row[`SLNK_UNIT_${columnDef.name}`],\n document: row[`NLNK_DOCUMENT_${columnDef.name}`]\n })\n }, row[columnDef.name])\n };\n case \"NCOST_FACT\":\n case \"NCONTR\":\n return {\n data: row[columnDef.name] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"hover\",\n onClick: () => columnDef.name === \"NCOST_FACT\" ? showCostNotes({\n sender: row\n }) : showContracts({\n sender: row\n })\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(row[columnDef.name])) : null\n };\n case \"NSTATE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: getStatusFormatter(panelUnit)(row[columnDef.name], false)\n };\n case \"NCTRL_FIN\":\n case \"NCTRL_CONTR\":\n case \"NCTRL_COEXEC\":\n case \"NCTRL_PERIOD\":\n case \"NCTRL_COST\":\n case \"NCTRL_ACT\":\n return renderCtl();\n }\n};\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n panelUnit,\n columnsDef,\n row,\n pOnlineShowDocument,\n pOnlineShowUnit,\n showStages,\n showPayNotes,\n showCostNotes,\n showPaymentAccountsIn,\n showIncomingInvoices,\n showGoodsTransInvoicesToConsumers,\n showStageArts,\n showContracts\n}) => {\n //Фильтруем системные атрибуты и атрибуты без значений\n const cardColumns = columnsDef.filter(columnDef => columnDef.visible == false && columnDef.name != \"NRN\" && !columnDef.name.startsWith(\"SLNK_UNIT_\") && !columnDef.name.startsWith(\"NLNK_DOCUMENT_\") && (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[columnDef.name]));\n //Автоформатирование значения (N* - число, D* - дата, всё остальное - строка)\n const formatColumnValue = (name, value) => name.startsWith(\"N\") ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatNumberRFCurrency)(value) : name.startsWith(\"D\") ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(value) : value;\n //Формирование кнопок переходов\n const linkButtons = () => panelUnit === PANEL_UNITS.PROJECTS ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\",\n onClick: () => showStages({\n sender: row\n })\n }, \"\\u042D\\u0442\\u0430\\u043F\\u044B\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\",\n onClick: () => pOnlineShowDocument({\n unitCode: \"Projects\",\n document: row.NRN,\n modal: false\n })\n }, \"\\u041A \\u043F\\u0440\\u043E\\u0435\\u043A\\u0442\\u0443\")) : panelUnit === PANEL_UNITS.PROJECT_STAGES ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\",\n onClick: () => showStageArts({\n sender: row\n })\n }, \"\\u0421\\u0442\\u0430\\u0442\\u044C\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\",\n onClick: () => showContracts({\n sender: row\n })\n }, \"\\u0421\\u0438\\u0441\\u043F\\u043E\\u043B\\u043D\\u0438\\u0442\\u0435\\u043B\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\",\n onClick: () => pOnlineShowUnit({\n unitCode: \"Projects\",\n inputParameters: [{\n name: \"in_RN\",\n value: row.NPROJECT\n }, {\n name: \"in_STAGE_RN\",\n value: row.NRN\n }],\n modal: false\n })\n }, \"\\u041A \\u044D\\u0442\\u0430\\u043F\\u0443\")) : panelUnit === PANEL_UNITS.PROJECT_STAGE_CONTRACTS ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n variant: \"outlined\",\n onClick: () => pOnlineShowDocument({\n unitCode: row.SLNK_UNIT_SDOC_PREF,\n document: row.NLNK_DOCUMENT_SDOC_PREF,\n modal: false\n })\n }, \"\\u041A \\u0434\\u043E\\u0433\\u043E\\u0432\\u043E\\u0440\\u0443\") : null;\n //Сборка содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12,\n md: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n spacing: 2,\n direction: \"row\"\n }, linkButtons())), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12,\n md: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n elevation: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: {\n width: \"100%\"\n },\n size: \"small\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, cardColumns.map((cardColumn, i) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n key: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: {\n width: \"1px\",\n whiteSpace: \"nowrap\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\",\n color: \"primary\",\n noWrap: true\n }, cardColumn.caption, \":\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n sx: {\n paddingLeft: 0\n }\n }, (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[`SLNK_UNIT_${cardColumn.name}`]) && (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.hasValue)(row[`NLNK_DOCUMENT_${cardColumn.name}`]) || [\"NPAY_IN\", \"NFIN_OUT\", \"NCOEXEC_IN\"].includes(cardColumn.name) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n component: \"button\",\n variant: \"body2\",\n align: \"left\",\n underline: \"always\",\n onClick: () => [\"NFIN_IN\", \"NFIN_OUT\"].includes(cardColumn.name) ? showPayNotes({\n sender: row,\n direction: row[`NLNK_DOCUMENT_${cardColumn.name}`]\n }) : cardColumn.name == \"NCOST_FACT\" ? showCostNotes({\n sender: row\n }) : cardColumn.name == \"NSUMM_REALIZ\" ? showGoodsTransInvoicesToConsumers({\n sender: row\n }) : cardColumn.name == \"NPAY_IN\" ? showPaymentAccountsIn({\n sender: row\n }) : cardColumn.name == \"NCOEXEC_IN\" ? showIncomingInvoices({\n sender: row\n }) : pOnlineShowDocument({\n unitCode: row[`SLNK_UNIT_${cardColumn.name}`],\n document: row[`NLNK_DOCUMENT_${cardColumn.name}`]\n })\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\",\n color: \"text.secondary\"\n }, formatColumnValue(cardColumn.name, row[cardColumn.name]))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\",\n color: \"text.secondary\"\n }, [\"NDAYS_LEFT\", \"NINCOME_PRC\"].includes(cardColumn.name) ? row[cardColumn.name] : formatColumnValue(cardColumn.name, row[cardColumn.name])))))))))));\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/layouts.js?"); /***/ }), @@ -5240,7 +5240,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Projects: () => (/* binding */ Projects)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\n/* harmony import */ var _stages__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./stages */ \"./app/panels/prj_fin/stages.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список проктов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Полноэкранный диалог\n //График\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Список этапов проекта\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n CHART: {\n maxHeight: \"300px\",\n display: \"flex\",\n justifyContent: \"center\"\n },\n CHART_PAPER: {\n height: \"100%\"\n },\n CHART_FAB: {\n position: \"absolute\",\n top: 80,\n left: 16\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список проектов\nconst Projects = () => {\n //Собственное состояние\n const [projectsDataGrid, setProjectsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProject: null,\n stagesFilters: []\n });\n\n //Состояния графиков\n const [showCharts, setShowCharts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [problemsChart, setProblemsChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [customersChart, setCustomersChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [costNotesChart, setCostNotesChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_7__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_8__[\"MessagingСtx\"]);\n\n //Загрузка данных проектов с сервера\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (projectsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.LIST\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: projectsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: projectsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setProjectsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [projectsDataGrid.reload, projectsDataGrid.filters, projectsDataGrid.orders, projectsDataGrid.dataLoaded, projectsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Получение данных графиков\n const loadChartData = async () => {\n const problemsChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_PROBLEMS\",\n respArg: \"COUT\"\n });\n setProblemsChart(pv => ({\n ...pv,\n loaded: true,\n ...problemsChart.XCHART\n }));\n const customersChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_CUSTOMERS\",\n respArg: \"COUT\"\n });\n setCustomersChart(pv => ({\n ...pv,\n loaded: true,\n ...customersChart.XCHART\n }));\n const costNotesChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES\",\n respArg: \"COUT\"\n });\n setCostNotesChart(pv => ({\n ...pv,\n loaded: true,\n ...costNotesChart.XCHART\n }));\n };\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение детализации точки графика затрат\n const showCostNotesChartDetail = async ({\n year,\n month\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES_SELECT_COST\",\n args: {\n NYEAR: year,\n NMONTH: month\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение этапов проекта\n const showStages = ({\n sender,\n filters = []\n } = {}) => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: {\n ...sender\n },\n stagesFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setProjectsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка этапов проекта\n const handleStagesClose = () => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: null,\n stagesFilters: []\n }));\n\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n if (item.SFILTER && item.SFILTER_VALUE) setProjectsDataGrid(pv => ({\n ...pv,\n filters: [{\n name: item.SFILTER,\n from: item.SFILTER_VALUE\n }],\n pageNumber: 1,\n reload: true\n }));\n if (item.SUNITCODE == \"CostNotes\" && item.NYEAR && item.NMONTH) showCostNotesChartDetail({\n year: item.NYEAR,\n month: item.NMONTH\n });\n };\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadProjects();\n }, [projectsDataGrid.reload, loadProjects]);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadChartData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n container: true,\n spacing: 1\n }, showCharts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, problemsChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, problemsChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, customersChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, customersChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_5__.P8PChart, _extends({}, costNotesChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n xs: 12\n }, projectsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_9__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: projectsDataGrid.columnsDef,\n rows: projectsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n filtersInitial: projectsDataGrid.filters,\n morePages: projectsDataGrid.morePages,\n reloading: projectsDataGrid.reload,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_10__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS,\n showStages\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS,\n pOnlineShowDocument,\n showPayNotes,\n showStages\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECTS\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, projectsDataGrid.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Этапы проекта \"${projectsDataGrid.selectedProject.SNAME_USL}\"`,\n onClose: handleStagesClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stages__WEBPACK_IMPORTED_MODULE_11__.Stages, {\n project: projectsDataGrid.selectedProject.NRN,\n projectName: projectsDataGrid.selectedProject.SNAME_USL,\n filters: projectsDataGrid.stagesFilters\n })) : null)), problemsChart.loaded || customersChart.loaded || costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n size: \"small\",\n color: \"secondary\",\n sx: STYLES.CHART_FAB,\n onClick: () => setShowCharts(!showCharts)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, showCharts ? \"expand_less\" : \"expand_more\")) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/projects.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Projects: () => (/* binding */ Projects)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _components_p8p_chart__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../components/p8p_chart */ \"./app/components/p8p_chart.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\n/* harmony import */ var _stages__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./stages */ \"./app/panels/prj_fin/stages.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список проктов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Типовые стили\n //Заголовок страницы\n //Таблица данных\n //Полноэкранный диалог\n //График\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Список этапов проекта\n\n//---------\n//Константы\n//---------\n\n//Высота графиков\nconst CHART_HEIGHT = \"300px\";\n\n//Стили\nconst STYLES = {\n TABLE_PROJECTS: (showCharts, morePages, filters) => ({\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.APP_BAR_HEIGHT} - ${showCharts ? CHART_HEIGHT : \"0px\"} - ${morePages ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_MORE_HEIGHT : \"0px\"} - ${filters ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTERS_HEIGHT : \"0px\"} - 25px)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_3__.APP_STYLES.SCROLL\n }),\n CHART: {\n maxHeight: CHART_HEIGHT,\n display: \"flex\",\n justifyContent: \"center\"\n },\n CHART_PAPER: {\n height: \"100%\"\n },\n CHART_FAB: {\n position: \"absolute\",\n top: 80,\n left: 16\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список проектов\nconst Projects = () => {\n //Собственное состояние\n const [projectsDataGrid, setProjectsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedProject: null,\n stagesFilters: []\n });\n\n //Состояния графиков\n const [showCharts, setShowCharts] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);\n const [problemsChart, setProblemsChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [customersChart, setCustomersChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n const [costNotesChart, setCostNotesChart] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n loaded: false,\n labels: [],\n datasets: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_8__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_9__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_10__[\"MessagingСtx\"]);\n\n //Загрузка данных проектов с сервера\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (projectsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.LIST\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(projectsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: projectsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: projectsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setProjectsDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [projectsDataGrid.reload, projectsDataGrid.filters, projectsDataGrid.orders, projectsDataGrid.dataLoaded, projectsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Получение данных графиков\n const loadChartData = async () => {\n const problemsChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_PROBLEMS\",\n respArg: \"COUT\"\n });\n setProblemsChart(pv => ({\n ...pv,\n loaded: true,\n ...problemsChart.XCHART\n }));\n const customersChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_CUSTOMERS\",\n respArg: \"COUT\"\n });\n setCustomersChart(pv => ({\n ...pv,\n loaded: true,\n ...customersChart.XCHART\n }));\n const costNotesChart = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES\",\n respArg: \"COUT\"\n });\n setCostNotesChart(pv => ({\n ...pv,\n loaded: true,\n ...costNotesChart.XCHART\n }));\n };\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение детализации точки графика затрат\n const showCostNotesChartDetail = async ({\n year,\n month\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.CHART_FCCOSTNOTES_SELECT_COST\",\n args: {\n NYEAR: year,\n NMONTH: month\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение этапов проекта\n const showStages = ({\n sender,\n filters = []\n } = {}) => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: {\n ...sender\n },\n stagesFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setProjectsDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setProjectsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка этапов проекта\n const handleStagesClose = () => setProjectsDataGrid(pv => ({\n ...pv,\n selectedProject: null,\n stagesFilters: []\n }));\n\n //Отработка нажатия на график\n const handleChartClick = ({\n item\n }) => {\n if (item.SFILTER && item.SFILTER_VALUE) setProjectsDataGrid(pv => ({\n ...pv,\n filters: [{\n name: item.SFILTER,\n from: item.SFILTER_VALUE\n }],\n pageNumber: 1,\n reload: true\n }));\n if (item.SUNITCODE == \"CostNotes\" && item.NYEAR && item.NMONTH) showCostNotesChartDetail({\n year: item.NYEAR,\n month: item.NMONTH\n });\n };\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadProjects();\n }, [projectsDataGrid.reload, loadProjects]);\n\n //При подключении к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadChartData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n p: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n container: true,\n spacing: 1\n }, showCharts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, problemsChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_7__.P8PChart, _extends({}, problemsChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, customersChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_7__.P8PChart, _extends({}, customersChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n item: true,\n xs: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n elevation: 3,\n sx: STYLES.CHART_PAPER\n }, costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_chart__WEBPACK_IMPORTED_MODULE_7__.P8PChart, _extends({}, costNotesChart, {\n onClick: handleChartClick,\n style: STYLES.CHART\n })) : null))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n item: true,\n xs: 12\n }, projectsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_11__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n sx: STYLES.TABLE_PROJECTS(showCharts, projectsDataGrid.morePages, (projectsDataGrid.filters || []).length > 0)\n },\n columnsDef: projectsDataGrid.columnsDef,\n rows: projectsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n filtersInitial: projectsDataGrid.filters,\n morePages: projectsDataGrid.morePages,\n reloading: projectsDataGrid.reload,\n fixedHeader: true,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_12__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_12__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_12__.PANEL_UNITS.PROJECTS,\n showStages\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_12__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_12__.PANEL_UNITS.PROJECTS,\n pOnlineShowDocument,\n showPayNotes,\n showStages\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_12__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_12__.PANEL_UNITS.PROJECTS\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, projectsDataGrid.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_6__.P8PFullScreenDialog, {\n title: `Этапы проекта \"${projectsDataGrid.selectedProject.SNAME_USL}\"`,\n onClose: handleStagesClose,\n contentProps: {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_12__.COMMON_PROJECTS_STYLES.FULL_SCREEN_DIALOG_CONTENT\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stages__WEBPACK_IMPORTED_MODULE_13__.Stages, {\n project: projectsDataGrid.selectedProject.NRN,\n projectName: projectsDataGrid.selectedProject.SNAME_USL,\n filters: projectsDataGrid.stagesFilters\n })) : null)), problemsChart.loaded || customersChart.loaded || costNotesChart.loaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n size: \"small\",\n color: \"secondary\",\n sx: STYLES.CHART_FAB,\n onClick: () => setShowCharts(!showCharts)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], null, showCharts ? \"expand_less\" : \"expand_more\")) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/projects.js?"); /***/ }), @@ -5251,7 +5251,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageArts: () => (/* binding */ StageArts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Калькуляция этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Калькуляция этапа проекта\nconst StageArts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageArtsDataGrid, setStageArtsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n rows: [],\n reload: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Загрузка данных калькуляции этапа с сервера\n const loadStageArts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageArtsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageArtsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_DEF: stageArtsDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStageArtsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [stage, stageArtsDataGrid.reload, stageArtsDataGrid.filters, stageArtsDataGrid.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала затрат по статье калькуляции\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_COST_FACT\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение договоров по статье калькуляции\n const showContracts = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_CONTR\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"Contracts\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageArtsDataGrid(pv => ({\n ...pv,\n filters,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageArts();\n }, [stageArtsDataGrid.reload, loadStageArts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 2\n }, stageArtsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stageArtsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageArtsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: false,\n reloading: stageArtsDataGrid.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_ARTS,\n showCostNotes,\n showContracts\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_8__.valueFormatter,\n onFilterChanged: handleFilterChanged\n })) : null);\n};\n\n//Контроль свойств - Калькуляция этапа проекта\nStageArts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_arts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageArts: () => (/* binding */ StageArts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Калькуляция этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Типовые стили\n //Заголовок страницы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n TABLE_ARTS: filters => ({\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.APP_BAR_HEIGHT} - ${filters ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTERS_HEIGHT : \"0px\"} - 16px)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_3__.APP_STYLES.SCROLL\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Калькуляция этапа проекта\nconst StageArts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageArtsDataGrid, setStageArtsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n rows: [],\n reload: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowUnit\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_7__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_8__[\"MessagingСtx\"]);\n\n //Загрузка данных калькуляции этапа с сервера\n const loadStageArts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageArtsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageArtsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NINCLUDE_DEF: stageArtsDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStageArtsDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: [...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [stage, stageArtsDataGrid.reload, stageArtsDataGrid.filters, stageArtsDataGrid.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала затрат по статье калькуляции\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_COST_FACT\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение договоров по статье калькуляции\n const showContracts = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_ARTS_SELECT_CONTR\",\n args: {\n NSTAGE: stage,\n NFPDARTCL: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"Contracts\",\n inputParameters: [{\n name: \"in_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageArtsDataGrid(pv => ({\n ...pv,\n filters,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageArts();\n }, [stageArtsDataGrid.reload, loadStageArts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n pt: 2\n }, stageArtsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_9__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n sx: STYLES.TABLE_ARTS((stageArtsDataGrid.filters || []).length > 0),\n elevation: 0\n },\n columnsDef: stageArtsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageArtsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n fixedHeader: true,\n morePages: false,\n reloading: stageArtsDataGrid.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECT_STAGE_ARTS,\n showCostNotes,\n showContracts\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_10__.valueFormatter,\n onFilterChanged: handleFilterChanged\n })) : null);\n};\n\n//Контроль свойств - Калькуляция этапа проекта\nStageArts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_12___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_arts.js?"); /***/ }), @@ -5262,7 +5262,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageContracts: () => (/* binding */ StageContracts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_10___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_10__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Договоры с соисполнителями этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Договоры с соисполнителями этапа проекта\nconst StageContracts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageContractsDataGrid, setStageContractsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStageContracts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageContractsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stageContractsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stageContractsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setStageContractsDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [stage, stageContractsDataGrid.reload, stageContractsDataGrid.filters, stageContractsDataGrid.orders, stageContractsDataGrid.dataLoaded, stageContractsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение выходящих счетов на оплату от соисполнителя этапа\n const showPaymentAccountsIn = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_PAY_IN\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PaymentAccountsIn\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение фактических платежей соисполнителю этапа\n const showPayNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_FIN_OUT\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение приходных накладных от соисполнителя этапа\n const showIncomingInvoices = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_ININV\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"IncomingInvoices\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStageContractsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageContracts();\n }, [stageContractsDataGrid.reload, loadStageContracts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n pt: 2\n }, stageContractsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stageContractsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageContractsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stageContractsDataGrid.morePages,\n reloading: stageContractsDataGrid.reload,\n expandable: true,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_8__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_8__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument,\n showPaymentAccountsIn,\n showPayNotes,\n showIncomingInvoices\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_8__.valueFormatter,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Договоры с соисполнителями этапа проекта\nStageContracts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_10___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_contracts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ StageContracts: () => (/* binding */ StageContracts)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Договоры с соисполнителями этапа проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Типовые стили\n //Заголовок страницы\n //Таблица данных\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n TABLE_CONTRACTS: (morePages, filters) => ({\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.APP_BAR_HEIGHT} - ${morePages ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_MORE_HEIGHT : \"0px\"} - ${filters ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTERS_HEIGHT : \"0px\"} - 16px)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_3__.APP_STYLES.SCROLL\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Договоры с соисполнителями этапа проекта\nconst StageContracts = ({\n stage,\n filters\n}) => {\n //Собственное состояние\n const [stageContractsDataGrid, setStageContractsDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_7__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_8__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStageContracts = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stageContractsDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_LIST\",\n args: {\n NSTAGE: stage,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stageContractsDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stageContractsDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stageContractsDataGrid.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SGOVCNTRID\" ? undefined : val,\n respArg: \"COUT\"\n });\n setStageContractsDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [stage, stageContractsDataGrid.reload, stageContractsDataGrid.filters, stageContractsDataGrid.orders, stageContractsDataGrid.dataLoaded, stageContractsDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение выходящих счетов на оплату от соисполнителя этапа\n const showPaymentAccountsIn = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_PAY_IN\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PaymentAccountsIn\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение фактических платежей соисполнителю этапа\n const showPayNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_FIN_OUT\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение приходных накладных от соисполнителя этапа\n const showIncomingInvoices = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGE_CONTRACTS_SELECT_ININV\",\n args: {\n NPROJECTSTAGEPF: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"IncomingInvoices\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStageContractsDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStageContractsDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStageContracts();\n }, [stageContractsDataGrid.reload, loadStageContracts]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n pt: 2\n }, stageContractsDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_9__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n sx: STYLES.TABLE_CONTRACTS(stageContractsDataGrid.morePages, (stageContractsDataGrid.filters || []).length > 0),\n elevation: 0\n },\n columnsDef: stageContractsDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stageContractsDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stageContractsDataGrid.morePages,\n reloading: stageContractsDataGrid.reload,\n fixedHeader: true,\n expandable: true,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_10__.PANEL_UNITS.PROJECT_STAGE_CONTRACTS,\n pOnlineShowDocument,\n showPaymentAccountsIn,\n showPayNotes,\n showIncomingInvoices\n }),\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_10__.valueFormatter,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Договоры с соисполнителями этапа проекта\nStageContracts.propTypes = {\n stage: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_12___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stage_contracts.js?"); /***/ }), @@ -5273,7 +5273,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stages: () => (/* binding */ Stages)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _stage_arts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./stage_arts */ \"./app/panels/prj_fin/stage_arts.js\");\n/* harmony import */ var _stage_contracts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./stage_contracts */ \"./app/panels/prj_fin/stage_contracts.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список этапов проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Таблица данных\n //Полноэкранный диалог\n //Калькуляция этапа проекта\n //Договоры с соисполнителями этапа проекта\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список этапов проекта\nconst Stages = ({\n project,\n projectName,\n filters\n}) => {\n //Собственное состояние\n const [stagesDataGrid, setStagesDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedStageNumb: null,\n showStageArts: null,\n stageArtsFilters: [],\n showStageContracts: null,\n stageContractsFilters: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_7__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_8__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_9__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStages = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stagesDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_LIST\",\n args: {\n NPRN: project,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stagesDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stagesDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStagesDataGrid(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [project, stagesDataGrid.reload, stagesDataGrid.filters, stagesDataGrid.orders, stagesDataGrid.dataLoaded, stagesDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение журнала затрат по этапу проекта\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_COST_FACT\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение расходных накладных на отпуск потребителям по этапу проекта\n const showGoodsTransInvoicesToConsumers = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_SUMM_REALIZ\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"GoodsTransInvoicesToConsumers\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение статей калькуляции по этапу проекта\n const showStageArts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageArtsFilters: [...filters]\n }));\n\n //Отображение договоров с соисполнителями по этапу проекта\n const showContracts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageContractsFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStagesDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStagesDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStagesDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка договоров этапа\n const handleStageContractsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: null,\n stageContractsFilters: []\n }));\n\n //При закрытии калькуляции этапа\n const handleStageArtsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: null,\n stageArtsFilters: []\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStages();\n }, [stagesDataGrid.reload, loadStages]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n pt: 2\n }, stagesDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_10__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: stagesDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stagesDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stagesDataGrid.morePages,\n reloading: stagesDataGrid.reload,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_11__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES,\n showStageArts,\n showContracts\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES,\n pOnlineShowDocument,\n showStageArts,\n showContracts,\n showPayNotes,\n showCostNotes,\n showGoodsTransInvoicesToConsumers\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_11__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_11__.PANEL_UNITS.PROJECT_STAGES\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, stagesDataGrid.showStageContracts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Договоры этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageContractsClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_contracts__WEBPACK_IMPORTED_MODULE_6__.StageContracts, {\n stage: stagesDataGrid.showStageContracts,\n filters: stagesDataGrid.stageContractsFilters\n })) : null, stagesDataGrid.showStageArts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_4__.P8PFullScreenDialog, {\n title: `Калькуляция этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageArtsClose\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_arts__WEBPACK_IMPORTED_MODULE_5__.StageArts, {\n stage: stagesDataGrid.showStageArts,\n filters: stagesDataGrid.stageArtsFilters\n })) : null);\n};\n\n//Контроль свойств - Список этапов проекта\nStages.propTypes = {\n project: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n projectName: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_13___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stages.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Stages: () => (/* binding */ Stages)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_15___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_15__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_fullscreen_dialog */ \"./app/components/p8p_fullscreen_dialog.js\");\n/* harmony import */ var _stage_arts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./stage_arts */ \"./app/panels/prj_fin/stage_arts.js\");\n/* harmony import */ var _stage_contracts__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./stage_contracts */ \"./app/panels/prj_fin/stage_contracts.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_fin/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Экономика проектов\r\n Панель мониторинга: Список этапов проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Вспомогательные процедуры и функции\n //Тектовые ресурсы и константы\n //Типовые стили\n //Заголовок страницы\n //Таблица данных\n //Полноэкранный диалог\n //Калькуляция этапа проекта\n //Договоры с соисполнителями этапа проекта\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Контекст сообщений\n //Подключение компонентов к настройкам приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n TABLE_STAGES: (morePages, filters) => ({\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_4__.APP_BAR_HEIGHT} - ${morePages ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_MORE_HEIGHT : \"0px\"} - ${filters ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTERS_HEIGHT : \"0px\"} - 16px)`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_3__.APP_STYLES.SCROLL\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список этапов проекта\nconst Stages = ({\n project,\n projectName,\n filters\n}) => {\n //Собственное состояние\n const [stagesDataGrid, setStagesDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: [...filters],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n selectedStageNumb: null,\n showStageArts: null,\n stageArtsFilters: [],\n showStageContracts: null,\n stageContractsFilters: []\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_9__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument,\n pOnlineShowUnit,\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_10__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_11__[\"MessagingСtx\"]);\n\n //Загрузка данных этапов с сервера\n const loadStages = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (stagesDataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_LIST\",\n args: {\n NPRN: project,\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(stagesDataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: stagesDataGrid.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: stagesDataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setStagesDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [project, stagesDataGrid.reload, stagesDataGrid.filters, stagesDataGrid.orders, stagesDataGrid.dataLoaded, stagesDataGrid.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //Отображение журнала платежей по этапу проекта\n const showPayNotes = async ({\n sender,\n direction\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_FIN\",\n args: {\n NRN: sender.NRN,\n NDIRECTION: direction\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"PayNotes\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение журнала затрат по этапу проекта\n const showCostNotes = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_COST_FACT\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"CostNotes\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение расходных накладных на отпуск потребителям по этапу проекта\n const showGoodsTransInvoicesToConsumers = async ({\n sender\n }) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.STAGES_SELECT_SUMM_REALIZ\",\n args: {\n NRN: sender.NRN\n }\n });\n if (data.NIDENT) pOnlineShowUnit({\n unitCode: \"GoodsTransInvoicesToConsumers\",\n inputParameters: [{\n name: \"in_IDENT\",\n value: data.NIDENT\n }]\n });else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_2__.TEXTS.NO_DATA_FOUND);\n };\n\n //Отображение статей калькуляции по этапу проекта\n const showStageArts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageArtsFilters: [...filters]\n }));\n\n //Отображение договоров с соисполнителями по этапу проекта\n const showContracts = ({\n sender,\n filters = []\n } = {}) => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: sender.NRN,\n selectedStageNumb: sender.SNUMB,\n stageContractsFilters: [...filters]\n }));\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setStagesDataGrid(pv => ({\n ...pv,\n filters,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setStagesDataGrid(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setStagesDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При закрытии списка договоров этапа\n const handleStageContractsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageContracts: null,\n stageContractsFilters: []\n }));\n\n //При закрытии калькуляции этапа\n const handleStageArtsClose = () => setStagesDataGrid(pv => ({\n ...pv,\n showStageArts: null,\n stageArtsFilters: []\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadStages();\n }, [stagesDataGrid.reload, loadStages]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n pt: 2\n }, stagesDataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_12__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n sx: STYLES.TABLE_STAGES(stagesDataGrid.morePages, (stagesDataGrid.filters || []).length > 0),\n elevation: 0\n },\n columnsDef: stagesDataGrid.columnsDef,\n filtersInitial: filters,\n rows: stagesDataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: stagesDataGrid.morePages,\n reloading: stagesDataGrid.reload,\n fixedHeader: true,\n expandable: true,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_13__.headCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_13__.dataCellRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_13__.PANEL_UNITS.PROJECT_STAGES,\n showStageArts,\n showContracts\n }),\n rowExpandRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_13__.rowExpandRender)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_13__.PANEL_UNITS.PROJECT_STAGES,\n pOnlineShowDocument,\n pOnlineShowUnit,\n showStageArts,\n showContracts,\n showPayNotes,\n showCostNotes,\n showGoodsTransInvoicesToConsumers\n }),\n valueFormatter: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_13__.valueFormatter)({\n ...prms,\n panelUnit: _layouts__WEBPACK_IMPORTED_MODULE_13__.PANEL_UNITS.PROJECT_STAGES\n }),\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null, stagesDataGrid.showStageContracts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_6__.P8PFullScreenDialog, {\n title: `Договоры этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageContractsClose,\n contentProps: {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_13__.COMMON_PROJECTS_STYLES.FULL_SCREEN_DIALOG_CONTENT\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_contracts__WEBPACK_IMPORTED_MODULE_8__.StageContracts, {\n stage: stagesDataGrid.showStageContracts,\n filters: stagesDataGrid.stageContractsFilters\n })) : null, stagesDataGrid.showStageArts ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_fullscreen_dialog__WEBPACK_IMPORTED_MODULE_6__.P8PFullScreenDialog, {\n title: `Калькуляция этапа \"${stagesDataGrid.selectedStageNumb}\" проекта \"${projectName}\"`,\n onClose: handleStageArtsClose,\n contentProps: {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_13__.COMMON_PROJECTS_STYLES.FULL_SCREEN_DIALOG_CONTENT\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_stage_arts__WEBPACK_IMPORTED_MODULE_7__.StageArts, {\n stage: stagesDataGrid.showStageArts,\n filters: stagesDataGrid.stageArtsFilters\n })) : null);\n};\n\n//Контроль свойств - Список этапов проекта\nStages.propTypes = {\n project: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n projectName: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().string).isRequired,\n filters: prop_types__WEBPACK_IMPORTED_MODULE_15___default().arrayOf(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_FILTER_SHAPE)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_fin/stages.js?"); /***/ }), @@ -5306,7 +5306,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjGraph: () => (/* binding */ PrjGraph)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_graph/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Панель мониторинга: Корневая панель графиков проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Заголовок страницы\n //Типовые стили\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DATA_GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_1__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_2__.APP_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Графики проектов\nconst PrjGraph = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.GRAPH\",\n args: {},\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: [...(data.XROWS || [])],\n groups: [...(data.XGROUPS || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.dataCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.groupCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n containerComponentProps: {\n elevation: 0,\n sx: STYLES.DATA_GRID_CONTAINER\n }\n })) : null)));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/prj_graph.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjGraph: () => (/* binding */ PrjGraph)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_graph/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Графики проектов\r\n Панель мониторинга: Корневая панель графиков проекта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные элементы\n //Заголовок страницы\n //Типовые стили\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DATA_GRID_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_1__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_2__.APP_STYLES.SCROLL\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Графики проектов\nconst PrjGraph = () => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_6__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.GRAPH\",\n args: {},\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: [...(data.XDATA_GRID.rows || [])],\n groups: [...(data.XDATA_GRID.groups || [])],\n dataLoaded: true,\n reload: false\n }));\n }\n }, [dataGrid.reload, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: dataGrid.reload,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.dataCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n groupCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.groupCellRender)({\n ...prms,\n pOnlineShowDocument\n }),\n containerComponentProps: {\n elevation: 0,\n sx: STYLES.DATA_GRID_CONTAINER\n }\n })) : null)));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_graph/prj_graph.js?"); /***/ }), @@ -5350,7 +5350,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabFactRptDtl: () => (/* binding */ LabFactRptDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nconst LabFactRptDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [factRptDtl, setFactRptDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации фактической трудоёмкости по отчетам для ресурса\n const loadFactRptDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (factRptDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_FACT_RPT_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(factRptDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: factRptDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: factRptDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setFactRptDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, factRptDtl.reload, factRptDtl.orders, factRptDtl.dataLoaded, factRptDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setFactRptDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGPagesCountChanged = () => setFactRptDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadFactRptDtl();\n }, [factRptDtl.reload, loadFactRptDtl]);\n\n //Генерация содержимого\n return factRptDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: factRptDtl.columnsDef,\n rows: factRptDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: factRptDtl.morePages,\n reloading: factRptDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlHeadCellRender,\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nLabFactRptDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_fact_rpt_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabFactRptDtl: () => (/* binding */ LabFactRptDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nconst LabFactRptDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [factRptDtl, setFactRptDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации фактической трудоёмкости по отчетам для ресурса\n const loadFactRptDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (factRptDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_FACT_RPT_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(factRptDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: factRptDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: factRptDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setFactRptDtl(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, factRptDtl.reload, factRptDtl.orders, factRptDtl.dataLoaded, factRptDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setFactRptDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в факта по \"Планам и отчетам в подразделении\"\n const handlePlanJobsDtlDGPagesCountChanged = () => setFactRptDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadFactRptDtl();\n }, [factRptDtl.reload, loadFactRptDtl]);\n\n //Генерация содержимого\n return factRptDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: factRptDtl.columnsDef,\n rows: factRptDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: factRptDtl.morePages,\n reloading: factRptDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.factRptDtlHeadCellRender,\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\nLabFactRptDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_fact_rpt_dtl.js?"); /***/ }), @@ -5361,7 +5361,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanFOTDtl: () => (/* binding */ LabPlanFOTDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по ФОТ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по ФОТ\nconst LabPlanFOTDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по ФОТ ресурса\n const [planFOTDtl, setPlanFOTDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по ФОТ для ресурса\n const loadPlanFOTDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planFOTDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_FOT_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planFOTDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planFOTDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planFOTDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanFOTDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planFOTDtl.reload, planFOTDtl.orders, planFOTDtl.dataLoaded, planFOTDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGOrderChanged = ({\n orders\n }) => setPlanFOTDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGPagesCountChanged = () => setPlanFOTDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanFOTDtl();\n }, [planFOTDtl.reload, loadPlanFOTDtl]);\n\n //Генерация содержимого\n return planFOTDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: true,\n onClose: onHide\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planFOTDtl.columnsDef,\n rows: planFOTDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planFOTDtl.morePages,\n reloading: planFOTDtl.reload,\n onOrderChanged: handlePlanFOTDtlDGOrderChanged,\n onPagesCountChanged: handlePlanFOTDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по ФОТ\nLabPlanFOTDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_fot_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanFOTDtl: () => (/* binding */ LabPlanFOTDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по ФОТ\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по ФОТ\nconst LabPlanFOTDtl = ({\n periodId,\n title,\n onHide\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по ФОТ ресурса\n const [planFOTDtl, setPlanFOTDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по ФОТ для ресурса\n const loadPlanFOTDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planFOTDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_FOT_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planFOTDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planFOTDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planFOTDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanFOTDtl(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planFOTDtl.reload, planFOTDtl.orders, planFOTDtl.dataLoaded, planFOTDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGOrderChanged = ({\n orders\n }) => setPlanFOTDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в в детализации плана ФОТ по строке ресурса\n const handlePlanFOTDtlDGPagesCountChanged = () => setPlanFOTDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanFOTDtl();\n }, [planFOTDtl.reload, loadPlanFOTDtl]);\n\n //Генерация содержимого\n return planFOTDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: true,\n onClose: onHide\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planFOTDtl.columnsDef,\n rows: planFOTDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planFOTDtl.morePages,\n reloading: planFOTDtl.reload,\n onOrderChanged: handlePlanFOTDtlDGOrderChanged,\n onPagesCountChanged: handlePlanFOTDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по ФОТ\nLabPlanFOTDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_fot_dtl.js?"); /***/ }), @@ -5372,7 +5372,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по графику для ресурса\n const loadPlanJobsDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_JOBS_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализаци\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanJobsDtl();\n }, [planJobsDtl.reload, loadPlanJobsDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlHeadCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlDataCellRender)({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ LabPlanJobsDtl: () => (/* binding */ LabPlanJobsDtl)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Детализация плановой трудоёмкости по графику\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Текстовые ресурсы\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация плановой трудоёмкости по графику\nconst LabPlanJobsDtl = ({\n periodId,\n title,\n onHide,\n onProjectClick\n}) => {\n //Состояние таблицы детализации плановой трудоёмкости по графику\n const [planJobsDtl, setPlanJobsDtl] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_2__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка детализации плановой трудоёмкости по графику для ресурса\n const loadPlanJobsDtl = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (planJobsDtl.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_JOBS_LIST\",\n args: {\n NJB_PERIODS: periodId,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.object2Base64XML)(planJobsDtl.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: planJobsDtl.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: planJobsDtl.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setPlanJobsDtl(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [periodId, planJobsDtl.reload, planJobsDtl.orders, planJobsDtl.dataLoaded, planJobsDtl.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния сортировки в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGOrderChanged = ({\n orders\n }) => setPlanJobsDtl(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в детализации плановой трудоёмкости по графику\n const handlePlanJobsDtlDGPagesCountChanged = () => setPlanJobsDtl(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализаци\n const handleProjectClick = ({\n sender\n }) => onProjectClick ? onProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPlanJobsDtl();\n }, [planJobsDtl.reload, loadPlanJobsDtl]);\n\n //Генерация содержимого\n return planJobsDtl.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onHide,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n columnsDef: planJobsDtl.columnsDef,\n rows: planJobsDtl.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: planJobsDtl.morePages,\n reloading: planJobsDtl.reload,\n valueFormatter: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlValueFormatter,\n headCellRender: _layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlHeadCellRender,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.planJobsDtlDataCellRender)({\n ...prms,\n onProjectClick: handleProjectClick\n }),\n onOrderChanged: handlePlanJobsDtlDGOrderChanged,\n onPagesCountChanged: handlePlanJobsDtlDGPagesCountChanged\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: onHide\n }, _app_text__WEBPACK_IMPORTED_MODULE_4__.BUTTONS.CLOSE))) : null;\n};\n\n//Контроль свойств - Детализация плановой трудоёмкости по графику\nLabPlanJobsDtl.propTypes = {\n periodId: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().number).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired,\n onHide: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func).isRequired,\n onProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/lab_plan_jobs_dtl.js?"); /***/ }), @@ -5394,7 +5394,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Заголовок страницы\n //Типовые стили\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Текстовые ресурсы и константы\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n left: \"16px\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n paddingTop: \"24px\"\n },\n GANTT_TITLE: {\n paddingLeft: \"150px\",\n paddingRight: \"150px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n right: \"16px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Диалог параметров инициализации панели\nconst InitPrmsDialog = ({\n dateBegin,\n dateFact,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [values, setValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dateBegin: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateBegin),\n dateFact: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateFact)\n });\n\n //Отработка воода значения в фильтр\n const handleValueTextFieldChanged = e => setValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"init-dialog-title\",\n \"aria-describedby\": \"init-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"\\u041F\\u0430\\u0440\\u0430\\u043C\\u0435\\u0442\\u0440\\u044B \\u0438\\u043D\\u0438\\u0446\\u0438\\u0430\\u043B\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateBegin\",\n type: \"date\",\n value: values.dateBegin,\n onChange: handleValueTextFieldChanged,\n label: \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u0435\\u0440\\u0432\\u044B\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateFact\",\n type: \"date\",\n value: values.dateFact,\n onChange: handleValueTextFieldChanged,\n label: \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430 (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0438\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => onOk ? onOk({\n dateBegin: new Date(values.dateBegin),\n dateFact: new Date(values.dateFact)\n }) : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_9__.BUTTONS.OK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_9__.BUTTONS.CANCEL)));\n};\n\n//Контроль свойств - Диалог параметров инициализации панели\nInitPrmsDialog.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date).isRequired,\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//Область параметров инициализации панели\nconst InitPrmsArea = ({\n dateBegin,\n dateFact,\n durationMeasCode,\n labMeasCode,\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(dateBegin), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(dateFact), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0414\\u043B\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0441\\u0442\\u044C: \"), durationMeasCode, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0451\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C: \"), labMeasCode)\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, \"refresh\"),\n onClick: onClick ? onClick : null\n }, \"\\u041F\\u0435\\u0440\\u0435\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C...\")));\n};\n\n//Контроль свойств - Область параметров инициализации панели\nInitPrmsArea.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date),\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date),\n durationMeasCode: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().string),\n labMeasCode: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().string),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//Область сохранения изменений\nconst SaveChangesArea = ({\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n fullWidth: true,\n color: \"warning\",\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, \"save\"),\n onClick: onClick\n }, \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\")));\n};\n\n//Контроль свойств - Область сохранения изменений\nSaveChangesArea.propTypes = {\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n durationMeasCode: null,\n labMeas: null,\n labMeasCode: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectGanttDef: {},\n selectedProjectTasks: [],\n showInitDialog: false\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n selectedProjectGanttDef: tasksOnly === true ? {\n ...pv.selectedProjectGanttDef\n } : data.XGANTT_DEF ? {\n ...data.XGANTT_DEF\n } : {},\n selectedProjectTasks: [...data.XGANTT_TASKS]\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? state.dateBegin : null,\n DFACT: state.dateFact ? state.dateFact : null,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n reInit: false,\n dateBegin: new Date(data.DBEGIN),\n dateFact: new Date(data.DFACT),\n durationMeas: data.NDURATION_MEAS,\n durationMeasCode: data.SDURATION_MEAS,\n labMeas: data.NLAB_MEAS,\n labMeasCode: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При изменении флага инициализации\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n }, [state.init, initJobs]);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n selectedProjectTasks: [],\n selectedProjectGanttDef: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end));\n };\n\n //Отработка нажатия на отображения диалога параметров инициализации панели\n const handleShowInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: true\n }));\n\n //Отработка нажатия на \"ОК\" в диалоге параметров инициализации панели\n const handleOKInitDialogClick = values => setState(pv => ({\n ...pv,\n dateBegin: values.dateBegin,\n dateFact: values.dateFact,\n showInitDialog: false,\n init: false\n }));\n\n //Отработка нажатия на \"Отмена\" в диалоге параметров инициализации панели\n const handleCancelInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: false\n }));\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, state.showInitDialog ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitPrmsDialog, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n onOk: handleOKInitDialogClick,\n onCancel: handleCancelInitDialogClick\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitPrmsArea, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n durationMeasCode: state.durationMeasCode,\n labMeasCode: state.labMeasCode,\n onClick: handleShowInitDialogClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null), state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SaveChangesArea, {\n onClick: handleSaveToProjectsClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null)) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_10__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_8__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_CONFIG_PROPS, state.selectedProjectGanttDef, {\n containerStyle: STYLES.GANTT_CONTAINER,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n tasks: state.selectedProjectTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_11__.taskAttributeRenderer\n })) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n })) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PrjJobs: () => (/* binding */ PrjJobs)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemButton/ListItemButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemIcon/ListItemIcon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Fab/Fab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Drawer/Drawer.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _res_mon__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./res_mon */ \"./app/panels/prj_jobs/res_mon.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Панель мониторинга: Корневая панель работ проектов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Контекст взаимодействия с сервером\n //Контекст сообщений\n //Контекст приложения\n //Вспомогательные функции\n //Заголовок страницы\n //Типовые стили\n //Подключение компонентов к настройкам приложения\n //Диаграмма Ганта\n //Вспомогательные функции\n //Текстовые ресурсы и константы\n //Монитор ресурсов\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n PROJECTS_LIST_ITEM_NOJOBS: {\n backgroundColor: \"#ff000045\"\n },\n PROJECTS_LIST_ITEM_PRIMARY: {\n wordWrap: \"break-word\"\n },\n PROJECTS_LIST_ITEM_SECONDARY: {\n wordWrap: \"break-word\",\n fontSize: \"0.5rem\",\n textTransform: \"uppercase\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOJOBS: {\n color: \"red\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_NOEDIT: {\n color: \"gray\"\n },\n PROJECTS_LIST_ITEM_SECONDARY_CHANGED: {\n color: \"green\"\n },\n PROJECTS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n left: \"16px\"\n },\n PROJECTS_DRAWER: {\n width: \"250px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"250px\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT})`,\n width: \"100vw\",\n paddingTop: \"24px\"\n },\n GANTT_TITLE: {\n paddingLeft: \"150px\",\n paddingRight: \"150px\"\n },\n PERIODS_BUTTON: {\n position: \"absolute\",\n top: `calc(${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_5__.APP_BAR_HEIGHT} + 16px)`,\n right: \"16px\"\n },\n PERIODS_DRAWER: {\n width: \"1200px\",\n flexShrink: 0,\n [`& .MuiDrawer-paper`]: {\n width: \"1200px\",\n boxSizing: \"border-box\",\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Диалог параметров инициализации панели\nconst InitPrmsDialog = ({\n dateBegin,\n dateFact,\n onOk,\n onCancel\n}) => {\n //Собственное состояние - значения с-по\n const [values, setValues] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dateBegin: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateBegin),\n dateFact: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(dateFact)\n });\n\n //Отработка воода значения в фильтр\n const handleValueTextFieldChanged = e => setValues(prev => ({\n ...prev,\n [e.target.name]: e.target.value\n }));\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n open: true,\n \"aria-labelledby\": \"init-dialog-title\",\n \"aria-describedby\": \"init-dialog-description\",\n onClose: () => onCancel ? onCancel() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"\\u041F\\u0430\\u0440\\u0430\\u043C\\u0435\\u0442\\u0440\\u044B \\u0438\\u043D\\u0438\\u0446\\u0438\\u0430\\u043B\\u0438\\u0437\\u0430\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateBegin\",\n type: \"date\",\n value: values.dateBegin,\n onChange: handleValueTextFieldChanged,\n label: \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u0435\\u0440\\u0432\\u044B\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n style: {\n padding: \"10px\"\n },\n name: \"dateFact\",\n type: \"date\",\n value: values.dateFact,\n onChange: handleValueTextFieldChanged,\n label: \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430 (\\u0431\\u0443\\u0434\\u0435\\u0442 \\u0438\\u0441\\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u043D \\u043F\\u043E\\u0441\\u043B\\u0435\\u0434\\u043D\\u0438\\u0439 \\u0434\\u0435\\u043D\\u044C \\u043C\\u0435\\u0441\\u044F\\u0446\\u0430)\",\n variant: \"standard\",\n fullWidth: true\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => onOk ? onOk({\n dateBegin: new Date(values.dateBegin),\n dateFact: new Date(values.dateFact)\n }) : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_9__.BUTTONS.OK), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => onCancel ? onCancel() : null\n }, _app_text__WEBPACK_IMPORTED_MODULE_9__.BUTTONS.CANCEL)));\n};\n\n//Контроль свойств - Диалог параметров инициализации панели\nInitPrmsDialog.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date).isRequired,\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date).isRequired,\n onOk: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func),\n onCancel: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//Область параметров инициализации панели\nconst InitPrmsArea = ({\n dateBegin,\n dateFact,\n durationMeasCode,\n labMeasCode,\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u041D\\u0430\\u0447\\u0430\\u043B\\u043E: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(dateBegin), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0424\\u0430\\u043A\\u0442 \\u043D\\u0430: \"), (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateRF)(dateFact), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0414\\u043B\\u0438\\u0442\\u0435\\u043B\\u044C\\u043D\\u043E\\u0441\\u0442\\u044C: \"), durationMeasCode, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"br\", null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, \"\\u0422\\u0440\\u0443\\u0434\\u043E\\u0451\\u043C\\u043A\\u043E\\u0441\\u0442\\u044C: \"), labMeasCode)\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n fullWidth: true,\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, \"refresh\"),\n onClick: onClick ? onClick : null\n }, \"\\u041F\\u0435\\u0440\\u0435\\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C...\")));\n};\n\n//Контроль свойств - Область параметров инициализации панели\nInitPrmsArea.propTypes = {\n dateBegin: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date),\n dateFact: prop_types__WEBPACK_IMPORTED_MODULE_18___default().instanceOf(Date),\n durationMeasCode: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().string),\n labMeasCode: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().string),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//Область сохранения изменений\nconst SaveChangesArea = ({\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_20__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n fullWidth: true,\n color: \"warning\",\n variant: \"contained\",\n startIcon: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], null, \"save\"),\n onClick: onClick\n }, \"\\u0421\\u043E\\u0445\\u0440\\u0430\\u043D\\u0438\\u0442\\u044C\")));\n};\n\n//Контроль свойств - Область сохранения изменений\nSaveChangesArea.propTypes = {\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//Список проектов\nconst ProjectsList = ({\n projects = [],\n selectedProject,\n onClick\n} = {}) => {\n //Подключение к контексту сообщений\n const {\n InlineMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Генерация содержимого\n return projects.length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], null, projects.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_23__[\"default\"], {\n key: p.NRN,\n sx: p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_NOJOBS : null,\n selected: p.NRN === selectedProject,\n onClick: () => onClick ? onClick(p) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_24__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n title: p.NEDITABLE == 1 ? \"Можно редактировать\" : \"Редактирование недоступно\"\n }, p.NEDITABLE == 1 ? \"edit\" : \"edit_off\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n primary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n sx: STYLES.PROJECTS_LIST_ITEM_PRIMARY\n }, p.SNAME),\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_25__[\"default\"], {\n sx: {\n ...STYLES.PROJECTS_LIST_ITEM_SECONDARY,\n ...(p.NJOBS == 0 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOJOBS : p.NCHANGED == 1 ? STYLES.PROJECTS_LIST_ITEM_SECONDARY_CHANGED : STYLES.PROJECTS_LIST_ITEM_SECONDARY_NOEDIT)\n }\n }, p.NJOBS == 1 ? p.NEDITABLE == 1 ? p.NCHANGED == 1 ? \"Изменён\" : \"Не изменён\" : \"Редактирование недоступно\" : \"Работы не определены\")\n })))) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgErr, {\n okBtn: false,\n text: \"Нет доступных проектов\"\n });\n};\n\n//Контроль свойств - Список проектов\nProjectsList.propTypes = {\n projects: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().array),\n selectedProject: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().func)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель работ проектов\nconst PrjJobs = () => {\n //Собственное состояние\n let [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n needSave: false,\n showProjectsList: false,\n showPeriodsList: false,\n init: false,\n dateBegin: null,\n dateFact: null,\n durationMeas: null,\n durationMeasCode: null,\n labMeas: null,\n labMeasCode: null,\n resourceStatus: null,\n ident: null,\n projects: [],\n projectsLoaded: false,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n gantt: {},\n showInitDialog: false\n });\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_2__[\"MessagingСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndСtx\"]);\n\n //Загрузка списка проектов\n const loadProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (force = false) => {\n if (!state.projectsLoaded || force) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PRJCTS_LIST\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\",\n isArray: name => name === \"XPROJECTS\"\n });\n setState(pv => ({\n ...pv,\n projectsLoaded: true,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }\n }, [executeStored, state.ident, state.projectsLoaded]);\n\n //Загрузка списка работ проекта\n const loadProjectJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (tasksOnly = false) => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_LIST\",\n args: {\n NIDENT: state.ident,\n NPRN: state.selectedProject,\n NINCLUDE_DEF: tasksOnly === false ? 1 : 0\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: true,\n gantt: {\n ...(tasksOnly === true ? {\n ...pv.gantt,\n tasks: [...data.XGANTT.tasks]\n } : data.XGANTT ? {\n ...data.XGANTT\n } : {})\n }\n }));\n }, [executeStored, state.ident, state.selectedProject]);\n\n //Изменение работы в графике\n const modifyJob = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (job, dateFrom, dateTo) => {\n let data = null;\n try {\n data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD\",\n args: {\n NJB_JOBS: job,\n DDATE_FROM: dateFrom,\n DDATE_TO: dateTo\n }\n });\n if (data?.NRESOURCE_STATUS != -1) {\n setState(pv => ({\n ...pv,\n resourceStatus: data.NRESOURCE_STATUS,\n needSave: true\n }));\n loadProjects(true);\n }\n } finally {\n loadProjectJobs(true);\n }\n }, [executeStored, loadProjectJobs, loadProjects]);\n\n //Сохранение буфера балансировки в проекты\n const saveProjects = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_SAVE\",\n args: {\n NIDENT: state.ident\n },\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n needSave: false,\n projects: [...(data?.XPROJECTS || [])]\n }));\n }, [executeStored, state.ident]);\n\n //Инициализация данных балансировки\n const initJobs = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_INIT\",\n args: {\n DBEGIN: state.dateBegin ? state.dateBegin : null,\n DFACT: state.dateFact ? state.dateFact : null,\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n reInit: false,\n dateBegin: new Date(data.DBEGIN),\n dateFact: new Date(data.DFACT),\n durationMeas: data.NDURATION_MEAS,\n durationMeasCode: data.SDURATION_MEAS,\n labMeas: data.NLAB_MEAS,\n labMeasCode: data.SLAB_MEAS,\n resourceStatus: data.NRESOURCE_STATUS,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.dateBegin, state.dateFact, state.ident, executeStored]);\n\n //Грузим список проектов при смене идентификатора процесса\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadProjects();\n }, [state.ident, loadProjects]);\n\n //При смене выбранного проекта\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedProject) loadProjectJobs(false);\n }, [state.selectedProject, loadProjectJobs]);\n\n //При изменении флага инициализации\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initJobs();\n }, [state.init, initJobs]);\n\n //Выбор проекта\n const selectPoject = (project, projectDocRn) => {\n setState(pv => ({\n ...pv,\n selectedProject: project,\n selectedProjectDocRn: projectDocRn,\n selectedProjectJobsLoaded: false,\n gantt: {},\n showProjectsList: false\n }));\n };\n\n //Сброс выбора проекта\n const unselectProject = () => setState(pv => ({\n ...pv,\n selectedProjectJobsLoaded: false,\n selectedProject: null,\n selectedProjectDocRn: null,\n gantt: {},\n showProjectsList: false\n }));\n\n //Обработка нажатия на элемент в списке проектов\n const handleProjectClick = project => {\n if (state.selectedProject != project.NRN) selectPoject(project.NRN, project.NPROJECT);else unselectProject();\n };\n\n //Отработка нажатия на заголовок плана-графика\n const handleTitleClick = () => state.selectedProjectDocRn ? pOnlineShowDocument({\n unitCode: \"Projects\",\n document: state.selectedProjectDocRn\n }) : null;\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyJob(task.rn, new Date(start), new Date(end));\n };\n\n //Отработка нажатия на отображения диалога параметров инициализации панели\n const handleShowInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: true\n }));\n\n //Отработка нажатия на \"ОК\" в диалоге параметров инициализации панели\n const handleOKInitDialogClick = values => setState(pv => ({\n ...pv,\n dateBegin: values.dateBegin,\n dateFact: values.dateFact,\n showInitDialog: false,\n init: false\n }));\n\n //Отработка нажатия на \"Отмена\" в диалоге параметров инициализации панели\n const handleCancelInitDialogClick = () => setState(pv => ({\n ...pv,\n showInitDialog: false\n }));\n\n //Обработка нажатия на сохранение данных в проект\n const handleSaveToProjectsClick = () => saveProjects();\n\n //Обработка нажатия на проект в таблице детализации трудоёмкости по плану-графику монитора ресурсов\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => {\n setState(pv => ({\n ...pv,\n showPeriodsList: false\n }));\n if (state.selectedProject != sender.NJB_PRJCTS) selectPoject(sender.NJB_PRJCTS, sender.NPROJECT);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], null, state.showInitDialog ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitPrmsDialog, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n onOk: handleOKInitDialogClick,\n onCancel: handleCancelInitDialogClick\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PROJECTS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showProjectsList: !pv.showProjectsList\n }))\n }, \"\\u041F\\u0440\\u043E\\u0435\\u043A\\u0442\\u044B\", state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: {\n color: \"orange\"\n }\n }, \"save\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n anchor: \"left\",\n open: state.showProjectsList,\n onClose: () => setState(pv => ({\n ...pv,\n showProjectsList: false\n })),\n sx: STYLES.PROJECTS_DRAWER\n }, state.projectsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InitPrmsArea, {\n dateBegin: state.dateBegin,\n dateFact: state.dateFact,\n durationMeasCode: state.durationMeasCode,\n labMeasCode: state.labMeasCode,\n onClick: handleShowInitDialogClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null), state.needSave ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(SaveChangesArea, {\n onClick: handleSaveToProjectsClick\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_29__[\"default\"], null)) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProjectsList, {\n projects: state.projects,\n selectedProject: state.selectedProject,\n onClick: handleProjectClick\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_27__[\"default\"], {\n variant: \"extended\",\n sx: STYLES.PERIODS_BUTTON,\n onClick: () => setState(pv => ({\n ...pv,\n showPeriodsList: !pv.showPeriodsList\n }))\n }, \"\\u0420\\u0435\\u0441\\u0443\\u0440\\u0441\\u044B\", [0, 1].includes(state.resourceStatus) ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, \"\\xA0\\xA0\", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n sx: {\n color: state.resourceStatus === 0 ? \"green\" : \"red\"\n }\n }, state.resourceStatus === 0 ? \"done\" : \"error\")) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_28__[\"default\"], {\n anchor: \"right\",\n open: state.showPeriodsList,\n onClose: () => setState(pv => ({\n ...pv,\n showPeriodsList: false\n })),\n sx: STYLES.PERIODS_DRAWER\n }, state.ident ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_res_mon__WEBPACK_IMPORTED_MODULE_10__.ResMon, {\n ident: state.ident,\n onPlanJobsDtlProjectClick: handlePlanJobsDtlProjectClick\n }) : null), state.init == true ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n container: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_30__[\"default\"], {\n item: true,\n xs: 12\n }, state.selectedProjectJobsLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_8__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_7__.P8P_GANTT_CONFIG_PROPS, state.gantt, {\n containerStyle: STYLES.GANTT_CONTAINER,\n titleStyle: STYLES.GANTT_TITLE,\n onTitleClick: handleTitleClick,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: _layouts__WEBPACK_IMPORTED_MODULE_11__.taskAttributeRenderer\n })) : !state.selectedProject ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_26__[\"default\"], {\n pt: 3\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(InlineMsgInfo, {\n okBtn: false,\n text: \"Укажите проект для отображения его плана-графика\"\n })) : null)) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/prj_jobs.js?"); /***/ }), @@ -5405,7 +5405,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResMon: () => (/* binding */ ResMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lab_plan_fot_dtl */ \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\");\n/* harmony import */ var _lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lab_fact_rpt_dtl */ \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\");\n/* harmony import */ var _lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lab_plan_jobs_dtl */ \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Монитор ресурсов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовые стили\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Детализация плановой трудоёмкости по ФОТ\n //Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\n //Детализация плановой трудоёмкости по графику\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DATA_GRID_CONTAINER: morePages => ({\n height: `calc(100vh - ${morePages ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_MORE_HEIGHT : \"0px\"})`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Монитор ресурсов\nconst ResMon = ({\n ident,\n onPlanJobsDtlProjectClick\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n });\n\n //Состояние таблицы периодов монитора ресурсов\n const [peridos, setPeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Загрузка данных монитора балансировки периодов с сервера\n const loadPeriods = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (peridos.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST\",\n args: {\n NIDENT: ident,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(peridos.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: peridos.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: peridos.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SPERIOD\" ? undefined : val,\n respArg: \"COUT\"\n });\n setPeriods(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= configSystemPageSize\n }));\n }\n }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При сокрытии детализации\n const handleHideDtl = () => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n }));\n\n //При нажатии на плановую трудоёмкость по ФОТ\n const handleLabPlanFOTClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: sender.NRN,\n titlePlanFOTDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_FOT}`\n }));\n\n //При нажатии на фактическую трудоёмкость по отчетам\n const handleLabFactRptClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayFactRptDtl: sender.NRN,\n titleFactRptDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_FACT_RPT}`\n }));\n\n //При нажатии на проект в списке детализации плановой трудоёмкости по графику\n const handleLabPlanJobsClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanJobsDtl: sender.NRN,\n titlePlanJobsDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_JOBS}`\n }));\n\n //При изменении состояния сортировки в таблице периодов балансировки\n const handlePeriodsOrderChanged = ({\n orders\n }) => setPeriods(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в таблице периодов балансировки\n const handlePeriodsPagesCountChanged = () => setPeriods(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализации трудоёмкости по плану-графику\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => onPlanJobsDtlProjectClick ? onPlanJobsDtlProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPeriods();\n }, [peridos.reload, loadPeriods]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, peridos.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 0,\n sx: STYLES.DATA_GRID_CONTAINER(peridos.morePages)\n },\n columnsDef: peridos.columnsDef,\n rows: peridos.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: peridos.morePages,\n reloading: peridos.reload,\n fixedHeader: true,\n onOrderChanged: handlePeriodsOrderChanged,\n onPagesCountChanged: handlePeriodsPagesCountChanged,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.periodsDataCellRender)({\n ...prms,\n onLabPlanFOTClick: handleLabPlanFOTClick,\n onLabFactRptClick: handleLabFactRptClick,\n onLabPlanJobsClick: handleLabPlanJobsClick\n })\n })) : null, state.displayPlanFOTDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_7__.LabPlanFOTDtl, {\n periodId: state.displayPlanFOTDtl,\n title: state.titlePlanFOTDtl,\n onHide: handleHideDtl\n }) : null, state.displayFactRptDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_8__.LabFactRptDtl, {\n periodId: state.displayFactRptDtl,\n title: state.titleFactRptDtl,\n onHide: handleHideDtl\n }) : null, state.displayPlanJobsDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_9__.LabPlanJobsDtl, {\n periodId: state.displayPlanJobsDtl,\n title: state.titlePlanJobsDtl,\n onHide: handleHideDtl,\n onProjectClick: handlePlanJobsDtlProjectClick\n }) : null);\n};\n\n//Контроль свойств - Монитор ресурсов\nResMon.propTypes = {\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number).isRequired,\n onPlanJobsDtlProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/res_mon.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ResMon: () => (/* binding */ ResMon)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_11___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_11__);\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lab_plan_fot_dtl */ \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\");\n/* harmony import */ var _lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lab_fact_rpt_dtl */ \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\");\n/* harmony import */ var _lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lab_plan_jobs_dtl */ \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./layouts */ \"./app/panels/prj_jobs/layouts.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - ПУП - Работы проектов\r\n Компонент панели: Монитор ресурсов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Типовые стили\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Вспомогательные функции\n //Подключение компонентов к настройкам приложения\n //Таблица данных\n //Детализация плановой трудоёмкости по ФОТ\n //Детализация фактической трудоёмкости по \"Планам и отчетам подразделений\"\n //Детализация плановой трудоёмкости по графику\n //Дополнительная разметка и вёрстка клиентских элементов\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n DATA_GRID_CONTAINER: morePages => ({\n height: `calc(100vh - ${morePages ? _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_MORE_HEIGHT : \"0px\"})`,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_1__.APP_STYLES.SCROLL\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Монитор ресурсов\nconst ResMon = ({\n ident,\n onPlanJobsDtlProjectClick\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n });\n\n //Состояние таблицы периодов монитора ресурсов\n const [peridos, setPeriods] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n });\n\n //Подключение к контексту приложения\n const {\n configSystemPageSize\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Загрузка данных монитора балансировки периодов с сервера\n const loadPeriods = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (peridos.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST\",\n args: {\n NIDENT: ident,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.object2Base64XML)(peridos.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: peridos.pageNumber,\n NPAGE_SIZE: configSystemPageSize,\n NINCLUDE_DEF: peridos.dataLoaded ? 0 : 1\n },\n attributeValueProcessor: (name, val) => name == \"SPERIOD\" ? undefined : val,\n respArg: \"COUT\"\n });\n setPeriods(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XDATA_GRID.rows || []).length >= configSystemPageSize\n }));\n }\n }, [ident, peridos.reload, peridos.orders, peridos.dataLoaded, peridos.pageNumber, executeStored, configSystemPageSize, SERV_DATA_TYPE_CLOB]);\n\n //При сокрытии детализации\n const handleHideDtl = () => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: null,\n titlePlanFOTDtl: null,\n displayFactRptDtl: null,\n titleFactRptDtl: null,\n displayPlanJobsDtl: null,\n titlePlanJobsDtl: null\n }));\n\n //При нажатии на плановую трудоёмкость по ФОТ\n const handleLabPlanFOTClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanFOTDtl: sender.NRN,\n titlePlanFOTDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_FOT}`\n }));\n\n //При нажатии на фактическую трудоёмкость по отчетам\n const handleLabFactRptClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayFactRptDtl: sender.NRN,\n titleFactRptDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_FACT_RPT}`\n }));\n\n //При нажатии на проект в списке детализации плановой трудоёмкости по графику\n const handleLabPlanJobsClick = ({\n sender\n }) => setState(pv => ({\n ...pv,\n displayPlanJobsDtl: sender.NRN,\n titlePlanJobsDtl: `${sender.SPERIOD} - ${sender.SINS_DEPARTMENT} - ${sender.SFCMANPOWER} - ${sender.NLAB_PLAN_JOBS}`\n }));\n\n //При изменении состояния сортировки в таблице периодов балансировки\n const handlePeriodsOrderChanged = ({\n orders\n }) => setPeriods(pv => ({\n ...pv,\n orders,\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц в таблице периодов балансировки\n const handlePeriodsPagesCountChanged = () => setPeriods(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на проект в таблице детализации трудоёмкости по плану-графику\n const handlePlanJobsDtlProjectClick = ({\n sender\n }) => onPlanJobsDtlProjectClick ? onPlanJobsDtlProjectClick({\n sender\n }) : null;\n\n //При необходимости обновить данные\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadPeriods();\n }, [peridos.reload, loadPeriods]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, peridos.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_5__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 0,\n sx: STYLES.DATA_GRID_CONTAINER(peridos.morePages)\n },\n columnsDef: peridos.columnsDef,\n rows: peridos.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_6__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: peridos.morePages,\n reloading: peridos.reload,\n fixedHeader: true,\n onOrderChanged: handlePeriodsOrderChanged,\n onPagesCountChanged: handlePeriodsPagesCountChanged,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_10__.periodsDataCellRender)({\n ...prms,\n onLabPlanFOTClick: handleLabPlanFOTClick,\n onLabFactRptClick: handleLabFactRptClick,\n onLabPlanJobsClick: handleLabPlanJobsClick\n })\n })) : null, state.displayPlanFOTDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_fot_dtl__WEBPACK_IMPORTED_MODULE_7__.LabPlanFOTDtl, {\n periodId: state.displayPlanFOTDtl,\n title: state.titlePlanFOTDtl,\n onHide: handleHideDtl\n }) : null, state.displayFactRptDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_fact_rpt_dtl__WEBPACK_IMPORTED_MODULE_8__.LabFactRptDtl, {\n periodId: state.displayFactRptDtl,\n title: state.titleFactRptDtl,\n onHide: handleHideDtl\n }) : null, state.displayPlanJobsDtl ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_lab_plan_jobs_dtl__WEBPACK_IMPORTED_MODULE_9__.LabPlanJobsDtl, {\n periodId: state.displayPlanJobsDtl,\n title: state.titlePlanJobsDtl,\n onHide: handleHideDtl,\n onProjectClick: handlePlanJobsDtlProjectClick\n }) : null);\n};\n\n//Контроль свойств - Монитор ресурсов\nResMon.propTypes = {\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().number).isRequired,\n onPlanJobsDtlProjectClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/prj_jobs/res_mon.js?"); /***/ }), @@ -5471,7 +5471,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ a11yProps: () => (/* binding */ a11yProps),\n/* harmony export */ useConf: () => (/* binding */ useConf),\n/* harmony export */ useFormDialog: () => (/* binding */ useFormDialog),\n/* harmony export */ useRecOpen: () => (/* binding */ useRecOpen),\n/* harmony export */ useTab: () => (/* binding */ useTab),\n/* harmony export */ useWindowResize: () => (/* binding */ useWindowResize)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./IUD/iud_form_dialog */ \"./app/panels/rrp_conf_editor/IUD/iud_form_dialog.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта\r\n Пользовательские хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Контекст сообщений\n //Статусы диалогов\n //Тексты для ошибок\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для отработки изменений ширины и высоты рабочей области окна\nconst useWindowResize = () => {\n //Состояние размера рабочей области\n const [size, setSize] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([0, 0]);\n\n //При изменении размера\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n const updateSize = () => {\n setSize([document.documentElement.clientWidth, document.documentElement.clientHeight]);\n };\n window.addEventListener(\"resize\", updateSize);\n updateSize();\n return () => window.removeEventListener(\"resize\", updateSize);\n }, []);\n\n //Вернём размеры\n return size;\n};\n\n//Хук для настройки регламентированного отчета\nconst useConf = (currentTab, handleSectionChange) => {\n //Собственное состояние - таблица данных\n const dataGrid = {\n rn: 0,\n code: \"\",\n name: \"\",\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n fixedHeader: false,\n fixedColumns: 0,\n reload: false\n };\n\n //Собственное состояние\n const [rrpConf, setRrpConf] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n docLoaded: false,\n sections: [],\n reload: true\n });\n\n //Состояние массива данных разделов\n const [dataGrids] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //При необходимости обновить\n const handleReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n setRrpConf(pv => ({\n ...pv,\n reload: true\n }));\n }, []);\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpConf.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = currentTab ? currentTab : 0;\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONF_GET_SECTIONS\",\n args: {\n NRN_RRPCONF: Number(getNavigationSearch().NRN)\n },\n respArg: \"COUT\"\n });\n //Флаг первой загрузки данных\n let firstLoad = dataGrids.length == 0 ? true : false;\n //Копирование массива уже загруженных разделов\n let cloneDGs = dataGrids.slice();\n //Массив из нескольких разделов и из одного\n const sections = data.SECTIONS ? data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS] : [];\n //Заполнение очередного раздела по шаблону\n sections.map(s => {\n let dg = {};\n Object.assign(dg, dataGrid, {\n rn: s.NRN,\n code: s.SCODE,\n name: s.SNAME,\n delete_allow: s.NDELETE_ALLOW,\n dataLoaded: true,\n columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])],\n groups: [...(s.XDATA.XGROUPS || [])],\n rows: [...(s.XDATA.XROWS || [])],\n fixedHeader: s.XDATA.XDATA_GRID.fixedHeader,\n fixedColumns: s.XDATA.XDATA_GRID.fixedColumns,\n reload: false\n });\n //Если раздел имеет составы показателей\n if (s.MARK_CNS.MARK_CN) {\n //Обходим строки раздела\n dg.rows.map(row => {\n //Цикл по ключам строки\n for (let key in row) {\n //Если это ключ для группы составов показателей\n if (key.match(/MARK_CNS_.*/)) {\n //Считываем рег. номер показателя\n let markRn = key.substring(9);\n //Переносим из раздела\n row[key] = Array.isArray(s.MARK_CNS.MARK_CN) ? [...s.MARK_CNS.MARK_CN].filter(el => el.NPRN === row[`NMARK_RN_${markRn}`]) : s.MARK_CNS.MARK_CN.NPRN === row[`NMARK_RN_${markRn}`] ? [s.MARK_CNS.MARK_CN] : null;\n }\n }\n });\n }\n //Ищем загружен ли уже раздел с таким же ид.\n const dgItem = dataGrids.find(x => x.rn === dg.rn);\n //Его индекс, если нет соответствия, то -1\n let index = dataGrids.indexOf(dgItem);\n //Если было соответствие\n if (dgItem) {\n //Если в нём не найдено изменений\n if (JSON.stringify(dgItem, null, 4) === JSON.stringify(dg, null, 4)) {\n //То из копированного массива его удаляем\n cloneDGs.splice(cloneDGs.indexOf(cloneDGs.find(x => x.rn === dgItem.rn)), 1);\n } else {\n //Иначе обновляем раздел в массиве\n dataGrids[index] = dg;\n //Удаляем из копированного массива\n cloneDGs.splice(cloneDGs.indexOf(cloneDGs.find(x => x.rn === dg.rn)), 1);\n //Устанавливаем фокус на обновлённый раздел\n tabFocus = index;\n }\n } else {\n //Если раздел новый, то добавляем его в массив данных\n dataGrids.push(dg);\n //И устанавливаем на него фокус, если флаг первой загрузки = false\n tabFocus = !firstLoad ? dataGrids.length - 1 : 0;\n }\n });\n //Обходим разделы, что остались в копированном массиве (на удаление)\n cloneDGs.map(s => {\n let curIndex = dataGrids.indexOf(dataGrids.find(x => x.rn === s.rn));\n //Устаревший раздел удаляем из массива данных\n dataGrids.splice(curIndex, 1);\n //Фокус на предшествующий раздел\n if (curIndex > 0) tabFocus = curIndex - 1;\n //Иначе фокус на следующий, если был удалён первый раздел\n else tabFocus = curIndex;\n });\n setRrpConf(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n handleSectionChange(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpConf.reload, rrpConf.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpConf.reload, dataGrid.reload, loadData]);\n return [rrpConf, handleReload];\n};\n\n//Хук для вкладки\nconst useTab = () => {\n //Состояние раздела\n const [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Переключение раздела\n const handleSectionChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newValue => {\n setTabValue(newValue);\n }, []);\n return [tabValue, handleSectionChange];\n};\n\n//Хук для функций открытия записей\nconst useRecOpen = handleReload => {\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_4__[\"MessagingСtx\"]);\n\n //Отображение показателя раздела\n const handleMarkOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async nRrpConfSctnMrk => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODES\",\n args: {\n NRN: nRrpConfSctnMrk\n },\n tagValueProcessor: () => undefined\n });\n if (data) {\n pOnlineShowDictionary({\n unitCode: \"RRPConfig\",\n showMethod: \"main_mrk_settings\",\n inputParameters: [{\n name: \"in_CODE\",\n value: data.SRRPCONF\n }, {\n name: \"in_SCTN_CODE\",\n value: data.SRRPCONFSCTN\n }, {\n name: \"in_MRK_CODE\",\n value: data.SRRPCONFSCTNMRK\n }],\n callBack: res => {\n res.success ? handleReload() : null;\n }\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_6__.TEXTS.NO_DATA_FOUND);\n }, [executeStored, handleReload, pOnlineShowDictionary, showMsgErr]);\n\n //Отображение показателя раздела\n const handleMarkCnOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (nRrpConfSctnMrk, nRrpConfSctnMrkCn) => {\n pOnlineShowDictionary({\n unitCode: \"RRPConfigSectionMark\",\n showMethod: \"link_cn\",\n inputParameters: [{\n name: \"in_RN\",\n value: nRrpConfSctnMrk\n }, {\n name: \"in_RRPCONFSCTNMRKCN\",\n value: nRrpConfSctnMrkCn\n }],\n callBack: res => {\n res.success ? handleReload() : null;\n }\n });\n }, [handleReload, pOnlineShowDictionary]);\n\n //Отображение показателя раздела\n const handleMarkCnInsert = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async nRrpConfSctnMrk => {\n pOnlineShowDictionary({\n unitCode: \"RRPConfigSectionMarkConstitution\",\n showMethod: \"link_add\",\n inputParameters: [{\n name: \"in_PRN\",\n value: nRrpConfSctnMrk\n }],\n callBack: res => {\n res.success ? handleReload() : null;\n }\n });\n }, [handleReload, pOnlineShowDictionary]);\n return [handleMarkOpen, handleMarkCnOpen, handleMarkCnInsert];\n};\n\n//Хук для форм диалогового окна\nconst useFormDialog = () => {\n //Состояние открытия диалогового окна\n const [formOpen, setForm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние диалогового окна\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n reload: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colCode: \"\",\n colRn: null,\n rowCode: \"\",\n rowRn: null\n });\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n reload: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colCode: \"\",\n colRn: null,\n rowCode: \"\",\n rowRn: null\n });\n };\n\n //Отработка нажатия на кнопку добавления секции\n const handleSectionAdd = () => {\n setFormData({\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const handleSectionEdit = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const handleSectionDelete = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const handleMarkAdd = (prn, rowRn = null, rowCode = \"\", colRn = null, colCode = \"\") => {\n setFormData({\n reload: rowRn && colRn ? true : false,\n prn: prn,\n rowRn: rowRn,\n rowCode: rowCode,\n colRn: colRn,\n colCode: colCode,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.RRPCONFSCTNMRK_CREATE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const handleMarkEdit = rn => {\n setFormData({\n reload: true,\n rn: rn,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.RRPCONFSCTNMRK_EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const handleMarkDelete = rn => {\n setFormData({\n rn: rn,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.RRPCONFSCTNMRK_DELETE\n });\n openForm();\n };\n\n //При закрытии диалога\n const handleDialogClose = () => {\n setForm(false);\n clearFormData();\n };\n return [formOpen, formData, handleSectionAdd, handleSectionEdit, handleSectionDelete, handleMarkAdd, handleMarkEdit, handleMarkDelete, handleDialogClose];\n};\n\n//Формирование разделов\nconst a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/hooks.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ a11yProps: () => (/* binding */ a11yProps),\n/* harmony export */ useConf: () => (/* binding */ useConf),\n/* harmony export */ useFormDialog: () => (/* binding */ useFormDialog),\n/* harmony export */ useRecOpen: () => (/* binding */ useRecOpen),\n/* harmony export */ useTab: () => (/* binding */ useTab),\n/* harmony export */ useWindowResize: () => (/* binding */ useWindowResize)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./IUD/iud_form_dialog */ \"./app/panels/rrp_conf_editor/IUD/iud_form_dialog.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/*\r\n Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта\r\n Пользовательские хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контекст приложения\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Контекст сообщений\n //Статусы диалогов\n //Тексты для ошибок\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для отработки изменений ширины и высоты рабочей области окна\nconst useWindowResize = () => {\n //Состояние размера рабочей области\n const [size, setSize] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([0, 0]);\n\n //При изменении размера\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n const updateSize = () => {\n setSize([document.documentElement.clientWidth, document.documentElement.clientHeight]);\n };\n window.addEventListener(\"resize\", updateSize);\n updateSize();\n return () => window.removeEventListener(\"resize\", updateSize);\n }, []);\n\n //Вернём размеры\n return size;\n};\n\n//Хук для настройки регламентированного отчета\nconst useConf = (currentTab, handleSectionChange) => {\n //Собственное состояние - таблица данных\n const dataGrid = {\n rn: 0,\n code: \"\",\n name: \"\",\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n fixedHeader: false,\n fixedColumns: 0,\n reload: false\n };\n\n //Собственное состояние\n const [rrpConf, setRrpConf] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n docLoaded: false,\n sections: [],\n reload: true\n });\n\n //Состояние массива данных разделов\n const [dataGrids] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //При необходимости обновить\n const handleReload = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n setRrpConf(pv => ({\n ...pv,\n reload: true\n }));\n }, []);\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpConf.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = currentTab ? currentTab : 0;\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONF_GET_SECTIONS\",\n args: {\n NRN_RRPCONF: Number(getNavigationSearch().NRN)\n },\n respArg: \"COUT\"\n });\n //Флаг первой загрузки данных\n let firstLoad = dataGrids.length == 0 ? true : false;\n //Копирование массива уже загруженных разделов\n let cloneDGs = dataGrids.slice();\n //Массив из нескольких разделов и из одного\n const sections = data.SECTIONS ? data.SECTIONS.length ? data.SECTIONS : [data.SECTIONS] : [];\n //Заполнение очередного раздела по шаблону\n sections.map(s => {\n let dg = {};\n Object.assign(dg, dataGrid, {\n ...s.XDATA.XDATA_GRID,\n rn: s.NRN,\n code: s.SCODE,\n name: s.SNAME,\n delete_allow: s.NDELETE_ALLOW,\n dataLoaded: true,\n columnsDef: [...(s.XDATA.XDATA_GRID.columnsDef || [])],\n groups: [...(s.XDATA.XDATA_GRID.groups || [])],\n rows: [...(s.XDATA.XDATA_GRID.rows || [])],\n reload: false\n });\n //Если раздел имеет составы показателей\n if (s.MARK_CNS.MARK_CN) {\n //Обходим строки раздела\n dg.rows.map(row => {\n //Цикл по ключам строки\n for (let key in row) {\n //Если это ключ для группы составов показателей\n if (key.match(/MARK_CNS_.*/)) {\n //Считываем рег. номер показателя\n let markRn = key.substring(9);\n //Переносим из раздела\n row[key] = Array.isArray(s.MARK_CNS.MARK_CN) ? [...s.MARK_CNS.MARK_CN].filter(el => el.NPRN === row[`NMARK_RN_${markRn}`]) : s.MARK_CNS.MARK_CN.NPRN === row[`NMARK_RN_${markRn}`] ? [s.MARK_CNS.MARK_CN] : null;\n }\n }\n });\n }\n //Ищем загружен ли уже раздел с таким же ид.\n const dgItem = dataGrids.find(x => x.rn === dg.rn);\n //Его индекс, если нет соответствия, то -1\n let index = dataGrids.indexOf(dgItem);\n //Если было соответствие\n if (dgItem) {\n //Если в нём не найдено изменений\n if (JSON.stringify(dgItem, null, 4) === JSON.stringify(dg, null, 4)) {\n //То из копированного массива его удаляем\n cloneDGs.splice(cloneDGs.indexOf(cloneDGs.find(x => x.rn === dgItem.rn)), 1);\n } else {\n //Иначе обновляем раздел в массиве\n dataGrids[index] = dg;\n //Удаляем из копированного массива\n cloneDGs.splice(cloneDGs.indexOf(cloneDGs.find(x => x.rn === dg.rn)), 1);\n //Устанавливаем фокус на обновлённый раздел\n tabFocus = index;\n }\n } else {\n //Если раздел новый, то добавляем его в массив данных\n dataGrids.push(dg);\n //И устанавливаем на него фокус, если флаг первой загрузки = false\n tabFocus = !firstLoad ? dataGrids.length - 1 : 0;\n }\n });\n //Обходим разделы, что остались в копированном массиве (на удаление)\n cloneDGs.map(s => {\n let curIndex = dataGrids.indexOf(dataGrids.find(x => x.rn === s.rn));\n //Устаревший раздел удаляем из массива данных\n dataGrids.splice(curIndex, 1);\n //Фокус на предшествующий раздел\n if (curIndex > 0) tabFocus = curIndex - 1;\n //Иначе фокус на следующий, если был удалён первый раздел\n else tabFocus = curIndex;\n });\n setRrpConf(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n handleSectionChange(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpConf.reload, rrpConf.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpConf.reload, dataGrid.reload, loadData]);\n return [rrpConf, handleReload];\n};\n\n//Хук для вкладки\nconst useTab = () => {\n //Состояние раздела\n const [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\n //Переключение раздела\n const handleSectionChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(newValue => {\n setTabValue(newValue);\n }, []);\n return [tabValue, handleSectionChange];\n};\n\n//Хук для функций открытия записей\nconst useRecOpen = handleReload => {\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_1__[\"ApplicationСtx\"]);\n\n //Подключение к контексту сообщений\n const {\n showMsgErr\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_4__[\"MessagingСtx\"]);\n\n //Отображение показателя раздела\n const handleMarkOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async nRrpConfSctnMrk => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODES\",\n args: {\n NRN: nRrpConfSctnMrk\n },\n tagValueProcessor: () => undefined\n });\n if (data) {\n pOnlineShowDictionary({\n unitCode: \"RRPConfig\",\n showMethod: \"main_mrk_settings\",\n inputParameters: [{\n name: \"in_CODE\",\n value: data.SRRPCONF\n }, {\n name: \"in_SCTN_CODE\",\n value: data.SRRPCONFSCTN\n }, {\n name: \"in_MRK_CODE\",\n value: data.SRRPCONFSCTNMRK\n }],\n callBack: res => {\n res.success ? handleReload() : null;\n }\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_6__.TEXTS.NO_DATA_FOUND);\n }, [executeStored, handleReload, pOnlineShowDictionary, showMsgErr]);\n\n //Отображение показателя раздела\n const handleMarkCnOpen = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (nRrpConfSctnMrk, nRrpConfSctnMrkCn) => {\n pOnlineShowDictionary({\n unitCode: \"RRPConfigSectionMark\",\n showMethod: \"link_cn\",\n inputParameters: [{\n name: \"in_RN\",\n value: nRrpConfSctnMrk\n }, {\n name: \"in_RRPCONFSCTNMRKCN\",\n value: nRrpConfSctnMrkCn\n }],\n callBack: res => {\n res.success ? handleReload() : null;\n }\n });\n }, [handleReload, pOnlineShowDictionary]);\n\n //Отображение показателя раздела\n const handleMarkCnInsert = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async nRrpConfSctnMrk => {\n pOnlineShowDictionary({\n unitCode: \"RRPConfigSectionMarkConstitution\",\n showMethod: \"link_add\",\n inputParameters: [{\n name: \"in_PRN\",\n value: nRrpConfSctnMrk\n }],\n callBack: res => {\n res.success ? handleReload() : null;\n }\n });\n }, [handleReload, pOnlineShowDictionary]);\n return [handleMarkOpen, handleMarkCnOpen, handleMarkCnInsert];\n};\n\n//Хук для форм диалогового окна\nconst useFormDialog = () => {\n //Состояние открытия диалогового окна\n const [formOpen, setForm] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);\n\n //Состояние диалогового окна\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n reload: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colCode: \"\",\n colRn: null,\n rowCode: \"\",\n rowRn: null\n });\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_3__.NavigationCtx);\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n reload: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colCode: \"\",\n colRn: null,\n rowCode: \"\",\n rowRn: null\n });\n };\n\n //Отработка нажатия на кнопку добавления секции\n const handleSectionAdd = () => {\n setFormData({\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const handleSectionEdit = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const handleSectionDelete = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const handleMarkAdd = (prn, rowRn = null, rowCode = \"\", colRn = null, colCode = \"\") => {\n setFormData({\n reload: rowRn && colRn ? true : false,\n prn: prn,\n rowRn: rowRn,\n rowCode: rowCode,\n colRn: colRn,\n colCode: colCode,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.RRPCONFSCTNMRK_CREATE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const handleMarkEdit = rn => {\n setFormData({\n reload: true,\n rn: rn,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.RRPCONFSCTNMRK_EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const handleMarkDelete = rn => {\n setFormData({\n rn: rn,\n status: _IUD_iud_form_dialog__WEBPACK_IMPORTED_MODULE_5__.STATUSES.RRPCONFSCTNMRK_DELETE\n });\n openForm();\n };\n\n //При закрытии диалога\n const handleDialogClose = () => {\n setForm(false);\n clearFormData();\n };\n return [formOpen, formData, handleSectionAdd, handleSectionEdit, handleSectionDelete, handleMarkAdd, handleMarkEdit, handleMarkDelete, handleDialogClose];\n};\n\n//Формирование разделов\nconst a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/hooks.js?"); /***/ }), @@ -5515,7 +5515,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Cyclogram: () => (/* binding */ Cyclogram)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_cyclogram */ \"./app/components/p8p_cyclogram.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Циклограмма \"P8PCyclogram\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные функции\n //Заголовок страницы\n //Циклограмма\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Отступ контейнера страницы от заголовка\nconst CONTAINER_PADDING_TOP = \"20px\";\n\n//Высота заголовка страницы\nconst TITLE_HEIGHT = \"47px\";\n\n//Высота строк\nconst LINE_HEIGHT = 30;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: CONTAINER_PADDING_TOP\n },\n TITLE: {\n paddingBottom: \"15px\",\n height: TITLE_HEIGHT\n },\n CYCLOGRAM_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`,\n width: \"100vw\",\n paddingTop: \"5px\"\n },\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n },\n GROUP_HEADER: height => ({\n border: \"1px solid\",\n backgroundColor: \"#ecf8fb\",\n height: height,\n borderRadius: \"10px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-around\"\n })\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Диалог открытия задачи\nconst CustomTaskDialog = ({\n task,\n ident,\n handleReload,\n close\n}) => {\n //Собственное состояние\n const [taskDates, setTaskDates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.ddate_start,\n end: task.ddate_end\n });\n\n //Тип проекта\n const textType = task.type === 0 ? \"Задачи проекта\" : task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //Изменение дат задачи\n const changeDates = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Изменяем даты задачи\n await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM_TASK_MODIFY\",\n args: {\n NIDENT: ident,\n NRN: task.rn,\n SDATE_FROM: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(taskDates.start),\n SDATE_TO: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(taskDates.end)\n }\n });\n handleReload();\n close();\n }, [close, executeStored, handleReload, ident, task.rn, taskDates.end, taskDates.start]);\n\n //При нажатии OK\n const handleOk = () => {\n //Изменяем даты задачи\n changeDates();\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n primary: \"Наименование\",\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: \"Начало\",\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n error: !taskDates.start,\n disabled: task.type !== 2,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: taskDates.start,\n onChange: e => setTaskDates(pv => ({\n ...pv,\n start: e.target.value\n })),\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: \"Окончание\",\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n error: !taskDates.end,\n disabled: task.type !== 2,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: taskDates.end,\n onChange: e => setTaskDates(pv => ({\n ...pv,\n end: e.target.value\n })),\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n primary: \"Тип\",\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n direction: \"row\",\n gap: 0.5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n title: textType\n }, task.type === 0 ? \"description\" : task.type === 1 ? \"check\" : \"work_outline\"), textType)\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: handleOk\n }, \"\\u041E\\u041A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: close\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Диалог открытия задачи\nCustomTaskDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object).isRequired,\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number).isRequired,\n handleReload: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func).isRequired,\n close: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func).isRequired\n};\n\n//Заголовок группы\nconst CustomGroupHeader = ({\n group\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.GROUP_HEADER(group.height)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"body2\"\n }, group.name));\n};\n\n//Контроль свойств - Заголовок группы\nCustomGroupHeader.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object).isRequired\n};\n\n//Отображение задачи\nconst taskRenderer = ({\n task\n}) => {\n //Если это задачи проекта\n if (task.type === 0) {\n return {\n taskStyle: {\n border: \"3px solid #ebe058\"\n }\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Циклограмма \"P8PCyclogram\"\nconst Cyclogram = ({\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n dataLoaded: false,\n reload: true,\n ident: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //При необходимости перезагрузки\n const handleReload = () => {\n setState(pv => ({\n ...pv,\n reload: true\n }));\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных циклограммы с сервера\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM\",\n args: {\n NIDENT: state.ident\n },\n attributeValueProcessor: (name, val) => name === \"name\" ? undefined : [\"ddate_start\", \"ddate_end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n dataLoaded: true,\n ...data.XCYCLOGRAM,\n reload: false\n }));\n };\n //Если указан идентификатор и требуется перезагрузить\n if (state.ident && state.reload) loadData();\n }, [state.ident, state.reload, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Инициализация данных циклограммы\n const initData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM_INIT\",\n args: {\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n ident: data.NIDENT,\n reload: true\n }));\n };\n //Если требуется проинициализировать\n if (!state.init) {\n initData();\n }\n }, [executeStored, state.ident, state.init]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_3__.P8PCyclogram, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_CYCLOGRAM_CONFIG_PROPS, state, {\n containerStyle: STYLES.CYCLOGRAM_CONTAINER,\n lineHeight: LINE_HEIGHT,\n taskDialogRenderer: prms => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTaskDialog, {\n task: prms.task,\n ident: state.ident,\n handleReload: handleReload,\n close: prms.close\n }),\n taskRenderer: prms => taskRenderer(prms),\n groupHeaderRenderer: prms => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomGroupHeader, {\n group: prms.group\n })\n })) : null))));\n};\n\n//Контроль свойств - Пример: Циклограмма \"P8PCyclogram\"\nCyclogram.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/cyclogram.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Cyclogram: () => (/* binding */ Cyclogram)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_16___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_16__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/List/List.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItem/ListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ListItemText/ListItemText.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Divider/Divider.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_cyclogram */ \"./app/components/p8p_cyclogram.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Циклограмма \"P8PCyclogram\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные функции\n //Заголовок страницы\n //Циклограмма\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Отступ контейнера страницы от заголовка\nconst CONTAINER_PADDING_TOP = \"20px\";\n\n//Высота заголовка страницы\nconst TITLE_HEIGHT = \"47px\";\n\n//Высота строк\nconst LINE_HEIGHT = 30;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: CONTAINER_PADDING_TOP\n },\n TITLE: {\n paddingBottom: \"15px\",\n height: TITLE_HEIGHT\n },\n CYCLOGRAM_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTAINER_PADDING_TOP})`,\n width: \"100vw\",\n paddingTop: \"5px\"\n },\n TASK_EDITOR_CONTENT: {\n minWidth: 400,\n overflowX: \"auto\"\n },\n TASK_EDITOR_LIST: {\n width: \"100%\",\n minWidth: 300,\n maxWidth: 700,\n bgcolor: \"background.paper\"\n },\n GROUP_HEADER: height => ({\n border: \"1px solid\",\n backgroundColor: \"#ecf8fb\",\n height: height,\n borderRadius: \"10px\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-around\"\n })\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Диалог открытия задачи\nconst CustomTaskDialog = ({\n task,\n ident,\n handleReload,\n close\n}) => {\n //Собственное состояние\n const [taskDates, setTaskDates] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n start: task.ddate_start,\n end: task.ddate_end\n });\n\n //Тип проекта\n const textType = task.type === 0 ? \"Задачи проекта\" : task.type === 1 ? \"Этап проекта\" : \"Работа проекта\";\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //Изменение дат задачи\n const changeDates = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n //Изменяем даты задачи\n await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM_TASK_MODIFY\",\n args: {\n NIDENT: ident,\n NRN: task.rn,\n SDATE_FROM: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(taskDates.start),\n SDATE_TO: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(taskDates.end)\n }\n });\n handleReload();\n close();\n }, [close, executeStored, handleReload, ident, task.rn, taskDates.end, taskDates.start]);\n\n //При нажатии OK\n const handleOk = () => {\n //Изменяем даты задачи\n changeDates();\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TASK_EDITOR_CONTENT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.TASK_EDITOR_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n primary: \"Наименование\",\n secondary: task.fullName\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: \"Начало\",\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n error: !taskDates.start,\n disabled: task.type !== 2,\n name: \"start\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: taskDates.start,\n onChange: e => setTaskDates(pv => ({\n ...pv,\n start: e.target.value\n })),\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n secondaryTypographyProps: {\n component: \"span\"\n },\n primary: \"Окончание\",\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n error: !taskDates.end,\n disabled: task.type !== 2,\n name: \"end\",\n fullWidth: true,\n required: true,\n InputLabelProps: {\n shrink: true\n },\n type: \"date\",\n value: taskDates.end,\n onChange: e => setTaskDates(pv => ({\n ...pv,\n end: e.target.value\n })),\n variant: \"standard\",\n size: \"small\",\n margin: \"normal\"\n })\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n component: \"li\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n alignItems: \"flex-start\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n primary: \"Тип\",\n secondaryTypographyProps: {\n component: \"span\"\n },\n secondary: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n direction: \"row\",\n gap: 0.5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n title: textType\n }, task.type === 0 ? \"description\" : task.type === 1 ? \"check\" : \"work_outline\"), textType)\n })))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: handleOk\n }, \"\\u041E\\u041A\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: close\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Диалог открытия задачи\nCustomTaskDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object).isRequired,\n ident: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number).isRequired,\n handleReload: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func).isRequired,\n close: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func).isRequired\n};\n\n//Заголовок группы\nconst CustomGroupHeader = ({\n group\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.GROUP_HEADER(group.height)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n variant: \"body2\"\n }, group.name));\n};\n\n//Контроль свойств - Заголовок группы\nCustomGroupHeader.propTypes = {\n group: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().object).isRequired\n};\n\n//Отображение задачи\nconst taskRenderer = ({\n task\n}) => {\n //Если это задачи проекта\n if (task.type === 0) {\n return {\n taskStyle: {\n border: \"3px solid #ebe058\"\n }\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Циклограмма \"P8PCyclogram\"\nconst Cyclogram = ({\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n dataLoaded: false,\n reload: true,\n ident: null\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //При необходимости перезагрузки\n const handleReload = () => {\n setState(pv => ({\n ...pv,\n reload: true\n }));\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Загрузка данных циклограммы с сервера\n const loadData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM\",\n args: {\n NIDENT: state.ident\n },\n attributeValueProcessor: (name, val) => [\"ddate_start\", \"ddate_end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n dataLoaded: true,\n ...data.XCYCLOGRAM,\n reload: false\n }));\n };\n //Если указан идентификатор и требуется перезагрузить\n if (state.ident && state.reload) loadData();\n }, [state.ident, state.reload, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n //Инициализация данных циклограммы\n const initData = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.CYCLOGRAM_INIT\",\n args: {\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n ident: data.NIDENT,\n reload: true\n }));\n };\n //Если требуется проинициализировать\n if (!state.init) {\n initData();\n }\n }, [executeStored, state.ident, state.init]);\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n item: true,\n xs: 12\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_cyclogram__WEBPACK_IMPORTED_MODULE_3__.P8PCyclogram, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_CYCLOGRAM_CONFIG_PROPS, state, {\n containerStyle: STYLES.CYCLOGRAM_CONTAINER,\n lineHeight: LINE_HEIGHT,\n taskDialogRenderer: prms => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomTaskDialog, {\n task: prms.task,\n ident: state.ident,\n handleReload: handleReload,\n close: prms.close\n }),\n taskRenderer: prms => taskRenderer(prms),\n groupHeaderRenderer: prms => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CustomGroupHeader, {\n group: prms.group\n })\n })) : null))));\n};\n\n//Контроль свойств - Пример: Циклограмма \"P8PCyclogram\"\nCyclogram.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/cyclogram.js?"); /***/ }), @@ -5526,7 +5526,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_12___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_12__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n maxWidth: 700,\n maxHeight: 500,\n minHeight: 500\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setdataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n groups: [],\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setdataGrid(pv => ({\n ...pv,\n fixedHeader: data.XDATA_GRID.fixedHeader,\n fixedColumns: data.XDATA_GRID.fixedColumns,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])],\n groups: data.XGROUPS ? pv.pageNumber == 1 ? [...data.XGROUPS] : [...pv.groups, ...data.XGROUPS.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups],\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reload, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setdataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setdataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setdataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При нажатии на копку контрагента\n const handleAgnButtonClicked = agnCode => pOnlineShowDocument({\n unitCode: \"AGNLIST\",\n document: agnCode,\n inRnParameter: \"in_AGNABBR\"\n });\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reload, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n p: 5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n style: STYLES.DATA_GRID_CONTAINER\n },\n columnsDef: dataGrid.columnsDef,\n groups: dataGrid.groups,\n rows: dataGrid.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n fixedHeader: dataGrid.fixedHeader,\n fixedColumns: dataGrid.fixedColumns,\n filtersInitial: dataGrid.filters,\n morePages: dataGrid.morePages,\n reloading: dataGrid.reload,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n expandable: true,\n rowExpandRender: ({\n row\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n onClick: () => handleAgnButtonClicked(row.SAGNABBR)\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u044C \\u0432 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\")\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ DataGrid: () => (/* binding */ DataGrid),\n/* harmony export */ groupCellRender: () => (/* binding */ groupCellRender)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_13___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_13__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _app_styles__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../app.styles */ \"./app.styles.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Таблица данных \"P8PDataGrid\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные процедуры и функции\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст приложения\n //Типовые стили\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"20px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n maxWidth: 700,\n maxHeight: 500,\n minHeight: 500,\n ..._app_styles__WEBPACK_IMPORTED_MODULE_6__.APP_STYLES.SCROLL\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип контрагента\"\nconst formatAgentTypeValue = (value, addText = false) => {\n const [text, icon] = value == 0 ? [\"Юридическое лицо\", \"business\"] : [\"Физическое лицо\", \"person\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n direction: \"row\",\n gap: 0.5,\n alignItems: \"center\",\n justifyContent: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n title: text\n }, icon), addText == true ? text : null);\n};\n\n//Форматирование значений колонок\nconst valueFormatter = ({\n value,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return formatAgentTypeValue(value, true);\n }\n return value;\n};\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n cellProps: {\n align: \"center\"\n },\n data: formatAgentTypeValue(row[columnDef.name], false)\n };\n }\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => {\n switch (columnDef.name) {\n case \"NAGNTYPE\":\n return {\n stackProps: {\n justifyContent: \"center\"\n },\n cellProps: {\n align: \"center\"\n }\n };\n }\n};\n\n//Генерация представления ячейки заголовка группы\nconst groupCellRender = () => ({\n cellStyle: {\n padding: \"2px\"\n }\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Таблица данных \"P8PDataGrid\"\nconst DataGrid = ({\n title\n}) => {\n //Собственное состояние - таблица данных\n const [dataGrid, setDataGrid] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n filters: null,\n orders: null,\n groups: [],\n rows: [],\n reloading: true,\n pageNumber: 1,\n morePages: true,\n fixedHeader: false,\n fixedColumns: 0\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_4__[\"BackEndСtx\"]);\n\n //Подключение к контексту приложения\n const {\n pOnlineShowDocument\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_5__[\"ApplicationСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (dataGrid.reloading) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.DATA_GRID\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.filters, {\n arrayNodeName: \"filters\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(dataGrid.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: dataGrid.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\n NINCLUDE_DEF: dataGrid.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setDataGrid(pv => ({\n ...pv,\n ...data.XDATA_GRID,\n columnsDef: data.XDATA_GRID.columnsDef ? [...data.XDATA_GRID.columnsDef] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XDATA_GRID.rows || [])] : [...pv.rows, ...(data.XDATA_GRID.rows || [])],\n groups: data.XDATA_GRID.groups ? pv.pageNumber == 1 ? [...data.XDATA_GRID.groups] : [...pv.groups, ...data.XDATA_GRID.groups.filter(g => !pv.groups.find(pg => pg.name == g.name))] : [...pv.groups],\n dataLoaded: true,\n reloading: false,\n morePages: (data.XDATA_GRID.rows || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [dataGrid.reloading, dataGrid.filters, dataGrid.orders, dataGrid.dataLoaded, dataGrid.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setDataGrid(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reloading: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setDataGrid(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reloading: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setDataGrid(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reloading: true\n }));\n\n //При нажатии на копку контрагента\n const handleAgnButtonClicked = agnCode => pOnlineShowDocument({\n unitCode: \"AGNLIST\",\n document: agnCode,\n inRnParameter: \"in_AGNABBR\"\n });\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [dataGrid.reloading, loadData]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n container: true,\n spacing: 1,\n pt: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n p: 5,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, dataGrid.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n containerComponentProps: {\n elevation: 6,\n sx: STYLES.DATA_GRID_CONTAINER\n }\n }, dataGrid, {\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n valueFormatter: valueFormatter,\n headCellRender: headCellRender,\n dataCellRender: dataCellRender,\n groupCellRender: groupCellRender,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n expandable: true,\n rowExpandRender: ({\n row\n }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => handleAgnButtonClicked(row.SAGNABBR)\n }, \"\\u041F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u044C \\u0432 \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\")\n })) : null))));\n};\n\n//Контроль свойств - Пример: Таблица данных \"P8PDataGrid\"\nDataGrid.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/data_grid.js?"); /***/ }), @@ -5537,7 +5537,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Gantt: () => (/* binding */ Gantt)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Avatar/Avatar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Диаграмма Ганта \"P8PGantt\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные функции\n //Заголовок страницы\n //Диаграмма Ганта\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Отступ контейнера страницы от заголовка\nconst CONTAINER_PADDING_TOP = \"20px\";\n\n//Высота заголовка страницы\nconst TITLE_HEIGHT = \"47px\";\n\n//Высота элементов управления\nconst CONTROL_HEIGHT = \"42px\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: CONTAINER_PADDING_TOP\n },\n TITLE: {\n paddingBottom: \"15px\",\n height: TITLE_HEIGHT\n },\n CONTROL: {\n height: CONTROL_HEIGHT\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTROL_HEIGHT} - ${CONTAINER_PADDING_TOP})`,\n width: \"100vw\",\n paddingTop: \"5px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип задачи\"\nconst formatTaskTypeValue = value => {\n const [text, icon] = value == 0 ? [\"Этап проекта\", \"check\"] : [\"Работа проекта\", \"work_outline\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n direction: \"row\",\n gap: 0.5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Генерация кастомных представлений атрибутов задачи в редакторе\nconst taskAttributeRenderer = ({\n task,\n attribute\n}) => {\n switch (attribute.name) {\n case \"type\":\n return formatTaskTypeValue(task.type);\n default:\n return null;\n }\n};\n\n//Генерация кастомного диалога задачи\nconst taskDialogRenderer = ({\n task,\n close\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n avatar: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: {\n bgcolor: task.bgColor\n }\n }, task.type == 0 ? \"Эт\" : \"Ра\"),\n title: task.name,\n subheader: `с ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(task.start)} по ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(task.end)}`\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"body2\",\n color: \"text.secondary\"\n }, \"\\u042D\\u0442\\u043E \\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u0442\\u0435\\u043B\\u044C\\u0441\\u043A\\u0438\\u0439 \\u0434\\u0438\\u0430\\u043B\\u043E\\u0433 \\u0441 \\u0434\\u0430\\u043D\\u043D\\u044B\\u043C\\u0438 \\u043E \\u0437\\u0430\\u0434\\u0430\\u0447\\u0435. \\u0412\\u044B \\u043C\\u043E\\u0436\\u0435\\u0442\\u0435 \\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C \\u0442\\u0430\\u043A\\u0438\\u0435 \\u0443\\u043A\\u0430\\u0437\\u0430\\u0432 \\u0441\\u0432\\u043E\\u0439 \\u0444\\u0443\\u043D\\u043A\\u0446\\u0438\\u043E\\u043D\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u043A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442 \\u0432 \\u043A\\u0430\\u0447\\u0435\\u0441\\u0442\\u0432\\u0435 \\u0441\\u0432\\u043E\\u0439\\u0441\\u0442\\u0432\\u0430 \\\"taskDialogRenderer\\\" \\u043A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442\\u0430 \\\"P8PGantt\\\".\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disableSpacing: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n size: \"small\",\n onClick: close\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")));\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Диаграмма Ганта \"P8Gantt\"\nconst Gantt = ({\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n dataLoaded: false,\n ident: null,\n ganttDef: {},\n ganttTasks: [],\n useCustomTaskDialog: false\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //Загрузка данных диаграммы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.GANTT\",\n args: {\n NIDENT: state.ident\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setState(pv => ({\n ...pv,\n dataLoaded: true,\n ganttDef: {\n ...data.XGANTT_DEF\n },\n ganttTasks: [...data.XGANTT_TASKS]\n }));\n }, [state.ident, executeStored]);\n\n //Инициализация данных диаграммы\n const initData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.GANTT_INIT\",\n args: {\n NIDENT: state.ident\n }\n });\n setState(pv => ({\n ...pv,\n init: true,\n ident: data.NIDENT\n }));\n }\n }, [state.init, state.ident, executeStored]);\n\n //Изменение данных диаграммы\n const modifyData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n rn,\n start,\n end\n }) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.GANTT_MODIFY\",\n args: {\n NIDENT: state.ident,\n NRN: rn,\n DDATE_FROM: new Date(start),\n DDATE_TO: new Date(end)\n }\n });\n } finally {\n loadData();\n }\n }, [state.ident, executeStored, loadData]);\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyData({\n rn: task.rn,\n start,\n end\n });\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.ident) loadData();\n }, [state.ident, loadData]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.CONTROL,\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onChange: () => setState(pv => ({\n ...pv,\n useCustomTaskDialog: !pv.useCustomTaskDialog\n }))\n }),\n label: \"\\u041E\\u0442\\u043E\\u0431\\u0440\\u0430\\u0436\\u0430\\u0442\\u044C \\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u0442\\u0435\\u043B\\u044C\\u0441\\u043A\\u0438\\u0439 \\u0434\\u0438\\u0430\\u043B\\u043E\\u0433 \\u0437\\u0430\\u0434\\u0430\\u0447\\u0438\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 12\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_3__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, state.ganttDef, {\n containerStyle: STYLES.GANTT_CONTAINER,\n tasks: state.ganttTasks,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: state.useCustomTaskDialog ? taskDialogRenderer : null\n })) : null)));\n};\n\n//Контроль свойств - Пример: Диаграмма Ганта \"P8Gantt\"\nGantt.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/gantt.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Gantt: () => (/* binding */ Gantt)\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_18___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_18__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Card/Card.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardHeader/CardHeader.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Avatar/Avatar.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardContent/CardContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CardActions/CardActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControlLabel/FormControlLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../components/p8p_app_workspace */ \"./app/components/p8p_app_workspace.js\");\n/* harmony import */ var _components_p8p_gantt__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../components/p8p_gantt */ \"./app/components/p8p_gantt.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - Примеры для разработчиков\r\n Пример: Диаграмма Ганта \"P8PGantt\"\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные элементы\n //Вспомогательные функции\n //Заголовок страницы\n //Диаграмма Ганта\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n\n//---------\n//Константы\n//---------\n\n//Отступ контейнера страницы от заголовка\nconst CONTAINER_PADDING_TOP = \"20px\";\n\n//Высота заголовка страницы\nconst TITLE_HEIGHT = \"47px\";\n\n//Высота элементов управления\nconst CONTROL_HEIGHT = \"42px\";\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: CONTAINER_PADDING_TOP\n },\n TITLE: {\n paddingBottom: \"15px\",\n height: TITLE_HEIGHT\n },\n CONTROL: {\n height: CONTROL_HEIGHT\n },\n GANTT_CONTAINER: {\n height: `calc(100vh - ${_components_p8p_app_workspace__WEBPACK_IMPORTED_MODULE_2__.APP_BAR_HEIGHT} - ${TITLE_HEIGHT} - ${CONTROL_HEIGHT} - ${CONTAINER_PADDING_TOP})`,\n width: \"100vw\",\n paddingTop: \"5px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование значения для колонки \"Тип задачи\"\nconst formatTaskTypeValue = value => {\n const [text, icon] = value == 0 ? [\"Этап проекта\", \"check\"] : [\"Работа проекта\", \"work_outline\"];\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n direction: \"row\",\n gap: 0.5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n title: text\n }, icon), text);\n};\n\n//Генерация кастомных представлений атрибутов задачи в редакторе\nconst taskAttributeRenderer = ({\n task,\n attribute\n}) => {\n switch (attribute.name) {\n case \"type\":\n return formatTaskTypeValue(task.type);\n default:\n return null;\n }\n};\n\n//Генерация кастомного диалога задачи\nconst taskDialogRenderer = ({\n task,\n close\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n avatar: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: {\n bgcolor: task.bgColor\n }\n }, task.type == 0 ? \"Эт\" : \"Ра\"),\n title: task.name,\n subheader: `с ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(task.start)} по ${(0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateRF)(task.end)}`\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n variant: \"body2\",\n color: \"text.secondary\"\n }, \"\\u042D\\u0442\\u043E \\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u0442\\u0435\\u043B\\u044C\\u0441\\u043A\\u0438\\u0439 \\u0434\\u0438\\u0430\\u043B\\u043E\\u0433 \\u0441 \\u0434\\u0430\\u043D\\u043D\\u044B\\u043C\\u0438 \\u043E \\u0437\\u0430\\u0434\\u0430\\u0447\\u0435. \\u0412\\u044B \\u043C\\u043E\\u0436\\u0435\\u0442\\u0435 \\u0444\\u043E\\u0440\\u043C\\u0438\\u0440\\u043E\\u0432\\u0430\\u0442\\u044C \\u0442\\u0430\\u043A\\u0438\\u0435 \\u0443\\u043A\\u0430\\u0437\\u0430\\u0432 \\u0441\\u0432\\u043E\\u0439 \\u0444\\u0443\\u043D\\u043A\\u0446\\u0438\\u043E\\u043D\\u0430\\u043B\\u044C\\u043D\\u044B\\u0439 \\u043A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442 \\u0432 \\u043A\\u0430\\u0447\\u0435\\u0441\\u0442\\u0432\\u0435 \\u0441\\u0432\\u043E\\u0439\\u0441\\u0442\\u0432\\u0430 \\\"taskDialogRenderer\\\" \\u043A\\u043E\\u043C\\u043F\\u043E\\u043D\\u0435\\u043D\\u0442\\u0430 \\\"P8PGantt\\\".\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disableSpacing: true\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n size: \"small\",\n onClick: close\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")));\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Пример: Диаграмма Ганта \"P8Gantt\"\nconst Gantt = ({\n title\n}) => {\n //Собственное состояние\n const [gantt, setGantt] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n dataLoaded: false,\n ident: null,\n useCustomTaskDialog: false\n });\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_5__[\"BackEndСtx\"]);\n\n //Загрузка данных диаграммы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.GANTT\",\n args: {\n NIDENT: gantt.ident\n },\n attributeValueProcessor: (name, val) => name == \"numb\" ? undefined : [\"start\", \"end\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.formatDateJSONDateOnly)(val) : val,\n respArg: \"COUT\"\n });\n setGantt(pv => ({\n ...pv,\n dataLoaded: true,\n ...data.XGANTT\n }));\n }, [gantt.ident, executeStored]);\n\n //Инициализация данных диаграммы\n const initData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!gantt.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.GANTT_INIT\",\n args: {\n NIDENT: gantt.ident\n }\n });\n setGantt(pv => ({\n ...pv,\n init: true,\n ident: data.NIDENT\n }));\n }\n }, [gantt.init, gantt.ident, executeStored]);\n\n //Изменение данных диаграммы\n const modifyData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async ({\n rn,\n start,\n end\n }) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_SAMPLES.GANTT_MODIFY\",\n args: {\n NIDENT: gantt.ident,\n NRN: rn,\n DDATE_FROM: new Date(start),\n DDATE_TO: new Date(end)\n }\n });\n } finally {\n loadData();\n }\n }, [gantt.ident, executeStored, loadData]);\n\n //Обработка измненения сроков задачи в диаграмме Гантта\n const handleTaskDatesChange = ({\n task,\n start,\n end,\n isMain\n }) => {\n if (isMain) modifyData({\n rn: task.rn,\n start,\n end\n });\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (gantt.ident) loadData();\n }, [gantt.ident, loadData]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", {\n style: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, title), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n sx: STYLES.CONTROL,\n control: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onChange: () => setGantt(pv => ({\n ...pv,\n useCustomTaskDialog: !pv.useCustomTaskDialog\n }))\n }),\n label: \"\\u041E\\u0442\\u043E\\u0431\\u0440\\u0430\\u0436\\u0430\\u0442\\u044C \\u043F\\u043E\\u043B\\u044C\\u0437\\u043E\\u0432\\u0430\\u0442\\u0435\\u043B\\u044C\\u0441\\u043A\\u0438\\u0439 \\u0434\\u0438\\u0430\\u043B\\u043E\\u0433 \\u0437\\u0430\\u0434\\u0430\\u0447\\u0438\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n container: true,\n direction: \"column\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 12\n }, gantt.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_gantt__WEBPACK_IMPORTED_MODULE_3__.P8PGantt, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_4__.P8P_GANTT_CONFIG_PROPS, gantt, {\n containerStyle: STYLES.GANTT_CONTAINER,\n onTaskDatesChange: handleTaskDatesChange,\n taskAttributeRenderer: taskAttributeRenderer,\n taskDialogRenderer: gantt.useCustomTaskDialog ? taskDialogRenderer : null\n })) : null)));\n};\n\n//Контроль свойств - Пример: Диаграмма Ганта \"P8Gantt\"\nGantt.propTypes = {\n title: (prop_types__WEBPACK_IMPORTED_MODULE_18___default().string).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/samples/gantt.js?"); /***/ }), diff --git a/index.html b/index.html index 236ddf3..adcd761 100644 --- a/index.html +++ b/index.html @@ -16,7 +16,7 @@ - +