From 745c3a3983088afc70251cbb31506b6488e55bde Mon Sep 17 00:00:00 2001 From: Dollerino Date: Wed, 10 Jul 2024 15:41:09 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-826,=20=D0=A6?= =?UTF-8?q?=D0=98=D0=A2=D0=9A-827,=20=D0=A6=D0=98=D0=A2=D0=9A-828,=20?= =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-852=20-=20=D0=9E=D0=B1=D1=89=D0=B5?= =?UTF-8?q?=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B5=D0=B9=20=D0=9F=D0=A3?= =?UTF-8?q?=D0=94=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/plan_detail.js | 108 +- .../components/plans_list.js | 35 +- .../components/plans_list_item.js | 28 +- .../components/progress_box.js | 1 + app/panels/mech_rec_assembly_mon/hooks.js | 33 +- .../mech_rec_assembly_mon.js | 175 +- .../mech_rec_assembly_mon/styles/themes.js | 177 +- .../mech_rec_cost_jobs_manage/backend.js | 337 -- .../mech_rec_cost_jobs_manage/fcjobssp.js | 506 +-- app/panels/mech_rec_cost_jobs_manage/hooks.js | 259 +- .../mech_rec_cost_jobs_manage.js | 72 +- .../components/filter.js | 137 + .../components/ins_department_dg.js | 85 + app/panels/mech_rec_dept_cost_jobs/hooks.js | 198 ++ .../mech_rec_dept_cost_jobs.js | 205 +- .../fcroutlst.js | 217 +- .../fcroutlstsp.js | 60 +- .../mech_rec_dept_cost_prod_plans/hooks.js | 255 +- .../incomefromdeps.js | 53 +- .../mech_rec_dept_cost_prod_plans.js | 177 +- db/PKG_P8PANELS_MECHREC.pck | 2813 ++++++++++------- 21 files changed, 3433 insertions(+), 2498 deletions(-) delete mode 100644 app/panels/mech_rec_cost_jobs_manage/backend.js create mode 100644 app/panels/mech_rec_dept_cost_jobs/components/filter.js create mode 100644 app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js create mode 100644 app/panels/mech_rec_dept_cost_jobs/hooks.js diff --git a/app/panels/mech_rec_assembly_mon/components/plan_detail.js b/app/panels/mech_rec_assembly_mon/components/plan_detail.js index 05d9df5..25e9e03 100644 --- a/app/panels/mech_rec_assembly_mon/components/plan_detail.js +++ b/app/panels/mech_rec_assembly_mon/components/plan_detail.js @@ -25,7 +25,8 @@ const STYLES = { BOX_INFO_MAIN: { border: "1px solid", borderRadius: "25px", - height: "35vh" + height: "35vh", + backgroundColor: "background.detail_table" }, BOX_INFO_SUB: isMessage => ({ overflow: "hidden", @@ -45,7 +46,8 @@ const STYLES = { alignItems: "center", border: "1px solid", borderRadius: "25px", - height: "17vh" + height: "17vh", + backgroundColor: "background.detail_info" }, PRODUCT_SELECTOR_CONTAINER: { display: "flex", @@ -55,7 +57,8 @@ const STYLES = { border: "1px solid", borderRadius: "25px", height: "53vh", - marginTop: "16px" + marginTop: "16px", + backgroundColor: "background.product_selector" }, PRODUCT_SELECTOR_MODEL: { width: "70%" }, PLAN_INFO_MAIN: { @@ -69,45 +72,55 @@ const STYLES = { width: "280px", borderBottom: "1px solid" }, - TABLE_DETAILS: { height: "240px" }, + TABLE_DETAILS: { backgroundColor: "background.detail_table", height: "240px" }, TABLE_DETAILS_HEADER_CELL: maxWidth => ({ + backgroundColor: "background.detail_table", + color: "text.detail_table.fontColor", padding: "2px 2px", fontSize: "11px", textAlign: "center", lineHeight: "1rem", ...(maxWidth ? { maxWidth } : {}) }), - TABLE_DETAILS_DATA_CELL: textAlign => ({ padding: "2px 2px", fontSize: "11px", ...(textAlign ? { textAlign } : {}) }), - TABLE_DETAILS_MORE_BUTTON: { borderRadius: "25px", height: "20px" }, + TABLE_DETAILS_DATA_CELL: textAlign => ({ + backgroundColor: "background.detail_table", + color: "text.detail_table.fontColor", + padding: "2px 2px", + fontSize: "11px", + ...(textAlign ? { textAlign } : {}) + }), + TABLE_DETAILS_MORE_BUTTON: { borderRadius: "25px", height: "20px", color: "text.more_button.fontColor" }, + TABLE_DETAILS_TEXT: { color: "text.detail_table.fontColor" }, CARD_DETAILS_CONTAINER: { minWidth: "1200px", maxWidth: "1400px" }, - CARD_DETAILS_NAVIGATION_STACK: { width: "100%" } + CARD_DETAILS_NAVIGATION_STACK: { width: "100%" }, + NAVIGATE_BUTTONS: { color: "text.title.fontColor" } }; //------------------------------------ //Вспомогательные функции и компоненты //------------------------------------ -//Информация о плане -const PlanInfo = ({ plan }) => { +//Информация о выпуске плана +const PlanSpecInfo = ({ planSpec }) => { return ( <> - + Номер борта: - {plan.SNUMB} + {planSpec.SNUMB} - + Год выпуска: - {plan.NYEAR} + {planSpec.NYEAR} { ); }; -//Контроль свойств - Информация о плане -PlanInfo.propTypes = { - plan: PropTypes.object +//Контроль свойств - Информация о спецификации плана +PlanSpecInfo.propTypes = { + planSpec: PropTypes.object }; //Модель выпуска плана -const PlanProductCompositionModel = ({ model, products, onProductSelect }) => { +const PlanSpecProductCompositionModel = ({ model, products, onProductSelect }) => { //При выборе детали на модели const handleProductClick = ({ item }) => { const product = products.find(p => p.SMODEL_ID == item.id); @@ -150,7 +163,7 @@ const PlanProductCompositionModel = ({ model, products, onProductSelect }) => { }; //Контроль свойств - Модель выпуска плана -PlanProductCompositionModel.propTypes = { +PlanSpecProductCompositionModel.propTypes = { model: PropTypes.any, products: PropTypes.array, onProductSelect: PropTypes.func @@ -171,12 +184,12 @@ const dataCellRender = ({ row, columnDef }) => ({ }); //Таблица детализации изделия -const ProductDetailsTable = ({ plan, product, stored, noProductMessage, noDataFoundMessage, title }) => { +const ProductDetailsTable = ({ planSpec, product, stored, noProductMessage, noPlanSpecMessage, noDataFoundMessage, title }) => { //Собственное состояние - const [state, setState] = useState({ plan: null, product: null, orders: null, pageNumber: 1 }); + const [state, setState] = useState({ planSpec: null, product: null, orders: null, pageNumber: 1 }); //Собственное состояние - данные таблицы - const { data, isLoading } = useProductDetailsTable(state.plan, state.product, state.orders, state.pageNumber, stored); + const { data, isLoading } = useProductDetailsTable(state.planSpec, state.product, state.orders, state.pageNumber, stored); //При изменении состояния сортировки const handleOrderChanged = ({ orders }) => setState(pv => ({ ...pv, orders: [...orders], pageNumber: 1 })); @@ -186,19 +199,25 @@ const ProductDetailsTable = ({ plan, product, stored, noProductMessage, noDataFo //При изменении изделия useEffect(() => { - setState(pv => ({ ...pv, plan, product, orders: null, pageNumber: 1 })); - }, [product, plan]); + setState(pv => ({ ...pv, planSpec, product, orders: null, pageNumber: 1 })); + }, [product, planSpec]); //Генерация содержимого return ( {!product ? ( - {noProductMessage} + + {noProductMessage} + + ) : !planSpec ? ( + + {noPlanSpecMessage} + ) : ( <> - + {title} @@ -225,10 +244,11 @@ const ProductDetailsTable = ({ plan, product, stored, noProductMessage, noDataFo //Контроль свойств - Таблица детализации изделия ProductDetailsTable.propTypes = { - plan: PropTypes.number.isRequired, + planSpec: PropTypes.number, product: PropTypes.number, stored: PropTypes.string.isRequired, noProductMessage: PropTypes.string.isRequired, + noPlanSpecMessage: PropTypes.string.isRequired, noDataFoundMessage: PropTypes.string.isRequired, title: PropTypes.string.isRequired }; @@ -238,9 +258,9 @@ ProductDetailsTable.propTypes = { //----------- //Детализация по объекту -const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = false, onNavigate, onBack }) => { +const PlanSpecDetail = ({ planSpec, disableNavigatePrev = false, disableNavigateNext = false, onNavigate, onBack }) => { //Собственное состояние - данные производственных составов SVG - const [costProductComposition, setCostProductComposition] = useCostProductComposition(plan.NRN); + const [costProductComposition, setCostProductComposition] = useCostProductComposition(planSpec.NRN); //Выбор элемента изделия const setProduct = product => { @@ -260,14 +280,14 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f handleNavigate(-1)}> - navigate_before + navigate_before @@ -276,31 +296,33 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f - + - handleNavigate(1)}> - navigate_next + navigate_next @@ -323,8 +345,8 @@ const PlanDetail = ({ plan, disableNavigatePrev = false, disableNavigateNext = f }; //Контроль свойств - Детализация по объекту -PlanDetail.propTypes = { - plan: PropTypes.object, +PlanSpecDetail.propTypes = { + planSpec: PropTypes.object, disableNavigatePrev: PropTypes.bool, disableNavigateNext: PropTypes.bool, onNavigate: PropTypes.func, @@ -335,4 +357,4 @@ PlanDetail.propTypes = { //Интерфейс модуля //---------------- -export { PlanDetail }; +export { PlanSpecDetail }; diff --git a/app/panels/mech_rec_assembly_mon/components/plans_list.js b/app/panels/mech_rec_assembly_mon/components/plans_list.js index 7debec8..d6103b3 100644 --- a/app/panels/mech_rec_assembly_mon/components/plans_list.js +++ b/app/panels/mech_rec_assembly_mon/components/plans_list.js @@ -1,6 +1,6 @@ /* Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий - Компонент: Список планов + Компонент: Список выпусков планов */ //--------------------- @@ -10,7 +10,7 @@ import React, { useState } from "react"; //Классы React import { Container, Grid, IconButton, Icon } from "@mui/material"; //Интерфейсные элементы import PropTypes from "prop-types"; //Контроль свойств компонента -import { PlansListItem } from "./plans_list_item"; //Элемент списка планов +import { PlanSpecsListItem } from "./plans_list_item"; //Элемент списка выпусков планов //--------- //Константы @@ -21,23 +21,24 @@ const DEFAULT_PAGE_SIZE = 5; //Стили const STYLES = { - PLAN_DOCUMENTS_LIST: { minWidth: "1024px" } + PLAN_DOCUMENTS_LIST: { minWidth: "1024px" }, + NAVIGATE_BUTTONS: { color: "text.title.fontColor" } }; //----------- //Тело модуля //----------- -//Список планов -const PlansList = ({ plans, pageSize = DEFAULT_PAGE_SIZE, onItemClick }) => { +//Список выпусков планов +const PlanSpecsList = ({ planSpecs, pageSize = DEFAULT_PAGE_SIZE, onItemClick }) => { //Состояние прокрутки списка отображаемых планов const [scroll, setScroll] = useState(0); - //Отработка нажатия на прокрутку списка планов влево + //Отработка нажатия на прокрутку списка выпусков планов влево const handleScrollLeft = () => setScroll(pv => (pv <= 1 ? 0 : pv - 1)); - //Отработка нажатия на прокрутку списка планов вправо - const handleScrollRight = () => setScroll(pv => (pv + pageSize >= plans.length ? pv : pv + 1)); + //Отработка нажатия на прокрутку списка выпусков планов вправо + const handleScrollRight = () => setScroll(pv => (pv + pageSize >= planSpecs.length ? pv : pv + 1)); //Сборка представления return ( @@ -45,13 +46,13 @@ const PlansList = ({ plans, pageSize = DEFAULT_PAGE_SIZE, onItemClick }) => { - navigate_before + navigate_before - {plans.map((el, i) => + {planSpecs.map((el, i) => i >= scroll && i < scroll + pageSize ? ( - (onItemClick ? onItemClick(card, cardIndex) : null)} @@ -60,8 +61,8 @@ const PlansList = ({ plans, pageSize = DEFAULT_PAGE_SIZE, onItemClick }) => { ) : null )} - = plans.length}> - navigate_next + = planSpecs.length}> + navigate_next @@ -69,9 +70,9 @@ const PlansList = ({ plans, pageSize = DEFAULT_PAGE_SIZE, onItemClick }) => { ); }; -//Контроль свойств - Список планов -PlansList.propTypes = { - plans: PropTypes.arrayOf(PropTypes.object), +//Контроль свойств - Список выпусков планов +PlanSpecsList.propTypes = { + planSpecs: PropTypes.arrayOf(PropTypes.object), pageSize: PropTypes.number, onItemClick: PropTypes.func }; @@ -80,4 +81,4 @@ PlansList.propTypes = { //Интерфейс модуля //---------------- -export { PlansList }; +export { PlanSpecsList }; diff --git a/app/panels/mech_rec_assembly_mon/components/plans_list_item.js b/app/panels/mech_rec_assembly_mon/components/plans_list_item.js index d01e0be..0ac1900 100644 --- a/app/panels/mech_rec_assembly_mon/components/plans_list_item.js +++ b/app/panels/mech_rec_assembly_mon/components/plans_list_item.js @@ -1,6 +1,6 @@ /* Парус 8 - Панели мониторинга - ПУП - Мониторинг сборки изделий - Компонент: Элемент списка планов + Компонент: Элемент списка выпусков планов */ //--------------------- @@ -26,8 +26,10 @@ const STYLES = { gap: "24px", border: "1px solid", borderRadius: "25px", - cursor: "pointer" + cursor: "pointer", + backgroundColor: "background.secondary" }, + TEXT_INFO_FIELD: { color: "text.secondary.fontColor" }, IMAGE_BOX: { width: "180px", height: "180px", alignItems: "center", justifyContent: "center", display: "flex" }, IMAGE_LIST_ITEM: { textAlign: "center" }, IMAGE_IMG: { width: "160px" } @@ -38,7 +40,7 @@ const STYLES = { //------------------------------------ //Изображение для элемента -const PlansListItemImage = ({ card }) => { +const PlanSpecsListItemImage = ({ card }) => { return ( @@ -55,7 +57,7 @@ const PlansListItemImage = ({ card }) => { }; //Контроль свойств - Изображение для элемента -PlansListItemImage.propTypes = { +PlanSpecsListItemImage.propTypes = { card: PropTypes.object }; @@ -63,13 +65,13 @@ PlansListItemImage.propTypes = { //Тело модуля //----------- -//Элемент списка планов -const PlansListItem = ({ card, cardIndex, onClick }) => { +//Элемент списка выпусков планов +const PlanSpecsListItem = ({ card, cardIndex, onClick }) => { return ( (onClick ? onClick(card, cardIndex) : null)}> - + - + Номер борта {card.SNUMB} @@ -80,10 +82,10 @@ const PlansListItem = ({ card, cardIndex, onClick }) => { width={"155px"} height={"155px"} progressVariant={"h3"} - detailVariant={"UDO_body2"} + detailVariant={"PlanSpecProgressDetail"} /> - + Год выпуска: @@ -94,8 +96,8 @@ const PlansListItem = ({ card, cardIndex, onClick }) => { ); }; -//Контроль свойств - Элемент списка планов -PlansListItem.propTypes = { +//Контроль свойств - Элемент списка выпусков планов +PlanSpecsListItem.propTypes = { card: PropTypes.object, cardIndex: PropTypes.number, onClick: PropTypes.func @@ -105,4 +107,4 @@ PlansListItem.propTypes = { //Интерфейс модуля //---------------- -export { PlansListItem }; +export { PlanSpecsListItem }; diff --git a/app/panels/mech_rec_assembly_mon/components/progress_box.js b/app/panels/mech_rec_assembly_mon/components/progress_box.js index 169ff90..97c981b 100644 --- a/app/panels/mech_rec_assembly_mon/components/progress_box.js +++ b/app/panels/mech_rec_assembly_mon/components/progress_box.js @@ -24,6 +24,7 @@ const STYLES = { flexDirection: "column", margin: "0px 32px", borderRadius: "50%", + backgroundColor: "background.progress", ...(width ? { width } : {}), ...(height ? { height } : {}) }) diff --git a/app/panels/mech_rec_assembly_mon/hooks.js b/app/panels/mech_rec_assembly_mon/hooks.js index 03dc372..7b70dff 100644 --- a/app/panels/mech_rec_assembly_mon/hooks.js +++ b/app/panels/mech_rec_assembly_mon/hooks.js @@ -16,7 +16,7 @@ import { object2Base64XML } from "../../core/utils"; //Вспомогатель //--------- //Размер страницы данных -const DATA_GRID_PAGE_SIZE = 50; +const DATA_GRID_PAGE_SIZE = 5; //----------- //Тело модуля @@ -44,9 +44,9 @@ const useMechRecAssemblyMon = () => { planCtlgs: [], planCtlgsLoaded: false, selectedPlanCtlg: {}, - plans: [], - plansLoaded: false, - selectedPlan: {} + planSpecs: [], + planSpecsLoaded: false, + selectedPlanSpec: {} }); //Подключение к контексту взаимодействия с сервером @@ -76,7 +76,7 @@ const useMechRecAssemblyMon = () => { respArg: "COUT", isArray: name => name === "XFCPRODPLAN_INFO" }); - setState(pv => ({ ...pv, init: true, plans: [...(data?.XFCPRODPLAN_INFO || [])], plansLoaded: true })); + setState(pv => ({ ...pv, init: true, planSpecs: [...(data?.XFCPRODPLAN_INFO || [])], planSpecsLoaded: true })); } // eslint-disable-next-line react-hooks/exhaustive-deps }, @@ -88,7 +88,7 @@ const useMechRecAssemblyMon = () => { setState(pv => ({ ...pv, selectedPlanCtlg: { ...planCtlg }, - selectedPlan: {}, + selectedPlanSpec: {}, showPlanList: false })); }; @@ -98,7 +98,7 @@ const useMechRecAssemblyMon = () => { setState(pv => ({ ...pv, selectedPlanCtlg: {}, - selectedPlan: {}, + selectedPlanSpec: {}, showPlanList: false })); @@ -114,7 +114,7 @@ const useMechRecAssemblyMon = () => { if (state.selectedPlanCtlg) { loadPlans(state.selectedPlanCtlg.NRN); } else { - setState(pv => ({ ...pv, plans: [], plansLoaded: false })); + setState(pv => ({ ...pv, planSpecs: [], planSpecsLoaded: false })); } // eslint-disable-next-line react-hooks/exhaustive-deps }, [state.selectedPlanCtlg]); @@ -123,7 +123,7 @@ const useMechRecAssemblyMon = () => { }; //Хук для информации по производственным составам -const useCostProductComposition = plan => { +const useCostProductComposition = planSpec => { //Собственное состояние let [costProductComposition, setCostProductComposition] = useState({ showPlanList: false, @@ -141,7 +141,7 @@ const useCostProductComposition = plan => { const loadData = async () => { const data = await executeStored({ stored: "PKG_P8PANELS_MECHREC.FCPRODCMP_DETAILS_GET", - args: { NFCPRODPLAN: plan }, + args: { NFCPRODPLANSP: planSpec }, respArg: "COUT", isArray: name => name === "XFCPRODCMP" }); @@ -153,15 +153,15 @@ const useCostProductComposition = plan => { selectedProduct: null })); }; - if (plan) loadData(); - }, [plan, executeStored]); + if (planSpec) loadData(); + }, [planSpec, executeStored]); //Вернём данные return [costProductComposition, setCostProductComposition]; }; //Хук для таблицы детализации изделия -const useProductDetailsTable = (plan, product, orders, pageNumber, stored) => { +const useProductDetailsTable = (planSpec, product, orders, pageNumber, stored) => { //Собственное состояние - флаг загрузки const [isLoading, setLoading] = useState(false); @@ -184,8 +184,7 @@ const useProductDetailsTable = (plan, product, orders, pageNumber, stored) => { const data = await executeStored({ stored, args: { - NPRODCMPSP: product, - NFCPRODPLAN: plan, + NFCPRODPLANSP: planSpec, CORDERS: { VALUE: object2Base64XML(orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, NPAGE_NUMBER: pageNumber, NPAGE_SIZE: DATA_GRID_PAGE_SIZE, @@ -205,8 +204,8 @@ const useProductDetailsTable = (plan, product, orders, pageNumber, stored) => { setLoading(false); } }; - if (plan && product) loadData(); - }, [plan, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]); + if (planSpec && product) loadData(); + }, [planSpec, product, orders, pageNumber, stored, executeStored, SERV_DATA_TYPE_CLOB]); //Вернём данные return { data, isLoading }; 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 e01f4be..156dd7c 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 @@ -7,14 +7,29 @@ //Подключение библиотек //--------------------- -import React, { useState, useContext } from "react"; //Классы React +import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, TextField, FormGroup, FormControlLabel, Checkbox } from "@mui/material"; //Интерфейсные элементы +import { + Drawer, + Fab, + Box, + List, + ListItemButton, + ListItemText, + Typography, + TextField, + FormGroup, + FormControlLabel, + Checkbox, + Container, + IconButton, + Stack, + Icon +} from "@mui/material"; //Интерфейсные элементы import { ThemeProvider } from "@mui/material/styles"; //Подключение темы -import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений -import { PlansList } from "./components/plans_list"; //Список планов -import { PlanDetail } from "./components/plan_detail"; //Детали плана -import { theme } from "./styles/themes"; //Стиль темы +import { PlanSpecsList } from "./components/plans_list"; //Список планов +import { PlanSpecDetail } from "./components/plan_detail"; //Детали плана +import { lightTheme, darkTheme } from "./styles/themes"; //Стиль темы import { useMechRecAssemblyMon, useFilteredPlanCtlgs } from "./hooks"; //Вспомогательные хуки //--------- @@ -23,9 +38,19 @@ import { useMechRecAssemblyMon, useFilteredPlanCtlgs } from "./hooks"; //Всп //Стили const STYLES = { - PLANS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, - PLANS_CHECKBOX_HAVEDOCS: { alignContent: "space-around" }, - PLANS_LIST_ITEM_ZERODOCS: { backgroundColor: "#ebecec" }, + PLANS_FINDER: { + marginTop: "10px", + marginLeft: "10px", + width: "93%", + [`& .MuiFormLabel-root.Mui-focused`]: { color: "text.title.fontColor" }, + [`& .MuiInputBase-root`]: { color: "text.plans_finder.fontColor" }, + [`& .MuiInputBase-root.Mui-focused::after`]: { borderBottom: "2px solid black" } + }, + PLANS_CHECKBOX_HAVEDOCS: { + alignContent: "space-around", + [`& .MuiCheckbox-root.Mui-checked`]: { color: "text.title.fontColor" } + }, + PLANS_LIST_ITEM_ZERODOCS: { backgroundColor: "background.plans_zero_docs" }, PLANS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, PLANS_LIST_ITEM_SECONDARY: { wordWrap: "break-word", fontSize: "0.6rem", textTransform: "uppercase" }, PLANS_BUTTON: { position: "absolute" }, @@ -33,9 +58,18 @@ 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", + backgroundColor: "background.plans_drawer_paper", + color: "text.plans_finder.fontColor" + } }, - PLANS_LIST_BOX: { paddingTop: "20px" } + PLANS_LIST_BOX: { paddingTop: "20px" }, + ROOT_BG: { backgroundColor: "background.main", minHeight: "calc(100vh - 64px)", overflow: "hidden" }, + THEME_CHANGER: { color: "text.title.fontColor" }, + MAIN_TITLE: { textAlign: "center", color: "text.title.fontColor", marginTop: "-24px" } }; //------------------------------------ @@ -116,6 +150,8 @@ PlanCtlgsList.propTypes = { //Корневая панель мониторинга сборки изделий const MechRecAssemblyMon = () => { + //Состояние - текущая тема + const [theme, setTheme] = useState(lightTheme); //Собственное состояние const [state, setState, selectPlanCtlg, unselectPlanCtlg] = useMechRecAssemblyMon(); @@ -132,9 +168,6 @@ const MechRecAssemblyMon = () => { //Массив отфильтрованных каталогов const filteredPlanCtgls = useFilteredPlanCtlgs(state.planCtlgs, filter); - //Подключение к контексту сообщений - const { InlineMsgInfo } = useContext(MessagingСtx); - //Обработка нажатия на элемент в списке каталогов планов const handlePlanCtlgClick = planCtlg => { if (state.selectedPlanCtlg.NRN != planCtlg.NRN) selectPlanCtlg(planCtlg); @@ -144,15 +177,15 @@ const MechRecAssemblyMon = () => { //Перемещение к нужному плану const navigateToPlan = planIndex => { if (planIndex < 0) planIndex = 0; - if (planIndex > state.plans.length - 1) planIndex = state.plans.length - 1; + if (planIndex > state.planSpecs.length - 1) planIndex = state.planSpecs.length - 1; setState(pv => ({ ...pv, - selectedPlan: { ...state.plans[planIndex] } + selectedPlanSpec: { ...state.planSpecs[planIndex] } })); setPlanDetailNavigation(pv => ({ ...pv, disableNavigatePrev: planIndex == 0 ? true : false, - disableNavigateNext: planIndex == state.plans.length - 1 ? true : false, + disableNavigateNext: planIndex == state.planSpecs.length - 1 ? true : false, currentPlanIndex: planIndex })); }; @@ -162,12 +195,17 @@ const MechRecAssemblyMon = () => { //Обработка нажатия на кнопку "Назад" const handlePlanDetailBackClick = () => { - setState(pv => ({ ...pv, selectedPlan: {} })); + setState(pv => ({ ...pv, selectedPlanSpec: {} })); }; //Обработка навигации из карточки с деталями плана const handlePlanDetailNavigateClick = direction => navigateToPlan(planDetailNavigation.currentPlanIndex + direction); + //Обработка изменения темы + const handleThemeChange = () => { + setTheme(theme.palette.type === "light" ? darkTheme : lightTheme); + }; + //Формирование текста заголовка const title = `${state.selectedPlanCtlg.SNAME} на ${state.selectedPlanCtlg.NMIN_YEAR} ${ state.selectedPlanCtlg.NMIN_YEAR == state.selectedPlanCtlg.NMAX_YEAR ? "г." : `- ${state.selectedPlanCtlg.NMAX_YEAR} г.г.` @@ -175,53 +213,62 @@ const MechRecAssemblyMon = () => { //Генерация содержимого return ( - - - setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> - Программы - - setState(pv => ({ ...pv, showPlanList: false }))} - sx={STYLES.PLANS_DRAWER} - > - - - {state.init == true ? ( - state.selectedPlanCtlg.NRN ? ( - <> - - {title} + + + + setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> + Каталоги планов + + setState(pv => ({ ...pv, showPlanList: false }))} + sx={STYLES.PLANS_DRAWER} + > + + + + handleThemeChange()}> + {theme.palette.type === "light" ? "brightness_4" : "brightness_7"} + + + {state.init == true ? ( + state.selectedPlanCtlg.NRN ? ( + <> + + {title} + + {state.planSpecsLoaded == true ? ( + state.selectedPlanSpec.NRN ? ( + + ) : ( + + + + ) + ) : null} + + ) : ( + + Укажите каталог планов для отображения спецификаций - {state.plansLoaded == true ? ( - state.selectedPlan.NRN ? ( - - ) : ( - - - - ) - ) : null} - - ) : ( - - ) - ) : null} - - + ) + ) : null} + + + ); }; diff --git a/app/panels/mech_rec_assembly_mon/styles/themes.js b/app/panels/mech_rec_assembly_mon/styles/themes.js index 277aeae..37bade7 100644 --- a/app/panels/mech_rec_assembly_mon/styles/themes.js +++ b/app/panels/mech_rec_assembly_mon/styles/themes.js @@ -1,67 +1,130 @@ import { createTheme } from "@mui/material/styles"; //Интерфейсные элементы +//--------- +//Константы +//--------- + +//Насыщенность шрифта +const FONT_WEIGHT_NORMAL = 400; +const FONT_WEIGHT_BOLD = 700; + +//Выравнивание текста +const TEXT_ALIGN_CENTER = "center"; + +//Стиль для детализации прогресса и сообщения таблицы детализации +const smallSizedText = { + fontSize: "12px", + fontWeight: FONT_WEIGHT_NORMAL, + whiteSpace: "pre-line", + textAlign: TEXT_ALIGN_CENTER, + wordWrap: "break-word", + letterSpacing: "0.00938em", + lineHeight: "1.5" +}; + +//Стили кастомных шрифтов +const customTypography = { + h1: { + fontSize: "40px", + fontWeight: FONT_WEIGHT_NORMAL, + textAlign: TEXT_ALIGN_CENTER + }, + h2: { + fontSize: "40px", + fontWeight: FONT_WEIGHT_BOLD, + textAlign: TEXT_ALIGN_CENTER + }, + h3: { + fontSize: "30px", + fontWeight: FONT_WEIGHT_BOLD, + textAlign: TEXT_ALIGN_CENTER + }, + h4: { + fontSize: "16px", + fontWeight: FONT_WEIGHT_NORMAL, + textAlign: TEXT_ALIGN_CENTER + }, + subtitle1: { + fontSize: "30px", + fontWeight: FONT_WEIGHT_NORMAL, + textAlign: TEXT_ALIGN_CENTER + }, + subtitle2: { + fontSize: "20px", + fontWeight: FONT_WEIGHT_BOLD, + textAlign: TEXT_ALIGN_CENTER + }, + body3: { + fontSize: "9px", + whiteSpace: "pre-line", + textAlign: TEXT_ALIGN_CENTER + }, + PlanSpecInfo: { + fontSize: "14px", + fontWeight: FONT_WEIGHT_NORMAL, + textAlign: TEXT_ALIGN_CENTER, + wordWrap: "break-word", + letterSpacing: "0.00938em", + lineHeight: "1.5" + }, + PlanSpecProgressDetail: { + ...smallSizedText + }, + ProductDetailMessage: { + ...smallSizedText + } +}; + +//--------- //Описание темы -const theme = createTheme({ +//--------- + +const lightTheme = createTheme({ palette: { + type: "light", + background: { + main: "#fff", + secondary: "#fff", + progress: "#fff", + detail_table: "#fff", + detail_info: "#fff", + product_selector: "#fff", + plans_zero_docs: "#ebecec", + plans_drawer_paper: "#fff" + }, text: { title: { fontColor: "rgba(0, 0, 0, 0.65)" }, - secondary: { fontColor: "rgba(0, 0, 0, 0.298)" } + detail_table: { fontColor: "rgba(0, 0, 0, 0.87)" }, + secondary: { fontColor: "rgba(0, 0, 0, 0.298)" }, + plans_finder: { fontColor: "black" }, + more_button: { fontColor: "#1976d2" } } }, - typography: { - h1: { - fontSize: "40px", - fontWeight: 400, - textAlign: "center" - }, - h2: { - fontSize: "40px", - fontWeight: 700, - textAlign: "center" - }, - h3: { - fontSize: "30px", - fontWeight: 700, - textAlign: "center" - }, - h4: { - fontSize: "16px", - fontWeight: 400, - textAlign: "center" - }, - subtitle1: { - fontSize: "30px", - fontWeight: 400, - textAlign: "center" - }, - subtitle2: { - fontSize: "20px", - fontWeight: 700, - textAlign: "center" - }, - UDO_body1: { - fontSize: "14px", - fontWeight: 400, - textAlign: "center", - wordWrap: "break-word", - letterSpacing: "0.00938em", - lineHeight: "1.5" - }, - UDO_body2: { - fontSize: "12px", - fontWeight: 400, - whiteSpace: "pre-line", - textAlign: "center", - wordWrap: "break-word", - letterSpacing: "0.00938em", - lineHeight: "1.5" - }, - body3: { - fontSize: "9px", - whiteSpace: "pre-line", - textAlign: "center" - } - } + typography: { ...customTypography } }); -export { theme }; +const darkTheme = createTheme({ + palette: { + type: "dark", + background: { + main: "#161616", + secondary: "#d2d2d2", + progress: "#e8e8e8", + detail_table: "#3f3f3f", + detail_info: "#d0d0d0", + product_selector: "#eee", + plans_zero_docs: "#323232", + plans_drawer_paper: "#3f3f3f" + }, + text: { + title: { fontColor: "#fff" }, + detail_table: { fontColor: "#fff" }, + secondary: { fontColor: "rgba(0, 0, 0, 0.298)" }, + plans_finder: { fontColor: "#fff" }, + more_button: { fontColor: "#fff" } + } + }, + typography: { ...customTypography } +}); + +export { lightTheme, darkTheme }; diff --git a/app/panels/mech_rec_cost_jobs_manage/backend.js b/app/panels/mech_rec_cost_jobs_manage/backend.js deleted file mode 100644 index ee013e8..0000000 --- a/app/panels/mech_rec_cost_jobs_manage/backend.js +++ /dev/null @@ -1,337 +0,0 @@ -//--------------------- -//Подключение библиотек -//--------------------- - -import { useState, useCallback, useEffect, useContext } from "react"; //Классы React -import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером -import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции - -//--------- -//Константы -//--------- - -//Размер страницы данных -const DATA_GRID_PAGE_SIZE = 5; -const DATA_GRID_PAGE_FCEQUIPMENT = 10; - -//--------------------------------------------- -//Вспомогательные функции форматирования данных -//--------------------------------------------- - -//Переиницализация выбранных значений строк (необходимо при сортировке или добавлении записей строк) -const updatingSelected = (rows, selectedRows) => { - //Если полученный массив строк не пустой - if (rows.length > 0 && selectedRows.length > 0) { - //Устанавливаем выбор там, где он был установлен - let updatedRows = rows.map(item => { - if (selectedRows.includes(item.NRN)) { - return { ...item, NSELECT: 1 }; - } else { - return item; - } - }); - return updatedRows; - } - //Возвращаем - return rows; -}; - -//----------- -//Тело модуля -//----------- - -//Хук для таблицы маршрутных листов -const useCostRouteLists = (task, processIdent) => { - //Собственное состояние - таблица данных - const [costRouteLists, setCostRouteLists] = useState({ - task: null, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - selectedRows: [], - reload: true, - pageNumber: 1, - morePages: true - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (costRouteLists.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_FCROUTLST_DG_GET", - args: { - NFCJOBS: task, - CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costRouteLists.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 - }, - respArg: "COUT", - attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) - }); - setCostRouteLists(pv => ({ - ...pv, - task: task, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: - pv.pageNumber == 1 - ? updatingSelected([...(data.XROWS || [])], costRouteLists.selectedRows) - : updatingSelected([...pv.rows, ...(data.XROWS || [])], costRouteLists.selectedRows), - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - costRouteLists.reload, - costRouteLists.filters, - costRouteLists.orders, - costRouteLists.dataLoaded, - costRouteLists.pageNumber, - executeStored, - SERV_DATA_TYPE_CLOB - ]); - - //Добавление/удаление записи в селектлисте - const modifySelectList = useCallback( - async prms => { - try { - if (prms.NSELECT) { - await executeStored({ - stored: "PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_ADD", - args: { NIDENT: processIdent, NFCROUTLST: prms.NFCROUTLST } - }); - } else { - await executeStored({ - stored: "PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_DEL", - args: { NIDENT: processIdent, NFCROUTLST: prms.NFCROUTLST } - }); - } - } catch (e) { - throw new Error(e.message); - } - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [executeStored] - ); - - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [costRouteLists.reload, loadData]); - - //При изменении сменного задания - useEffect(() => { - setCostRouteLists(pv => ({ - ...pv, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - selectedRows: [], - reload: true, - pageNumber: 1, - morePages: true - })); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [task]); - - return [costRouteLists, setCostRouteLists, modifySelectList]; -}; - -//Хук для таблицы операций -const useCostJobsSpecs = (task, fcroutlstList, processIdent) => { - //Собственное состояние - таблица данных - const [costJobsSpecs, setCostJobsSpecs] = useState({ - task: null, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - selectedRows: [], - reload: true, - pageNumber: 1, - morePages: true - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (costJobsSpecs.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET", - args: { - NFCJOBS: task, - NIDENT: processIdent, - //SFCROUTLST_LIST: fcroutlstList.join(","), - CORDERS: { VALUE: object2Base64XML(costJobsSpecs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costJobsSpecs.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costJobsSpecs.dataLoaded ? 0 : 1 - }, - respArg: "COUT", - attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) - }); - setCostJobsSpecs(pv => ({ - ...pv, - task: task, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: - pv.pageNumber == 1 - ? updatingSelected([...(data.XROWS || [])], costJobsSpecs.selectedRows) - : updatingSelected([...pv.rows, ...(data.XROWS || [])], costJobsSpecs.selectedRows), - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - costJobsSpecs.reload, - costJobsSpecs.filters, - costJobsSpecs.orders, - costJobsSpecs.dataLoaded, - costJobsSpecs.pageNumber, - executeStored, - SERV_DATA_TYPE_CLOB - ]); - - //Выдача задания - const issueCostJobsSpecs = useCallback( - async prms => { - try { - await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_ISSUE", - args: { NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } - }); - } catch (e) { - throw new Error(e.message); - } - }, - [executeStored] - ); - - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [costJobsSpecs.reload, loadData]); - - //При изменении сменного задания - useEffect(() => { - setCostJobsSpecs(pv => ({ - ...pv, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - selectedRows: [], - reload: true, - pageNumber: 1, - morePages: true - })); - }, [task, fcroutlstList]); - - return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs]; -}; - -//Хук для таблицы рабочих центров -const useCostEquipment = () => { - //Собственное состояние - таблица данных - const [costEquipment, setCostEquipment] = useState({ - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - selectedRows: [], - selectedLoaded: false, - reload: true, - pageNumber: 1, - morePages: true - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (costEquipment.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCEQUIPMENT_DG_GET", - args: { - CORDERS: { VALUE: object2Base64XML(costEquipment.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costEquipment.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_FCEQUIPMENT, - NINCLUDE_DEF: costEquipment.dataLoaded ? 0 : 1 - }, - respArg: "COUT", - attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) - }); - setCostEquipment(pv => ({ - ...pv, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: - pv.pageNumber == 1 - ? updatingSelected([...(data.XROWS || [])], costEquipment.selectedRows) - : updatingSelected([...pv.rows, ...(data.XROWS || [])], costEquipment.selectedRows), - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_FCEQUIPMENT - })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - costEquipment.reload, - costEquipment.filters, - costEquipment.orders, - costEquipment.dataLoaded, - costEquipment.pageNumber, - executeStored, - SERV_DATA_TYPE_CLOB - ]); - - //Включение оборудования в операции - const includeCostEquipment = useCallback( - async prms => { - try { - await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_INC_FCEQUIPMENT", - args: { NFCEQUIPMENT: prms.NFCEQUIPMENT, NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } - }); - } catch (e) { - throw new Error(e.message); - } - }, - [executeStored] - ); - - //Исключение оборудования из операции - const excludeCostEquipment = useCallback( - async prms => { - try { - await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_FCEQUIPMENT", - args: { NFCEQUIPMENT: prms.NFCEQUIPMENT, NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } - }); - } catch (e) { - throw new Error(e.message); - } - }, - [executeStored] - ); - - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [costEquipment.reload, loadData]); - - return [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment]; -}; - -export { useCostRouteLists, useCostJobsSpecs, useCostEquipment, updatingSelected }; diff --git a/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js b/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js index de2c159..7f6e6c4 100644 --- a/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js +++ b/app/panels/mech_rec_cost_jobs_manage/fcjobssp.js @@ -1,124 +1,139 @@ /* Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания - Компонент панели: Таблица информации об операциях сменного задания + Компонент панели: Таблица информации о строках сменного задания */ //--------------------- //Подключение библиотек //--------------------- -import React from "react"; //Классы React +import React, { useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента -import { Typography, Box, Checkbox, Grid, Icon, Button } from "@mui/material"; //Интерфейсные элементы +import { Typography, Box, Checkbox, Grid, Icon, Button, Dialog, DialogContent, TextField, DialogActions, Tooltip } from "@mui/material"; //Интерфейсные элементы import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения -import { useCostRouteLists, useCostJobsSpecs, useCostEquipment } from "./backend"; //Собственные хуки таблиц +import { useCostJobsSpecs, useEquipConfiguration } from "./hooks"; //Собственные хуки таблиц //--------- //Константы //--------- - -const sUnitCostRouteLists = "CostRouteLists"; //Мнемокод раздела маршрутных листов const sUnitCostJobsSpecs = "CostJobsSpecs"; //Мнемокод раздела операций const sUnitCostEquipment = "CostEquipment"; //Мнемокод раздела рабочих центров //Стили const STYLES = { CONTAINER: { textAlign: "center" }, + DATA_GRID_CONTAINER: { minHeight: "65vh", maxHeight: "65vh" }, TABLE: { paddingTop: "15px" }, - TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" }, TABLE_BUTTONS: { display: "flex", justifyContent: "flex-end" }, CHECK_BOX: { textAlign: "center" }, - OPERATIONS_SEPARATOR: { padding: "3px 0px", backgroundColor: "lightblue" }, - INFORMATION_HALF: { minWidth: "50%", maxWidth: "50%", textAlign: "center" } + JOBS_INFO: { minWidth: "60%", maxWidth: "60%", textAlign: "center" }, + EQUIPMENT_INFO: { minWidth: "40%", maxWidth: "40%", textAlign: "center" } +}; + +//Цвета +const colors = { + LINKED: "#bce0de", + UNAVAILABLE: "#949494", + WITH_EQCONFIG: "#82df83" }; //--------------------------------------------- -//Вспомогательные функции форматирования данных +//Вспомогательные функции и компоненты //--------------------------------------------- -//Формирование списка отмеченных записей -function selectedReducer(accumulator, current) { - if (current.NSELECT == 1) { - accumulator.push(current.NRN); - } - return accumulator; -} - //Форматирование значения ячейки -const dataCellRender = ({ row, columnDef, handleSelectChange, sUnit, selectedEquip }) => { - //Инициализируем доступность выбора - let disabled = false; +const dataCellRender = ({ row, columnDef, handleSelectChange, sUnit, selectedRow, selectedJobSpec }) => { + //Стиль + let cellStyle = {}; //Если это рабочие центры if (sUnit === sUnitCostEquipment) { + //Признак недоступности + let disabled = true; + //Если в выбранной строке смены указано рабочее место + if (selectedJobSpec.NEQCONFIG) { + //Если это текущее рабочее место + if (row["NRN"] === selectedJobSpec.NEQCONFIG) { + //Подсвечиваем строку рабочего места + cellStyle = { backgroundColor: colors.LINKED }; + } + } else { + //Если выбрана строка смены + if (selectedJobSpec.NRN) { + //Если на текущее рабочее место возможно добавить задание + if (row["NLOADING"] < 100 && row["NEQUIPMENT"] === selectedJobSpec.NEQUIP_PLAN) { + //Подсвечиваем строку рабочего места + cellStyle = { backgroundColor: colors.LINKED }; + disabled = false; + } + } + } + //Если рабочий центр загружен + if (row["NLOADING"] >= 100) { + //Если поле не поле выбора + if (columnDef.name !== "NSELECT") { + //Указываем, что рабочее место недоступно + cellStyle = { ...cellStyle, color: colors.UNAVAILABLE }; + } + } //Для колонки выбора if (columnDef.name === "NSELECT") { return { + cellStyle, data: ( handleSelectChange(row["NRN"], sUnit, row["NCOEFF"] <= row["NLOADING"])} + disabled={disabled} + checked={row["NRN"] === selectedRow} + onChange={() => handleSelectChange({ NRN: row["NRN"], SUNIT: sUnit, BFULL_LOADED: row["NLOADING"] >= 100 })} /> ) }; } - //Если оборудование загружено - if (row["NCOEFF"] <= row["NLOADING"]) { - //Если поле не поле выбора - if (columnDef.name !== "NSELECT") { - return { - cellStyle: { color: "lightgrey" }, - data: row[columnDef.name] - }; - } - } - } - //Если это операции - if (sUnit === sUnitCostJobsSpecs) { - //Если "Оборудование план" операции сходится с выбранным оборудованием - if (selectedEquip.includes(row["NEQUIP_PLAN"])) { - //Если колонка выбора - if (columnDef.name === "NSELECT") { - return { - cellStyle: { backgroundColor: "#bce0de" }, - data: ( - - handleSelectChange(row["NRN"], sUnit)} - /> - - ) - }; - } else { - return { - cellStyle: { backgroundColor: "#bce0de" }, - data: row[columnDef.name] - }; - } - } - } - //Для колонки выбора - if (columnDef.name === "NSELECT") { + //Отформатированная колонка return { - data: ( - - handleSelectChange(row["NRN"], sUnit)} - /> - - ) + cellStyle, + data: row[columnDef.name] }; } + //Если это сменное задание + if (sUnit === sUnitCostJobsSpecs) { + //Если указан станок + if (row["SEQCONFIG"]) { + //Подсвечиваем сменное задание зеленым + cellStyle = { ...cellStyle, backgroundColor: colors.WITH_EQCONFIG }; + } + //Для колонки выбора + if (columnDef.name === "NSELECT") { + return { + cellStyle, + data: ( + + + handleSelectChange({ + NRN: row["NRN"], + SUNIT: sUnit, + NEQCONFIG: row["NEQCONFIG"], + NEQUIP_PLAN: row["NEQUIP_PLAN"], + NQUANT_PLAN: row["NQUANT_PLAN"] + }) + } + /> + + ) + }; + } + //Отформатированная колонка + return { + cellStyle, + data: row[columnDef.name] + }; + } + //Необрабатываемый раздел return { data: row[columnDef.name] }; @@ -139,26 +154,108 @@ export const headCellRender = ({ columnDef }) => { } }; +//Диалог включения станка в сменное задание +const CostJobsSpecsInclude = ({ includeEquipment, setIncludeEquipment, setCostJobsSpecs, setEquipConfiguration, includeEquipConfiguration }) => { + //Собственное состояние - Значение приоритета + const [state, setState] = useState(includeEquipment.NVALUE); + + //При закрытии включения станка + const handlePriorEditClose = () => { + setIncludeEquipment({ + NFCJOBSSP: null, + NEQCONFIG: null, + NVALUE: 0 + }); + }; + + //При включении станка в строку сменного задания + const costJobsSpecIncludeCostEquipment = () => { + //Делаем асинхронно, чтобы при ошибке ничего не обновлять + const includeAsync = async () => { + //Включаем станок в строку сменного задания + try { + await includeEquipConfiguration({ + NEQCONFIG: includeEquipment.NEQCONFIG, + NFCJOBSSP: includeEquipment.NFCJOBSSP, + NQUANT_PLAN: state + }); + //Необходимо обновить все данные + setCostJobsSpecs(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true })); + setEquipConfiguration(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true })); + handlePriorEditClose(); + } catch (e) { + throw new Error(e.message); + } + }; + //Включаем станок асинхронно + includeAsync(); + }; + + return ( + handlePriorEditClose()}> + + + { + var value = parseInt(event.target.value, 10); + if (value > includeEquipment.NVALUE) { + value = includeEquipment.NVALUE; + } + if (value < 0) { + value = 0; + } + setState(value); + }} + /> + + + + + + + + + + ); +}; + +//Контроль свойств - Диалог включения станка в сменное задание +CostJobsSpecsInclude.propTypes = { + includeEquipment: PropTypes.object.isRequired, + setIncludeEquipment: PropTypes.func.isRequired, + setCostJobsSpecs: PropTypes.func.isRequired, + setEquipConfiguration: PropTypes.func.isRequired, + includeEquipConfiguration: PropTypes.func.isRequired +}; + //----------- //Тело модуля //----------- -//Таблица информации об операциях сменного задания -const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => { - //Собственное состояние - таблица данных маршрутных листов - const [costRouteLists, setCostRouteLists, modifySelectList] = useCostRouteLists(task, processIdent); +//Таблица информации о строках сменного задания +const CostJobsSpecsDataGrid = ({ task, haveNote }) => { + //Собственное состояние - Включение в задание + const [includeEquipment, setIncludeEquipment] = useState({ NFCJOBSSP: null, NEQCONFIG: null, NVALUE: 0 }); - //Собственное состояние - таблица данных операций - const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = useCostJobsSpecs(task, costRouteLists.selectedRows, processIdent); + //Собственное состояние - таблица данных сменных заданий + const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = useCostJobsSpecs(task); //Собственное состояние - таблица рабочих центров - const [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment] = useCostEquipment(); - - //При изменении состояния сортировки маршрутных листов - const costRouteListOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); - - //При изменении количества отображаемых страниц маршрутных листов - const costRouteListPagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + const [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration] = useEquipConfiguration(task); //При изменении состояния сортировки операций const costJobsSpecOrderChanged = ({ orders }) => setCostJobsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); @@ -167,52 +264,28 @@ const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => { const costJobsSpecPagesCountChanged = () => setCostJobsSpecs(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); //При изменении состояния сортировки рабочих центров - const costEquipmentOrderChanged = ({ orders }) => setCostEquipment(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + const costEquipmentOrderChanged = ({ orders }) => setEquipConfiguration(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); //При изменении количества отображаемых страниц рабочих центров - const costEquipmentPagesCountChanged = () => setCostEquipment(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + const costEquipmentPagesCountChanged = () => setEquipConfiguration(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); - //При включении оборудования в операции - const costJobsSpecIncludeCostEquipment = () => { - //Делаем асинхронно, чтобы при ошибке ничего не обновлять - const includeAsync = async () => { - //Включаем оборудование в операции - try { - await includeCostEquipment({ - NFCEQUIPMENT: costEquipment.selectedRows[0], - NFCJOBS: task, - SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(";") - }); - //Необходимо обновить все данные - setCostJobsSpecs(pv => ({ ...pv, selectedRows: [], reload: true })); - setCostEquipment(pv => ({ ...pv, selectedRows: [], selectedLoaded: false, reload: true })); - } catch (e) { - throw new Error(e.message); - } - }; - //Включаем оборудование асинхронно - includeAsync(); - }; - - //При исключении оборудования из операции + //При исключении станка из строки сменного задания const costJobsSpecExcludeCostEquipment = () => { //Делаем асинхронно, чтобы при ошибке ничего не обновлять const excludeAsync = async () => { - //Включаем оборудование в операции + //Исключаем станок из строки сменного задания try { - await excludeCostEquipment({ - NFCEQUIPMENT: costEquipment.selectedRows[0], - NFCJOBS: task, - SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(";") + await excludeEquipConfiguration({ + NFCJOBSSP: costJobsSpecs.selectedRow.NRN }); - //Необходимо обновить данные о маршрутных листах и оборудовании - setCostJobsSpecs(pv => ({ ...pv, selectedRows: [], reload: true })); - setCostEquipment(pv => ({ ...pv, selectedRows: [], reload: true })); + //Необходимо обновить данные + setCostJobsSpecs(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true })); + setEquipConfiguration(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true })); } catch (e) { throw new Error(e.message); } }; - //Исключаем операции асинхронно + //Исключаем станок асинхронно excludeAsync(); }; @@ -222,14 +295,10 @@ const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => { const issueAsync = async () => { //Включаем оборудование в операции try { - await issueCostJobsSpecs({ - NFCJOBS: task, - SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(";") - }); - //Необходимо обновить данные о маршрутных листах и оборудовании - clearSelectlist(processIdent); - setCostRouteLists(pv => ({ ...pv, selectedRows: [], reload: true })); - setCostEquipment(pv => ({ ...pv, selectedRows: [], reload: true })); + await issueCostJobsSpecs({ NFCJOBS: task }); + //Необходимо обновить данные + setCostJobsSpecs(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true })); + setEquipConfiguration(pv => ({ ...pv, selectedRow: {}, pageNumber: 1, reload: true })); } catch (e) { throw new Error(e.message); } @@ -239,49 +308,33 @@ const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => { }; //При изменение состояния выбора - const handleSelectChange = (NRN, sUnit, selectedLoaded) => { - //Инициализируем строки таблицы - let rows = []; - //Индекс элемента в массиве - let indexRow = null; + const handleSelectChange = prms => { + //Выбранный элемент + let selectedRow = null; //Исходим от раздела - switch (sUnit) { - //Маршрутные листы - case sUnitCostRouteLists: - //Инициализируем маршрутными листами - rows = costRouteLists.rows; - //Определяем индекс элемента в массиве - indexRow = rows.findIndex(obj => obj.NRN == NRN); - //Изменяем значение выбора - rows[indexRow].NSELECT = !rows[indexRow].NSELECT; - //Добавляем/удаляем маршрутный лист из селектлиста - modifySelectList({ NFCROUTLST: NRN, NSELECT: rows[indexRow].NSELECT }); - //Актуализируем строки - setCostRouteLists(pv => ({ ...pv, rows: rows, selectedRows: rows.reduce(selectedReducer, []) })); - //Выходим - break; - //Операции + switch (prms.SUNIT) { + //Сменное задание case sUnitCostJobsSpecs: - //Инициализируем операциями - rows = costJobsSpecs.rows; - //Определяем индекс элемента в массиве - indexRow = rows.findIndex(obj => obj.NRN == NRN); - //Изменяем значение выбора - rows[indexRow].NSELECT = !rows[indexRow].NSELECT; + //Определяем это новое отмеченное сменное задание или сброс старого + selectedRow = costJobsSpecs.selectedRow.NRN ? (costJobsSpecs.selectedRow.NRN === prms.NRN ? null : prms.NRN) : prms.NRN; //Актуализируем строки - setCostJobsSpecs(pv => ({ ...pv, rows: rows, selectedRows: rows.reduce(selectedReducer, []) })); + setCostJobsSpecs(pv => ({ + ...pv, + selectedRow: selectedRow + ? { NRN: selectedRow, NEQCONFIG: prms.NEQCONFIG, NEQUIP_PLAN: prms.NEQUIP_PLAN, NQUANT_PLAN: prms.NQUANT_PLAN } + : { NRN: null, NEQCONFIG: null, NEQUIP_PLAN: null, NQUANT_PLAN: null } + })); //Выходим break; //Рабочие центры case sUnitCostEquipment: - //Инициализируем рабочими центрами - rows = costEquipment.rows; - //Определяем индекс элемента в массиве - indexRow = rows.findIndex(obj => obj.NRN == NRN); - //Изменяем значение выбора - rows[indexRow].NSELECT = !rows[indexRow].NSELECT; + //Определяем это новое отмеченное сменное задание или сброс старого + selectedRow = equipConfiguration.selectedRow.NRN ? (equipConfiguration.selectedRow.NRN === prms.NRN ? null : prms.NRN) : prms.NRN; //Актуализируем строки - setCostEquipment(pv => ({ ...pv, rows: rows, selectedRows: rows.reduce(selectedReducer, []), selectedLoaded: selectedLoaded })); + setEquipConfiguration(pv => ({ + ...pv, + selectedRow: selectedRow ? { NRN: selectedRow, BFULL_LOADED: prms.BFULL_LOADED } : { NRN: null, BFULL_LOADED: null } + })); //Выходим break; default: @@ -289,79 +342,74 @@ const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => { } }; + //При открытии окна включения в задание + const handleIncludeEquipmentOpen = () => { + //Актуализируем строки + setIncludeEquipment({ + NFCJOBSSP: costJobsSpecs.selectedRow.NRN, + NEQCONFIG: equipConfiguration.selectedRow.NRN, + NVALUE: costJobsSpecs.selectedRow.NQUANT_PLAN + }); + }; + //Генерация содержимого return (
- - Маршрутные листы - {costRouteLists.dataLoaded ? ( + + Сменное задание + {costJobsSpecs.dataLoaded ? ( <> - + + + + + dataCellRender({ ...prms, handleSelectChange, sUnit: sUnitCostRouteLists })} + morePages={costJobsSpecs.morePages} + reloading={costJobsSpecs.reload} + onOrderChanged={costJobsSpecOrderChanged} + onPagesCountChanged={costJobsSpecPagesCountChanged} + dataCellRender={prms => + dataCellRender({ + ...prms, + handleSelectChange, + sUnit: sUnitCostJobsSpecs, + selectedRow: costJobsSpecs.selectedRow.NRN, + selectedJobSpec: costJobsSpecs.selectedRow + }) + } headCellRender={prms => headCellRender({ ...prms })} + fixedHeader={true} /> - {costRouteLists.selectedRows.length > 0 ? ( - <> - Операции выбранных маршрутных листов - - dataCellRender({ - ...prms, - handleSelectChange, - sUnit: sUnitCostJobsSpecs, - selectedEquip: costEquipment.selectedRows - }) - } - headCellRender={prms => headCellRender({ ...prms })} - /> - - ) : null} ) : null} - + Рабочие центры - {costEquipment.dataLoaded ? ( + {equipConfiguration.dataLoaded ? ( <> @@ -369,10 +417,7 @@ const CostJobsSpecsDataGrid = ({ task, processIdent, clearSelectlist }) => {
); }; -//Контроль свойств - Таблица информации об операциях сменного задания +//Контроль свойств - Таблица информации о строках сменного задания CostJobsSpecsDataGrid.propTypes = { task: PropTypes.number.isRequired, - processIdent: PropTypes.number, - clearSelectlist: PropTypes.func + haveNote: PropTypes.bool.isRequired }; //---------------- diff --git a/app/panels/mech_rec_cost_jobs_manage/hooks.js b/app/panels/mech_rec_cost_jobs_manage/hooks.js index 76b4637..5f49f01 100644 --- a/app/panels/mech_rec_cost_jobs_manage/hooks.js +++ b/app/panels/mech_rec_cost_jobs_manage/hooks.js @@ -1,13 +1,21 @@ -/* - Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания - Кастомные хуки -*/ - //--------------------- //Подключение библиотек //--------------------- -import React from "react"; //Классы React +import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Размер страницы данных +const DATA_GRID_PAGE_SIZE = 50; + +//--------------------------------------------- +//Вспомогательные функции форматирования данных +//--------------------------------------------- //----------- //Тело модуля @@ -21,3 +29,242 @@ export const useFilteredFcjobs = (jobs, filter) => { return filteredJobs; }; + +//Хук для основной таблицы +const useCostJobs = () => { + //Собственное состояние - таблица данных + const [state, setState] = useState({ + init: false, + showJobList: false, + jobList: [], + jobListLoaded: false, + selectedJob: {}, + dataLoaded: false + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //При подключении компонента к странице + useEffect(() => { + const initPlans = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBS_INIT", + args: {}, + respArg: "COUT", + isArray: name => name === "XFCJOBS", + attributeValueProcessor: (name, val) => (["NHAVE_NOTE"].includes(name) ? val == 1 : val) + }); + setState(pv => ({ + ...pv, + init: true, + jobList: [...(data.XFCJOBS || [])], + jobListLoaded: true + })); + }; + if (!state.init) { + initPlans(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return [state, setState]; +}; + +//Хук для таблицы операций +const useCostJobsSpecs = task => { + //Собственное состояние - таблица данных + const [costJobsSpecs, setCostJobsSpecs] = useState({ + task: null, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRow: {}, + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Выдача задания + const issueCostJobsSpecs = useCallback( + async prms => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_ISSUE", + args: { NFCJOBS: prms.NFCJOBS, SFCJOBSSP_LIST: prms.SFCJOBSSP_LIST } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + //Если изменилось сменное задание - обновляем состояние + if (costJobsSpecs.dataLoaded && costJobsSpecs.task !== task) { + setCostJobsSpecs(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRow: {}, + reload: true, + pageNumber: 1, + morePages: true + })); + } + //Если необходимо перезагрузить + if (costJobsSpecs.reload) { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET", + args: { + NFCJOBS: task, + NPAGE_NUMBER: costJobsSpecs.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + CORDERS: { VALUE: object2Base64XML(costJobsSpecs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NINCLUDE_DEF: costJobsSpecs.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) + }); + setCostJobsSpecs(pv => ({ + ...pv, + task: task, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + }; + loadData(); + } + }, [ + SERV_DATA_TYPE_CLOB, + costJobsSpecs.dataLoaded, + costJobsSpecs.orders, + costJobsSpecs.pageNumber, + costJobsSpecs.reload, + costJobsSpecs.selectedRow, + costJobsSpecs.task, + executeStored, + task + ]); + + return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs]; +}; + +//Хук для таблицы рабочих центров +const useEquipConfiguration = task => { + //Собственное состояние - таблица данных + const [equipConfiguration, setEquipConfiguration] = useState({ + task: null, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRow: {}, + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //Включение станка в строку сменного задания + const includeEquipConfiguration = useCallback( + async prms => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_INC_EQCONFIG", + args: { NEQCONFIG: prms.NEQCONFIG, NFCJOBSSP: prms.NFCJOBSSP, NQUANT_PLAN: prms.NQUANT_PLAN } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //Исключение станка из строки сменного задания + const excludeEquipConfiguration = useCallback( + async prms => { + try { + await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_EQCONFIG", + args: { NFCJOBSSP: prms.NFCJOBSSP } + }); + } catch (e) { + throw new Error(e.message); + } + }, + [executeStored] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + //Если изменилось сменное задание - обновляем состояние + if (equipConfiguration.dataLoaded && equipConfiguration.task !== task) { + setEquipConfiguration(pv => ({ + ...pv, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + selectedRow: {}, + reload: true, + pageNumber: 1, + morePages: true + })); + } + if (equipConfiguration.reload) { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.EQCONFIG_DG_GET", + args: { + NFCJOBS: task, + CORDERS: { VALUE: object2Base64XML(equipConfiguration.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: equipConfiguration.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE, + NINCLUDE_DEF: equipConfiguration.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (["NSELECT"].includes(name) ? val === 1 : val) + }); + setEquipConfiguration(pv => ({ + ...pv, + task: task, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE + })); + }; + loadData(); + } + }, [ + SERV_DATA_TYPE_CLOB, + equipConfiguration.dataLoaded, + equipConfiguration.orders, + equipConfiguration.pageNumber, + equipConfiguration.reload, + equipConfiguration.selectedRow, + equipConfiguration.task, + task, + executeStored + ]); + + return [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration]; +}; + +export { useCostJobs, useCostJobsSpecs, useEquipConfiguration }; 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 d2d2e84..d54167e 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 @@ -7,13 +7,12 @@ //Подключение библиотек //--------------------- -import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React +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 { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений -import { useFilteredFcjobs } from "./hooks"; //Вспомогательные хуки import { CostJobsSpecsDataGrid } from "./fcjobssp"; //Собственные хуки таблиц +import { useCostJobs, useFilteredFcjobs } from "./hooks"; //Вспомогательные хуки //--------- //Константы @@ -30,7 +29,7 @@ const STYLES = { flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } }, - CONTAINER: { margin: "5px 0px", textAlign: "center" } + CONTAINER: { textAlign: "center" } }; //------------------------------------ @@ -80,15 +79,7 @@ JobList.propTypes = { //Корневая панель выдачи сменного задания const MechRecCostJobs = () => { //Собственное состояние - таблица данных - const [state, setState] = useState({ - init: false, - showJobList: false, - jobList: [], - jobListLoaded: false, - selectedJob: {}, - processIdent: null, - dataLoaded: false - }); + const [state, setState] = useCostJobs(); //Состояние для фильтра каталогов const [filter, setFilter] = useState({ jobName: "" }); @@ -96,57 +87,11 @@ const MechRecCostJobs = () => { //Массив отфильтрованных каталогов const filteredJobs = useFilteredFcjobs(state.jobList, filter); - //Подключение к контексту взаимодействия с сервером - const { executeStored } = useContext(BackEndСtx); - //Подключение к контексту сообщений const { InlineMsgInfo } = useContext(MessagingСtx); - //Инициализация каталогов планов - const initPlans = useCallback(async () => { - if (!state.init) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBS_INIT", - args: {}, - respArg: "COUT", - fullResponse: true, - isArray: name => name === "XFCJOBS" - }); - setState(pv => ({ - ...pv, - init: true, - jobList: [...(data.XPAYLOAD?.XFCJOBS || [])], - jobListLoaded: true, - processIdent: data.XPAYLOAD.XINFO.NPROCESS_IDENT - })); - } - }, [state.init, executeStored]); - - //При подключении компонента к странице - useEffect(() => { - initPlans(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - //Очистка селектлиста по идентификатору процесса - const clearSelectlist = useCallback( - async NIDENT => { - try { - await executeStored({ - stored: "P_SELECTLIST_CLEAR", - args: { NIDENT: NIDENT } - }); - } catch (e) { - throw new Error(e.message); - } - }, - [executeStored] - ); - //Выбор плана const selectJob = job => { - //Очищаем селектлист - clearSelectlist(state.processIdent); //Обновляем состояние setState(pv => ({ ...pv, @@ -158,8 +103,6 @@ const MechRecCostJobs = () => { //Сброс выбора плана const unselectJob = () => { - //Очищаем селектлист - clearSelectlist(state.processIdent); //Обновляем состояние setState(pv => ({ ...pv, @@ -187,11 +130,12 @@ const MechRecCostJobs = () => {
{state.selectedJob.NRN ? ( <> - {`Сменное задание "${state.selectedJob.SSUBDIV}" на ${state.selectedJob.SPERIOD}`} - + {`Сменное задание №${state.selectedJob.SDOC_NUMB} на ${state.selectedJob.SPERIOD}`} + {`${state.selectedJob.SSUBDIV}`} + ) : !state.selectedJob.NRN ? ( - + ) : null}
diff --git a/app/panels/mech_rec_dept_cost_jobs/components/filter.js b/app/panels/mech_rec_dept_cost_jobs/components/filter.js new file mode 100644 index 0000000..4ae8604 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_jobs/components/filter.js @@ -0,0 +1,137 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Загрузка цеха + Компонент панели: Фильтр +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { + Typography, + Box, + Dialog, + DialogContent, + DialogActions, + Button, + IconButton, + Icon, + FormControl, + InputLabel, + OutlinedInput, + InputAdornment +} from "@mui/material"; //Интерфейсные элементы +import { InsDepartmentDataGrid } from "./ins_department_dg"; //Таблица подразделений цехов + +//--------- +//Константы +//--------- + +//Текущая дата +const currentDate = new Date(); +const currentMonth = currentDate.getUTCMonth() + 1; +const currentYear = currentDate.getUTCFullYear(); + +//Стили +const STYLES = { + FILTER_BLOCK: { maxWidth: "200px" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Диалог выбора подразделения +const DepartmentsDataGrid = ({ filter, setFilter, handleSelectDeparture }) => { + return ( + setFilter(pv => ({ ...pv, openedDepartment: false }))}> + + + + + + + + ); +}; + +//Контроль свойств - Диалог выбора подразделения +DepartmentsDataGrid.propTypes = { + filter: PropTypes.object.isRequired, + setFilter: PropTypes.func.isRequired, + handleSelectDeparture: PropTypes.func.isRequired +}; + +//----------- +//Тело модуля +//----------- + +//Компонент фильтра +const FilterComponent = ({ filter, setFilter, handleMonthChange, handleSelectDeparture }) => { + return ( + + + + Цех + + + setFilter(pv => ({ ...pv, openedDepartment: true }))} + edge="end" + > + list + + + } + aria-describedby="department-outlined-helper-text" + label="Цех" + /> + + + + handleMonthChange(-1)}> + navigate_before + + + + {filter.date.fullDate} + + + handleMonthChange(1)} + disabled={filter.date.year === currentYear && filter.date.month === currentMonth} + > + navigate_next + + + + {`Рабочих дней: ${filter.workDays}`} + {`Рабочих часов: ${filter.totalWorkHours}`} + {filter.openedDepartment ? ( + + ) : null} + + ); +}; + +//Контроль свойств - Компонент фильтра +FilterComponent.propTypes = { + filter: PropTypes.object.isRequired, + setFilter: PropTypes.func.isRequired, + handleMonthChange: PropTypes.func.isRequired, + handleSelectDeparture: PropTypes.func.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { FilterComponent }; diff --git a/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js b/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js new file mode 100644 index 0000000..61a5791 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js @@ -0,0 +1,85 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Загрузка цеха + Компонент панели: Таблица строк подразделений цехов +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import React from "react"; //Классы React +import PropTypes from "prop-types"; //Контроль свойств компонента +import { Typography } from "@mui/material"; //Интерфейсные элементы +import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../../components/p8p_data_grid"; //Таблица данных +import { P8P_DATA_GRID_CONFIG_PROPS } from "../../../config_wrapper"; //Подключение компонентов к настройкам приложения +import { useInsDepartment } from "../hooks"; //Состояние таблицы подразделений цехов + +//--------- +//Константы +//--------- + +//Стили +const STYLES = { + CONTAINER: { margin: "5px 0px", textAlign: "center" } +}; + +//------------------------------------ +//Вспомогательные функции и компоненты +//------------------------------------ + +//Генерация ссылок на строках +const dataCellRender = ({ row, columnDef, handleSelectDeparture }) => { + return { + cellStyle: { cursor: "pointer", backgroundColor: "#ADD8E6" }, + cellProps: { + onClick: () => { + handleSelectDeparture({ NRN: row["NRN"], SCODE: row["SCODE"].toString(), SNAME: row["SNAME"] }); + } + }, + data: row[columnDef.name] + }; +}; + +//----------- +//Тело модуля +//----------- + +//Таблица строк подразделений цехов +const InsDepartmentDataGrid = ({ fullDate, handleSelectDeparture }) => { + //Собственное состояние + let [insDepartments, setInsDepartments] = useInsDepartment(fullDate); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setInsDepartments(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //Генерация содержимого + return ( +
+ Подразделения цехов + {insDepartments.dataLoaded ? ( + dataCellRender({ ...prms, handleSelectDeparture })} + /> + ) : null} +
+ ); +}; + +//Контроль свойств - Таблица строк подразделений цехов +InsDepartmentDataGrid.propTypes = { + fullDate: PropTypes.string.isRequired, + handleSelectDeparture: PropTypes.func.isRequired +}; + +//---------------- +//Интерфейс модуля +//---------------- + +export { InsDepartmentDataGrid }; diff --git a/app/panels/mech_rec_dept_cost_jobs/hooks.js b/app/panels/mech_rec_dept_cost_jobs/hooks.js new file mode 100644 index 0000000..907ab64 --- /dev/null +++ b/app/panels/mech_rec_dept_cost_jobs/hooks.js @@ -0,0 +1,198 @@ +/* + Парус 8 - Панели мониторинга - ПУП - Загрузка цеха + Кастомные хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML, formatDateRF } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Размер страницы данных +const DATA_GRID_PAGE_SIZE_SMALL = 5; +const DATA_GRID_PAGE_SIZE_LARGE = 12; + +//----------- +//Тело модуля +//----------- + +//Хук для основной таблицы панели +const useMechRecDeptCostJobs = (subdiv, fullDate, workHours) => { + //Собственное состояние - таблица данных + const [costJobs, setCostJobs] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + fixedHeader: false, + fixedColumns: 0, + date: null + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //При необходимости обновить данные таблицы + useEffect(() => { + //Если указано подразделение и необходимо обновить, либо изменилась дата + if (subdiv && (costJobs.reload || costJobs.date !== fullDate)) { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET", + args: { + NSUBDIV: subdiv, + SMONTH_YEAR: fullDate, + NWORKHOURS: workHours, + CORDERS: { VALUE: object2Base64XML(costJobs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costJobs.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE, + NINCLUDE_DEF: 1 + }, + respArg: "COUT" + }); + setCostJobs(pv => ({ + ...pv, + fixedHeader: data.XDATA_GRID.fixedHeader, + fixedColumns: data.XDATA_GRID.fixedColumns, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE, + date: fullDate + })); + }; + loadData(); + } + }, [costJobs.reload, subdiv, fullDate, costJobs.date, costJobs.orders, costJobs.pageNumber, executeStored, workHours, SERV_DATA_TYPE_CLOB]); + + return [costJobs, setCostJobs]; +}; + +//Хук таблицы подразделений цехов +const useInsDepartment = fullDate => { + //Собственное состояние + let [insDepartments, setInsDepartments] = useState({ + dataLoaded: false, + columnsDef: [], + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //При необходимости обновить данные таблицы + useEffect(() => { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.INS_DEPARTMENT_DG_GET", + args: { + SMONTH_YEAR: fullDate, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE_SMALL, + NINCLUDE_DEF: insDepartments.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (["DBGNDATE", "DENDDATE"].includes(name) ? formatDateRF(val) : val) + }); + setInsDepartments(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_SMALL + })); + }; + if (insDepartments.reload) { + loadData(); + } + }, [executeStored, fullDate, insDepartments.dataLoaded, insDepartments.reload]); + + return [insDepartments, setInsDepartments]; +}; + +//Хук для диалога фильтра +const useFilter = (currentMonth, currentYear) => { + //Собственное состояние - фильтр + const [filter, setFilter] = useState({ + init: true, + openedDepartment: false, + date: { + month: currentMonth, + year: currentYear, + fullDate: currentMonth.toString().padStart(2, "0") + "." + currentYear + }, + department: { NRN: null, SCODE: "", SNAME: "" }, + workDays: 0, + workHours: 0, + totalWorkHours: 0 + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //Считываем количества рабочих дней + const getWorkDays = useCallback( + async ({ newDate, init }) => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.ENPERIOD_WORKDAYS_GET", + args: { SMONTH_YEAR: newDate.fullDate } + }); + if (init) { + setFilter(pv => ({ ...pv, workDays: data.NWORKDAYS, init: false })); + } else { + setFilter(pv => ({ + ...pv, + date: { ...newDate }, + department: filter.department, + workDays: data.NWORKDAYS, + totalWorkHours: data.NWORKDAYS * filter.workHours + })); + } + }, + [executeStored, filter] + ); + + //Считываем количество рабочих часов + const getWorkHours = useCallback( + async department => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.INS_DEPARTMENT_WORKHOURS_GET", + args: { NSUBDIV: department.NRN } + }); + setFilter(pv => ({ + ...pv, + openedDepartment: false, + department: { ...department }, + workHours: data.NWORKHOURS, + totalWorkHours: filter.workDays * data.NWORKHOURS + })); + }, + [executeStored, filter.workDays] + ); + + //При необходимости обновить данные таблицы + useEffect(() => { + if (filter.init) { + getWorkDays({ newDate: { month: filter.date.month, year: filter.date.year, fullDate: filter.date.fullDate }, init: filter.init }); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [filter.init]); + + return [filter, setFilter, getWorkDays, getWorkHours]; +}; + +export { useMechRecDeptCostJobs, useInsDepartment, useFilter }; diff --git a/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js b/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js index c33c5e1..719df98 100644 --- a/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js +++ b/app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js @@ -7,34 +7,62 @@ //Подключение библиотек //--------------------- -import React, { useState, useContext, useCallback, useEffect } from "react"; //Классы React -import { Typography, Box, Grid } from "@mui/material"; //Интерфейсные элементы -import { object2Base64XML } from "../../core/utils"; //Вспомогательные процедуры и функции +import React from "react"; //Классы React +import { Typography, Box } from "@mui/material"; //Интерфейсные элементы 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 { useMechRecDeptCostJobs, useFilter } from "./hooks"; //Кастомные состояния +import { FilterComponent } from "./components/filter"; //Компонент фильтра //--------- //Константы //--------- -//Размер страницы данных -const DATA_GRID_PAGE_SIZE = 5; +//Текущая дата +const currentDate = new Date(); +const currentMonth = currentDate.getUTCMonth() + 1; +const currentYear = currentDate.getUTCFullYear(); + +//Кастомные цвета +const colors = { + lightred: "#ef8989", + lightyellow: "#f5f5b0", + blue: "#0097ff" +}; //Стили const STYLES = { - CONTAINER: { textAlign: "center", paddingTop: "20px" }, + CONTAINER: { textAlign: "center", paddingTop: "10px" }, TITLE: { paddingBottom: "15px" }, - DATA_GRID_CONTAINER: { minWidth: "95vw", maxWidth: "95vw", minHeight: "80vh", maxHeight: "80vh" }, - DATA_GRID_CELL: (row, columnDef) => ({ - padding: "8px", - textOverflow: "ellipsis", - overflow: "hidden", - whiteSpace: "pre", - ...(columnDef.name.match(/N.*_VALUE/) && row[columnDef.name] - ? { backgroundColor: row[`${columnDef.name.substring(0, 12)}_TYPE`] === 0 ? "lightgrey" : "lightgreen" } - : {}) - }) + DATA_GRID_CONTAINER: { + minWidth: "700px", + maxWidth: "100vw", + minHeight: "calc(100vh - 250px)", + maxHeight: "calc(100vh - 250px)" + }, + DATA_GRID_CELL: (row, columnDef) => { + //Определяем тип дня + let dayType = columnDef.name.match(/N.*_VALUE/) ? row[`${columnDef.name.substring(0, 12)}_TYPE`] : null; + //Определяем процент загрузки + let procentLoad = columnDef.name === "SNAME" ? row["NPROCENT_LOAD"] : null; + return { + padding: "8px", + textOverflow: "ellipsis", + overflow: "hidden", + whiteSpace: "pre", + ...(dayType + ? { + backgroundColor: [1, 3].includes(dayType) ? "lightgrey" : dayType === 4 ? "lightgreen" : null, + color: [2, 3].includes(dayType) ? colors.blue : null + } + : procentLoad || procentLoad === 0 + ? { + backgroundColor: + procentLoad >= 85 ? "lightgreen" : procentLoad >= 50 ? colors.lightyellow : procentLoad > 0 ? colors.lightred : "lightgrey" + } + : {}) + }; + } }; //------------------------------------ @@ -54,54 +82,11 @@ const dataCellRender = ({ row, columnDef }) => ({ //Корневая панель загрузки цеха const MechRecDeptCostJobs = () => { + //Собственное состояние - фильтр + const [filter, setFilter, getWorkDays, getWorkHours] = useFilter(currentMonth, currentYear); + //Собственное состояние - таблица данных - const [costJobs, setCostJobs] = useState({ - subdiv: null, - dataLoaded: false, - columnsDef: [], - filters: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - fixedHeader: false, - fixedColumns: 0 - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (costJobs.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET", - args: { - CFILTERS: { VALUE: object2Base64XML(costJobs.filters, { arrayNodeName: "filters" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - CORDERS: { VALUE: object2Base64XML(costJobs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costJobs.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costJobs.dataLoaded ? 0 : 1 - }, - respArg: "COUT" - }); - setCostJobs(pv => ({ - ...pv, - fixedHeader: data.XFCJOBS.XDATA.XDATA_GRID.fixedHeader, - fixedColumns: data.XFCJOBS.XDATA.XDATA_GRID.fixedColumns, - subdiv: data.XINFO.SSUBDIV, - columnsDef: data.XFCJOBS.XDATA.XCOLUMNS_DEF ? [...data.XFCJOBS.XDATA.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XFCJOBS.XDATA.XROWS || [])] : [...pv.rows, ...(data.XFCJOBS.XDATA.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XFCJOBS.XDATA.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - }, [costJobs.reload, costJobs.filters, costJobs.orders, costJobs.dataLoaded, costJobs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]); - - //При изменении состояния фильтра - const handleFilterChanged = ({ filters }) => setCostJobs(pv => ({ ...pv, filters: [...filters], pageNumber: 1, reload: true })); + const [costJobs, setCostJobs] = useMechRecDeptCostJobs(filter.department.NRN, filter.date.fullDate, filter.totalWorkHours); //При изменении состояния сортировки const handleOrderChanged = ({ orders }) => setCostJobs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); @@ -109,41 +94,69 @@ const MechRecDeptCostJobs = () => { //При изменении количества отображаемых страниц const handlePagesCountChanged = () => setCostJobs(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [costJobs.reload, loadData]); + //При изменении месяца + const handleMonthChange = side => { + //Исходим от стороны, в которую идем + let newDate = + side === 1 + ? filter.date.month === 12 + ? { month: 1, year: filter.date.year + 1 } + : { month: filter.date.month + 1, year: filter.date.year } + : filter.date.month === 1 + ? { month: 12, year: filter.date.year - 1 } + : { month: filter.date.month - 1, year: filter.date.year }; + //Формируем полное представление даты + newDate.fullDate = newDate.month.toString().padStart(2, "0") + "." + newDate.year; + //Считываем количество рабочих дней и обновляем состояние + getWorkDays({ newDate, init: filter.init }); + }; + + //При выборе подразделения + const handleSelectDeparture = department => { + //Если подразделение изменилось + if (department.NRN !== filter.department.NRN) { + //Получаем количество рабочих часов + getWorkHours(department); + //Обновляем таблицу загрузки цеха + setCostJobs(pv => ({ ...pv, pageNumber: 1, reload: true })); + } else { + setFilter(pv => ({ ...pv, openedDepartment: false })); + } + }; //Генерация содержимого return ( -
- - {costJobs.dataLoaded ? `Загрузка станков "${costJobs.subdiv}"` : null} - - - - - {costJobs.dataLoaded ? ( - dataCellRender({ ...prms })} - /> - ) : null} - - - -
+ + +
+ + {costJobs.dataLoaded ? `Загрузка станков "${filter.department.SNAME}"` : null} + + + {costJobs.dataLoaded ? ( + dataCellRender({ ...prms })} + /> + ) : null} + +
+
); }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js index b78e113..f132a58 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js @@ -7,14 +7,14 @@ //Подключение библиотек //--------------------- -import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import React, { useState, useContext } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField, IconButton, Icon } from "@mui/material"; //Интерфейсные элементы 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 { object2Base64XML } from "../../core/utils"; //Вспомогательные функции import { CostRouteListsSpecsDataGrid } from "./fcroutlstsp"; //Состояние таблицы заказов маршрутных листов +import { useCostRouteLists } from "./hooks.js"; //Хук состояния таблицы маршрутных листов //--------- //Константы @@ -24,12 +24,11 @@ import { CostRouteListsSpecsDataGrid } from "./fcroutlstsp"; //Состояни const STYLES = { CONTAINER: { textAlign: "center" }, TABLE: { paddingTop: "15px" }, - TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" }, DIALOG_BUTTONS: { marginTop: "10px", width: "240px" } }; //--------------------------------------------- -//Вспомогательные функции форматирования данных +//Вспомогательные функции и компоненты //--------------------------------------------- //Генерация представления расширения строки @@ -43,113 +42,41 @@ export const rowExpandRender = ({ row }) => { //Форматирование значений колонок const dataCellRender = ({ row, columnDef, handlePriorEditOpen }) => { - //!!! Пока отключено - не удалять - switch (columnDef.name) { - case "NPRIOR_PARTY": - return { - data: ( - <> - {row["NPRIOR_PARTY"]} - handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}> - edit - - - ) - }; + //Если колонка "Приоритет партии" + if (columnDef.name === "NPRIOR_PARTY") { + return { + data: ( + <> + {row["NPRIOR_PARTY"]} + handlePriorEditOpen(row["NRN"])}> + edit + + + ) + }; } return { data: row[columnDef] }; }; -//----------- -//Тело модуля -//----------- +//Диалог с изменением приоритета маршрутного листа +const CostRouteListPriorChange = ({ costRouteLists, setCostRouteLists, executeStored }) => { + //Считывание изначального значения приоритета МЛ + const initPrior = costRouteLists.rows[costRouteLists.rows.findIndex(obj => obj.NRN == costRouteLists.editPriorNRN)].NPRIOR_PARTY; -//Таблица маршрутных листов -const CostRouteListsDataGrid = ({ task }) => { - //Собственное состояние - таблица данных - const [costRouteLists, setCostRouteLists] = useState({ - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - editPriorNRN: null, - editPriorValue: null - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Размер страницы данных - const DATA_GRID_PAGE_SIZE = 5; - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (costRouteLists.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET", - args: { - NFCPRODPLANSP: task, - CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costRouteLists.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 - }, - respArg: "COUT" - }); - setCostRouteLists(pv => ({ - ...pv, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - costRouteLists.reload, - costRouteLists.filters, - costRouteLists.orders, - costRouteLists.dataLoaded, - costRouteLists.pageNumber, - executeStored, - SERV_DATA_TYPE_CLOB - ]); - - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [costRouteLists.reload, loadData]); - - //При изменении состояния сортировки - const handleOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); - - //При изменении количества отображаемых страниц - const handlePagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); - - //При открытии изменения приоритета партии - const handlePriorEditOpen = (NRN, nPriorValue) => { - setCostRouteLists(pv => ({ ...pv, editPriorNRN: NRN, editPriorValue: nPriorValue })); - }; + //Собственное состояние - Значение приоритета + const [state, setState] = useState(initPrior); //При закрытии изменения приоритета партии const handlePriorEditClose = () => { - setCostRouteLists(pv => ({ ...pv, editPriorNRN: null, editPriorValue: null })); + setCostRouteLists(pv => ({ ...pv, editPriorNRN: null })); }; - //При изменении значения приоритета партии - const handlePriorFormChanged = e => { - setCostRouteLists(pv => ({ ...pv, editPriorValue: e.target.value })); - }; - - //Изменение приоритета - const priorChange = useCallback( - async (NRN, PriorValue, rows) => { + //При нажатии на изменение приоритета партии + const handlePriorChange = () => { + //Асинхронное изменение + const asyncChange = async (NRN, PriorValue, rows) => { try { await executeStored({ stored: "PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE", @@ -164,14 +91,68 @@ const CostRouteListsDataGrid = ({ task }) => { } catch (e) { throw new Error(e.message); } - }, - [executeStored] - ); - - //При нажатии на изменение приоритета партии - const handlePriorChange = () => { + }; //Изменяем значение - priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows); + asyncChange(costRouteLists.editPriorNRN, state, costRouteLists.rows); + }; + + return ( + handlePriorEditClose()}> + + + { + setState(event.target.value); + }} + /> + + + + + + + + + + ); +}; + +//Контроль свойств - Диалог с изменением приоритета маршрутного листа +CostRouteListPriorChange.propTypes = { + costRouteLists: PropTypes.object.isRequired, + setCostRouteLists: PropTypes.func.isRequired, + executeStored: PropTypes.func.isRequired +}; + +//----------- +//Тело модуля +//----------- + +//Таблица маршрутных листов +const CostRouteListsDataGrid = ({ task }) => { + //Собственное состояние - таблица данных + const [costRouteLists, setCostRouteLists] = useCostRouteLists(task); + + //Подключение к контексту взаимодействия с сервером + const { executeStored } = useContext(BackEndСtx); + + //При изменении состояния сортировки + const handleOrderChanged = ({ orders }) => setCostRouteLists(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); + + //При изменении количества отображаемых страниц + const handlePagesCountChanged = () => setCostRouteLists(pv => ({ ...pv, pageNumber: pv.pageNumber + 1, reload: true })); + + //При открытии изменения приоритета партии + const handlePriorEditOpen = NRN => { + setCostRouteLists(pv => ({ ...pv, editPriorNRN: NRN })); }; //Генерация содержимого @@ -198,29 +179,7 @@ const CostRouteListsDataGrid = ({ task }) => { ) : null} {costRouteLists.editPriorNRN ? ( - handlePriorEditClose(null)}> - - - - - - - - - - - - + ) : null} ); diff --git a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js index 0161b88..c0deced 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js @@ -7,13 +7,12 @@ //Подключение библиотек //--------------------- -import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Typography } from "@mui/material"; //Интерфейсные элементы 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 { object2Base64XML } from "../../core/utils"; //Вспомогательные функции +import { useCostRouteListsSpecs } from "./hooks.js"; //Хук состояния таблицы строк маршрутного листа //--------- //Константы @@ -31,60 +30,7 @@ const STYLES = { //Таблица строк маршрутного листа const CostRouteListsSpecsDataGrid = ({ mainRowRN }) => { //Собственное состояние - таблица данных - const [costRouteListsSpecs, setCostRouteListsSpecs] = useState({ - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true - }); - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Размер страницы данных - const DATA_GRID_PAGE_SIZE = 10; - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (costRouteListsSpecs.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCROUTLSTSP_DEPT_DG_GET", - args: { - NFCROUTLST: mainRowRN, - CORDERS: { VALUE: object2Base64XML(costRouteListsSpecs.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: costRouteListsSpecs.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: costRouteListsSpecs.dataLoaded ? 0 : 1 - }, - respArg: "COUT" - }); - setCostRouteListsSpecs(pv => ({ - ...pv, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [ - costRouteListsSpecs.reload, - costRouteListsSpecs.filters, - costRouteListsSpecs.orders, - costRouteListsSpecs.dataLoaded, - costRouteListsSpecs.pageNumber, - executeStored, - SERV_DATA_TYPE_CLOB - ]); - - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [costRouteListsSpecs.reload, loadData]); + const [costRouteListsSpecs, setCostRouteListsSpecs] = useCostRouteListsSpecs(mainRowRN); //При изменении состояния сортировки const handleOrderChanged = ({ orders }) => setCostRouteListsSpecs(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); diff --git a/app/panels/mech_rec_dept_cost_prod_plans/hooks.js b/app/panels/mech_rec_dept_cost_prod_plans/hooks.js index 0cef903..c82d41a 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/hooks.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/hooks.js @@ -7,7 +7,17 @@ //Подключение библиотек //--------------------- -import React from "react"; //Классы React +import React, { useState, useEffect, useContext } from "react"; //Классы React +import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером +import { object2Base64XML, formatDateRF } from "../../core/utils"; //Вспомогательные функции + +//--------- +//Константы +//--------- + +//Размер страницы данных +const DATA_GRID_PAGE_SIZE_SMALL = 5; +const DATA_GRID_PAGE_SIZE_LARGE = 10; //----------- //Тело модуля @@ -21,3 +31,246 @@ export const useFilteredPlans = (plans, filter) => { return filteredPlans; }; + +//Хук для основной таблицы +const useDeptCostProdPlans = () => { + //Собственное состояние - таблица данных + const [state, setState] = useState({ + init: false, + showPlanList: false, + showIncomeFromDeps: null, + showFcroutelst: null, + planList: [], + planListLoaded: false, + selectedPlan: {}, + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + fixedHeader: false, + fixedColumns: 0 + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //При необходимости обновить данные таблицы + useEffect(() => { + if (state.selectedPlan.NRN) { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET", + args: { + NFCPRODPLAN: state.selectedPlan.NRN, + CORDERS: { VALUE: object2Base64XML(state.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: state.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE, + NINCLUDE_DEF: state.dataLoaded ? 0 : 1 + }, + respArg: "COUT", + attributeValueProcessor: (name, val) => (name === "caption" ? undefined : val) + }); + setState(pv => ({ + ...pv, + fixedHeader: data.XDATA_GRID.fixedHeader, + fixedColumns: data.XDATA_GRID.fixedColumns, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE + })); + }; + if (state.reload) { + loadData(); + } + } + }, [state.selectedPlan, state.reload, state.orders, state.pageNumber, state.dataLoaded, executeStored, SERV_DATA_TYPE_CLOB]); + + //При подключении компонента к странице + useEffect(() => { + const initPlans = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT", + args: {}, + respArg: "COUT", + isArray: name => name === "XFCPRODPLANS", + attributeValueProcessor: (name, val) => (name === "SPERIOD" ? undefined : val) + }); + setState(pv => ({ ...pv, init: true, planList: [...(data?.XFCPRODPLANS || [])], planListLoaded: true })); + }; + if (!state.init) { + initPlans(); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + return [state, setState]; +}; + +//Хук для таблицы маршрутных листов +const useCostRouteLists = task => { + //Собственное состояние - таблица данных + const [costRouteLists, setCostRouteLists] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true, + editPriorNRN: null + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //При необходимости обновить данные таблицы + useEffect(() => { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCROUTLST_DEPT_DG_GET", + args: { + NFCPRODPLANSP: task, + CORDERS: { VALUE: object2Base64XML(costRouteLists.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: costRouteLists.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE_SMALL, + NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1 + }, + respArg: "COUT" + }); + setCostRouteLists(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_SMALL + })); + }; + if (costRouteLists.reload && task) { + loadData(); + } + }, [ + SERV_DATA_TYPE_CLOB, + costRouteLists.dataLoaded, + costRouteLists.orders, + costRouteLists.pageNumber, + costRouteLists.reload, + executeStored, + task + ]); + + return [costRouteLists, setCostRouteLists]; +}; + +//Хук для таблицы строк маршрутного листа +const useCostRouteListsSpecs = mainRowRN => { + //Собственное состояние - таблица данных + const [costRouteListsSpecs, setCostRouteListsSpecs] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //При необходимости обновить данные таблицы + useEffect(() => { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.FCROUTLSTSP_DEPT_DG_GET", + args: { + NFCROUTLST: mainRowRN, + CORDERS: { + VALUE: object2Base64XML(costRouteListsSpecs.orders, { arrayNodeName: "orders" }), + SDATA_TYPE: SERV_DATA_TYPE_CLOB + }, + NPAGE_NUMBER: costRouteListsSpecs.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE, + NINCLUDE_DEF: costRouteListsSpecs.dataLoaded ? 0 : 1 + }, + respArg: "COUT" + }); + setCostRouteListsSpecs(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE + })); + }; + if (costRouteListsSpecs.reload) { + loadData(); + } + }, [ + SERV_DATA_TYPE_CLOB, + costRouteListsSpecs.dataLoaded, + costRouteListsSpecs.orders, + costRouteListsSpecs.pageNumber, + costRouteListsSpecs.reload, + executeStored, + mainRowRN + ]); + + return [costRouteListsSpecs, setCostRouteListsSpecs]; +}; + +//Хук для таблицы сдачи продукции +const useIncomFromDeps = task => { + //Собственное состояние - таблица данных + const [incomFromDeps, setIncomFromDeps] = useState({ + dataLoaded: false, + columnsDef: [], + orders: null, + rows: [], + reload: true, + pageNumber: 1, + morePages: true + }); + + //Подключение к контексту взаимодействия с сервером + const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); + + //При необходимости обновить данные таблицы + useEffect(() => { + const loadData = async () => { + const data = await executeStored({ + stored: "PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DEPT_DG_GET", + args: { + NFCPRODPLANSP: task, + CORDERS: { VALUE: object2Base64XML(incomFromDeps.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, + NPAGE_NUMBER: incomFromDeps.pageNumber, + NPAGE_SIZE: DATA_GRID_PAGE_SIZE_LARGE, + NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1 + }, + attributeValueProcessor: (name, val) => (["DDUE_DATE"].includes(name) ? formatDateRF(val) : val), + respArg: "COUT" + }); + setIncomFromDeps(pv => ({ + ...pv, + columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, + rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], + dataLoaded: true, + reload: false, + morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE_LARGE + })); + }; + if (incomFromDeps.reload) { + loadData(); + } + }, [SERV_DATA_TYPE_CLOB, executeStored, incomFromDeps.dataLoaded, incomFromDeps.orders, incomFromDeps.pageNumber, incomFromDeps.reload, task]); + + return [incomFromDeps, setIncomFromDeps]; +}; + +export { useDeptCostProdPlans, useCostRouteLists, useCostRouteListsSpecs, useIncomFromDeps }; diff --git a/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js b/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js index 67f9abf..3e59b37 100644 --- a/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js +++ b/app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js @@ -7,13 +7,12 @@ //Подключение библиотек //--------------------- -import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React +import React from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Typography, Box, Dialog, DialogContent, DialogActions, Button } from "@mui/material"; //Интерфейсные элементы 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 { object2Base64XML, formatDateRF } from "../../core/utils"; //Вспомогательные функции +import { useIncomFromDeps } from "./hooks"; //Хук состояния таблицы сдача продукции //--------- //Константы @@ -32,53 +31,7 @@ const STYLES = { //Таблица сдачи продукции const IncomFromDepsDataGrid = ({ task }) => { //Собственное состояние - таблица данных - const [incomFromDeps, setIncomFromDeps] = useState({ - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true - }); - - //Размер страницы данных - const DATA_GRID_PAGE_SIZE = 10; - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - - //Загрузка данных таблицы с сервера - const loadData = useCallback(async () => { - if (incomFromDeps.reload) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.INCOMEFROMDEPS_DEPT_DG_GET", - args: { - NFCPRODPLANSP: task, - CORDERS: { VALUE: object2Base64XML(incomFromDeps.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: incomFromDeps.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: incomFromDeps.dataLoaded ? 0 : 1 - }, - attributeValueProcessor: (name, val) => (["DDUE_DATE"].includes(name) ? formatDateRF(val) : val), - respArg: "COUT" - }); - setIncomFromDeps(pv => ({ - ...pv, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [incomFromDeps.reload, incomFromDeps.orders, incomFromDeps.dataLoaded, incomFromDeps.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]); - - //При необходимости обновить данные таблицы - useEffect(() => { - loadData(); - }, [incomFromDeps.reload, loadData]); + const [incomFromDeps, setIncomFromDeps] = useIncomFromDeps(task); //При изменении состояния сортировки const handleOrderChanged = ({ orders }) => setIncomFromDeps(pv => ({ ...pv, orders: [...orders], pageNumber: 1, reload: true })); 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 0e4a5b5..e3bc32a 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 @@ -7,12 +7,10 @@ //Подключение библиотек //--------------------- -import React, { useContext, useState, useCallback, useEffect } from "react"; //Классы React +import React, { useContext, useState } from "react"; //Классы React import PropTypes from "prop-types"; //Контроль свойств компонента import { Drawer, Fab, Box, List, ListItemButton, ListItemText, Typography, TextField, Link, Grid } from "@mui/material"; //Интерфейсные элементы -import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером -import { useFilteredPlans } from "./hooks"; //Вспомогательные хуки -import { object2Base64XML } from "../../core/utils"; //Вспомогательные функции +import { useDeptCostProdPlans, useFilteredPlans } from "./hooks"; //Вспомогательные хуки import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений @@ -27,14 +25,14 @@ import { CostRouteListsDataGridDialog } from "./fcroutlst"; //Диалог ма const STYLES = { PLANS_FINDER: { marginTop: "10px", marginLeft: "10px", width: "93%" }, PLANS_LIST_ITEM_PRIMARY: { wordWrap: "break-word" }, - PLANS_BUTTON: { position: "absolute", marginTop: "10px", marginLeft: "10px" }, + PLANS_BUTTON: { position: "absolute" }, PLANS_DRAWER: { width: "350px", display: "inline-block", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "350px", display: "inline-block", boxSizing: "border-box" } }, - CONTAINER: { paddingTop: "40px", margin: "5px 0px", textAlign: "center" }, + CONTAINER: { textAlign: "center" }, DATA_GRID_CONTAINER: { minWidth: "95vw", maxWidth: "95vw", minHeight: "80vh", maxHeight: "80vh" }, DATA_GRID_GROUP_CELL: { padding: "2px" }, DATA_GRID_CELL: { padding: "8px", maxWidth: "300px", textOverflow: "ellipsis", overflow: "hidden", whiteSpace: "pre" }, @@ -177,24 +175,7 @@ PlanList.propTypes = { //Корневая панель производственного плана цеха const MechRecDeptCostProdPlans = () => { //Собственное состояние - таблица данных - const [state, setState] = useState({ - init: false, - showPlanList: false, - showIncomeFromDeps: null, - showFcroutelst: null, - planList: [], - planListLoaded: false, - selectedPlan: {}, - dataLoaded: false, - columnsDef: [], - orders: null, - rows: [], - reload: true, - pageNumber: 1, - morePages: true, - fixedHeader: false, - fixedColumns: 0 - }); + const [state, setState] = useDeptCostProdPlans(); //Состояние для фильтра каталогов const [filter, setFilter] = useState({ planName: "" }); @@ -202,77 +183,9 @@ const MechRecDeptCostProdPlans = () => { //Массив отфильтрованных каталогов const filteredPlanCtgls = useFilteredPlans(state.planList, filter); - //Размер страницы данных - const DATA_GRID_PAGE_SIZE = 10; - - //Подключение к контексту взаимодействия с сервером - const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx); - //Подключение к контексту сообщений const { InlineMsgInfo } = useContext(MessagingСtx); - // Инициализация каталогов планов - const initPlans = useCallback(async () => { - if (!state.init) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCPRODPLAN_DEPT_INIT", - args: {}, - respArg: "COUT", - isArray: name => name === "XFCPRODPLANS", - attributeValueProcessor: (name, val) => (name === "SPERIOD" ? undefined : val) - }); - setState(pv => ({ ...pv, init: true, planList: [...(data?.XFCPRODPLANS || [])], planListLoaded: true })); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [state.init, executeStored]); - - //Загрузка данных таблицы с сервера - const loadData = useCallback( - async NRN => { - if (state.reload && NRN) { - const data = await executeStored({ - stored: "PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET", - args: { - NFCPRODPLAN: NRN, - CORDERS: { VALUE: object2Base64XML(state.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB }, - NPAGE_NUMBER: state.pageNumber, - NPAGE_SIZE: DATA_GRID_PAGE_SIZE, - NINCLUDE_DEF: state.dataLoaded ? 0 : 1 - }, - respArg: "COUT", - attributeValueProcessor: (name, val) => (name === "caption" ? undefined : val) - }); - setState(pv => ({ - ...pv, - fixedHeader: data.XDATA_GRID.fixedHeader, - fixedColumns: data.XDATA_GRID.fixedColumns, - columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef, - rows: pv.pageNumber == 1 ? [...(data.XROWS || [])] : [...pv.rows, ...(data.XROWS || [])], - dataLoaded: true, - reload: false, - morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_SIZE - })); - } - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [state.reload, state.orders, state.dataLoaded, state.pageNumber, executeStored, SERV_DATA_TYPE_CLOB] - ); - - //При необходимости обновить данные таблицы - useEffect(() => { - if (state.selectedPlan.NRN) { - loadData(state.selectedPlan.NRN); - } else { - setState(pv => ({ ...pv, dataLoaded: false, columnsDef: [], orders: null, rows: [], reload: true, pageNumber: 1, morePages: true })); - } - }, [state.selectedPlan, state.reload, loadData]); - - //При подключении компонента к странице - useEffect(() => { - initPlans(); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - //Выбор плана const selectPlan = plan => { setState(pv => ({ @@ -332,7 +245,7 @@ const MechRecDeptCostProdPlans = () => { //Генерация содержимого return ( - <> + setState(pv => ({ ...pv, showPlanList: !pv.showPlanList }))}> Планы @@ -350,45 +263,47 @@ const MechRecDeptCostProdPlans = () => { onClick={handlePlanClick} /> -
- {state.dataLoaded ? ( - - {`Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`} - - ) : null} - - - - {state.dataLoaded ? ( - dataCellRender({ ...prms, handleProdOrderClick, handleMatresCodeClick })} - groupCellRender={groupCellRender} - /> - ) : !state.selectedPlan.NRN ? ( - - ) : null} - - + + + + {state.dataLoaded ? ( + state.rows.length === 0 ? ( + + ) : ( + + + {`Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`} + + + dataCellRender({ ...prms, handleProdOrderClick, handleMatresCodeClick })} + groupCellRender={groupCellRender} + /> + + + ) + ) : !state.selectedPlan.NRN ? ( + + ) : null} + - {state.showIncomeFromDeps ? ( - handleProdOrderClick(null)} /> - ) : null} - {state.showFcroutelst ? ( - handleMatresCodeClick(null)} /> - ) : null} -
- + + {state.showIncomeFromDeps ? ( + handleProdOrderClick(null)} /> + ) : null} + {state.showFcroutelst ? handleMatresCodeClick(null)} /> : null} +
); }; diff --git a/db/PKG_P8PANELS_MECHREC.pck b/db/PKG_P8PANELS_MECHREC.pck index 4d7fda5..3d01c91 100644 --- a/db/PKG_P8PANELS_MECHREC.pck +++ b/db/PKG_P8PANELS_MECHREC.pck @@ -10,11 +10,26 @@ create or replace package PKG_P8PANELS_MECHREC as /* Проверка соответствия подразделения документа подразделению пользователя (по иерархии) */ function UTL_SUBDIV_HIER_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + NSUBDIV in number, -- Рег. номер подразделения + SUSER in varchar2, -- Имя пользователя + NSTART_SUBDIV in number := null -- Рег. номер родительского подразделения + ) return number; -- Подразделение подходит (0 - нет, 1 - да) + + /* Проверка наличия станка "В эксплуатации" в иерархии цеха */ + function UTL_INS_DEP_HIER_EQ_CHECK ( NCOMPANY in number, -- Рег. номер организации - NSUBDIV in number, -- Рег. номер подразделения - SUSER in varchar2 -- Имя пользователя - ) return number; -- Подразделение подходит (0 - нет, 1 - да) + NINS_DEPARTMENT in number, -- Рег. номер подразделения (цеха) + DDATE_TO in date -- Дата по + ) return number; -- Результат (0 - станка нет, 1 - станок есть) + + /* Считывание количества рабочих часов с учетом перерыва */ + function UTL_WORK_TIME_GET + ( + NTBOPERMODESP in number -- Рег. номер смены + ) return number; -- Количество рабочих часов /* Получение таблицы ПиП на основании маршрутного листа, связанных со спецификацией плана */ procedure INCOMEFROMDEPS_DG_GET @@ -135,55 +150,28 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Список записей раздела "Планы и отчеты производства изделий" ); - /* Добавление записи маршрутного листа в селектлисте */ - procedure SELECTLIST_FCROUTLST_ADD - ( - NIDENT in number, -- Идентификатор селектлиста - NFCROUTLST in number -- Рег. номер маршрутного листа - ); - - /* Удаление записи маршрутного листа из селектлиста */ - procedure SELECTLIST_FCROUTLST_DEL - ( - NIDENT in number, -- Идентификатор селектлиста - NFCROUTLST in number -- Рег. номер маршрутного листа - ); - - /* Выдать задание операции сменного задания */ + /* Выдать задания сменного задания */ procedure FCJOBSSP_ISSUE ( - NFCJOBS in number, -- Рег. номер сменного задания - SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + NFCJOBS in number -- Рег. номер сменного задания ); - /* Исключение оборудования из операции сменного задания */ - procedure FCJOBSSP_EXC_FCEQUIPMENT + /* Исключение станка из операции сменного задания */ + procedure FCJOBSSP_EXC_EQCONFIG ( - NFCEQUIPMENT in number, -- Рег. номер оборудования - NFCJOBS in number, -- Рег. номер сменного задания - SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + NFCJOBSSP in number -- Рег. номер строки сменного задания ); - /* Включение оборудование в строку сменного задания */ - procedure FCJOBSSP_INC_FCEQUIPMENT + /* Включение станка в строку сменного задания */ + procedure FCJOBSSP_INC_EQCONFIG ( - NFCEQUIPMENT in number, -- Рег. номер оборудования - NFCJOBS in number, -- Рег. номер сменного задания - SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + NEQCONFIG in number, -- Рег. номер состава оборудования + NFCJOBSSP in number, -- Рег. номер строки сменного задания + NQUANT_PLAN in number -- Включаемое количество ); - /* Получение таблицы оборудования подразделения */ - procedure FCEQUIPMENT_DG_GET - ( - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных - ); - - /* Получение таблицы маршрутных листов спецификации сменного задания */ - procedure FCJOBSSP_FCROUTLST_DG_GET + /* Получение составов оборудования подразделения */ + procedure EQCONFIG_DG_GET ( NFCJOBS in number, -- Рег. номер сменного задания NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) @@ -193,11 +181,10 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Сериализованная таблица данных ); - /* Получение спецификации сменного задания по отмеченным маршрутным листам */ + /* Получение спецификации сменного задания */ procedure FCJOBSSP_DG_GET ( NFCJOBS in number, -- Рег. номер сменного задания - NIDENT in number, -- Идентификатор процесса NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -211,9 +198,47 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Список записей раздела "Сменные задания" ); + /* Получение количества рабочих часов в сменах подразделения */ + procedure INS_DEPARTMENT_WORKHOURS_GET + ( + NSUBDIV in number, -- Рег. номер подразделения + NWORKHOURS out number -- Количество рабочих часов + ); + + /* Получение количества рабочих дней месяца */ + procedure ENPERIOD_WORKDAYS_GET + ( + SMONTH_YEAR in varchar2, -- Строковое представления месяца и года в формате (mm.yyyy) + NWORKDAYS out number -- Количество рабочих дней + ); + + /* Получение таблицы доступных подразделений (цехов) */ + procedure INS_DEPARTMENT_DG_GET + ( + SMONTH_YEAR in varchar2, -- Строковое представления месяца и года в формате (mm.yyyy) + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + /* Получение загрузки цеха */ procedure FCJOBS_DEP_LOAD_DG_GET ( + NSUBDIV in number, -- Рег. номер подразделения (цеха) + SMONTH_YEAR in varchar2, -- Строковое представления месяца и года в формате (mm.yyyy) + NWORKHOURS in number, -- Количество рабочих часов + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ); + + /* Получение таблицы маршрутных листов связанной записи "Производственная программа" */ + procedure FCROUTLST_DG_BY_LINKED_GET + ( + NFCPRODPLANSP in number, -- Рег. номер связанной строки плана NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -221,23 +246,10 @@ create or replace package PKG_P8PANELS_MECHREC as COUT out clob -- Сериализованная таблица данных ); - /* Получение таблицы маршрутных листов, связанных с производственным составом */ - procedure FCROUTLST_DG_BY_PRDCMPSP_GET + /* Получение таблицы комплектовочных ведомостей связанной записи "Производственная программа" */ + procedure FCDELIVSH_DG_BY_LINKED_GET ( - NPRODCMPSP in number, -- Рег. номер производственного состава - NFCPRODPLAN in number, -- Рег. номер план - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных - ); - - /* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */ - procedure FCDELIVSH_DG_BY_PRDCMPSP_GET - ( - NPRODCMPSP in number, -- Рег. номер производственного состава - NFCPRODPLAN in number, -- Рег. номер план + NFCPRODPLANSP in number, -- Рег. номер связанной строки плана NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -261,7 +273,7 @@ create or replace package PKG_P8PANELS_MECHREC as /* Считывание деталей производственного состава */ procedure FCPRODCMP_DETAILS_GET ( - NFCPRODPLAN in number, -- Рег. номер плана + NFCPRODPLANSP in number, -- Рег. номер строки плана COUT out clob -- Сериализованная таблица данных ); @@ -300,7 +312,14 @@ create or replace package body PKG_P8PANELS_MECHREC as NTASK_TYPE_RL constant PKG_STD.TNUMBER := 4; -- Маршрутные листы NTASK_TYPE_EMPTY constant PKG_STD.TNUMBER := null; -- Нет детализации - /* Константы - параметры отборов планов (Производственный план цеха) */ + /* Константы - типы дней ("Загрузка цеха") */ + NDAY_TYPE_WORK_AFTER constant PKG_STD.TNUMBER := 0; -- Рабочий день после текущей даты + NDAY_TYPE_HOLIDAY_AFTER constant PKG_STD.TNUMBER := 1; -- Выходной день после текущей даты + NDAY_TYPE_WORK_BEFORE constant PKG_STD.TNUMBER := 2; -- Рабочий день до текущей даты + NDAY_TYPE_HOLIDAY_BEFORE constant PKG_STD.TNUMBER := 3; -- Выходной день до текущей даты + NDAY_TYPE_CURRENT_DAY constant PKG_STD.TNUMBER := 4; -- Текущий день + + /* Константы - параметры отборов планов ("Производственный план цеха") */ NFCPRODPLAN_DEPT_CTGR constant PKG_STD.TNUMBER := 2; -- Категория планов "Цеховой план" /* Константы - параметры отборов планов ("Мониторинг сборки изделий") */ @@ -308,12 +327,13 @@ create or replace package body PKG_P8PANELS_MECHREC as NFCPRODPLAN_STATUS_MON constant PKG_STD.TNUMBER := 2; -- Статус планов "Утвержден" SFCPRODPLAN_TYPE_MON constant PKG_STD.TSTRING := 'План'; -- Тип планов (мнемокод состояния) - /* Константы - параметры отборов ("Загрузка цеха") */ + /* Константы - мнемокоды ед. измерения */ SDICMUNTS_WD constant PKG_STD.TSTRING := 'Ч/Ч'; -- Мнемокод ед. измерения нормочасов - SDICMUNTS_HOUR constant PKG_STD.TSTRING := 'Час'; -- Мнемокод ед. измерения часов + SDICMUNTS_MIN constant PKG_STD.TSTRING := 'МИН'; -- Мнемокод ед. измерения минут + SDICMUNTS_DAY constant PKG_STD.TSTRING := 'Д'; -- Мнемокод ед. измерения дней /* Константы - параметры отборов сменных заданий */ - NFCJOBS_STATUS_WO constant PKG_STD.TNUMBER := 1; -- Статус сменного задания "Отработан" + NFCJOBS_STATUS_NOT_WO constant PKG_STD.TNUMBER := 0; -- Статус сменного задания "Не отработано" /* Константы - дополнительные атрибуты */ STASK_ATTR_START_FACT constant PKG_STD.TSTRING := 'start_fact'; -- Запущено @@ -439,25 +459,24 @@ create or replace package body PKG_P8PANELS_MECHREC as end; end UTL_FCROUTLST_GET; - /* Получение мнемокода подразделения пользователя */ - function UTL_SUBDIV_CODE_GET + /* Считывания рег. номера подразделения пользователя */ + function UTL_SUBDIV_RN_GET ( NCOMPANY in number, -- Рег. номер организации SUSER in varchar2 -- Имя пользователя - ) return varchar2 -- Мнемокод подразделения пользователя + ) return number -- Рег. номер подразделения is - SRESULT PKG_STD.TSTRING; -- Мнемокод подразделения пользователя + NRESULT PKG_STD.TNUMBER; -- Рег. номер подразделения NVERSION PKG_STD.TREF; -- Версия контрагентов begin /* Считываем версию контрагентов */ FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); - /* Считываем мнемокод подразделения пользователя */ + /* Проверяем подразделение по исполнению сотрудника пользователя */ begin - select I.CODE - into SRESULT - from CLNPSPFM C, - CLNPSPFMTYPES CT, - INS_DEPARTMENT I + select C.DEPTRN + into NRESULT + from CLNPSPFM C, + CLNPSPFMTYPES CT where exists (select null from CLNPERSONS CP where exists (select null @@ -472,15 +491,14 @@ create or replace package body PKG_P8PANELS_MECHREC as and (C.ENDENG >= sysdate or C.ENDENG is null) and C.CLNPSPFMTYPES = CT.RN and CT.IS_PRIMARY = 1 - and I.RN = C.DEPTRN and ROWNUM = 1; exception when others then - SRESULT := null; + NRESULT := 0; end; /* Возвращаем результат */ - return SRESULT; - end UTL_SUBDIV_CODE_GET; + return NRESULT; + end UTL_SUBDIV_RN_GET; /* Проверка соответствия подразделения документа подразделению пользователя */ function UTL_SUBDIV_CHECK @@ -533,61 +551,116 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Проверка соответствия подразделения документа подразделению пользователя (по иерархии) */ function UTL_SUBDIV_HIER_CHECK ( - NCOMPANY in number, -- Рег. номер организации - NSUBDIV in number, -- Рег. номер подразделения - SUSER in varchar2 -- Имя пользователя - ) return number -- Подразделение подходит (0 - нет, 1 - да) + NCOMPANY in number, -- Рег. номер организации + NSUBDIV in number, -- Рег. номер подразделения + SUSER in varchar2, -- Имя пользователя + NSTART_SUBDIV in number := null -- Рег. номер родительского подразделения + ) return number -- Подразделение подходит (0 - нет, 1 - да) is - NRESULT PKG_STD.TNUMBER; -- Подразделение подходит (0 - нет, 1 - да) - NVERSION PKG_STD.TREF; -- Версия контрагентов + NRESULT PKG_STD.TNUMBER; -- Подразделение подходит (0 - нет, 1 - да) + NVERSION PKG_STD.TREF; -- Версия контрагентов begin /* Если рег. номер подразделения пустой */ if (NSUBDIV is null) then /* Возвращаем 0 */ return 0; end if; - /* Считываем версию контрагентов */ - FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); - /* Проверяем подразделение по исполнению сотрудника пользователя */ + /* Если родительское подразделение не задано */ + if (NSTART_SUBDIV is null) then + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); + /* Проверяем подразделение по исполнению сотрудника пользователя */ + begin + select 1 + into NRESULT + from DUAL + where exists (select null + from INS_DEPARTMENT T, + (select C.DEPTRN + from CLNPSPFM C, + CLNPSPFMTYPES CT + where exists (select null + from CLNPERSONS CP + where exists (select null + from AGNLIST T + where T.PERS_AUTHID = SUSER + and CP.PERS_AGENT = T.RN + and T.VERSION = NVERSION) + and C.PERSRN = CP.RN + and CP.COMPANY = NCOMPANY) + and C.COMPANY = NCOMPANY + and C.BEGENG <= sysdate + and (C.ENDENG >= sysdate or C.ENDENG is null) + and C.CLNPSPFMTYPES = CT.RN + and CT.IS_PRIMARY = 1) TMP + where T.RN = NSUBDIV + and ROWNUM = 1 + start with T.RN = TMP.DEPTRN + connect by prior T.RN = T.PRN); + exception + when others then + NRESULT := 0; + end; + else + /* Проверяем подразделение по исполнению сотрудника пользователя */ + begin + select 1 + into NRESULT + from DUAL + where exists (select null + from INS_DEPARTMENT T + where T.RN = NSUBDIV + and ROWNUM = 1 + start with T.RN = NSTART_SUBDIV + connect by prior T.RN = T.PRN); + exception + when others then + NRESULT := 0; + end; + end if; + /* Возвращаем результат */ + return NRESULT; + end UTL_SUBDIV_HIER_CHECK; + + /* Проверка наличия станка "В эксплуатации" в иерархии цеха */ + function UTL_INS_DEP_HIER_EQ_CHECK + ( + NCOMPANY in number, -- Рег. номер организации + NINS_DEPARTMENT in number, -- Рег. номер подразделения (цеха) + DDATE_TO in date -- Дата по + ) return number -- Результат (0 - станка нет, 1 - станок есть) + is + NRESULT PKG_STD.TNUMBER; -- Результат (0 - станка нет, 1 - станок есть) + begin + /* Проверяем наличие станка "В эксплуатации" в иерархии цеха */ begin select 1 into NRESULT - from DUAL - where exists (select null - from INS_DEPARTMENT T, - (select C.DEPTRN - from CLNPSPFM C, - CLNPSPFMTYPES CT - where exists (select null - from CLNPERSONS CP - where exists (select null - from AGNLIST T - where T.PERS_AUTHID = SUSER - and CP.PERS_AGENT = T.RN - and T.VERSION = NVERSION) - and C.PERSRN = CP.RN - and CP.COMPANY = NCOMPANY) - and C.COMPANY = NCOMPANY - and C.BEGENG <= sysdate - and (C.ENDENG >= sysdate or C.ENDENG is null) - and C.CLNPSPFMTYPES = CT.RN - and CT.IS_PRIMARY = 1) TMP - where T.RN = NSUBDIV - and ROWNUM = 1 - start with T.RN = TMP.DEPTRN - connect by prior T.RN = T.PRN); + from INS_DEPARTMENT H + where H.COMPANY = NCOMPANY + and exists (select null + from SUBDIVSEQ EQ, + EQCONFIG EQC + where EQ.PRN = H.RN + and EQC.RN = EQ.EQCONFIG + and EQC.OPER_DATE is not null + and EQC.OPER_DATE <= DDATE_TO + and ROWNUM = 1) + and ROWNUM = 1 + start with H.RN = NINS_DEPARTMENT + connect by prior H.RN = H.PRN; exception when others then NRESULT := 0; end; /* Возвращаем результат */ return NRESULT; - end UTL_SUBDIV_HIER_CHECK; + end UTL_INS_DEP_HIER_EQ_CHECK; - /* Проверка наличия оборудования */ - procedure UTL_FCEQUIPMENT_EXISTS + /* Проверка наличия состава оборудования */ + procedure UTL_EQCONFIG_EXISTS ( - NFCEQUIPMENT in number, -- Рег. номер оборудования + NEQCONFIG in number, -- Рег. номер состава оборудования NCOMPANY in number -- Рег. номер организации ) is @@ -597,42 +670,14 @@ create or replace package body PKG_P8PANELS_MECHREC as begin select T.RN into NEXISTS - from FCEQUIPMENT T - where T.RN = NFCEQUIPMENT + from EQCONFIG T + where T.RN = NEQCONFIG and T.COMPANY = NCOMPANY; exception when others then - P_EXCEPTION(0, 'Оборудование не найдено.'); + P_EXCEPTION(0, 'Рабочее место не найдено.'); end; - end UTL_FCEQUIPMENT_EXISTS; - - /* Поиск записи в селектлисте */ - function UTL_SELECTLIST_RN_GET - ( - NIDENT in number, -- Идентификатор селектлиста - NFCROUTLST in number, -- Рег. номер маршрутного листа - SUNITCODE in varchar2, -- Мнемокод раздела - SACTIONCODE in varchar2 -- Действие раздела - ) return number -- Рег. номер записи в селектлисте - is - NRESULT PKG_STD.TNUMBER; -- Рег. номер записи в селектлисте - begin - /* Считываем запись селеклиста */ - begin - select T.RN - into NRESULT - from SELECTLIST T - where T.IDENT = NIDENT - and T.UNITCODE = SUNITCODE - and T.DOCUMENT = NFCROUTLST - and T.ACTIONCODE = SACTIONCODE; - exception - when others then - NRESULT := null; - end; - /* Возвращаем результат */ - return NRESULT; - end UTL_SELECTLIST_RN_GET; + end UTL_EQCONFIG_EXISTS; /* Считывание рег. номера основной спецификации плана из "Производственная программа" */ function UTL_FCPRODPLANSP_MAIN_GET @@ -666,6 +711,80 @@ create or replace package body PKG_P8PANELS_MECHREC as return NRESULT; end UTL_FCPRODPLANSP_MAIN_GET; + /* Считывание записи строки сменного задания */ + function UTL_FCJOBSSP_GET + ( + NCOMPANY in number, -- Рег. номер организации + NFCJOBSSP in number -- Рег. номер строки сменного задания + ) return FCJOBSSP%rowtype -- Запись строки сменного задания + is + RFCJOBSSP FCJOBSSP%rowtype; -- Запись строки сменного задания + begin + /* Считываем запись строки сменного задания */ + begin + select T.* + into RFCJOBSSP + from FCJOBSSP T + where T.RN = NFCJOBSSP + and T.COMPANY = NCOMPANY; + exception + when others then + P_EXCEPTION(0, 'Ошибка считывания строки сменного задания.'); + end; + /* Возвращаем результат */ + return RFCJOBSSP; + end UTL_FCJOBSSP_GET; + + /* Считывание количества рабочих часов с учетом перерыва */ + function UTL_WORK_TIME_GET + ( + NTBOPERMODESP in number -- Рег. номер смены + ) return number -- Количество рабочих часов + is + NRESULT PKG_STD.TLNUMBER; -- Количество рабочих часов + begin + /* Определяем количество рабочих часов с учетом перерывов */ + begin + select ROUND((TMP.WORK_MINUTS - COALESCE(TMP.BREAK_MINUTS, 0)) * 24 * 60, 3) + into NRESULT + from (select case BOS.SIGN_SHIFT + when 0 then + (BOS.END_TIME - BOS.BEG_TIME) + else + (BOS.END_TIME + 1 - BOS.BEG_TIME) + end WORK_MINUTS, + (select sum(case + /* В один день */ + when BOS.SIGN_SHIFT = 0 then + LEAST(BOS.END_TIME, BMS.END_TIME) - BMS.START_TIME + /* Перерыв с переходом дня */ + when ((BOS.SIGN_SHIFT = 1) and (BMS.START_TIME >= BMS.END_TIME)) then + (LEAST(BOS.END_TIME, BMS.END_TIME) + 1) - BMS.START_TIME + /* Первый день */ + when ((BOS.SIGN_SHIFT = 1) and (BMS.START_TIME >= BOS.BEG_TIME)) then + BMS.END_TIME - BMS.START_TIME + /* Второй день */ + else + LEAST(BOS.END_TIME, BMS.END_TIME) - BMS.START_TIME + end) BREAK_MIN + from TBBREAKMODESP BMS + where BMS.PRN = BO.BREAKMODE + and (((BOS.SIGN_SHIFT = 0) and + ((BMS.START_TIME >= BOS.BEG_TIME) and (BMS.START_TIME < BOS.END_TIME))) or + ((BOS.SIGN_SHIFT = 1) and + ((BMS.START_TIME >= BOS.BEG_TIME) or (BMS.START_TIME < BOS.END_TIME))))) BREAK_MINUTS + from TBOPERMODESP BOS, + TBOPERMODE BO + where BOS.RN = NTBOPERMODESP + and BO.RN = BOS.PRN) TMP; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end UTL_WORK_TIME_GET; + /* Проверка наличия связанных маршрутных листов */ function LINK_FCROUTLST_CHECK ( @@ -1823,12 +1942,6 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true, BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NREL_QUANT', - SCAPTION => 'Количество выпуска', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - BORDER => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NQUANT_FACT', SCAPTION => 'Сдано', @@ -2947,7 +3060,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select F.NUMB from FACEACC F where T.FACEACC = F.RN ) SPROD_ORDER'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST T,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCTYPES DT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.RN in (select SL.DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.RN in (select SL."DOCUMENT"'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SELECTLIST SL'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NFCROUTLST_IDENT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists') || ')'); @@ -3191,10 +3304,10 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.STATE NSTATE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T."STATE" NSTATE,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.OPER_NUMB SOPER_NUMB,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(T.OPER_NUMB) || '', '' || '); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(COALESCE(( select O.NAME from FCOPERTYPES O where T.OPER_TPS = O.RN ), T.OPER_UK)) SROUTSHTSP_NAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' trim(COALESCE(( select O."NAME" from FCOPERTYPES O where T.OPER_TPS = O.RN ), T.OPER_UK)) SROUTSHTSP_NAME,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ( select I.CODE from INS_DEPARTMENT I where T.SUBDIV = I.RN ) SSUBDIV,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN NQUANT_PLAN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_FACT NQUANT_FACT,'); @@ -3380,7 +3493,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS L'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NFCROUTLST_IDENT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT = SL.DOCUMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT = SL."DOCUMENT"'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'IncomFromDeps') || ')))'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); @@ -3698,7 +3811,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostProductPlansSpecs')); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.RN = L.OUT_DOCUMENT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.STATE = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ') NFCROUTLST_QUANT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F."STATE" = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1) || ') NFCROUTLST_QUANT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCPRODPLAN P,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCPRODPLANSP T,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMATRESOURCE MRES'); @@ -3987,323 +4100,440 @@ create or replace package body PKG_P8PANELS_MECHREC as Процедуры панели "Выдача сменного задания" */ - /* Добавление записи маршрутного листа в селектлисте */ - procedure SELECTLIST_FCROUTLST_ADD - ( - NIDENT in number, -- Идентификатор селектлиста - NFCROUTLST in number -- Рег. номер маршрутного листа - ) - is - NRN PKG_STD.TSTRING; -- Рег. номер записи в селектлисте - begin - /* Считываем запись в селеклисте */ - NRN := UTL_SELECTLIST_RN_GET(NIDENT => NIDENT, - NFCROUTLST => NFCROUTLST, - SUNITCODE => 'CostRouteLists', - SACTIONCODE => 'P8PanelsJobManage'); - /* Если запись не найдена */ - if (NRN is null) then - /* Добавляем запись в селектлист */ - P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, - NCOMPANY => null, - NDOCUMENT => NFCROUTLST, - SUNITCODE => 'CostRouteLists', - SACTIONCODE => 'P8PanelsJobManage', - NCRN => null, - NDOCUMENT1 => null, - SUNITCODE1 => null, - SACTIONCODE1 => null, - NRN => NRN); - end if; - end SELECTLIST_FCROUTLST_ADD; - - /* Удаление записи маршрутного листа из селектлиста */ - procedure SELECTLIST_FCROUTLST_DEL - ( - NIDENT in number, -- Идентификатор селектлиста - NFCROUTLST in number -- Рег. номер маршрутного листа - ) - is - NRN PKG_STD.TSTRING; -- Рег. номер записи в селектлисте - begin - /* Считываем запись в селеклисте */ - NRN := UTL_SELECTLIST_RN_GET(NIDENT => NIDENT, - NFCROUTLST => NFCROUTLST, - SUNITCODE => 'CostRouteLists', - SACTIONCODE => 'P8PanelsJobManage'); - /* Если запись найдена */ - if (NRN is not null) then - /* Удаляем запись из селектлиста */ - P_SELECTLIST_BASE_DELETE(NRN => NRN); - end if; - end SELECTLIST_FCROUTLST_DEL; - - /* Выдать задание операции сменного задания */ + /* Выдать задания сменного задания */ procedure FCJOBSSP_ISSUE ( - NFCJOBS in number, -- Рег. номер сменного задания - SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + NFCJOBS in number -- Рег. номер сменного задания ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + NDICMUNTS PKG_STD.TREF; -- Рег. номер ед. изм. дня + DSTART_DATE PKG_STD.TLDATE; -- Дата начала строки плана + DEND_DATE PKG_STD.TLDATE; -- Дата окончания строки плана begin - /* Если список операций не указан */ - if (SFCJOBSSP_LIST is null) then - P_EXCEPTION(0, 'Список операций не определен.'); + /* Если сменное задание не указано */ + if (NFCJOBS is null) then + P_EXCEPTION(0, 'Сменное задание не определено.'); end if; - /* Цикл по операциям сменного задания */ - for REC in (select T.* + /* Считываем единицу измерения минут */ + FIND_DICMUNTS_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SDICMUNTS_DAY, + NRN => NDICMUNTS); + /* Отбираем строки с пустым "Станок факт" */ + for REC in (select T.RN from FCJOBSSP T where T.PRN = NFCJOBS - and T.COMPANY = NCOMPANY - and T.RN in (select REGEXP_SUBSTR(SFCJOBSSP_LIST, '[^;]+', 1, level) NRN - from DUAL - connect by INSTR(SFCJOBSSP_LIST, ';', 1, level - 1) > 0) - and T.BEG_FACT is null) + and T.EQCONFIG is null) loop - /* Исключаем оборудование */ - P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, - NCOMPANY => REC.COMPANY, - SNUMB => REC.NUMB, - NTBOPERMODESP => REC.TBOPERMODESP, - SBARCODE => REC.BARCODE, - NFACEACC => REC.FACEACC, - NMATRES => REC.MATRES, - NNOMCLASSIF => REC.NOMCLASSIF, - NARTICLE => REC.ARTICLE, - NFCROUTSHTSP => REC.FCROUTSHTSP, - SOPER_NUMB => REC.OPER_NUMB, - NOPER_TPS => REC.OPER_TPS, - SOPER_UK => REC.OPER_UK, - NSIGN_CONTRL => REC.SIGN_CONTRL, - NMANPOWER => REC.MANPOWER, - NCATEGORY => REC.CATEGORY, - DBEG_PLAN => REC.BEG_PLAN, - DEND_PLAN => REC.END_PLAN, - DBEG_FACT => REC.BEG_FACT, - DEND_FACT => REC.END_FACT, - NQUANT_PLAN => REC.QUANT_PLAN, - NQUANT_FACT => REC.QUANT_FACT, - NNORM => REC.NORM, - NT_SHT_FACT => REC.T_SHT_FACT, - NT_PZ_PLAN => REC.T_PZ_PLAN, - NT_PZ_FACT => REC.T_PZ_FACT, - NT_VSP_PLAN => REC.T_VSP_PLAN, - NT_VSP_FACT => REC.T_VSP_FACT, - NT_O_PLAN => REC.T_O_PLAN, - NT_O_FACT => REC.T_O_FACT, - NNORM_TYPE => REC.NORM_TYPE, - NSIGN_P_R => REC.SIGN_P_R, - NLABOUR_PLAN => REC.LABOUR_PLAN, - NLABOUR_FACT => REC.LABOUR_FACT, - NCOST_PLAN => REC.COST_PLAN, - NCOST_FACT => REC.COST_FACT, - NCOST_FOR => REC.COST_FOR, - NCURNAMES => REC.CURNAMES, - NPERFORM_PLAN => REC.PERFORM_PLAN, - NPERFORM_FACT => REC.PERFORM_FACT, - NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, - NSTAFFGRP_FACT => REC.STAFFGRP_FACT, - NEQUIP_PLAN => REC.EQUIP_PLAN, - NEQUIP_FACT => REC.EQUIP_PLAN, - NLOSTTYPE => REC.LOSTTYPE, - NLOSTDEFL => REC.LOSTDEFL, - NFOREMAN => REC.FOREMAN, - NINSPECTOR => REC.INSPECTOR, - DOTK_DATE => REC.OTK_DATE, - NSUBDIV => REC.SUBDIV, - NEQCONFIG => REC.EQCONFIG, - SNOTE => REC.NOTE, - NMUNIT => REC.MUNIT); + /* Удаляем строку */ + P_FCJOBSSP_BASE_DELETE(NRN => REC.RN, NCOMPANY => NCOMPANY); + end loop; + /* Цикл по станкам строк */ + for EQ in (select T.EQCONFIG from FCJOBSSP T where T.PRN = NFCJOBS group by T.EQCONFIG) + loop + /* Цикл по строкам с текущим станком */ + for REC in (select TMP.*, + DECODE(B.RN, null, TMP.DDOC_DATE, TMP.DDOC_DATE + B.BEG_TIME) DSTART, + F_DICMUNTS_BASE_RECALC_QUANT(0, TMP.COMPANY, TMP.MUNIT, TMP.LABOUR_PLAN, NDICMUNTS) NLABOUR, + ROWNUM RNUM + from (select T.*, + J.DOCDATE DDOC_DATE, + COALESCE(T.TBOPERMODESP, J.TBOPERMODESP) NTBOPERMODESP + from FCJOBS J, + FCJOBSSP T + where J.RN = NFCJOBS + and T.PRN = J.RN + and T.EQCONFIG = EQ.EQCONFIG + order by T.PRIOR_PARTY asc) TMP, + TBOPERMODESP B + where B.RN = TMP.NTBOPERMODESP) + loop + /* Если это первая строка - устанавливаем по смене */ + if (REC.RNUM = 1) then + DSTART_DATE := REC.DSTART; + DEND_DATE := DSTART_DATE + REC.NLABOUR; + else + DSTART_DATE := DEND_DATE; + DEND_DATE := DSTART_DATE + REC.NLABOUR; + end if; + /* Обновляем запись строки */ + P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, + NCOMPANY => REC.COMPANY, + SNUMB => REC.NUMB, + NTBOPERMODESP => REC.TBOPERMODESP, + SBARCODE => REC.BARCODE, + NFACEACC => REC.FACEACC, + NMATRES => REC.MATRES, + NNOMCLASSIF => REC.NOMCLASSIF, + NARTICLE => REC.ARTICLE, + NFCROUTSHTSP => REC.FCROUTSHTSP, + SOPER_NUMB => REC.OPER_NUMB, + NOPER_TPS => REC.OPER_TPS, + SOPER_UK => REC.OPER_UK, + NSIGN_CONTRL => REC.SIGN_CONTRL, + NMANPOWER => REC.MANPOWER, + NCATEGORY => REC.CATEGORY, + DBEG_PLAN => DSTART_DATE, + DEND_PLAN => DEND_DATE, + DBEG_FACT => REC.BEG_FACT, + DEND_FACT => REC.END_FACT, + NQUANT_PLAN => REC.QUANT_PLAN, + NQUANT_FACT => REC.QUANT_FACT, + NNORM => REC.NORM, + NT_SHT_FACT => REC.T_SHT_FACT, + NT_PZ_PLAN => REC.T_PZ_PLAN, + NT_PZ_FACT => REC.T_PZ_FACT, + NT_VSP_PLAN => REC.T_VSP_PLAN, + NT_VSP_FACT => REC.T_VSP_FACT, + NT_O_PLAN => REC.T_O_PLAN, + NT_O_FACT => REC.T_O_FACT, + NNORM_TYPE => REC.NORM_TYPE, + NSIGN_P_R => REC.SIGN_P_R, + NLABOUR_PLAN => REC.LABOUR_PLAN, + NLABOUR_FACT => REC.LABOUR_FACT, + NCOST_PLAN => REC.COST_PLAN, + NCOST_FACT => REC.COST_FACT, + NCOST_FOR => REC.COST_FOR, + NCURNAMES => REC.CURNAMES, + NPERFORM_PLAN => REC.PERFORM_PLAN, + NPERFORM_FACT => REC.PERFORM_FACT, + NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, + NSTAFFGRP_FACT => REC.STAFFGRP_FACT, + NEQUIP_PLAN => REC.EQUIP_PLAN, + NEQUIP_FACT => REC.EQUIP_FACT, + NLOSTTYPE => REC.LOSTTYPE, + NLOSTDEFL => REC.LOSTDEFL, + NFOREMAN => REC.FOREMAN, + NINSPECTOR => REC.INSPECTOR, + DOTK_DATE => REC.OTK_DATE, + NSUBDIV => REC.SUBDIV, + NEQCONFIG => REC.EQCONFIG, + SNOTE => 'Задание выдано ' || TO_CHAR(sysdate, 'dd.mm.yyyy hh24:mi:ss'), + NMUNIT => REC.MUNIT); + end loop; end loop; end FCJOBSSP_ISSUE; - /* Исключение оборудования из операции сменного задания */ - procedure FCJOBSSP_EXC_FCEQUIPMENT + /* Исключение станка из операции сменного задания */ + procedure FCJOBSSP_EXC_EQCONFIG ( - NFCEQUIPMENT in number, -- Рег. номер оборудования - NFCJOBS in number, -- Рег. номер сменного задания - SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + NFCJOBSSP in number -- Рег. номер строки сменного задания ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RFCJOBSSP FCJOBSSP%rowtype; -- Запись строки сменного задания begin - /* Если оборудование выбрано */ - if (NFCEQUIPMENT is not null) then - /* Проверяем наличие оборудования */ - UTL_FCEQUIPMENT_EXISTS(NFCEQUIPMENT => NFCEQUIPMENT, NCOMPANY => NCOMPANY); - else - P_EXCEPTION(0, 'Оборудование не определено.'); + /* Если рег. номер строки не указан */ + if (NFCJOBSSP is null) then + P_EXCEPTION(0, 'Строка сменного задания не определена.'); end if; - /* Если список операций не указан */ - if (SFCJOBSSP_LIST is null) then - P_EXCEPTION(0, 'Список операций не определен.'); + /* Считываем запись строки сменного задания */ + RFCJOBSSP := UTL_FCJOBSSP_GET(NCOMPANY => NCOMPANY, NFCJOBSSP => NFCJOBSSP); + /* Если дата начала факт указана */ + if (RFCJOBSSP.BEG_FACT is not null) then + P_EXCEPTION(0, 'Указанная строка сменного задания исполняется.'); end if; - /* Цикл по операциям сменного задания */ - for REC in (select T.* - from FCJOBSSP T - where T.PRN = NFCJOBS - and T.COMPANY = NCOMPANY - and T.RN in (select REGEXP_SUBSTR(SFCJOBSSP_LIST, '[^;]+', 1, level) NRN - from DUAL - connect by INSTR(SFCJOBSSP_LIST, ';', 1, level - 1) > 0) - and T.EQUIP_PLAN = NFCEQUIPMENT) - loop - /* Если дата начала факт указана */ - if (REC.BEG_FACT is not null) then - P_EXCEPTION(0, 'Операция "%s" исполняется.', REC.OPER_NUMB); - end if; - /* Исключаем оборудование */ - P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, - NCOMPANY => REC.COMPANY, - SNUMB => REC.NUMB, - NTBOPERMODESP => REC.TBOPERMODESP, - SBARCODE => REC.BARCODE, - NFACEACC => REC.FACEACC, - NMATRES => REC.MATRES, - NNOMCLASSIF => REC.NOMCLASSIF, - NARTICLE => REC.ARTICLE, - NFCROUTSHTSP => REC.FCROUTSHTSP, - SOPER_NUMB => REC.OPER_NUMB, - NOPER_TPS => REC.OPER_TPS, - SOPER_UK => REC.OPER_UK, - NSIGN_CONTRL => REC.SIGN_CONTRL, - NMANPOWER => REC.MANPOWER, - NCATEGORY => REC.CATEGORY, - DBEG_PLAN => REC.BEG_PLAN, - DEND_PLAN => REC.END_PLAN, - DBEG_FACT => REC.BEG_FACT, - DEND_FACT => REC.END_FACT, - NQUANT_PLAN => REC.QUANT_PLAN, - NQUANT_FACT => REC.QUANT_FACT, - NNORM => REC.NORM, - NT_SHT_FACT => REC.T_SHT_FACT, - NT_PZ_PLAN => REC.T_PZ_PLAN, - NT_PZ_FACT => REC.T_PZ_FACT, - NT_VSP_PLAN => REC.T_VSP_PLAN, - NT_VSP_FACT => REC.T_VSP_FACT, - NT_O_PLAN => REC.T_O_PLAN, - NT_O_FACT => REC.T_O_FACT, - NNORM_TYPE => REC.NORM_TYPE, - NSIGN_P_R => REC.SIGN_P_R, - NLABOUR_PLAN => REC.LABOUR_PLAN, - NLABOUR_FACT => REC.LABOUR_FACT, - NCOST_PLAN => REC.COST_PLAN, - NCOST_FACT => REC.COST_FACT, - NCOST_FOR => REC.COST_FOR, - NCURNAMES => REC.CURNAMES, - NPERFORM_PLAN => REC.PERFORM_PLAN, - NPERFORM_FACT => REC.PERFORM_FACT, - NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, - NSTAFFGRP_FACT => REC.STAFFGRP_FACT, - NEQUIP_PLAN => null, - NEQUIP_FACT => REC.EQUIP_FACT, - NLOSTTYPE => REC.LOSTTYPE, - NLOSTDEFL => REC.LOSTDEFL, - NFOREMAN => REC.FOREMAN, - NINSPECTOR => REC.INSPECTOR, - DOTK_DATE => REC.OTK_DATE, - NSUBDIV => REC.SUBDIV, - NEQCONFIG => REC.EQCONFIG, - SNOTE => REC.NOTE, - NMUNIT => REC.MUNIT); - end loop; - end FCJOBSSP_EXC_FCEQUIPMENT; + /* Исключаем станок */ + P_FCJOBSSP_BASE_UPDATE(NRN => RFCJOBSSP.RN, + NCOMPANY => RFCJOBSSP.COMPANY, + SNUMB => RFCJOBSSP.NUMB, + NTBOPERMODESP => RFCJOBSSP.TBOPERMODESP, + SBARCODE => RFCJOBSSP.BARCODE, + NFACEACC => RFCJOBSSP.FACEACC, + NMATRES => RFCJOBSSP.MATRES, + NNOMCLASSIF => RFCJOBSSP.NOMCLASSIF, + NARTICLE => RFCJOBSSP.ARTICLE, + NFCROUTSHTSP => RFCJOBSSP.FCROUTSHTSP, + SOPER_NUMB => RFCJOBSSP.OPER_NUMB, + NOPER_TPS => RFCJOBSSP.OPER_TPS, + SOPER_UK => RFCJOBSSP.OPER_UK, + NSIGN_CONTRL => RFCJOBSSP.SIGN_CONTRL, + NMANPOWER => RFCJOBSSP.MANPOWER, + NCATEGORY => RFCJOBSSP.CATEGORY, + DBEG_PLAN => RFCJOBSSP.BEG_PLAN, + DEND_PLAN => RFCJOBSSP.END_PLAN, + DBEG_FACT => RFCJOBSSP.BEG_FACT, + DEND_FACT => RFCJOBSSP.END_FACT, + NQUANT_PLAN => RFCJOBSSP.QUANT_PLAN, + NQUANT_FACT => RFCJOBSSP.QUANT_FACT, + NNORM => RFCJOBSSP.NORM, + NT_SHT_FACT => RFCJOBSSP.T_SHT_FACT, + NT_PZ_PLAN => RFCJOBSSP.T_PZ_PLAN, + NT_PZ_FACT => RFCJOBSSP.T_PZ_FACT, + NT_VSP_PLAN => RFCJOBSSP.T_VSP_PLAN, + NT_VSP_FACT => RFCJOBSSP.T_VSP_FACT, + NT_O_PLAN => RFCJOBSSP.T_O_PLAN, + NT_O_FACT => RFCJOBSSP.T_O_FACT, + NNORM_TYPE => RFCJOBSSP.NORM_TYPE, + NSIGN_P_R => RFCJOBSSP.SIGN_P_R, + NLABOUR_PLAN => RFCJOBSSP.LABOUR_PLAN, + NLABOUR_FACT => RFCJOBSSP.LABOUR_FACT, + NCOST_PLAN => RFCJOBSSP.COST_PLAN, + NCOST_FACT => RFCJOBSSP.COST_FACT, + NCOST_FOR => RFCJOBSSP.COST_FOR, + NCURNAMES => RFCJOBSSP.CURNAMES, + NPERFORM_PLAN => RFCJOBSSP.PERFORM_PLAN, + NPERFORM_FACT => RFCJOBSSP.PERFORM_FACT, + NSTAFFGRP_PLAN => RFCJOBSSP.STAFFGRP_PLAN, + NSTAFFGRP_FACT => RFCJOBSSP.STAFFGRP_FACT, + NEQUIP_PLAN => RFCJOBSSP.EQUIP_PLAN, + NEQUIP_FACT => RFCJOBSSP.EQUIP_FACT, + NLOSTTYPE => RFCJOBSSP.LOSTTYPE, + NLOSTDEFL => RFCJOBSSP.LOSTDEFL, + NFOREMAN => RFCJOBSSP.FOREMAN, + NINSPECTOR => RFCJOBSSP.INSPECTOR, + DOTK_DATE => RFCJOBSSP.OTK_DATE, + NSUBDIV => RFCJOBSSP.SUBDIV, + NEQCONFIG => null, + SNOTE => RFCJOBSSP.NOTE, + NMUNIT => RFCJOBSSP.MUNIT); + end FCJOBSSP_EXC_EQCONFIG; - /* Включение оборудование в строку сменного задания */ - procedure FCJOBSSP_INC_FCEQUIPMENT + /* Включение станка в строку сменного задания */ + procedure FCJOBSSP_INC_EQCONFIG ( - NFCEQUIPMENT in number, -- Рег. номер оборудования - NFCJOBS in number, -- Рег. номер сменного задания - SFCJOBSSP_LIST in varchar2 -- Список операций сменного задания + NEQCONFIG in number, -- Рег. номер состава оборудования + NFCJOBSSP in number, -- Рег. номер строки сменного задания + NQUANT_PLAN in number -- Включаемое количество ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - begin - /* Если оборудование выбрано */ - if (NFCEQUIPMENT is not null) then - /* Проверяем наличие оборудования */ - UTL_FCEQUIPMENT_EXISTS(NFCEQUIPMENT => NFCEQUIPMENT, NCOMPANY => NCOMPANY); - else - P_EXCEPTION(0, 'Оборудование не определено.'); - end if; - /* Если список операций не указан */ - if (SFCJOBSSP_LIST is null) then - P_EXCEPTION(0, 'Список операций не определен.'); - end if; - /* Цикл по операциям сменного задания */ - for REC in (select T.* - from FCJOBSSP T - where T.PRN = NFCJOBS - and T.COMPANY = NCOMPANY - and T.RN in (select REGEXP_SUBSTR(SFCJOBSSP_LIST, '[^;]+', 1, level) NRN - from DUAL - connect by INSTR(SFCJOBSSP_LIST, ';', 1, level - 1) > 0)) - loop - /* Если дата начала факт указана */ - if (REC.BEG_FACT is not null) then - P_EXCEPTION(0, 'Операция "%s" исполняется.', REC.OPER_NUMB); + NQUANT_REMN PKG_STD.TLNUMBER; -- Остаток количества + RFCJOBSSP FCJOBSSP%rowtype; -- Запись строки сменного задания + NNEW_FCJOBSSP PKG_STD.TREF; -- Рег. номер новой строки сменного задания + NROUTLST PKG_STD.TREF; -- Рег. номер связанного МЛ + NROUTLSTSP PKG_STD.TREF; -- Рег. номер связанной строки МЛ + + /* Пересчет "Трудоемкость план" строки сменного задания */ + procedure LABOUR_PLAN_RECALC + ( + RFCJOBSSP in out FCJOBSSP%rowtype, -- Запись строки сменного задания + NQUANT_PLAN in number -- Количество план + ) + is + begin + /* Если не установлен признак "То план" */ + if ((RFCJOBSSP.T_O_PLAN is null) or ((RFCJOBSSP.T_O_PLAN is not null) and (RFCJOBSSP.T_O_PLAN = 0))) then + /* Если установлен признак "На партию выпуска" */ + if (RFCJOBSSP.SIGN_P_R = 1) then + RFCJOBSSP.LABOUR_PLAN := RFCJOBSSP.NORM; + else + RFCJOBSSP.LABOUR_PLAN := RFCJOBSSP.NORM * NQUANT_PLAN; + end if; + else + /* Если установлен признак "На партию выпуска" */ + if (RFCJOBSSP.SIGN_P_R = 1) then + RFCJOBSSP.LABOUR_PLAN := RFCJOBSSP.T_O_PLAN + COALESCE(RFCJOBSSP.T_PZ_PLAN, 0) + + COALESCE(RFCJOBSSP.T_VSP_PLAN, 0); + else + RFCJOBSSP.LABOUR_PLAN := RFCJOBSSP.T_O_PLAN * NQUANT_PLAN + COALESCE(RFCJOBSSP.T_PZ_PLAN, 0) + + COALESCE(RFCJOBSSP.T_VSP_PLAN, 0); + end if; end if; - /* Включаем в задание */ - P_FCJOBSSP_BASE_UPDATE(NRN => REC.RN, - NCOMPANY => REC.COMPANY, - SNUMB => REC.NUMB, - NTBOPERMODESP => REC.TBOPERMODESP, - SBARCODE => REC.BARCODE, - NFACEACC => REC.FACEACC, - NMATRES => REC.MATRES, - NNOMCLASSIF => REC.NOMCLASSIF, - NARTICLE => REC.ARTICLE, - NFCROUTSHTSP => REC.FCROUTSHTSP, - SOPER_NUMB => REC.OPER_NUMB, - NOPER_TPS => REC.OPER_TPS, - SOPER_UK => REC.OPER_UK, - NSIGN_CONTRL => REC.SIGN_CONTRL, - NMANPOWER => REC.MANPOWER, - NCATEGORY => REC.CATEGORY, - DBEG_PLAN => REC.BEG_PLAN, - DEND_PLAN => REC.END_PLAN, - DBEG_FACT => REC.BEG_FACT, - DEND_FACT => REC.END_FACT, - NQUANT_PLAN => REC.QUANT_PLAN, - NQUANT_FACT => REC.QUANT_FACT, - NNORM => REC.NORM, - NT_SHT_FACT => REC.T_SHT_FACT, - NT_PZ_PLAN => REC.T_PZ_PLAN, - NT_PZ_FACT => REC.T_PZ_FACT, - NT_VSP_PLAN => REC.T_VSP_PLAN, - NT_VSP_FACT => REC.T_VSP_FACT, - NT_O_PLAN => REC.T_O_PLAN, - NT_O_FACT => REC.T_O_FACT, - NNORM_TYPE => REC.NORM_TYPE, - NSIGN_P_R => REC.SIGN_P_R, - NLABOUR_PLAN => REC.LABOUR_PLAN, - NLABOUR_FACT => REC.LABOUR_FACT, - NCOST_PLAN => REC.COST_PLAN, - NCOST_FACT => REC.COST_FACT, - NCOST_FOR => REC.COST_FOR, - NCURNAMES => REC.CURNAMES, - NPERFORM_PLAN => REC.PERFORM_PLAN, - NPERFORM_FACT => REC.PERFORM_FACT, - NSTAFFGRP_PLAN => REC.STAFFGRP_PLAN, - NSTAFFGRP_FACT => REC.STAFFGRP_FACT, - NEQUIP_PLAN => NFCEQUIPMENT, - NEQUIP_FACT => REC.EQUIP_FACT, - NLOSTTYPE => REC.LOSTTYPE, - NLOSTDEFL => REC.LOSTDEFL, - NFOREMAN => REC.FOREMAN, - NINSPECTOR => REC.INSPECTOR, - DOTK_DATE => REC.OTK_DATE, - NSUBDIV => REC.SUBDIV, - NEQCONFIG => REC.EQCONFIG, - SNOTE => REC.NOTE, - NMUNIT => REC.MUNIT); - end loop; - end FCJOBSSP_INC_FCEQUIPMENT; + end LABOUR_PLAN_RECALC; + begin + /* Если включаемое количество меньше 0 или пустое */ + if ((NQUANT_PLAN is null) or ((NQUANT_PLAN is not null) and (NQUANT_PLAN <= 0))) then + P_EXCEPTION(0, 'Невозможно включить указанное количество.'); + end if; + /* Если рабочее место выбрано */ + if (NEQCONFIG is not null) then + /* Проверяем наличие состава оборудования */ + UTL_EQCONFIG_EXISTS(NEQCONFIG => NEQCONFIG, NCOMPANY => NCOMPANY); + else + P_EXCEPTION(0, 'Рабочее место не определено.'); + end if; + /* Если рег. номер строки не указан */ + if (NFCJOBSSP is null) then + P_EXCEPTION(0, 'Строка сменного задания не определена.'); + end if; + /* Считываем запись строки сменного задания */ + RFCJOBSSP := UTL_FCJOBSSP_GET(NCOMPANY => NCOMPANY, NFCJOBSSP => NFCJOBSSP); + /* Если дата начала факт указана */ + if (RFCJOBSSP.BEG_FACT is not null) then + P_EXCEPTION(0, 'Указанная строка сменного задания исполняется.'); + end if; + /* Если включаемое количество больше текущего */ + if (NQUANT_PLAN > RFCJOBSSP.QUANT_PLAN) then + P_EXCEPTION(0, + 'Указанное количество превышает текущее "Количество план" строки.'); + end if; + /* Рассчитываем остаточное количество */ + NQUANT_REMN := RFCJOBSSP.QUANT_PLAN - NQUANT_PLAN; + /* Пересчитываем "Количество план" */ + LABOUR_PLAN_RECALC(RFCJOBSSP => RFCJOBSSP, NQUANT_PLAN => NQUANT_PLAN); + /* Включаем станок */ + P_FCJOBSSP_BASE_UPDATE(NRN => RFCJOBSSP.RN, + NCOMPANY => RFCJOBSSP.COMPANY, + SNUMB => RFCJOBSSP.NUMB, + NTBOPERMODESP => RFCJOBSSP.TBOPERMODESP, + SBARCODE => RFCJOBSSP.BARCODE, + NFACEACC => RFCJOBSSP.FACEACC, + NMATRES => RFCJOBSSP.MATRES, + NNOMCLASSIF => RFCJOBSSP.NOMCLASSIF, + NARTICLE => RFCJOBSSP.ARTICLE, + NFCROUTSHTSP => RFCJOBSSP.FCROUTSHTSP, + SOPER_NUMB => RFCJOBSSP.OPER_NUMB, + NOPER_TPS => RFCJOBSSP.OPER_TPS, + SOPER_UK => RFCJOBSSP.OPER_UK, + NSIGN_CONTRL => RFCJOBSSP.SIGN_CONTRL, + NMANPOWER => RFCJOBSSP.MANPOWER, + NCATEGORY => RFCJOBSSP.CATEGORY, + DBEG_PLAN => RFCJOBSSP.BEG_PLAN, + DEND_PLAN => RFCJOBSSP.END_PLAN, + DBEG_FACT => RFCJOBSSP.BEG_FACT, + DEND_FACT => RFCJOBSSP.END_FACT, + NQUANT_PLAN => NQUANT_PLAN, + NQUANT_FACT => RFCJOBSSP.QUANT_FACT, + NNORM => RFCJOBSSP.NORM, + NT_SHT_FACT => RFCJOBSSP.T_SHT_FACT, + NT_PZ_PLAN => RFCJOBSSP.T_PZ_PLAN, + NT_PZ_FACT => RFCJOBSSP.T_PZ_FACT, + NT_VSP_PLAN => RFCJOBSSP.T_VSP_PLAN, + NT_VSP_FACT => RFCJOBSSP.T_VSP_FACT, + NT_O_PLAN => RFCJOBSSP.T_O_PLAN, + NT_O_FACT => RFCJOBSSP.T_O_FACT, + NNORM_TYPE => RFCJOBSSP.NORM_TYPE, + NSIGN_P_R => RFCJOBSSP.SIGN_P_R, + NLABOUR_PLAN => RFCJOBSSP.LABOUR_PLAN, + NLABOUR_FACT => RFCJOBSSP.LABOUR_FACT, + NCOST_PLAN => RFCJOBSSP.COST_PLAN, + NCOST_FACT => RFCJOBSSP.COST_FACT, + NCOST_FOR => RFCJOBSSP.COST_FOR, + NCURNAMES => RFCJOBSSP.CURNAMES, + NPERFORM_PLAN => RFCJOBSSP.PERFORM_PLAN, + NPERFORM_FACT => RFCJOBSSP.PERFORM_FACT, + NSTAFFGRP_PLAN => RFCJOBSSP.STAFFGRP_PLAN, + NSTAFFGRP_FACT => RFCJOBSSP.STAFFGRP_FACT, + NEQUIP_PLAN => RFCJOBSSP.EQUIP_PLAN, + NEQUIP_FACT => RFCJOBSSP.EQUIP_FACT, + NLOSTTYPE => RFCJOBSSP.LOSTTYPE, + NLOSTDEFL => RFCJOBSSP.LOSTDEFL, + NFOREMAN => RFCJOBSSP.FOREMAN, + NINSPECTOR => RFCJOBSSP.INSPECTOR, + DOTK_DATE => RFCJOBSSP.OTK_DATE, + NSUBDIV => RFCJOBSSP.SUBDIV, + NEQCONFIG => NEQCONFIG, + SNOTE => RFCJOBSSP.NOTE, + NMUNIT => RFCJOBSSP.MUNIT); + /* Если есть остаток */ + if (NQUANT_REMN <> 0) then + /* Обнуляем дату отработки */ + RFCJOBSSP.WORK_DATE := null; + /* Получаем новый номер */ + P_FCJOBSSP_GETNEXTNUMB(NCOMPANY => NCOMPANY, NPRN => RFCJOBSSP.PRN, SNUMB => RFCJOBSSP.NUMB); + /* Если штрихкод был указан */ + if (RFCJOBSSP.BARCODE is not null) then + /* Получаем новый штрихкод */ + P_FCJOBSSP_GET_BARCODE(NCOMPANY => NCOMPANY, NRN => RFCJOBSSP.RN, SBARCODE => RFCJOBSSP.BARCODE); + end if; + /* Пересчитываем "Количество план" */ + LABOUR_PLAN_RECALC(RFCJOBSSP => RFCJOBSSP, NQUANT_PLAN => NQUANT_REMN); + /* Размножаем запись */ + P_FCJOBSSP_BASE_INSERT(NCOMPANY => RFCJOBSSP.COMPANY, + NPRN => RFCJOBSSP.PRN, + SNUMB => RFCJOBSSP.NUMB, + NTBOPERMODESP => RFCJOBSSP.TBOPERMODESP, + SBARCODE => RFCJOBSSP.BARCODE, + NFACEACC => RFCJOBSSP.FACEACC, + NMATRES => RFCJOBSSP.MATRES, + NNOMCLASSIF => RFCJOBSSP.NOMCLASSIF, + NARTICLE => RFCJOBSSP.ARTICLE, + NFCROUTSHTSP => RFCJOBSSP.FCROUTSHTSP, + SOPER_NUMB => RFCJOBSSP.OPER_NUMB, + NOPER_TPS => RFCJOBSSP.OPER_TPS, + SOPER_UK => RFCJOBSSP.OPER_UK, + NSIGN_CONTRL => RFCJOBSSP.SIGN_CONTRL, + NMANPOWER => RFCJOBSSP.MANPOWER, + NCATEGORY => RFCJOBSSP.CATEGORY, + DBEG_PLAN => RFCJOBSSP.BEG_PLAN, + DEND_PLAN => RFCJOBSSP.END_PLAN, + DBEG_FACT => RFCJOBSSP.BEG_FACT, + DEND_FACT => RFCJOBSSP.END_FACT, + NQUANT_PLAN => NQUANT_REMN, + NQUANT_FACT => RFCJOBSSP.QUANT_FACT, + NNORM => RFCJOBSSP.NORM, + NT_SHT_FACT => RFCJOBSSP.T_SHT_FACT, + NT_PZ_PLAN => RFCJOBSSP.T_PZ_PLAN, + NT_PZ_FACT => RFCJOBSSP.T_PZ_FACT, + NT_VSP_PLAN => RFCJOBSSP.T_VSP_PLAN, + NT_VSP_FACT => RFCJOBSSP.T_VSP_FACT, + NT_O_PLAN => RFCJOBSSP.T_O_PLAN, + NT_O_FACT => RFCJOBSSP.T_O_FACT, + NNORM_TYPE => RFCJOBSSP.NORM_TYPE, + NSIGN_P_R => RFCJOBSSP.SIGN_P_R, + NLABOUR_PLAN => RFCJOBSSP.LABOUR_PLAN, + NLABOUR_FACT => RFCJOBSSP.LABOUR_FACT, + NCOST_PLAN => RFCJOBSSP.COST_PLAN, + NCOST_FACT => RFCJOBSSP.COST_FACT, + NCOST_FOR => RFCJOBSSP.COST_FOR, + NCURNAMES => RFCJOBSSP.CURNAMES, + NPERFORM_PLAN => RFCJOBSSP.PERFORM_PLAN, + NPERFORM_FACT => RFCJOBSSP.PERFORM_FACT, + NSTAFFGRP_PLAN => RFCJOBSSP.STAFFGRP_PLAN, + NSTAFFGRP_FACT => RFCJOBSSP.STAFFGRP_FACT, + NEQUIP_PLAN => RFCJOBSSP.EQUIP_PLAN, + NEQUIP_FACT => RFCJOBSSP.EQUIP_FACT, + NLOSTTYPE => RFCJOBSSP.LOSTTYPE, + NLOSTDEFL => RFCJOBSSP.LOSTDEFL, + NFOREMAN => RFCJOBSSP.FOREMAN, + NINSPECTOR => RFCJOBSSP.INSPECTOR, + DOTK_DATE => RFCJOBSSP.OTK_DATE, + NSUBDIV => RFCJOBSSP.SUBDIV, + NEQCONFIG => null, + NSIGN_AR => 1, + SNOTE => RFCJOBSSP.NOTE, + NMUNIT => RFCJOBSSP.MUNIT, + NPRIOR_ORDER => RFCJOBSSP.PRIOR_ORDER, + NPRIOR_PARTY => RFCJOBSSP.PRIOR_PARTY, + DEXEC_DATE => RFCJOBSSP.EXEC_DATE, + DREL_DATE => RFCJOBSSP.REL_DATE, + NRN => NNEW_FCJOBSSP); + + /* связанные маршрутный лист и строка маршрутного листа */ + NROUTLST := F_DOCLINKS_LINK_IN_DOC(SOUT_UNITCODE => 'CostJobsSpecs', + NOUT_DOCUMENT => RFCJOBSSP.RN, + SIN_UNITCODE => 'CostRouteLists'); + NROUTLSTSP := F_DOCLINKS_LINK_IN_DOC(SOUT_UNITCODE => 'CostJobsSpecs', + NOUT_DOCUMENT => RFCJOBSSP.RN, + SIN_UNITCODE => 'CostRouteListsSpecs'); + + /* связывание с новой строкой сменного задания */ + if (NROUTLST is not null) and (NROUTLSTSP is not null) then + /* Создаем связь с заголовоком МЛ */ + P_LINKSALL_LINK_DIRECT(NCOMPANY => NCOMPANY, + SIN_UNITCODE => 'CostRouteLists', + NIN_DOCUMENT => NROUTLST, + NIN_PRN_DOCUMENT => null, + DIN_IN_DATE => sysdate, + NIN_STATUS => 0, + SOUT_UNITCODE => 'CostJobsSpecs', + NOUT_DOCUMENT => NNEW_FCJOBSSP, + NOUT_PRN_DOCUMENT => RFCJOBSSP.PRN, + DOUT_IN_DATE => sysdate, + NOUT_STATUS => 0); + /* Создаем связь со спецификацией МЛ */ + P_LINKSALL_LINK_DIRECT(NCOMPANY => NCOMPANY, + SIN_UNITCODE => 'CostRouteListsSpecs', + NIN_DOCUMENT => NROUTLSTSP, + NIN_PRN_DOCUMENT => NROUTLST, + DIN_IN_DATE => sysdate, + NIN_STATUS => 0, + SOUT_UNITCODE => 'CostJobsSpecs', + NOUT_DOCUMENT => NNEW_FCJOBSSP, + NOUT_PRN_DOCUMENT => RFCJOBSSP.PRN, + DOUT_IN_DATE => sysdate, + NOUT_STATUS => 0); + end if; + end if; + end FCJOBSSP_INC_EQCONFIG; - /* Получение таблицы оборудования подразделения */ - procedure FCEQUIPMENT_DG_GET + /* Получение спецификации сменного задания */ + procedure FCJOBSSP_DG_GET ( + NFCJOBS in number, -- Рег. номер сменного задания NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -4321,17 +4551,17 @@ create or replace package body PKG_P8PANELS_MECHREC as ICURSOR integer; -- Курсор для исполнения запроса NVERSION PKG_STD.TREF; -- Версия контрагентов begin - /* Считываем версию контрагентов */ - FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); /* Читем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Считываем версию контрагентов */ + FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); /* Преобразуем номер и размер страницы в номер строк с и по */ PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, NPAGE_SIZE => NPAGE_SIZE, NROW_FROM => NROW_FROM, NROW_TO => NROW_TO); /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 8); /* Описываем колонки таблицы данных */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NRN', @@ -4341,341 +4571,260 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NSELECT', SCAPTION => 'Выбран', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NPRIOR_PARTY', + SCAPTION => 'Приоритет партии', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true); + NWIDTH => 80); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SFCROUTLST', + SCAPTION => 'МЛ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SMATRES', + SCAPTION => 'ДСЕ', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SOPER', + SCAPTION => 'Операция', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + BORDER => true); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NQUANT_PLAN', + SCAPTION => 'Количество', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLABOUR_PLAN', + SCAPTION => 'Трудоемкость', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SEQCONFIG', + SCAPTION => 'Станок', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NEQCONFIG', + SCAPTION => 'Рег. номер станка', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NEQUIP_PLAN', + SCAPTION => 'Рег. номер оборудования', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DBEG_FACT', + SCAPTION => 'Дата начала факт', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE, + BVISIBLE => false); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.PRIOR_PARTY NPRIOR_PARTY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(L I_DOCLINKS_OUT_DOCUMENT)')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TRIM(D.DOCNUMB) || '' '' || to_char(D.DOCDATE, ''dd.mm.yyyy'')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS L,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLST D'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where L.OUT_DOCUMENT = T.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT = D.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.ROWLIMIT(NLIMIT => 1, BAND => true) || ') SFCROUTLST,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' MR.CODE || '' '' || MR."NAME" SMATRES,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TRIM(T.OPER_NUMB) || '' '' || ( select coalesce(O."NAME", T.OPER_UK) from FCOPERTYPES O where T.OPER_TPS = O.RN ) SOPER,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN NQUANT_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.LABOUR_PLAN NLABOUR_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select IQ.CODE from EQCONFIG IQ where T.EQCONFIG = IQ.RN) SEQCONFIG,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.EQCONFIG NEQCONFIG,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.EQUIP_PLAN NEQUIP_PLAN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.BEG_FACT DBEG_FACT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMATRESOURCE MR'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCJOBS'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.SIGN_CONTRL = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and MR.RN = T.MATRES'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Если сортировки не указаны */ + if (CORDERS is not null) then + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + else + /* Устанавливаем стандартную сортировку */ + CSQL := replace(CSQL, '%ORDER_BY%', 'order by T.PRIOR_PARTY asc, T.BEG_PLAN asc'); + end if; + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCJOBS', NVALUE => NFCJOBS); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 8); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 9); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 10); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 11); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 12); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NPRIOR_PARTY', + ICURSOR => ICURSOR, + NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SFCROUTLST', + ICURSOR => ICURSOR, + NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SMATRES', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SOPER', ICURSOR => ICURSOR, NPOSITION => 5); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NQUANT_PLAN', + ICURSOR => ICURSOR, + NPOSITION => 6); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NLABOUR_PLAN', + ICURSOR => ICURSOR, + NPOSITION => 7); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SEQCONFIG', + ICURSOR => ICURSOR, + NPOSITION => 8); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NEQCONFIG', + ICURSOR => ICURSOR, + NPOSITION => 9); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NEQUIP_PLAN', + ICURSOR => ICURSOR, + NPOSITION => 10); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW, + SNAME => 'DBEG_FACT', + ICURSOR => ICURSOR, + NPOSITION => 11); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end FCJOBSSP_DG_GET; + + /* Получение составов оборудования подразделения */ + procedure EQCONFIG_DG_GET + ( + NFCJOBS in number, -- Рег. номер сменного задания + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + CORDERS in clob, -- Сортировки + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + NSUBDIV PKG_STD.TNUMBER; -- Рег. номер подразделения пользователя + NEQCONFIG PKG_STD.TNUMBER; -- Рег. номер станка + NSUM_LABOUR PKG_STD.TLNUMBER; -- Сумма трудоемкости + NSUM_WORK_TIME PKG_STD.TLNUMBER; -- Сумма рабочего времени + NLOADING PKG_STD.TLNUMBER; -- Загрузка оборудования + NDICMUNTS_MIN PKG_STD.TREF; -- Рег. номер ед. изм. минут + NDICMUNTS_WD PKG_STD.TREF; -- Рег. номер ед. изм. нормочасов + begin + /* Читем сортировки */ + RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 4); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NSELECT', + SCAPTION => 'Выбран', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SCODE', - SCAPTION => 'Код', + SCAPTION => 'Станок', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true); + BORDER => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SNAME', - SCAPTION => 'Наименование', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, + SNAME => 'NSUM_LABOUR', + SCAPTION => 'Загрузка в н/ч', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BORDER => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NLOADING', - SCAPTION => 'Загрузка', + SCAPTION => 'Загрузка в %', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, BORDER => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NCOEFF', - SCAPTION => 'Норматив загрузки', + SNAME => 'NEQUIPMENT', + SCAPTION => 'Рег. номер оборудования', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); - /* Обходим данные */ - begin - /* Добавляем подсказку совместимости */ - CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); - /* Формируем запрос */ - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.CODE SCODE,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.NAME SNAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select SUM(case'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when S.MUNIT is not null then'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' S.MUNIT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' S.LABOUR_PLAN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.TIME_MUNIT), 3)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCEQUIPMENT F'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FCJOBSSP S on S.EQUIP_PLAN = F.RN and S.WORK_DATE is null'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' left outer join FCJOBS J on J.RN = S.PRN and F.SUBDIV = J.SUBDIV'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.RN = T.RN) NLOADING,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.COEFF NCOEFF'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCEQUIPMENT T'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.SUBDIV is not null'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(T.COMPANY, T.SUBDIV, UTILIZER()) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = T.CRN)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); - /* Учтём сортировки */ - PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); - /* Разбираем его */ - ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); - PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); - /* Делаем подстановку параметров */ - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); - /*PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NVERSION', NVALUE => NVERSION); - PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE', DVALUE => sysdate);*/ - /* Описываем структуру записи курсора */ - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); - /* Делаем выборку */ - if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then - null; - end if; - /* Обходим выбранные записи */ - while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) - loop - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SCODE', - ICURSOR => ICURSOR, - NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SNAME', - ICURSOR => ICURSOR, - NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NLOADING', - ICURSOR => ICURSOR, - NPOSITION => 4); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NCOEFF', - ICURSOR => ICURSOR, - NPOSITION => 5); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); - end loop; - exception - when others then - PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); - raise; - end; - /* Сериализуем описание */ - COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end FCEQUIPMENT_DG_GET; - - /* Получение таблицы маршрутных листов спецификации сменного задания */ - procedure FCJOBSSP_FCROUTLST_DG_GET - ( - NFCJOBS in number, -- Рег. номер сменного задания - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки - RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы - RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы - NROW_FROM PKG_STD.TREF; -- Номер строки с - NROW_TO PKG_STD.TREF; -- Номер строки по - CSQL clob; -- Буфер для запроса - ICURSOR integer; -- Курсор для исполнения запроса - begin - /* Читем сортировки */ - RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); - /* Преобразуем номер и размер страницы в номер строк с и по */ - PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, - NPAGE_SIZE => NPAGE_SIZE, - NROW_FROM => NROW_FROM, - NROW_TO => NROW_TO); - /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); - /* Описываем колонки таблицы данных */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NRN', - SCAPTION => 'Рег. номер', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NSELECT', - SCAPTION => 'Выбран', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SFCROUTLST_INFO', - SCAPTION => 'Номер МЛ', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SMATRES', - SCAPTION => 'Материальный ресурс', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NPRIOR_ORDER', - SCAPTION => 'Приоритет', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - BORDER => true); - /* Обходим данные */ - begin - /* Добавляем подсказку совместимости */ - CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); - /* Формируем запрос */ - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select F.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' PKG_DOCUMENT.MAKE_NUMBER(F.DOCTYPE, F.DOCPREF, F.DOCNUMB, F.DOCDATE) SFCROUTLST_INFO,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F2.CODE || '', '' || F2.NAME SMATRES,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F.PRIOR_ORDER NPRIOR_ORDER'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCROUTLST F,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCMATRESOURCE F2'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.RN in (select FL.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP JS,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLST FL,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCROUTLSTSP SP'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where JS.PRN = :NFCJOBS'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and JS.COMPANY = :NCOMPANY'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SP.RN = (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(L I_DOCLINKS_OUT_DOCUMENT)') || ' MAX(L.IN_DOCUMENT)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS L'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where L.OUT_DOCUMENT = JS.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteListsSpecs') || ')'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SP.STATE = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(SP.COMPANY, SP.SUBDIV, UTILIZER()) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and FL.RN = SP.PRN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = JS.CRN)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP.JUR_PERS = JS.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobs') || ') '); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by FL.RN)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F2.RN = F.MATRES'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); - /* Учтём сортировки */ - PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); - /* Разбираем его */ - ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); - PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); - /* Делаем подстановку параметров */ - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCJOBS', NVALUE => NFCJOBS); - /* Описываем структуру записи курсора */ - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); - /* Делаем выборку */ - if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then - null; - end if; - /* Обходим выбранные записи */ - while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) - loop - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SFCROUTLST_INFO', - ICURSOR => ICURSOR, - NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SMATRES', - ICURSOR => ICURSOR, - NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NPRIOR_ORDER', - ICURSOR => ICURSOR, - NPOSITION => 4); - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); - end loop; - exception - when others then - PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); - raise; - end; - /* Сериализуем описание */ - COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end FCJOBSSP_FCROUTLST_DG_GET; - - /* Получение спецификации сменного задания по отмеченным маршрутным листам */ - procedure FCJOBSSP_DG_GET - ( - NFCJOBS in number, -- Рег. номер сменного задания - NIDENT in number, -- Идентификатор процесса - NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) - NPAGE_SIZE in number, -- Количество записей на странице (0 - все) - CORDERS in clob, -- Сортировки - NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ - COUT out clob -- Сериализованная таблица данных - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса - RO PKG_P8PANELS_VISUAL.TORDERS; -- Сортировки - RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы - RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы - NROW_FROM PKG_STD.TREF; -- Номер строки с - NROW_TO PKG_STD.TREF; -- Номер строки по - CSQL clob; -- Буфер для запроса - ICURSOR integer; -- Курсор для исполнения запроса - begin - /* Читем сортировки */ - RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); - /* Преобразуем номер и размер страницы в номер строк с и по */ - PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, - NPAGE_SIZE => NPAGE_SIZE, - NROW_FROM => NROW_FROM, - NROW_TO => NROW_TO); - /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); - /* Описываем колонки таблицы данных */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NRN', - SCAPTION => 'Рег. номер', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NSELECT', - SCAPTION => 'Выбран', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SOPER_NUMB', - SCAPTION => 'Номер операции', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SOPER_NAME', - SCAPTION => 'Наименование операции', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NISSUED', - SCAPTION => 'Выдано', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NISSUE', - SCAPTION => 'Выдать', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - BORDER => true); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NEQUIP_PLAN', - SCAPTION => 'Рег. номер оборудования план', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => false, - BORDER => true); - /* Если список выбраныых маршрутных листов не пустой */ - if (NIDENT is not null) then - --if (SFCROUTLST_LIST is not null) then + /* Считываем единицу измерения минут */ + FIND_DICMUNTS_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SDICMUNTS_MIN, + NRN => NDICMUNTS_MIN); + /* Считываем единицу измерения минут */ + FIND_DICMUNTS_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + SMEAS_MNEMO => SDICMUNTS_WD, + NRN => NDICMUNTS_WD); + /* Считываем рег. номер подразделения пользователя */ + NSUBDIV := UTL_SUBDIV_RN_GET(NCOMPANY => NCOMPANY, SUSER => UTILIZER()); + /* Если подразделение считано */ + if (NSUBDIV is not null) then /* Обходим данные */ begin /* Добавляем подсказку совместимости */ @@ -4684,41 +4833,14 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select TMP.NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.SOPER_NUMB,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.SOPER_NAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.NISSUED,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.NQUANT_PLAN - TMP.NQUANT_FACT - TMP.NISSUED NISSUE,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TMP.NEQUIP_PLAN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select ' || PKG_SQL_BUILD.SET_HINT(SHINT => 'INDEX(L I_DOCLINKS_OUT_DOCUMENT)') || ' T.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.OPER_NUMB SOPER_NUMB,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select coalesce(O.NAME, T.OPER_UK) from FCOPERTYPES O where T.OPER_TPS = O.RN) SOPER_NAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select sum(S.QUANT_PLAN)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP S,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS DL'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where S.PRN = T.PRN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and S.WORK_DATE is null'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.IN_DOCUMENT = L.IN_DOCUMENT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and DL.OUT_DOCUMENT = S.RN) NISSUED,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN as NQUANT_PLAN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_FACT as NQUANT_FACT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.EQUIP_PLAN as NEQUIP_PLAN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP T,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' DOCLINKS L'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.PRN = :NFCJOBS'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.OUT_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobsSpecs')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and L.IN_DOCUMENT in (select SL."DOCUMENT"'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SELECTLIST SL'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SL.IDENT = :NIDENT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostRouteLists')); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SL.ACTIONCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'P8PanelsJobManage') || ')'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RN = L.OUT_DOCUMENT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ( select null from V_USERPRIV UP where UP."CATALOG" = T.CRN )'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ( select null from V_USERPRIV UP where UP.JUR_PERS = T.JUR_PERS and UP.UNITCODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'CostJobs') || ' )) TMP '); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.CODE SCODE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SE.EQUIPMENT NEQUIPMENT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SUBDIVSEQ SE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQCONFIG T'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where SE.PRN = :NSUBDIV'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and SE.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RN = SE.EQCONFIG'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ @@ -4727,19 +4849,15 @@ create or replace package body PKG_P8PANELS_MECHREC as ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NSUBDIV', NVALUE => NSUBDIV); PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NFCJOBS', NVALUE => NFCJOBS); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NIDENT', NVALUE => NIDENT); /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -4747,33 +4865,49 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Обходим выбранные записи */ while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop + /* Читаем данные из курсора рег. номер станка */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NEQCONFIG); + /* Обнуляем сумму рабочего времени и трудоемкости */ + NSUM_LABOUR := 0; + NSUM_WORK_TIME := 0; + /* Цикл по различным сменам данного оборудования */ + for REC in (select TMP.TBOPERMODESP, + sum(TMP.NLABOUR) NLABOUR + from (select COALESCE(T.TBOPERMODESP, J.TBOPERMODESP) TBOPERMODESP, + F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_PLAN, NDICMUNTS_MIN) NLABOUR + from FCJOBS J, + FCJOBSSP T + where J.RN = NFCJOBS + and T.PRN = J.RN + and T.EQCONFIG = NEQCONFIG) TMP + group by TMP.TBOPERMODESP) + loop + /* Рассчитываем суммы */ + NSUM_LABOUR := NSUM_LABOUR + REC.NLABOUR; + NSUM_WORK_TIME := NSUM_WORK_TIME + UTL_WORK_TIME_GET(NTBOPERMODESP => REC.TBOPERMODESP); + end loop; + /* Если оборудование не участвует в сменном задании */ + if (NSUM_WORK_TIME = 0) then + NLOADING := 0; + else + NLOADING := ROUND(NSUM_LABOUR / NSUM_WORK_TIME * 100, 0); + /* Если трудоемкость не равна 0 */ + if (NSUM_LABOUR <> 0) then + /* Переводим суммарную трудоемкость в нормочасы */ + NSUM_LABOUR := ROUND(F_DICMUNTS_BASE_RECALC_QUANT(0, NCOMPANY, NDICMUNTS_MIN, NSUM_LABOUR, NDICMUNTS_WD), + 2); + end if; + end if; /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NRN', - ICURSOR => ICURSOR, - NPOSITION => 1, - BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NEQCONFIG, BCLEAR => true); PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSELECT', NVALUE => 0); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SOPER_NUMB', - ICURSOR => ICURSOR, - NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SOPER_NAME', + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NSUM_LABOUR', NVALUE => NSUM_LABOUR); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SCODE', ICURSOR => ICURSOR, NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NLOADING', NVALUE => NLOADING); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NEQUIPMENT', ICURSOR => ICURSOR, NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NISSUED', - ICURSOR => ICURSOR, - NPOSITION => 4); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NISSUE', - ICURSOR => ICURSOR, - NPOSITION => 5); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NEQUIP_PLAN', - ICURSOR => ICURSOR, - NPOSITION => 6); /* Добавляем строку в таблицу */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; @@ -4785,7 +4919,7 @@ create or replace package body PKG_P8PANELS_MECHREC as end if; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end FCJOBSSP_DG_GET; + end EQCONFIG_DG_GET; /* Инициализация записей раздела "Планы и отчеты производства изделий" */ procedure FCJOBS_INIT @@ -4796,57 +4930,70 @@ create or replace package body PKG_P8PANELS_MECHREC as NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса SUTILIZER PKG_STD.TSTRING := UTILIZER(); -- Пользователь сеанса NVERSION PKG_STD.TREF; -- Версия контрагентов - NPROCESS_IDENT PKG_STD.TREF; -- Идентификатор процесса + SDOC_INFO PKG_STD.TSTRING; -- Информация о документе begin /* Считываем версию контрагентов */ FIND_VERSION_BY_COMPANY(NCOMPANY => NCOMPANY, SUNITCODE => 'AGNLIST', NVERSION => NVERSION); - /* Генерируем идентификатор процесса */ - NPROCESS_IDENT := GEN_IDENT(); /* Начинаем формирование XML */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); /* Открываем корень */ PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); /* Цикл по планам и отчетам производства изделий */ for REC in (select T.RN NRN, + trim(T.DOCNUMB) SDOC_NUMB, DT.DOCCODE || ', ' || trim(T.DOCPREF) || '-' || trim(T.DOCNUMB) || ', ' || TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') SDOC_INFO, - INS.CODE SSUBDIV, + INS.NAME SSUBDIV, case when PER.RN is not null then - TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') || ' ' || TN2S(PER.BEG_TIME) || ' - ' || TN2S(PER.END_TIME) + TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') || ' ' || TN2S(PER.BEG_TIME) || ' - ' || TN2S(PER.END_TIME) else - TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') - end SPERIOD - from FCJOBS T, - DOCTYPES DT, + TO_CHAR(T.DOCDATE, 'dd.mm.yyyy') + end SPERIOD, + (select trim(T2.NUMB) from TBOPERMODESP T2 where T.TBOPERMODESP = T2.RN) STBOPERMODESP, + (select 1 + from FCJOBSSP S + where S.PRN = T.RN + and S.NOTE is not null + and ROWNUM = 1) NHAVE_NOTE + from FCJOBS T, + DOCTYPES DT, INS_DEPARTMENT INS, TBOPERMODESP PER where T.COMPANY = NCOMPANY - and T.STATE <> NFCJOBS_STATUS_WO + and T.STATE = NFCJOBS_STATUS_NOT_WO + and T.DOCDATE >= TRUNC(sysdate) and DT.RN = T.DOCTYPE - and T.SUBDIV = INS.RN (+) - and T.TBOPERMODESP = PER.RN (+) + and T.SUBDIV = INS.RN(+) + and T.TBOPERMODESP = PER.RN(+) and PKG_P8PANELS_MECHREC.UTL_SUBDIV_CHECK(T.COMPANY, T.SUBDIV, SUTILIZER) = 1 and exists (select null from V_USERPRIV UP where UP.CATALOG = T.CRN) - and exists (select null from V_USERPRIV UP where UP.JUR_PERS = T.JUR_PERS and UP.UNITCODE = 'CostJobs') + and exists (select null + from V_USERPRIV UP + where UP.JUR_PERS = T.JUR_PERS + and UP.UNITCODE = 'CostJobs') order by SDOC_INFO) loop /* Открываем план */ PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS'); /* Описываем план */ PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); - PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => REC.SDOC_INFO); + /* Если указана смена */ + if (REC.STBOPERMODESP is not null) then + /* Указываем информацию документа со сменой */ + SDOC_INFO := REC.SDOC_INFO || ', смена ' || REC.STBOPERMODESP; + else + /* Указываем информацию документа без смены */ + SDOC_INFO := REC.SDOC_INFO; + end if; + PKG_XFAST.ATTR(SNAME => 'SDOC_INFO', SVALUE => SDOC_INFO); + PKG_XFAST.ATTR(SNAME => 'SDOC_NUMB', SVALUE => REC.SDOC_NUMB); PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => REC.SSUBDIV); PKG_XFAST.ATTR(SNAME => 'SPERIOD', SVALUE => REC.SPERIOD); + PKG_XFAST.ATTR(SNAME => 'NHAVE_NOTE', NVALUE => COALESCE(REC.NHAVE_NOTE, 0)); /* Закрываем план */ PKG_XFAST.UP(); end loop; - /* Открываем дополнительную информацию */ - PKG_XFAST.DOWN_NODE(SNAME => 'XINFO'); - /* Описываем идентификатор процесса */ - PKG_XFAST.ATTR(SNAME => 'NPROCESS_IDENT', NVALUE => NPROCESS_IDENT); - /* Закрываем дополнительную информацию */ - PKG_XFAST.UP(); /* Закрываем корень */ PKG_XFAST.UP(); /* Сериализуем */ @@ -4866,9 +5013,211 @@ create or replace package body PKG_P8PANELS_MECHREC as Процедуры панели "Загрузка цеха" */ + /* Получение количества рабочих часов в сменах подразделения */ + procedure INS_DEPARTMENT_WORKHOURS_GET + ( + NSUBDIV in number, -- Рег. номер подразделения + NWORKHOURS out number -- Количество рабочих часов + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + begin + /* Инициализируем значение */ + NWORKHOURS := 0; + /* Цикл по сменам подразделения */ + for REC in (select SP.RN + from INS_DEPARTMENT T, + SLSCHEDULE S, + TBOPERMODE O, + TBOPERMODESP SP + where T.RN = NSUBDIV + and T.COMPANY = NCOMPANY + and S.RN = T.SCHEDULE + and O.RN = S.TBOPERMODE + and SP.PRN = O.RN) + loop + /* Суммируем количество рабочих часов смены */ + NWORKHOURS := NWORKHOURS + COALESCE(UTL_WORK_TIME_GET(NTBOPERMODESP => REC.RN) / 60, 0); + end loop; + end INS_DEPARTMENT_WORKHOURS_GET; + + /* Получение количества рабочих дней месяца */ + procedure ENPERIOD_WORKDAYS_GET + ( + SMONTH_YEAR in varchar2, -- Строковое представления месяца и года в формате (mm.yyyy) + NWORKDAYS out number -- Количество рабочих дней + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + DDATE_FROM PKG_STD.TLDATE; -- Дата с + DDATE_TO PKG_STD.TLDATE; -- Дата по + begin + /* Считываем первый и последний день месяца */ + P_FIRST_LAST_DAY(DCALCDATE => TO_DATE(SMONTH_YEAR, 'mm.yyyy'), DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); + /* Определяем количество рабочих дней по детализации */ + begin + select COALESCE(count(TMP.DAYS), 0) + into NWORKDAYS + from (select W.DAYS + from WORKDAYS W, + WORKDAYSTR S + where W.PRN = (select T.RN + from ENPERIOD T + where T.COMPANY = NCOMPANY + and T.PERTYPE = 0 + and T.PER_TYPE = 4 + and T.MAIN_SIGN = 1 + and T.STARTDATE = DDATE_FROM + and T.ENDDATE = DDATE_TO) + and S.PRN = W.RN + group by W.DAYS + having sum(S.HOURSNORM) <> 0) TMP; + exception + when others then + NWORKDAYS := 0; + end; + end ENPERIOD_WORKDAYS_GET; + + /* Получение таблицы доступных подразделений (цехов) */ + procedure INS_DEPARTMENT_DG_GET + ( + SMONTH_YEAR in varchar2, -- Строковое представления месяца и года в формате (mm.yyyy) + NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) + NPAGE_SIZE in number, -- Количество записей на странице (0 - все) + NINCLUDE_DEF in number, -- Признак включения описания колонок таблицы в ответ + COUT out clob -- Сериализованная таблица данных + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса + RDG PKG_P8PANELS_VISUAL.TDATA_GRID; -- Описание таблицы + RDG_ROW PKG_P8PANELS_VISUAL.TROW; -- Строка таблицы + NROW_FROM PKG_STD.TREF; -- Номер строки с + NROW_TO PKG_STD.TREF; -- Номер строки по + CSQL clob; -- Буфер для запроса + ICURSOR integer; -- Курсор для исполнения запроса + DDATE_FROM PKG_STD.TLDATE; -- Дата с + DDATE_TO PKG_STD.TLDATE; -- Дата по + begin + /* Преобразуем номер и размер страницы в номер строк с и по */ + PKG_P8PANELS_VISUAL.UTL_ROWS_LIMITS_CALC(NPAGE_NUMBER => NPAGE_NUMBER, + NPAGE_SIZE => NPAGE_SIZE, + NROW_FROM => NROW_FROM, + NROW_TO => NROW_TO); + /* Инициализируем таблицу данных */ + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(); + /* Описываем колонки таблицы данных */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NRN', + SCAPTION => 'Рег. номер', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, + BVISIBLE => false); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SCODE', + SCAPTION => 'Мнемокод', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SNAME', + SCAPTION => 'Наименование', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DBGNDATE', + SCAPTION => 'Действует с', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'DENDDATE', + SCAPTION => 'Действует по', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_DATE); + /* Считываем первый и последний день месяца */ + P_FIRST_LAST_DAY(DCALCDATE => TO_DATE(SMONTH_YEAR, 'mm.yyyy'), DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.CODE SCODE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T."NAME" SNAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.BGNDATE DBGNDATE,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.ENDDATE DENDDATE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INS_DEPARTMENT T,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SDIVTYPES S'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.SDIVTYPE = S.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and S.CODE = ' || PKG_SQL_BUILD.WRAP_STR(SVALUE => 'Цех')); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.BGNDATE <= :DDATE_TO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ((T.ENDDATE is null) or ((T.ENDDATE is not null) and (T.ENDDATE >= :DDATE_FROM)))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ' || PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_MECHREC.UTL_INS_DEP_HIER_EQ_CHECK') || '(T.COMPANY, T.RN, :DDATE_TO) = 1'); + /*PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ('); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' select null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INS_DEPARTMENT H'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where H.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from SUBDIVSEQ EQ,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQCONFIG EQC'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where EQ.PRN = H.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQC.RN = EQ.EQCONFIG'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQC.OPER_DATE is not null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQC.OPER_DATE <= :DDATE_TO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.ROWLIMIT(NLIMIT => 1, BAND => true) || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.ROWLIMIT(NLIMIT => 1, BAND => true)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' start with H.RN = T.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' connect by prior H.RN = H.PRN)');*/ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_FROM', DVALUE => DDATE_FROM); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_TO', DVALUE => DDATE_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_DATE(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) + loop + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, + SNAME => 'NRN', + ICURSOR => ICURSOR, + NPOSITION => 1, + BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SCODE', ICURSOR => ICURSOR, NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SNAME', ICURSOR => ICURSOR, NPOSITION => 3); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW, SNAME => 'DBGNDATE', ICURSOR => ICURSOR, NPOSITION => 4); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLD(RROW => RDG_ROW, SNAME => 'DENDDATE', ICURSOR => ICURSOR, NPOSITION => 5); + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); + end loop; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + /* Сериализуем описание */ + COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); + end INS_DEPARTMENT_DG_GET; + /* Получение загрузки цеха */ procedure FCJOBS_DEP_LOAD_DG_GET ( + NSUBDIV in number, -- Рег. номер подразделения (цеха) + SMONTH_YEAR in varchar2, -- Строковое представления месяца и года в формате (mm.yyyy) + NWORKHOURS in number, -- Количество рабочих часов NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -4889,10 +5238,101 @@ create or replace package body PKG_P8PANELS_MECHREC as DDATE_TO PKG_STD.TLDATE; -- Дата окончания месяца DDATE PKG_STD.TLDATE; -- Дата для расчетов NDICMUNTS_WD PKG_STD.TREF; -- Рег. номер единицы измерения нормочасов - NDICMUNTS_HOUR PKG_STD.TREF; -- Рег. номер единицы измерения часа - NFCEQUIPMENT PKG_STD.TREF; -- Рег. номер оборудования + NEQCONFIG PKG_STD.TREF; -- Рег. номер станка TDAYS TJOB_DAYS; -- Коллекция дней месяца NINDEX PKG_STD.TNUMBER; -- Индекс даты в коллекции дат + NLOAD PKG_STD.TLNUMBER; -- Загрузка в нормочасах + NPROCENT_LOAD PKG_STD.TLNUMBER; -- Загрузка в % + NENPERIOD PKG_STD.TREF; -- Рег. номер рабочего календаря + DCURRENT_DAY PKG_STD.TLDATE; -- Текущий день + + /* Считывание типа дня (см. константы NDAY_TYPE_*) */ + function DAY_TYPE_GET + ( + NENPERIOD in number, -- Рег. номер рабочего календаря + DDATE in date, -- Дата + DCURRENT_DAY in date -- Текущая дата + ) return number -- Тип дня (см. константы NDAY_TYPE_*) + is + NHOLIDAY PKG_STD.TNUMBER; -- Тип дня (0 - рабочий, 1 - выходной) + NDAY PKG_STD.TNUMBER; -- День + NRESULT PKG_STD.TNUMBER; -- Тип дня (см. константы NDAY_TYPE_*) + begin + /* Считываем день */ + NDAY := D_DAY(DDATE => DDATE); + /* Проверяем начиличе записи в календаре, если такого дня нет в календаре или сумма часов = 0 - выходной */ + begin + select 1 + into NHOLIDAY + from DUAL + where not exists (select null + from WORKDAYS T + where T.PRN = NENPERIOD + and T.DAYS = NDAY) + or ((select COALESCE(sum(S.HOURSNORM), 0) + from WORKDAYS T, + WORKDAYSTR S + where T.PRN = NENPERIOD + and T.DAYS = NDAY + and S.PRN = T.RN) = 0); + exception + when others then + NHOLIDAY := 0; + end; + /* Исходим от дня */ + case + /* Если это последующий день */ + when (DDATE > DCURRENT_DAY) then + /* Если это рабочий день */ + if (NHOLIDAY = 0) then + NRESULT := NDAY_TYPE_WORK_AFTER; + else + NRESULT := NDAY_TYPE_HOLIDAY_AFTER; + end if; + /* Если это предыдущий день */ + when (DDATE < DCURRENT_DAY) then + /* Если это рабочий день */ + if (NHOLIDAY = 0) then + NRESULT := NDAY_TYPE_WORK_BEFORE; + else + NRESULT := NDAY_TYPE_HOLIDAY_BEFORE; + end if; + /* Если это текущий день */ + else + NRESULT := NDAY_TYPE_CURRENT_DAY; + end case; + /* Возвращаем результат */ + return NRESULT; + end DAY_TYPE_GET; + + /* Считывание рег. номера рабочего календаря */ + function ENPERIOD_GET + ( + NCOMPANY in number, -- Рег. номер организации + DDATE_FROM in date, -- Дата начала периода + DDATE_TO in date -- Дата окончания периода + ) return number -- Рег. номер рабочего календаря + is + NRESULT PKG_STD.TREF; -- Рег. номер рабочего календаря + begin + /* Считываем рег. номер рабочего календаря */ + begin + select T.RN + into NRESULT + from ENPERIOD T + where T.COMPANY = NCOMPANY + and T.STARTDATE = DDATE_FROM + and T.ENDDATE = DDATE_TO + and T.PERTYPE = 0 + and T.PER_TYPE = 4 + and T.MAIN_SIGN = 1; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end ENPERIOD_GET; /* Считывание индекса коллекции дней */ function TDAYS_INDEX_GET @@ -4903,10 +5343,10 @@ create or replace package body PKG_P8PANELS_MECHREC as is begin /* Цикл по дням месяца */ - for I in TDAYS.FIRST..TDAYS.LAST + for I in TDAYS.FIRST .. TDAYS.LAST loop /* Если это искомый день */ - if (TDAYS(I).DDATE = TRUNC(DDATE)) then + if (TDAYS(I).DDATE = DDATE) then /* Возвращаем индекс */ return I; end if; @@ -4930,8 +5370,8 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATE_NAME PKG_STD.TSTRING; -- Строковое представление даты для наименования колонки begin /* Считываем месяц и год текущей даты */ - NMONTH := D_MONTH(DDATE => sysdate); - NYEAR := D_YEAR(DDATE => sysdate); + NMONTH := D_MONTH(DDATE => DDATE_FROM); + NYEAR := D_YEAR(DDATE => DDATE_FROM); /* Цикл по дням месяца */ for I in D_DAY(DDATE => DDATE_FROM) .. D_DAY(DDATE => DDATE_TO) loop @@ -4941,19 +5381,19 @@ create or replace package body PKG_P8PANELS_MECHREC as SDATE_NAME := TO_CHAR(DDATE, SCOL_PATTERN_DATE); /* Описываем родительскую колонку таблицы данных */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'N_' || TO_CHAR(DDATE, SCOL_PATTERN_DATE) || '_VALUE', + SNAME => 'N_' || SDATE_NAME || '_VALUE', SCAPTION => LPAD(D_DAY(DDATE), 2, '0'), SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, SPARENT => 'NVALUE_BY_DAYS'); /* Описываем родительскую колонку таблицы данных */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'N_' || TO_CHAR(DDATE, SCOL_PATTERN_DATE) || '_TYPE', + SNAME => 'N_' || SDATE_NAME || '_TYPE', SCAPTION => LPAD(D_DAY(DDATE), 2, '0'), SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false, SPARENT => 'NVALUE_BY_DAYS'); /* Добавляем день в коллекцию */ - TJOB_DAYS_ADD(TDAYS => TJOB_DAYS, DDATE => DDATE, NVALUE => 0, NTYPE => null); + TJOB_DAYS_ADD(TDAYS => TJOB_DAYS, DDATE => DDATE, NVALUE => null, NTYPE => 0); end loop; end DAYS_INIT; @@ -5046,46 +5486,6 @@ create or replace package body PKG_P8PANELS_MECHREC as DDATE := TRUNC(DDATE + 1); end loop; end DAYS_FILL; - - /* Добавление информации в итоговый результат */ - procedure ADD_INFO - ( - NCOMPANY in number, -- Рег. номер организации - SUTILIZER in varchar2, -- Имя пользователя - COUT in out clob -- Сериализованная таблица данных - ) - is - begin - /* Начинаем формирование XML */ - PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); - /* Открываем корень */ - PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); - /* Открываем план */ - PKG_XFAST.DOWN_NODE(SNAME => 'XFCJOBS'); - /* Описываем план */ - PKG_XFAST.VALUE_XML(LCVALUE => COUT); - /* Закрываем план */ - PKG_XFAST.UP(); - /* Открываем дополнительную информацию */ - PKG_XFAST.DOWN_NODE(SNAME => 'XINFO'); - /* Описываем мнемокод подразделения */ - PKG_XFAST.ATTR(SNAME => 'SSUBDIV', SVALUE => UTL_SUBDIV_CODE_GET(NCOMPANY => NCOMPANY, SUSER => SUTILIZER)); - /* Закрываем дополнительную информацию */ - PKG_XFAST.UP(); - /* Закрываем корень */ - PKG_XFAST.UP(); - /* Сериализуем */ - COUT := PKG_XFAST.SERIALIZE_TO_CLOB(); - /* Завершаем формирование XML */ - PKG_XFAST.EPILOGUE(); - exception - when others then - /* Завершаем формирование XML */ - PKG_XFAST.EPILOGUE(); - /* Вернем ошибку */ - PKG_STATE.DIAGNOSTICS_STACKED(); - P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); - end; begin /* Читем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); @@ -5095,271 +5495,265 @@ create or replace package body PKG_P8PANELS_MECHREC as NROW_FROM => NROW_FROM, NROW_TO => NROW_TO); /* Инициализируем таблицу данных */ - RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 5); + RDG := PKG_P8PANELS_VISUAL.TDATA_GRID_MAKE(BFIXED_HEADER => true, NFIXED_COLUMNS => 4); /* Описываем колонки таблицы данных */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NRN', SCAPTION => 'Рег. номер', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SCODE', - SCAPTION => 'Мнемокод', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, - NWIDTH => 100); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SNAME', - SCAPTION => 'Наименование', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, - NWIDTH => 200); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SSUBDIV', SCAPTION => 'Участок', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true, + BORDER => true, + NWIDTH => 120); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'SNAME', + SCAPTION => 'Станок', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, + NWIDTH => 240); + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, + SNAME => 'NLOAD', + SCAPTION => 'Загрузка (н/ч)', + SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, NWIDTH => 80); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NPROCENT_LOAD', SCAPTION => 'Загрузка (%)', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, - NWIDTH => 80); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NLOAD', - SCAPTION => 'Загрузка (н/ч)', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true, NWIDTH => 80); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'NVALUE_BY_DAYS', - SCAPTION => 'Загрузка по дням', + SCAPTION => 'Загрузка в н/ч по дням месяца', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, - BVISIBLE => true); + SHINT => 'Отображает сумму трудоемкости по дням месяца.

' || + 'Цвет значения отражает трудоемкость план/факт.
' || + 'Если дата месяца больше или равна текущей, то отображается трудоемкость "План", иначе "Факт":
' || + 'Черный - сумма трудоемкости "План";
' || + 'Голубой - сумма трудоемкости "Факт";
'); /* Считываем первый и последний день месяца */ - P_FIRST_LAST_DAY(DCALCDATE => sysdate, DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); + P_FIRST_LAST_DAY(DCALCDATE => TO_DATE(SMONTH_YEAR, 'mm.yyyy'), DBGNDATE => DDATE_FROM, DENDDATE => DDATE_TO); /* Считываем единицу измерения нормочасов */ FIND_DICMUNTS_CODE(NFLAG_SMART => 0, NFLAG_OPTION => 0, NCOMPANY => NCOMPANY, SMEAS_MNEMO => SDICMUNTS_WD, NRN => NDICMUNTS_WD); - /* Считываем единицу измерения часа */ - FIND_DICMUNTS_CODE(NFLAG_SMART => 0, - NFLAG_OPTION => 0, - NCOMPANY => NCOMPANY, - SMEAS_MNEMO => SDICMUNTS_HOUR, - NRN => NDICMUNTS_HOUR); + /* Считываем рег. номер рабочего календаря */ + NENPERIOD := ENPERIOD_GET(NCOMPANY => NCOMPANY, DDATE_FROM => DDATE_FROM, DDATE_TO => DDATE_TO); /* Инициализируем дни месяца */ DAYS_INIT(RDG => RDG, TJOB_DAYS => TDAYS, DDATE_FROM => DDATE_FROM, DDATE_TO => DDATE_TO); - /* Обходим данные */ - begin - /* Добавляем подсказку совместимости */ - CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); - /* Формируем запрос */ - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select EQ.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.CODE SCODE,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.NAME SNAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE SSUBDIV,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(sum(case'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when JS.WORK_DATE is not null then'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_FACT'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end) / ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 60)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' / ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 160) || ', 3) NPROCENT_LOAD,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(sum(case'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when JS.WORK_DATE is null then'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' F_DICMUNTS_BASE_RECALC_QUANT(0,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.COMPANY,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.MUNIT,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_PLAN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS)'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end), 3) NLOAD'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBS T,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCJOBSSP JS,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCEQUIPMENT EQ,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' INS_DEPARTMENT I'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where T.COMPANY = :NCOMPANY'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCDATE >= :DDATE_FROM'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCDATE <= :DDATE_TO'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK(T.COMPANY, T.SUBDIV, UTILIZER()) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and JS.PRN = T.RN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and EQ.RN = JS.EQUIP_PLAN'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and I.RN = T.SUBDIV'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists ( select null from V_USERPRIV UP where UP."CATALOG" = T.CRN )'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by EQ.RN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.CODE,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQ.NAME,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); - /* Учтём сортировки */ - PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); - /* Разбираем его */ - ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); - PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); - /* Делаем подстановку параметров */ - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); - PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_FROM', DVALUE => DDATE_FROM); - PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_TO', DVALUE => DDATE_TO); - PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NDICMUNTS', NVALUE => NDICMUNTS_WD); - /* Описываем структуру записи курсора */ - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); - /* Делаем выборку */ - if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then - null; - end if; - /* Обходим выбранные записи */ - while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) - loop - /* Считываем рег. номер оборудования */ - PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NFCEQUIPMENT); - /* Добавляем колонки с данными */ - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NFCEQUIPMENT, BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SCODE', ICURSOR => ICURSOR, NPOSITION => 2); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SNAME', ICURSOR => ICURSOR, NPOSITION => 3); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SSUBDIV', ICURSOR => ICURSOR, NPOSITION => 4); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NPROCENT_LOAD', - ICURSOR => ICURSOR, - NPOSITION => 5); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NLOAD', ICURSOR => ICURSOR, NPOSITION => 6); - /* Обходим загруженность по дням */ - for REC in (select max(TMP.WORK_HOURS) NWORK_HOURS, - TMP.BEG_DATE DBEG_DATE, - SUM(TMP.LABOUR_PLAN) NLABOUR_PLAN, - SUM(TMP.LABOUR_FACT) NLABOUR_FACT - from (select BO.RN TBOPERMODESP, - case BO.SIGN_SHIFT - when 0 then - (BO.END_TIME - BO.BEG_TIME) * 24 - else - (BO.END_TIME + 1 - BO.BEG_TIME) * 24 - end WORK_HOURS, - TRUNC(COALESCE(T.BEG_FACT, T.BEG_PLAN)) BEG_DATE, - F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_PLAN, NDICMUNTS_HOUR) LABOUR_PLAN, - F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_FACT, NDICMUNTS_HOUR) LABOUR_FACT - from FCJOBSSP T, - FCJOBS J, - TBOPERMODESP BO - where T.COMPANY = NCOMPANY - and J.RN = T.PRN - and T.BEG_PLAN is not null - and T.BEG_PLAN <= DDATE_TO - and T.BEG_PLAN >= DDATE_FROM - and PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK(J.COMPANY, J.SUBDIV, SUTILIZER) = 1 - and T.EQUIP_PLAN = NFCEQUIPMENT - and BO.RN = COALESCE(J.TBOPERMODESP, T.TBOPERMODESP) - order by T.BEG_FACT) TMP - group by TMP.BEG_DATE - order by TMP.BEG_DATE) + /* Определяем текущий день */ + DCURRENT_DAY := TRUNC(sysdate); + /* Если параметры указаны */ + if ((NSUBDIV is not null) and (SMONTH_YEAR is not null)) then + /* Обходим данные */ + begin + /* Добавляем подсказку совместимости */ + CSQL := PKG_SQL_BUILD.COMPATIBLE(SSQL => CSQL); + /* Формируем запрос */ + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => 'select *'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select TMP.*'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select IQ.RN NRN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' IQ."NAME" SNAME,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE SSUBDIV,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE((select SUM(F_DICMUNTS_BASE_RECALC_QUANT(0,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.COMPANY,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.MUNIT,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' case'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when (TRUNC(JS.BEG_PLAN) >= :DSYSDATE) then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_PLAN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' when (JS.BEG_FACT < :DSYSDATE) then'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' JS.LABOUR_FACT'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' else'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' 0'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' end,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NDICMUNTS))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from FCJOBSSP JS,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' FCJOBS T'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where JS.EQCONFIG = IQ.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and JS.COMPANY = :NCOMPANY'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.RN = JS.PRN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCDATE >= :DDATE_FROM'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DOCDATE <= :DDATE_TO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and (((TRUNC(JS.BEG_PLAN) >= :DSYSDATE) and (TRUNC(JS.BEG_PLAN) <= :DDATE_TO))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' or ((JS.BEG_FACT < :DSYSDATE) and (TRUNC(JS.BEG_FACT) between :DDATE_FROM and :DDATE_TO)))'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and ' || PKG_SQL_BUILD.PKG_NAME(SNAME => 'PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK') || '(T.COMPANY, T.SUBDIV, :SUTILIZER, :NSUBDIV) = ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 1)); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and exists (select null from V_USERPRIV UP where UP."CATALOG" = T.CRN)), 0) NLOAD'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from INS_DEPARTMENT I,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' SUBDIVSEQ HEQ,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' EQCONFIG IQ'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where I.RN in (' || PKG_SQL_BUILD.CONNECT_BY(STABLE_NAME => 'INS_DEPARTMENT', + STABLE_ALIAS => 'H', + SSELECT_CLAUSE => 'RN', + SWHERE_CLAUSE => 'COMPANY = ' || NCOMPANY, + SSTART_CLAUSE => 'RN = ' || NSUBDIV, + SPRIOR_COLUMN => 'RN', + SREF_COLUMN => 'PRN') || ')'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and HEQ.PRN = I.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and IQ.RN = HEQ.EQCONFIG'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and IQ.OPER_DATE is not null'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and IQ.OPER_DATE <= :DDATE_TO'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' group by IQ.RN,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' IQ."NAME",'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' I.CODE'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) TMP'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ) D) F'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); + /* Учтём сортировки */ + PKG_P8PANELS_VISUAL.TORDERS_SET_QUERY(RDATA_GRID => RDG, RORDERS => RO, SPATTERN => '%ORDER_BY%', CSQL => CSQL); + /* Разбираем его */ + ICURSOR := PKG_SQL_DML.OPEN_CURSOR(SWHAT => 'SELECT'); + PKG_SQL_DML.PARSE(ICURSOR => ICURSOR, SQUERY => CSQL); + /* Делаем подстановку параметров */ + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NCOMPANY', NVALUE => NCOMPANY); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_FROM', NVALUE => NROW_FROM); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NROW_TO', NVALUE => NROW_TO); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_FROM', DVALUE => DDATE_FROM); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DDATE_TO', DVALUE => DDATE_TO); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NDICMUNTS', NVALUE => NDICMUNTS_WD); + PKG_SQL_DML.BIND_VARIABLE_NUM(ICURSOR => ICURSOR, SNAME => 'NSUBDIV', NVALUE => NSUBDIV); + PKG_SQL_DML.BIND_VARIABLE_DATE(ICURSOR => ICURSOR, SNAME => 'DSYSDATE', DVALUE => DCURRENT_DAY); + PKG_SQL_DML.BIND_VARIABLE_STR(ICURSOR => ICURSOR, SNAME => 'SUTILIZER', SVALUE => SUTILIZER); + /* Описываем структуру записи курсора */ + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); + /* Делаем выборку */ + if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then + null; + end if; + /* Обходим выбранные записи */ + while (PKG_SQL_DML.FETCH_ROWS(ICURSOR => ICURSOR) > 0) loop - /* Считываем индекс коллеции текущего дня */ - NINDEX := TDAYS_INDEX_GET(TDAYS => TDAYS, DDATE => REC.DBEG_DATE); - /* Если факта меньше, чем плана */ - if (REC.NLABOUR_FACT < REC.NLABOUR_PLAN) then - /* Тип дня - невыполненный */ - TDAYS(NINDEX).NTYPE := 0; + /* Считываем рег. номер станка */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 1, NVALUE => NEQCONFIG); + /* Добавляем колонки с данными */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NRN', NVALUE => NEQCONFIG, BCLEAR => true); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SNAME', ICURSOR => ICURSOR, NPOSITION => 2); + PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, + SNAME => 'SSUBDIV', + ICURSOR => ICURSOR, + NPOSITION => 3); + /* Считываем загрузку в нормочасах */ + PKG_SQL_DML.COLUMN_VALUE_NUM(ICURSOR => ICURSOR, IPOSITION => 4, NVALUE => NLOAD); + /* Округляем загрузку */ + NLOAD := ROUND(NLOAD, 3); + /* Если количество рабочих часов не 0 */ + if ((NWORKHOURS is not null) and (NWORKHOURS <> 0)) then + /* Рассчитываем загрузку в % */ + NPROCENT_LOAD := ROUND(NLOAD / NWORKHOURS * 100, 1); else - /* Тип дня - невыполненный */ - TDAYS(NINDEX).NTYPE := 1; + /* Устанавливаем 0 */ + NPROCENT_LOAD := 0; end if; - /* Если часов трудоемкости больше рабочего времени */ - if (REC.NLABOUR_PLAN > REC.NWORK_HOURS) then - /* Указываем полную смену */ - TDAYS(NINDEX).NVALUE := 1; + /* Устанавливаем загрузку */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NLOAD', NVALUE => NLOAD); + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, SNAME => 'NPROCENT_LOAD', NVALUE => NPROCENT_LOAD); + /* Если у оборудования есть загрузка */ + if (NLOAD <> 0) then + /* Обходим загруженность по дням */ + for REC in (select TMP.BEG_DATE DBEG_DATE, + sum(TMP.LABOUR_PLAN) NLABOUR_PLAN, + sum(TMP.LABOUR_FACT) NLABOUR_FACT + from (select case + when ((T.BEG_FACT is not null) and (TRUNC(T.BEG_FACT) < sysdate)) then + TRUNC(T.BEG_FACT) + else + TRUNC(T.BEG_PLAN) + end BEG_DATE, + F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_PLAN, NDICMUNTS_WD) LABOUR_PLAN, + F_DICMUNTS_BASE_RECALC_QUANT(0, T.COMPANY, T.MUNIT, T.LABOUR_FACT, NDICMUNTS_WD) LABOUR_FACT + from FCJOBSSP T, + FCJOBS J + where T.COMPANY = NCOMPANY + and J.RN = T.PRN + and (((T.BEG_FACT < DCURRENT_DAY) and + (TRUNC(T.BEG_FACT) between DDATE_FROM and DDATE_TO)) or + ((TRUNC(T.BEG_PLAN) >= DCURRENT_DAY) and (TRUNC(T.BEG_PLAN) <= DDATE_TO))) + and PKG_P8PANELS_MECHREC.UTL_SUBDIV_HIER_CHECK(J.COMPANY, J.SUBDIV, SUTILIZER, NSUBDIV) = 1 + and T.EQCONFIG = NEQCONFIG + order by T.BEG_FACT) TMP + where ((TMP.BEG_DATE < DCURRENT_DAY) and (TMP.LABOUR_FACT <> 0)) + or ((TMP.BEG_DATE >= DCURRENT_DAY) and (TMP.LABOUR_PLAN <> 0)) + group by TMP.BEG_DATE + order by TMP.BEG_DATE) + loop + /* Считываем индекс коллеции текущего дня */ + NINDEX := TDAYS_INDEX_GET(TDAYS => TDAYS, DDATE => REC.DBEG_DATE); + /* Если день до текущего */ + if (REC.DBEG_DATE < DCURRENT_DAY) then + /* Отмечаем трудоемкость факт */ + TDAYS(NINDEX).NVALUE := REC.NLABOUR_FACT; + else + /* Отмечаем трудоемкость план */ + TDAYS(NINDEX).NVALUE := REC.NLABOUR_PLAN; + end if; + end loop; + /* Обходим все дни */ + for I in TDAYS.FIRST .. TDAYS.LAST + loop + /* Отмечаем значение дня */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_VALUE', + NVALUE => ROUND(TDAYS(I).NVALUE, 1)); + /* Если рабочий календарь считан */ + if (NENPERIOD is not null) then + /* Отмечаем тип дня */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_TYPE', + NVALUE => DAY_TYPE_GET(NENPERIOD => NENPERIOD, + DDATE => TDAYS(I).DDATE, + DCURRENT_DAY => DCURRENT_DAY)); + end if; + /* Обнуляем значение */ + TDAYS(I).NVALUE := null; + end loop; else - /* Указываем долю трудоемкости на смену */ - TDAYS(NINDEX).NVALUE := REC.NLABOUR_PLAN / REC.NWORK_HOURS; + /* Обходим все дни */ + for I in TDAYS.FIRST .. TDAYS.LAST + loop + /* Отмечаем значение дня */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_VALUE', + NVALUE => null); + /* Если рабочий календарь считан */ + if (NENPERIOD is not null) then + /* Отмечаем тип дня */ + PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, + SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_TYPE', + NVALUE => DAY_TYPE_GET(NENPERIOD => NENPERIOD, + DDATE => TDAYS(I).DDATE, + DCURRENT_DAY => DCURRENT_DAY)); + end if; + end loop; end if; + /* Добавляем строку в таблицу */ + PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; - /* Обходим все дни */ - for I in TDAYS.FIRST .. TDAYS.LAST - loop - /* Отмечаем значение дня */ - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, - SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_VALUE', - NVALUE => ROUND(TDAYS(I).NVALUE, 3)); - /* Отмечаем тип дня */ - PKG_P8PANELS_VISUAL.TROW_ADD_COL(RROW => RDG_ROW, - SNAME => 'N_' || TO_CHAR(TDAYS(I).DDATE, SCOL_PATTERN_DATE) || '_TYPE', - NVALUE => TDAYS(I).NTYPE); - /* Обнуляем значения дня */ - TDAYS(I).NVALUE := 0; - TDAYS(I).NTYPE := null; - end loop; - /* Добавляем строку в таблицу */ - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); - end loop; - exception - when others then - PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); - raise; - end; + exception + when others then + PKG_SQL_DML.CLOSE_CURSOR(ICURSOR => ICURSOR); + raise; + end; + end if; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - /* Добавление информации в итоговый результат */ - ADD_INFO(NCOMPANY => NCOMPANY, SUTILIZER => SUTILIZER, COUT => COUT); end FCJOBS_DEP_LOAD_DG_GET; /* Процедуры панели "Мониторинг сборки изделий" */ - - /* Считывание рег. номера спецификации связанного плана */ - function FCPRODPLANSP_LINKED_GET - ( - NPRODCMPSP in number, -- Рег. номер производственного состава - NFCPRODPLAN in number -- Рег. номер план - ) return number -- Рег. номер спецификации связанного плана - is - NRESULT PKG_STD.TREF; -- Рег. номер спецификации связанного плана - begin - /* Считываем запись */ - begin - select S.RN - into NRESULT - from FCPRODPLAN T, - FCPRODPLANSP S - where T.RN = (select P.RN - from DOCLINKS L, - FCPRODPLAN P - where L.IN_DOCUMENT = NFCPRODPLAN - and L.IN_UNITCODE = 'CostProductPlans' - and L.OUT_UNITCODE = 'CostProductPlans' - and P.RN = L.OUT_DOCUMENT - and P.CATEGORY = 1 - and ROWNUM = 1) - and S.PRN = T.RN - and S.PRODCMPSP = NPRODCMPSP; - exception - when others then - NRESULT := null; - end; - /* Возвращаем результат */ - return NRESULT; - end FCPRODPLANSP_LINKED_GET; - /* Получение таблицы маршрутных листов, связанных с производственным составом */ - procedure FCROUTLST_DG_BY_PRDCMPSP_GET + /* Получение таблицы маршрутных листов связанной записи "Производственная программа" */ + procedure FCROUTLST_DG_BY_LINKED_GET ( - NPRODCMPSP in number, -- Рег. номер производственного состава - NFCPRODPLAN in number, -- Рег. номер план + NFCPRODPLANSP in number, -- Рег. номер связанной строки плана NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -5375,7 +5769,6 @@ create or replace package body PKG_P8PANELS_MECHREC as NROW_TO PKG_STD.TREF; -- Номер строки по CSQL clob; -- Буфер для запроса ICURSOR integer; -- Курсор для исполнения запроса - NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер спецификации связанного плана NFCROUTLST_IDENT PKG_STD.TREF; -- Рег. номер идентификатора отмеченных записей маршрутных листов NDICMUNTS_WD PKG_STD.TREF; -- Рег. номер ед. измерения нормочасов begin @@ -5414,8 +5807,6 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Остаточная трудоемкость, в н/ч', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true); - /* Считываем рег. номер спецификации связанного плана */ - NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => NPRODCMPSP, NFCPRODPLAN => NFCPRODPLAN); /* Если спецификация считалась */ if (NFCPRODPLANSP is not null) then /* Инициализируем список маршрутных листов */ @@ -5435,7 +5826,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select SF.RN NRN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' TRIM(SH.NUMB) SNUMB,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE(SH.OPER_UK, FT.NAME) SOPERATION,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' COALESCE(SH.OPER_UK, FT."NAME") SOPERATION,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I.CODE from INS_DEPARTMENT I where SF.SUBDIV = I.RN) SEXECUTOR,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' ROUND(F_DICMUNTS_BASE_RECALC_QUANT(' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0) || ','); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' :NCOMPANY,'); @@ -5519,13 +5910,12 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Очищаем отмеченные маршрутные листы */ P_SELECTLIST_CLEAR(NIDENT => NFCROUTLST_IDENT); raise; - end FCROUTLST_DG_BY_PRDCMPSP_GET; + end FCROUTLST_DG_BY_LINKED_GET; - /* Получение таблицы комплектовочных ведомостей, связанных с производственным составом */ - procedure FCDELIVSH_DG_BY_PRDCMPSP_GET + /* Получение таблицы комплектовочных ведомостей связанной записи "Производственная программа" */ + procedure FCDELIVSH_DG_BY_LINKED_GET ( - NPRODCMPSP in number, -- Рег. номер производственного состава - NFCPRODPLAN in number, -- Рег. номер план + NFCPRODPLANSP in number, -- Рег. номер связанной строки плана NPAGE_NUMBER in number, -- Номер страницы (игнорируется при NPAGE_SIZE=0) NPAGE_SIZE in number, -- Количество записей на странице (0 - все) CORDERS in clob, -- Сортировки @@ -5541,7 +5931,6 @@ create or replace package body PKG_P8PANELS_MECHREC as NROW_TO PKG_STD.TREF; -- Номер строки по CSQL clob; -- Буфер для запроса ICURSOR integer; -- Курсор для исполнения запроса - NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер спецификации связанного плана begin /* Читем сортировки */ RO := PKG_P8PANELS_VISUAL.TORDERS_FROM_XML(CORDERS => CORDERS); @@ -5558,19 +5947,14 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Рег. номер', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => false); - PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'SSUBDIV', - SCAPTION => 'Цех', - SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, - BVISIBLE => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, SNAME => 'SNOMEN', SCAPTION => 'Номенклатура', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_STR, BVISIBLE => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, - SNAME => 'NQUANT_PROD', - SCAPTION => 'Применяемость на одно ВС', + SNAME => 'NQUANT_PLAN', + SCAPTION => 'Применяемость', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true); PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_COL_DEF(RDATA_GRID => RDG, @@ -5583,8 +5967,6 @@ create or replace package body PKG_P8PANELS_MECHREC as SCAPTION => 'Дефицит', SDATA_TYPE => PKG_P8PANELS_VISUAL.SDATA_TYPE_NUMB, BVISIBLE => true); - /* Считываем рег. номер спецификации связанного плана */ - NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => NPRODCMPSP, NFCPRODPLAN => NFCPRODPLAN); /* Если спецификация считалась */ if (NFCPRODPLANSP is not null) then begin @@ -5595,9 +5977,8 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select D.*,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => PKG_SQL_BUILD.SQLROWNUM() || ' NROW'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from (select T.RN NRN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I.CODE from INS_DEPARTMENT I where T.SUBDIV = I.RN) SSUBDIV,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' NM.NOMEN_NAME SNOMEN,'); - PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PROD NQUANT_PROD,'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.QUANT_PLAN NQUANT_PLAN,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' (select I2.CODE from INS_DEPARTMENT I2 where T.PR_SUBDIV = I2.RN) SPROVIDER,'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' T.DEFICIT NDEFICIT'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' from DOCLINKS D,'); @@ -5611,6 +5992,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.COMPANY = :NCOMPANY'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.MATRES = F.RN'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and F.NOMENCLATURE = NM.RN'); + PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' and T.DEFICIT > ' || PKG_SQL_BUILD.WRAP_NUM(NVALUE => 0)); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' %ORDER_BY%) D) F'); PKG_SQL_BUILD.APPEND(SSQL => CSQL, SELEMENT1 => ' where F.NROW between :NROW_FROM and :NROW_TO'); /* Учтём сортировки */ @@ -5626,11 +6008,10 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Описываем структуру записи курсора */ PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 1); PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 2); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 3); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 4); - PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 5); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 3); + PKG_SQL_DML.DEFINE_COLUMN_STR(ICURSOR => ICURSOR, IPOSITION => 4); + PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 5); PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 6); - PKG_SQL_DML.DEFINE_COLUMN_NUM(ICURSOR => ICURSOR, IPOSITION => 7); /* Делаем выборку */ if (PKG_SQL_DML.EXECUTE(ICURSOR => ICURSOR) = 0) then null; @@ -5644,26 +6025,22 @@ create or replace package body PKG_P8PANELS_MECHREC as ICURSOR => ICURSOR, NPOSITION => 1, BCLEAR => true); - PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, - SNAME => 'SSUBDIV', - ICURSOR => ICURSOR, - NPOSITION => 2); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SNOMEN', ICURSOR => ICURSOR, - NPOSITION => 3); + NPOSITION => 2); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, - SNAME => 'NQUANT_PROD', + SNAME => 'NQUANT_PLAN', ICURSOR => ICURSOR, - NPOSITION => 4); + NPOSITION => 3); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLS(RROW => RDG_ROW, SNAME => 'SPROVIDER', ICURSOR => ICURSOR, - NPOSITION => 5); + NPOSITION => 4); PKG_P8PANELS_VISUAL.TROW_ADD_CUR_COLN(RROW => RDG_ROW, SNAME => 'NDEFICIT', ICURSOR => ICURSOR, - NPOSITION => 6); + NPOSITION => 5); /* Добавляем строку в таблицу */ PKG_P8PANELS_VISUAL.TDATA_GRID_ADD_ROW(RDATA_GRID => RDG, RROW => RDG_ROW); end loop; @@ -5675,12 +6052,12 @@ create or replace package body PKG_P8PANELS_MECHREC as end if; /* Сериализуем описание */ COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF); - end FCDELIVSH_DG_BY_PRDCMPSP_GET; + end FCDELIVSH_DG_BY_LINKED_GET; - /* Получение изображения для записи "Планы и отчеты производства изделий" */ - function FCPRODPLAN_IMAGE_GET + /* Получение изображения для записи "Планы и отчеты производства изделий" по мат. ресурсу */ + function FCMATRESOURCE_IMAGE_GET ( - NRN in number, -- Рег. номер записи плана производства изделий + NRN in number, -- Рег. номер записи материального ресурса SFLINKTYPE in varchar2 -- Код типа присоединённого документа изображения (см. константы SFLINKTYPE_*) ) return blob -- Данные считанного изображения (null - если ничего не найдено) is @@ -5693,7 +6070,7 @@ create or replace package body PKG_P8PANELS_MECHREC as where M.FILE_TYPE = FLT.RN and FLT.CODE = SFLINKTYPE and U.TABLE_PRN = NRN - and U.UNITCODE = 'CostProductPlans' + and U.UNITCODE = 'CostMaterialResources' and M.RN = U.FILELINKS_PRN and M.BDATA is not null and ROWNUM = 1) @@ -5703,7 +6080,7 @@ create or replace package body PKG_P8PANELS_MECHREC as end loop; /* Ничего не нашли */ return null; - end FCPRODPLAN_IMAGE_GET; + end FCMATRESOURCE_IMAGE_GET; /* Получение таблицы записей "Планы и отчеты производства изделий" */ procedure FCPRODPLAN_GET @@ -5714,16 +6091,16 @@ create or replace package body PKG_P8PANELS_MECHREC as is NPROGRESS PKG_STD.TLNUMBER; -- Прогресс плана - /* Получение номера плана из примечания */ - function NUMB_BY_NOTE_GET + /* Получение номера плана из заказа */ + function NUMB_BY_PROD_ORDER_GET ( - SNOTE in varchar2 -- Примечание + SPROD_ORDER in varchar2 -- Заказ ) return varchar2 -- Номер плана is begin /* Возвращаем результат */ - return trim(SUBSTR(SNOTE, INSTR(SNOTE, '№') + 1, LENGTH(SNOTE))); - end NUMB_BY_NOTE_GET; + return trim(SUBSTR(SPROD_ORDER, LENGTH(SPROD_ORDER)-2)); + end NUMB_BY_PROD_ORDER_GET; /* Получение детализации по прогрессу */ function DETAIL_BY_PROGRESS_GET @@ -5753,11 +6130,12 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Открываем корень */ PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); /* Цикл по планам и отчетам производства изделий */ - for REC in (select P.RN NRN, - P.NOTE SNOTE, - D_YEAR(EN.STARTDATE) NYEAR, - COALESCE(sum(SP.LABOUR_FACT), 0) NLABOUR_FACT, - COALESCE(sum(SP.LABOUR_PLAN), 0) NLABOUR_PLAN + for REC in (select SP.RN NRN, + SP.MATRES NMATRES, + (select trim(PORD.NUMB) from FACEACC PORD where PORD.RN = SP.PROD_ORDER) SPROD_ORDER, + D_YEAR(SP.REP_DATE_TO) NYEAR, + COALESCE(SP.LABOUR_FACT, 0) NLABOUR_FACT, + COALESCE(SP.LABOUR_PLAN, 0) NLABOUR_PLAN from FCPRODPLAN P left outer join FCPRODPLANSP SP on P.RN = SP.PRN @@ -5784,16 +6162,13 @@ create or replace package body PKG_P8PANELS_MECHREC as where UP.JUR_PERS = P.JUR_PERS and UP.UNITCODE = 'CostProductPlans' and UP.AUTHID = UTILIZER()) - group by P.RN, - P.NOTE, - EN.STARTDATE - order by EN.STARTDATE asc) + order by SP.REP_DATE_TO asc) loop /* Открываем план */ PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODPLAN_INFO'); /* Описываем план */ PKG_XFAST.ATTR(SNAME => 'NRN', NVALUE => REC.NRN); - PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => NUMB_BY_NOTE_GET(SNOTE => REC.SNOTE)); + PKG_XFAST.ATTR(SNAME => 'SNUMB', SVALUE => NUMB_BY_PROD_ORDER_GET(SPROD_ORDER => REC.SPROD_ORDER)); /* Определяем прогресс */ if (REC.NLABOUR_PLAN = 0) then /* Не можем определить прогресс */ @@ -5812,7 +6187,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_XFAST.ATTR(SNAME => 'SDETAIL', SVALUE => DETAIL_BY_PROGRESS_GET(NPROGRESS => NPROGRESS)); PKG_XFAST.ATTR(SNAME => 'NYEAR', NVALUE => REC.NYEAR); PKG_XFAST.DOWN_NODE(SNAME => 'BIMAGE'); - PKG_XFAST.VALUE(LBVALUE => FCPRODPLAN_IMAGE_GET(NRN => REC.NRN, SFLINKTYPE => SFLINKTYPE_PREVIEW)); + PKG_XFAST.VALUE(LBVALUE => FCMATRESOURCE_IMAGE_GET(NRN => REC.NMATRES, SFLINKTYPE => SFLINKTYPE_PREVIEW)); PKG_XFAST.UP(); /* Закрываем план */ PKG_XFAST.UP(); @@ -5924,14 +6299,69 @@ create or replace package body PKG_P8PANELS_MECHREC as /* Считывание деталей производственного состава */ procedure FCPRODCMP_DETAILS_GET ( - NFCPRODPLAN in number, -- Рег. номер плана + NFCPRODPLANSP in number, -- Рег. номер строки плана COUT out clob -- Сериализованная таблица данных ) is NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Организация сеанса NDP_MODEL_ID PKG_STD.TREF; -- Рег. номер свойства "Идентификатор в SVG-модели" NDP_MODEL_BG_COLOR PKG_STD.TREF; -- Рег. номер свойства "Цвет заливки в SVG-модели" - NFCPRODPLANSP PKG_STD.TREF; -- Рег. номер связанной спецификации плана + NFCPRODPLANSP_LINKED PKG_STD.TREF; -- Рег. номер связанной спецификации плана + + /* Функция получения материального ресурса строки плана */ + function FCPRODPLANSP_MATRES_GET + ( + NFCPRODPLANSP in number -- Рег. номер строки плана + ) return number -- Рег. номер мат. ресурса + is + NRESULT PKG_STD.TREF; -- Рег. номер мат. ресурса + begin + /* Считываем рег. номер мат. ресурса */ + begin + select T.MATRES into NRESULT from FCPRODPLANSP T where T.RN = NFCPRODPLANSP; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end FCPRODPLANSP_MATRES_GET; + + /* Считывание рег. номера спецификации связанного плана */ + function FCPRODPLANSP_LINKED_GET + ( + NPRODCMPSP in number, -- Рег. номер производственного состава + NFCPRODPLANSP in number -- Рег. номер строки плана + ) return number -- Рег. номер спецификации связанного плана + is + NRESULT PKG_STD.TREF; -- Рег. номер спецификации связанного плана + begin + /* Считываем запись */ + begin + select S.RN + into NRESULT + from FCPRODPLAN T, + FCPRODPLANSP S + where T.RN = (select P.RN + from DOCLINKS L, + FCPRODPLAN P, + FCPRODPLANSP SP + where SP.RN = NFCPRODPLANSP + and L.IN_DOCUMENT = SP.PRN + and L.IN_UNITCODE = 'CostProductPlans' + and L.OUT_UNITCODE = 'CostProductPlans' + and P.RN = L.OUT_DOCUMENT + and P.CATEGORY = 1 + and ROWNUM = 1) + and S.PRN = T.RN + and S.PRODCMPSP = NPRODCMPSP; + exception + when others then + NRESULT := null; + end; + /* Возвращаем результат */ + return NRESULT; + end FCPRODPLANSP_LINKED_GET; begin /* Начинаем формирование XML */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_); @@ -5950,7 +6380,8 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_XFAST.DOWN_NODE(SNAME => 'XDATA'); /* Векторная модель */ PKG_XFAST.DOWN_NODE(SNAME => 'BMODEL'); - PKG_XFAST.VALUE(LBVALUE => FCPRODPLAN_IMAGE_GET(NRN => NFCPRODPLAN, SFLINKTYPE => SFLINKTYPE_SVG_MODEL)); + PKG_XFAST.VALUE(LBVALUE => FCMATRESOURCE_IMAGE_GET(NRN => FCPRODPLANSP_MATRES_GET(NFCPRODPLANSP => NFCPRODPLANSP), + SFLINKTYPE => SFLINKTYPE_SVG_MODEL)); PKG_XFAST.UP(); /* Цикл по планам и отчетам производства изделий */ for REC in (select S.RN NRN, @@ -5963,13 +6394,13 @@ create or replace package body PKG_P8PANELS_MECHREC as from FCPRODPLANSP T, FCPRODCMPSP S, DOCS_PROPS_VALS PV_MID - where T.PRN = NFCPRODPLAN + where T.RN = NFCPRODPLANSP and S.PRN = T.PRODCMP and PV_MID.UNIT_RN = S.RN and PV_MID.DOCS_PROP_RN = NDP_MODEL_ID) loop /* Получаем рег. номер связанной спецификации плана */ - NFCPRODPLANSP := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLAN => NFCPRODPLAN); + NFCPRODPLANSP_LINKED := FCPRODPLANSP_LINKED_GET(NPRODCMPSP => REC.NRN, NFCPRODPLANSP => NFCPRODPLANSP); /* Открываем план */ PKG_XFAST.DOWN_NODE(SNAME => 'XFCPRODCMP'); /* Описываем план */ @@ -5977,7 +6408,7 @@ create or replace package body PKG_P8PANELS_MECHREC as PKG_XFAST.ATTR(SNAME => 'SNAME', SVALUE => REC.SNAME); PKG_XFAST.ATTR(SNAME => 'SMODEL_ID', SVALUE => REC.SMODEL_ID); PKG_XFAST.ATTR(SNAME => 'SMODEL_BG_COLOR', SVALUE => REC.SMODEL_BG_COLOR); - PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP', NVALUE => NFCPRODPLANSP); + PKG_XFAST.ATTR(SNAME => 'NFCPRODPLANSP_LINK', NVALUE => NFCPRODPLANSP_LINKED); /* Закрываем план */ PKG_XFAST.UP(); end loop; -- 2.34.1 From f049cb79a1a9a3b53e308df113b3e94158fd5d18 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Fri, 12 Jul 2024 18:41:41 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-823=20=D0=BE=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BE=D1=82=2010.?= =?UTF-8?q?07.24=20=D1=871?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/rrp_conf_editor/iud_form_dialog.js | 6 ++++-- app/panels/rrp_conf_editor/layouts.js | 5 +---- app/panels/rrp_conf_editor/rrp_conf_editor.js | 21 +++++++++++++------ 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/app/panels/rrp_conf_editor/iud_form_dialog.js b/app/panels/rrp_conf_editor/iud_form_dialog.js index 5c734f3..a9252c2 100644 --- a/app/panels/rrp_conf_editor/iud_form_dialog.js +++ b/app/panels/rrp_conf_editor/iud_form_dialog.js @@ -13,7 +13,6 @@ import { Dialog, DialogTitle, IconButton, Icon, DialogContent, Typography, Dialo import { ApplicationСtx } from "../../context/application"; //Контекст приложения import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с сервером import { IUDFormTextField } from "./iud_form_text_field"; //Компонент поля ввода -import { STATUSES } from "./layouts"; //Статусы и стили диалогового окна //--------- //Константы @@ -30,6 +29,9 @@ const STYLES = { PADDING_DIALOG_BUTTONS_RIGHT: { paddingRight: "32px" } }; +//Статусы диалогового окна +export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, RRPCONFSCTNMRK_CREATE: 3, RRPCONFSCTNMRK_EDIT: 4, RRPCONFSCTNMRK_DELETE: 5 }; + //--------------- //Тело компонента //--------------- @@ -178,7 +180,7 @@ const IUDFormDialog = ({ initial, onClose, onReload }) => { //Отрисовка диалогового окна const renderSwitch = () => { - var btnText = ""; + let btnText = ""; switch (formData.status) { case STATUSES.CREATE: case STATUSES.RRPCONFSCTNMRK_CREATE: diff --git a/app/panels/rrp_conf_editor/layouts.js b/app/panels/rrp_conf_editor/layouts.js index 4b25d30..d6bdc5b 100644 --- a/app/panels/rrp_conf_editor/layouts.js +++ b/app/panels/rrp_conf_editor/layouts.js @@ -17,12 +17,9 @@ import { Box, IconButton, Icon, Link } from "@mui/material"; //Интерфей //Стили export const STYLES = { BOX_ROW: { display: "flex", justifyContent: "center", alignItems: "center" }, - LINK_STYLE: { component: "button", width: "-webkit-fill-available" } + LINK_STYLE: { component: "button", cursor: "pointer", width: "-webkit-fill-available" } }; -//Статусы диалогового окна -export const STATUSES = { CREATE: 0, EDIT: 1, DELETE: 2, RRPCONFSCTNMRK_CREATE: 3, RRPCONFSCTNMRK_EDIT: 4, RRPCONFSCTNMRK_DELETE: 5 }; - //----------- //Тело модуля //----------- diff --git a/app/panels/rrp_conf_editor/rrp_conf_editor.js b/app/panels/rrp_conf_editor/rrp_conf_editor.js index 80ebec0..c572ffa 100644 --- a/app/panels/rrp_conf_editor/rrp_conf_editor.js +++ b/app/panels/rrp_conf_editor/rrp_conf_editor.js @@ -17,7 +17,8 @@ import { NavigationCtx } from "../../context/navigation"; //Контекст н import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений import { SectionTabPanel } from "./section_tab_panel"; //Компонент вкладки раздела import { IUDFormDialog } from "./iud_form_dialog"; //Диалог добавления/исправления/удаления компонентов настройки регламентированного отчёта -import { STATUSES, dataCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { dataCellRender } from "./layouts"; //Дополнительная разметка и вёрстка клиентских элементов +import { STATUSES } from "./iud_form_dialog"; //Статусы диалогового окна import { TEXTS } from "../../../app.text"; //Текстовые константы import { STYLES as COMMON_STYLES } from "./layouts"; //Общие стили @@ -178,7 +179,7 @@ const RrpConfEditor = () => { //Переменная номера раздела с фокусом let tabFocus = 0; const data = await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.GET_RRPCONF_SECTIONS", + stored: "PKG_P8PANELS_RRPCONFED.RRPCONF_GET_SECTIONS", args: { NRN_RRPCONF: Number(getNavigationSearch().NRN) }, @@ -254,13 +255,21 @@ const RrpConfEditor = () => { //Отбор показателя раздела по ид. const showRrpConfSctnMrk = async rn => { const data = await executeStored({ - stored: "PKG_P8PANELS_RRPCONFED.SELECT_RRPCONFSCTNMRK", + stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODES", args: { NRN: rn } }); - if (data.NIDENT) { - pOnlineShowUnit({ unitCode: "RRPConfigSectionMark", inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }] }); + if (data) { + pOnlineShowUnit({ + unitCode: "RRPConfig", + showMethod: "main_mrk_settings", + inputParameters: [ + { name: "in_CODE", value: data.SRRPCONF }, + { name: "in_SCTN_CODE", value: data.SRRPCONFSCTN }, + { name: "in_MRK_CODE", value: data.SRRPCONFSCTNMRK } + ] + }); } else showMsgErr(TEXTS.NO_DATA_FOUND); }; @@ -324,7 +333,7 @@ const RrpConfEditor = () => { Date: Fri, 12 Jul 2024 19:07:59 +0300 Subject: [PATCH 3/8] =?UTF-8?q?WEB=20APP:=20=D1=81=D0=B2=D0=B5=D0=B6=D0=B0?= =?UTF-8?q?=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/p8-panels.js | 819 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 756 insertions(+), 63 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 80b202a..7ecbb62 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/custom_dialog\": \"./app/panels/rrp_conf_editor/custom_dialog.js\",\n\t\"./rrp_conf_editor/custom_dialog.js\": \"./app/panels/rrp_conf_editor/custom_dialog.js\",\n\t\"./rrp_conf_editor/custom_form_control\": \"./app/panels/rrp_conf_editor/custom_form_control.js\",\n\t\"./rrp_conf_editor/custom_form_control.js\": \"./app/panels/rrp_conf_editor/custom_form_control.js\",\n\t\"./rrp_conf_editor/custom_tab_panel\": \"./app/panels/rrp_conf_editor/custom_tab_panel.js\",\n\t\"./rrp_conf_editor/custom_tab_panel.js\": \"./app/panels/rrp_conf_editor/custom_tab_panel.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/filter.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/components/ins_department_dg.js\": \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/hooks.js\": \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/iud_form_dialog\": \"./app/panels/rrp_conf_editor/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/iud_form_dialog.js\": \"./app/panels/rrp_conf_editor/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/iud_form_text_field\": \"./app/panels/rrp_conf_editor/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/iud_form_text_field.js\": \"./app/panels/rrp_conf_editor/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/section_tab_panel\": \"./app/panels/rrp_conf_editor/section_tab_panel.js\",\n\t\"./rrp_conf_editor/section_tab_panel.js\": \"./app/panels/rrp_conf_editor/section_tab_panel.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -228,6 +228,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/base/Popper/Popper.js": +/*!*************************************************!*\ + !*** ./node_modules/@mui/base/Popper/Popper.js ***! + \*************************************************/ +/***/ ((__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 */ Popper: () => (/* binding */ Popper)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useForkRef/useForkRef.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/useEnhancedEffect/useEnhancedEffect.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/ownerDocument/ownerDocument.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/chainPropTypes/chainPropTypes.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/HTMLElementType/HTMLElementType.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/refType.js\");\n/* harmony import */ var _popperjs_core__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @popperjs/core */ \"./node_modules/@popperjs/core/lib/popper.js\");\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 _composeClasses__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../composeClasses */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _Portal__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Portal */ \"./node_modules/@mui/base/Portal/Portal.js\");\n/* harmony import */ var _popperClasses__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./popperClasses */ \"./node_modules/@mui/base/Popper/popperClasses.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils */ \"./node_modules/@mui/base/utils/useSlotProps.js\");\n/* harmony import */ var _utils_ClassNameConfigurator__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/ClassNameConfigurator */ \"./node_modules/@mui/base/utils/ClassNameConfigurator.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"anchorEl\", \"children\", \"direction\", \"disablePortal\", \"modifiers\", \"open\", \"placement\", \"popperOptions\", \"popperRef\", \"slotProps\", \"slots\", \"TransitionProps\", \"ownerState\"],\n _excluded2 = [\"anchorEl\", \"children\", \"container\", \"direction\", \"disablePortal\", \"keepMounted\", \"modifiers\", \"open\", \"placement\", \"popperOptions\", \"popperRef\", \"style\", \"transition\", \"slotProps\", \"slots\"];\n\n\n\n\n\n\n\n\n\n\nfunction flipPlacement(placement, direction) {\n if (direction === 'ltr') {\n return placement;\n }\n switch (placement) {\n case 'bottom-end':\n return 'bottom-start';\n case 'bottom-start':\n return 'bottom-end';\n case 'top-end':\n return 'top-start';\n case 'top-start':\n return 'top-end';\n default:\n return placement;\n }\n}\nfunction resolveAnchorEl(anchorEl) {\n return typeof anchorEl === 'function' ? anchorEl() : anchorEl;\n}\nfunction isHTMLElement(element) {\n return element.nodeType !== undefined;\n}\nfunction isVirtualElement(element) {\n return !isHTMLElement(element);\n}\nconst useUtilityClasses = () => {\n const slots = {\n root: ['root']\n };\n return (0,_composeClasses__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(slots, (0,_utils_ClassNameConfigurator__WEBPACK_IMPORTED_MODULE_5__.useClassNamesOverride)(_popperClasses__WEBPACK_IMPORTED_MODULE_6__.getPopperUtilityClass));\n};\nconst defaultPopperOptions = {};\nconst PopperTooltip = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function PopperTooltip(props, forwardedRef) {\n var _slots$root;\n const {\n anchorEl,\n children,\n direction,\n disablePortal,\n modifiers,\n open,\n placement: initialPlacement,\n popperOptions,\n popperRef: popperRefProp,\n slotProps = {},\n slots = {},\n TransitionProps\n // @ts-ignore internal logic\n // prevent from spreading to DOM, it can come from the parent component e.g. Select.\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n const tooltipRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const ownRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(tooltipRef, forwardedRef);\n const popperRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(null);\n const handlePopperRef = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(popperRef, popperRefProp);\n const handlePopperRefRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef(handlePopperRef);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(() => {\n handlePopperRefRef.current = handlePopperRef;\n }, [handlePopperRef]);\n react__WEBPACK_IMPORTED_MODULE_2__.useImperativeHandle(popperRefProp, () => popperRef.current, []);\n const rtlPlacement = flipPlacement(initialPlacement, direction);\n /**\n * placement initialized from prop but can change during lifetime if modifiers.flip.\n * modifiers.flip is essentially a flip for controlled/uncontrolled behavior\n */\n const [placement, setPlacement] = react__WEBPACK_IMPORTED_MODULE_2__.useState(rtlPlacement);\n const [resolvedAnchorElement, setResolvedAnchorElement] = react__WEBPACK_IMPORTED_MODULE_2__.useState(resolveAnchorEl(anchorEl));\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (popperRef.current) {\n popperRef.current.forceUpdate();\n }\n });\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (anchorEl) {\n setResolvedAnchorElement(resolveAnchorEl(anchorEl));\n }\n }, [anchorEl]);\n (0,_mui_utils__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(() => {\n if (!resolvedAnchorElement || !open) {\n return undefined;\n }\n const handlePopperUpdate = data => {\n setPlacement(data.placement);\n };\n if (true) {\n if (resolvedAnchorElement && isHTMLElement(resolvedAnchorElement) && resolvedAnchorElement.nodeType === 1) {\n const box = resolvedAnchorElement.getBoundingClientRect();\n if ( true && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n console.warn(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n }\n }\n }\n let popperModifiers = [{\n name: 'preventOverflow',\n options: {\n altBoundary: disablePortal\n }\n }, {\n name: 'flip',\n options: {\n altBoundary: disablePortal\n }\n }, {\n name: 'onUpdate',\n enabled: true,\n phase: 'afterWrite',\n fn: ({\n state\n }) => {\n handlePopperUpdate(state);\n }\n }];\n if (modifiers != null) {\n popperModifiers = popperModifiers.concat(modifiers);\n }\n if (popperOptions && popperOptions.modifiers != null) {\n popperModifiers = popperModifiers.concat(popperOptions.modifiers);\n }\n const popper = (0,_popperjs_core__WEBPACK_IMPORTED_MODULE_9__.createPopper)(resolvedAnchorElement, tooltipRef.current, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n placement: rtlPlacement\n }, popperOptions, {\n modifiers: popperModifiers\n }));\n handlePopperRefRef.current(popper);\n return () => {\n popper.destroy();\n handlePopperRefRef.current(null);\n };\n }, [resolvedAnchorElement, disablePortal, modifiers, open, popperOptions, rtlPlacement]);\n const childProps = {\n placement: placement\n };\n if (TransitionProps !== null) {\n childProps.TransitionProps = TransitionProps;\n }\n const classes = useUtilityClasses();\n const Root = (_slots$root = slots.root) != null ? _slots$root : 'div';\n const rootProps = (0,_utils__WEBPACK_IMPORTED_MODULE_10__.useSlotProps)({\n elementType: Root,\n externalSlotProps: slotProps.root,\n externalForwardedProps: other,\n additionalProps: {\n role: 'tooltip',\n ref: ownRef\n },\n ownerState: props,\n className: classes.root\n });\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Root, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({}, rootProps, {\n children: typeof children === 'function' ? children(childProps) : children\n }));\n});\n\n/**\n * Poppers rely on the 3rd party library [Popper.js](https://popper.js.org/docs/v2/) for positioning.\n *\n * Demos:\n *\n * - [Popper](https://mui.com/base-ui/react-popper/)\n *\n * API:\n *\n * - [Popper API](https://mui.com/base-ui/react-popper/components-api/#popper)\n */\nconst Popper = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function Popper(props, forwardedRef) {\n const {\n anchorEl,\n children,\n container: containerProp,\n direction = 'ltr',\n disablePortal = false,\n keepMounted = false,\n modifiers,\n open,\n placement = 'bottom',\n popperOptions = defaultPopperOptions,\n popperRef,\n style,\n transition = false,\n slotProps = {},\n slots = {}\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded2);\n const [exited, setExited] = react__WEBPACK_IMPORTED_MODULE_2__.useState(true);\n const handleEnter = () => {\n setExited(false);\n };\n const handleExited = () => {\n setExited(true);\n };\n if (!keepMounted && !open && (!transition || exited)) {\n return null;\n }\n\n // If the container prop is provided, use that\n // If the anchorEl prop is provided, use its parent body element as the container\n // If neither are provided let the Modal take care of choosing the container\n let container;\n if (containerProp) {\n container = containerProp;\n } else if (anchorEl) {\n const resolvedAnchorEl = resolveAnchorEl(anchorEl);\n container = resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) ? (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(resolvedAnchorEl).body : (0,_mui_utils__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(null).body;\n }\n const display = !open && keepMounted && (!transition || exited) ? 'none' : undefined;\n const transitionProps = transition ? {\n in: open,\n onEnter: handleEnter,\n onExited: handleExited\n } : undefined;\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_Portal__WEBPACK_IMPORTED_MODULE_12__.Portal, {\n disablePortal: disablePortal,\n container: container,\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(PopperTooltip, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n anchorEl: anchorEl,\n direction: direction,\n disablePortal: disablePortal,\n modifiers: modifiers,\n ref: forwardedRef,\n open: transition ? !exited : open,\n placement: placement,\n popperOptions: popperOptions,\n popperRef: popperRef,\n slotProps: slotProps,\n slots: slots\n }, other, {\n style: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n // Prevents scroll issue, waiting for Popper.js to add this style once initiated.\n position: 'fixed',\n // Fix Popper.js display issue\n top: 0,\n left: 0,\n display\n }, style),\n TransitionProps: transitionProps,\n children: children\n }))\n });\n});\n true ? Popper.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit TypeScript types and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),\n * or a function that returns either.\n * It's used to set the position of the popper.\n * The return value will passed as the reference object of the Popper instance.\n */\n anchorEl: (0,_mui_utils__WEBPACK_IMPORTED_MODULE_13__[\"default\"])(prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([_mui_utils__WEBPACK_IMPORTED_MODULE_15__[\"default\"], (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)]), props => {\n if (props.open) {\n const resolvedAnchorEl = resolveAnchorEl(props.anchorEl);\n if (resolvedAnchorEl && isHTMLElement(resolvedAnchorEl) && resolvedAnchorEl.nodeType === 1) {\n const box = resolvedAnchorEl.getBoundingClientRect();\n if ( true && box.top === 0 && box.left === 0 && box.right === 0 && box.bottom === 0) {\n return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'The anchor element should be part of the document layout.', \"Make sure the element is present in the document or that it's not display none.\"].join('\\n'));\n }\n } else if (!resolvedAnchorEl || typeof resolvedAnchorEl.getBoundingClientRect !== 'function' || isVirtualElement(resolvedAnchorEl) && resolvedAnchorEl.contextElement != null && resolvedAnchorEl.contextElement.nodeType !== 1) {\n return new Error(['MUI: The `anchorEl` prop provided to the component is invalid.', 'It should be an HTML element instance or a virtualElement ', '(https://popper.js.org/docs/v2/virtual-elements/).'].join('\\n'));\n }\n }\n return null;\n }),\n /**\n * Popper render function or node.\n */\n children: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_14___default().node), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)]),\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([_mui_utils__WEBPACK_IMPORTED_MODULE_15__[\"default\"], (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func)]),\n /**\n * Direction of the text.\n * @default 'ltr'\n */\n direction: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['ltr', 'rtl']),\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool),\n /**\n * Always keep the children in the DOM.\n * This prop can be useful in SEO situation or\n * when you want to maximize the responsiveness of the Popper.\n * @default false\n */\n keepMounted: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool),\n /**\n * Popper.js is based on a \"plugin-like\" architecture,\n * most of its features are fully encapsulated \"modifiers\".\n *\n * A modifier is a function that is called each time Popper.js needs to\n * compute the position of the popper.\n * For this reason, modifiers should be very performant to avoid bottlenecks.\n * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).\n */\n modifiers: prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_14___default().shape({\n data: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n effect: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n enabled: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool),\n fn: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().any),\n options: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\n phase: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),\n requires: prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_14___default().string)),\n requiresIfExists: prop_types__WEBPACK_IMPORTED_MODULE_14___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_14___default().string))\n })),\n /**\n * If `true`, the component is shown.\n */\n open: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool).isRequired,\n /**\n * Popper placement.\n * @default 'bottom'\n */\n placement: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n /**\n * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.\n * @default {}\n */\n popperOptions: prop_types__WEBPACK_IMPORTED_MODULE_14___default().shape({\n modifiers: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().array),\n onFirstUpdate: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().func),\n placement: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n strategy: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOf(['absolute', 'fixed'])\n }),\n /**\n * A ref that points to the used popper instance.\n */\n popperRef: _mui_utils__WEBPACK_IMPORTED_MODULE_16__[\"default\"],\n /**\n * The props used for each slot inside the Popper.\n * @default {}\n */\n slotProps: prop_types__WEBPACK_IMPORTED_MODULE_14___default().shape({\n root: prop_types__WEBPACK_IMPORTED_MODULE_14___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_14___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object)])\n }),\n /**\n * The components used for each slot inside the Popper.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n slots: prop_types__WEBPACK_IMPORTED_MODULE_14___default().shape({\n root: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().elementType)\n }),\n /**\n * Help supporting a react-transition-group/Transition component.\n * @default false\n */\n transition: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().bool)\n} : 0;\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/base/Popper/Popper.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/base/Popper/popperClasses.js": +/*!********************************************************!*\ + !*** ./node_modules/@mui/base/Popper/popperClasses.js ***! + \********************************************************/ +/***/ ((__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 */ getPopperUtilityClass: () => (/* binding */ getPopperUtilityClass),\n/* harmony export */ popperClasses: () => (/* binding */ popperClasses)\n/* harmony export */ });\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n/* harmony import */ var _generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../generateUtilityClasses */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n\n\nfunction getPopperUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiPopper', slot);\n}\nconst popperClasses = (0,_generateUtilityClasses__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiPopper', ['root']);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/base/Popper/popperClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/base/Portal/Portal.js": /*!*************************************************!*\ !*** ./node_modules/@mui/base/Portal/Portal.js ***! @@ -1702,6 +1724,17 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/Popper/Popper.js": +/*!*****************************************************!*\ + !*** ./node_modules/@mui/material/Popper/Popper.js ***! + \*****************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _mui_base_Popper__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/base/Popper */ \"./node_modules/@mui/base/Popper/Popper.js\");\n/* harmony import */ var _mui_system__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/system */ \"./node_modules/@mui/system/esm/useThemeWithoutDefault.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/HTMLElementType/HTMLElementType.js\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/refType.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../styles */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _styles__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../styles */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"anchorEl\", \"component\", \"components\", \"componentsProps\", \"container\", \"disablePortal\", \"keepMounted\", \"modifiers\", \"open\", \"placement\", \"popperOptions\", \"popperRef\", \"transition\", \"slots\", \"slotProps\"];\n\n\n\n\n\n\n\nconst PopperRoot = (0,_styles__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(_mui_base_Popper__WEBPACK_IMPORTED_MODULE_5__.Popper, {\n name: 'MuiPopper',\n slot: 'Root',\n overridesResolver: (props, styles) => styles.root\n})({});\n\n/**\n *\n * Demos:\n *\n * - [Autocomplete](https://mui.com/material-ui/react-autocomplete/)\n * - [Menu](https://mui.com/material-ui/react-menu/)\n * - [Popper](https://mui.com/material-ui/react-popper/)\n *\n * API:\n *\n * - [Popper API](https://mui.com/material-ui/api/popper/)\n */\nconst Popper = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function Popper(inProps, ref) {\n var _slots$root;\n const theme = (0,_mui_system__WEBPACK_IMPORTED_MODULE_6__[\"default\"])();\n const props = (0,_styles__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n props: inProps,\n name: 'MuiPopper'\n });\n const {\n anchorEl,\n component,\n components,\n componentsProps,\n container,\n disablePortal,\n keepMounted,\n modifiers,\n open,\n placement,\n popperOptions,\n popperRef,\n transition,\n slots,\n slotProps\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(props, _excluded);\n const RootComponent = (_slots$root = slots == null ? void 0 : slots.root) != null ? _slots$root : components == null ? void 0 : components.Root;\n const otherProps = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n anchorEl,\n container,\n disablePortal,\n keepMounted,\n modifiers,\n open,\n placement,\n popperOptions,\n popperRef,\n transition\n }, other);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(PopperRoot, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n as: component,\n direction: theme == null ? void 0 : theme.direction,\n slots: {\n root: RootComponent\n },\n slotProps: slotProps != null ? slotProps : componentsProps\n }, otherProps, {\n ref: ref\n }));\n});\n true ? Popper.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit TypeScript types and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * An HTML element, [virtualElement](https://popper.js.org/docs/v2/virtual-elements/),\n * or a function that returns either.\n * It's used to set the position of the popper.\n * The return value will passed as the reference object of the Popper instance.\n */\n anchorEl: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([_mui_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"], (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)]),\n /**\n * Popper render function or node.\n */\n children: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_8___default().node), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)]),\n /**\n * The component used for the root node.\n * Either a string to use a HTML element or a component.\n */\n component: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().elementType),\n /**\n * The components used for each slot inside the Popper.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n components: prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({\n Root: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().elementType)\n }),\n /**\n * The props used for each slot inside the Popper.\n * @default {}\n */\n componentsProps: prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({\n root: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_8___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)])\n }),\n /**\n * An HTML element or function that returns one.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([_mui_utils__WEBPACK_IMPORTED_MODULE_9__[\"default\"], (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)]),\n /**\n * The `children` will be under the DOM hierarchy of the parent component.\n * @default false\n */\n disablePortal: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n /**\n * Always keep the children in the DOM.\n * This prop can be useful in SEO situation or\n * when you want to maximize the responsiveness of the Popper.\n * @default false\n */\n keepMounted: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n /**\n * Popper.js is based on a \"plugin-like\" architecture,\n * most of its features are fully encapsulated \"modifiers\".\n *\n * A modifier is a function that is called each time Popper.js needs to\n * compute the position of the popper.\n * For this reason, modifiers should be very performant to avoid bottlenecks.\n * To learn how to create a modifier, [read the modifiers documentation](https://popper.js.org/docs/v2/modifiers/).\n */\n modifiers: prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({\n data: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n effect: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n enabled: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n fn: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n name: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n options: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n phase: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOf(['afterMain', 'afterRead', 'afterWrite', 'beforeMain', 'beforeRead', 'beforeWrite', 'main', 'read', 'write']),\n requires: prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_8___default().string)),\n requiresIfExists: prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_8___default().string))\n })),\n /**\n * If `true`, the component is shown.\n */\n open: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool).isRequired,\n /**\n * Popper placement.\n * @default 'bottom'\n */\n placement: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n /**\n * Options provided to the [`Popper.js`](https://popper.js.org/docs/v2/constructors/#options) instance.\n * @default {}\n */\n popperOptions: prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({\n modifiers: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n onFirstUpdate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n placement: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOf(['auto-end', 'auto-start', 'auto', 'bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n strategy: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOf(['absolute', 'fixed'])\n }),\n /**\n * A ref that points to the used popper instance.\n */\n popperRef: _mui_utils__WEBPACK_IMPORTED_MODULE_10__[\"default\"],\n /**\n * The props used for each slot inside the Popper.\n * @default {}\n */\n slotProps: prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({\n root: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_8___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)])\n }),\n /**\n * The components used for each slot inside the Popper.\n * Either a string to use a HTML element or a component.\n * @default {}\n */\n slots: prop_types__WEBPACK_IMPORTED_MODULE_8___default().shape({\n root: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().elementType)\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_8___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_8___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_8___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)]),\n /**\n * Help supporting a react-transition-group/Transition component.\n * @default false\n */\n transition: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Popper);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Popper/Popper.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/RadioGroup/RadioGroup.js": /*!*************************************************************!*\ !*** ./node_modules/@mui/material/RadioGroup/RadioGroup.js ***! @@ -2153,6 +2186,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./node_modules/@mui/material/Tooltip/Tooltip.js": +/*!*******************************************************!*\ + !*** ./node_modules/@mui/material/Tooltip/Tooltip.js ***! + \*******************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ testReset: () => (/* binding */ testReset)\n/* harmony export */ });\n/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/objectWithoutPropertiesLoose */ \"./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js\");\n/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/esm/extends */ \"./node_modules/@babel/runtime/helpers/esm/extends.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \"./node_modules/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\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 clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! clsx */ \"./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/elementAcceptingRef.js\");\n/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/base */ \"./node_modules/@mui/utils/esm/composeClasses/composeClasses.js\");\n/* harmony import */ var _mui_base__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @mui/base */ \"./node_modules/@mui/base/utils/appendOwnerState.js\");\n/* harmony import */ var _mui_system__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/system */ \"./node_modules/@mui/system/esm/colorManipulator.js\");\n/* harmony import */ var _styles_styled__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../styles/styled */ \"./node_modules/@mui/material/styles/styled.js\");\n/* harmony import */ var _styles_useTheme__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../styles/useTheme */ \"./node_modules/@mui/material/styles/useTheme.js\");\n/* harmony import */ var _styles_useThemeProps__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../styles/useThemeProps */ \"./node_modules/@mui/material/styles/useThemeProps.js\");\n/* harmony import */ var _utils_capitalize__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/capitalize */ \"./node_modules/@mui/material/utils/capitalize.js\");\n/* harmony import */ var _Grow__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../Grow */ \"./node_modules/@mui/material/Grow/Grow.js\");\n/* harmony import */ var _Popper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../Popper */ \"./node_modules/@mui/material/Popper/Popper.js\");\n/* harmony import */ var _utils_useEventCallback__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../utils/useEventCallback */ \"./node_modules/@mui/material/utils/useEventCallback.js\");\n/* harmony import */ var _utils_useForkRef__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/useForkRef */ \"./node_modules/@mui/material/utils/useForkRef.js\");\n/* harmony import */ var _utils_useId__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../utils/useId */ \"./node_modules/@mui/material/utils/useId.js\");\n/* harmony import */ var _utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../utils/useIsFocusVisible */ \"./node_modules/@mui/material/utils/useIsFocusVisible.js\");\n/* harmony import */ var _utils_useControlled__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/useControlled */ \"./node_modules/@mui/material/utils/useControlled.js\");\n/* harmony import */ var _tooltipClasses__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tooltipClasses */ \"./node_modules/@mui/material/Tooltip/tooltipClasses.js\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-runtime */ \"./node_modules/react/jsx-runtime.js\");\n'use client';\n\n\n\nconst _excluded = [\"arrow\", \"children\", \"classes\", \"components\", \"componentsProps\", \"describeChild\", \"disableFocusListener\", \"disableHoverListener\", \"disableInteractive\", \"disableTouchListener\", \"enterDelay\", \"enterNextDelay\", \"enterTouchDelay\", \"followCursor\", \"id\", \"leaveDelay\", \"leaveTouchDelay\", \"onClose\", \"onOpen\", \"open\", \"placement\", \"PopperComponent\", \"PopperProps\", \"slotProps\", \"slots\", \"title\", \"TransitionComponent\", \"TransitionProps\"];\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction round(value) {\n return Math.round(value * 1e5) / 1e5;\n}\nconst useUtilityClasses = ownerState => {\n const {\n classes,\n disableInteractive,\n arrow,\n touch,\n placement\n } = ownerState;\n const slots = {\n popper: ['popper', !disableInteractive && 'popperInteractive', arrow && 'popperArrow'],\n tooltip: ['tooltip', arrow && 'tooltipArrow', touch && 'touch', `tooltipPlacement${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(placement.split('-')[0])}`],\n arrow: ['arrow']\n };\n return (0,_mui_base__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(slots, _tooltipClasses__WEBPACK_IMPORTED_MODULE_7__.getTooltipUtilityClass, classes);\n};\nconst TooltipPopper = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(_Popper__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n name: 'MuiTooltip',\n slot: 'Popper',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.popper, !ownerState.disableInteractive && styles.popperInteractive, ownerState.arrow && styles.popperArrow, !ownerState.open && styles.popperClose];\n }\n})(({\n theme,\n ownerState,\n open\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n zIndex: (theme.vars || theme).zIndex.tooltip,\n pointerEvents: 'none'\n}, !ownerState.disableInteractive && {\n pointerEvents: 'auto'\n}, !open && {\n pointerEvents: 'none'\n}, ownerState.arrow && {\n [`&[data-popper-placement*=\"bottom\"] .${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].arrow}`]: {\n top: 0,\n marginTop: '-0.71em',\n '&::before': {\n transformOrigin: '0 100%'\n }\n },\n [`&[data-popper-placement*=\"top\"] .${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].arrow}`]: {\n bottom: 0,\n marginBottom: '-0.71em',\n '&::before': {\n transformOrigin: '100% 0'\n }\n },\n [`&[data-popper-placement*=\"right\"] .${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].arrow}`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, !ownerState.isRtl ? {\n left: 0,\n marginLeft: '-0.71em'\n } : {\n right: 0,\n marginRight: '-0.71em'\n }, {\n height: '1em',\n width: '0.71em',\n '&::before': {\n transformOrigin: '100% 100%'\n }\n }),\n [`&[data-popper-placement*=\"left\"] .${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].arrow}`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, !ownerState.isRtl ? {\n right: 0,\n marginRight: '-0.71em'\n } : {\n left: 0,\n marginLeft: '-0.71em'\n }, {\n height: '1em',\n width: '0.71em',\n '&::before': {\n transformOrigin: '0 0'\n }\n })\n}));\nconst TooltipTooltip = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('div', {\n name: 'MuiTooltip',\n slot: 'Tooltip',\n overridesResolver: (props, styles) => {\n const {\n ownerState\n } = props;\n return [styles.tooltip, ownerState.touch && styles.touch, ownerState.arrow && styles.tooltipArrow, styles[`tooltipPlacement${(0,_utils_capitalize__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(ownerState.placement.split('-')[0])}`]];\n }\n})(({\n theme,\n ownerState\n}) => (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n backgroundColor: theme.vars ? theme.vars.palette.Tooltip.bg : (0,_mui_system__WEBPACK_IMPORTED_MODULE_10__.alpha)(theme.palette.grey[700], 0.92),\n borderRadius: (theme.vars || theme).shape.borderRadius,\n color: (theme.vars || theme).palette.common.white,\n fontFamily: theme.typography.fontFamily,\n padding: '4px 8px',\n fontSize: theme.typography.pxToRem(11),\n maxWidth: 300,\n margin: 2,\n wordWrap: 'break-word',\n fontWeight: theme.typography.fontWeightMedium\n}, ownerState.arrow && {\n position: 'relative',\n margin: 0\n}, ownerState.touch && {\n padding: '8px 16px',\n fontSize: theme.typography.pxToRem(14),\n lineHeight: `${round(16 / 14)}em`,\n fontWeight: theme.typography.fontWeightRegular\n}, {\n [`.${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].popper}[data-popper-placement*=\"left\"] &`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n transformOrigin: 'right center'\n }, !ownerState.isRtl ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n marginRight: '14px'\n }, ownerState.touch && {\n marginRight: '24px'\n }) : (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n marginLeft: '14px'\n }, ownerState.touch && {\n marginLeft: '24px'\n })),\n [`.${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].popper}[data-popper-placement*=\"right\"] &`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n transformOrigin: 'left center'\n }, !ownerState.isRtl ? (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n marginLeft: '14px'\n }, ownerState.touch && {\n marginLeft: '24px'\n }) : (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n marginRight: '14px'\n }, ownerState.touch && {\n marginRight: '24px'\n })),\n [`.${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].popper}[data-popper-placement*=\"top\"] &`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n transformOrigin: 'center bottom',\n marginBottom: '14px'\n }, ownerState.touch && {\n marginBottom: '24px'\n }),\n [`.${_tooltipClasses__WEBPACK_IMPORTED_MODULE_7__[\"default\"].popper}[data-popper-placement*=\"bottom\"] &`]: (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n transformOrigin: 'center top',\n marginTop: '14px'\n }, ownerState.touch && {\n marginTop: '24px'\n })\n}));\nconst TooltipArrow = (0,_styles_styled__WEBPACK_IMPORTED_MODULE_8__[\"default\"])('span', {\n name: 'MuiTooltip',\n slot: 'Arrow',\n overridesResolver: (props, styles) => styles.arrow\n})(({\n theme\n}) => ({\n overflow: 'hidden',\n position: 'absolute',\n width: '1em',\n height: '0.71em' /* = width / sqrt(2) = (length of the hypotenuse) */,\n boxSizing: 'border-box',\n color: theme.vars ? theme.vars.palette.Tooltip.bg : (0,_mui_system__WEBPACK_IMPORTED_MODULE_10__.alpha)(theme.palette.grey[700], 0.9),\n '&::before': {\n content: '\"\"',\n margin: 'auto',\n display: 'block',\n width: '100%',\n height: '100%',\n backgroundColor: 'currentColor',\n transform: 'rotate(45deg)'\n }\n}));\nlet hystersisOpen = false;\nlet hystersisTimer = null;\nlet cursorPosition = {\n x: 0,\n y: 0\n};\nfunction testReset() {\n hystersisOpen = false;\n clearTimeout(hystersisTimer);\n}\nfunction composeEventHandler(handler, eventHandler) {\n return event => {\n if (eventHandler) {\n eventHandler(event);\n }\n handler(event);\n };\n}\n\n// TODO v6: Remove PopperComponent, PopperProps, TransitionComponent and TransitionProps.\nconst Tooltip = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.forwardRef(function Tooltip(inProps, ref) {\n var _ref, _slots$popper, _ref2, _ref3, _slots$transition, _ref4, _slots$tooltip, _ref5, _slots$arrow, _slotProps$popper, _ref6, _slotProps$popper2, _slotProps$transition, _slotProps$tooltip, _ref7, _slotProps$tooltip2, _slotProps$arrow, _ref8, _slotProps$arrow2;\n const props = (0,_styles_useThemeProps__WEBPACK_IMPORTED_MODULE_11__[\"default\"])({\n props: inProps,\n name: 'MuiTooltip'\n });\n const {\n arrow = false,\n children: childrenProp,\n components = {},\n componentsProps = {},\n describeChild = false,\n disableFocusListener = false,\n disableHoverListener = false,\n disableInteractive: disableInteractiveProp = false,\n disableTouchListener = false,\n enterDelay = 100,\n enterNextDelay = 0,\n enterTouchDelay = 700,\n followCursor = false,\n id: idProp,\n leaveDelay = 0,\n leaveTouchDelay = 1500,\n onClose,\n onOpen,\n open: openProp,\n placement = 'bottom',\n PopperComponent: PopperComponentProp,\n PopperProps = {},\n slotProps = {},\n slots = {},\n title,\n TransitionComponent: TransitionComponentProp = _Grow__WEBPACK_IMPORTED_MODULE_12__[\"default\"],\n TransitionProps\n } = props,\n other = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(props, _excluded);\n\n // to prevent runtime errors, developers will need to provide a child as a React element anyway.\n const children = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.isValidElement(childrenProp) ? childrenProp : /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(\"span\", {\n children: childrenProp\n });\n const theme = (0,_styles_useTheme__WEBPACK_IMPORTED_MODULE_13__[\"default\"])();\n const isRtl = theme.direction === 'rtl';\n const [childNode, setChildNode] = react__WEBPACK_IMPORTED_MODULE_2__.useState();\n const [arrowRef, setArrowRef] = react__WEBPACK_IMPORTED_MODULE_2__.useState(null);\n const ignoreNonTouchEvents = react__WEBPACK_IMPORTED_MODULE_2__.useRef(false);\n const disableInteractive = disableInteractiveProp || followCursor;\n const closeTimer = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const enterTimer = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const leaveTimer = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const touchTimer = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const [openState, setOpenState] = (0,_utils_useControlled__WEBPACK_IMPORTED_MODULE_14__[\"default\"])({\n controlled: openProp,\n default: false,\n name: 'Tooltip',\n state: 'open'\n });\n let open = openState;\n if (true) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const {\n current: isControlled\n } = react__WEBPACK_IMPORTED_MODULE_2__.useRef(openProp !== undefined);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (childNode && childNode.disabled && !isControlled && title !== '' && childNode.tagName.toLowerCase() === 'button') {\n console.error(['MUI: You are providing a disabled `button` child to the Tooltip component.', 'A disabled element does not fire events.', \"Tooltip needs to listen to the child element's events to display the title.\", '', 'Add a simple wrapper element, such as a `span`.'].join('\\n'));\n }\n }, [title, childNode, isControlled]);\n }\n const id = (0,_utils_useId__WEBPACK_IMPORTED_MODULE_15__[\"default\"])(idProp);\n const prevUserSelect = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const stopTouchInteraction = react__WEBPACK_IMPORTED_MODULE_2__.useCallback(() => {\n if (prevUserSelect.current !== undefined) {\n document.body.style.WebkitUserSelect = prevUserSelect.current;\n prevUserSelect.current = undefined;\n }\n clearTimeout(touchTimer.current);\n }, []);\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n return () => {\n clearTimeout(closeTimer.current);\n clearTimeout(enterTimer.current);\n clearTimeout(leaveTimer.current);\n stopTouchInteraction();\n };\n }, [stopTouchInteraction]);\n const handleOpen = event => {\n clearTimeout(hystersisTimer);\n hystersisOpen = true;\n\n // The mouseover event will trigger for every nested element in the tooltip.\n // We can skip rerendering when the tooltip is already open.\n // We are using the mouseover event instead of the mouseenter event to fix a hide/show issue.\n setOpenState(true);\n if (onOpen && !open) {\n onOpen(event);\n }\n };\n const handleClose = (0,_utils_useEventCallback__WEBPACK_IMPORTED_MODULE_16__[\"default\"])(\n /**\n * @param {React.SyntheticEvent | Event} event\n */\n event => {\n clearTimeout(hystersisTimer);\n hystersisTimer = setTimeout(() => {\n hystersisOpen = false;\n }, 800 + leaveDelay);\n setOpenState(false);\n if (onClose && open) {\n onClose(event);\n }\n clearTimeout(closeTimer.current);\n closeTimer.current = setTimeout(() => {\n ignoreNonTouchEvents.current = false;\n }, theme.transitions.duration.shortest);\n });\n const handleEnter = event => {\n if (ignoreNonTouchEvents.current && event.type !== 'touchstart') {\n return;\n }\n\n // Remove the title ahead of time.\n // We don't want to wait for the next render commit.\n // We would risk displaying two tooltips at the same time (native + this one).\n if (childNode) {\n childNode.removeAttribute('title');\n }\n clearTimeout(enterTimer.current);\n clearTimeout(leaveTimer.current);\n if (enterDelay || hystersisOpen && enterNextDelay) {\n enterTimer.current = setTimeout(() => {\n handleOpen(event);\n }, hystersisOpen ? enterNextDelay : enterDelay);\n } else {\n handleOpen(event);\n }\n };\n const handleLeave = event => {\n clearTimeout(enterTimer.current);\n clearTimeout(leaveTimer.current);\n leaveTimer.current = setTimeout(() => {\n handleClose(event);\n }, leaveDelay);\n };\n const {\n isFocusVisibleRef,\n onBlur: handleBlurVisible,\n onFocus: handleFocusVisible,\n ref: focusVisibleRef\n } = (0,_utils_useIsFocusVisible__WEBPACK_IMPORTED_MODULE_17__[\"default\"])();\n // We don't necessarily care about the focusVisible state (which is safe to access via ref anyway).\n // We just need to re-render the Tooltip if the focus-visible state changes.\n const [, setChildIsFocusVisible] = react__WEBPACK_IMPORTED_MODULE_2__.useState(false);\n const handleBlur = event => {\n handleBlurVisible(event);\n if (isFocusVisibleRef.current === false) {\n setChildIsFocusVisible(false);\n handleLeave(event);\n }\n };\n const handleFocus = event => {\n // Workaround for https://github.com/facebook/react/issues/7769\n // The autoFocus of React might trigger the event before the componentDidMount.\n // We need to account for this eventuality.\n if (!childNode) {\n setChildNode(event.currentTarget);\n }\n handleFocusVisible(event);\n if (isFocusVisibleRef.current === true) {\n setChildIsFocusVisible(true);\n handleEnter(event);\n }\n };\n const detectTouchStart = event => {\n ignoreNonTouchEvents.current = true;\n const childrenProps = children.props;\n if (childrenProps.onTouchStart) {\n childrenProps.onTouchStart(event);\n }\n };\n const handleMouseOver = handleEnter;\n const handleMouseLeave = handleLeave;\n const handleTouchStart = event => {\n detectTouchStart(event);\n clearTimeout(leaveTimer.current);\n clearTimeout(closeTimer.current);\n stopTouchInteraction();\n prevUserSelect.current = document.body.style.WebkitUserSelect;\n // Prevent iOS text selection on long-tap.\n document.body.style.WebkitUserSelect = 'none';\n touchTimer.current = setTimeout(() => {\n document.body.style.WebkitUserSelect = prevUserSelect.current;\n handleEnter(event);\n }, enterTouchDelay);\n };\n const handleTouchEnd = event => {\n if (children.props.onTouchEnd) {\n children.props.onTouchEnd(event);\n }\n stopTouchInteraction();\n clearTimeout(leaveTimer.current);\n leaveTimer.current = setTimeout(() => {\n handleClose(event);\n }, leaveTouchDelay);\n };\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (!open) {\n return undefined;\n }\n\n /**\n * @param {KeyboardEvent} nativeEvent\n */\n function handleKeyDown(nativeEvent) {\n // IE11, Edge (prior to using Bink?) use 'Esc'\n if (nativeEvent.key === 'Escape' || nativeEvent.key === 'Esc') {\n handleClose(nativeEvent);\n }\n }\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [handleClose, open]);\n const handleRef = (0,_utils_useForkRef__WEBPACK_IMPORTED_MODULE_18__[\"default\"])(children.ref, focusVisibleRef, setChildNode, ref);\n\n // There is no point in displaying an empty tooltip.\n if (!title && title !== 0) {\n open = false;\n }\n const popperRef = react__WEBPACK_IMPORTED_MODULE_2__.useRef();\n const handleMouseMove = event => {\n const childrenProps = children.props;\n if (childrenProps.onMouseMove) {\n childrenProps.onMouseMove(event);\n }\n cursorPosition = {\n x: event.clientX,\n y: event.clientY\n };\n if (popperRef.current) {\n popperRef.current.update();\n }\n };\n const nameOrDescProps = {};\n const titleIsString = typeof title === 'string';\n if (describeChild) {\n nameOrDescProps.title = !open && titleIsString && !disableHoverListener ? title : null;\n nameOrDescProps['aria-describedby'] = open ? id : null;\n } else {\n nameOrDescProps['aria-label'] = titleIsString ? title : null;\n nameOrDescProps['aria-labelledby'] = open && !titleIsString ? id : null;\n }\n const childrenProps = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, nameOrDescProps, other, children.props, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(other.className, children.props.className),\n onTouchStart: detectTouchStart,\n ref: handleRef\n }, followCursor ? {\n onMouseMove: handleMouseMove\n } : {});\n if (true) {\n childrenProps['data-mui-internal-clone-element'] = true;\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n react__WEBPACK_IMPORTED_MODULE_2__.useEffect(() => {\n if (childNode && !childNode.getAttribute('data-mui-internal-clone-element')) {\n console.error(['MUI: The `children` component of the Tooltip is not forwarding its props correctly.', 'Please make sure that props are spread on the same element that the ref is applied to.'].join('\\n'));\n }\n }, [childNode]);\n }\n const interactiveWrapperListeners = {};\n if (!disableTouchListener) {\n childrenProps.onTouchStart = handleTouchStart;\n childrenProps.onTouchEnd = handleTouchEnd;\n }\n if (!disableHoverListener) {\n childrenProps.onMouseOver = composeEventHandler(handleMouseOver, childrenProps.onMouseOver);\n childrenProps.onMouseLeave = composeEventHandler(handleMouseLeave, childrenProps.onMouseLeave);\n if (!disableInteractive) {\n interactiveWrapperListeners.onMouseOver = handleMouseOver;\n interactiveWrapperListeners.onMouseLeave = handleMouseLeave;\n }\n }\n if (!disableFocusListener) {\n childrenProps.onFocus = composeEventHandler(handleFocus, childrenProps.onFocus);\n childrenProps.onBlur = composeEventHandler(handleBlur, childrenProps.onBlur);\n if (!disableInteractive) {\n interactiveWrapperListeners.onFocus = handleFocus;\n interactiveWrapperListeners.onBlur = handleBlur;\n }\n }\n if (true) {\n if (children.props.title) {\n console.error(['MUI: You have provided a `title` prop to the child of .', `Remove this title prop \\`${children.props.title}\\` or the Tooltip component.`].join('\\n'));\n }\n }\n const popperOptions = react__WEBPACK_IMPORTED_MODULE_2__.useMemo(() => {\n var _PopperProps$popperOp;\n let tooltipModifiers = [{\n name: 'arrow',\n enabled: Boolean(arrowRef),\n options: {\n element: arrowRef,\n padding: 4\n }\n }];\n if ((_PopperProps$popperOp = PopperProps.popperOptions) != null && _PopperProps$popperOp.modifiers) {\n tooltipModifiers = tooltipModifiers.concat(PopperProps.popperOptions.modifiers);\n }\n return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, PopperProps.popperOptions, {\n modifiers: tooltipModifiers\n });\n }, [arrowRef, PopperProps]);\n const ownerState = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, props, {\n isRtl,\n arrow,\n disableInteractive,\n placement,\n PopperComponentProp,\n touch: ignoreNonTouchEvents.current\n });\n const classes = useUtilityClasses(ownerState);\n const PopperComponent = (_ref = (_slots$popper = slots.popper) != null ? _slots$popper : components.Popper) != null ? _ref : TooltipPopper;\n const TransitionComponent = (_ref2 = (_ref3 = (_slots$transition = slots.transition) != null ? _slots$transition : components.Transition) != null ? _ref3 : TransitionComponentProp) != null ? _ref2 : _Grow__WEBPACK_IMPORTED_MODULE_12__[\"default\"];\n const TooltipComponent = (_ref4 = (_slots$tooltip = slots.tooltip) != null ? _slots$tooltip : components.Tooltip) != null ? _ref4 : TooltipTooltip;\n const ArrowComponent = (_ref5 = (_slots$arrow = slots.arrow) != null ? _slots$arrow : components.Arrow) != null ? _ref5 : TooltipArrow;\n const popperProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_19__.appendOwnerState)(PopperComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, PopperProps, (_slotProps$popper = slotProps.popper) != null ? _slotProps$popper : componentsProps.popper, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.popper, PopperProps == null ? void 0 : PopperProps.className, (_ref6 = (_slotProps$popper2 = slotProps.popper) != null ? _slotProps$popper2 : componentsProps.popper) == null ? void 0 : _ref6.className)\n }), ownerState);\n const transitionProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_19__.appendOwnerState)(TransitionComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, TransitionProps, (_slotProps$transition = slotProps.transition) != null ? _slotProps$transition : componentsProps.transition), ownerState);\n const tooltipProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_19__.appendOwnerState)(TooltipComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, (_slotProps$tooltip = slotProps.tooltip) != null ? _slotProps$tooltip : componentsProps.tooltip, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.tooltip, (_ref7 = (_slotProps$tooltip2 = slotProps.tooltip) != null ? _slotProps$tooltip2 : componentsProps.tooltip) == null ? void 0 : _ref7.className)\n }), ownerState);\n const tooltipArrowProps = (0,_mui_base__WEBPACK_IMPORTED_MODULE_19__.appendOwnerState)(ArrowComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, (_slotProps$arrow = slotProps.arrow) != null ? _slotProps$arrow : componentsProps.arrow, {\n className: (0,clsx__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(classes.arrow, (_ref8 = (_slotProps$arrow2 = slotProps.arrow) != null ? _slotProps$arrow2 : componentsProps.arrow) == null ? void 0 : _ref8.className)\n }), ownerState);\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(react__WEBPACK_IMPORTED_MODULE_2__.Fragment, {\n children: [/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2__.cloneElement(children, childrenProps), /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(PopperComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n as: PopperComponentProp != null ? PopperComponentProp : _Popper__WEBPACK_IMPORTED_MODULE_9__[\"default\"],\n placement: placement,\n anchorEl: followCursor ? {\n getBoundingClientRect: () => ({\n top: cursorPosition.y,\n left: cursorPosition.x,\n right: cursorPosition.x,\n bottom: cursorPosition.y,\n width: 0,\n height: 0\n })\n } : childNode,\n popperRef: popperRef,\n open: childNode ? open : false,\n id: id,\n transition: true\n }, interactiveWrapperListeners, popperProps, {\n popperOptions: popperOptions,\n children: ({\n TransitionProps: TransitionPropsInner\n }) => /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(TransitionComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({\n timeout: theme.transitions.duration.shorter\n }, TransitionPropsInner, transitionProps, {\n children: /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxs)(TooltipComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, tooltipProps, {\n children: [title, arrow ? /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_4__.jsx)(ArrowComponent, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_1__[\"default\"])({}, tooltipArrowProps, {\n ref: setArrowRef\n })) : null]\n }))\n }))\n }))]\n });\n});\n true ? Tooltip.propTypes /* remove-proptypes */ = {\n // ----------------------------- Warning --------------------------------\n // | These PropTypes are generated from the TypeScript type definitions |\n // | To update them edit the d.ts file and run \"yarn proptypes\" |\n // ----------------------------------------------------------------------\n /**\n * If `true`, adds an arrow to the tooltip.\n * @default false\n */\n arrow: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * Tooltip reference element.\n */\n children: _mui_utils__WEBPACK_IMPORTED_MODULE_21__[\"default\"].isRequired,\n /**\n * Override or extend the styles applied to the component.\n */\n classes: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n /**\n * @ignore\n */\n className: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().string),\n /**\n * The components used for each slot inside.\n *\n * This prop is an alias for the `slots` prop.\n * It's recommended to use the `slots` prop instead.\n *\n * @default {}\n */\n components: prop_types__WEBPACK_IMPORTED_MODULE_20___default().shape({\n Arrow: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n Popper: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n Tooltip: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n Transition: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType)\n }),\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n *\n * This prop is an alias for the `slotProps` prop.\n * It's recommended to use the `slotProps` prop instead, as `componentsProps` will be deprecated in the future.\n *\n * @default {}\n */\n componentsProps: prop_types__WEBPACK_IMPORTED_MODULE_20___default().shape({\n arrow: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n popper: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n tooltip: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n transition: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object)\n }),\n /**\n * Set to `true` if the `title` acts as an accessible description.\n * By default the `title` acts as an accessible label for the child.\n * @default false\n */\n describeChild: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * Do not respond to focus-visible events.\n * @default false\n */\n disableFocusListener: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * Do not respond to hover events.\n * @default false\n */\n disableHoverListener: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * Makes a tooltip not interactive, i.e. it will close when the user\n * hovers over the tooltip before the `leaveDelay` is expired.\n * @default false\n */\n disableInteractive: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * Do not respond to long press touch events.\n * @default false\n */\n disableTouchListener: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * The number of milliseconds to wait before showing the tooltip.\n * This prop won't impact the enter touch delay (`enterTouchDelay`).\n * @default 100\n */\n enterDelay: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n /**\n * The number of milliseconds to wait before showing the tooltip when one was already recently opened.\n * @default 0\n */\n enterNextDelay: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n /**\n * The number of milliseconds a user must touch the element before showing the tooltip.\n * @default 700\n */\n enterTouchDelay: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n /**\n * If `true`, the tooltip follow the cursor over the wrapped element.\n * @default false\n */\n followCursor: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * This prop is used to help implement the accessibility logic.\n * If you don't provide this prop. It falls back to a randomly generated id.\n */\n id: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().string),\n /**\n * The number of milliseconds to wait before hiding the tooltip.\n * This prop won't impact the leave touch delay (`leaveTouchDelay`).\n * @default 0\n */\n leaveDelay: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n /**\n * The number of milliseconds after the user stops touching an element before hiding the tooltip.\n * @default 1500\n */\n leaveTouchDelay: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().number),\n /**\n * Callback fired when the component requests to be closed.\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n */\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func),\n /**\n * Callback fired when the component requests to be open.\n *\n * @param {React.SyntheticEvent} event The event source of the callback.\n */\n onOpen: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func),\n /**\n * If `true`, the component is shown.\n */\n open: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool),\n /**\n * Tooltip placement.\n * @default 'bottom'\n */\n placement: prop_types__WEBPACK_IMPORTED_MODULE_20___default().oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),\n /**\n * The component used for the popper.\n * @default Popper\n */\n PopperComponent: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n /**\n * Props applied to the [`Popper`](/material-ui/api/popper/) element.\n * @default {}\n */\n PopperProps: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n /**\n * The extra props for the slot components.\n * You can override the existing props or add new ones.\n *\n * This prop is an alias for the `componentsProps` prop, which will be deprecated in the future.\n *\n * @default {}\n */\n slotProps: prop_types__WEBPACK_IMPORTED_MODULE_20___default().shape({\n arrow: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n popper: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n tooltip: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object),\n transition: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object)\n }),\n /**\n * The components used for each slot inside.\n *\n * This prop is an alias for the `components` prop, which will be deprecated in the future.\n *\n * @default {}\n */\n slots: prop_types__WEBPACK_IMPORTED_MODULE_20___default().shape({\n arrow: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n popper: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n tooltip: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n transition: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType)\n }),\n /**\n * The system prop that allows defining system overrides as well as additional CSS styles.\n */\n sx: prop_types__WEBPACK_IMPORTED_MODULE_20___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_20___default().arrayOf(prop_types__WEBPACK_IMPORTED_MODULE_20___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_20___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object), (prop_types__WEBPACK_IMPORTED_MODULE_20___default().bool)])), (prop_types__WEBPACK_IMPORTED_MODULE_20___default().func), (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object)]),\n /**\n * Tooltip title. Zero-length titles string, undefined, null and false are never displayed.\n */\n title: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().node),\n /**\n * The component used for the transition.\n * [Follow this guide](/material-ui/transitions/#transitioncomponent-prop) to learn more about the requirements for this component.\n * @default Grow\n */\n TransitionComponent: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().elementType),\n /**\n * Props applied to the transition element.\n * By default, the element is based on this [`Transition`](http://reactcommunity.org/react-transition-group/transition/) component.\n */\n TransitionProps: (prop_types__WEBPACK_IMPORTED_MODULE_20___default().object)\n} : 0;\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Tooltip);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tooltip/Tooltip.js?"); + +/***/ }), + +/***/ "./node_modules/@mui/material/Tooltip/tooltipClasses.js": +/*!**************************************************************!*\ + !*** ./node_modules/@mui/material/Tooltip/tooltipClasses.js ***! + \**************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ getTooltipUtilityClass: () => (/* binding */ getTooltipUtilityClass)\n/* harmony export */ });\n/* harmony import */ var _mui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/utils */ \"./node_modules/@mui/utils/esm/generateUtilityClasses/generateUtilityClasses.js\");\n/* harmony import */ var _generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../generateUtilityClass */ \"./node_modules/@mui/utils/esm/generateUtilityClass/generateUtilityClass.js\");\n\n\nfunction getTooltipUtilityClass(slot) {\n return (0,_generateUtilityClass__WEBPACK_IMPORTED_MODULE_0__[\"default\"])('MuiTooltip', slot);\n}\nconst tooltipClasses = (0,_mui_utils__WEBPACK_IMPORTED_MODULE_1__[\"default\"])('MuiTooltip', ['popper', 'popperInteractive', 'popperArrow', 'popperClose', 'tooltip', 'tooltipArrow', 'touch', 'tooltipPlacementLeft', 'tooltipPlacementRight', 'tooltipPlacementTop', 'tooltipPlacementBottom', 'arrow']);\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (tooltipClasses);\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@mui/material/Tooltip/tooltipClasses.js?"); + +/***/ }), + /***/ "./node_modules/@mui/material/Typography/Typography.js": /*!*************************************************************!*\ !*** ./node_modules/@mui/material/Typography/Typography.js ***! @@ -3572,6 +3627,622 @@ eval("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ./cjs /***/ }), +/***/ "./node_modules/@popperjs/core/lib/createPopper.js": +/*!*********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/createPopper.js ***! + \*********************************************************/ +/***/ ((__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 */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]),\n/* harmony export */ popperGenerator: () => (/* binding */ popperGenerator)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dom-utils/getCompositeRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./dom-utils/listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/orderModifiers.js */ \"./node_modules/@popperjs/core/lib/utils/orderModifiers.js\");\n/* harmony import */ var _utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./utils/debounce.js */ \"./node_modules/@popperjs/core/lib/utils/debounce.js\");\n/* harmony import */ var _utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/mergeByName.js */ \"./node_modules/@popperjs/core/lib/utils/mergeByName.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\n\n\n\n\n\nvar DEFAULT_OPTIONS = {\n placement: 'bottom',\n modifiers: [],\n strategy: 'absolute'\n};\n\nfunction areValidElements() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n return !args.some(function (element) {\n return !(element && typeof element.getBoundingClientRect === 'function');\n });\n}\n\nfunction popperGenerator(generatorOptions) {\n if (generatorOptions === void 0) {\n generatorOptions = {};\n }\n\n var _generatorOptions = generatorOptions,\n _generatorOptions$def = _generatorOptions.defaultModifiers,\n defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def,\n _generatorOptions$def2 = _generatorOptions.defaultOptions,\n defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2;\n return function createPopper(reference, popper, options) {\n if (options === void 0) {\n options = defaultOptions;\n }\n\n var state = {\n placement: 'bottom',\n orderedModifiers: [],\n options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions),\n modifiersData: {},\n elements: {\n reference: reference,\n popper: popper\n },\n attributes: {},\n styles: {}\n };\n var effectCleanupFns = [];\n var isDestroyed = false;\n var instance = {\n state: state,\n setOptions: function setOptions(setOptionsAction) {\n var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction;\n cleanupModifierEffects();\n state.options = Object.assign({}, defaultOptions, state.options, options);\n state.scrollParents = {\n reference: (0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(reference) ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(reference) : reference.contextElement ? (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(reference.contextElement) : [],\n popper: (0,_dom_utils_listScrollParents_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(popper)\n }; // Orders the modifiers based on their dependencies and `phase`\n // properties\n\n var orderedModifiers = (0,_utils_orderModifiers_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_utils_mergeByName_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers\n\n state.orderedModifiers = orderedModifiers.filter(function (m) {\n return m.enabled;\n });\n runModifierEffects();\n return instance.update();\n },\n // Sync update – it will always be executed, even if not necessary. This\n // is useful for low frequency updates where sync behavior simplifies the\n // logic.\n // For high frequency updates (e.g. `resize` and `scroll` events), always\n // prefer the async Popper#update method\n forceUpdate: function forceUpdate() {\n if (isDestroyed) {\n return;\n }\n\n var _state$elements = state.elements,\n reference = _state$elements.reference,\n popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements\n // anymore\n\n if (!areValidElements(reference, popper)) {\n return;\n } // Store the reference and popper rects to be read by modifiers\n\n\n state.rects = {\n reference: (0,_dom_utils_getCompositeRect_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(reference, (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(popper), state.options.strategy === 'fixed'),\n popper: (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(popper)\n }; // Modifiers have the ability to reset the current update cycle. The\n // most common use case for this is the `flip` modifier changing the\n // placement, which then needs to re-run all the modifiers, because the\n // logic was previously ran for the previous placement and is therefore\n // stale/incorrect\n\n state.reset = false;\n state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier\n // is filled with the initial data specified by the modifier. This means\n // it doesn't persist and is fresh on each update.\n // To ensure persistent data, use `${name}#persistent`\n\n state.orderedModifiers.forEach(function (modifier) {\n return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);\n });\n\n for (var index = 0; index < state.orderedModifiers.length; index++) {\n if (state.reset === true) {\n state.reset = false;\n index = -1;\n continue;\n }\n\n var _state$orderedModifie = state.orderedModifiers[index],\n fn = _state$orderedModifie.fn,\n _state$orderedModifie2 = _state$orderedModifie.options,\n _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2,\n name = _state$orderedModifie.name;\n\n if (typeof fn === 'function') {\n state = fn({\n state: state,\n options: _options,\n name: name,\n instance: instance\n }) || state;\n }\n }\n },\n // Async and optimistically optimized update – it will not be executed if\n // not necessary (debounced to run at most once-per-tick)\n update: (0,_utils_debounce_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(function () {\n return new Promise(function (resolve) {\n instance.forceUpdate();\n resolve(state);\n });\n }),\n destroy: function destroy() {\n cleanupModifierEffects();\n isDestroyed = true;\n }\n };\n\n if (!areValidElements(reference, popper)) {\n return instance;\n }\n\n instance.setOptions(options).then(function (state) {\n if (!isDestroyed && options.onFirstUpdate) {\n options.onFirstUpdate(state);\n }\n }); // Modifiers have the ability to execute arbitrary code before the first\n // update cycle runs. They will be executed in the same order as the update\n // cycle. This is useful when a modifier adds some persistent data that\n // other modifiers need to use, but the modifier is run after the dependent\n // one.\n\n function runModifierEffects() {\n state.orderedModifiers.forEach(function (_ref) {\n var name = _ref.name,\n _ref$options = _ref.options,\n options = _ref$options === void 0 ? {} : _ref$options,\n effect = _ref.effect;\n\n if (typeof effect === 'function') {\n var cleanupFn = effect({\n state: state,\n name: name,\n instance: instance,\n options: options\n });\n\n var noopFn = function noopFn() {};\n\n effectCleanupFns.push(cleanupFn || noopFn);\n }\n });\n }\n\n function cleanupModifierEffects() {\n effectCleanupFns.forEach(function (fn) {\n return fn();\n });\n effectCleanupFns = [];\n }\n\n return instance;\n };\n}\nvar createPopper = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/createPopper.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/contains.js": +/*!***************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/contains.js ***! + \***************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ contains)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction contains(parent, child) {\n var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method\n\n if (parent.contains(child)) {\n return true;\n } // then fallback to custom implementation with Shadow DOM support\n else if (rootNode && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {\n var next = child;\n\n do {\n if (next && parent.isSameNode(next)) {\n return true;\n } // $FlowFixMe[prop-missing]: need a better way to handle this...\n\n\n next = next.parentNode || next.host;\n } while (next);\n } // Give up, the result is false\n\n\n return false;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/contains.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js": +/*!****************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js ***! + \****************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getBoundingClientRect)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./isLayoutViewport.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\");\n\n\n\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy) {\n if (includeScale === void 0) {\n includeScale = false;\n }\n\n if (isFixedStrategy === void 0) {\n isFixedStrategy = false;\n }\n\n var clientRect = element.getBoundingClientRect();\n var scaleX = 1;\n var scaleY = 1;\n\n if (includeScale && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n scaleX = element.offsetWidth > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.width) / element.offsetWidth || 1 : 1;\n scaleY = element.offsetHeight > 0 ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_1__.round)(clientRect.height) / element.offsetHeight || 1 : 1;\n }\n\n var _ref = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element) : window,\n visualViewport = _ref.visualViewport;\n\n var addVisualOffsets = !(0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])() && isFixedStrategy;\n var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX;\n var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY;\n var width = clientRect.width / scaleX;\n var height = clientRect.height / scaleY;\n return {\n width: width,\n height: height,\n top: y,\n right: x + width,\n bottom: y + height,\n left: x,\n x: x,\n y: y\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getClippingRect)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getViewportRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js\");\n/* harmony import */ var _getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getDocumentRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js\");\n/* harmony import */ var _listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./listScrollParents.js */ \"./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js\");\n/* harmony import */ var _getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _contains_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getInnerBoundingClientRect(element, strategy) {\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element, false, strategy === 'fixed');\n rect.top = rect.top + element.clientTop;\n rect.left = rect.left + element.clientLeft;\n rect.bottom = rect.top + element.clientHeight;\n rect.right = rect.left + element.clientWidth;\n rect.width = element.clientWidth;\n rect.height = element.clientHeight;\n rect.x = rect.left;\n rect.y = rect.top;\n return rect;\n}\n\nfunction getClientRectFromMixedType(element, clippingParent, strategy) {\n return clippingParent === _enums_js__WEBPACK_IMPORTED_MODULE_1__.viewport ? (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_getViewportRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element, strategy)) : (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : (0,_utils_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])((0,_getDocumentRect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(element)));\n} // A \"clipping parent\" is an overflowable container with the characteristic of\n// clipping (or hiding) overflowing elements with a position different from\n// `initial`\n\n\nfunction getClippingParents(element) {\n var clippingParents = (0,_listScrollParents_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(element));\n var canEscapeClipping = ['absolute', 'fixed'].indexOf((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(element).position) >= 0;\n var clipperElement = canEscapeClipping && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isHTMLElement)(element) ? (0,_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"])(element) : element;\n\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clipperElement)) {\n return [];\n } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414\n\n\n return clippingParents.filter(function (clippingParent) {\n return (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(clippingParent) && (0,_contains_js__WEBPACK_IMPORTED_MODULE_11__[\"default\"])(clippingParent, clipperElement) && (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_12__[\"default\"])(clippingParent) !== 'body';\n });\n} // Gets the maximum area that the element is visible in due to any number of\n// clipping parents\n\n\nfunction getClippingRect(element, boundary, rootBoundary, strategy) {\n var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary);\n var clippingParents = [].concat(mainClippingParents, [rootBoundary]);\n var firstClippingParent = clippingParents[0];\n var clippingRect = clippingParents.reduce(function (accRect, clippingParent) {\n var rect = getClientRectFromMixedType(element, clippingParent, strategy);\n accRect.top = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.top, accRect.top);\n accRect.right = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.right, accRect.right);\n accRect.bottom = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.min)(rect.bottom, accRect.bottom);\n accRect.left = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_13__.max)(rect.left, accRect.left);\n return accRect;\n }, getClientRectFromMixedType(element, firstClippingParent, strategy));\n clippingRect.width = clippingRect.right - clippingRect.left;\n clippingRect.height = clippingRect.bottom - clippingRect.top;\n clippingRect.x = clippingRect.left;\n clippingRect.y = clippingRect.top;\n return clippingRect;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js ***! + \***********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getCompositeRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./getNodeScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\nfunction isElementScaled(element) {\n var rect = element.getBoundingClientRect();\n var scaleX = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.width) / element.offsetWidth || 1;\n var scaleY = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(rect.height) / element.offsetHeight || 1;\n return scaleX !== 1 || scaleY !== 1;\n} // Returns the composite rect of an element relative to its offsetParent.\n// Composite means it takes into account transforms as well as layout.\n\n\nfunction getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) {\n if (isFixed === void 0) {\n isFixed = false;\n }\n\n var isOffsetParentAnElement = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent);\n var offsetParentIsScaled = (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent) && isElementScaled(offsetParent);\n var documentElement = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(offsetParent);\n var rect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(elementOrVirtualElement, offsetParentIsScaled, isFixed);\n var scroll = {\n scrollLeft: 0,\n scrollTop: 0\n };\n var offsets = {\n x: 0,\n y: 0\n };\n\n if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078\n (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(documentElement)) {\n scroll = (0,_getNodeScroll_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(offsetParent);\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(offsetParent)) {\n offsets = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(offsetParent, true);\n offsets.x += offsetParent.clientLeft;\n offsets.y += offsetParent.clientTop;\n } else if (documentElement) {\n offsets.x = (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(documentElement);\n }\n }\n\n return {\n x: rect.left + scroll.scrollLeft - offsets.x,\n y: rect.top + scroll.scrollTop - offsets.y,\n width: rect.width,\n height: rect.height\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getCompositeRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js ***! + \***********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getComputedStyle)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getComputedStyle(element) {\n return (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element).getComputedStyle(element);\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js": +/*!*************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js ***! + \*************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getDocumentElement)\n/* harmony export */ });\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\nfunction getDocumentElement(element) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return (((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isElement)(element) ? element.ownerDocument : // $FlowFixMe[prop-missing]\n element.document) || window.document).documentElement;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getDocumentRect)\n/* harmony export */ });\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n // Gets the entire size of the scrollable document area, even extending outside\n// of the `` and `` rect bounds if horizontally scrollable\n\nfunction getDocumentRect(element) {\n var _element$ownerDocumen;\n\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var winScroll = (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body;\n var width = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0);\n var height = (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0);\n var x = -winScroll.scrollLeft + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n var y = -winScroll.scrollTop;\n\n if ((0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(body || html).direction === 'rtl') {\n x += (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_2__.max)(html.clientWidth, body ? body.clientWidth : 0) - width;\n }\n\n return {\n width: width,\n height: height,\n x: x,\n y: y\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getDocumentRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js ***! + \***************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getHTMLElementScroll)\n/* harmony export */ });\nfunction getHTMLElementScroll(element) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js ***! + \********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getLayoutRect)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n // Returns the layout rect of an element relative to its offsetParent. Layout\n// means it doesn't take into account transforms.\n\nfunction getLayoutRect(element) {\n var clientRect = (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element); // Use the clientRect sizes if it's not been transformed.\n // Fixes https://github.com/popperjs/popper-core/issues/1223\n\n var width = element.offsetWidth;\n var height = element.offsetHeight;\n\n if (Math.abs(clientRect.width - width) <= 1) {\n width = clientRect.width;\n }\n\n if (Math.abs(clientRect.height - height) <= 1) {\n height = clientRect.height;\n }\n\n return {\n x: element.offsetLeft,\n y: element.offsetTop,\n width: width,\n height: height\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js ***! + \******************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getNodeName)\n/* harmony export */ });\nfunction getNodeName(element) {\n return element ? (element.nodeName || '').toLowerCase() : null;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js ***! + \********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getNodeScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getHTMLElementScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getHTMLElementScroll.js\");\n\n\n\n\nfunction getNodeScroll(node) {\n if (node === (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node) || !(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node)) {\n return (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node);\n } else {\n return (0,_getHTMLElementScroll_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node);\n }\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getNodeScroll.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getOffsetParent)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _isTableElement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./isTableElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/userAgent.js */ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\");\n\n\n\n\n\n\n\n\nfunction getTrueOffsetParent(element) {\n if (!(0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || // https://github.com/popperjs/popper-core/issues/837\n (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element).position === 'fixed') {\n return null;\n }\n\n return element.offsetParent;\n} // `.offsetParent` reports `null` for fixed elements, while absolute elements\n// return the containing block\n\n\nfunction getContainingBlock(element) {\n var isFirefox = /firefox/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n var isIE = /Trident/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])());\n\n if (isIE && (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element)) {\n // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport\n var elementCss = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n\n if (elementCss.position === 'fixed') {\n return null;\n }\n }\n\n var currentNode = (0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element);\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(currentNode)) {\n currentNode = currentNode.host;\n }\n\n while ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(currentNode) && ['html', 'body'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(currentNode)) < 0) {\n var css = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(currentNode); // This is non-exhaustive but covers the most common CSS properties that\n // create a containing block.\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n\n if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') {\n return currentNode;\n } else {\n currentNode = currentNode.parentNode;\n }\n }\n\n return null;\n} // Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\n\n\nfunction getOffsetParent(element) {\n var window = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(element);\n var offsetParent = getTrueOffsetParent(element);\n\n while (offsetParent && (0,_isTableElement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(offsetParent) && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent).position === 'static') {\n offsetParent = getTrueOffsetParent(offsetParent);\n }\n\n if (offsetParent && ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) === 'html' || (0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(offsetParent) === 'body' && (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(offsetParent).position === 'static')) {\n return window;\n }\n\n return offsetParent || getContainingBlock(element) || window;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js ***! + \********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getParentNode)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\nfunction getParentNode(element) {\n if ((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element) === 'html') {\n return element;\n }\n\n return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle\n // $FlowFixMe[incompatible-return]\n // $FlowFixMe[prop-missing]\n element.assignedSlot || // step into the shadow DOM of the parent of a slotted node\n element.parentNode || ( // DOM Element detected\n (0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isShadowRoot)(element) ? element.host : null) || // ShadowRoot detected\n // $FlowFixMe[incompatible-call]: HTMLElement is a Node\n (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element) // fallback\n\n );\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _instanceOf_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n\n\n\nfunction getScrollParent(node) {\n if (['html', 'body', '#document'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node)) >= 0) {\n // $FlowFixMe[incompatible-return]: assume body is always available\n return node.ownerDocument.body;\n }\n\n if ((0,_instanceOf_js__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(node) && (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(node)) {\n return node;\n }\n\n return getScrollParent((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(node));\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getViewportRect)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getWindowScrollBarX.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js\");\n/* harmony import */ var _isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isLayoutViewport.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js\");\n\n\n\n\nfunction getViewportRect(element, strategy) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var html = (0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element);\n var visualViewport = win.visualViewport;\n var width = html.clientWidth;\n var height = html.clientHeight;\n var x = 0;\n var y = 0;\n\n if (visualViewport) {\n width = visualViewport.width;\n height = visualViewport.height;\n var layoutViewport = (0,_isLayoutViewport_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])();\n\n if (layoutViewport || !layoutViewport && strategy === 'fixed') {\n x = visualViewport.offsetLeft;\n y = visualViewport.offsetTop;\n }\n }\n\n return {\n width: width,\n height: height,\n x: x + (0,_getWindowScrollBarX_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(element),\n y: y\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getViewportRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindow.js": +/*!****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindow.js ***! + \****************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getWindow)\n/* harmony export */ });\nfunction getWindow(node) {\n if (node == null) {\n return window;\n }\n\n if (node.toString() !== '[object Window]') {\n var ownerDocument = node.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView || window : window;\n }\n\n return node;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getWindow.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getWindowScroll)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\nfunction getWindowScroll(node) {\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node);\n var scrollLeft = win.pageXOffset;\n var scrollTop = win.pageYOffset;\n return {\n scrollLeft: scrollLeft,\n scrollTop: scrollTop\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js": +/*!**************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js ***! + \**************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getWindowScrollBarX)\n/* harmony export */ });\n/* harmony import */ var _getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./getWindowScroll.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindowScroll.js\");\n\n\n\nfunction getWindowScrollBarX(element) {\n // If has a CSS width greater than the viewport, then this will be\n // incorrect for RTL.\n // Popper 1 is broken in this case and never had a bug report so let's assume\n // it's not an issue. I don't think anyone ever specifies width on \n // anyway.\n // Browsers where the left scrollbar doesn't cause an issue report `0` for\n // this (e.g. Edge 2019, IE11, Safari)\n return (0,_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])((0,_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)).left + (0,_getWindowScroll_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(element).scrollLeft;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/getWindowScrollBarX.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js ***! + \*****************************************************************/ +/***/ ((__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 */ isElement: () => (/* binding */ isElement),\n/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement),\n/* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot)\n/* harmony export */ });\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n\n\nfunction isElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).Element;\n return node instanceof OwnElement || node instanceof Element;\n}\n\nfunction isHTMLElement(node) {\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).HTMLElement;\n return node instanceof OwnElement || node instanceof HTMLElement;\n}\n\nfunction isShadowRoot(node) {\n // IE 11 has no ShadowRoot\n if (typeof ShadowRoot === 'undefined') {\n return false;\n }\n\n var OwnElement = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(node).ShadowRoot;\n return node instanceof OwnElement || node instanceof ShadowRoot;\n}\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js ***! + \***********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ isLayoutViewport)\n/* harmony export */ });\n/* harmony import */ var _utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/userAgent.js */ \"./node_modules/@popperjs/core/lib/utils/userAgent.js\");\n\nfunction isLayoutViewport() {\n return !/^((?!chrome|android).)*safari/i.test((0,_utils_userAgent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])());\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/isLayoutViewport.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js ***! + \*********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ isScrollParent)\n/* harmony export */ });\n/* harmony import */ var _getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n\nfunction isScrollParent(element) {\n // Firefox wants us to check `-x` and `-y` variations as well\n var _getComputedStyle = (0,_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element),\n overflow = _getComputedStyle.overflow,\n overflowX = _getComputedStyle.overflowX,\n overflowY = _getComputedStyle.overflowY;\n\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX);\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js ***! + \*********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ isTableElement)\n/* harmony export */ });\n/* harmony import */ var _getNodeName_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n\nfunction isTableElement(element) {\n return ['table', 'td', 'th'].indexOf((0,_getNodeName_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element)) >= 0;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/isTableElement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js": +/*!************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js ***! + \************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ listScrollParents)\n/* harmony export */ });\n/* harmony import */ var _getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getScrollParent.js\");\n/* harmony import */ var _getParentNode_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getParentNode.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getParentNode.js\");\n/* harmony import */ var _getWindow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./isScrollParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/isScrollParent.js\");\n\n\n\n\n/*\ngiven a DOM element, return the list of all scroll parents, up the list of ancesors\nuntil we get to the top window object. This list is what we attach scroll listeners\nto, because if any of these parent elements scroll, we'll need to re-calculate the\nreference element's position.\n*/\n\nfunction listScrollParents(element, list) {\n var _element$ownerDocumen;\n\n if (list === void 0) {\n list = [];\n }\n\n var scrollParent = (0,_getScrollParent_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(element);\n var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body);\n var win = (0,_getWindow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(scrollParent);\n var target = isBody ? [win].concat(win.visualViewport || [], (0,_isScrollParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(scrollParent) ? scrollParent : []) : scrollParent;\n var updatedList = list.concat(target);\n return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here\n updatedList.concat(listScrollParents((0,_getParentNode_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(target)));\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/dom-utils/listScrollParents.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/enums.js": +/*!**************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/enums.js ***! + \**************************************************/ +/***/ ((__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 */ afterMain: () => (/* binding */ afterMain),\n/* harmony export */ afterRead: () => (/* binding */ afterRead),\n/* harmony export */ afterWrite: () => (/* binding */ afterWrite),\n/* harmony export */ auto: () => (/* binding */ auto),\n/* harmony export */ basePlacements: () => (/* binding */ basePlacements),\n/* harmony export */ beforeMain: () => (/* binding */ beforeMain),\n/* harmony export */ beforeRead: () => (/* binding */ beforeRead),\n/* harmony export */ beforeWrite: () => (/* binding */ beforeWrite),\n/* harmony export */ bottom: () => (/* binding */ bottom),\n/* harmony export */ clippingParents: () => (/* binding */ clippingParents),\n/* harmony export */ end: () => (/* binding */ end),\n/* harmony export */ left: () => (/* binding */ left),\n/* harmony export */ main: () => (/* binding */ main),\n/* harmony export */ modifierPhases: () => (/* binding */ modifierPhases),\n/* harmony export */ placements: () => (/* binding */ placements),\n/* harmony export */ popper: () => (/* binding */ popper),\n/* harmony export */ read: () => (/* binding */ read),\n/* harmony export */ reference: () => (/* binding */ reference),\n/* harmony export */ right: () => (/* binding */ right),\n/* harmony export */ start: () => (/* binding */ start),\n/* harmony export */ top: () => (/* binding */ top),\n/* harmony export */ variationPlacements: () => (/* binding */ variationPlacements),\n/* harmony export */ viewport: () => (/* binding */ viewport),\n/* harmony export */ write: () => (/* binding */ write)\n/* harmony export */ });\nvar top = 'top';\nvar bottom = 'bottom';\nvar right = 'right';\nvar left = 'left';\nvar auto = 'auto';\nvar basePlacements = [top, bottom, right, left];\nvar start = 'start';\nvar end = 'end';\nvar clippingParents = 'clippingParents';\nvar viewport = 'viewport';\nvar popper = 'popper';\nvar reference = 'reference';\nvar variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) {\n return acc.concat([placement + \"-\" + start, placement + \"-\" + end]);\n}, []);\nvar placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) {\n return acc.concat([placement, placement + \"-\" + start, placement + \"-\" + end]);\n}, []); // modifiers that need to read the DOM\n\nvar beforeRead = 'beforeRead';\nvar read = 'read';\nvar afterRead = 'afterRead'; // pure-logic modifiers\n\nvar beforeMain = 'beforeMain';\nvar main = 'main';\nvar afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state)\n\nvar beforeWrite = 'beforeWrite';\nvar write = 'write';\nvar afterWrite = 'afterWrite';\nvar modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite];\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/enums.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/applyStyles.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/applyStyles.js ***! + \******************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../dom-utils/getNodeName.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getNodeName.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n\n // This modifier takes the styles prepared by the `computeStyles` modifier\n// and applies them to the HTMLElements such as popper and arrow\n\nfunction applyStyles(_ref) {\n var state = _ref.state;\n Object.keys(state.elements).forEach(function (name) {\n var style = state.styles[name] || {};\n var attributes = state.attributes[name] || {};\n var element = state.elements[name]; // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) {\n return;\n } // Flow doesn't support to extend this property, but it's the most\n // effective way to apply styles to an HTMLElement\n // $FlowFixMe[cannot-write]\n\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (name) {\n var value = attributes[name];\n\n if (value === false) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value === true ? '' : value);\n }\n });\n });\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state;\n var initialStyles = {\n popper: {\n position: state.options.strategy,\n left: '0',\n top: '0',\n margin: '0'\n },\n arrow: {\n position: 'absolute'\n },\n reference: {}\n };\n Object.assign(state.elements.popper.style, initialStyles.popper);\n state.styles = initialStyles;\n\n if (state.elements.arrow) {\n Object.assign(state.elements.arrow.style, initialStyles.arrow);\n }\n\n return function () {\n Object.keys(state.elements).forEach(function (name) {\n var element = state.elements[name];\n var attributes = state.attributes[name] || {};\n var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them\n\n var style = styleProperties.reduce(function (style, property) {\n style[property] = '';\n return style;\n }, {}); // arrow is optional + virtual elements\n\n if (!(0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) || !(0,_dom_utils_getNodeName_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(element)) {\n return;\n }\n\n Object.assign(element.style, style);\n Object.keys(attributes).forEach(function (attribute) {\n element.removeAttribute(attribute);\n });\n });\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'applyStyles',\n enabled: true,\n phase: 'write',\n fn: applyStyles,\n effect: effect,\n requires: ['computeStyles']\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/applyStyles.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/arrow.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/arrow.js ***! + \************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../dom-utils/contains.js */ \"./node_modules/@popperjs/core/lib/dom-utils/contains.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/within.js */ \"./node_modules/@popperjs/core/lib/utils/within.js\");\n/* harmony import */ var _utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar toPaddingObject = function toPaddingObject(padding, state) {\n padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, {\n placement: state.placement\n })) : padding;\n return (0,_utils_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(typeof padding !== 'number' ? padding : (0,_utils_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_2__.basePlacements));\n};\n\nfunction arrow(_ref) {\n var _state$modifiersData$;\n\n var state = _ref.state,\n name = _ref.name,\n options = _ref.options;\n var arrowElement = state.elements.arrow;\n var popperOffsets = state.modifiersData.popperOffsets;\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(state.placement);\n var axis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(basePlacement);\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_2__.left, _enums_js__WEBPACK_IMPORTED_MODULE_2__.right].indexOf(basePlacement) >= 0;\n var len = isVertical ? 'height' : 'width';\n\n if (!arrowElement || !popperOffsets) {\n return;\n }\n\n var paddingObject = toPaddingObject(options.padding, state);\n var arrowRect = (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(arrowElement);\n var minProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.top : _enums_js__WEBPACK_IMPORTED_MODULE_2__.left;\n var maxProp = axis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_2__.right;\n var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len];\n var startDiff = popperOffsets[axis] - state.rects.reference[axis];\n var arrowOffsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(arrowElement);\n var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0;\n var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is\n // outside of the popper bounds\n\n var min = paddingObject[minProp];\n var max = clientSize - arrowRect[len] - paddingObject[maxProp];\n var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference;\n var offset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_7__.within)(min, center, max); // Prevents breaking syntax highlighting...\n\n var axisProp = axis;\n state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$);\n}\n\nfunction effect(_ref2) {\n var state = _ref2.state,\n options = _ref2.options;\n var _options$element = options.element,\n arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element;\n\n if (arrowElement == null) {\n return;\n } // CSS selector\n\n\n if (typeof arrowElement === 'string') {\n arrowElement = state.elements.popper.querySelector(arrowElement);\n\n if (!arrowElement) {\n return;\n }\n }\n\n if (!(0,_dom_utils_contains_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(state.elements.popper, arrowElement)) {\n return;\n }\n\n state.elements.arrow = arrowElement;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'arrow',\n enabled: true,\n phase: 'main',\n fn: arrow,\n effect: effect,\n requires: ['popperOffsets'],\n requiresIfExists: ['preventOverflow']\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/arrow.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/computeStyles.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/computeStyles.js ***! + \********************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ mapToStyles: () => (/* binding */ mapToStyles)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getComputedStyle.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getComputedStyle.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nvar unsetSides = {\n top: 'auto',\n right: 'auto',\n bottom: 'auto',\n left: 'auto'\n}; // Round the offsets to the nearest suitable subpixel based on the DPR.\n// Zooming can change the DPR, but it seems to report a value that will\n// cleanly divide the values into the appropriate subpixels.\n\nfunction roundOffsetsByDPR(_ref, win) {\n var x = _ref.x,\n y = _ref.y;\n var dpr = win.devicePixelRatio || 1;\n return {\n x: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(x * dpr) / dpr || 0,\n y: (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_0__.round)(y * dpr) / dpr || 0\n };\n}\n\nfunction mapToStyles(_ref2) {\n var _Object$assign2;\n\n var popper = _ref2.popper,\n popperRect = _ref2.popperRect,\n placement = _ref2.placement,\n variation = _ref2.variation,\n offsets = _ref2.offsets,\n position = _ref2.position,\n gpuAcceleration = _ref2.gpuAcceleration,\n adaptive = _ref2.adaptive,\n roundOffsets = _ref2.roundOffsets,\n isFixed = _ref2.isFixed;\n var _offsets$x = offsets.x,\n x = _offsets$x === void 0 ? 0 : _offsets$x,\n _offsets$y = offsets.y,\n y = _offsets$y === void 0 ? 0 : _offsets$y;\n\n var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({\n x: x,\n y: y\n }) : {\n x: x,\n y: y\n };\n\n x = _ref3.x;\n y = _ref3.y;\n var hasX = offsets.hasOwnProperty('x');\n var hasY = offsets.hasOwnProperty('y');\n var sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.left;\n var sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\n var win = window;\n\n if (adaptive) {\n var offsetParent = (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(popper);\n var heightProp = 'clientHeight';\n var widthProp = 'clientWidth';\n\n if (offsetParent === (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper)) {\n offsetParent = (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(popper);\n\n if ((0,_dom_utils_getComputedStyle_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(offsetParent).position !== 'static' && position === 'absolute') {\n heightProp = 'scrollHeight';\n widthProp = 'scrollWidth';\n }\n } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it\n\n\n offsetParent = offsetParent;\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.right) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\n sideY = _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom;\n var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing]\n offsetParent[heightProp];\n y -= offsetY - popperRect.height;\n y *= gpuAcceleration ? 1 : -1;\n }\n\n if (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.left || (placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.top || placement === _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom) && variation === _enums_js__WEBPACK_IMPORTED_MODULE_1__.end) {\n sideX = _enums_js__WEBPACK_IMPORTED_MODULE_1__.right;\n var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing]\n offsetParent[widthProp];\n x -= offsetX - popperRect.width;\n x *= gpuAcceleration ? 1 : -1;\n }\n }\n\n var commonStyles = Object.assign({\n position: position\n }, adaptive && unsetSides);\n\n var _ref4 = roundOffsets === true ? roundOffsetsByDPR({\n x: x,\n y: y\n }, (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(popper)) : {\n x: x,\n y: y\n };\n\n x = _ref4.x;\n y = _ref4.y;\n\n if (gpuAcceleration) {\n var _Object$assign;\n\n return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? \"translate(\" + x + \"px, \" + y + \"px)\" : \"translate3d(\" + x + \"px, \" + y + \"px, 0)\", _Object$assign));\n }\n\n return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + \"px\" : '', _Object$assign2[sideX] = hasX ? x + \"px\" : '', _Object$assign2.transform = '', _Object$assign2));\n}\n\nfunction computeStyles(_ref5) {\n var state = _ref5.state,\n options = _ref5.options;\n var _options$gpuAccelerat = options.gpuAcceleration,\n gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat,\n _options$adaptive = options.adaptive,\n adaptive = _options$adaptive === void 0 ? true : _options$adaptive,\n _options$roundOffsets = options.roundOffsets,\n roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;\n var commonStyles = {\n placement: (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.placement),\n variation: (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])(state.placement),\n popper: state.elements.popper,\n popperRect: state.rects.popper,\n gpuAcceleration: gpuAcceleration,\n isFixed: state.options.strategy === 'fixed'\n };\n\n if (state.modifiersData.popperOffsets != null) {\n state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.popperOffsets,\n position: state.options.strategy,\n adaptive: adaptive,\n roundOffsets: roundOffsets\n })));\n }\n\n if (state.modifiersData.arrow != null) {\n state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, {\n offsets: state.modifiersData.arrow,\n position: 'absolute',\n adaptive: false,\n roundOffsets: roundOffsets\n })));\n }\n\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-placement': state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'computeStyles',\n enabled: true,\n phase: 'beforeWrite',\n fn: computeStyles,\n data: {}\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/computeStyles.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/eventListeners.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/eventListeners.js ***! + \*********************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../dom-utils/getWindow.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getWindow.js\");\n // eslint-disable-next-line import/no-unused-modules\n\nvar passive = {\n passive: true\n};\n\nfunction effect(_ref) {\n var state = _ref.state,\n instance = _ref.instance,\n options = _ref.options;\n var _options$scroll = options.scroll,\n scroll = _options$scroll === void 0 ? true : _options$scroll,\n _options$resize = options.resize,\n resize = _options$resize === void 0 ? true : _options$resize;\n var window = (0,_dom_utils_getWindow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state.elements.popper);\n var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper);\n\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.addEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.addEventListener('resize', instance.update, passive);\n }\n\n return function () {\n if (scroll) {\n scrollParents.forEach(function (scrollParent) {\n scrollParent.removeEventListener('scroll', instance.update, passive);\n });\n }\n\n if (resize) {\n window.removeEventListener('resize', instance.update, passive);\n }\n };\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'eventListeners',\n enabled: true,\n phase: 'write',\n fn: function fn() {},\n effect: effect,\n data: {}\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/eventListeners.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/flip.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/flip.js ***! + \***********************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getOppositePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getOppositeVariationPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/computeAutoPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction getExpandedFallbackPlacements(placement) {\n if ((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto) {\n return [];\n }\n\n var oppositePlacement = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(placement);\n return [(0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(placement), oppositePlacement, (0,_utils_getOppositeVariationPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(oppositePlacement)];\n}\n\nfunction flip(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n\n if (state.modifiersData[name]._skip) {\n return;\n }\n\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis,\n specifiedFallbackPlacements = options.fallbackPlacements,\n padding = options.padding,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n _options$flipVariatio = options.flipVariations,\n flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio,\n allowedAutoPlacements = options.allowedAutoPlacements;\n var preferredPlacement = state.options.placement;\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(preferredPlacement);\n var isBasePlacement = basePlacement === preferredPlacement;\n var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [(0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement));\n var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) {\n return acc.concat((0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.auto ? (0,_utils_computeAutoPlacement_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n flipVariations: flipVariations,\n allowedAutoPlacements: allowedAutoPlacements\n }) : placement);\n }, []);\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var checksMap = new Map();\n var makeFallbackChecks = true;\n var firstFittingPlacement = placements[0];\n\n for (var i = 0; i < placements.length; i++) {\n var placement = placements[i];\n\n var _basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n\n var isStartVariation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(placement) === _enums_js__WEBPACK_IMPORTED_MODULE_1__.start;\n var isVertical = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.top, _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom].indexOf(_basePlacement) >= 0;\n var len = isVertical ? 'width' : 'height';\n var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n altBoundary: altBoundary,\n padding: padding\n });\n var mainVariationSide = isVertical ? isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.right : _enums_js__WEBPACK_IMPORTED_MODULE_1__.left : isStartVariation ? _enums_js__WEBPACK_IMPORTED_MODULE_1__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_1__.top;\n\n if (referenceRect[len] > popperRect[len]) {\n mainVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(mainVariationSide);\n }\n\n var altVariationSide = (0,_utils_getOppositePlacement_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(mainVariationSide);\n var checks = [];\n\n if (checkMainAxis) {\n checks.push(overflow[_basePlacement] <= 0);\n }\n\n if (checkAltAxis) {\n checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0);\n }\n\n if (checks.every(function (check) {\n return check;\n })) {\n firstFittingPlacement = placement;\n makeFallbackChecks = false;\n break;\n }\n\n checksMap.set(placement, checks);\n }\n\n if (makeFallbackChecks) {\n // `2` may be desired in some cases – research later\n var numberOfChecks = flipVariations ? 3 : 1;\n\n var _loop = function _loop(_i) {\n var fittingPlacement = placements.find(function (placement) {\n var checks = checksMap.get(placement);\n\n if (checks) {\n return checks.slice(0, _i).every(function (check) {\n return check;\n });\n }\n });\n\n if (fittingPlacement) {\n firstFittingPlacement = fittingPlacement;\n return \"break\";\n }\n };\n\n for (var _i = numberOfChecks; _i > 0; _i--) {\n var _ret = _loop(_i);\n\n if (_ret === \"break\") break;\n }\n }\n\n if (state.placement !== firstFittingPlacement) {\n state.modifiersData[name]._skip = true;\n state.placement = firstFittingPlacement;\n state.reset = true;\n }\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'flip',\n enabled: true,\n phase: 'main',\n fn: flip,\n requiresIfExists: ['offset'],\n data: {\n _skip: false\n }\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/flip.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/hide.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/hide.js ***! + \***********************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n\n\n\nfunction getSideOffsets(overflow, rect, preventedOffsets) {\n if (preventedOffsets === void 0) {\n preventedOffsets = {\n x: 0,\n y: 0\n };\n }\n\n return {\n top: overflow.top - rect.height - preventedOffsets.y,\n right: overflow.right - rect.width + preventedOffsets.x,\n bottom: overflow.bottom - rect.height + preventedOffsets.y,\n left: overflow.left - rect.width - preventedOffsets.x\n };\n}\n\nfunction isAnySideFullyClipped(overflow) {\n return [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom, _enums_js__WEBPACK_IMPORTED_MODULE_0__.left].some(function (side) {\n return overflow[side] >= 0;\n });\n}\n\nfunction hide(_ref) {\n var state = _ref.state,\n name = _ref.name;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var preventedOffsets = state.modifiersData.preventOverflow;\n var referenceOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n elementContext: 'reference'\n });\n var popperAltOverflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state, {\n altBoundary: true\n });\n var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect);\n var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets);\n var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets);\n var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets);\n state.modifiersData[name] = {\n referenceClippingOffsets: referenceClippingOffsets,\n popperEscapeOffsets: popperEscapeOffsets,\n isReferenceHidden: isReferenceHidden,\n hasPopperEscaped: hasPopperEscaped\n };\n state.attributes.popper = Object.assign({}, state.attributes.popper, {\n 'data-popper-reference-hidden': isReferenceHidden,\n 'data-popper-escaped': hasPopperEscaped\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'hide',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['preventOverflow'],\n fn: hide\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/hide.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/index.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/index.js ***! + \************************************************************/ +/***/ ((__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 */ applyStyles: () => (/* reexport safe */ _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ arrow: () => (/* reexport safe */ _arrow_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ computeStyles: () => (/* reexport safe */ _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ eventListeners: () => (/* reexport safe */ _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ flip: () => (/* reexport safe */ _flip_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"]),\n/* harmony export */ hide: () => (/* reexport safe */ _hide_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ offset: () => (/* reexport safe */ _offset_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"]),\n/* harmony export */ popperOffsets: () => (/* reexport safe */ _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"]),\n/* harmony export */ preventOverflow: () => (/* reexport safe */ _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _applyStyles_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n/* harmony import */ var _arrow_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./arrow.js */ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\");\n/* harmony import */ var _computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _eventListeners_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _flip_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./flip.js */ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\");\n/* harmony import */ var _hide_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hide.js */ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\");\n/* harmony import */ var _offset_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./offset.js */ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\");\n/* harmony import */ var _popperOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _preventOverflow_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./preventOverflow.js */ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\");\n\n\n\n\n\n\n\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/index.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/offset.js": +/*!*************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/offset.js ***! + \*************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ distanceAndSkiddingToXY: () => (/* binding */ distanceAndSkiddingToXY)\n/* harmony export */ });\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction distanceAndSkiddingToXY(placement, rects, offset) {\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement);\n var invertDistance = [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.top].indexOf(basePlacement) >= 0 ? -1 : 1;\n\n var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, {\n placement: placement\n })) : offset,\n skidding = _ref[0],\n distance = _ref[1];\n\n skidding = skidding || 0;\n distance = (distance || 0) * invertDistance;\n return [_enums_js__WEBPACK_IMPORTED_MODULE_1__.left, _enums_js__WEBPACK_IMPORTED_MODULE_1__.right].indexOf(basePlacement) >= 0 ? {\n x: distance,\n y: skidding\n } : {\n x: skidding,\n y: distance\n };\n}\n\nfunction offset(_ref2) {\n var state = _ref2.state,\n options = _ref2.options,\n name = _ref2.name;\n var _options$offset = options.offset,\n offset = _options$offset === void 0 ? [0, 0] : _options$offset;\n var data = _enums_js__WEBPACK_IMPORTED_MODULE_1__.placements.reduce(function (acc, placement) {\n acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset);\n return acc;\n }, {});\n var _data$state$placement = data[state.placement],\n x = _data$state$placement.x,\n y = _data$state$placement.y;\n\n if (state.modifiersData.popperOffsets != null) {\n state.modifiersData.popperOffsets.x += x;\n state.modifiersData.popperOffsets.y += y;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'offset',\n enabled: true,\n phase: 'main',\n requires: ['popperOffsets'],\n fn: offset\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/offset.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js": +/*!********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js ***! + \********************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n\n\nfunction popperOffsets(_ref) {\n var state = _ref.state,\n name = _ref.name;\n // Offsets are the actual position the popper needs to have to be\n // properly positioned near its reference element\n // This is the most basic placement, and will be adjusted by\n // the modifiers in the next step\n state.modifiersData[name] = (0,_utils_computeOffsets_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n reference: state.rects.reference,\n element: state.rects.popper,\n strategy: 'absolute',\n placement: state.placement\n });\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'popperOffsets',\n enabled: true,\n phase: 'read',\n fn: popperOffsets,\n data: {}\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js": +/*!**********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js ***! + \**********************************************************************/ +/***/ ((__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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/getAltAxis.js */ \"./node_modules/@popperjs/core/lib/utils/getAltAxis.js\");\n/* harmony import */ var _utils_within_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/within.js */ \"./node_modules/@popperjs/core/lib/utils/within.js\");\n/* harmony import */ var _dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getLayoutRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getLayoutRect.js\");\n/* harmony import */ var _dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../dom-utils/getOffsetParent.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getOffsetParent.js\");\n/* harmony import */ var _utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n/* harmony import */ var _utils_math_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\n\n\n\n\n\n\n\n\n\n\n\nfunction preventOverflow(_ref) {\n var state = _ref.state,\n options = _ref.options,\n name = _ref.name;\n var _options$mainAxis = options.mainAxis,\n checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis,\n _options$altAxis = options.altAxis,\n checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis,\n boundary = options.boundary,\n rootBoundary = options.rootBoundary,\n altBoundary = options.altBoundary,\n padding = options.padding,\n _options$tether = options.tether,\n tether = _options$tether === void 0 ? true : _options$tether,\n _options$tetherOffset = options.tetherOffset,\n tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset;\n var overflow = (0,_utils_detectOverflow_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(state, {\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding,\n altBoundary: altBoundary\n });\n var basePlacement = (0,_utils_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(state.placement);\n var variation = (0,_utils_getVariation_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state.placement);\n var isBasePlacement = !variation;\n var mainAxis = (0,_utils_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(basePlacement);\n var altAxis = (0,_utils_getAltAxis_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"])(mainAxis);\n var popperOffsets = state.modifiersData.popperOffsets;\n var referenceRect = state.rects.reference;\n var popperRect = state.rects.popper;\n var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, {\n placement: state.placement\n })) : tetherOffset;\n var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? {\n mainAxis: tetherOffsetValue,\n altAxis: tetherOffsetValue\n } : Object.assign({\n mainAxis: 0,\n altAxis: 0\n }, tetherOffsetValue);\n var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null;\n var data = {\n x: 0,\n y: 0\n };\n\n if (!popperOffsets) {\n return;\n }\n\n if (checkMainAxis) {\n var _offsetModifierState$;\n\n var mainSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;\n var altSide = mainAxis === 'y' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;\n var len = mainAxis === 'y' ? 'height' : 'width';\n var offset = popperOffsets[mainAxis];\n var min = offset + overflow[mainSide];\n var max = offset - overflow[altSide];\n var additive = tether ? -popperRect[len] / 2 : 0;\n var minLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? referenceRect[len] : popperRect[len];\n var maxLen = variation === _enums_js__WEBPACK_IMPORTED_MODULE_5__.start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go\n // outside the reference bounds\n\n var arrowElement = state.elements.arrow;\n var arrowRect = tether && arrowElement ? (0,_dom_utils_getLayoutRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(arrowElement) : {\n width: 0,\n height: 0\n };\n var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : (0,_utils_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])();\n var arrowPaddingMin = arrowPaddingObject[mainSide];\n var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want\n // to include its full size in the calculation. If the reference is small\n // and near the edge of a boundary, the popper can overflow even if the\n // reference is not overflowing as well (e.g. virtual elements with no\n // width or height)\n\n var arrowLen = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(0, referenceRect[len], arrowRect[len]);\n var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis;\n var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis;\n var arrowOffsetParent = state.elements.arrow && (0,_dom_utils_getOffsetParent_js__WEBPACK_IMPORTED_MODULE_9__[\"default\"])(state.elements.arrow);\n var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0;\n var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0;\n var tetherMin = offset + minOffset - offsetModifierValue - clientOffset;\n var tetherMax = offset + maxOffset - offsetModifierValue;\n var preventedOffset = (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.min)(min, tetherMin) : min, offset, tether ? (0,_utils_math_js__WEBPACK_IMPORTED_MODULE_10__.max)(max, tetherMax) : max);\n popperOffsets[mainAxis] = preventedOffset;\n data[mainAxis] = preventedOffset - offset;\n }\n\n if (checkAltAxis) {\n var _offsetModifierState$2;\n\n var _mainSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.top : _enums_js__WEBPACK_IMPORTED_MODULE_5__.left;\n\n var _altSide = mainAxis === 'x' ? _enums_js__WEBPACK_IMPORTED_MODULE_5__.bottom : _enums_js__WEBPACK_IMPORTED_MODULE_5__.right;\n\n var _offset = popperOffsets[altAxis];\n\n var _len = altAxis === 'y' ? 'height' : 'width';\n\n var _min = _offset + overflow[_mainSide];\n\n var _max = _offset - overflow[_altSide];\n\n var isOriginSide = [_enums_js__WEBPACK_IMPORTED_MODULE_5__.top, _enums_js__WEBPACK_IMPORTED_MODULE_5__.left].indexOf(basePlacement) !== -1;\n\n var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0;\n\n var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis;\n\n var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max;\n\n var _preventedOffset = tether && isOriginSide ? (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.withinMaxClamp)(_tetherMin, _offset, _tetherMax) : (0,_utils_within_js__WEBPACK_IMPORTED_MODULE_8__.within)(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max);\n\n popperOffsets[altAxis] = _preventedOffset;\n data[altAxis] = _preventedOffset - _offset;\n }\n\n state.modifiersData[name] = data;\n} // eslint-disable-next-line import/no-unused-modules\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n name: 'preventOverflow',\n enabled: true,\n phase: 'main',\n fn: preventOverflow,\n requiresIfExists: ['offset']\n});\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/popper-lite.js": +/*!********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/popper-lite.js ***! + \********************************************************/ +/***/ ((__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 */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"]),\n/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)\n/* harmony export */ });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"]];\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_4__.popperGenerator)({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/popper-lite.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/popper.js": +/*!***************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/popper.js ***! + \***************************************************/ +/***/ ((__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 */ applyStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.applyStyles),\n/* harmony export */ arrow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.arrow),\n/* harmony export */ computeStyles: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.computeStyles),\n/* harmony export */ createPopper: () => (/* binding */ createPopper),\n/* harmony export */ createPopperLite: () => (/* reexport safe */ _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__.createPopper),\n/* harmony export */ defaultModifiers: () => (/* binding */ defaultModifiers),\n/* harmony export */ detectOverflow: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_10__[\"default\"]),\n/* harmony export */ eventListeners: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.eventListeners),\n/* harmony export */ flip: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.flip),\n/* harmony export */ hide: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.hide),\n/* harmony export */ offset: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.offset),\n/* harmony export */ popperGenerator: () => (/* reexport safe */ _createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator),\n/* harmony export */ popperOffsets: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.popperOffsets),\n/* harmony export */ preventOverflow: () => (/* reexport safe */ _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__.preventOverflow)\n/* harmony export */ });\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/createPopper.js\");\n/* harmony import */ var _createPopper_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./createPopper.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./modifiers/eventListeners.js */ \"./node_modules/@popperjs/core/lib/modifiers/eventListeners.js\");\n/* harmony import */ var _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modifiers/popperOffsets.js */ \"./node_modules/@popperjs/core/lib/modifiers/popperOffsets.js\");\n/* harmony import */ var _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modifiers/computeStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/computeStyles.js\");\n/* harmony import */ var _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modifiers/applyStyles.js */ \"./node_modules/@popperjs/core/lib/modifiers/applyStyles.js\");\n/* harmony import */ var _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modifiers/offset.js */ \"./node_modules/@popperjs/core/lib/modifiers/offset.js\");\n/* harmony import */ var _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modifiers/flip.js */ \"./node_modules/@popperjs/core/lib/modifiers/flip.js\");\n/* harmony import */ var _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modifiers/preventOverflow.js */ \"./node_modules/@popperjs/core/lib/modifiers/preventOverflow.js\");\n/* harmony import */ var _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modifiers/arrow.js */ \"./node_modules/@popperjs/core/lib/modifiers/arrow.js\");\n/* harmony import */ var _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modifiers/hide.js */ \"./node_modules/@popperjs/core/lib/modifiers/hide.js\");\n/* harmony import */ var _popper_lite_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./popper-lite.js */ \"./node_modules/@popperjs/core/lib/popper-lite.js\");\n/* harmony import */ var _modifiers_index_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./modifiers/index.js */ \"./node_modules/@popperjs/core/lib/modifiers/index.js\");\n\n\n\n\n\n\n\n\n\n\nvar defaultModifiers = [_modifiers_eventListeners_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"], _modifiers_popperOffsets_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"], _modifiers_computeStyles_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _modifiers_applyStyles_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _modifiers_offset_js__WEBPACK_IMPORTED_MODULE_4__[\"default\"], _modifiers_flip_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"], _modifiers_preventOverflow_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"], _modifiers_arrow_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"], _modifiers_hide_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"]];\nvar createPopper = /*#__PURE__*/(0,_createPopper_js__WEBPACK_IMPORTED_MODULE_9__.popperGenerator)({\n defaultModifiers: defaultModifiers\n}); // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n // eslint-disable-next-line import/no-unused-modules\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/popper.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js ***! + \***********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ computeAutoPlacement)\n/* harmony export */ });\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./detectOverflow.js */ \"./node_modules/@popperjs/core/lib/utils/detectOverflow.js\");\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n\n\n\n\nfunction computeAutoPlacement(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n placement = _options.placement,\n boundary = _options.boundary,\n rootBoundary = _options.rootBoundary,\n padding = _options.padding,\n flipVariations = _options.flipVariations,\n _options$allowedAutoP = _options.allowedAutoPlacements,\n allowedAutoPlacements = _options$allowedAutoP === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.placements : _options$allowedAutoP;\n var variation = (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement);\n var placements = variation ? flipVariations ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements : _enums_js__WEBPACK_IMPORTED_MODULE_0__.variationPlacements.filter(function (placement) {\n return (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) === variation;\n }) : _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements;\n var allowedPlacements = placements.filter(function (placement) {\n return allowedAutoPlacements.indexOf(placement) >= 0;\n });\n\n if (allowedPlacements.length === 0) {\n allowedPlacements = placements;\n } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions...\n\n\n var overflows = allowedPlacements.reduce(function (acc, placement) {\n acc[placement] = (0,_detectOverflow_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(state, {\n placement: placement,\n boundary: boundary,\n rootBoundary: rootBoundary,\n padding: padding\n })[(0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(placement)];\n return acc;\n }, {});\n return Object.keys(overflows).sort(function (a, b) {\n return overflows[a] - overflows[b];\n });\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/computeAutoPlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/computeOffsets.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/computeOffsets.js ***! + \*****************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ computeOffsets)\n/* harmony export */ });\n/* harmony import */ var _getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getBasePlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getBasePlacement.js\");\n/* harmony import */ var _getVariation_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./getVariation.js */ \"./node_modules/@popperjs/core/lib/utils/getVariation.js\");\n/* harmony import */ var _getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./getMainAxisFromPlacement.js */ \"./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n\n\n\n\nfunction computeOffsets(_ref) {\n var reference = _ref.reference,\n element = _ref.element,\n placement = _ref.placement;\n var basePlacement = placement ? (0,_getBasePlacement_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(placement) : null;\n var variation = placement ? (0,_getVariation_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(placement) : null;\n var commonX = reference.x + reference.width / 2 - element.width / 2;\n var commonY = reference.y + reference.height / 2 - element.height / 2;\n var offsets;\n\n switch (basePlacement) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.top:\n offsets = {\n x: commonX,\n y: reference.y - element.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.bottom:\n offsets = {\n x: commonX,\n y: reference.y + reference.height\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.right:\n offsets = {\n x: reference.x + reference.width,\n y: commonY\n };\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.left:\n offsets = {\n x: reference.x - element.width,\n y: commonY\n };\n break;\n\n default:\n offsets = {\n x: reference.x,\n y: reference.y\n };\n }\n\n var mainAxis = basePlacement ? (0,_getMainAxisFromPlacement_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])(basePlacement) : null;\n\n if (mainAxis != null) {\n var len = mainAxis === 'y' ? 'height' : 'width';\n\n switch (variation) {\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.start:\n offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2);\n break;\n\n case _enums_js__WEBPACK_IMPORTED_MODULE_2__.end:\n offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2);\n break;\n\n default:\n }\n }\n\n return offsets;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/computeOffsets.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/debounce.js": +/*!***********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/debounce.js ***! + \***********************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ debounce)\n/* harmony export */ });\nfunction debounce(fn) {\n var pending;\n return function () {\n if (!pending) {\n pending = new Promise(function (resolve) {\n Promise.resolve().then(function () {\n pending = undefined;\n resolve(fn());\n });\n });\n }\n\n return pending;\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/debounce.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/detectOverflow.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/detectOverflow.js ***! + \*****************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ detectOverflow)\n/* harmony export */ });\n/* harmony import */ var _dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../dom-utils/getClippingRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getClippingRect.js\");\n/* harmony import */ var _dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../dom-utils/getDocumentElement.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getDocumentElement.js\");\n/* harmony import */ var _dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../dom-utils/getBoundingClientRect.js */ \"./node_modules/@popperjs/core/lib/dom-utils/getBoundingClientRect.js\");\n/* harmony import */ var _computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./computeOffsets.js */ \"./node_modules/@popperjs/core/lib/utils/computeOffsets.js\");\n/* harmony import */ var _rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./rectToClientRect.js */ \"./node_modules/@popperjs/core/lib/utils/rectToClientRect.js\");\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n/* harmony import */ var _dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../dom-utils/instanceOf.js */ \"./node_modules/@popperjs/core/lib/dom-utils/instanceOf.js\");\n/* harmony import */ var _mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./mergePaddingObject.js */ \"./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js\");\n/* harmony import */ var _expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./expandToHashMap.js */ \"./node_modules/@popperjs/core/lib/utils/expandToHashMap.js\");\n\n\n\n\n\n\n\n\n // eslint-disable-next-line import/no-unused-modules\n\nfunction detectOverflow(state, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _options = options,\n _options$placement = _options.placement,\n placement = _options$placement === void 0 ? state.placement : _options$placement,\n _options$strategy = _options.strategy,\n strategy = _options$strategy === void 0 ? state.strategy : _options$strategy,\n _options$boundary = _options.boundary,\n boundary = _options$boundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.clippingParents : _options$boundary,\n _options$rootBoundary = _options.rootBoundary,\n rootBoundary = _options$rootBoundary === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.viewport : _options$rootBoundary,\n _options$elementConte = _options.elementContext,\n elementContext = _options$elementConte === void 0 ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper : _options$elementConte,\n _options$altBoundary = _options.altBoundary,\n altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary,\n _options$padding = _options.padding,\n padding = _options$padding === void 0 ? 0 : _options$padding;\n var paddingObject = (0,_mergePaddingObject_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"])(typeof padding !== 'number' ? padding : (0,_expandToHashMap_js__WEBPACK_IMPORTED_MODULE_2__[\"default\"])(padding, _enums_js__WEBPACK_IMPORTED_MODULE_0__.basePlacements));\n var altContext = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? _enums_js__WEBPACK_IMPORTED_MODULE_0__.reference : _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper;\n var popperRect = state.rects.popper;\n var element = state.elements[altBoundary ? altContext : elementContext];\n var clippingClientRect = (0,_dom_utils_getClippingRect_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"])((0,_dom_utils_instanceOf_js__WEBPACK_IMPORTED_MODULE_4__.isElement)(element) ? element : element.contextElement || (0,_dom_utils_getDocumentElement_js__WEBPACK_IMPORTED_MODULE_5__[\"default\"])(state.elements.popper), boundary, rootBoundary, strategy);\n var referenceClientRect = (0,_dom_utils_getBoundingClientRect_js__WEBPACK_IMPORTED_MODULE_6__[\"default\"])(state.elements.reference);\n var popperOffsets = (0,_computeOffsets_js__WEBPACK_IMPORTED_MODULE_7__[\"default\"])({\n reference: referenceClientRect,\n element: popperRect,\n strategy: 'absolute',\n placement: placement\n });\n var popperClientRect = (0,_rectToClientRect_js__WEBPACK_IMPORTED_MODULE_8__[\"default\"])(Object.assign({}, popperRect, popperOffsets));\n var elementClientRect = elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect\n // 0 or negative = within the clipping rect\n\n var overflowOffsets = {\n top: clippingClientRect.top - elementClientRect.top + paddingObject.top,\n bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom,\n left: clippingClientRect.left - elementClientRect.left + paddingObject.left,\n right: elementClientRect.right - clippingClientRect.right + paddingObject.right\n };\n var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element\n\n if (elementContext === _enums_js__WEBPACK_IMPORTED_MODULE_0__.popper && offsetData) {\n var offset = offsetData[placement];\n Object.keys(overflowOffsets).forEach(function (key) {\n var multiply = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.right, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 1 : -1;\n var axis = [_enums_js__WEBPACK_IMPORTED_MODULE_0__.top, _enums_js__WEBPACK_IMPORTED_MODULE_0__.bottom].indexOf(key) >= 0 ? 'y' : 'x';\n overflowOffsets[key] += offset[axis] * multiply;\n });\n }\n\n return overflowOffsets;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/detectOverflow.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/expandToHashMap.js": +/*!******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/expandToHashMap.js ***! + \******************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ expandToHashMap)\n/* harmony export */ });\nfunction expandToHashMap(value, keys) {\n return keys.reduce(function (hashMap, key) {\n hashMap[key] = value;\n return hashMap;\n }, {});\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/expandToHashMap.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getAltAxis.js": +/*!*************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getAltAxis.js ***! + \*************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getAltAxis)\n/* harmony export */ });\nfunction getAltAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getAltAxis.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getBasePlacement.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getBasePlacement.js ***! + \*******************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getBasePlacement)\n/* harmony export */ });\n\nfunction getBasePlacement(placement) {\n return placement.split('-')[0];\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getBasePlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js ***! + \*********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getFreshSideObject)\n/* harmony export */ });\nfunction getFreshSideObject() {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js": +/*!***************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js ***! + \***************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getMainAxisFromPlacement)\n/* harmony export */ });\nfunction getMainAxisFromPlacement(placement) {\n return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y';\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getMainAxisFromPlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js": +/*!***********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js ***! + \***********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getOppositePlacement)\n/* harmony export */ });\nvar hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction getOppositePlacement(placement) {\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getOppositePlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js": +/*!********************************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js ***! + \********************************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getOppositeVariationPlacement)\n/* harmony export */ });\nvar hash = {\n start: 'end',\n end: 'start'\n};\nfunction getOppositeVariationPlacement(placement) {\n return placement.replace(/start|end/g, function (matched) {\n return hash[matched];\n });\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getOppositeVariationPlacement.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/getVariation.js": +/*!***************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/getVariation.js ***! + \***************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getVariation)\n/* harmony export */ });\nfunction getVariation(placement) {\n return placement.split('-')[1];\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/getVariation.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/math.js": +/*!*******************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/math.js ***! + \*******************************************************/ +/***/ ((__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 */ max: () => (/* binding */ max),\n/* harmony export */ min: () => (/* binding */ min),\n/* harmony export */ round: () => (/* binding */ round)\n/* harmony export */ });\nvar max = Math.max;\nvar min = Math.min;\nvar round = Math.round;\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/math.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/mergeByName.js": +/*!**************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/mergeByName.js ***! + \**************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ mergeByName)\n/* harmony export */ });\nfunction mergeByName(modifiers) {\n var merged = modifiers.reduce(function (merged, current) {\n var existing = merged[current.name];\n merged[current.name] = existing ? Object.assign({}, existing, current, {\n options: Object.assign({}, existing.options, current.options),\n data: Object.assign({}, existing.data, current.data)\n }) : current;\n return merged;\n }, {}); // IE11 does not support Object.values\n\n return Object.keys(merged).map(function (key) {\n return merged[key];\n });\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/mergeByName.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js": +/*!*********************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js ***! + \*********************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ mergePaddingObject)\n/* harmony export */ });\n/* harmony import */ var _getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./getFreshSideObject.js */ \"./node_modules/@popperjs/core/lib/utils/getFreshSideObject.js\");\n\nfunction mergePaddingObject(paddingObject) {\n return Object.assign({}, (0,_getFreshSideObject_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(), paddingObject);\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/mergePaddingObject.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/orderModifiers.js": +/*!*****************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/orderModifiers.js ***! + \*****************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ orderModifiers)\n/* harmony export */ });\n/* harmony import */ var _enums_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../enums.js */ \"./node_modules/@popperjs/core/lib/enums.js\");\n // source: https://stackoverflow.com/questions/49875255\n\nfunction order(modifiers) {\n var map = new Map();\n var visited = new Set();\n var result = [];\n modifiers.forEach(function (modifier) {\n map.set(modifier.name, modifier);\n }); // On visiting object, check for its dependencies and visit them recursively\n\n function sort(modifier) {\n visited.add(modifier.name);\n var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []);\n requires.forEach(function (dep) {\n if (!visited.has(dep)) {\n var depModifier = map.get(dep);\n\n if (depModifier) {\n sort(depModifier);\n }\n }\n });\n result.push(modifier);\n }\n\n modifiers.forEach(function (modifier) {\n if (!visited.has(modifier.name)) {\n // check for visited object\n sort(modifier);\n }\n });\n return result;\n}\n\nfunction orderModifiers(modifiers) {\n // order based on dependencies\n var orderedModifiers = order(modifiers); // order based on phase\n\n return _enums_js__WEBPACK_IMPORTED_MODULE_0__.modifierPhases.reduce(function (acc, phase) {\n return acc.concat(orderedModifiers.filter(function (modifier) {\n return modifier.phase === phase;\n }));\n }, []);\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/orderModifiers.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/rectToClientRect.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/rectToClientRect.js ***! + \*******************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ rectToClientRect)\n/* harmony export */ });\nfunction rectToClientRect(rect) {\n return Object.assign({}, rect, {\n left: rect.x,\n top: rect.y,\n right: rect.x + rect.width,\n bottom: rect.y + rect.height\n });\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/rectToClientRect.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/userAgent.js": +/*!************************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/userAgent.js ***! + \************************************************************/ +/***/ ((__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 */ \"default\": () => (/* binding */ getUAString)\n/* harmony export */ });\nfunction getUAString() {\n var uaData = navigator.userAgentData;\n\n if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {\n return uaData.brands.map(function (item) {\n return item.brand + \"/\" + item.version;\n }).join(' ');\n }\n\n return navigator.userAgent;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/userAgent.js?"); + +/***/ }), + +/***/ "./node_modules/@popperjs/core/lib/utils/within.js": +/*!*********************************************************!*\ + !*** ./node_modules/@popperjs/core/lib/utils/within.js ***! + \*********************************************************/ +/***/ ((__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 */ within: () => (/* binding */ within),\n/* harmony export */ withinMaxClamp: () => (/* binding */ withinMaxClamp)\n/* harmony export */ });\n/* harmony import */ var _math_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./math.js */ \"./node_modules/@popperjs/core/lib/utils/math.js\");\n\nfunction within(min, value, max) {\n return (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.max)(min, (0,_math_js__WEBPACK_IMPORTED_MODULE_0__.min)(value, max));\n}\nfunction withinMaxClamp(min, value, max) {\n var v = within(min, value, max);\n return v > max ? max : v;\n}\n\n//# sourceURL=webpack://parus_8_panels_plugin/./node_modules/@popperjs/core/lib/utils/within.js?"); + +/***/ }), + /***/ "./node_modules/@remix-run/router/dist/router.js": /*!*******************************************************!*\ !*** ./node_modules/@remix-run/router/dist/router.js ***! @@ -3953,7 +4624,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 */ PlanDetail: () => (/* binding */ PlanDetail)\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_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.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_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CircularProgress/CircularProgress.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n height: \"240px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\",\n height: \"20px\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о плане\nconst PlanInfo = ({\n plan\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.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, plan.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: plan.NPROGRESS,\n detail: plan.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о плане\nPlanInfo.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanProductCompositionModel = ({\n model,\n products,\n onProductSelect\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product && onProductSelect) onProductSelect(product);\n };\n\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.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n onProductSelect: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n plan,\n product,\n stored,\n noProductMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n plan: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.plan, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n plan,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, plan]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body2\"\n }, noProductMessage) : /*#__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 direction: \"row\",\n spacing: 2,\n justifyContent: \"center\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n size: 18,\n sx: {\n opacity: isLoading ? 1 : 0\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading || !data.init ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number).isRequired,\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanDetail = ({\n plan,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(plan.NRN);\n\n //Выбор элемента изделия\n const setProduct = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product ? {\n ...product\n } : null\n }));\n };\n\n //При навигации между карточками\n const handleNavigate = direction => {\n setProduct(null);\n if (onNavigate) onNavigate(direction);\n };\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => handleNavigate(-1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n plan: plan.NRN,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_PRDCMPSP_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектации\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanInfo, {\n plan: plan\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n onProductSelect: setProduct\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => handleNavigate(1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanDetail.propTypes = {\n plan: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanSpecDetail: () => (/* binding */ PlanSpecDetail)\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_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.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_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/CircularProgress/CircularProgress.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../components/p8p_data_grid */ \"./app/components/p8p_data_grid.js\");\n/* harmony import */ var _components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../components/p8p_svg */ \"./app/components/p8p_svg.js\");\n/* harmony import */ var _config_wrapper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../config_wrapper */ \"./app/config_wrapper.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_assembly_mon/hooks.js\");\n/* harmony import */ var _progress_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n BOX_INFO_MAIN: {\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"35vh\",\n backgroundColor: \"background.detail_table\"\n },\n BOX_INFO_SUB: isMessage => ({\n overflow: \"hidden\",\n textAlign: \"center\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n justifyContent: isMessage ? \"center\" : \"flex-start\",\n paddingLeft: \"5px\",\n paddingRight: \"5px\",\n ...(isMessage ? {\n padding: \"5px\"\n } : {\n paddingTop: \"10px\"\n })\n }),\n DETAIL_INFO: {\n display: \"flex\",\n justifyContent: \"space-around\",\n alignItems: \"center\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"17vh\",\n backgroundColor: \"background.detail_info\"\n },\n PRODUCT_SELECTOR_CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n height: \"53vh\",\n marginTop: \"16px\",\n backgroundColor: \"background.product_selector\"\n },\n PRODUCT_SELECTOR_MODEL: {\n width: \"70%\"\n },\n PLAN_INFO_MAIN: {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"16px\"\n },\n PLAN_INFO_SUB: {\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"280px\",\n borderBottom: \"1px solid\"\n },\n TABLE_DETAILS: {\n backgroundColor: \"background.detail_table\",\n height: \"240px\"\n },\n TABLE_DETAILS_HEADER_CELL: maxWidth => ({\n backgroundColor: \"background.detail_table\",\n color: \"text.detail_table.fontColor\",\n padding: \"2px 2px\",\n fontSize: \"11px\",\n textAlign: \"center\",\n lineHeight: \"1rem\",\n ...(maxWidth ? {\n maxWidth\n } : {})\n }),\n TABLE_DETAILS_DATA_CELL: textAlign => ({\n backgroundColor: \"background.detail_table\",\n color: \"text.detail_table.fontColor\",\n padding: \"2px 2px\",\n fontSize: \"11px\",\n ...(textAlign ? {\n textAlign\n } : {})\n }),\n TABLE_DETAILS_MORE_BUTTON: {\n borderRadius: \"25px\",\n height: \"20px\",\n color: \"text.more_button.fontColor\"\n },\n TABLE_DETAILS_TEXT: {\n color: \"text.detail_table.fontColor\"\n },\n CARD_DETAILS_CONTAINER: {\n minWidth: \"1200px\",\n maxWidth: \"1400px\"\n },\n CARD_DETAILS_NAVIGATION_STACK: {\n width: \"100%\"\n },\n NAVIGATE_BUTTONS: {\n color: \"text.title.fontColor\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Информация о выпуске плана\nconst PlanSpecInfo = ({\n planSpec\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.PLAN_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"PlanSpecInfo\",\n mt: 1\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, planSpec.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PLAN_INFO_SUB\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"PlanSpecInfo\",\n mt: 1\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, planSpec.NYEAR))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_5__.ProgressBox, {\n progress: planSpec.NPROGRESS,\n detail: planSpec.SDETAIL,\n width: \"110px\",\n height: \"110px\",\n progressVariant: \"subtitle2\",\n detailVariant: \"body3\"\n }));\n};\n\n//Контроль свойств - Информация о спецификации плана\nPlanSpecInfo.propTypes = {\n planSpec: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object)\n};\n\n//Модель выпуска плана\nconst PlanSpecProductCompositionModel = ({\n model,\n products,\n onProductSelect\n}) => {\n //При выборе детали на модели\n const handleProductClick = ({\n item\n }) => {\n const product = products.find(p => p.SMODEL_ID == item.id);\n if (product && onProductSelect) onProductSelect(product);\n };\n\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.PRODUCT_SELECTOR_MODEL\n }, model ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_svg__WEBPACK_IMPORTED_MODULE_2__.P8PSVG, {\n data: atob(model),\n items: products.map(p => ({\n id: p.SMODEL_ID,\n backgroundColor: p.SMODEL_BG_COLOR || \"red\",\n desc: p.SNAME,\n title: p.SNAME\n })),\n fillOpacity: \"0.3\",\n onItemClick: handleProductClick\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041C\\u043E\\u0434\\u0435\\u043B\\u044C \\u0438\\u0437\\u0434\\u0435\\u043B\\u0438\\u044F \\u043D\\u0435 \\u0437\\u0430\\u0433\\u0440\\u0443\\u0436\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Модель выпуска плана\nPlanSpecProductCompositionModel.propTypes = {\n model: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().any),\n products: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().array),\n onProductSelect: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//Генерация представления ячейки заголовка\nconst headCellRender = ({\n columnDef\n}) => ({\n stackProps: {\n justifyContent: \"center\"\n },\n cellStyle: STYLES.TABLE_DETAILS_HEADER_CELL([\"NREMN_LABOUR\", \"NAPPLICABILITY\"].includes(columnDef.name) ? \"90px\" : [\"NDEFICIT\"].includes(columnDef.name) ? \"55px\" : null)\n});\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellStyle: STYLES.TABLE_DETAILS_DATA_CELL([\"SOPERATION\", \"SNOMEN\"].includes(columnDef.name) ? null : \"center\"),\n data: row[columnDef]\n});\n\n//Таблица детализации изделия\nconst ProductDetailsTable = ({\n planSpec,\n product,\n stored,\n noProductMessage,\n noPlanSpecMessage,\n noDataFoundMessage,\n title\n}) => {\n //Собственное состояние\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n planSpec: null,\n product: null,\n orders: null,\n pageNumber: 1\n });\n\n //Собственное состояние - данные таблицы\n const {\n data,\n isLoading\n } = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useProductDetailsTable)(state.planSpec, state.product, state.orders, state.pageNumber, stored);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setState(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setState(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1\n }));\n\n //При изменении изделия\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setState(pv => ({\n ...pv,\n planSpec,\n product,\n orders: null,\n pageNumber: 1\n }));\n }, [product, planSpec]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_SUB(!product || data.rows.length === 0)\n }, !product ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"ProductDetailMessage\",\n sx: STYLES.TABLE_DETAILS_TEXT\n }, noProductMessage) : !planSpec ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"ProductDetailMessage\",\n sx: STYLES.TABLE_DETAILS_TEXT\n }, noPlanSpecMessage) : /*#__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 direction: \"row\",\n spacing: 2,\n justifyContent: \"center\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n size: 18,\n sx: {\n opacity: isLoading ? 1 : 0\n }\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h4\",\n sx: STYLES.TABLE_DETAILS_TEXT\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"b\", null, title))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8PDataGrid, _extends({}, _config_wrapper__WEBPACK_IMPORTED_MODULE_3__.P8P_DATA_GRID_CONFIG_PROPS, {\n noDataFoundText: isLoading || !data.init ? \"\" : noDataFoundMessage,\n containerComponentProps: {\n sx: STYLES.TABLE_DETAILS,\n elevation: 0\n },\n columnsDef: data.columnsDef,\n rows: data.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: data.morePages,\n morePagesBtnProps: {\n sx: STYLES.TABLE_DETAILS_MORE_BUTTON\n },\n fixedHeader: true,\n reloading: false,\n dataCellRender: dataCellRender,\n headCellRender: headCellRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n }))));\n};\n\n//Контроль свойств - Таблица детализации изделия\nProductDetailsTable.propTypes = {\n planSpec: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n product: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().number),\n stored: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noProductMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noPlanSpecMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n noDataFoundMessage: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n title: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Детализация по объекту\nconst PlanSpecDetail = ({\n planSpec,\n disableNavigatePrev = false,\n disableNavigateNext = false,\n onNavigate,\n onBack\n}) => {\n //Собственное состояние - данные производственных составов SVG\n const [costProductComposition, setCostProductComposition] = (0,_hooks__WEBPACK_IMPORTED_MODULE_4__.useCostProductComposition)(planSpec.NRN);\n\n //Выбор элемента изделия\n const setProduct = product => {\n setCostProductComposition(pv => ({\n ...pv,\n selectedProduct: product ? {\n ...product\n } : null\n }));\n };\n\n //При навигации между карточками\n const handleNavigate = direction => {\n setProduct(null);\n if (onNavigate) onNavigate(direction);\n };\n\n //Формируем представление\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n maxWidth: false,\n sx: STYLES.CARD_DETAILS_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-end\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disabled: disableNavigatePrev,\n onClick: () => handleNavigate(-1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.NAVIGATE_BUTTONS\n }, \"navigate_before\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 10\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n maxWidth: false\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: () => onBack ? onBack() : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n direction: \"row\",\n color: \"text.title.fontColor\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"chevron_left\"), \"\\u041D\\u0430\\u0437\\u0430\\u0434\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n container: true,\n spacing: 2,\n sx: {\n paddingTop: \"5px\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 5\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n planSpec: costProductComposition.selectedProduct?.NFCPRODPLANSP_LINK,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_DG_BY_LINKED_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о маршрутных картах\",\n noPlanSpecMessage: \"Не определена связанная запись производственной программы\",\n noDataFoundMessage: \"Маршрутные карты не найдены\",\n title: \"Маршрутные карты\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.BOX_INFO_MAIN,\n mt: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProductDetailsTable, {\n planSpec: costProductComposition.selectedProduct?.NFCPRODPLANSP_LINK,\n product: costProductComposition.selectedProduct?.NRN,\n stored: \"PKG_P8PANELS_MECHREC.FCDELIVSH_DG_BY_LINKED_GET\",\n noProductMessage: \"Укажите элемент модели, чтобы увидеть информацию о комплектовочных ведомостях\",\n noPlanSpecMessage: \"Не определена связанная запись производственной программы\",\n noDataFoundMessage: \"Комплектовочные ведомости не найдены\",\n title: \"Дефицит комплектующих\"\n }))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n xs: 7\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.DETAIL_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanSpecInfo, {\n planSpec: planSpec\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.PRODUCT_SELECTOR_CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanSpecProductCompositionModel, {\n model: costProductComposition.model,\n products: costProductComposition.products,\n onProductSelect: setProduct\n })))))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n display: \"flex\",\n direction: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"center\",\n sx: STYLES.CARD_DETAILS_NAVIGATION_STACK\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n disabled: disableNavigateNext,\n onClick: () => handleNavigate(1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n sx: STYLES.NAVIGATE_BUTTONS\n }, \"navigate_next\"))))));\n};\n\n//Контроль свойств - Детализация по объекту\nPlanSpecDetail.propTypes = {\n planSpec: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().object),\n disableNavigatePrev: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n disableNavigateNext: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().bool),\n onNavigate: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n onBack: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plan_detail.js?"); /***/ }), @@ -3964,7 +4635,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 */ PlansList: () => (/* binding */ PlansList)\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/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.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/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _plans_list_item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./plans_list_item */ \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.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 DEFAULT_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n PLAN_DOCUMENTS_LIST: {\n minWidth: \"1024px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список планов\nconst PlansList = ({\n plans,\n pageSize = DEFAULT_PAGE_SIZE,\n onItemClick\n}) => {\n //Состояние прокрутки списка отображаемых планов\n const [scroll, setScroll] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //Отработка нажатия на прокрутку списка планов влево\n const handleScrollLeft = () => setScroll(pv => pv <= 1 ? 0 : pv - 1);\n\n //Отработка нажатия на прокрутку списка планов вправо\n const handleScrollRight = () => setScroll(pv => pv + pageSize >= plans.length ? pv : pv + 1);\n\n //Сборка представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 2,\n sx: STYLES.PLAN_DOCUMENTS_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleScrollLeft,\n disabled: scroll <= 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"navigate_before\"))), plans.map((el, i) => i >= scroll && i < scroll + pageSize ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n key: `${el.NRN}_${i}`,\n xs: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_plans_list_item__WEBPACK_IMPORTED_MODULE_1__.PlansListItem, {\n card: el,\n cardIndex: i,\n onClick: (card, cardIndex) => onItemClick ? onItemClick(card, cardIndex) : null\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleScrollRight,\n disabled: scroll + pageSize >= plans.length\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, \"navigate_next\")))));\n};\n\n//Контроль свойств - Список планов\nPlansList.propTypes = {\n plans: prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)),\n pageSize: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plans_list.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanSpecsList: () => (/* binding */ PlanSpecsList)\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/Container/Container.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.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/Icon/Icon.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _plans_list_item__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./plans_list_item */ \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.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 DEFAULT_PAGE_SIZE = 5;\n\n//Стили\nconst STYLES = {\n PLAN_DOCUMENTS_LIST: {\n minWidth: \"1024px\"\n },\n NAVIGATE_BUTTONS: {\n color: \"text.title.fontColor\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Список выпусков планов\nconst PlanSpecsList = ({\n planSpecs,\n pageSize = DEFAULT_PAGE_SIZE,\n onItemClick\n}) => {\n //Состояние прокрутки списка отображаемых планов\n const [scroll, setScroll] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //Отработка нажатия на прокрутку списка выпусков планов влево\n const handleScrollLeft = () => setScroll(pv => pv <= 1 ? 0 : pv - 1);\n\n //Отработка нажатия на прокрутку списка выпусков планов вправо\n const handleScrollRight = () => setScroll(pv => pv + pageSize >= planSpecs.length ? pv : pv + 1);\n\n //Сборка представления\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n container: true,\n direction: \"row\",\n justifyContent: \"center\",\n alignItems: \"center\",\n spacing: 2,\n sx: STYLES.PLAN_DOCUMENTS_LIST\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleScrollLeft,\n disabled: scroll <= 0\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.NAVIGATE_BUTTONS\n }, \"navigate_before\"))), planSpecs.map((el, i) => i >= scroll && i < scroll + pageSize ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n key: `${el.NRN}_${i}`,\n xs: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_plans_list_item__WEBPACK_IMPORTED_MODULE_1__.PlanSpecsListItem, {\n card: el,\n cardIndex: i,\n onClick: (card, cardIndex) => onItemClick ? onItemClick(card, cardIndex) : null\n })) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n item: true,\n display: \"flex\",\n justifyContent: \"center\",\n xs: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleScrollRight,\n disabled: scroll + pageSize >= planSpecs.length\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.NAVIGATE_BUTTONS\n }, \"navigate_next\")))));\n};\n\n//Контроль свойств - Список выпусков планов\nPlanSpecsList.propTypes = {\n planSpecs: prop_types__WEBPACK_IMPORTED_MODULE_6___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)),\n pageSize: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number),\n onItemClick: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plans_list.js?"); /***/ }), @@ -3975,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 */ PlansListItem: () => (/* binding */ PlansListItem)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\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/ImageList/ImageList.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageListItem/ImageListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __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 _progress_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.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 STYLES = {\n CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n gap: \"24px\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n cursor: \"pointer\"\n },\n IMAGE_BOX: {\n width: \"180px\",\n height: \"180px\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"flex\"\n },\n IMAGE_LIST_ITEM: {\n textAlign: \"center\"\n },\n IMAGE_IMG: {\n width: \"160px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Изображение для элемента\nconst PlansListItemImage = ({\n card\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.IMAGE_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"masonry\",\n cols: 1,\n gap: 8\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: 1,\n sx: STYLES.IMAGE_LIST_ITEM\n }, card[\"BIMAGE\"] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: `data:image/png;base64,${card[\"BIMAGE\"]}`,\n loading: \"lazy\",\n style: STYLES.IMAGE_IMG\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: {\n fontSize: \"5rem\"\n }\n }, \"construction\"))));\n};\n\n//Контроль свойств - Изображение для элемента\nPlansListItemImage.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Элемент списка планов\nconst PlansListItem = ({\n card,\n cardIndex,\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.CONTAINER,\n onClick: () => onClick ? onClick(card, cardIndex) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlansListItemImage, {\n card: card\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n textAlign: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h2\"\n }, card.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n progress: card.NPROGRESS,\n detail: card.SDETAIL,\n width: \"155px\",\n height: \"155px\",\n progressVariant: \"h3\",\n detailVariant: \"UDO_body2\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"UDO_body1\",\n color: \"text.secondary.fontColor\"\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle1\",\n mt: -1\n }, card.NYEAR)));\n};\n\n//Контроль свойств - Элемент списка планов\nPlansListItem.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object),\n cardIndex: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plans_list_item.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ PlanSpecsListItem: () => (/* binding */ PlanSpecsListItem)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\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/ImageList/ImageList.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/ImageListItem/ImageListItem.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __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 _progress_box__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./progress_box */ \"./app/panels/mech_rec_assembly_mon/components/progress_box.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 STYLES = {\n CONTAINER: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n gap: \"24px\",\n border: \"1px solid\",\n borderRadius: \"25px\",\n cursor: \"pointer\",\n backgroundColor: \"background.secondary\"\n },\n TEXT_INFO_FIELD: {\n color: \"text.secondary.fontColor\"\n },\n IMAGE_BOX: {\n width: \"180px\",\n height: \"180px\",\n alignItems: \"center\",\n justifyContent: \"center\",\n display: \"flex\"\n },\n IMAGE_LIST_ITEM: {\n textAlign: \"center\"\n },\n IMAGE_IMG: {\n width: \"160px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Изображение для элемента\nconst PlanSpecsListItemImage = ({\n card\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.IMAGE_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"masonry\",\n cols: 1,\n gap: 8\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n key: 1,\n sx: STYLES.IMAGE_LIST_ITEM\n }, card[\"BIMAGE\"] ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"img\", {\n src: `data:image/png;base64,${card[\"BIMAGE\"]}`,\n loading: \"lazy\",\n style: STYLES.IMAGE_IMG\n }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: {\n fontSize: \"5rem\"\n }\n }, \"construction\"))));\n};\n\n//Контроль свойств - Изображение для элемента\nPlanSpecsListItemImage.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object)\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Элемент списка выпусков планов\nconst PlanSpecsListItem = ({\n card,\n cardIndex,\n onClick\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.CONTAINER,\n onClick: () => onClick ? onClick(card, cardIndex) : null\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(PlanSpecsListItemImage, {\n card: card\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n textAlign: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"PlanSpecInfo\",\n sx: STYLES.TEXT_INFO_FIELD\n }, \"\\u041D\\u043E\\u043C\\u0435\\u0440 \\u0431\\u043E\\u0440\\u0442\\u0430\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"h2\"\n }, card.SNUMB)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_progress_box__WEBPACK_IMPORTED_MODULE_1__.ProgressBox, {\n progress: card.NPROGRESS,\n detail: card.SDETAIL,\n width: \"155px\",\n height: \"155px\",\n progressVariant: \"h3\",\n detailVariant: \"PlanSpecProgressDetail\"\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"PlanSpecInfo\",\n sx: STYLES.TEXT_INFO_FIELD\n }, \"\\u0413\\u043E\\u0434 \\u0432\\u044B\\u043F\\u0443\\u0441\\u043A\\u0430:\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n variant: \"subtitle1\",\n mt: -1\n }, card.NYEAR)));\n};\n\n//Контроль свойств - Элемент списка выпусков планов\nPlanSpecsListItem.propTypes = {\n card: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object),\n cardIndex: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number),\n onClick: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/plans_list_item.js?"); /***/ }), @@ -3986,7 +4657,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 */ ProgressBox: () => (/* binding */ ProgressBox)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 PROGRESS_BOX: (width, height) => ({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n margin: \"0px 32px\",\n borderRadius: \"50%\",\n ...(width ? {\n width\n } : {}),\n ...(height ? {\n height\n } : {})\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информация по прогрессу объекта\nconst ProgressBox = ({\n progress,\n detail,\n width,\n height,\n progressVariant,\n detailVariant\n}) => {\n //Определяем цвет тени\n let boxShadow = \"0 0 30px #d3d3d3\";\n switch (true) {\n case progress >= 70:\n boxShadow = \"0 0 30px #21d21e66\";\n break;\n case progress >= 40:\n boxShadow = \"0 0 30px #fddd3566\";\n break;\n case progress >= 10:\n boxShadow = \"0 0 30px #ea5c4966\";\n break;\n }\n\n //Возвращаем содержимое\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.PROGRESS_BOX(width, height),\n boxShadow: boxShadow\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: progressVariant\n }, `${progress}%`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: detailVariant\n }, detail));\n};\n\n//Контроль свойств - Информация по прогрессу объекта\nProgressBox.propTypes = {\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n detail: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n width: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)]),\n height: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)]),\n progressVariant: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n detailVariant: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/progress_box.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ ProgressBox: () => (/* binding */ ProgressBox)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 PROGRESS_BOX: (width, height) => ({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n margin: \"0px 32px\",\n borderRadius: \"50%\",\n backgroundColor: \"background.progress\",\n ...(width ? {\n width\n } : {}),\n ...(height ? {\n height\n } : {})\n })\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Информация по прогрессу объекта\nconst ProgressBox = ({\n progress,\n detail,\n width,\n height,\n progressVariant,\n detailVariant\n}) => {\n //Определяем цвет тени\n let boxShadow = \"0 0 30px #d3d3d3\";\n switch (true) {\n case progress >= 70:\n boxShadow = \"0 0 30px #21d21e66\";\n break;\n case progress >= 40:\n boxShadow = \"0 0 30px #fddd3566\";\n break;\n case progress >= 10:\n boxShadow = \"0 0 30px #ea5c4966\";\n break;\n }\n\n //Возвращаем содержимое\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.PROGRESS_BOX(width, height),\n boxShadow: boxShadow\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: progressVariant\n }, `${progress}%`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n variant: detailVariant\n }, detail));\n};\n\n//Контроль свойств - Информация по прогрессу объекта\nProgressBox.propTypes = {\n progress: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number),\n detail: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n width: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)]),\n height: prop_types__WEBPACK_IMPORTED_MODULE_3___default().oneOfType([(prop_types__WEBPACK_IMPORTED_MODULE_3___default().string), (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number)]),\n progressVariant: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string),\n detailVariant: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().string)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/components/progress_box.js?"); /***/ }), @@ -3997,7 +4668,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 = 50;\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 plans: [],\n plansLoaded: false,\n selectedPlan: {}\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 plans: [...(data?.XFCPRODPLAN_INFO || [])],\n plansLoaded: 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 selectedPlan: {},\n showPlanList: false\n }));\n };\n\n //Сброс выбора каталога планов\n const unselectPlanCtlg = () => setState(pv => ({\n ...pv,\n selectedPlanCtlg: {},\n selectedPlan: {},\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 plans: [],\n plansLoaded: 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 = plan => {\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 NFCPRODPLAN: plan\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 (plan) loadData();\n }, [plan, executeStored]);\n\n //Вернём данные\n return [costProductComposition, setCostProductComposition];\n};\n\n//Хук для таблицы детализации изделия\nconst useProductDetailsTable = (plan, 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 NPRODCMPSP: product,\n NFCPRODPLAN: plan,\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 (plan && product) loadData();\n }, [plan, 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 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?"); /***/ }), @@ -4019,7 +4690,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_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_15__ = __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_styles__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/ThemeProvider.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.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 },\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 },\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 PLANS_LIST_BOX: {\n paddingTop: \"20px\"\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 [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 {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_1__[\"MessagingСtx\"]);\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.plans.length - 1) planIndex = state.plans.length - 1;\n setState(pv => ({\n ...pv,\n selectedPlan: {\n ...state.plans[planIndex]\n }\n }));\n setPlanDetailNavigation(pv => ({\n ...pv,\n disableNavigatePrev: planIndex == 0 ? true : false,\n disableNavigateNext: planIndex == state.plans.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 selectedPlan: {}\n }));\n };\n\n //Обработка навигации из карточки с деталями плана\n const handlePlanDetailNavigateClick = direction => navigateToPlan(planDetailNavigation.currentPlanIndex + direction);\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__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material_styles__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n theme: _styles_themes__WEBPACK_IMPORTED_MODULE_4__.theme\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\\u0440\\u043E\\u0433\\u0440\\u0430\\u043C\\u043C\\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(PlanCtlgsList, {\n planCtlgs: filteredPlanCtgls,\n selectedPlanCtlg: state.selectedPlanCtlg.NRN,\n filter: filter,\n setFilter: setFilter,\n onClick: handlePlanCtlgClick\n })), state.init == true ? state.selectedPlanCtlg.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_13__[\"default\"], {\n variant: \"h3\",\n align: \"center\",\n color: \"text.title.fontColor\",\n py: 2\n }, title), state.plansLoaded == true ? state.selectedPlan.NRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plan_detail__WEBPACK_IMPORTED_MODULE_3__.PlanDetail, {\n plan: state.selectedPlan,\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_15__[\"default\"], {\n sx: STYLES.PLANS_LIST_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_plans_list__WEBPACK_IMPORTED_MODULE_2__.PlansList, {\n plans: state.plans,\n onItemClick: handlePlanClick\n })) : null) : /*#__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_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_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 ? /*#__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 }, \"\\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?"); /***/ }), @@ -4030,18 +4701,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 */ theme: () => (/* binding */ theme)\n/* harmony export */ });\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/createTheme.js\");\n //Интерфейсные элементы\n\n//Описание темы\nconst theme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n palette: {\n text: {\n title: {\n fontColor: \"rgba(0, 0, 0, 0.65)\"\n },\n secondary: {\n fontColor: \"rgba(0, 0, 0, 0.298)\"\n }\n }\n },\n typography: {\n h1: {\n fontSize: \"40px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n h2: {\n fontSize: \"40px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h3: {\n fontSize: \"30px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n h4: {\n fontSize: \"16px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle1: {\n fontSize: \"30px\",\n fontWeight: 400,\n textAlign: \"center\"\n },\n subtitle2: {\n fontSize: \"20px\",\n fontWeight: 700,\n textAlign: \"center\"\n },\n UDO_body1: {\n fontSize: \"14px\",\n fontWeight: 400,\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n UDO_body2: {\n fontSize: \"12px\",\n fontWeight: 400,\n whiteSpace: \"pre-line\",\n textAlign: \"center\",\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n body3: {\n fontSize: \"9px\",\n whiteSpace: \"pre-line\",\n textAlign: \"center\"\n }\n }\n});\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/styles/themes.js?"); - -/***/ }), - -/***/ "./app/panels/mech_rec_cost_jobs_manage/backend.js": -/*!*********************************************************!*\ - !*** ./app/panels/mech_rec_cost_jobs_manage/backend.js ***! - \*********************************************************/ -/***/ ((__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 */ updatingSelected: () => (/* binding */ updatingSelected),\n/* harmony export */ useCostEquipment: () => (/* binding */ useCostEquipment),\n/* harmony export */ useCostJobsSpecs: () => (/* binding */ useCostJobsSpecs),\n/* harmony export */ useCostRouteLists: () => (/* binding */ useCostRouteLists)\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 //Классы React\n //Контекст взаимодействия с сервером\n //Вспомогательные функции\n\n//---------\n//Константы\n//---------\n\n//Размер страницы данных\nconst DATA_GRID_PAGE_SIZE = 5;\nconst DATA_GRID_PAGE_FCEQUIPMENT = 10;\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Переиницализация выбранных значений строк (необходимо при сортировке или добавлении записей строк)\nconst updatingSelected = (rows, selectedRows) => {\n //Если полученный массив строк не пустой\n if (rows.length > 0 && selectedRows.length > 0) {\n //Устанавливаем выбор там, где он был установлен\n let updatedRows = rows.map(item => {\n if (selectedRows.includes(item.NRN)) {\n return {\n ...item,\n NSELECT: 1\n };\n } else {\n return item;\n }\n });\n return updatedRows;\n }\n //Возвращаем\n return rows;\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для таблицы маршрутных листов\nconst useCostRouteLists = (task, processIdent) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n task: null,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\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 (costRouteLists.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_FCROUTLST_DG_GET\",\n args: {\n NFCJOBS: 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,\n NINCLUDE_DEF: costRouteLists.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostRouteLists(pv => ({\n ...pv,\n task: task,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? updatingSelected([...(data.XROWS || [])], costRouteLists.selectedRows) : updatingSelected([...pv.rows, ...(data.XROWS || [])], costRouteLists.selectedRows),\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 }, [costRouteLists.reload, costRouteLists.filters, costRouteLists.orders, costRouteLists.dataLoaded, costRouteLists.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Добавление/удаление записи в селектлисте\n const modifySelectList = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n if (prms.NSELECT) {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_ADD\",\n args: {\n NIDENT: processIdent,\n NFCROUTLST: prms.NFCROUTLST\n }\n });\n } else {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.SELECTLIST_FCROUTLST_DEL\",\n args: {\n NIDENT: processIdent,\n NFCROUTLST: prms.NFCROUTLST\n }\n });\n }\n } catch (e) {\n throw new Error(e.message);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteLists.reload, loadData]);\n\n //При изменении сменного задания\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostRouteLists(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [task]);\n return [costRouteLists, setCostRouteLists, modifySelectList];\n};\n\n//Хук для таблицы операций\nconst useCostJobsSpecs = (task, fcroutlstList, processIdent) => {\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 selectedRows: [],\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 (costJobsSpecs.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_DG_GET\",\n args: {\n NFCJOBS: task,\n NIDENT: processIdent,\n //SFCROUTLST_LIST: fcroutlstList.join(\",\"),\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costJobsSpecs.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costJobsSpecs.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_SIZE,\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 ? updatingSelected([...(data.XROWS || [])], costJobsSpecs.selectedRows) : updatingSelected([...pv.rows, ...(data.XROWS || [])], costJobsSpecs.selectedRows),\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 }, [costJobsSpecs.reload, costJobsSpecs.filters, costJobsSpecs.orders, costJobsSpecs.dataLoaded, costJobsSpecs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\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 loadData();\n }, [costJobsSpecs.reload, loadData]);\n\n //При изменении сменного задания\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setCostJobsSpecs(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }, [task, fcroutlstList]);\n return [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs];\n};\n\n//Хук для таблицы рабочих центров\nconst useCostEquipment = () => {\n //Собственное состояние - таблица данных\n const [costEquipment, setCostEquipment] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n selectedRows: [],\n selectedLoaded: false,\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 (costEquipment.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCEQUIPMENT_DG_GET\",\n args: {\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.object2Base64XML)(costEquipment.orders, {\n arrayNodeName: \"orders\"\n }),\n SDATA_TYPE: SERV_DATA_TYPE_CLOB\n },\n NPAGE_NUMBER: costEquipment.pageNumber,\n NPAGE_SIZE: DATA_GRID_PAGE_FCEQUIPMENT,\n NINCLUDE_DEF: costEquipment.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\",\n attributeValueProcessor: (name, val) => [\"NSELECT\"].includes(name) ? val === 1 : val\n });\n setCostEquipment(pv => ({\n ...pv,\n columnsDef: data.XCOLUMNS_DEF ? [...data.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? updatingSelected([...(data.XROWS || [])], costEquipment.selectedRows) : updatingSelected([...pv.rows, ...(data.XROWS || [])], costEquipment.selectedRows),\n dataLoaded: true,\n reload: false,\n morePages: (data.XROWS || []).length >= DATA_GRID_PAGE_FCEQUIPMENT\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costEquipment.reload, costEquipment.filters, costEquipment.orders, costEquipment.dataLoaded, costEquipment.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //Включение оборудования в операции\n const includeCostEquipment = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_INC_FCEQUIPMENT\",\n args: {\n NFCEQUIPMENT: prms.NFCEQUIPMENT,\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 const excludeCostEquipment = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async prms => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBSSP_EXC_FCEQUIPMENT\",\n args: {\n NFCEQUIPMENT: prms.NFCEQUIPMENT,\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 loadData();\n }, [costEquipment.reload, loadData]);\n return [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment];\n};\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/backend.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ darkTheme: () => (/* binding */ darkTheme),\n/* harmony export */ lightTheme: () => (/* binding */ lightTheme)\n/* harmony export */ });\n/* harmony import */ var _mui_material_styles__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @mui/material/styles */ \"./node_modules/@mui/material/styles/createTheme.js\");\n //Интерфейсные элементы\n\n//---------\n//Константы\n//---------\n\n//Насыщенность шрифта\nconst FONT_WEIGHT_NORMAL = 400;\nconst FONT_WEIGHT_BOLD = 700;\n\n//Выравнивание текста\nconst TEXT_ALIGN_CENTER = \"center\";\n\n//Стиль для детализации прогресса и сообщения таблицы детализации\nconst smallSizedText = {\n fontSize: \"12px\",\n fontWeight: FONT_WEIGHT_NORMAL,\n whiteSpace: \"pre-line\",\n textAlign: TEXT_ALIGN_CENTER,\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n};\n\n//Стили кастомных шрифтов\nconst customTypography = {\n h1: {\n fontSize: \"40px\",\n fontWeight: FONT_WEIGHT_NORMAL,\n textAlign: TEXT_ALIGN_CENTER\n },\n h2: {\n fontSize: \"40px\",\n fontWeight: FONT_WEIGHT_BOLD,\n textAlign: TEXT_ALIGN_CENTER\n },\n h3: {\n fontSize: \"30px\",\n fontWeight: FONT_WEIGHT_BOLD,\n textAlign: TEXT_ALIGN_CENTER\n },\n h4: {\n fontSize: \"16px\",\n fontWeight: FONT_WEIGHT_NORMAL,\n textAlign: TEXT_ALIGN_CENTER\n },\n subtitle1: {\n fontSize: \"30px\",\n fontWeight: FONT_WEIGHT_NORMAL,\n textAlign: TEXT_ALIGN_CENTER\n },\n subtitle2: {\n fontSize: \"20px\",\n fontWeight: FONT_WEIGHT_BOLD,\n textAlign: TEXT_ALIGN_CENTER\n },\n body3: {\n fontSize: \"9px\",\n whiteSpace: \"pre-line\",\n textAlign: TEXT_ALIGN_CENTER\n },\n PlanSpecInfo: {\n fontSize: \"14px\",\n fontWeight: FONT_WEIGHT_NORMAL,\n textAlign: TEXT_ALIGN_CENTER,\n wordWrap: \"break-word\",\n letterSpacing: \"0.00938em\",\n lineHeight: \"1.5\"\n },\n PlanSpecProgressDetail: {\n ...smallSizedText\n },\n ProductDetailMessage: {\n ...smallSizedText\n }\n};\n\n//---------\n//Описание темы\n//---------\n\nconst lightTheme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n palette: {\n type: \"light\",\n background: {\n main: \"#fff\",\n secondary: \"#fff\",\n progress: \"#fff\",\n detail_table: \"#fff\",\n detail_info: \"#fff\",\n product_selector: \"#fff\",\n plans_zero_docs: \"#ebecec\",\n plans_drawer_paper: \"#fff\"\n },\n text: {\n title: {\n fontColor: \"rgba(0, 0, 0, 0.65)\"\n },\n detail_table: {\n fontColor: \"rgba(0, 0, 0, 0.87)\"\n },\n secondary: {\n fontColor: \"rgba(0, 0, 0, 0.298)\"\n },\n plans_finder: {\n fontColor: \"black\"\n },\n more_button: {\n fontColor: \"#1976d2\"\n }\n }\n },\n typography: {\n ...customTypography\n }\n});\nconst darkTheme = (0,_mui_material_styles__WEBPACK_IMPORTED_MODULE_0__[\"default\"])({\n palette: {\n type: \"dark\",\n background: {\n main: \"#161616\",\n secondary: \"#d2d2d2\",\n progress: \"#e8e8e8\",\n detail_table: \"#3f3f3f\",\n detail_info: \"#d0d0d0\",\n product_selector: \"#eee\",\n plans_zero_docs: \"#323232\",\n plans_drawer_paper: \"#3f3f3f\"\n },\n text: {\n title: {\n fontColor: \"#fff\"\n },\n detail_table: {\n fontColor: \"#fff\"\n },\n secondary: {\n fontColor: \"rgba(0, 0, 0, 0.298)\"\n },\n plans_finder: {\n fontColor: \"#fff\"\n },\n more_button: {\n fontColor: \"#fff\"\n }\n }\n },\n typography: {\n ...customTypography\n }\n});\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_assembly_mon/styles/themes.js?"); /***/ }), @@ -4052,7 +4712,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 */ CostJobsSpecsDataGrid: () => (/* binding */ CostJobsSpecsDataGrid),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\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_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.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/Grid/Grid.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/Button/Button.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 _backend__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./backend */ \"./app/panels/mech_rec_cost_jobs_manage/backend.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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\nconst sUnitCostRouteLists = \"CostRouteLists\"; //Мнемокод раздела маршрутных листов\nconst sUnitCostJobsSpecs = \"CostJobsSpecs\"; //Мнемокод раздела операций\nconst sUnitCostEquipment = \"CostEquipment\"; //Мнемокод раздела рабочих центров\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_SUM: {\n textAlign: \"right\",\n paddingTop: \"5px\",\n paddingRight: \"15px\"\n },\n TABLE_BUTTONS: {\n display: \"flex\",\n justifyContent: \"flex-end\"\n },\n CHECK_BOX: {\n textAlign: \"center\"\n },\n OPERATIONS_SEPARATOR: {\n padding: \"3px 0px\",\n backgroundColor: \"lightblue\"\n },\n INFORMATION_HALF: {\n minWidth: \"50%\",\n maxWidth: \"50%\",\n textAlign: \"center\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Формирование списка отмеченных записей\nfunction selectedReducer(accumulator, current) {\n if (current.NSELECT == 1) {\n accumulator.push(current.NRN);\n }\n return accumulator;\n}\n\n//Форматирование значения ячейки\nconst dataCellRender = ({\n row,\n columnDef,\n handleSelectChange,\n sUnit,\n selectedEquip\n}) => {\n //Инициализируем доступность выбора\n let disabled = false;\n //Если это рабочие центры\n if (sUnit === sUnitCostEquipment) {\n //Для колонки выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: selectedEquip.length === 1 && selectedEquip[0] !== row[\"NRN\"],\n checked: row[columnDef.name]\n //checked={row[columnDef.name] === 1}\n ,\n onChange: () => handleSelectChange(row[\"NRN\"], sUnit, row[\"NCOEFF\"] <= row[\"NLOADING\"])\n }))\n };\n }\n //Если оборудование загружено\n if (row[\"NCOEFF\"] <= row[\"NLOADING\"]) {\n //Если поле не поле выбора\n if (columnDef.name !== \"NSELECT\") {\n return {\n cellStyle: {\n color: \"lightgrey\"\n },\n data: row[columnDef.name]\n };\n }\n }\n }\n //Если это операции\n if (sUnit === sUnitCostJobsSpecs) {\n //Если \"Оборудование план\" операции сходится с выбранным оборудованием\n if (selectedEquip.includes(row[\"NEQUIP_PLAN\"])) {\n //Если колонка выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n cellStyle: {\n backgroundColor: \"#bce0de\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: disabled,\n checked: row[columnDef.name]\n //checked={row[columnDef.name] === 1}\n ,\n onChange: () => handleSelectChange(row[\"NRN\"], sUnit)\n }))\n };\n } else {\n return {\n cellStyle: {\n backgroundColor: \"#bce0de\"\n },\n data: row[columnDef.name]\n };\n }\n }\n }\n //Для колонки выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: disabled,\n checked: row[columnDef.name]\n //checked={row[columnDef.name] === 1}\n ,\n onChange: () => handleSelectChange(row[\"NRN\"], sUnit)\n }))\n };\n }\n return {\n data: row[columnDef.name]\n };\n};\n\n//Генерация представления ячейки заголовка группы\nconst headCellRender = ({\n columnDef\n}) => {\n if (columnDef.name === \"NSELECT\") {\n return {\n stackStyle: {\n padding: \"2px\",\n justifyContent: \"space-around\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"done\")\n };\n } else {\n return {\n stackStyle: {\n padding: \"2px\"\n },\n data: columnDef.caption\n };\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица информации об операциях сменного задания\nconst CostJobsSpecsDataGrid = ({\n task,\n processIdent,\n clearSelectlist\n}) => {\n //Собственное состояние - таблица данных маршрутных листов\n const [costRouteLists, setCostRouteLists, modifySelectList] = (0,_backend__WEBPACK_IMPORTED_MODULE_3__.useCostRouteLists)(task, processIdent);\n\n //Собственное состояние - таблица данных операций\n const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = (0,_backend__WEBPACK_IMPORTED_MODULE_3__.useCostJobsSpecs)(task, costRouteLists.selectedRows, processIdent);\n\n //Собственное состояние - таблица рабочих центров\n const [costEquipment, setCostEquipment, includeCostEquipment, excludeCostEquipment] = (0,_backend__WEBPACK_IMPORTED_MODULE_3__.useCostEquipment)();\n\n //При изменении состояния сортировки маршрутных листов\n const costRouteListOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц маршрутных листов\n const costRouteListPagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки операций\n const costJobsSpecOrderChanged = ({\n orders\n }) => setCostJobsSpecs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц операций\n const costJobsSpecPagesCountChanged = () => setCostJobsSpecs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки рабочих центров\n const costEquipmentOrderChanged = ({\n orders\n }) => setCostEquipment(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц рабочих центров\n const costEquipmentPagesCountChanged = () => setCostEquipment(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При включении оборудования в операции\n const costJobsSpecIncludeCostEquipment = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const includeAsync = async () => {\n //Включаем оборудование в операции\n try {\n await includeCostEquipment({\n NFCEQUIPMENT: costEquipment.selectedRows[0],\n NFCJOBS: task,\n SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(\";\")\n });\n //Необходимо обновить все данные\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n setCostEquipment(pv => ({\n ...pv,\n selectedRows: [],\n selectedLoaded: false,\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Включаем оборудование асинхронно\n includeAsync();\n };\n\n //При исключении оборудования из операции\n const costJobsSpecExcludeCostEquipment = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const excludeAsync = async () => {\n //Включаем оборудование в операции\n try {\n await excludeCostEquipment({\n NFCEQUIPMENT: costEquipment.selectedRows[0],\n NFCJOBS: task,\n SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(\";\")\n });\n //Необходимо обновить данные о маршрутных листах и оборудовании\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n setCostEquipment(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Исключаем операции асинхронно\n excludeAsync();\n };\n\n //Выдача задания операции\n const costJobsSpecIssue = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const issueAsync = async () => {\n //Включаем оборудование в операции\n try {\n await issueCostJobsSpecs({\n NFCJOBS: task,\n SFCJOBSSP_LIST: costJobsSpecs.selectedRows.join(\";\")\n });\n //Необходимо обновить данные о маршрутных листах и оборудовании\n clearSelectlist(processIdent);\n setCostRouteLists(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n setCostEquipment(pv => ({\n ...pv,\n selectedRows: [],\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Выдаем задание асинхронно\n issueAsync();\n };\n\n //При изменение состояния выбора\n const handleSelectChange = (NRN, sUnit, selectedLoaded) => {\n //Инициализируем строки таблицы\n let rows = [];\n //Индекс элемента в массиве\n let indexRow = null;\n //Исходим от раздела\n switch (sUnit) {\n //Маршрутные листы\n case sUnitCostRouteLists:\n //Инициализируем маршрутными листами\n rows = costRouteLists.rows;\n //Определяем индекс элемента в массиве\n indexRow = rows.findIndex(obj => obj.NRN == NRN);\n //Изменяем значение выбора\n rows[indexRow].NSELECT = !rows[indexRow].NSELECT;\n //Добавляем/удаляем маршрутный лист из селектлиста\n modifySelectList({\n NFCROUTLST: NRN,\n NSELECT: rows[indexRow].NSELECT\n });\n //Актуализируем строки\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows,\n selectedRows: rows.reduce(selectedReducer, [])\n }));\n //Выходим\n break;\n //Операции\n case sUnitCostJobsSpecs:\n //Инициализируем операциями\n rows = costJobsSpecs.rows;\n //Определяем индекс элемента в массиве\n indexRow = rows.findIndex(obj => obj.NRN == NRN);\n //Изменяем значение выбора\n rows[indexRow].NSELECT = !rows[indexRow].NSELECT;\n //Актуализируем строки\n setCostJobsSpecs(pv => ({\n ...pv,\n rows: rows,\n selectedRows: rows.reduce(selectedReducer, [])\n }));\n //Выходим\n break;\n //Рабочие центры\n case sUnitCostEquipment:\n //Инициализируем рабочими центрами\n rows = costEquipment.rows;\n //Определяем индекс элемента в массиве\n indexRow = rows.findIndex(obj => obj.NRN == NRN);\n //Изменяем значение выбора\n rows[indexRow].NSELECT = !rows[indexRow].NSELECT;\n //Актуализируем строки\n setCostEquipment(pv => ({\n ...pv,\n rows: rows,\n selectedRows: rows.reduce(selectedReducer, []),\n selectedLoaded: selectedLoaded\n }));\n //Выходим\n break;\n default:\n return;\n }\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_7__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n item: true,\n sx: STYLES.INFORMATION_HALF\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u041C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0435 \\u043B\\u0438\\u0441\\u0442\\u044B\"), costRouteLists.dataLoaded ? /*#__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_4__[\"default\"], {\n sx: STYLES.TABLE_BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: costJobsSpecs.selectedRows.length === 0,\n onClick: costJobsSpecIssue\n }, \"\\u0412\\u044B\\u0434\\u0430\\u0442\\u044C \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE\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 columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n onOrderChanged: costRouteListOrderChanged,\n onPagesCountChanged: costRouteListPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostRouteLists\n }),\n headCellRender: prms => headCellRender({\n ...prms\n })\n })), costRouteLists.selectedRows.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_4__[\"default\"], {\n sx: STYLES.OPERATIONS_SEPARATOR\n }, \"\\u041E\\u043F\\u0435\\u0440\\u0430\\u0446\\u0438\\u0438 \\u0432\\u044B\\u0431\\u0440\\u0430\\u043D\\u043D\\u044B\\u0445 \\u043C\\u0430\\u0440\\u0448\\u0440\\u0443\\u0442\\u043D\\u044B\\u0445 \\u043B\\u0438\\u0441\\u0442\\u043E\\u0432\"), /*#__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 columnsDef: costJobsSpecs.columnsDef,\n rows: costJobsSpecs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costJobsSpecs.morePages,\n reloading: costJobsSpecs.reload,\n onOrderChanged: costJobsSpecOrderChanged,\n onPagesCountChanged: costJobsSpecPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostJobsSpecs,\n selectedEquip: costEquipment.selectedRows\n }),\n headCellRender: prms => headCellRender({\n ...prms\n })\n }))) : null)) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n item: true,\n sx: STYLES.INFORMATION_HALF\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0420\\u0430\\u0431\\u043E\\u0447\\u0438\\u0435 \\u0446\\u0435\\u043D\\u0442\\u0440\\u044B\"), costEquipment.dataLoaded ? /*#__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_4__[\"default\"], {\n sx: STYLES.TABLE_BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: costEquipment.selectedRows.length !== 1 || costEquipment.selectedRows.length === 1 && costJobsSpecs.selectedRows.length === 0 || costEquipment.selectedLoaded,\n onClick: costJobsSpecIncludeCostEquipment\n }, \"\\u0412\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0432 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n ml: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: costEquipment.selectedRows.length !== 1 || costEquipment.selectedRows.length === 1 && costJobsSpecs.selectedRows.length === 0,\n onClick: costJobsSpecExcludeCostEquipment\n }, \"\\u0418\\u0441\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0438\\u0437 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE\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 columnsDef: costEquipment.columnsDef,\n rows: costEquipment.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costEquipment.morePages,\n reloading: costEquipment.reload,\n onOrderChanged: costEquipmentOrderChanged,\n onPagesCountChanged: costEquipmentPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostEquipment,\n selectedEquip: costEquipment.selectedRows\n }),\n headCellRender: prms => headCellRender({\n ...prms\n })\n })))) : null)));\n};\n\n//Контроль свойств - Таблица информации об операциях сменного задания\nCostJobsSpecsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number).isRequired,\n processIdent: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().number),\n clearSelectlist: (prop_types__WEBPACK_IMPORTED_MODULE_10___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostJobsSpecsDataGrid: () => (/* binding */ CostJobsSpecsDataGrid),\n/* harmony export */ headCellRender: () => (/* binding */ headCellRender)\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_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Checkbox/Checkbox.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/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.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_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/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tooltip/Tooltip.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 _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//---------\nconst sUnitCostJobsSpecs = \"CostJobsSpecs\"; //Мнемокод раздела операций\nconst sUnitCostEquipment = \"CostEquipment\"; //Мнемокод раздела рабочих центров\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n DATA_GRID_CONTAINER: {\n minHeight: \"65vh\",\n maxHeight: \"65vh\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_BUTTONS: {\n display: \"flex\",\n justifyContent: \"flex-end\"\n },\n CHECK_BOX: {\n textAlign: \"center\"\n },\n JOBS_INFO: {\n minWidth: \"60%\",\n maxWidth: \"60%\",\n textAlign: \"center\"\n },\n EQUIPMENT_INFO: {\n minWidth: \"40%\",\n maxWidth: \"40%\",\n textAlign: \"center\"\n }\n};\n\n//Цвета\nconst colors = {\n LINKED: \"#bce0de\",\n UNAVAILABLE: \"#949494\",\n WITH_EQCONFIG: \"#82df83\"\n};\n\n//---------------------------------------------\n//Вспомогательные функции и компоненты\n//---------------------------------------------\n\n//Форматирование значения ячейки\nconst dataCellRender = ({\n row,\n columnDef,\n handleSelectChange,\n sUnit,\n selectedRow,\n selectedJobSpec\n}) => {\n //Стиль\n let cellStyle = {};\n //Если это рабочие центры\n if (sUnit === sUnitCostEquipment) {\n //Признак недоступности\n let disabled = true;\n //Если в выбранной строке смены указано рабочее место\n if (selectedJobSpec.NEQCONFIG) {\n //Если это текущее рабочее место\n if (row[\"NRN\"] === selectedJobSpec.NEQCONFIG) {\n //Подсвечиваем строку рабочего места\n cellStyle = {\n backgroundColor: colors.LINKED\n };\n }\n } else {\n //Если выбрана строка смены\n if (selectedJobSpec.NRN) {\n //Если на текущее рабочее место возможно добавить задание\n if (row[\"NLOADING\"] < 100 && row[\"NEQUIPMENT\"] === selectedJobSpec.NEQUIP_PLAN) {\n //Подсвечиваем строку рабочего места\n cellStyle = {\n backgroundColor: colors.LINKED\n };\n disabled = false;\n }\n }\n }\n //Если рабочий центр загружен\n if (row[\"NLOADING\"] >= 100) {\n //Если поле не поле выбора\n if (columnDef.name !== \"NSELECT\") {\n //Указываем, что рабочее место недоступно\n cellStyle = {\n ...cellStyle,\n color: colors.UNAVAILABLE\n };\n }\n }\n //Для колонки выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: disabled,\n checked: row[\"NRN\"] === selectedRow,\n onChange: () => handleSelectChange({\n NRN: row[\"NRN\"],\n SUNIT: sUnit,\n BFULL_LOADED: row[\"NLOADING\"] >= 100\n })\n }))\n };\n }\n //Отформатированная колонка\n return {\n cellStyle,\n data: row[columnDef.name]\n };\n }\n //Если это сменное задание\n if (sUnit === sUnitCostJobsSpecs) {\n //Если указан станок\n if (row[\"SEQCONFIG\"]) {\n //Подсвечиваем сменное задание зеленым\n cellStyle = {\n ...cellStyle,\n backgroundColor: colors.WITH_EQCONFIG\n };\n }\n //Для колонки выбора\n if (columnDef.name === \"NSELECT\") {\n return {\n cellStyle,\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.CHECK_BOX\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n disabled: row[\"DBEG_FACT\"] ? true : false,\n checked: row[\"NRN\"] === selectedRow,\n onChange: () => handleSelectChange({\n NRN: row[\"NRN\"],\n SUNIT: sUnit,\n NEQCONFIG: row[\"NEQCONFIG\"],\n NEQUIP_PLAN: row[\"NEQUIP_PLAN\"],\n NQUANT_PLAN: row[\"NQUANT_PLAN\"]\n })\n }))\n };\n }\n //Отформатированная колонка\n return {\n cellStyle,\n data: row[columnDef.name]\n };\n }\n //Необрабатываемый раздел\n return {\n data: row[columnDef.name]\n };\n};\n\n//Генерация представления ячейки заголовка группы\nconst headCellRender = ({\n columnDef\n}) => {\n if (columnDef.name === \"NSELECT\") {\n return {\n stackStyle: {\n padding: \"2px\",\n justifyContent: \"space-around\"\n },\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, \"done\")\n };\n } else {\n return {\n stackStyle: {\n padding: \"2px\"\n },\n data: columnDef.caption\n };\n }\n};\n\n//Диалог включения станка в сменное задание\nconst CostJobsSpecsInclude = ({\n includeEquipment,\n setIncludeEquipment,\n setCostJobsSpecs,\n setEquipConfiguration,\n includeEquipConfiguration\n}) => {\n //Собственное состояние - Значение приоритета\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(includeEquipment.NVALUE);\n\n //При закрытии включения станка\n const handlePriorEditClose = () => {\n setIncludeEquipment({\n NFCJOBSSP: null,\n NEQCONFIG: null,\n NVALUE: 0\n });\n };\n\n //При включении станка в строку сменного задания\n const costJobsSpecIncludeCostEquipment = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const includeAsync = async () => {\n //Включаем станок в строку сменного задания\n try {\n await includeEquipConfiguration({\n NEQCONFIG: includeEquipment.NEQCONFIG,\n NFCJOBSSP: includeEquipment.NFCJOBSSP,\n NQUANT_PLAN: state\n });\n //Необходимо обновить все данные\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRow: {},\n pageNumber: 1,\n reload: true\n }));\n setEquipConfiguration(pv => ({\n ...pv,\n selectedRow: {},\n pageNumber: 1,\n reload: true\n }));\n handlePriorEditClose();\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Включаем станок асинхронно\n includeAsync();\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: true,\n onClose: () => handlePriorEditClose()\n }, /*#__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_4__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n name: \"editInculdeValue\",\n label: \"\\u041A\\u043E\\u043B\\u0438\\u0447\\u0435\\u0441\\u0442\\u0432\\u043E\",\n variant: \"standard\",\n fullWidth: true,\n InputProps: {\n type: \"number\",\n inputProps: {\n max: includeEquipment.NVALUE,\n min: 0\n }\n },\n value: state,\n onChange: event => {\n var value = parseInt(event.target.value, 10);\n if (value > includeEquipment.NVALUE) {\n value = includeEquipment.NVALUE;\n }\n if (value < 0) {\n value = 0;\n }\n setState(value);\n }\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_10__[\"default\"], {\n onClick: costJobsSpecIncludeCostEquipment,\n variant: \"contained\",\n sx: STYLES.DIALOG_BUTTONS\n }, \"\\u0412\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0432 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\")))), /*#__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_10__[\"default\"], {\n onClick: () => handlePriorEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")));\n};\n\n//Контроль свойств - Диалог включения станка в сменное задание\nCostJobsSpecsInclude.propTypes = {\n includeEquipment: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object).isRequired,\n setIncludeEquipment: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired,\n setCostJobsSpecs: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired,\n setEquipConfiguration: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired,\n includeEquipConfiguration: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица информации о строках сменного задания\nconst CostJobsSpecsDataGrid = ({\n task,\n haveNote\n}) => {\n //Собственное состояние - Включение в задание\n const [includeEquipment, setIncludeEquipment] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n NFCJOBSSP: null,\n NEQCONFIG: null,\n NVALUE: 0\n });\n\n //Собственное состояние - таблица данных сменных заданий\n const [costJobsSpecs, setCostJobsSpecs, issueCostJobsSpecs] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useCostJobsSpecs)(task);\n\n //Собственное состояние - таблица рабочих центров\n const [equipConfiguration, setEquipConfiguration, includeEquipConfiguration, excludeEquipConfiguration] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useEquipConfiguration)(task);\n\n //При изменении состояния сортировки операций\n const costJobsSpecOrderChanged = ({\n orders\n }) => setCostJobsSpecs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц операций\n const costJobsSpecPagesCountChanged = () => setCostJobsSpecs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении состояния сортировки рабочих центров\n const costEquipmentOrderChanged = ({\n orders\n }) => setEquipConfiguration(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц рабочих центров\n const costEquipmentPagesCountChanged = () => setEquipConfiguration(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При исключении станка из строки сменного задания\n const costJobsSpecExcludeCostEquipment = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const excludeAsync = async () => {\n //Исключаем станок из строки сменного задания\n try {\n await excludeEquipConfiguration({\n NFCJOBSSP: costJobsSpecs.selectedRow.NRN\n });\n //Необходимо обновить данные\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRow: {},\n pageNumber: 1,\n reload: true\n }));\n setEquipConfiguration(pv => ({\n ...pv,\n selectedRow: {},\n pageNumber: 1,\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Исключаем станок асинхронно\n excludeAsync();\n };\n\n //Выдача задания операции\n const costJobsSpecIssue = () => {\n //Делаем асинхронно, чтобы при ошибке ничего не обновлять\n const issueAsync = async () => {\n //Включаем оборудование в операции\n try {\n await issueCostJobsSpecs({\n NFCJOBS: task\n });\n //Необходимо обновить данные\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRow: {},\n pageNumber: 1,\n reload: true\n }));\n setEquipConfiguration(pv => ({\n ...pv,\n selectedRow: {},\n pageNumber: 1,\n reload: true\n }));\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Выдаем задание асинхронно\n issueAsync();\n };\n\n //При изменение состояния выбора\n const handleSelectChange = prms => {\n //Выбранный элемент\n let selectedRow = null;\n //Исходим от раздела\n switch (prms.SUNIT) {\n //Сменное задание\n case sUnitCostJobsSpecs:\n //Определяем это новое отмеченное сменное задание или сброс старого\n selectedRow = costJobsSpecs.selectedRow.NRN ? costJobsSpecs.selectedRow.NRN === prms.NRN ? null : prms.NRN : prms.NRN;\n //Актуализируем строки\n setCostJobsSpecs(pv => ({\n ...pv,\n selectedRow: selectedRow ? {\n NRN: selectedRow,\n NEQCONFIG: prms.NEQCONFIG,\n NEQUIP_PLAN: prms.NEQUIP_PLAN,\n NQUANT_PLAN: prms.NQUANT_PLAN\n } : {\n NRN: null,\n NEQCONFIG: null,\n NEQUIP_PLAN: null,\n NQUANT_PLAN: null\n }\n }));\n //Выходим\n break;\n //Рабочие центры\n case sUnitCostEquipment:\n //Определяем это новое отмеченное сменное задание или сброс старого\n selectedRow = equipConfiguration.selectedRow.NRN ? equipConfiguration.selectedRow.NRN === prms.NRN ? null : prms.NRN : prms.NRN;\n //Актуализируем строки\n setEquipConfiguration(pv => ({\n ...pv,\n selectedRow: selectedRow ? {\n NRN: selectedRow,\n BFULL_LOADED: prms.BFULL_LOADED\n } : {\n NRN: null,\n BFULL_LOADED: null\n }\n }));\n //Выходим\n break;\n default:\n return;\n }\n };\n\n //При открытии окна включения в задание\n const handleIncludeEquipmentOpen = () => {\n //Актуализируем строки\n setIncludeEquipment({\n NFCJOBSSP: costJobsSpecs.selectedRow.NRN,\n NEQCONFIG: equipConfiguration.selectedRow.NRN,\n NVALUE: costJobsSpecs.selectedRow.NQUANT_PLAN\n });\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_13__[\"default\"], {\n container: true,\n spacing: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n sx: STYLES.JOBS_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0421\\u043C\\u0435\\u043D\\u043D\\u043E\\u0435 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\"), costJobsSpecs.dataLoaded ? /*#__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_4__[\"default\"], {\n sx: STYLES.TABLE_BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n title: haveNote ? \"Сменное задание имеет строку с примечанием\" : null\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_10__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: haveNote,\n onClick: costJobsSpecIssue\n }, \"\\u0412\\u044B\\u0434\\u0430\\u0442\\u044C \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE\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 sx: STYLES.DATA_GRID_CONTAINER,\n elevation: 1\n },\n columnsDef: costJobsSpecs.columnsDef,\n rows: costJobsSpecs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costJobsSpecs.morePages,\n reloading: costJobsSpecs.reload,\n onOrderChanged: costJobsSpecOrderChanged,\n onPagesCountChanged: costJobsSpecPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostJobsSpecs,\n selectedRow: costJobsSpecs.selectedRow.NRN,\n selectedJobSpec: costJobsSpecs.selectedRow\n }),\n headCellRender: prms => headCellRender({\n ...prms\n }),\n fixedHeader: true\n })))) : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n item: true,\n sx: STYLES.EQUIPMENT_INFO\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0420\\u0430\\u0431\\u043E\\u0447\\u0438\\u0435 \\u0446\\u0435\\u043D\\u0442\\u0440\\u044B\"), equipConfiguration.dataLoaded ? /*#__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_4__[\"default\"], {\n sx: STYLES.TABLE_BUTTONS\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: !equipConfiguration.selectedRow.NRN || !costJobsSpecs.selectedRow.NRN || equipConfiguration.selectedRow.NRN && equipConfiguration.selectedRow.BFULL_LOADED,\n onClick: handleIncludeEquipmentOpen\n }, \"\\u0412\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0432 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u0435\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n ml: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n variant: \"contained\",\n size: \"small\",\n disabled: !costJobsSpecs.selectedRow.NRN || !costJobsSpecs.selectedRow.NEQCONFIG,\n onClick: costJobsSpecExcludeCostEquipment\n }, \"\\u0418\\u0441\\u043A\\u043B\\u044E\\u0447\\u0438\\u0442\\u044C \\u0438\\u0437 \\u0437\\u0430\\u0434\\u0430\\u043D\\u0438\\u044F\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n sx: STYLES.TABLE\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 sx: STYLES.DATA_GRID_CONTAINER,\n elevation: 1\n },\n columnsDef: equipConfiguration.columnsDef,\n rows: equipConfiguration.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: equipConfiguration.morePages,\n reloading: equipConfiguration.reload,\n onOrderChanged: costEquipmentOrderChanged,\n onPagesCountChanged: costEquipmentPagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectChange,\n sUnit: sUnitCostEquipment,\n selectedRow: equipConfiguration.selectedRow.NRN,\n selectedJobSpec: costJobsSpecs.selectedRow\n }),\n headCellRender: prms => headCellRender({\n ...prms\n }),\n fixedHeader: true\n })))) : null)), includeEquipment.NFCJOBSSP && includeEquipment.NFCJOBSSP ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CostJobsSpecsInclude, {\n includeEquipment: includeEquipment,\n setIncludeEquipment: setIncludeEquipment,\n setCostJobsSpecs: setCostJobsSpecs,\n setEquipConfiguration: setEquipConfiguration,\n includeEquipConfiguration: includeEquipConfiguration\n }) : null);\n};\n\n//Контроль свойств - Таблица информации о строках сменного задания\nCostJobsSpecsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().number).isRequired,\n haveNote: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().bool).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js?"); /***/ }), @@ -4063,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 */ 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/*\r\n Парус 8 - Панели мониторинга - ПУП - Выдача сменного задания\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\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//# 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 _core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\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 dataLoaded: 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 //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n const initPlans = async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {},\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 jobListLoaded: 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 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_2__.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 => {\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 CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_2__.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]);\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?"); /***/ }), @@ -4085,7 +4745,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 */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs)\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 _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 _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\");\n/* harmony import */ var _fcjobssp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fcjobssp */ \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.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 STYLES = {\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 margin: \"5px 0px\",\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,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n init: false,\n showJobList: false,\n jobList: [],\n jobListLoaded: false,\n selectedJob: {},\n processIdent: null,\n dataLoaded: false\n });\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 executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_1__[\"BackEndС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 initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_INIT\",\n args: {},\n respArg: \"COUT\",\n fullResponse: true,\n isArray: name => name === \"XFCJOBS\"\n });\n setState(pv => ({\n ...pv,\n init: true,\n jobList: [...(data.XPAYLOAD?.XFCJOBS || [])],\n jobListLoaded: true,\n processIdent: data.XPAYLOAD.XINFO.NPROCESS_IDENT\n }));\n }\n }, [state.init, executeStored]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n //Очистка селектлиста по идентификатору процесса\n const clearSelectlist = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NIDENT => {\n try {\n await executeStored({\n stored: \"P_SELECTLIST_CLEAR\",\n args: {\n NIDENT: NIDENT\n }\n });\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //Выбор плана\n const selectJob = job => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: job,\n showJobList: false,\n dataLoaded: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Очищаем селектлист\n clearSelectlist(state.processIdent);\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false,\n dataLoaded: 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 variant: \"h6\"\n }, `Сменное задание \"${state.selectedJob.SSUBDIV}\" на ${state.selectedJob.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcjobssp__WEBPACK_IMPORTED_MODULE_4__.CostJobsSpecsDataGrid, {\n task: state.selectedJob.NRN,\n processIdent: state.processIdent,\n clearSelectlist: clearSelectlist\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 */ MechRecCostJobs: () => (/* binding */ MechRecCostJobs)\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 STYLES = {\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 dataLoaded: false\n }));\n };\n\n //Сброс выбора плана\n const unselectJob = () => {\n //Обновляем состояние\n setState(pv => ({\n ...pv,\n selectedJob: {},\n showJobList: false,\n dataLoaded: 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 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 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 })) : !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?"); /***/ }), @@ -4177,6 +4837,39 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/mech_rec_dept_cost_jobs/components/filter.js": +/*!*****************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_jobs/components/filter.js ***! + \*****************************************************************/ +/***/ ((__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 */ FilterComponent: () => (/* binding */ FilterComponent)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __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/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.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/Typography/Typography.js\");\n/* harmony import */ var _ins_department_dg__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ins_department_dg */ \"./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.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 currentDate = new Date();\nconst currentMonth = currentDate.getUTCMonth() + 1;\nconst currentYear = currentDate.getUTCFullYear();\n\n//Стили\nconst STYLES = {\n FILTER_BLOCK: {\n maxWidth: \"200px\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Диалог выбора подразделения\nconst DepartmentsDataGrid = ({\n filter,\n setFilter,\n handleSelectDeparture\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n fullWidth: true,\n open: true,\n onClose: () => setFilter(pv => ({\n ...pv,\n openedDepartment: false\n }))\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(_ins_department_dg__WEBPACK_IMPORTED_MODULE_1__.InsDepartmentDataGrid, {\n fullDate: filter.date.fullDate,\n handleSelectDeparture: handleSelectDeparture\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 onClick: () => setFilter(pv => ({\n ...pv,\n openedDepartment: false\n }))\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")));\n};\n\n//Контроль свойств - Диалог выбора подразделения\nDepartmentsDataGrid.propTypes = {\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object).isRequired,\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired,\n handleSelectDeparture: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Компонент фильтра\nconst FilterComponent = ({\n filter,\n setFilter,\n handleMonthChange,\n handleSelectDeparture\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n display: \"flex\",\n flexDirection: \"row\",\n justifyContent: \"flex-start\",\n alignItems: \"flex-end\",\n pt: 1.5,\n pl: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n sx: STYLES.FILTER_BLOCK,\n readOnly: true,\n fullWidth: true,\n variant: \"outlined\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n required: !filter.department.SCODE,\n htmlFor: \"department-outlined\"\n }, \"\\u0426\\u0435\\u0445\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n disabled: true,\n id: \"department-outlined\",\n value: filter.department.SCODE,\n endAdornment: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n \"aria-label\": \"department select\",\n onClick: () => setFilter(pv => ({\n ...pv,\n openedDepartment: true\n })),\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"list\"))),\n \"aria-describedby\": \"department-outlined-helper-text\",\n label: \"\\u0426\\u0435\\u0445\"\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.FILTER_BLOCK,\n display: \"flex\",\n pb: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => handleMonthChange(-1)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_before\"))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"h5\",\n pt: 0.5\n }, filter.date.fullDate), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n onClick: () => handleMonthChange(1),\n disabled: filter.date.year === currentYear && filter.date.month === currentMonth\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], null, \"navigate_next\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"subtitle2\",\n pl: 2,\n pb: 2\n }, `Рабочих дней: ${filter.workDays}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n variant: \"subtitle2\",\n pl: 3.5,\n pb: 2\n }, `Рабочих часов: ${filter.totalWorkHours}`), filter.openedDepartment ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(DepartmentsDataGrid, {\n filter: filter,\n setFilter: setFilter,\n handleSelectDeparture: handleSelectDeparture\n }) : null);\n};\n\n//Контроль свойств - Компонент фильтра\nFilterComponent.propTypes = {\n filter: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().object).isRequired,\n setFilter: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired,\n handleMonthChange: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired,\n handleSelectDeparture: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/components/filter.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js": +/*!****************************************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js ***! + \****************************************************************************/ +/***/ ((__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 */ InsDepartmentDataGrid: () => (/* binding */ InsDepartmentDataGrid)\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_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../hooks */ \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация ссылок на строках\nconst dataCellRender = ({\n row,\n columnDef,\n handleSelectDeparture\n}) => {\n return {\n cellStyle: {\n cursor: \"pointer\",\n backgroundColor: \"#ADD8E6\"\n },\n cellProps: {\n onClick: () => {\n handleSelectDeparture({\n NRN: row[\"NRN\"],\n SCODE: row[\"SCODE\"].toString(),\n SNAME: row[\"SNAME\"]\n });\n }\n },\n data: row[columnDef.name]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица строк подразделений цехов\nconst InsDepartmentDataGrid = ({\n fullDate,\n handleSelectDeparture\n}) => {\n //Собственное состояние\n let [insDepartments, setInsDepartments] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useInsDepartment)(fullDate);\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setInsDepartments(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\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_4__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041F\\u043E\\u0434\\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0435\\u043D\\u0438\\u044F \\u0446\\u0435\\u0445\\u043E\\u0432\"), insDepartments.dataLoaded ? /*#__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 columnsDef: insDepartments.columnsDef,\n rows: insDepartments.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: insDepartments.morePages,\n reloading: insDepartments.reload,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handleSelectDeparture\n })\n })) : null);\n};\n\n//Контроль свойств - Таблица строк подразделений цехов\nInsDepartmentDataGrid.propTypes = {\n fullDate: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().string).isRequired,\n handleSelectDeparture: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/components/ins_department_dg.js?"); + +/***/ }), + +/***/ "./app/panels/mech_rec_dept_cost_jobs/hooks.js": +/*!*****************************************************!*\ + !*** ./app/panels/mech_rec_dept_cost_jobs/hooks.js ***! + \*****************************************************/ +/***/ ((__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: 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?"); + +/***/ }), + /***/ "./app/panels/mech_rec_dept_cost_jobs/index.js": /*!*****************************************************!*\ !*** ./app/panels/mech_rec_dept_cost_jobs/index.js ***! @@ -4195,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 */ MechRecDeptCostJobs: () => (/* binding */ MechRecDeptCostJobs)\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_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Grid/Grid.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 _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\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Размер страницы данных\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 minWidth: \"95vw\",\n maxWidth: \"95vw\",\n minHeight: \"80vh\",\n maxHeight: \"80vh\"\n },\n DATA_GRID_CELL: (row, columnDef) => ({\n padding: \"8px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n ...(columnDef.name.match(/N.*_VALUE/) && row[columnDef.name] ? {\n backgroundColor: row[`${columnDef.name.substring(0, 12)}_TYPE`] === 0 ? \"lightgrey\" : \"lightgreen\"\n } : {})\n })\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellProps: {\n title: row[columnDef.name]\n },\n cellStyle: STYLES.DATA_GRID_CELL(row, columnDef),\n data: row[columnDef]\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель загрузки цеха\nconst MechRecDeptCostJobs = () => {\n //Собственное состояние - таблица данных\n const [costJobs, setCostJobs] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n subdiv: null,\n dataLoaded: false,\n columnsDef: [],\n filters: [],\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_4__[\"BackEndСtx\"]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costJobs.reload) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCJOBS_DEP_LOAD_DG_GET\",\n args: {\n CFILTERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_1__.object2Base64XML)(costJobs.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)(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,\n NINCLUDE_DEF: costJobs.dataLoaded ? 0 : 1\n },\n respArg: \"COUT\"\n });\n setCostJobs(pv => ({\n ...pv,\n fixedHeader: data.XFCJOBS.XDATA.XDATA_GRID.fixedHeader,\n fixedColumns: data.XFCJOBS.XDATA.XDATA_GRID.fixedColumns,\n subdiv: data.XINFO.SSUBDIV,\n columnsDef: data.XFCJOBS.XDATA.XCOLUMNS_DEF ? [...data.XFCJOBS.XDATA.XCOLUMNS_DEF] : pv.columnsDef,\n rows: pv.pageNumber == 1 ? [...(data.XFCJOBS.XDATA.XROWS || [])] : [...pv.rows, ...(data.XFCJOBS.XDATA.XROWS || [])],\n dataLoaded: true,\n reload: false,\n morePages: (data.XFCJOBS.XDATA.XROWS || []).length >= DATA_GRID_PAGE_SIZE\n }));\n }\n }, [costJobs.reload, costJobs.filters, costJobs.orders, costJobs.dataLoaded, costJobs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При изменении состояния фильтра\n const handleFilterChanged = ({\n filters\n }) => setCostJobs(pv => ({\n ...pv,\n filters: [...filters],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostJobs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostJobs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costJobs.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_5__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, costJobs.dataLoaded ? `Загрузка станков \"${costJobs.subdiv}\"` : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n pt: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, costJobs.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 fixedHeader: costJobs.fixedHeader,\n fixedColumns: costJobs.fixedColumns,\n columnsDef: costJobs.columnsDef,\n rows: costJobs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costJobs.morePages,\n reloading: costJobs.reload,\n onOrderChanged: handleOrderChanged,\n onFilterChanged: handleFilterChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms\n })\n })) : null))));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ MechRecDeptCostJobs: () => (/* binding */ MechRecDeptCostJobs)\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_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_jobs/hooks.js\");\n/* harmony import */ var _components_filter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/filter */ \"./app/panels/mech_rec_dept_cost_jobs/components/filter.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Текущая дата\nconst currentDate = new Date();\nconst currentMonth = currentDate.getUTCMonth() + 1;\nconst currentYear = currentDate.getUTCFullYear();\n\n//Кастомные цвета\nconst colors = {\n lightred: \"#ef8989\",\n lightyellow: \"#f5f5b0\",\n blue: \"#0097ff\"\n};\n\n//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\",\n paddingTop: \"10px\"\n },\n TITLE: {\n paddingBottom: \"15px\"\n },\n DATA_GRID_CONTAINER: {\n minWidth: \"700px\",\n maxWidth: \"100vw\",\n minHeight: \"calc(100vh - 250px)\",\n maxHeight: \"calc(100vh - 250px)\"\n },\n DATA_GRID_CELL: (row, columnDef) => {\n //Определяем тип дня\n let dayType = columnDef.name.match(/N.*_VALUE/) ? row[`${columnDef.name.substring(0, 12)}_TYPE`] : null;\n //Определяем процент загрузки\n let procentLoad = columnDef.name === \"SNAME\" ? row[\"NPROCENT_LOAD\"] : null;\n return {\n padding: \"8px\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"pre\",\n ...(dayType ? {\n backgroundColor: [1, 3].includes(dayType) ? \"lightgrey\" : dayType === 4 ? \"lightgreen\" : null,\n color: [2, 3].includes(dayType) ? colors.blue : null\n } : procentLoad || procentLoad === 0 ? {\n backgroundColor: procentLoad >= 85 ? \"lightgreen\" : procentLoad >= 50 ? colors.lightyellow : procentLoad > 0 ? colors.lightred : \"lightgrey\"\n } : {})\n };\n }\n};\n\n//------------------------------------\n//Вспомогательные функции и компоненты\n//------------------------------------\n\n//Генерация заливки строки исходя от значений\nconst dataCellRender = ({\n row,\n columnDef\n}) => ({\n cellProps: {\n title: row[columnDef.name]\n },\n cellStyle: STYLES.DATA_GRID_CELL(row, columnDef),\n data: row[columnDef]\n});\n\n//-----------\n//Тело модуля\n//-----------\n\n//Корневая панель загрузки цеха\nconst MechRecDeptCostJobs = () => {\n //Собственное состояние - фильтр\n const [filter, setFilter, getWorkDays, getWorkHours] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useFilter)(currentMonth, currentYear);\n\n //Собственное состояние - таблица данных\n const [costJobs, setCostJobs] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useMechRecDeptCostJobs)(filter.department.NRN, filter.date.fullDate, filter.totalWorkHours);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostJobs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostJobs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При изменении месяца\n const handleMonthChange = side => {\n //Исходим от стороны, в которую идем\n let newDate = side === 1 ? filter.date.month === 12 ? {\n month: 1,\n year: filter.date.year + 1\n } : {\n month: filter.date.month + 1,\n year: filter.date.year\n } : filter.date.month === 1 ? {\n month: 12,\n year: filter.date.year - 1\n } : {\n month: filter.date.month - 1,\n year: filter.date.year\n };\n //Формируем полное представление даты\n newDate.fullDate = newDate.month.toString().padStart(2, \"0\") + \".\" + newDate.year;\n //Считываем количество рабочих дней и обновляем состояние\n getWorkDays({\n newDate,\n init: filter.init\n });\n };\n\n //При выборе подразделения\n const handleSelectDeparture = department => {\n //Если подразделение изменилось\n if (department.NRN !== filter.department.NRN) {\n //Получаем количество рабочих часов\n getWorkHours(department);\n //Обновляем таблицу загрузки цеха\n setCostJobs(pv => ({\n ...pv,\n pageNumber: 1,\n reload: true\n }));\n } else {\n setFilter(pv => ({\n ...pv,\n openedDepartment: false\n }));\n }\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_components_filter__WEBPACK_IMPORTED_MODULE_4__.FilterComponent, {\n filter: filter,\n setFilter: setFilter,\n handleMonthChange: handleMonthChange,\n handleSelectDeparture: handleSelectDeparture\n }), /*#__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_6__[\"default\"], {\n sx: STYLES.TITLE,\n variant: \"h6\"\n }, costJobs.dataLoaded ? `Загрузка станков \"${filter.department.SNAME}\"` : null), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n pt: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, costJobs.dataLoaded ? /*#__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: STYLES.DATA_GRID_CONTAINER\n },\n fixedHeader: costJobs.fixedHeader,\n fixedColumns: costJobs.fixedColumns,\n columnsDef: costJobs.columnsDef,\n rows: costJobs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costJobs.morePages,\n reloading: costJobs.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms\n })\n })) : null)));\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js?"); /***/ }), @@ -4206,7 +4899,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 */ CostRouteListsDataGridDialog: () => (/* binding */ CostRouteListsDataGridDialog),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender)\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/Paper/Paper.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/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.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/DialogActions/DialogActions.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 _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\n/* harmony import */ var _fcroutlstsp__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./fcroutlstsp */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n TABLE_SUM: {\n textAlign: \"right\",\n paddingTop: \"5px\",\n paddingRight: \"15px\"\n },\n DIALOG_BUTTONS: {\n marginTop: \"10px\",\n width: \"240px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции форматирования данных\n//---------------------------------------------\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n row\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n elevation: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlstsp__WEBPACK_IMPORTED_MODULE_5__.CostRouteListsSpecsDataGrid, {\n mainRowRN: row.NRN\n }));\n};\n\n//Форматирование значений колонок\nconst dataCellRender = ({\n row,\n columnDef,\n handlePriorEditOpen\n}) => {\n //!!! Пока отключено - не удалять\n switch (columnDef.name) {\n case \"NPRIOR_PARTY\":\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, row[\"NPRIOR_PARTY\"], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n edge: \"end\",\n title: \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\",\n onClick: () => handlePriorEditOpen(row[\"NRN\"], row[\"NPRIOR_PARTY\"])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"edit\")))\n };\n }\n return {\n data: row[columnDef]\n };\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица маршрутных листов\nconst CostRouteListsDataGrid = ({\n task\n}) => {\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 editPriorValue: 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_3__[\"BackEndСtx\"]);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 5;\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_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.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 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 }));\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\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При открытии изменения приоритета партии\n const handlePriorEditOpen = (NRN, nPriorValue) => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: NRN,\n editPriorValue: nPriorValue\n }));\n };\n\n //При закрытии изменения приоритета партии\n const handlePriorEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: null,\n editPriorValue: null\n }));\n };\n\n //При изменении значения приоритета партии\n const handlePriorFormChanged = e => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorValue: e.target.value\n }));\n };\n\n //Изменение приоритета\n const priorChange = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async (NRN, PriorValue, rows) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE\",\n args: {\n NFCROUTLST: NRN,\n SPRIOR_PARTY: PriorValue\n }\n });\n //Изменяем значение приоритета у нужного\n rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue;\n //Актуализируем строки таблицы\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows\n }));\n //Закрываем окно\n handlePriorEditClose();\n } catch (e) {\n throw new Error(e.message);\n }\n }, [executeStored]);\n\n //При нажатии на изменение приоритета партии\n const handlePriorChange = () => {\n //Изменяем значение\n priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);\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_9__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0412 \\u043F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\"), costRouteLists.dataLoaded ? /*#__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_10__[\"default\"], {\n sx: STYLES.TABLE\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 columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n expandable: true,\n rowExpandRender: rowExpandRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handlePriorEditOpen\n })\n })))) : null, costRouteLists.editPriorNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n open: true,\n onClose: () => handlePriorEditClose(null)\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_10__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n name: \"editPriorValue\",\n label: \"\\u041D\\u043E\\u0432\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\\u0430\",\n variant: \"standard\",\n fullWidth: true,\n type: \"number\",\n value: costRouteLists.editPriorValue,\n onChange: handlePriorFormChanged\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_14__[\"default\"], {\n onClick: handlePriorChange,\n variant: \"contained\",\n sx: STYLES.DIALOG_BUTTONS\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\")))), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: () => handlePriorEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\"))) : null);\n};\n\n//Контроль свойств - Таблица маршрутных листов\nCostRouteListsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst CostRouteListsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\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(CostRouteListsDataGrid, {\n task: task\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей маршрутных листов\nCostRouteListsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_16___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostRouteListsDataGridDialog: () => (/* binding */ CostRouteListsDataGridDialog),\n/* harmony export */ rowExpandRender: () => (/* binding */ rowExpandRender)\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_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Paper/Paper.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/Dialog/Dialog.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/Box/Box.js\");\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/Button/Button.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_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 _fcroutlstsp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./fcroutlstsp */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\");\n/* harmony import */ var _hooks_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./hooks.js */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n },\n DIALOG_BUTTONS: {\n marginTop: \"10px\",\n width: \"240px\"\n }\n};\n\n//---------------------------------------------\n//Вспомогательные функции и компоненты\n//---------------------------------------------\n\n//Генерация представления расширения строки\nconst rowExpandRender = ({\n row\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n elevation: 4\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_fcroutlstsp__WEBPACK_IMPORTED_MODULE_4__.CostRouteListsSpecsDataGrid, {\n mainRowRN: row.NRN\n }));\n};\n\n//Форматирование значений колонок\nconst dataCellRender = ({\n row,\n columnDef,\n handlePriorEditOpen\n}) => {\n //Если колонка \"Приоритет партии\"\n if (columnDef.name === \"NPRIOR_PARTY\") {\n return {\n data: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, row[\"NPRIOR_PARTY\"], /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n edge: \"end\",\n title: \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\",\n onClick: () => handlePriorEditOpen(row[\"NRN\"])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"edit\")))\n };\n }\n return {\n data: row[columnDef]\n };\n};\n\n//Диалог с изменением приоритета маршрутного листа\nconst CostRouteListPriorChange = ({\n costRouteLists,\n setCostRouteLists,\n executeStored\n}) => {\n //Считывание изначального значения приоритета МЛ\n const initPrior = costRouteLists.rows[costRouteLists.rows.findIndex(obj => obj.NRN == costRouteLists.editPriorNRN)].NPRIOR_PARTY;\n\n //Собственное состояние - Значение приоритета\n const [state, setState] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(initPrior);\n\n //При закрытии изменения приоритета партии\n const handlePriorEditClose = () => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: null\n }));\n };\n\n //При нажатии на изменение приоритета партии\n const handlePriorChange = () => {\n //Асинхронное изменение\n const asyncChange = async (NRN, PriorValue, rows) => {\n try {\n await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE\",\n args: {\n NFCROUTLST: NRN,\n SPRIOR_PARTY: PriorValue\n }\n });\n //Изменяем значение приоритета у нужного\n rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue;\n //Актуализируем строки таблицы\n setCostRouteLists(pv => ({\n ...pv,\n rows: rows\n }));\n //Закрываем окно\n handlePriorEditClose();\n } catch (e) {\n throw new Error(e.message);\n }\n };\n //Изменяем значение\n asyncChange(costRouteLists.editPriorNRN, state, costRouteLists.rows);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n onClose: () => handlePriorEditClose()\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\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n name: \"editPriorValue\",\n label: \"\\u041D\\u043E\\u0432\\u043E\\u0435 \\u0437\\u043D\\u0430\\u0447\\u0435\\u043D\\u0438\\u0435 \\u043F\\u0440\\u0438\\u043E\\u0440\\u0438\\u0442\\u0435\\u0442\\u0430\",\n variant: \"standard\",\n fullWidth: true,\n type: \"number\",\n value: state,\n onChange: event => {\n setState(event.target.value);\n }\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_13__[\"default\"], {\n onClick: handlePriorChange,\n variant: \"contained\",\n sx: STYLES.DIALOG_BUTTONS\n }, \"\\u0418\\u0437\\u043C\\u0435\\u043D\\u0438\\u0442\\u044C\")))), /*#__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_13__[\"default\"], {\n onClick: () => handlePriorEditClose(null)\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")));\n};\n\n//Контроль свойств - Диалог с изменением приоритета маршрутного листа\nCostRouteListPriorChange.propTypes = {\n costRouteLists: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().object).isRequired,\n setCostRouteLists: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func).isRequired,\n executeStored: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func).isRequired\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица маршрутных листов\nconst CostRouteListsDataGrid = ({\n task\n}) => {\n //Собственное состояние - таблица данных\n const [costRouteLists, setCostRouteLists] = (0,_hooks_js__WEBPACK_IMPORTED_MODULE_5__.useCostRouteLists)(task);\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 handleOrderChanged = ({\n orders\n }) => setCostRouteLists(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteLists(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\n }));\n\n //При открытии изменения приоритета партии\n const handlePriorEditOpen = NRN => {\n setCostRouteLists(pv => ({\n ...pv,\n editPriorNRN: NRN\n }));\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_16__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0412 \\u043F\\u0440\\u043E\\u0438\\u0437\\u0432\\u043E\\u0434\\u0441\\u0442\\u0432\\u0435\"), costRouteLists.dataLoaded ? /*#__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_11__[\"default\"], {\n sx: STYLES.TABLE\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 columnsDef: costRouteLists.columnsDef,\n rows: costRouteLists.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: costRouteLists.morePages,\n reloading: costRouteLists.reload,\n expandable: true,\n rowExpandRender: rowExpandRender,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged,\n dataCellRender: prms => dataCellRender({\n ...prms,\n handlePriorEditOpen\n })\n })))) : null, costRouteLists.editPriorNRN ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(CostRouteListPriorChange, {\n costRouteLists: costRouteLists,\n setCostRouteLists: setCostRouteLists,\n executeStored: executeStored\n }) : null);\n};\n\n//Контроль свойств - Таблица маршрутных листов\nCostRouteListsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst CostRouteListsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\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(CostRouteListsDataGrid, {\n task: task\n })), onClose ? /*#__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_13__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей маршрутных листов\nCostRouteListsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_15___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js?"); /***/ }), @@ -4217,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 */ CostRouteListsSpecsDataGrid: () => (/* binding */ CostRouteListsSpecsDataGrid)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица строк маршрутного листа\nconst CostRouteListsSpecsDataGrid = ({\n mainRowRN\n}) => {\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_3__[\"BackEndСtx\"]);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 10;\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (costRouteListsSpecs.reload) {\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_4__.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,\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\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [costRouteListsSpecs.reload, costRouteListsSpecs.filters, costRouteListsSpecs.orders, costRouteListsSpecs.dataLoaded, costRouteListsSpecs.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [costRouteListsSpecs.reload, loadData]);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteListsSpecs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteListsSpecs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\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_5__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041E\\u043F\\u0435\\u0440\\u0430\\u0446\\u0438\\u0438\"), costRouteListsSpecs.dataLoaded ? /*#__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 columnsDef: costRouteListsSpecs.columnsDef,\n rows: costRouteListsSpecs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteListsSpecs.morePages,\n reloading: costRouteListsSpecs.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Таблица строк маршрутного листа\nCostRouteListsSpecsDataGrid.propTypes = {\n mainRowRN: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ CostRouteListsSpecsDataGrid: () => (/* binding */ CostRouteListsSpecsDataGrid)\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_5__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.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 _hooks_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks.js */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n margin: \"5px 0px\",\n textAlign: \"center\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица строк маршрутного листа\nconst CostRouteListsSpecsDataGrid = ({\n mainRowRN\n}) => {\n //Собственное состояние - таблица данных\n const [costRouteListsSpecs, setCostRouteListsSpecs] = (0,_hooks_js__WEBPACK_IMPORTED_MODULE_3__.useCostRouteListsSpecs)(mainRowRN);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setCostRouteListsSpecs(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setCostRouteListsSpecs(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\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_4__[\"default\"], {\n variant: \"subtitle2\"\n }, \"\\u041E\\u043F\\u0435\\u0440\\u0430\\u0446\\u0438\\u0438\"), costRouteListsSpecs.dataLoaded ? /*#__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 columnsDef: costRouteListsSpecs.columnsDef,\n rows: costRouteListsSpecs.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.SMALL,\n morePages: costRouteListsSpecs.morePages,\n reloading: costRouteListsSpecs.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null);\n};\n\n//Контроль свойств - Таблица строк маршрутного листа\nCostRouteListsSpecsDataGrid.propTypes = {\n mainRowRN: (prop_types__WEBPACK_IMPORTED_MODULE_5___default().number).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js?"); /***/ }), @@ -4228,7 +4921,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 */ useFilteredPlans: () => (/* binding */ useFilteredPlans)\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/*\r\n Парус 8 - Панели мониторинга - ПУП - Производственный план цеха\r\n Кастомные хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\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//# 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 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?"); /***/ }), @@ -4239,7 +4932,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 */ IncomFromDepsDataGridDialog: () => (/* binding */ IncomFromDepsDataGridDialog)\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_7__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_7__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __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/Dialog/Dialog.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 _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 _core_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица сдачи продукции\nconst IncomFromDepsDataGrid = ({\n task\n}) => {\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 DATA_GRID_PAGE_SIZE = 10;\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored,\n SERV_DATA_TYPE_CLOB\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_3__[\"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_DEPT_DG_GET\",\n args: {\n NFCPRODPLANSP: task,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.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) => [\"DDUE_DATE\"].includes(name) ? (0,_core_utils__WEBPACK_IMPORTED_MODULE_4__.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\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setIncomFromDeps(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setIncomFromDeps(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\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_5__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0421\\u0434\\u0430\\u0447\\u0430 \\u043F\\u0440\\u043E\\u0434\\u0443\\u043A\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n sx: STYLES.TABLE\n }, incomFromDeps.dataLoaded ? /*#__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 columnsDef: incomFromDeps.columnsDef,\n rows: incomFromDeps.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: incomFromDeps.morePages,\n reloading: incomFromDeps.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null));\n};\n\n//Контроль свойств - Таблица сдачи продукции\nIncomFromDepsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst IncomFromDepsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(IncomFromDepsDataGrid, {\n task: task\n })), onClose ? /*#__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: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей сдачи продукции\nIncomFromDepsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_7___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ IncomFromDepsDataGridDialog: () => (/* binding */ IncomFromDepsDataGridDialog)\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_6__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_6__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\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/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.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 _hooks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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//Стили\nconst STYLES = {\n CONTAINER: {\n textAlign: \"center\"\n },\n TABLE: {\n paddingTop: \"15px\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Таблица сдачи продукции\nconst IncomFromDepsDataGrid = ({\n task\n}) => {\n //Собственное состояние - таблица данных\n const [incomFromDeps, setIncomFromDeps] = (0,_hooks__WEBPACK_IMPORTED_MODULE_3__.useIncomFromDeps)(task);\n\n //При изменении состояния сортировки\n const handleOrderChanged = ({\n orders\n }) => setIncomFromDeps(pv => ({\n ...pv,\n orders: [...orders],\n pageNumber: 1,\n reload: true\n }));\n\n //При изменении количества отображаемых страниц\n const handlePagesCountChanged = () => setIncomFromDeps(pv => ({\n ...pv,\n pageNumber: pv.pageNumber + 1,\n reload: true\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_4__[\"default\"], {\n variant: \"h6\"\n }, \"\\u0421\\u0434\\u0430\\u0447\\u0430 \\u043F\\u0440\\u043E\\u0434\\u0443\\u043A\\u0446\\u0438\\u0438\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n sx: STYLES.TABLE\n }, incomFromDeps.dataLoaded ? /*#__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 columnsDef: incomFromDeps.columnsDef,\n rows: incomFromDeps.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n morePages: incomFromDeps.morePages,\n reloading: incomFromDeps.reload,\n onOrderChanged: handleOrderChanged,\n onPagesCountChanged: handlePagesCountChanged\n })) : null));\n};\n\n//Контроль свойств - Таблица сдачи продукции\nIncomFromDepsDataGrid.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number).isRequired\n};\n\n//Диалог с таблицей сдачи продукции\nconst IncomFromDepsDataGridDialog = ({\n task,\n onClose\n}) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n open: true,\n onClose: onClose ? onClose : null,\n fullWidth: true,\n maxWidth: \"xl\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(IncomFromDepsDataGrid, {\n task: task\n })), onClose ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n onClick: onClose\n }, \"\\u0417\\u0430\\u043A\\u0440\\u044B\\u0442\\u044C\")) : null);\n};\n\n//Контроль свойств - Диалог с таблицей сдачи продукции\nIncomFromDepsDataGridDialog.propTypes = {\n task: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().number).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_6___default().func)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js?"); /***/ }), @@ -4261,7 +4954,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 _context_backend__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\");\n/* harmony import */ var _core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../core/utils */ \"./app/core/utils.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() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 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 marginTop: \"10px\",\n marginLeft: \"10px\"\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 paddingTop: \"40px\",\n margin: \"5px 0px\",\n textAlign: \"center\"\n },\n DATA_GRID_CONTAINER: {\n minWidth: \"95vw\",\n maxWidth: \"95vw\",\n minHeight: \"80vh\",\n maxHeight: \"80vh\"\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,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 [filter, setFilter] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n planName: \"\"\n });\n\n //Массив отфильтрованных каталогов\n const filteredPlanCtgls = (0,_hooks__WEBPACK_IMPORTED_MODULE_2__.useFilteredPlans)(state.planList, filter);\n\n //Размер страницы данных\n const DATA_GRID_PAGE_SIZE = 10;\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 {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_6__[\"MessagingСtx\"]);\n\n // Инициализация каталогов планов\n const initPlans = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (!state.init) {\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 // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [state.init, executeStored]);\n\n //Загрузка данных таблицы с сервера\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async NRN => {\n if (state.reload && NRN) {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_MECHREC.FCPRODPLANSP_DEPT_DG_GET\",\n args: {\n NFCPRODPLAN: NRN,\n CORDERS: {\n VALUE: (0,_core_utils__WEBPACK_IMPORTED_MODULE_3__.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,\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\n }));\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [state.reload, state.orders, state.dataLoaded, state.pageNumber, executeStored, SERV_DATA_TYPE_CLOB]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n if (state.selectedPlan.NRN) {\n loadData(state.selectedPlan.NRN);\n } else {\n setState(pv => ({\n ...pv,\n dataLoaded: false,\n columnsDef: [],\n orders: null,\n rows: [],\n reload: true,\n pageNumber: 1,\n morePages: true\n }));\n }\n }, [state.selectedPlan, state.reload, loadData]);\n\n //При подключении компонента к странице\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n initPlans();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\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((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__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(\"div\", {\n style: STYLES.CONTAINER\n }, state.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n variant: \"h6\"\n }, `Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n container: true,\n spacing: 1\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 pt: 1,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, state.dataLoaded ? /*#__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 style: 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_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_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/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/TextField/TextField.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_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/Drawer/Drawer.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 _hooks__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hooks */ \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.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_messaging__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _incomefromdeps__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./incomefromdeps */ \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\");\n/* harmony import */ var _fcroutlst__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./fcroutlst */ \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 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 DATA_GRID_CONTAINER: {\n minWidth: \"95vw\",\n maxWidth: \"95vw\",\n minHeight: \"80vh\",\n maxHeight: \"80vh\"\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_7__[\"default\"], {\n sx: STYLES.PLAN_FACT_VALUE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, values[0]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n sx: STYLES.PLAN_FACT_DELIMITER\n }, \"/\"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"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_8__[\"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_8__[\"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_9__[\"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_10__[\"default\"], null, plans.map(p => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"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_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.SDOC_INFO)\n })))));\n};\n\n//Контроль свойств - Список каталогов планов\nPlanList.propTypes = {\n plans: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().array),\n selectedPlan: (prop_types__WEBPACK_IMPORTED_MODULE_14___default().object),\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 MechRecDeptCostProdPlans = () => {\n //Собственное состояние - таблица данных\n const [state, setState] = (0,_hooks__WEBPACK_IMPORTED_MODULE_1__.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_1__.useFilteredPlans)(state.planList, filter);\n\n //Подключение к контексту сообщений\n const {\n InlineMsgInfo\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_messaging__WEBPACK_IMPORTED_MODULE_4__[\"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_7__[\"default\"], {\n p: 2\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"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_16__[\"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_17__[\"default\"], {\n container: true,\n spacing: 1\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n item: true,\n xs: 12\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"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_7__[\"default\"], {\n sx: STYLES.CONTAINER\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n pt: 1,\n variant: \"h6\"\n }, `Производственный план цеха №${state.selectedPlan.SSUBDIV} на ${state.selectedPlan.SPERIOD}`), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n pt: 2.5\n }, /*#__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 fixedHeader: state.fixedHeader,\n fixedColumns: state.fixedColumns,\n columnsDef: state.columnsDef,\n rows: state.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_2__.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_5__.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_6__.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?"); /***/ }), @@ -4474,39 +5167,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/rrp_conf_editor/custom_dialog.js": -/*!*****************************************************!*\ - !*** ./app/panels/rrp_conf_editor/custom_dialog.js ***! - \*****************************************************/ -/***/ ((__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 */ CustomDialog: () => (/* binding */ CustomDialog)\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 _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.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/DialogContent/DialogContent.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/DialogActions/DialogActions.js\");\n/* harmony import */ var _custom_form_control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_form_control */ \"./app/panels/rrp_conf_editor/custom_form_control.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/*\r\n Кастомный Dialog\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Кастомные строки ввода\n //Статусы и стили диалогового окна\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomDialog = props => {\n const {\n formOpen,\n closeForm,\n curStatus,\n curCode,\n curName,\n curColCode,\n curRowCode,\n btnOkClick,\n codeOnChange,\n nameOnChange,\n dictColumnClick,\n dictRowClick\n } = props;\n\n //Формирование заголовка диалогового окна\n const formTitle = () => {\n switch (curStatus) {\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.CREATE:\n return \"Добавление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.EDIT:\n return \"Исправление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE:\n return \"Удаление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE:\n return \"Добавление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT:\n return \"Исправление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE:\n return \"Удаление показателя раздела\";\n }\n };\n\n //Отрисовка диалогового окна\n const renderSwitch = () => {\n var btnText = \"\";\n switch (curStatus) {\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.CREATE:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE:\n btnText = \"Добавить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.EDIT:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT:\n btnText = \"Исправить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE:\n btnText = \"Удалить\";\n break;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"contained\",\n onClick: btnOkClick\n }, btnText);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: formOpen,\n onClose: closeForm\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, formTitle()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeForm,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__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_8__[\"default\"], null, curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE || curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE ? curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B \", curName, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \", curName, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, curStatus != _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"code\",\n elementValue: curCode,\n labelText: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n changeFunc: codeOnChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"name\",\n elementValue: curName,\n labelText: \"\\u041D\\u0430\\u0438\\u043C\\u0435\\u043D\\u043E\\u0432\\u0430\\u043D\\u0438\\u0435\",\n changeFunc: nameOnChange\n }), curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"column\",\n elementValue: curColCode,\n labelText: \"\\u0413\\u0440\\u0430\\u0444\\u0430\",\n changeFunc: dictColumnClick,\n withDictionary: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"row\",\n elementValue: curRowCode,\n labelText: \"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\",\n changeFunc: dictRowClick,\n withDictionary: true\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_2__.STYLES.PADDING_DIALOG_BUTTONS_RIGHT\n }, renderSwitch(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"contained\",\n onClick: closeForm\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\nCustomDialog.propTypes = {\n formOpen: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().bool).isRequired,\n closeForm: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n curStatus: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOf(Object.values(_layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses).filter(x => typeof x === \"number\")),\n curCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curName: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curColCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curRowCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n btnOkClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n codeOnChange: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n nameOnChange: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n dictColumnClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n dictRowClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_dialog.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/custom_form_control.js": -/*!***********************************************************!*\ - !*** ./app/panels/rrp_conf_editor/custom_form_control.js ***! - \***********************************************************/ -/***/ ((__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 */ CustomFormControl: () => (/* binding */ CustomFormControl)\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_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/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.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 _layouts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Кастомный FormControl\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Стили диалогового окна\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomFormControl = props => {\n const {\n elementCode,\n elementValue,\n labelText,\n changeFunc,\n withDictionary,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _extends({\n sx: _layouts__WEBPACK_IMPORTED_MODULE_1__.STYLES.DIALOG_WINDOW_WIDTH\n }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n htmlFor: `${elementCode}-outlined`\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n id: `${elementCode}-outlined`,\n value: elementValue ? elementValue : \"\",\n onChange: !withDictionary ? e => changeFunc(e.target.value) : null,\n \"aria-describedby\": `${elementCode}-outlined-helper-text`,\n label: labelText,\n endAdornment: withDictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: changeFunc,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"list\"))) : null\n })));\n};\nCustomFormControl.propTypes = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n elementValue: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n changeFunc: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func).isRequired,\n withDictionary: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_form_control.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/custom_tab_panel.js": -/*!********************************************************!*\ - !*** ./app/panels/rrp_conf_editor/custom_tab_panel.js ***! - \********************************************************/ -/***/ ((__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 */ CustomTabPanel: () => (/* binding */ CustomTabPanel)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Кастомный Tab\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomTabPanel = props => {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `simple-tabpanel-${index}`,\n \"aria-labelledby\": `simple-tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, children)));\n};\nCustomTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_tab_panel.js?"); - -/***/ }), - /***/ "./app/panels/rrp_conf_editor/index.js": /*!*********************************************!*\ !*** ./app/panels/rrp_conf_editor/index.js ***! @@ -4518,6 +5178,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/rrp_conf_editor/iud_form_dialog.js": +/*!*******************************************************!*\ + !*** ./app/panels/rrp_conf_editor/iud_form_dialog.js ***! + \*******************************************************/ +/***/ ((__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 */ IUDFormDialog: () => (/* binding */ IUDFormDialog)\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/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogActions/DialogActions.js\");\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 _iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./iud_form_text_field */ \"./app/panels/rrp_conf_editor/iud_form_text_field.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.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 STYLES = {\n CLOSE_BUTTON: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n },\n PADDING_DIALOG_BUTTONS_RIGHT: {\n paddingRight: \"32px\"\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\nconst IUDFormDialog = ({\n initial,\n onClose,\n onReload\n}) => {\n //Собственное состояние\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...initial\n });\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 executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //При закрытии диалога без изменений\n const handleCancel = () => onClose ? onClose() : null;\n\n //При закрытии диалога с изменениями\n const handleOK = () => {\n if (onClose) {\n changeSections();\n onClose();\n } else null;\n };\n\n //Отработка добавления/изсправления/удаления элемента\n const handleReload = () => {\n if (onReload) {\n onReload();\n } else null;\n };\n\n //При изменении значения элемента\n const handleDialogItemChange = (item, value) => setFormData(pv => ({\n ...pv,\n [item]: value\n }));\n\n //Отработка изменений в разделе или показателе раздела\n const changeSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n switch (formData.status) {\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.CREATE:\n await insertSections();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.EDIT:\n await updateSections();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.DELETE:\n await deleteSections();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_CREATE:\n await addRRPCONFSCTNMRK();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_EDIT:\n await editRRPCONFSCTNMRK();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_DELETE:\n await deleteRRPCONFSCTNMRK();\n break;\n }\n handleReload();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n //Добавление раздела\n const insertSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n setFormData(pv => ({\n ...pv,\n rn: Number(data.NRN)\n }));\n }, [formData.prn, formData.code, formData.name, executeStored]);\n\n //Исправление раздела\n const updateSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE\",\n args: {\n NRN: formData.rn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n }, [formData.name, formData.code, formData.rn, executeStored]);\n\n //Удаление раздела\n const deleteSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE\",\n args: {\n NRN: formData.rn\n }\n });\n }, [formData.rn, executeStored]);\n\n //Добавление показателя раздела\n const addRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name,\n SCOLCODE: formData.colCode,\n SCOLVER: formData.colVCode,\n SROWCODE: formData.rowCode,\n SROWVER: formData.rowVCode\n }\n });\n }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);\n\n //Исправление показателя раздела\n const editRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE\",\n args: {\n NRN: formData.rn,\n SNAME: formData.name\n }\n });\n }, [executeStored, formData.name, formData.rn]);\n\n //Удаление показателя раздела\n const deleteRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE\",\n args: {\n NRN: formData.rn\n }\n });\n }, [executeStored, formData.rn]);\n\n //Формирование заголовка диалогового окна\n const formTitle = () => {\n switch (formData.status) {\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.CREATE:\n return \"Добавление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.EDIT:\n return \"Исправление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.DELETE:\n return \"Удаление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_CREATE:\n return \"Добавление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_EDIT:\n return \"Исправление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_DELETE:\n return \"Удаление показателя раздела\";\n }\n };\n\n //Отрисовка диалогового окна\n const renderSwitch = () => {\n var btnText = \"\";\n switch (formData.status) {\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.CREATE:\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_CREATE:\n btnText = \"Добавить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.EDIT:\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_EDIT:\n btnText = \"Исправить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.DELETE:\n case _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_DELETE:\n btnText = \"Удалить\";\n break;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: () => {\n handleOK({\n formData\n });\n }\n }, btnText);\n };\n\n //Выбор строки\n const selectRow = (showDictionary, callBack) => {\n showDictionary({\n unitCode: \"RRPRow\",\n callBack: res => {\n if (res.success === true) {\n callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);\n setFormData(pv => ({\n ...pv,\n rowCode: res.outParameters.out_CODE,\n rowVCode: res.outParameters.out_RRPVERSION_CODE,\n rowVRn: res.outParameters.out_RRPVERSION\n }));\n } else callBack(null);\n }\n });\n };\n\n //Выбор графы\n const selectColumn = (showDictionary, callBack) => {\n showDictionary({\n unitCode: \"RRPColumn\",\n callBack: res => {\n if (res.success === true) {\n callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);\n setFormData(pv => ({\n ...pv,\n colCode: res.outParameters.out_CODE,\n colVCode: res.outParameters.out_RRPVERSION_CODE,\n colVRn: res.outParameters.out_RRPVERSION\n }));\n } else callBack(null);\n }\n });\n };\n\n //Получение мнемокода и наименования показателя раздела\n const getSctnMrkCodeName = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME\",\n args: {\n SSCTNCODE: formData.sctnCode,\n SROWCODE: formData.rowCode,\n SCOLUMNCODE: formData.colCode\n }\n });\n setFormData(pv => ({\n ...pv,\n code: data.SCODE,\n name: data.SNAME\n }));\n }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]);\n\n //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n formData.status == _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode ? getSctnMrkCodeName() : null;\n }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, formTitle()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: handleCancel,\n sx: STYLES.CLOSE_BUTTON\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"close\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, formData.status == _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.DELETE || formData.status == _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_DELETE ? formData.status == _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.DELETE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B \", formData.name, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \", formData.name, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, formData.status != _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_EDIT ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"code\",\n elementValue: formData.code,\n labelText: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n onChange: handleDialogItemChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"name\",\n elementValue: formData.name,\n labelText: \"\\u041D\\u0430\\u0438\\u043C\\u0435\\u043D\\u043E\\u0432\\u0430\\u043D\\u0438\\u0435\",\n onChange: handleDialogItemChange\n }), formData.status == _layouts__WEBPACK_IMPORTED_MODULE_4__.STATUSES.RRPCONFSCTNMRK_CREATE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"row\",\n elementValue: formData.rowCode,\n labelText: \"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\",\n onChange: handleDialogItemChange,\n dictionary: callBack => selectRow(pOnlineShowDictionary, callBack)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"column\",\n elementValue: formData.colCode,\n labelText: \"\\u0413\\u0440\\u0430\\u0444\\u0430\",\n onChange: handleDialogItemChange,\n dictionary: callBack => selectColumn(pOnlineShowDictionary, callBack)\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: STYLES.PADDING_DIALOG_BUTTONS_RIGHT\n }, renderSwitch(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n onClick: handleCancel\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Диалог\nIUDFormDialog.propTypes = {\n initial: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().object).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_13___default().func),\n onReload: (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/rrp_conf_editor/iud_form_dialog.js?"); + +/***/ }), + +/***/ "./app/panels/rrp_conf_editor/iud_form_text_field.js": +/*!***********************************************************!*\ + !*** ./app/panels/rrp_conf_editor/iud_form_text_field.js ***! + \***********************************************************/ +/***/ ((__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 */ IUDFormTextField: () => (/* binding */ IUDFormTextField),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\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_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Input/Input.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.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\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\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_WINDOW_WIDTH: {\n width: 400\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\nconst IUDFormTextField = ({\n elementCode,\n elementValue,\n labelText,\n onChange,\n dictionary,\n ...other\n}) => {\n //Значение элемента\n const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(elementValue);\n\n //При получении нового значения из вне\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setValue(elementValue);\n }, [elementValue]);\n\n //Выбор значения из словаря\n const handleDictionaryClick = () => dictionary ? dictionary(res => res ? handleChange({\n target: {\n name: elementCode,\n value: res\n }\n }) : null) : null;\n\n //Изменение значения элемента\n const handleChange = e => {\n setValue(e.target.value);\n if (onChange) onChange(e.target.name, e.target.value);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({\n variant: \"standard\",\n sx: STYLES.DIALOG_WINDOW_WIDTH\n }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n htmlFor: elementCode\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: elementCode,\n name: elementCode,\n value: value ? value : \"\",\n endAdornment: dictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: handleDictionaryClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"list\"))) : null,\n onChange: handleChange,\n multiline: true,\n maxRows: 4\n })));\n};\n\n//Контроль свойств - Поле ввода\nIUDFormTextField.propTypes = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n elementValue: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n dictionary: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/iud_form_text_field.js?"); + +/***/ }), + /***/ "./app/panels/rrp_conf_editor/layouts.js": /*!***********************************************!*\ !*** ./app/panels/rrp_conf_editor/layouts.js ***! @@ -4525,7 +5207,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 */ STYLES: () => (/* binding */ STYLES),\n/* harmony export */ Statuses: () => (/* binding */ Statuses),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\nconst STYLES = {\n DIALOG_WINDOW_WIDTH: {\n width: 400\n },\n PADDING_DIALOG_BUTTONS_RIGHT: {\n paddingRight: \"32px\"\n }\n};\n\n//Статусы диалогового окна\nconst Statuses = {\n CREATE: 0,\n EDIT: 1,\n DELETE: 2,\n COLUMNROW_CREATE: 3,\n COLUMNROW_EDIT: 4,\n COLUMNROW_DELETE: 5\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}, editCR, deleteCR) => {\n let data = row[columnDef.name];\n columnDef.name != \"SROW_NAME\" && data != undefined && columnDef.visible == true ? data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n width: \"-webkit-fill-available\"\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n justifyContent: \"flex-end\",\n onClick: () => editCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n justifyContent: \"flex-end\",\n onClick: () => deleteCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))) : null;\n return {\n data\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STATUSES: () => (/* binding */ STATUSES),\n/* harmony export */ STYLES: () => (/* binding */ STYLES),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_ROW: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n LINK_STYLE: {\n component: \"button\",\n width: \"-webkit-fill-available\"\n }\n};\n\n//Статусы диалогового окна\nconst STATUSES = {\n CREATE: 0,\n EDIT: 1,\n DELETE: 2,\n RRPCONFSCTNMRK_CREATE: 3,\n RRPCONFSCTNMRK_EDIT: 4,\n RRPCONFSCTNMRK_DELETE: 5\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}, showRrpConfSctnMrk, editCR, deleteCR) => {\n let data = row[columnDef.name];\n columnDef.name != \"SROW_NAME\" && data != undefined && columnDef.visible == true ? data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.BOX_ROW\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.LINK_STYLE,\n onClick: () => {\n showRrpConfSctnMrk(row[\"NRN_\" + columnDef.name.substring(5)]);\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => editCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => deleteCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))) : null;\n return {\n data\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/layouts.js?"); /***/ }), @@ -4536,7 +5218,18 @@ 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 */ RrpConfEditor: () => (/* binding */ RrpConfEditor)\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_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/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _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_navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _custom_tab_panel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./custom_tab_panel */ \"./app/panels/rrp_conf_editor/custom_tab_panel.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _custom_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./custom_dialog */ \"./app/panels/rrp_conf_editor/custom_dialog.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Редактор настройки регламентированного отчёта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Кастомный Tab\n //Контекст приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Кастомное диалоговое окно\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор настройки регламентированного отчёта\nconst RrpConfEditor = () => {\n const dataGrid = {\n rn: 0,\n code: \"\",\n name: \"\",\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n };\n\n //Собственное состояние\n const [rrpDoc, setRrpDoc] = (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 [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\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 filled: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Закрытие диалогового окна\n const closeForm = () => {\n setForm(false);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n rn: \"\",\n code: \"\",\n name: \"\"\n });\n };\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 pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_6__[\"ApplicationСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_4__.NavigationCtx);\n\n //Переключение раздела\n const handleChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n //Отработка нажатия на кнопку добавления секции\n const addSectionClick = () => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const editSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const deleteSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const addColumnRowClick = (prn, sctnCode, sctnName) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE,\n prn: prn,\n sctnCode: sctnCode,\n sctnName: sctnName\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const editColumnRowClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const deleteColumnRowClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_DELETE,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на словарь граф\n const dictColumnClick = () => {\n pOnlineShowDictionary({\n unitCode: \"RRPColumn\",\n callBack: res => res.success === true ? setFormData(pv => ({\n ...pv,\n colCode: res.outParameters.out_CODE,\n colVCode: res.outParameters.out_RRPVERSION_CODE,\n colVRn: res.outParameters.out_RRPVERSION\n })) : null\n });\n };\n\n //Отработка нажатия на словарь строк\n const dictRowClick = () => {\n pOnlineShowDictionary({\n unitCode: \"RRPRow\",\n callBack: res => res.success === true ? setFormData(pv => ({\n ...pv,\n rowCode: res.outParameters.out_CODE,\n rowVCode: res.outParameters.out_RRPVERSION_CODE,\n rowVRn: res.outParameters.out_RRPVERSION\n })) : null\n });\n };\n\n //Нажатие на кнопку подтверждения создания/исправления/удаления на форме\n const formBtnOkClick = () => {\n let formStateProps = {};\n if (formData.status === (_layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE)) formStateProps = {\n ...formStateProps,\n code: document.querySelector(\"#code-outlined\").value\n };\n if (formData.status === (_layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT)) formStateProps = {\n ...formStateProps,\n name: document.querySelector(\"#name-outlined\").value\n };\n setFormData(pv => ({\n ...pv,\n ...formStateProps,\n filled: true\n }));\n closeForm();\n };\n\n //Формирование разделов\n const a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n };\n\n //Отработка изменений в разделе или показателе раздела\n const changeSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (formData.filled) {\n switch (formData.status) {\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE:\n insertSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT:\n updateSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.DELETE:\n deleteSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE:\n addColumnRow();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT:\n editColumnRow();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_DELETE:\n deleteColumnRow();\n clearFormData();\n break;\n }\n setRrpDoc(pv => ({\n ...pv,\n reload: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n //Добавление раздела\n const insertSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_SECTIONS\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n setFormData(pv => ({\n ...pv,\n rn: Number(data.NRN)\n }));\n }, [formData.prn, formData.code, formData.name, executeStored]);\n\n //Исправление раздела\n const updateSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_SECTIONS\",\n args: {\n NRN: formData.rn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n }, [formData.name, formData.code, formData.rn, executeStored]);\n\n //Удаление раздела\n const deleteSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_SECTIONS\",\n args: {\n NRN: formData.rn\n }\n });\n }, [formData.rn, executeStored]);\n\n //Добавление показателя раздела\n const addColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_COLUMNROW\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name,\n SCOLCODE: formData.colCode,\n SCOLVER: formData.colVCode,\n SROWCODE: formData.rowCode,\n SROWVER: formData.rowVCode\n }\n });\n }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);\n\n //Исправление показателя раздела\n const editColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_COLUMNROW\",\n args: {\n NRN: formData.rn,\n SNAME: formData.name\n }\n });\n }, [executeStored, formData.name, formData.rn]);\n\n //Удаление показателя раздела\n const deleteColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_COLUMNROW\",\n args: {\n NRN: formData.rn\n }\n });\n }, [executeStored, formData.rn]);\n\n //Получение мнемокода и наименования показателя раздела\n const getSctnMrkCodeName = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONFSCTNMRK_CODE_NAME\",\n args: {\n SSCTNCODE: formData.sctnCode,\n SROWCODE: formData.rowCode,\n SCOLUMNCODE: formData.colCode\n }\n });\n setFormData(pv => ({\n ...pv,\n code: data.SCODE,\n name: data.SNAME\n }));\n }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]);\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpDoc.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = 0;\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONF_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.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 dataLoaded: true,\n columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])],\n groups: [...(s.XDATA.XGROUPS || [])],\n rows: [...(s.XDATA.XROWS || [])],\n reload: false\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 tabFocus = curIndex - 1;\n });\n setRrpDoc(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n setTabValue(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpDoc.reload, dataGrid.reload, loadData]);\n\n //Обновление при изменении разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n changeSections();\n }, [changeSections]);\n\n //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n formData.status == _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode ? getSctnMrkCodeName() : null;\n }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, formOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_dialog__WEBPACK_IMPORTED_MODULE_8__.CustomDialog, {\n formOpen: formOpen,\n closeForm: closeForm,\n curStatus: formData.status,\n curCode: formData.code,\n curName: formData.name,\n curColCode: formData.colCode,\n curRowCode: formData.rowCode,\n btnOkClick: formBtnOkClick,\n codeOnChange: v => setFormData(pv => ({\n ...pv,\n code: v\n })),\n nameOnChange: v => setFormData(pv => ({\n ...pv,\n name: v\n })),\n dictColumnClick: dictColumnClick,\n dictRowClick: dictRowClick\n }) : null, rrpDoc.docLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n borderBottom: 1,\n borderColor: \"divider\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n value: tabValue,\n onChange: handleChange,\n \"aria-label\": \"section tab\"\n }, rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], _extends({\n key: s.rn\n }, a11yProps(i), {\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\",\n textAlign: \"center\"\n }, s.name, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => editSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => deleteSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"delete\"))),\n wrapped: true\n }));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: addSectionClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"add\"))), rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_tab_panel__WEBPACK_IMPORTED_MODULE_5__.CustomTabPanel, {\n key: s.rn,\n value: tabValue,\n index: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n variant: \"contained\",\n onClick: () => addColumnRowClick(s.rn, s.code, s.name)\n }, \"+ \\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), s.dataLoaded ? /*#__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 columnsDef: s.columnsDef,\n groups: s.groups,\n rows: s.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: s.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.dataCellRender)({\n ...prms\n }, editColumnRowClick, deleteColumnRowClick)\n })) : null);\n })) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/rrp_conf_editor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RrpConfEditor: () => (/* binding */ RrpConfEditor),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\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 _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/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.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 _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.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_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _section_tab_panel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./section_tab_panel */ \"./app/panels/rrp_conf_editor/section_tab_panel.js\");\n/* harmony import */ var _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./iud_form_dialog */ \"./app/panels/rrp_conf_editor/iud_form_dialog.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 TABS_BOTTOM_LINE: {\n borderBottom: 1,\n borderColor: \"divider\"\n },\n TABS_PADDING: {\n paddingTop: 1,\n paddingBottom: 1\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор настройки регламентированного отчёта\nconst RrpConfEditor = () => {\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 [rrpDoc, setRrpDoc] = (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 [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\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 rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n };\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\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_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_5__.NavigationCtx);\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 handleChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n //Отработка нажатия на кнопку добавления секции\n const addSectionClick = () => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_9__.STATUSES.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const editSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_9__.STATUSES.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const deleteSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_9__.STATUSES.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const addRRPCONFSCTNMRKClick = (prn, sctnCode, sctnName) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_9__.STATUSES.RRPCONFSCTNMRK_CREATE,\n prn: prn,\n sctnCode: sctnCode,\n sctnName: sctnName\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const editRRPCONFSCTNMRKClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_9__.STATUSES.RRPCONFSCTNMRK_EDIT,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const deleteRRPCONFSCTNMRKClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_9__.STATUSES.RRPCONFSCTNMRK_DELETE,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Формирование разделов\n const a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n };\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpDoc.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = 0;\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONF_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 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 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 setRrpDoc(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n setTabValue(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //Отбор показателя раздела по ид.\n const showRrpConfSctnMrk = async rn => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.SELECT_RRPCONFSCTNMRK\",\n args: {\n NRN: rn\n }\n });\n if (data.NIDENT) {\n pOnlineShowUnit({\n unitCode: \"RRPConfigSectionMark\",\n inputParameters: [{\n name: \"in_SelectList_Ident\",\n value: data.NIDENT\n }]\n });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_10__.TEXTS.NO_DATA_FOUND);\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpDoc.reload, dataGrid.reload, loadData]);\n\n //При изменениях элемента\n const handleDialogReload = () => {\n setRrpDoc(pv => ({\n ...pv,\n reload: true\n }));\n };\n\n //При закрытии диалога\n const handleDialogClose = () => {\n setForm(false);\n clearFormData();\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, formOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.IUDFormDialog, {\n initial: formData,\n onClose: handleDialogClose,\n onReload: handleDialogReload\n }) : null, rrpDoc.docLoaded ? /*#__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 direction: \"row\",\n sx: STYLES.TABS_BOTTOM_LINE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n value: tabValue,\n onChange: handleChange,\n \"aria-label\": \"section tab\"\n }, rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], _extends({\n key: s.rn\n }, a11yProps(i), {\n sx: {\n padding: \"10px\"\n },\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_9__.STYLES.BOX_ROW\n }, s.name, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n component: \"span\",\n onClick: () => editSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n component: \"span\",\n onClick: () => deleteSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, \"delete\"))),\n wrapped: true\n }));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n onClick: addSectionClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], null, \"add\")))), rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_section_tab_panel__WEBPACK_IMPORTED_MODULE_7__.SectionTabPanel, {\n key: s.rn,\n value: tabValue,\n index: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n onClick: () => addRRPCONFSCTNMRKClick(s.rn, s.code, s.name)\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), s.dataLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: {\n ...STYLES.TABS_PADDING,\n ..._layouts__WEBPACK_IMPORTED_MODULE_9__.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 },\n columnsDef: s.columnsDef,\n groups: s.groups,\n rows: s.rows,\n fixedHeader: s.fixedHeader,\n fixedColumns: s.fixedColumns,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: s.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_9__.dataCellRender)({\n ...prms\n }, showRrpConfSctnMrk, editRRPCONFSCTNMRKClick, deleteRRPCONFSCTNMRKClick)\n }))) : null);\n })) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/rrp_conf_editor.js?"); + +/***/ }), + +/***/ "./app/panels/rrp_conf_editor/section_tab_panel.js": +/*!*********************************************************!*\ + !*** ./app/panels/rrp_conf_editor/section_tab_panel.js ***! + \*********************************************************/ +/***/ ((__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 */ SectionTabPanel: () => (/* binding */ SectionTabPanel)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Панель мониторинга: Компонент вкладки раздела \r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------------\n//Тело компонента\n//---------------\n\nconst SectionTabPanel = props => {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `tabpanel-${index}`,\n \"aria-labelledby\": `tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n component: \"span\"\n }, children)));\n};\n\n//Контроль свойств - Вкладка раздела\nSectionTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/section_tab_panel.js?"); /***/ }), -- 2.34.1 From 9ab60107a4489f795114c88c466026f939bfbede Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Fri, 19 Jul 2024 17:02:42 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-823=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82?= =?UTF-8?q?=2010.07.24=20=D1=872?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/rrp_conf_editor/hooks.js | 36 ++ app/panels/rrp_conf_editor/iud_form_dialog.js | 10 +- app/panels/rrp_conf_editor/rrp_conf_editor.js | 62 ++- db/PKG_P8PANELS_RRPCONFED.pck | 505 +++++++++--------- dist/p8-panels.js | 71 +-- 5 files changed, 398 insertions(+), 286 deletions(-) create mode 100644 app/panels/rrp_conf_editor/hooks.js diff --git a/app/panels/rrp_conf_editor/hooks.js b/app/panels/rrp_conf_editor/hooks.js new file mode 100644 index 0000000..bcafbaa --- /dev/null +++ b/app/panels/rrp_conf_editor/hooks.js @@ -0,0 +1,36 @@ +/* + Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта + Пользовательские хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useLayoutEffect } from "react"; //Классы React + +//----------- +//Тело модуля +//----------- + +//Хук для отработки изменений ширины и высоты рабочей области окна +const useWindowResize = () => { + //Состояние размера рабочей области + const [size, setSize] = useState([0, 0]); + //При изменении размера + useLayoutEffect(() => { + function updateSize() { + setSize([document.documentElement.clientWidth, document.documentElement.clientHeight]); + } + window.addEventListener("resize", updateSize); + updateSize(); + return () => window.removeEventListener("resize", updateSize); + }, []); + return size; +}; + +//-------------- +//Интерфейс хука +//-------------- + +export { useWindowResize }; diff --git a/app/panels/rrp_conf_editor/iud_form_dialog.js b/app/panels/rrp_conf_editor/iud_form_dialog.js index a9252c2..936de02 100644 --- a/app/panels/rrp_conf_editor/iud_form_dialog.js +++ b/app/panels/rrp_conf_editor/iud_form_dialog.js @@ -246,14 +246,20 @@ const IUDFormDialog = ({ initial, onClose, onReload }) => { const getSctnMrkCodeName = useCallback(async () => { const data = await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME", - args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode } + args: { + SSCTNCODE: formData.sctnCode, + SROWCODE: formData.rowCode, + NROWVER: formData.rowVRn, + SCOLUMNCODE: formData.colCode, + NCOLUMNVER: formData.colVRn + } }); setFormData(pv => ({ ...pv, code: data.SCODE, name: data.SNAME })); - }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]); + }, [executeStored, formData.colCode, formData.colVRn, formData.rowCode, formData.rowVRn, formData.sctnCode]); //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей useEffect(() => { diff --git a/app/panels/rrp_conf_editor/rrp_conf_editor.js b/app/panels/rrp_conf_editor/rrp_conf_editor.js index c572ffa..3c3d8de 100644 --- a/app/panels/rrp_conf_editor/rrp_conf_editor.js +++ b/app/panels/rrp_conf_editor/rrp_conf_editor.js @@ -21,15 +21,32 @@ import { dataCellRender } from "./layouts"; //Дополнительная ра import { STATUSES } from "./iud_form_dialog"; //Статусы диалогового окна import { TEXTS } from "../../../app.text"; //Текстовые константы import { STYLES as COMMON_STYLES } from "./layouts"; //Общие стили +import { useWindowResize } from "./hooks"; //--------- //Константы //--------- +//Высота меню Парус (пиксели) +const pxOuterMenuH = 53; +//Высота заголовка панели (пиксели) +const pxPanelHeaderH = 64; +//Ширина кнопки добавления раздела (пиксели) +const pxSectionAddButtonW = 40; + //Стили export const STYLES = { + PANELS_MAIN_COLOR: { backgroundColor: "#1976d2" }, + ICON_WHITE: { color: "white" }, TABS_BOTTOM_LINE: { borderBottom: 1, borderColor: "divider" }, - TABS_PADDING: { paddingTop: 1, paddingBottom: 1 } + TABS_PADDING: { padding: "5px" }, + TABS_SIZES: { maxHeight: 150 }, + GRID_PADDING: { paddingTop: 1, paddingBottom: 1 }, + GRID_SIZES: { + padding: 0, + minWidth: 400, + minHeight: 300 + } }; //----------- @@ -125,7 +142,7 @@ const RrpConfEditor = () => { const { showMsgErr } = useContext(MessagingСtx); //Переключение раздела - const handleChange = (event, newValue) => { + const handleSectionChange = (event, newValue) => { setTabValue(newValue); }; @@ -289,6 +306,17 @@ const RrpConfEditor = () => { clearFormData(); }; + //Состояние ширины и высоты рабочей области окна + const [width, height] = useWindowResize(); + + //Состояние высоты вкладок с разделами + const [pxTabsH, setPxTabsH] = useState(0); + + //При рендере данных + useEffect(() => { + rrpDoc.docLoaded ? setPxTabsH(document.getElementById("sectionTabs").offsetHeight) : null; + }, [rrpDoc.docLoaded]); + //Генерация содержимого return ( @@ -296,13 +324,22 @@ const RrpConfEditor = () => { {rrpDoc.docLoaded ? ( - + {rrpDoc.sections.map((s, i) => { return ( {s.name} @@ -319,9 +356,9 @@ const RrpConfEditor = () => { ); })} - + - add + add @@ -329,11 +366,18 @@ const RrpConfEditor = () => { return ( - {s.dataLoaded ? ( - + {s.dataLoaded && s.columnsDef.length > 1 ? ( + NCOMPANY, - NPRN => NPRN, - SCODE => SCODE, - SNAME => SNAME, - SRRPCONFSCTN => null, - SRRPPRMGRP => null, - SNOTE => null, - NHTML_HIDE => 0, - NHTML_HIDE_NAME_COL => 0, - NHTML_MAKE_HIER_GRP => 0, - SCLSF_CODE => null, - NLINKS_UPDATE => 0, - NDUP_RN => null, - NRN => NRN); - end RRPCONFSCTN_INSERT; - - /* Исправление раздела регламентированного отчёта */ - procedure RRPCONFSCTN_UPDATE - ( - NRN in number, -- Ид. раздела - SCODE in varchar2, -- Мнемокод раздела - SNAME in varchar2 -- Наименование раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - begin - P_RRPCONFSCTN_UPDATE(NRN => NRN, - NCOMPANY => NCOMPANY, - SCODE => SCODE, - SNAME => SNAME, - SRRPCONFSCTN => null, - SRRPPRMGRP => null, - SNOTE => null, - NHTML_HIDE => 0, - NHTML_HIDE_NAME_COL => 0, - NHTML_MAKE_HIER_GRP => 0, - SCLSF_CODE => null, - NFORMULA_UPDATE => 0, - NMARK_UPDATE => 0); - end RRPCONFSCTN_UPDATE; - - /* Удаление раздела регламентированного отчёта */ - procedure RRPCONFSCTN_DELETE - ( - NRN in number -- Ид. раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - begin - P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY); - end RRPCONFSCTN_DELETE; - - /* Добавление показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_INSERT - ( - NPRN in number, -- Ид. раздела - SCODE in varchar2, -- Мнемокод показателя раздела - SNAME in varchar2, -- Наименование показателя раздела - SCOLCODE in varchar2, -- Мнемокод графы - SCOLVER in varchar2, -- Мнемокод редакции графы - SROWCODE in varchar2, -- Мнемокод строки - SROWVER in varchar2, -- Мнемокод редакции строки - NRN out number -- Ид. созданной записи - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NCOUNT PKG_STD.TNUMBER; -- Счётчик показателей раздела - begin - select count(*) into NCOUNT from RRPCONFSCTNMRK T where T.PRN = NPRN; - P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, - NPRN => NPRN, - NNUMB => NCOUNT + 1, - SCODE => SCODE, - SNAME => SNAME, - SRRPROW => SROWCODE, - SRRPVERSION_ROW => SROWVER, - SRRPCOLUMN => SCOLCODE, - SRRPVERSION_COLUMN => SCOLVER, - SPKG_ROW => null, - SPRC_ROW => null, - SPKG_COL => null, - SPRC_COL => null, - SRRPPRM => null, - NIGNORE_ZOOM => 0, - NIGNORE_SHARP => 0, - SCLSF_CODE => null, - SNOTE => null, - NDUP_RN => null, - NRN => NRN); - end RRPCONFSCTNMRK_INSERT; - - /* Исправление показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_UPDATE - ( - NRN in number, -- Ид. показателя раздела - SNAME in varchar2 -- Новое наименование - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NNUMB PKG_STD.TNUMBER; -- Номер показателя раздела - SCODE PKG_STD.TSTRING; -- Мнемокод показателя раздела - SCOLCODE PKG_STD.TSTRING; -- Мнемокод графы - SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы - SROWCODE PKG_STD.TSTRING; -- Мнемокод строки - SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки - begin - select T.NUMB, - T.CODE, - R.CODE, - RVER.CODE, - C.CODE, - CVER.CODE - into NNUMB, - SCODE, - SROWCODE, - SROWVER, - SCOLCODE, - SCOLVER - from RRPCONFSCTNMRK T, - RRPCOLUMN C, - RRPVERSION CVER, - RRPROW R, - RRPVERSION RVER - where T.RN = NRN - and T.RRPROW = R.RN(+) - and R.RRPVERSION = RVER.RN(+) - and T.RRPCOLUMN = C.RN(+) - and C.RRPVERSION = CVER.RN(+); - P_RRPCONFSCTNMRK_UPDATE(NRN => NRN, - NCOMPANY => NCOMPANY, - NNUMB => NNUMB, - SCODE => SCODE, - SNAME => SNAME, - SRRPROW => SROWCODE, - SRRPVERSION_ROW => SROWVER, - SRRPCOLUMN => SCOLCODE, - SRRPVERSION_COLUMN => SCOLVER, - SPKG_ROW => null, - SPRC_ROW => null, - SPKG_COL => null, - SPRC_COL => null, - SRRPPRM => null, - NIGNORE_ZOOM => 0, - NIGNORE_SHARP => 0, - SCLSF_CODE => null, - NFORMULA_UPDATE => 0, - SNOTE => null); - end RRPCONFSCTNMRK_UPDATE; - - /* Удаление показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_DELETE - ( - NRN in number -- Ид. показателя раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - begin - P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN); - end RRPCONFSCTNMRK_DELETE; - - /* Формирование кода и наименования показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_GET_CODE_NAME - ( - SSCTNCODE in varchar2, -- Мнемокод раздела - SROWCODE in varchar2, -- Мнемокод строки - SCOLUMNCODE in varchar2, -- Мнемокод графы - SCODE out varchar2, -- Мнемокод показателя раздела - SNAME out varchar2 -- Наименование показателя раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NROWRN PKG_STD.TREF; -- Ид. строки - NCOLUMNRN PKG_STD.TREF; -- Ид. графы - begin - P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => SSCTNCODE, - SRRPROW => SROWCODE, - SRRPCOLUMN => SCOLUMNCODE, - SCODE => SCODE); - select R.RN into NROWRN from RRPROW R where R.CODE = SROWCODE; - select C.RN into NCOLUMNRN from RRPCOLUMN C where C.CODE = SCOLUMNCODE; - P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, - NRRPROW => NROWRN, - NRRPCOLUMN => NCOLUMNRN, - NCHANGE_NAME => 1, - NCHANGE_NAME_PARENT => 0, - SNAME => SNAME); - end RRPCONFSCTNMRK_GET_CODE_NAME; - - /* Отбор показателя раздела по ид. */ - procedure SELECT_RRPCONFSCTNMRK - ( - NRN in number, -- Ид. показателя раздела - NIDENT out number -- Ид. буфера подобранных (списка отмеченных записей, null - не найдено) - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных - begin - /* Сформируем идентификатор буфера */ - if (NIDENT is null) then - NIDENT := GEN_IDENT(); - end if; - /* Добавим подобранное в список отмеченных записей */ - P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, - NCOMPANY => NCOMPANY, - NDOCUMENT => NRN, - SUNITCODE => 'RRPConfigSectionMark', - SACTIONCODE => null, - NCRN => null, - NDOCUMENT1 => null, - SUNITCODE1 => null, - SACTIONCODE1 => null, - NRN => NSELECTLIST); - end SELECT_RRPCONFSCTNMRK; - /* Получение разделов регламентированного отчёта */ - procedure GET_RRPCONF_SECTIONS + procedure RRPCONF_GET_SECTIONS ( NRN_RRPCONF in number, -- Ид. нстройки форм регламентированного отчёта COUT out clob -- Список разделов @@ -464,7 +242,244 @@ create or replace package body PKG_P8PANELS_RRPCONFED as PKG_XFAST.EPILOGUE(); /* Очистка контейнера */ PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML); - end GET_RRPCONF_SECTIONS; + end RRPCONF_GET_SECTIONS; + + /* Добавление раздела регламентированного отчёта */ + procedure RRPCONFSCTN_INSERT + ( + NPRN in number, -- Ид. настройки форм регламентированного отчёта + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Ид. созданной записи + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_INSERT(NCOMPANY => NCOMPANY, + NPRN => NPRN, + SCODE => SCODE, + SNAME => SNAME, + SRRPCONFSCTN => null, + SRRPPRMGRP => null, + SNOTE => null, + NHTML_HIDE => 0, + NHTML_HIDE_NAME_COL => 0, + NHTML_MAKE_HIER_GRP => 0, + SCLSF_CODE => null, + NLINKS_UPDATE => 0, + NDUP_RN => null, + NRN => NRN); + end RRPCONFSCTN_INSERT; + + /* Исправление раздела регламентированного отчёта */ + procedure RRPCONFSCTN_UPDATE + ( + NRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод раздела + SNAME in varchar2 -- Наименование раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + RES RRPCONFSCTN%rowtype; -- Запись раздела настройки формы регламентированного отчета + begin + RES := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); + P_RRPCONFSCTN_UPDATE(NRN => NRN, + NCOMPANY => NCOMPANY, + SCODE => SCODE, + SNAME => SNAME, + SRRPCONFSCTN => RES.RRPCONFSCTN, + SRRPPRMGRP => RES.RRPPRMGRP, + SNOTE => RES.NOTE, + NHTML_HIDE => RES.HTML_HIDE, + NHTML_HIDE_NAME_COL => RES.HTML_HIDE_NAME_COL, + NHTML_MAKE_HIER_GRP => RES.HTML_MAKE_HIER_GRP, + SCLSF_CODE => RES.CLSF_CODE, + NFORMULA_UPDATE => 0, + NMARK_UPDATE => 0); + end RRPCONFSCTN_UPDATE; + + /* Удаление раздела регламентированного отчёта */ + procedure RRPCONFSCTN_DELETE + ( + NRN in number -- Ид. раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY); + end RRPCONFSCTN_DELETE; + + /* Получение кодов настройки, раздела и показателя раздела по ид. показателя раздела */ + procedure RRPCONFSCTNMRK_GET_CODES + ( + NRN in number, -- Ид. показателя раздела + SRRPCONF out varchar2, -- Код настройки формы регламентированного отчёта + SRRPCONFSCTN out varchar2, -- Код раздела + SRRPCONFSCTNMRK out varchar2 -- Код показателя раздела + ) + is + NVERSION PKG_STD.TREF := GET_SESSION_VERSION(SUNITCODE => 'RRPConfig'); -- Версия раздела + begin + select R.CODE, + RS.CODE, + RSM.CODE + into SRRPCONF, + SRRPCONFSCTN, + SRRPCONFSCTNMRK + from RRPCONF R, + RRPCONFSCTN RS, + RRPCONFSCTNMRK RSM + where R.RN in (select RRPCONF + from RRPCONFSCTNMRK + where RN = NRN + and VERSION = NVERSION) + and RS.RN in (select PRN + from RRPCONFSCTNMRK + where RN = NRN + and VERSION = NVERSION) + and RSM.RN = NRN; + exception + when NO_DATA_FOUND then + P_EXCEPTION(0, 'По выбранному показателю раздела не найдено данных.'); + when TOO_MANY_ROWS then + P_EXCEPTION(0, + 'По выбранному показателю раздела найдено несколько записей.'); + end RRPCONFSCTNMRK_GET_CODES; + + /* Добавление показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_INSERT + ( + NPRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод показателя раздела + SNAME in varchar2, -- Наименование показателя раздела + SCOLCODE in varchar2, -- Мнемокод графы + SCOLVER in varchar2, -- Мнемокод редакции графы + SROWCODE in varchar2, -- Мнемокод строки + SROWVER in varchar2, -- Мнемокод редакции строки + NRN out number -- Ид. созданной записи + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NCOUNT PKG_STD.TNUMBER; -- Счётчик показателей раздела + begin + NCOUNT := F_RRPCONFSCTNMRK_NEXT_NUMB(NCOMPANY => NCOMPANY, NPRN => NPRN); + P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, + NPRN => NPRN, + NNUMB => NCOUNT + 1, + SCODE => SCODE, + SNAME => SNAME, + SRRPROW => SROWCODE, + SRRPVERSION_ROW => SROWVER, + SRRPCOLUMN => SCOLCODE, + SRRPVERSION_COLUMN => SCOLVER, + SPKG_ROW => null, + SPRC_ROW => null, + SPKG_COL => null, + SPRC_COL => null, + SRRPPRM => null, + NIGNORE_ZOOM => 0, + NIGNORE_SHARP => 0, + SCLSF_CODE => null, + SNOTE => null, + NDUP_RN => null, + NRN => NRN); + end RRPCONFSCTNMRK_INSERT; + + /* Исправление показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_UPDATE + ( + NRN in number, -- Ид. показателя раздела + SNAME in varchar2 -- Новое наименование + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + RESSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись настройки показателя регламентированного отчета + RESROW RRPROW%rowtype; -- Запись строки регламентированного отчета + RESCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета + SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки + SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы + begin + /* Получение записи параметра раздела */ + RESSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); + /* Получение записи строки */ + RESROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPROW); + /* Получение записи графы */ + RESCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPCOLUMN); + /* Получение мнемокода редакции строки */ + SROWVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESROW.RRPVERSION); + /* Получение мнемокода редакции графы */ + SCOLVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESCOLUMN.RRPVERSION); + P_RRPCONFSCTNMRK_UPDATE(NRN => NRN, + NCOMPANY => NCOMPANY, + NNUMB => RESSCTNMRK.NUMB, + SCODE => RESSCTNMRK.CODE, + SNAME => SNAME, + SRRPROW => RESROW.CODE, + SRRPVERSION_ROW => SROWVER, + SRRPCOLUMN => RESCOLUMN.CODE, + SRRPVERSION_COLUMN => SCOLVER, + SPKG_ROW => RESSCTNMRK.PKG_ROW, + SPRC_ROW => RESSCTNMRK.PRC_ROW, + SPKG_COL => RESSCTNMRK.PKG_COL, + SPRC_COL => RESSCTNMRK.PRC_COL, + SRRPPRM => RESSCTNMRK.RRPPRM, + NIGNORE_ZOOM => RESSCTNMRK.IGNORE_ZOOM, + NIGNORE_SHARP => RESSCTNMRK.IGNORE_SHARP, + SCLSF_CODE => RESSCTNMRK.CLSF_CODE, + NFORMULA_UPDATE => 0, + SNOTE => RESSCTNMRK.NOTE); + end RRPCONFSCTNMRK_UPDATE; + + /* Удаление показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_DELETE + ( + NRN in number -- Ид. показателя раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN); + end RRPCONFSCTNMRK_DELETE; + + /* Формирование кода и наименования показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_GET_CODE_NAME + ( + SSCTNCODE in varchar2, -- Мнемокод раздела + SROWCODE in varchar2, -- Мнемокод строки + NROWVER in number, -- Ид. редакции строки + SCOLUMNCODE in varchar2, -- Мнемокод графы + NCOLUMNVER in number, -- Ид. редакции графы + SCODE out varchar2, -- Мнемокод показателя раздела + SNAME out varchar2 -- Наименование показателя раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NROWRN PKG_STD.TREF; -- Ид. строки + NCOLUMNRN PKG_STD.TREF; -- Ид. графы + begin + P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => SSCTNCODE, + SRRPROW => SROWCODE, + SRRPCOLUMN => SCOLUMNCODE, + SCODE => SCODE); + FIND_RRPROW_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + NRRPVERSION => NROWVER, + SCODE => SROWCODE, + NRN => NROWRN); + FIND_RRPCOLUMN_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + NRRPVERSION => NCOLUMNVER, + SCODE => SCOLUMNCODE, + NRN => NCOLUMNRN); + P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, + NRRPROW => NROWRN, + NRRPCOLUMN => NCOLUMNRN, + NCHANGE_NAME => 1, + NCHANGE_NAME_PARENT => 0, + SNAME => SNAME); + end RRPCONFSCTNMRK_GET_CODE_NAME; end PKG_P8PANELS_RRPCONFED; / diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 80b202a..20d69c6 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/custom_dialog\": \"./app/panels/rrp_conf_editor/custom_dialog.js\",\n\t\"./rrp_conf_editor/custom_dialog.js\": \"./app/panels/rrp_conf_editor/custom_dialog.js\",\n\t\"./rrp_conf_editor/custom_form_control\": \"./app/panels/rrp_conf_editor/custom_form_control.js\",\n\t\"./rrp_conf_editor/custom_form_control.js\": \"./app/panels/rrp_conf_editor/custom_form_control.js\",\n\t\"./rrp_conf_editor/custom_tab_panel\": \"./app/panels/rrp_conf_editor/custom_tab_panel.js\",\n\t\"./rrp_conf_editor/custom_tab_panel.js\": \"./app/panels/rrp_conf_editor/custom_tab_panel.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/iud_form_dialog\": \"./app/panels/rrp_conf_editor/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/iud_form_dialog.js\": \"./app/panels/rrp_conf_editor/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/iud_form_text_field\": \"./app/panels/rrp_conf_editor/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/iud_form_text_field.js\": \"./app/panels/rrp_conf_editor/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/section_tab_panel\": \"./app/panels/rrp_conf_editor/section_tab_panel.js\",\n\t\"./rrp_conf_editor/section_tab_panel.js\": \"./app/panels/rrp_conf_editor/section_tab_panel.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -4474,36 +4474,14 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/rrp_conf_editor/custom_dialog.js": -/*!*****************************************************!*\ - !*** ./app/panels/rrp_conf_editor/custom_dialog.js ***! - \*****************************************************/ +/***/ "./app/panels/rrp_conf_editor/hooks.js": +/*!*********************************************!*\ + !*** ./app/panels/rrp_conf_editor/hooks.js ***! + \*********************************************/ /***/ ((__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 */ CustomDialog: () => (/* binding */ CustomDialog)\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 _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.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/DialogContent/DialogContent.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/DialogActions/DialogActions.js\");\n/* harmony import */ var _custom_form_control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_form_control */ \"./app/panels/rrp_conf_editor/custom_form_control.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/*\r\n Кастомный Dialog\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Кастомные строки ввода\n //Статусы и стили диалогового окна\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomDialog = props => {\n const {\n formOpen,\n closeForm,\n curStatus,\n curCode,\n curName,\n curColCode,\n curRowCode,\n btnOkClick,\n codeOnChange,\n nameOnChange,\n dictColumnClick,\n dictRowClick\n } = props;\n\n //Формирование заголовка диалогового окна\n const formTitle = () => {\n switch (curStatus) {\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.CREATE:\n return \"Добавление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.EDIT:\n return \"Исправление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE:\n return \"Удаление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE:\n return \"Добавление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT:\n return \"Исправление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE:\n return \"Удаление показателя раздела\";\n }\n };\n\n //Отрисовка диалогового окна\n const renderSwitch = () => {\n var btnText = \"\";\n switch (curStatus) {\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.CREATE:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE:\n btnText = \"Добавить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.EDIT:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT:\n btnText = \"Исправить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE:\n btnText = \"Удалить\";\n break;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"contained\",\n onClick: btnOkClick\n }, btnText);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: formOpen,\n onClose: closeForm\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, formTitle()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeForm,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__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_8__[\"default\"], null, curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE || curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE ? curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B \", curName, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \", curName, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, curStatus != _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"code\",\n elementValue: curCode,\n labelText: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n changeFunc: codeOnChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"name\",\n elementValue: curName,\n labelText: \"\\u041D\\u0430\\u0438\\u043C\\u0435\\u043D\\u043E\\u0432\\u0430\\u043D\\u0438\\u0435\",\n changeFunc: nameOnChange\n }), curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"column\",\n elementValue: curColCode,\n labelText: \"\\u0413\\u0440\\u0430\\u0444\\u0430\",\n changeFunc: dictColumnClick,\n withDictionary: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"row\",\n elementValue: curRowCode,\n labelText: \"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\",\n changeFunc: dictRowClick,\n withDictionary: true\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_2__.STYLES.PADDING_DIALOG_BUTTONS_RIGHT\n }, renderSwitch(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"contained\",\n onClick: closeForm\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\nCustomDialog.propTypes = {\n formOpen: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().bool).isRequired,\n closeForm: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n curStatus: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOf(Object.values(_layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses).filter(x => typeof x === \"number\")),\n curCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curName: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curColCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curRowCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n btnOkClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n codeOnChange: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n nameOnChange: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n dictColumnClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n dictRowClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_dialog.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/custom_form_control.js": -/*!***********************************************************!*\ - !*** ./app/panels/rrp_conf_editor/custom_form_control.js ***! - \***********************************************************/ -/***/ ((__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 */ CustomFormControl: () => (/* binding */ CustomFormControl)\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_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/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.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 _layouts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Кастомный FormControl\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Стили диалогового окна\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomFormControl = props => {\n const {\n elementCode,\n elementValue,\n labelText,\n changeFunc,\n withDictionary,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _extends({\n sx: _layouts__WEBPACK_IMPORTED_MODULE_1__.STYLES.DIALOG_WINDOW_WIDTH\n }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n htmlFor: `${elementCode}-outlined`\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n id: `${elementCode}-outlined`,\n value: elementValue ? elementValue : \"\",\n onChange: !withDictionary ? e => changeFunc(e.target.value) : null,\n \"aria-describedby\": `${elementCode}-outlined-helper-text`,\n label: labelText,\n endAdornment: withDictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: changeFunc,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"list\"))) : null\n })));\n};\nCustomFormControl.propTypes = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n elementValue: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n changeFunc: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func).isRequired,\n withDictionary: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_form_control.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/custom_tab_panel.js": -/*!********************************************************!*\ - !*** ./app/panels/rrp_conf_editor/custom_tab_panel.js ***! - \********************************************************/ -/***/ ((__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 */ CustomTabPanel: () => (/* binding */ CustomTabPanel)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Кастомный Tab\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomTabPanel = props => {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `simple-tabpanel-${index}`,\n \"aria-labelledby\": `simple-tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, children)));\n};\nCustomTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_tab_panel.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\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/*\r\n Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта\r\n Пользовательские хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для отработки изменений ширины и высоты рабочей области окна\nconst useWindowResize = () => {\n //Состояние размера рабочей области\n const [size, setSize] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([0, 0]);\n //При изменении размера\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n function 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 return size;\n};\n\n//--------------\n//Интерфейс хука\n//--------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/hooks.js?"); /***/ }), @@ -4518,6 +4496,28 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), +/***/ "./app/panels/rrp_conf_editor/iud_form_dialog.js": +/*!*******************************************************!*\ + !*** ./app/panels/rrp_conf_editor/iud_form_dialog.js ***! + \*******************************************************/ +/***/ ((__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 */ IUDFormDialog: () => (/* binding */ IUDFormDialog),\n/* harmony export */ STATUSES: () => (/* binding */ STATUSES)\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_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.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/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __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/DialogActions/DialogActions.js\");\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 _iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./iud_form_text_field */ \"./app/panels/rrp_conf_editor/iud_form_text_field.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 STYLES = {\n CLOSE_BUTTON: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n },\n PADDING_DIALOG_BUTTONS_RIGHT: {\n paddingRight: \"32px\"\n }\n};\n\n//Статусы диалогового окна\nconst STATUSES = {\n CREATE: 0,\n EDIT: 1,\n DELETE: 2,\n RRPCONFSCTNMRK_CREATE: 3,\n RRPCONFSCTNMRK_EDIT: 4,\n RRPCONFSCTNMRK_DELETE: 5\n};\n\n//---------------\n//Тело компонента\n//---------------\n\nconst IUDFormDialog = ({\n initial,\n onClose,\n onReload\n}) => {\n //Собственное состояние\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...initial\n });\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 executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //При закрытии диалога без изменений\n const handleCancel = () => onClose ? onClose() : null;\n\n //При закрытии диалога с изменениями\n const handleOK = () => {\n if (onClose) {\n changeSections();\n onClose();\n } else null;\n };\n\n //Отработка добавления/изсправления/удаления элемента\n const handleReload = () => {\n if (onReload) {\n onReload();\n } else null;\n };\n\n //При изменении значения элемента\n const handleDialogItemChange = (item, value) => setFormData(pv => ({\n ...pv,\n [item]: value\n }));\n\n //Отработка изменений в разделе или показателе раздела\n const changeSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n switch (formData.status) {\n case STATUSES.CREATE:\n await insertSections();\n break;\n case STATUSES.EDIT:\n await updateSections();\n break;\n case STATUSES.DELETE:\n await deleteSections();\n break;\n case STATUSES.RRPCONFSCTNMRK_CREATE:\n await addRRPCONFSCTNMRK();\n break;\n case STATUSES.RRPCONFSCTNMRK_EDIT:\n await editRRPCONFSCTNMRK();\n break;\n case STATUSES.RRPCONFSCTNMRK_DELETE:\n await deleteRRPCONFSCTNMRK();\n break;\n }\n handleReload();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n //Добавление раздела\n const insertSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n setFormData(pv => ({\n ...pv,\n rn: Number(data.NRN)\n }));\n }, [formData.prn, formData.code, formData.name, executeStored]);\n\n //Исправление раздела\n const updateSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE\",\n args: {\n NRN: formData.rn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n }, [formData.name, formData.code, formData.rn, executeStored]);\n\n //Удаление раздела\n const deleteSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE\",\n args: {\n NRN: formData.rn\n }\n });\n }, [formData.rn, executeStored]);\n\n //Добавление показателя раздела\n const addRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name,\n SCOLCODE: formData.colCode,\n SCOLVER: formData.colVCode,\n SROWCODE: formData.rowCode,\n SROWVER: formData.rowVCode\n }\n });\n }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);\n\n //Исправление показателя раздела\n const editRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE\",\n args: {\n NRN: formData.rn,\n SNAME: formData.name\n }\n });\n }, [executeStored, formData.name, formData.rn]);\n\n //Удаление показателя раздела\n const deleteRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE\",\n args: {\n NRN: formData.rn\n }\n });\n }, [executeStored, formData.rn]);\n\n //Формирование заголовка диалогового окна\n const formTitle = () => {\n switch (formData.status) {\n case STATUSES.CREATE:\n return \"Добавление раздела\";\n case STATUSES.EDIT:\n return \"Исправление раздела\";\n case STATUSES.DELETE:\n return \"Удаление раздела\";\n case STATUSES.RRPCONFSCTNMRK_CREATE:\n return \"Добавление показателя раздела\";\n case STATUSES.RRPCONFSCTNMRK_EDIT:\n return \"Исправление показателя раздела\";\n case STATUSES.RRPCONFSCTNMRK_DELETE:\n return \"Удаление показателя раздела\";\n }\n };\n\n //Отрисовка диалогового окна\n const renderSwitch = () => {\n let btnText = \"\";\n switch (formData.status) {\n case STATUSES.CREATE:\n case STATUSES.RRPCONFSCTNMRK_CREATE:\n btnText = \"Добавить\";\n break;\n case STATUSES.EDIT:\n case STATUSES.RRPCONFSCTNMRK_EDIT:\n btnText = \"Исправить\";\n break;\n case STATUSES.DELETE:\n case STATUSES.RRPCONFSCTNMRK_DELETE:\n btnText = \"Удалить\";\n break;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n handleOK({\n formData\n });\n }\n }, btnText);\n };\n\n //Выбор строки\n const selectRow = (showDictionary, callBack) => {\n showDictionary({\n unitCode: \"RRPRow\",\n callBack: res => {\n if (res.success === true) {\n callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);\n setFormData(pv => ({\n ...pv,\n rowCode: res.outParameters.out_CODE,\n rowVCode: res.outParameters.out_RRPVERSION_CODE,\n rowVRn: res.outParameters.out_RRPVERSION\n }));\n } else callBack(null);\n }\n });\n };\n\n //Выбор графы\n const selectColumn = (showDictionary, callBack) => {\n showDictionary({\n unitCode: \"RRPColumn\",\n callBack: res => {\n if (res.success === true) {\n callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);\n setFormData(pv => ({\n ...pv,\n colCode: res.outParameters.out_CODE,\n colVCode: res.outParameters.out_RRPVERSION_CODE,\n colVRn: res.outParameters.out_RRPVERSION\n }));\n } else callBack(null);\n }\n });\n };\n\n //Получение мнемокода и наименования показателя раздела\n const getSctnMrkCodeName = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME\",\n args: {\n SSCTNCODE: formData.sctnCode,\n SROWCODE: formData.rowCode,\n NROWVER: formData.rowVRn,\n SCOLUMNCODE: formData.colCode,\n NCOLUMNVER: formData.colVRn\n }\n });\n setFormData(pv => ({\n ...pv,\n code: data.SCODE,\n name: data.SNAME\n }));\n }, [executeStored, formData.colCode, formData.colVRn, formData.rowCode, formData.rowVRn, formData.sctnCode]);\n\n //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n formData.status == STATUSES.RRPCONFSCTNMRK_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode ? getSctnMrkCodeName() : null;\n }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, formTitle()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: handleCancel,\n sx: STYLES.CLOSE_BUTTON\n }, /*#__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_9__[\"default\"], null, formData.status == STATUSES.DELETE || formData.status == STATUSES.RRPCONFSCTNMRK_DELETE ? formData.status == STATUSES.DELETE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B \", formData.name, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \", formData.name, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, formData.status != STATUSES.RRPCONFSCTNMRK_EDIT ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"code\",\n elementValue: formData.code,\n labelText: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n onChange: handleDialogItemChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"name\",\n elementValue: formData.name,\n labelText: \"\\u041D\\u0430\\u0438\\u043C\\u0435\\u043D\\u043E\\u0432\\u0430\\u043D\\u0438\\u0435\",\n onChange: handleDialogItemChange\n }), formData.status == STATUSES.RRPCONFSCTNMRK_CREATE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"row\",\n elementValue: formData.rowCode,\n labelText: \"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\",\n onChange: handleDialogItemChange,\n dictionary: callBack => selectRow(pOnlineShowDictionary, callBack)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"column\",\n elementValue: formData.colCode,\n labelText: \"\\u0413\\u0440\\u0430\\u0444\\u0430\",\n onChange: handleDialogItemChange,\n dictionary: callBack => selectColumn(pOnlineShowDictionary, callBack)\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PADDING_DIALOG_BUTTONS_RIGHT\n }, renderSwitch(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleCancel\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Диалог\nIUDFormDialog.propTypes = {\n initial: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func),\n onReload: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func)\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/iud_form_dialog.js?"); + +/***/ }), + +/***/ "./app/panels/rrp_conf_editor/iud_form_text_field.js": +/*!***********************************************************!*\ + !*** ./app/panels/rrp_conf_editor/iud_form_text_field.js ***! + \***********************************************************/ +/***/ ((__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 */ IUDFormTextField: () => (/* binding */ IUDFormTextField),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\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_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Input/Input.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.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\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\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_WINDOW_WIDTH: {\n width: 400\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\nconst IUDFormTextField = ({\n elementCode,\n elementValue,\n labelText,\n onChange,\n dictionary,\n ...other\n}) => {\n //Значение элемента\n const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(elementValue);\n\n //При получении нового значения из вне\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setValue(elementValue);\n }, [elementValue]);\n\n //Выбор значения из словаря\n const handleDictionaryClick = () => dictionary ? dictionary(res => res ? handleChange({\n target: {\n name: elementCode,\n value: res\n }\n }) : null) : null;\n\n //Изменение значения элемента\n const handleChange = e => {\n setValue(e.target.value);\n if (onChange) onChange(e.target.name, e.target.value);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({\n variant: \"standard\",\n sx: STYLES.DIALOG_WINDOW_WIDTH\n }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n htmlFor: elementCode\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: elementCode,\n name: elementCode,\n value: value ? value : \"\",\n endAdornment: dictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: handleDictionaryClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"list\"))) : null,\n onChange: handleChange,\n multiline: true,\n maxRows: 4\n })));\n};\n\n//Контроль свойств - Поле ввода\nIUDFormTextField.propTypes = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n elementValue: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n dictionary: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/iud_form_text_field.js?"); + +/***/ }), + /***/ "./app/panels/rrp_conf_editor/layouts.js": /*!***********************************************!*\ !*** ./app/panels/rrp_conf_editor/layouts.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 */ STYLES: () => (/* binding */ STYLES),\n/* harmony export */ Statuses: () => (/* binding */ Statuses),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\nconst STYLES = {\n DIALOG_WINDOW_WIDTH: {\n width: 400\n },\n PADDING_DIALOG_BUTTONS_RIGHT: {\n paddingRight: \"32px\"\n }\n};\n\n//Статусы диалогового окна\nconst Statuses = {\n CREATE: 0,\n EDIT: 1,\n DELETE: 2,\n COLUMNROW_CREATE: 3,\n COLUMNROW_EDIT: 4,\n COLUMNROW_DELETE: 5\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}, editCR, deleteCR) => {\n let data = row[columnDef.name];\n columnDef.name != \"SROW_NAME\" && data != undefined && columnDef.visible == true ? data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n width: \"-webkit-fill-available\"\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n justifyContent: \"flex-end\",\n onClick: () => editCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n justifyContent: \"flex-end\",\n onClick: () => deleteCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))) : null;\n return {\n data\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STYLES: () => (/* binding */ STYLES),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_ROW: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n LINK_STYLE: {\n component: \"button\",\n cursor: \"pointer\",\n width: \"-webkit-fill-available\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}, showRrpConfSctnMrk, editCR, deleteCR) => {\n let data = row[columnDef.name];\n columnDef.name != \"SROW_NAME\" && data != undefined && columnDef.visible == true ? data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.BOX_ROW\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.LINK_STYLE,\n onClick: () => {\n showRrpConfSctnMrk(row[\"NRN_\" + columnDef.name.substring(5)]);\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => editCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => deleteCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))) : null;\n return {\n data\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/layouts.js?"); /***/ }), @@ -4536,7 +4536,18 @@ 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 */ RrpConfEditor: () => (/* binding */ RrpConfEditor)\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_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/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _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_navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _custom_tab_panel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./custom_tab_panel */ \"./app/panels/rrp_conf_editor/custom_tab_panel.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _custom_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./custom_dialog */ \"./app/panels/rrp_conf_editor/custom_dialog.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Редактор настройки регламентированного отчёта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Кастомный Tab\n //Контекст приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Кастомное диалоговое окно\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор настройки регламентированного отчёта\nconst RrpConfEditor = () => {\n const dataGrid = {\n rn: 0,\n code: \"\",\n name: \"\",\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n };\n\n //Собственное состояние\n const [rrpDoc, setRrpDoc] = (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 [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\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 filled: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Закрытие диалогового окна\n const closeForm = () => {\n setForm(false);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n rn: \"\",\n code: \"\",\n name: \"\"\n });\n };\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 pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_6__[\"ApplicationСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_4__.NavigationCtx);\n\n //Переключение раздела\n const handleChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n //Отработка нажатия на кнопку добавления секции\n const addSectionClick = () => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const editSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const deleteSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const addColumnRowClick = (prn, sctnCode, sctnName) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE,\n prn: prn,\n sctnCode: sctnCode,\n sctnName: sctnName\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const editColumnRowClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const deleteColumnRowClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_DELETE,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на словарь граф\n const dictColumnClick = () => {\n pOnlineShowDictionary({\n unitCode: \"RRPColumn\",\n callBack: res => res.success === true ? setFormData(pv => ({\n ...pv,\n colCode: res.outParameters.out_CODE,\n colVCode: res.outParameters.out_RRPVERSION_CODE,\n colVRn: res.outParameters.out_RRPVERSION\n })) : null\n });\n };\n\n //Отработка нажатия на словарь строк\n const dictRowClick = () => {\n pOnlineShowDictionary({\n unitCode: \"RRPRow\",\n callBack: res => res.success === true ? setFormData(pv => ({\n ...pv,\n rowCode: res.outParameters.out_CODE,\n rowVCode: res.outParameters.out_RRPVERSION_CODE,\n rowVRn: res.outParameters.out_RRPVERSION\n })) : null\n });\n };\n\n //Нажатие на кнопку подтверждения создания/исправления/удаления на форме\n const formBtnOkClick = () => {\n let formStateProps = {};\n if (formData.status === (_layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE)) formStateProps = {\n ...formStateProps,\n code: document.querySelector(\"#code-outlined\").value\n };\n if (formData.status === (_layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT)) formStateProps = {\n ...formStateProps,\n name: document.querySelector(\"#name-outlined\").value\n };\n setFormData(pv => ({\n ...pv,\n ...formStateProps,\n filled: true\n }));\n closeForm();\n };\n\n //Формирование разделов\n const a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n };\n\n //Отработка изменений в разделе или показателе раздела\n const changeSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (formData.filled) {\n switch (formData.status) {\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE:\n insertSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT:\n updateSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.DELETE:\n deleteSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE:\n addColumnRow();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT:\n editColumnRow();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_DELETE:\n deleteColumnRow();\n clearFormData();\n break;\n }\n setRrpDoc(pv => ({\n ...pv,\n reload: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n //Добавление раздела\n const insertSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_SECTIONS\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n setFormData(pv => ({\n ...pv,\n rn: Number(data.NRN)\n }));\n }, [formData.prn, formData.code, formData.name, executeStored]);\n\n //Исправление раздела\n const updateSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_SECTIONS\",\n args: {\n NRN: formData.rn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n }, [formData.name, formData.code, formData.rn, executeStored]);\n\n //Удаление раздела\n const deleteSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_SECTIONS\",\n args: {\n NRN: formData.rn\n }\n });\n }, [formData.rn, executeStored]);\n\n //Добавление показателя раздела\n const addColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_COLUMNROW\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name,\n SCOLCODE: formData.colCode,\n SCOLVER: formData.colVCode,\n SROWCODE: formData.rowCode,\n SROWVER: formData.rowVCode\n }\n });\n }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);\n\n //Исправление показателя раздела\n const editColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_COLUMNROW\",\n args: {\n NRN: formData.rn,\n SNAME: formData.name\n }\n });\n }, [executeStored, formData.name, formData.rn]);\n\n //Удаление показателя раздела\n const deleteColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_COLUMNROW\",\n args: {\n NRN: formData.rn\n }\n });\n }, [executeStored, formData.rn]);\n\n //Получение мнемокода и наименования показателя раздела\n const getSctnMrkCodeName = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONFSCTNMRK_CODE_NAME\",\n args: {\n SSCTNCODE: formData.sctnCode,\n SROWCODE: formData.rowCode,\n SCOLUMNCODE: formData.colCode\n }\n });\n setFormData(pv => ({\n ...pv,\n code: data.SCODE,\n name: data.SNAME\n }));\n }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]);\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpDoc.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = 0;\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONF_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.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 dataLoaded: true,\n columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])],\n groups: [...(s.XDATA.XGROUPS || [])],\n rows: [...(s.XDATA.XROWS || [])],\n reload: false\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 tabFocus = curIndex - 1;\n });\n setRrpDoc(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n setTabValue(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpDoc.reload, dataGrid.reload, loadData]);\n\n //Обновление при изменении разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n changeSections();\n }, [changeSections]);\n\n //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n formData.status == _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode ? getSctnMrkCodeName() : null;\n }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, formOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_dialog__WEBPACK_IMPORTED_MODULE_8__.CustomDialog, {\n formOpen: formOpen,\n closeForm: closeForm,\n curStatus: formData.status,\n curCode: formData.code,\n curName: formData.name,\n curColCode: formData.colCode,\n curRowCode: formData.rowCode,\n btnOkClick: formBtnOkClick,\n codeOnChange: v => setFormData(pv => ({\n ...pv,\n code: v\n })),\n nameOnChange: v => setFormData(pv => ({\n ...pv,\n name: v\n })),\n dictColumnClick: dictColumnClick,\n dictRowClick: dictRowClick\n }) : null, rrpDoc.docLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n borderBottom: 1,\n borderColor: \"divider\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n value: tabValue,\n onChange: handleChange,\n \"aria-label\": \"section tab\"\n }, rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], _extends({\n key: s.rn\n }, a11yProps(i), {\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\",\n textAlign: \"center\"\n }, s.name, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => editSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => deleteSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"delete\"))),\n wrapped: true\n }));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: addSectionClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"add\"))), rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_tab_panel__WEBPACK_IMPORTED_MODULE_5__.CustomTabPanel, {\n key: s.rn,\n value: tabValue,\n index: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n variant: \"contained\",\n onClick: () => addColumnRowClick(s.rn, s.code, s.name)\n }, \"+ \\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), s.dataLoaded ? /*#__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 columnsDef: s.columnsDef,\n groups: s.groups,\n rows: s.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: s.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.dataCellRender)({\n ...prms\n }, editColumnRowClick, deleteColumnRowClick)\n })) : null);\n })) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/rrp_conf_editor.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RrpConfEditor: () => (/* binding */ RrpConfEditor),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\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/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.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_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _section_tab_panel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./section_tab_panel */ \"./app/panels/rrp_conf_editor/section_tab_panel.js\");\n/* harmony import */ var _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./iud_form_dialog */ \"./app/panels/rrp_conf_editor/iud_form_dialog.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 pxOuterMenuH = 53;\n//Высота заголовка панели (пиксели)\nconst pxPanelHeaderH = 64;\n//Ширина кнопки добавления раздела (пиксели)\nconst pxSectionAddButtonW = 40;\n\n//Стили\nconst STYLES = {\n PANELS_MAIN_COLOR: {\n backgroundColor: \"#1976d2\"\n },\n ICON_WHITE: {\n color: \"white\"\n },\n TABS_BOTTOM_LINE: {\n borderBottom: 1,\n borderColor: \"divider\"\n },\n TABS_PADDING: {\n padding: \"5px\"\n },\n TABS_SIZES: {\n maxHeight: 150\n },\n GRID_PADDING: {\n paddingTop: 1,\n paddingBottom: 1\n },\n GRID_SIZES: {\n padding: 0,\n minWidth: 400,\n minHeight: 300\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор настройки регламентированного отчёта\nconst RrpConfEditor = () => {\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 [rrpDoc, setRrpDoc] = (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 [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\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 rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n };\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\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_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_5__.NavigationCtx);\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 handleSectionChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n //Отработка нажатия на кнопку добавления секции\n const addSectionClick = () => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const editSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const deleteSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const addRRPCONFSCTNMRKClick = (prn, sctnCode, sctnName) => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.RRPCONFSCTNMRK_CREATE,\n prn: prn,\n sctnCode: sctnCode,\n sctnName: sctnName\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const editRRPCONFSCTNMRKClick = (rn, name) => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.RRPCONFSCTNMRK_EDIT,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const deleteRRPCONFSCTNMRKClick = (rn, name) => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.RRPCONFSCTNMRK_DELETE,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Формирование разделов\n const a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n };\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpDoc.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = 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 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 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 setRrpDoc(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n setTabValue(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //Отбор показателя раздела по ид.\n const showRrpConfSctnMrk = async rn => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODES\",\n args: {\n NRN: rn\n }\n });\n if (data) {\n pOnlineShowUnit({\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 });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_10__.TEXTS.NO_DATA_FOUND);\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpDoc.reload, dataGrid.reload, loadData]);\n\n //При изменениях элемента\n const handleDialogReload = () => {\n setRrpDoc(pv => ({\n ...pv,\n reload: true\n }));\n };\n\n //При закрытии диалога\n const handleDialogClose = () => {\n setForm(false);\n clearFormData();\n };\n\n //Состояние ширины и высоты рабочей области окна\n const [width, height] = (0,_hooks__WEBPACK_IMPORTED_MODULE_11__.useWindowResize)();\n\n //Состояние высоты вкладок с разделами\n const [pxTabsH, setPxTabsH] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //При рендере данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n rrpDoc.docLoaded ? setPxTabsH(document.getElementById(\"sectionTabs\").offsetHeight) : null;\n }, [rrpDoc.docLoaded]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, formOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.IUDFormDialog, {\n initial: formData,\n onClose: handleDialogClose,\n onReload: handleDialogReload\n }) : null, rrpDoc.docLoaded ? /*#__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_13__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABS_BOTTOM_LINE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"sectionTabs\",\n value: tabValue,\n onChange: handleSectionChange,\n variant: \"scrollable\",\n scrollButtons: false,\n visibleScrollbar: true,\n \"aria-label\": \"section tab\",\n sx: {\n ...STYLES.TABS_SIZES,\n maxWidth: width - pxSectionAddButtonW\n }\n }, rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n key: s.rn\n }, a11yProps(i), {\n sx: STYLES.TABS_PADDING,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_9__.STYLES.BOX_ROW\n }, s.name, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n component: \"span\",\n onClick: () => editSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n component: \"span\",\n onClick: () => deleteSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"delete\"))),\n wrapped: true\n }));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n sx: STYLES.PANELS_MAIN_COLOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: addSectionClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.ICON_WHITE\n }, \"add\")))), rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_section_tab_panel__WEBPACK_IMPORTED_MODULE_7__.SectionTabPanel, {\n key: s.rn,\n value: tabValue,\n index: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n onClick: () => addRRPCONFSCTNMRKClick(s.rn, s.code, s.name)\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), s.dataLoaded && s.columnsDef.length > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n ...STYLES.GRID_PADDING,\n ..._layouts__WEBPACK_IMPORTED_MODULE_9__.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,\n maxWidth: width * 0.95,\n maxHeight: (height - pxOuterMenuH - pxPanelHeaderH - pxTabsH) * 0.88\n }\n },\n columnsDef: s.columnsDef,\n groups: s.groups,\n rows: s.rows,\n fixedHeader: s.fixedHeader,\n fixedColumns: s.fixedColumns,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: s.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_9__.dataCellRender)({\n ...prms\n }, showRrpConfSctnMrk, editRRPCONFSCTNMRKClick, deleteRRPCONFSCTNMRKClick)\n }))) : null);\n })) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/rrp_conf_editor.js?"); + +/***/ }), + +/***/ "./app/panels/rrp_conf_editor/section_tab_panel.js": +/*!*********************************************************!*\ + !*** ./app/panels/rrp_conf_editor/section_tab_panel.js ***! + \*********************************************************/ +/***/ ((__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 */ SectionTabPanel: () => (/* binding */ SectionTabPanel)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Панель мониторинга: Компонент вкладки раздела \r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------------\n//Тело компонента\n//---------------\n\nconst SectionTabPanel = props => {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `tabpanel-${index}`,\n \"aria-labelledby\": `tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n component: \"span\"\n }, children)));\n};\n\n//Контроль свойств - Вкладка раздела\nSectionTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/section_tab_panel.js?"); /***/ }), -- 2.34.1 From 2d5e9cfde4357d8990090c8979b7b6c34e55b3f3 Mon Sep 17 00:00:00 2001 From: Mikhail Chechnev Date: Mon, 22 Jul 2024 10:44:55 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20URL=20=D1=80=D0=B5=D0=BF=D0=BE=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B8=D1=8F=20"P8-Panels-ParusOnlineExt"=20?= =?UTF-8?q?=D0=B2=20=D0=B8=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index de1b040..325a15c 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ В фреймворк входят: -- [Библиотека расширения "P8-Panels-ParusOnlineExt.dll"](https://github.com/CITKParus/P8-Panels-ParusOnlineExt) для сервера приложений "ПАРУС 8 Онлайн" - обеспечивает низкоуровневое взаимодействие разрабатываемых панелей с Системой +- [Библиотека расширения "P8-Panels-ParusOnlineExt.dll"](https://git.citpb.ru/CITKParus/P8-Panels-ParusOnlineExt) для сервера приложений "ПАРУС 8 Онлайн" - обеспечивает низкоуровневое взаимодействие разрабатываемых панелей с Системой - Хранимые объекты сервера БД Системы, обеспечивающие обмен данными между панелями и учётными регистрами Системы - API для высокоуровневого взаимодействия с сервером БД Системы - API для взаимодействия разрабатываемых панелей с WEB-приложением "ПАРУС 8 Онлайн" @@ -64,7 +64,7 @@ ## IV. Установка 1. Установите сервер приложений "ПАРУС 8 Онлайн" согласно документации (см. "Парус-Онлайн 2. Часть 1. Установка ГГГГ.ММ.docx"), требуется релиз от октября 2023 года и позднее. -2. Разместите на диске сервера приложений библиотеку расширения "P8-Panels-ParusOnlineExt", для этого скопируйте содержимое папки "bin" из [репозитория расширения "P8-Panels-ParusOnlineExt"](https://github.com/CITKParus/P8-Panels-ParusOnlineExt), например, в каталог "C:\p8web20\Ext\P8-Panels-ParusOnlineExt". +2. Разместите на диске сервера приложений библиотеку расширения "P8-Panels-ParusOnlineExt", для этого скопируйте содержимое папки "bin" из [репозитория расширения "P8-Panels-ParusOnlineExt"](https://git.citpb.ru/CITKParus/P8-Panels-ParusOnlineExt), например, в каталог "C:\p8web20\Ext\P8-Panels-ParusOnlineExt". 3. Подключите библиотеку расширения к серверу приложений "ПАРУС 8 Онлайн". Для этого добавьте ссылку на библиотеку в файл "Config\extensions.config" сервера приложений: ``` -- 2.34.1 From 6ec600a9deed6c0f8e40f959a67db8e9672306dd Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Mon, 22 Jul 2024 14:23:19 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-823=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B2=20=D1=81=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D1=8B=D1=85=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D1=80=D0=B0=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db/PKG_P8PANELS_RRPCONFED.pck | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/db/PKG_P8PANELS_RRPCONFED.pck b/db/PKG_P8PANELS_RRPCONFED.pck index 4b14960..650e783 100644 --- a/db/PKG_P8PANELS_RRPCONFED.pck +++ b/db/PKG_P8PANELS_RRPCONFED.pck @@ -294,8 +294,8 @@ create or replace package body PKG_P8PANELS_RRPCONFED as NHTML_HIDE_NAME_COL => RES.HTML_HIDE_NAME_COL, NHTML_MAKE_HIER_GRP => RES.HTML_MAKE_HIER_GRP, SCLSF_CODE => RES.CLSF_CODE, - NFORMULA_UPDATE => 0, - NMARK_UPDATE => 0); + NFORMULA_UPDATE => 1, + NMARK_UPDATE => 1); end RRPCONFSCTN_UPDATE; /* Удаление раздела регламентированного отчёта */ @@ -365,7 +365,7 @@ create or replace package body PKG_P8PANELS_RRPCONFED as NCOUNT := F_RRPCONFSCTNMRK_NEXT_NUMB(NCOMPANY => NCOMPANY, NPRN => NPRN); P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, NPRN => NPRN, - NNUMB => NCOUNT + 1, + NNUMB => NCOUNT, SCODE => SCODE, SNAME => SNAME, SRRPROW => SROWCODE, -- 2.34.1 From 4ef1fea6f6156cb008d83f0a806955fc9251f8a6 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Fri, 19 Jul 2024 17:02:42 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-823=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D1=87=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=82?= =?UTF-8?q?=2010.07.24=20=D1=872?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/panels/rrp_conf_editor/hooks.js | 36 ++ app/panels/rrp_conf_editor/iud_form_dialog.js | 10 +- app/panels/rrp_conf_editor/rrp_conf_editor.js | 62 ++- db/PKG_P8PANELS_RRPCONFED.pck | 505 +++++++++--------- 4 files changed, 357 insertions(+), 256 deletions(-) create mode 100644 app/panels/rrp_conf_editor/hooks.js diff --git a/app/panels/rrp_conf_editor/hooks.js b/app/panels/rrp_conf_editor/hooks.js new file mode 100644 index 0000000..bcafbaa --- /dev/null +++ b/app/panels/rrp_conf_editor/hooks.js @@ -0,0 +1,36 @@ +/* + Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта + Пользовательские хуки +*/ + +//--------------------- +//Подключение библиотек +//--------------------- + +import { useState, useLayoutEffect } from "react"; //Классы React + +//----------- +//Тело модуля +//----------- + +//Хук для отработки изменений ширины и высоты рабочей области окна +const useWindowResize = () => { + //Состояние размера рабочей области + const [size, setSize] = useState([0, 0]); + //При изменении размера + useLayoutEffect(() => { + function updateSize() { + setSize([document.documentElement.clientWidth, document.documentElement.clientHeight]); + } + window.addEventListener("resize", updateSize); + updateSize(); + return () => window.removeEventListener("resize", updateSize); + }, []); + return size; +}; + +//-------------- +//Интерфейс хука +//-------------- + +export { useWindowResize }; diff --git a/app/panels/rrp_conf_editor/iud_form_dialog.js b/app/panels/rrp_conf_editor/iud_form_dialog.js index a9252c2..936de02 100644 --- a/app/panels/rrp_conf_editor/iud_form_dialog.js +++ b/app/panels/rrp_conf_editor/iud_form_dialog.js @@ -246,14 +246,20 @@ const IUDFormDialog = ({ initial, onClose, onReload }) => { const getSctnMrkCodeName = useCallback(async () => { const data = await executeStored({ stored: "PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME", - args: { SSCTNCODE: formData.sctnCode, SROWCODE: formData.rowCode, SCOLUMNCODE: formData.colCode } + args: { + SSCTNCODE: formData.sctnCode, + SROWCODE: formData.rowCode, + NROWVER: formData.rowVRn, + SCOLUMNCODE: formData.colCode, + NCOLUMNVER: formData.colVRn + } }); setFormData(pv => ({ ...pv, code: data.SCODE, name: data.SNAME })); - }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]); + }, [executeStored, formData.colCode, formData.colVRn, formData.rowCode, formData.rowVRn, formData.sctnCode]); //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей useEffect(() => { diff --git a/app/panels/rrp_conf_editor/rrp_conf_editor.js b/app/panels/rrp_conf_editor/rrp_conf_editor.js index c572ffa..3c3d8de 100644 --- a/app/panels/rrp_conf_editor/rrp_conf_editor.js +++ b/app/panels/rrp_conf_editor/rrp_conf_editor.js @@ -21,15 +21,32 @@ import { dataCellRender } from "./layouts"; //Дополнительная ра import { STATUSES } from "./iud_form_dialog"; //Статусы диалогового окна import { TEXTS } from "../../../app.text"; //Текстовые константы import { STYLES as COMMON_STYLES } from "./layouts"; //Общие стили +import { useWindowResize } from "./hooks"; //--------- //Константы //--------- +//Высота меню Парус (пиксели) +const pxOuterMenuH = 53; +//Высота заголовка панели (пиксели) +const pxPanelHeaderH = 64; +//Ширина кнопки добавления раздела (пиксели) +const pxSectionAddButtonW = 40; + //Стили export const STYLES = { + PANELS_MAIN_COLOR: { backgroundColor: "#1976d2" }, + ICON_WHITE: { color: "white" }, TABS_BOTTOM_LINE: { borderBottom: 1, borderColor: "divider" }, - TABS_PADDING: { paddingTop: 1, paddingBottom: 1 } + TABS_PADDING: { padding: "5px" }, + TABS_SIZES: { maxHeight: 150 }, + GRID_PADDING: { paddingTop: 1, paddingBottom: 1 }, + GRID_SIZES: { + padding: 0, + minWidth: 400, + minHeight: 300 + } }; //----------- @@ -125,7 +142,7 @@ const RrpConfEditor = () => { const { showMsgErr } = useContext(MessagingСtx); //Переключение раздела - const handleChange = (event, newValue) => { + const handleSectionChange = (event, newValue) => { setTabValue(newValue); }; @@ -289,6 +306,17 @@ const RrpConfEditor = () => { clearFormData(); }; + //Состояние ширины и высоты рабочей области окна + const [width, height] = useWindowResize(); + + //Состояние высоты вкладок с разделами + const [pxTabsH, setPxTabsH] = useState(0); + + //При рендере данных + useEffect(() => { + rrpDoc.docLoaded ? setPxTabsH(document.getElementById("sectionTabs").offsetHeight) : null; + }, [rrpDoc.docLoaded]); + //Генерация содержимого return ( @@ -296,13 +324,22 @@ const RrpConfEditor = () => { {rrpDoc.docLoaded ? ( - + {rrpDoc.sections.map((s, i) => { return ( {s.name} @@ -319,9 +356,9 @@ const RrpConfEditor = () => { ); })} - + - add + add @@ -329,11 +366,18 @@ const RrpConfEditor = () => { return ( - {s.dataLoaded ? ( - + {s.dataLoaded && s.columnsDef.length > 1 ? ( + NCOMPANY, - NPRN => NPRN, - SCODE => SCODE, - SNAME => SNAME, - SRRPCONFSCTN => null, - SRRPPRMGRP => null, - SNOTE => null, - NHTML_HIDE => 0, - NHTML_HIDE_NAME_COL => 0, - NHTML_MAKE_HIER_GRP => 0, - SCLSF_CODE => null, - NLINKS_UPDATE => 0, - NDUP_RN => null, - NRN => NRN); - end RRPCONFSCTN_INSERT; - - /* Исправление раздела регламентированного отчёта */ - procedure RRPCONFSCTN_UPDATE - ( - NRN in number, -- Ид. раздела - SCODE in varchar2, -- Мнемокод раздела - SNAME in varchar2 -- Наименование раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - begin - P_RRPCONFSCTN_UPDATE(NRN => NRN, - NCOMPANY => NCOMPANY, - SCODE => SCODE, - SNAME => SNAME, - SRRPCONFSCTN => null, - SRRPPRMGRP => null, - SNOTE => null, - NHTML_HIDE => 0, - NHTML_HIDE_NAME_COL => 0, - NHTML_MAKE_HIER_GRP => 0, - SCLSF_CODE => null, - NFORMULA_UPDATE => 0, - NMARK_UPDATE => 0); - end RRPCONFSCTN_UPDATE; - - /* Удаление раздела регламентированного отчёта */ - procedure RRPCONFSCTN_DELETE - ( - NRN in number -- Ид. раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - begin - P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY); - end RRPCONFSCTN_DELETE; - - /* Добавление показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_INSERT - ( - NPRN in number, -- Ид. раздела - SCODE in varchar2, -- Мнемокод показателя раздела - SNAME in varchar2, -- Наименование показателя раздела - SCOLCODE in varchar2, -- Мнемокод графы - SCOLVER in varchar2, -- Мнемокод редакции графы - SROWCODE in varchar2, -- Мнемокод строки - SROWVER in varchar2, -- Мнемокод редакции строки - NRN out number -- Ид. созданной записи - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NCOUNT PKG_STD.TNUMBER; -- Счётчик показателей раздела - begin - select count(*) into NCOUNT from RRPCONFSCTNMRK T where T.PRN = NPRN; - P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, - NPRN => NPRN, - NNUMB => NCOUNT + 1, - SCODE => SCODE, - SNAME => SNAME, - SRRPROW => SROWCODE, - SRRPVERSION_ROW => SROWVER, - SRRPCOLUMN => SCOLCODE, - SRRPVERSION_COLUMN => SCOLVER, - SPKG_ROW => null, - SPRC_ROW => null, - SPKG_COL => null, - SPRC_COL => null, - SRRPPRM => null, - NIGNORE_ZOOM => 0, - NIGNORE_SHARP => 0, - SCLSF_CODE => null, - SNOTE => null, - NDUP_RN => null, - NRN => NRN); - end RRPCONFSCTNMRK_INSERT; - - /* Исправление показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_UPDATE - ( - NRN in number, -- Ид. показателя раздела - SNAME in varchar2 -- Новое наименование - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NNUMB PKG_STD.TNUMBER; -- Номер показателя раздела - SCODE PKG_STD.TSTRING; -- Мнемокод показателя раздела - SCOLCODE PKG_STD.TSTRING; -- Мнемокод графы - SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы - SROWCODE PKG_STD.TSTRING; -- Мнемокод строки - SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки - begin - select T.NUMB, - T.CODE, - R.CODE, - RVER.CODE, - C.CODE, - CVER.CODE - into NNUMB, - SCODE, - SROWCODE, - SROWVER, - SCOLCODE, - SCOLVER - from RRPCONFSCTNMRK T, - RRPCOLUMN C, - RRPVERSION CVER, - RRPROW R, - RRPVERSION RVER - where T.RN = NRN - and T.RRPROW = R.RN(+) - and R.RRPVERSION = RVER.RN(+) - and T.RRPCOLUMN = C.RN(+) - and C.RRPVERSION = CVER.RN(+); - P_RRPCONFSCTNMRK_UPDATE(NRN => NRN, - NCOMPANY => NCOMPANY, - NNUMB => NNUMB, - SCODE => SCODE, - SNAME => SNAME, - SRRPROW => SROWCODE, - SRRPVERSION_ROW => SROWVER, - SRRPCOLUMN => SCOLCODE, - SRRPVERSION_COLUMN => SCOLVER, - SPKG_ROW => null, - SPRC_ROW => null, - SPKG_COL => null, - SPRC_COL => null, - SRRPPRM => null, - NIGNORE_ZOOM => 0, - NIGNORE_SHARP => 0, - SCLSF_CODE => null, - NFORMULA_UPDATE => 0, - SNOTE => null); - end RRPCONFSCTNMRK_UPDATE; - - /* Удаление показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_DELETE - ( - NRN in number -- Ид. показателя раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - begin - P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN); - end RRPCONFSCTNMRK_DELETE; - - /* Формирование кода и наименования показателя раздела регламентированного отчёта */ - procedure RRPCONFSCTNMRK_GET_CODE_NAME - ( - SSCTNCODE in varchar2, -- Мнемокод раздела - SROWCODE in varchar2, -- Мнемокод строки - SCOLUMNCODE in varchar2, -- Мнемокод графы - SCODE out varchar2, -- Мнемокод показателя раздела - SNAME out varchar2 -- Наименование показателя раздела - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NROWRN PKG_STD.TREF; -- Ид. строки - NCOLUMNRN PKG_STD.TREF; -- Ид. графы - begin - P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => SSCTNCODE, - SRRPROW => SROWCODE, - SRRPCOLUMN => SCOLUMNCODE, - SCODE => SCODE); - select R.RN into NROWRN from RRPROW R where R.CODE = SROWCODE; - select C.RN into NCOLUMNRN from RRPCOLUMN C where C.CODE = SCOLUMNCODE; - P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, - NRRPROW => NROWRN, - NRRPCOLUMN => NCOLUMNRN, - NCHANGE_NAME => 1, - NCHANGE_NAME_PARENT => 0, - SNAME => SNAME); - end RRPCONFSCTNMRK_GET_CODE_NAME; - - /* Отбор показателя раздела по ид. */ - procedure SELECT_RRPCONFSCTNMRK - ( - NRN in number, -- Ид. показателя раздела - NIDENT out number -- Ид. буфера подобранных (списка отмеченных записей, null - не найдено) - ) - is - NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации - NSELECTLIST PKG_STD.TREF; -- Рег. номер добавленной записи буфера подобранных - begin - /* Сформируем идентификатор буфера */ - if (NIDENT is null) then - NIDENT := GEN_IDENT(); - end if; - /* Добавим подобранное в список отмеченных записей */ - P_SELECTLIST_BASE_INSERT(NIDENT => NIDENT, - NCOMPANY => NCOMPANY, - NDOCUMENT => NRN, - SUNITCODE => 'RRPConfigSectionMark', - SACTIONCODE => null, - NCRN => null, - NDOCUMENT1 => null, - SUNITCODE1 => null, - SACTIONCODE1 => null, - NRN => NSELECTLIST); - end SELECT_RRPCONFSCTNMRK; - /* Получение разделов регламентированного отчёта */ - procedure GET_RRPCONF_SECTIONS + procedure RRPCONF_GET_SECTIONS ( NRN_RRPCONF in number, -- Ид. нстройки форм регламентированного отчёта COUT out clob -- Список разделов @@ -464,7 +242,244 @@ create or replace package body PKG_P8PANELS_RRPCONFED as PKG_XFAST.EPILOGUE(); /* Очистка контейнера */ PKG_CONTVALLOC2NS.PURGE(RCONTAINER => CXML); - end GET_RRPCONF_SECTIONS; + end RRPCONF_GET_SECTIONS; + + /* Добавление раздела регламентированного отчёта */ + procedure RRPCONFSCTN_INSERT + ( + NPRN in number, -- Ид. настройки форм регламентированного отчёта + SCODE in varchar2, -- Мнемокод + SNAME in varchar2, -- Наименование + NRN out number -- Ид. созданной записи + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_INSERT(NCOMPANY => NCOMPANY, + NPRN => NPRN, + SCODE => SCODE, + SNAME => SNAME, + SRRPCONFSCTN => null, + SRRPPRMGRP => null, + SNOTE => null, + NHTML_HIDE => 0, + NHTML_HIDE_NAME_COL => 0, + NHTML_MAKE_HIER_GRP => 0, + SCLSF_CODE => null, + NLINKS_UPDATE => 0, + NDUP_RN => null, + NRN => NRN); + end RRPCONFSCTN_INSERT; + + /* Исправление раздела регламентированного отчёта */ + procedure RRPCONFSCTN_UPDATE + ( + NRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод раздела + SNAME in varchar2 -- Наименование раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + RES RRPCONFSCTN%rowtype; -- Запись раздела настройки формы регламентированного отчета + begin + RES := GET_RRPCONFSCTN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); + P_RRPCONFSCTN_UPDATE(NRN => NRN, + NCOMPANY => NCOMPANY, + SCODE => SCODE, + SNAME => SNAME, + SRRPCONFSCTN => RES.RRPCONFSCTN, + SRRPPRMGRP => RES.RRPPRMGRP, + SNOTE => RES.NOTE, + NHTML_HIDE => RES.HTML_HIDE, + NHTML_HIDE_NAME_COL => RES.HTML_HIDE_NAME_COL, + NHTML_MAKE_HIER_GRP => RES.HTML_MAKE_HIER_GRP, + SCLSF_CODE => RES.CLSF_CODE, + NFORMULA_UPDATE => 1, + NMARK_UPDATE => 1); + end RRPCONFSCTN_UPDATE; + + /* Удаление раздела регламентированного отчёта */ + procedure RRPCONFSCTN_DELETE + ( + NRN in number -- Ид. раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTN_DELETE(NRN => NRN, NCOMPANY => NCOMPANY); + end RRPCONFSCTN_DELETE; + + /* Получение кодов настройки, раздела и показателя раздела по ид. показателя раздела */ + procedure RRPCONFSCTNMRK_GET_CODES + ( + NRN in number, -- Ид. показателя раздела + SRRPCONF out varchar2, -- Код настройки формы регламентированного отчёта + SRRPCONFSCTN out varchar2, -- Код раздела + SRRPCONFSCTNMRK out varchar2 -- Код показателя раздела + ) + is + NVERSION PKG_STD.TREF := GET_SESSION_VERSION(SUNITCODE => 'RRPConfig'); -- Версия раздела + begin + select R.CODE, + RS.CODE, + RSM.CODE + into SRRPCONF, + SRRPCONFSCTN, + SRRPCONFSCTNMRK + from RRPCONF R, + RRPCONFSCTN RS, + RRPCONFSCTNMRK RSM + where R.RN in (select RRPCONF + from RRPCONFSCTNMRK + where RN = NRN + and VERSION = NVERSION) + and RS.RN in (select PRN + from RRPCONFSCTNMRK + where RN = NRN + and VERSION = NVERSION) + and RSM.RN = NRN; + exception + when NO_DATA_FOUND then + P_EXCEPTION(0, 'По выбранному показателю раздела не найдено данных.'); + when TOO_MANY_ROWS then + P_EXCEPTION(0, + 'По выбранному показателю раздела найдено несколько записей.'); + end RRPCONFSCTNMRK_GET_CODES; + + /* Добавление показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_INSERT + ( + NPRN in number, -- Ид. раздела + SCODE in varchar2, -- Мнемокод показателя раздела + SNAME in varchar2, -- Наименование показателя раздела + SCOLCODE in varchar2, -- Мнемокод графы + SCOLVER in varchar2, -- Мнемокод редакции графы + SROWCODE in varchar2, -- Мнемокод строки + SROWVER in varchar2, -- Мнемокод редакции строки + NRN out number -- Ид. созданной записи + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NCOUNT PKG_STD.TNUMBER; -- Счётчик показателей раздела + begin + NCOUNT := F_RRPCONFSCTNMRK_NEXT_NUMB(NCOMPANY => NCOMPANY, NPRN => NPRN); + P_RRPCONFSCTNMRK_INSERT(NCOMPANY => NCOMPANY, + NPRN => NPRN, + NNUMB => NCOUNT, + SCODE => SCODE, + SNAME => SNAME, + SRRPROW => SROWCODE, + SRRPVERSION_ROW => SROWVER, + SRRPCOLUMN => SCOLCODE, + SRRPVERSION_COLUMN => SCOLVER, + SPKG_ROW => null, + SPRC_ROW => null, + SPKG_COL => null, + SPRC_COL => null, + SRRPPRM => null, + NIGNORE_ZOOM => 0, + NIGNORE_SHARP => 0, + SCLSF_CODE => null, + SNOTE => null, + NDUP_RN => null, + NRN => NRN); + end RRPCONFSCTNMRK_INSERT; + + /* Исправление показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_UPDATE + ( + NRN in number, -- Ид. показателя раздела + SNAME in varchar2 -- Новое наименование + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + RESSCTNMRK RRPCONFSCTNMRK%rowtype; -- Запись настройки показателя регламентированного отчета + RESROW RRPROW%rowtype; -- Запись строки регламентированного отчета + RESCOLUMN RRPCOLUMN%rowtype; -- Запись графы регламентированного отчета + SROWVER PKG_STD.TSTRING; -- Мнемокод редакции строки + SCOLVER PKG_STD.TSTRING; -- Мнемокод редакции графы + begin + /* Получение записи параметра раздела */ + RESSCTNMRK := GET_RRPCONFSCTNMRK_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => NRN); + /* Получение записи строки */ + RESROW := GET_RRPROW_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPROW); + /* Получение записи графы */ + RESCOLUMN := GET_RRPCOLUMN_ID(NFLAG_SMART => 0, NCOMPANY => NCOMPANY, NRN => RESSCTNMRK.RRPCOLUMN); + /* Получение мнемокода редакции строки */ + SROWVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESROW.RRPVERSION); + /* Получение мнемокода редакции графы */ + SCOLVER := GET_RRPVERSION_CODE_ID(NFLAG_SMART => 0, NRN => RESCOLUMN.RRPVERSION); + P_RRPCONFSCTNMRK_UPDATE(NRN => NRN, + NCOMPANY => NCOMPANY, + NNUMB => RESSCTNMRK.NUMB, + SCODE => RESSCTNMRK.CODE, + SNAME => SNAME, + SRRPROW => RESROW.CODE, + SRRPVERSION_ROW => SROWVER, + SRRPCOLUMN => RESCOLUMN.CODE, + SRRPVERSION_COLUMN => SCOLVER, + SPKG_ROW => RESSCTNMRK.PKG_ROW, + SPRC_ROW => RESSCTNMRK.PRC_ROW, + SPKG_COL => RESSCTNMRK.PKG_COL, + SPRC_COL => RESSCTNMRK.PRC_COL, + SRRPPRM => RESSCTNMRK.RRPPRM, + NIGNORE_ZOOM => RESSCTNMRK.IGNORE_ZOOM, + NIGNORE_SHARP => RESSCTNMRK.IGNORE_SHARP, + SCLSF_CODE => RESSCTNMRK.CLSF_CODE, + NFORMULA_UPDATE => 0, + SNOTE => RESSCTNMRK.NOTE); + end RRPCONFSCTNMRK_UPDATE; + + /* Удаление показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_DELETE + ( + NRN in number -- Ид. показателя раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + begin + P_RRPCONFSCTNMRK_DELETE(NCOMPANY => NCOMPANY, NRN => NRN); + end RRPCONFSCTNMRK_DELETE; + + /* Формирование кода и наименования показателя раздела регламентированного отчёта */ + procedure RRPCONFSCTNMRK_GET_CODE_NAME + ( + SSCTNCODE in varchar2, -- Мнемокод раздела + SROWCODE in varchar2, -- Мнемокод строки + NROWVER in number, -- Ид. редакции строки + SCOLUMNCODE in varchar2, -- Мнемокод графы + NCOLUMNVER in number, -- Ид. редакции графы + SCODE out varchar2, -- Мнемокод показателя раздела + SNAME out varchar2 -- Наименование показателя раздела + ) + is + NCOMPANY PKG_STD.TREF := GET_SESSION_COMPANY(); -- Рег. номер организации + NROWRN PKG_STD.TREF; -- Ид. строки + NCOLUMNRN PKG_STD.TREF; -- Ид. графы + begin + P_RRPCONFSCTNMRK_MAKE_CODE(SRRPCONFSCTN => SSCTNCODE, + SRRPROW => SROWCODE, + SRRPCOLUMN => SCOLUMNCODE, + SCODE => SCODE); + FIND_RRPROW_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + NRRPVERSION => NROWVER, + SCODE => SROWCODE, + NRN => NROWRN); + FIND_RRPCOLUMN_CODE(NFLAG_SMART => 0, + NFLAG_OPTION => 0, + NCOMPANY => NCOMPANY, + NRRPVERSION => NCOLUMNVER, + SCODE => SCOLUMNCODE, + NRN => NCOLUMNRN); + P_RRPCONFSCTNMRK_MAKE_NAME(NCOMPANY => NCOMPANY, + NRRPROW => NROWRN, + NRRPCOLUMN => NCOLUMNRN, + NCHANGE_NAME => 1, + NCHANGE_NAME_PARENT => 0, + SNAME => SNAME); + end RRPCONFSCTNMRK_GET_CODE_NAME; end PKG_P8PANELS_RRPCONFED; / -- 2.34.1 From cd225b9a77c009d973f96f47bc8da60a9fbe9631 Mon Sep 17 00:00:00 2001 From: davay-popozhe Date: Mon, 22 Jul 2024 14:51:15 +0300 Subject: [PATCH 8/8] - --- dist/p8-panels.js | 71 ++++++++++++++++++++--------------------------- 1 file changed, 30 insertions(+), 41 deletions(-) diff --git a/dist/p8-panels.js b/dist/p8-panels.js index 20d69c6..80b202a 100644 --- a/dist/p8-panels.js +++ b/dist/p8-panels.js @@ -15,7 +15,7 @@ \***********************************/ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { -eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/hooks\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/hooks.js\": \"./app/panels/rrp_conf_editor/hooks.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/iud_form_dialog\": \"./app/panels/rrp_conf_editor/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/iud_form_dialog.js\": \"./app/panels/rrp_conf_editor/iud_form_dialog.js\",\n\t\"./rrp_conf_editor/iud_form_text_field\": \"./app/panels/rrp_conf_editor/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/iud_form_text_field.js\": \"./app/panels/rrp_conf_editor/iud_form_text_field.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/section_tab_panel\": \"./app/panels/rrp_conf_editor/section_tab_panel.js\",\n\t\"./rrp_conf_editor/section_tab_panel.js\": \"./app/panels/rrp_conf_editor/section_tab_panel.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); +eval("var map = {\n\t\"./dummy\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/dummy\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/dummy.js\": \"./app/panels/dummy/dummy.js\",\n\t\"./dummy/index\": \"./app/panels/dummy/index.js\",\n\t\"./dummy/index.js\": \"./app/panels/dummy/index.js\",\n\t\"./eqs_prfrm\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/eqs_prfrm\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/eqs_prfrm.js\": \"./app/panels/eqs_prfrm/eqs_prfrm.js\",\n\t\"./eqs_prfrm/filter\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter.js\": \"./app/panels/eqs_prfrm/filter.js\",\n\t\"./eqs_prfrm/filter_dialog\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_dialog.js\": \"./app/panels/eqs_prfrm/filter_dialog.js\",\n\t\"./eqs_prfrm/filter_input_field\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/filter_input_field.js\": \"./app/panels/eqs_prfrm/filter_input_field.js\",\n\t\"./eqs_prfrm/index\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/index.js\": \"./app/panels/eqs_prfrm/index.js\",\n\t\"./eqs_prfrm/layouts\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./eqs_prfrm/layouts.js\": \"./app/panels/eqs_prfrm/layouts.js\",\n\t\"./mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plan_detail.js\": \"./app/panels/mech_rec_assembly_mon/components/plan_detail.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/plans_list_item.js\": \"./app/panels/mech_rec_assembly_mon/components/plans_list_item.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/components/progress_box.js\": \"./app/panels/mech_rec_assembly_mon/components/progress_box.js\",\n\t\"./mech_rec_assembly_mon/hooks\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/hooks.js\": \"./app/panels/mech_rec_assembly_mon/hooks.js\",\n\t\"./mech_rec_assembly_mon/index\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/index.js\": \"./app/panels/mech_rec_assembly_mon/index.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/mech_rec_assembly_mon.js\": \"./app/panels/mech_rec_assembly_mon/mech_rec_assembly_mon.js\",\n\t\"./mech_rec_assembly_mon/styles/themes\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_assembly_mon/styles/themes.js\": \"./app/panels/mech_rec_assembly_mon/styles/themes.js\",\n\t\"./mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/backend\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/backend.js\": \"./app/panels/mech_rec_cost_jobs_manage/backend.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/fcjobssp.js\": \"./app/panels/mech_rec_cost_jobs_manage/fcjobssp.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/hooks.js\": \"./app/panels/mech_rec_cost_jobs_manage/hooks.js\",\n\t\"./mech_rec_cost_jobs_manage/index\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/index.js\": \"./app/panels/mech_rec_cost_jobs_manage/index.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\": \"./app/panels/mech_rec_cost_jobs_manage/mech_rec_cost_jobs_manage.js\",\n\t\"./mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/backend_dg.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/backend_dg.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcdeliverylistsp.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/fcroutlst.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/fcroutlst.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/goodparties.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/goodparties.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\": \"./app/panels/mech_rec_cost_prod_plans/datagrids/incomefromdeps.js\",\n\t\"./mech_rec_cost_prod_plans/hooks\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_cost_prod_plans/index\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/index.js\": \"./app/panels/mech_rec_cost_prod_plans/index.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\": \"./app/panels/mech_rec_cost_prod_plans/mech_rec_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/index.js\": \"./app/panels/mech_rec_dept_cost_jobs/index.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\": \"./app/panels/mech_rec_dept_cost_jobs/mech_rec_dept_cost_jobs.js\",\n\t\"./mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlst.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlst.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/fcroutlstsp.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/fcroutlstsp.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/hooks.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/hooks.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/incomefromdeps.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/incomefromdeps.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/index.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/index.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\": \"./app/panels/mech_rec_dept_cost_prod_plans/mech_rec_dept_cost_prod_plans.js\",\n\t\"./prj_fin\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/index.js\": \"./app/panels/prj_fin/index.js\",\n\t\"./prj_fin/layouts\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/layouts.js\": \"./app/panels/prj_fin/layouts.js\",\n\t\"./prj_fin/prj_fin\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/prj_fin.js\": \"./app/panels/prj_fin/prj_fin.js\",\n\t\"./prj_fin/projects\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/projects.js\": \"./app/panels/prj_fin/projects.js\",\n\t\"./prj_fin/stage_arts\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_arts.js\": \"./app/panels/prj_fin/stage_arts.js\",\n\t\"./prj_fin/stage_contracts\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stage_contracts.js\": \"./app/panels/prj_fin/stage_contracts.js\",\n\t\"./prj_fin/stages\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_fin/stages.js\": \"./app/panels/prj_fin/stages.js\",\n\t\"./prj_graph\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/index.js\": \"./app/panels/prj_graph/index.js\",\n\t\"./prj_graph/layouts\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/layouts.js\": \"./app/panels/prj_graph/layouts.js\",\n\t\"./prj_graph/prj_graph\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_graph/prj_graph.js\": \"./app/panels/prj_graph/prj_graph.js\",\n\t\"./prj_help\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/img/211.png\": \"./app/panels/prj_help/img/211.png\",\n\t\"./prj_help/img/212.png\": \"./app/panels/prj_help/img/212.png\",\n\t\"./prj_help/img/213.png\": \"./app/panels/prj_help/img/213.png\",\n\t\"./prj_help/img/214.png\": \"./app/panels/prj_help/img/214.png\",\n\t\"./prj_help/img/215.png\": \"./app/panels/prj_help/img/215.png\",\n\t\"./prj_help/img/221.png\": \"./app/panels/prj_help/img/221.png\",\n\t\"./prj_help/img/222.png\": \"./app/panels/prj_help/img/222.png\",\n\t\"./prj_help/img/223.png\": \"./app/panels/prj_help/img/223.png\",\n\t\"./prj_help/img/231.png\": \"./app/panels/prj_help/img/231.png\",\n\t\"./prj_help/img/232.png\": \"./app/panels/prj_help/img/232.png\",\n\t\"./prj_help/img/241.png\": \"./app/panels/prj_help/img/241.png\",\n\t\"./prj_help/img/242.png\": \"./app/panels/prj_help/img/242.png\",\n\t\"./prj_help/img/243.png\": \"./app/panels/prj_help/img/243.png\",\n\t\"./prj_help/img/244.png\": \"./app/panels/prj_help/img/244.png\",\n\t\"./prj_help/img/245.png\": \"./app/panels/prj_help/img/245.png\",\n\t\"./prj_help/img/31.png\": \"./app/panels/prj_help/img/31.png\",\n\t\"./prj_help/img/32.png\": \"./app/panels/prj_help/img/32.png\",\n\t\"./prj_help/img/33.png\": \"./app/panels/prj_help/img/33.png\",\n\t\"./prj_help/img/34.png\": \"./app/panels/prj_help/img/34.png\",\n\t\"./prj_help/img/35.png\": \"./app/panels/prj_help/img/35.png\",\n\t\"./prj_help/img/36.png\": \"./app/panels/prj_help/img/36.png\",\n\t\"./prj_help/img/411.png\": \"./app/panels/prj_help/img/411.png\",\n\t\"./prj_help/img/412.png\": \"./app/panels/prj_help/img/412.png\",\n\t\"./prj_help/img/421.png\": \"./app/panels/prj_help/img/421.png\",\n\t\"./prj_help/img/422.png\": \"./app/panels/prj_help/img/422.png\",\n\t\"./prj_help/img/431.png\": \"./app/panels/prj_help/img/431.png\",\n\t\"./prj_help/img/432.png\": \"./app/panels/prj_help/img/432.png\",\n\t\"./prj_help/img/433.png\": \"./app/panels/prj_help/img/433.png\",\n\t\"./prj_help/img/434.png\": \"./app/panels/prj_help/img/434.png\",\n\t\"./prj_help/img/441.png\": \"./app/panels/prj_help/img/441.png\",\n\t\"./prj_help/img/442.png\": \"./app/panels/prj_help/img/442.png\",\n\t\"./prj_help/img/443.png\": \"./app/panels/prj_help/img/443.png\",\n\t\"./prj_help/img/444.png\": \"./app/panels/prj_help/img/444.png\",\n\t\"./prj_help/img/451.png\": \"./app/panels/prj_help/img/451.png\",\n\t\"./prj_help/img/461.png\": \"./app/panels/prj_help/img/461.png\",\n\t\"./prj_help/img/471.png\": \"./app/panels/prj_help/img/471.png\",\n\t\"./prj_help/img/711.png\": \"./app/panels/prj_help/img/711.png\",\n\t\"./prj_help/img/721.png\": \"./app/panels/prj_help/img/721.png\",\n\t\"./prj_help/img/722.png\": \"./app/panels/prj_help/img/722.png\",\n\t\"./prj_help/img/723.png\": \"./app/panels/prj_help/img/723.png\",\n\t\"./prj_help/img/741.png\": \"./app/panels/prj_help/img/741.png\",\n\t\"./prj_help/index\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/index.js\": \"./app/panels/prj_help/index.js\",\n\t\"./prj_help/prj_help\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_help/prj_help.js\": \"./app/panels/prj_help/prj_help.js\",\n\t\"./prj_jobs\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/index.js\": \"./app/panels/prj_jobs/index.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_fact_rpt_dtl.js\": \"./app/panels/prj_jobs/lab_fact_rpt_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_fot_dtl.js\": \"./app/panels/prj_jobs/lab_plan_fot_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/lab_plan_jobs_dtl.js\": \"./app/panels/prj_jobs/lab_plan_jobs_dtl.js\",\n\t\"./prj_jobs/layouts\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/layouts.js\": \"./app/panels/prj_jobs/layouts.js\",\n\t\"./prj_jobs/prj_jobs\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/prj_jobs.js\": \"./app/panels/prj_jobs/prj_jobs.js\",\n\t\"./prj_jobs/res_mon\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./prj_jobs/res_mon.js\": \"./app/panels/prj_jobs/res_mon.js\",\n\t\"./rrp_conf_editor\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/custom_dialog\": \"./app/panels/rrp_conf_editor/custom_dialog.js\",\n\t\"./rrp_conf_editor/custom_dialog.js\": \"./app/panels/rrp_conf_editor/custom_dialog.js\",\n\t\"./rrp_conf_editor/custom_form_control\": \"./app/panels/rrp_conf_editor/custom_form_control.js\",\n\t\"./rrp_conf_editor/custom_form_control.js\": \"./app/panels/rrp_conf_editor/custom_form_control.js\",\n\t\"./rrp_conf_editor/custom_tab_panel\": \"./app/panels/rrp_conf_editor/custom_tab_panel.js\",\n\t\"./rrp_conf_editor/custom_tab_panel.js\": \"./app/panels/rrp_conf_editor/custom_tab_panel.js\",\n\t\"./rrp_conf_editor/index\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/index.js\": \"./app/panels/rrp_conf_editor/index.js\",\n\t\"./rrp_conf_editor/layouts\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/layouts.js\": \"./app/panels/rrp_conf_editor/layouts.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./rrp_conf_editor/rrp_conf_editor.js\": \"./app/panels/rrp_conf_editor/rrp_conf_editor.js\",\n\t\"./samples\": \"./app/panels/samples/index.js\",\n\t\"./samples/\": \"./app/panels/samples/index.js\",\n\t\"./samples/chart\": \"./app/panels/samples/chart.js\",\n\t\"./samples/chart.js\": \"./app/panels/samples/chart.js\",\n\t\"./samples/data_grid\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/data_grid.js\": \"./app/panels/samples/data_grid.js\",\n\t\"./samples/gantt\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/gantt.js\": \"./app/panels/samples/gantt.js\",\n\t\"./samples/index\": \"./app/panels/samples/index.js\",\n\t\"./samples/index.js\": \"./app/panels/samples/index.js\",\n\t\"./samples/loader\": \"./app/panels/samples/loader.js\",\n\t\"./samples/loader.js\": \"./app/panels/samples/loader.js\",\n\t\"./samples/messages\": \"./app/panels/samples/messages.js\",\n\t\"./samples/messages.js\": \"./app/panels/samples/messages.js\",\n\t\"./samples/mui\": \"./app/panels/samples/mui.js\",\n\t\"./samples/mui.js\": \"./app/panels/samples/mui.js\",\n\t\"./samples/p8online\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/p8online.js\": \"./app/panels/samples/p8online.js\",\n\t\"./samples/samples\": \"./app/panels/samples/samples.js\",\n\t\"./samples/samples.js\": \"./app/panels/samples/samples.js\",\n\t\"./samples/svg\": \"./app/panels/samples/svg.js\",\n\t\"./samples/svg.js\": \"./app/panels/samples/svg.js\"\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = \"./app/panels sync recursive ^\\\\.\\\\/.*$\";\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/_sync_^\\.\\/.*$?"); /***/ }), @@ -4474,14 +4474,36 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/rrp_conf_editor/hooks.js": -/*!*********************************************!*\ - !*** ./app/panels/rrp_conf_editor/hooks.js ***! - \*********************************************/ +/***/ "./app/panels/rrp_conf_editor/custom_dialog.js": +/*!*****************************************************!*\ + !*** ./app/panels/rrp_conf_editor/custom_dialog.js ***! + \*****************************************************/ /***/ ((__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 */ 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/*\r\n Парус 8 - Панели мониторинга - Редактор настройки регламентированного отчёта\r\n Пользовательские хуки\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n\n//-----------\n//Тело модуля\n//-----------\n\n//Хук для отработки изменений ширины и высоты рабочей области окна\nconst useWindowResize = () => {\n //Состояние размера рабочей области\n const [size, setSize] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([0, 0]);\n //При изменении размера\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(() => {\n function 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 return size;\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 */ CustomDialog: () => (/* binding */ CustomDialog)\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 _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.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/DialogContent/DialogContent.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/DialogActions/DialogActions.js\");\n/* harmony import */ var _custom_form_control__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./custom_form_control */ \"./app/panels/rrp_conf_editor/custom_form_control.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/*\r\n Кастомный Dialog\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Кастомные строки ввода\n //Статусы и стили диалогового окна\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomDialog = props => {\n const {\n formOpen,\n closeForm,\n curStatus,\n curCode,\n curName,\n curColCode,\n curRowCode,\n btnOkClick,\n codeOnChange,\n nameOnChange,\n dictColumnClick,\n dictRowClick\n } = props;\n\n //Формирование заголовка диалогового окна\n const formTitle = () => {\n switch (curStatus) {\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.CREATE:\n return \"Добавление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.EDIT:\n return \"Исправление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE:\n return \"Удаление раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE:\n return \"Добавление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT:\n return \"Исправление показателя раздела\";\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE:\n return \"Удаление показателя раздела\";\n }\n };\n\n //Отрисовка диалогового окна\n const renderSwitch = () => {\n var btnText = \"\";\n switch (curStatus) {\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.CREATE:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE:\n btnText = \"Добавить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.EDIT:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT:\n btnText = \"Исправить\";\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE:\n case _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE:\n btnText = \"Удалить\";\n break;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"contained\",\n onClick: btnOkClick\n }, btnText);\n };\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n open: formOpen,\n onClose: closeForm\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], null, formTitle()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: closeForm,\n sx: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n }\n }, /*#__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_8__[\"default\"], null, curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE || curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_DELETE ? curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.DELETE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B \", curName, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \", curName, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, curStatus != _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_EDIT ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"code\",\n elementValue: curCode,\n labelText: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n changeFunc: codeOnChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"name\",\n elementValue: curName,\n labelText: \"\\u041D\\u0430\\u0438\\u043C\\u0435\\u043D\\u043E\\u0432\\u0430\\u043D\\u0438\\u0435\",\n changeFunc: nameOnChange\n }), curStatus == _layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses.COLUMNROW_CREATE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"column\",\n elementValue: curColCode,\n labelText: \"\\u0413\\u0440\\u0430\\u0444\\u0430\",\n changeFunc: dictColumnClick,\n withDictionary: true\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_form_control__WEBPACK_IMPORTED_MODULE_1__.CustomFormControl, {\n elementCode: \"row\",\n elementValue: curRowCode,\n labelText: \"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\",\n changeFunc: dictRowClick,\n withDictionary: true\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_2__.STYLES.PADDING_DIALOG_BUTTONS_RIGHT\n }, renderSwitch(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n variant: \"contained\",\n onClick: closeForm\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\nCustomDialog.propTypes = {\n formOpen: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().bool).isRequired,\n closeForm: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n curStatus: prop_types__WEBPACK_IMPORTED_MODULE_11___default().oneOf(Object.values(_layouts__WEBPACK_IMPORTED_MODULE_2__.Statuses).filter(x => typeof x === \"number\")),\n curCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curName: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curColCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n curRowCode: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().string),\n btnOkClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n codeOnChange: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n nameOnChange: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n dictColumnClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired,\n dictRowClick: (prop_types__WEBPACK_IMPORTED_MODULE_11___default().func).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_dialog.js?"); + +/***/ }), + +/***/ "./app/panels/rrp_conf_editor/custom_form_control.js": +/*!***********************************************************!*\ + !*** ./app/panels/rrp_conf_editor/custom_form_control.js ***! + \***********************************************************/ +/***/ ((__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 */ CustomFormControl: () => (/* binding */ CustomFormControl)\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_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/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/OutlinedInput/OutlinedInput.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.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 _layouts__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Кастомный FormControl\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n //Стили диалогового окна\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomFormControl = props => {\n const {\n elementCode,\n elementValue,\n labelText,\n changeFunc,\n withDictionary,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], _extends({\n sx: _layouts__WEBPACK_IMPORTED_MODULE_1__.STYLES.DIALOG_WINDOW_WIDTH\n }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n htmlFor: `${elementCode}-outlined`\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n id: `${elementCode}-outlined`,\n value: elementValue ? elementValue : \"\",\n onChange: !withDictionary ? e => changeFunc(e.target.value) : null,\n \"aria-describedby\": `${elementCode}-outlined-helper-text`,\n label: labelText,\n endAdornment: withDictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: changeFunc,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_8__[\"default\"], null, \"list\"))) : null\n })));\n};\nCustomFormControl.propTypes = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n elementValue: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().string).isRequired,\n changeFunc: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().func).isRequired,\n withDictionary: (prop_types__WEBPACK_IMPORTED_MODULE_9___default().bool)\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_form_control.js?"); + +/***/ }), + +/***/ "./app/panels/rrp_conf_editor/custom_tab_panel.js": +/*!********************************************************!*\ + !*** ./app/panels/rrp_conf_editor/custom_tab_panel.js ***! + \********************************************************/ +/***/ ((__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 */ CustomTabPanel: () => (/* binding */ CustomTabPanel)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Кастомный Tab\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//-----------\n//Тело модуля\n//-----------\n\nconst CustomTabPanel = props => {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `simple-tabpanel-${index}`,\n \"aria-labelledby\": `simple-tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], null, children)));\n};\nCustomTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/custom_tab_panel.js?"); /***/ }), @@ -4496,28 +4518,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac /***/ }), -/***/ "./app/panels/rrp_conf_editor/iud_form_dialog.js": -/*!*******************************************************!*\ - !*** ./app/panels/rrp_conf_editor/iud_form_dialog.js ***! - \*******************************************************/ -/***/ ((__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 */ IUDFormDialog: () => (/* binding */ IUDFormDialog),\n/* harmony export */ STATUSES: () => (/* binding */ STATUSES)\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_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Dialog/Dialog.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/DialogTitle/DialogTitle.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/DialogContent/DialogContent.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_10__ = __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/DialogActions/DialogActions.js\");\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 _iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./iud_form_text_field */ \"./app/panels/rrp_conf_editor/iud_form_text_field.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 STYLES = {\n CLOSE_BUTTON: {\n position: \"absolute\",\n right: 8,\n top: 8,\n color: theme => theme.palette.grey[500]\n },\n PADDING_DIALOG_BUTTONS_RIGHT: {\n paddingRight: \"32px\"\n }\n};\n\n//Статусы диалогового окна\nconst STATUSES = {\n CREATE: 0,\n EDIT: 1,\n DELETE: 2,\n RRPCONFSCTNMRK_CREATE: 3,\n RRPCONFSCTNMRK_EDIT: 4,\n RRPCONFSCTNMRK_DELETE: 5\n};\n\n//---------------\n//Тело компонента\n//---------------\n\nconst IUDFormDialog = ({\n initial,\n onClose,\n onReload\n}) => {\n //Собственное состояние\n const [formData, setFormData] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({\n ...initial\n });\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 executeStored\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_backend__WEBPACK_IMPORTED_MODULE_2__[\"BackEndСtx\"]);\n\n //При закрытии диалога без изменений\n const handleCancel = () => onClose ? onClose() : null;\n\n //При закрытии диалога с изменениями\n const handleOK = () => {\n if (onClose) {\n changeSections();\n onClose();\n } else null;\n };\n\n //Отработка добавления/изсправления/удаления элемента\n const handleReload = () => {\n if (onReload) {\n onReload();\n } else null;\n };\n\n //При изменении значения элемента\n const handleDialogItemChange = (item, value) => setFormData(pv => ({\n ...pv,\n [item]: value\n }));\n\n //Отработка изменений в разделе или показателе раздела\n const changeSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n switch (formData.status) {\n case STATUSES.CREATE:\n await insertSections();\n break;\n case STATUSES.EDIT:\n await updateSections();\n break;\n case STATUSES.DELETE:\n await deleteSections();\n break;\n case STATUSES.RRPCONFSCTNMRK_CREATE:\n await addRRPCONFSCTNMRK();\n break;\n case STATUSES.RRPCONFSCTNMRK_EDIT:\n await editRRPCONFSCTNMRK();\n break;\n case STATUSES.RRPCONFSCTNMRK_DELETE:\n await deleteRRPCONFSCTNMRK();\n break;\n }\n handleReload();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n //Добавление раздела\n const insertSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_INSERT\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n setFormData(pv => ({\n ...pv,\n rn: Number(data.NRN)\n }));\n }, [formData.prn, formData.code, formData.name, executeStored]);\n\n //Исправление раздела\n const updateSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_UPDATE\",\n args: {\n NRN: formData.rn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n }, [formData.name, formData.code, formData.rn, executeStored]);\n\n //Удаление раздела\n const deleteSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTN_DELETE\",\n args: {\n NRN: formData.rn\n }\n });\n }, [formData.rn, executeStored]);\n\n //Добавление показателя раздела\n const addRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_INSERT\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name,\n SCOLCODE: formData.colCode,\n SCOLVER: formData.colVCode,\n SROWCODE: formData.rowCode,\n SROWVER: formData.rowVCode\n }\n });\n }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);\n\n //Исправление показателя раздела\n const editRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_UPDATE\",\n args: {\n NRN: formData.rn,\n SNAME: formData.name\n }\n });\n }, [executeStored, formData.name, formData.rn]);\n\n //Удаление показателя раздела\n const deleteRRPCONFSCTNMRK = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_DELETE\",\n args: {\n NRN: formData.rn\n }\n });\n }, [executeStored, formData.rn]);\n\n //Формирование заголовка диалогового окна\n const formTitle = () => {\n switch (formData.status) {\n case STATUSES.CREATE:\n return \"Добавление раздела\";\n case STATUSES.EDIT:\n return \"Исправление раздела\";\n case STATUSES.DELETE:\n return \"Удаление раздела\";\n case STATUSES.RRPCONFSCTNMRK_CREATE:\n return \"Добавление показателя раздела\";\n case STATUSES.RRPCONFSCTNMRK_EDIT:\n return \"Исправление показателя раздела\";\n case STATUSES.RRPCONFSCTNMRK_DELETE:\n return \"Удаление показателя раздела\";\n }\n };\n\n //Отрисовка диалогового окна\n const renderSwitch = () => {\n let btnText = \"\";\n switch (formData.status) {\n case STATUSES.CREATE:\n case STATUSES.RRPCONFSCTNMRK_CREATE:\n btnText = \"Добавить\";\n break;\n case STATUSES.EDIT:\n case STATUSES.RRPCONFSCTNMRK_EDIT:\n btnText = \"Исправить\";\n break;\n case STATUSES.DELETE:\n case STATUSES.RRPCONFSCTNMRK_DELETE:\n btnText = \"Удалить\";\n break;\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: () => {\n handleOK({\n formData\n });\n }\n }, btnText);\n };\n\n //Выбор строки\n const selectRow = (showDictionary, callBack) => {\n showDictionary({\n unitCode: \"RRPRow\",\n callBack: res => {\n if (res.success === true) {\n callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);\n setFormData(pv => ({\n ...pv,\n rowCode: res.outParameters.out_CODE,\n rowVCode: res.outParameters.out_RRPVERSION_CODE,\n rowVRn: res.outParameters.out_RRPVERSION\n }));\n } else callBack(null);\n }\n });\n };\n\n //Выбор графы\n const selectColumn = (showDictionary, callBack) => {\n showDictionary({\n unitCode: \"RRPColumn\",\n callBack: res => {\n if (res.success === true) {\n callBack(res.outParameters.out_CODE, res.outParameters.out_RRPVERSION_CODE, res.outParameters.out_RRPVERSION);\n setFormData(pv => ({\n ...pv,\n colCode: res.outParameters.out_CODE,\n colVCode: res.outParameters.out_RRPVERSION_CODE,\n colVRn: res.outParameters.out_RRPVERSION\n }));\n } else callBack(null);\n }\n });\n };\n\n //Получение мнемокода и наименования показателя раздела\n const getSctnMrkCodeName = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODE_NAME\",\n args: {\n SSCTNCODE: formData.sctnCode,\n SROWCODE: formData.rowCode,\n NROWVER: formData.rowVRn,\n SCOLUMNCODE: formData.colCode,\n NCOLUMNVER: formData.colVRn\n }\n });\n setFormData(pv => ({\n ...pv,\n code: data.SCODE,\n name: data.SNAME\n }));\n }, [executeStored, formData.colCode, formData.colVRn, formData.rowCode, formData.rowVRn, formData.sctnCode]);\n\n //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n formData.status == STATUSES.RRPCONFSCTNMRK_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode ? getSctnMrkCodeName() : null;\n }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n open: true,\n onClose: handleCancel\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], null, formTitle()), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], {\n \"aria-label\": \"close\",\n onClick: handleCancel,\n sx: STYLES.CLOSE_BUTTON\n }, /*#__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_9__[\"default\"], null, formData.status == STATUSES.DELETE || formData.status == STATUSES.RRPCONFSCTNMRK_DELETE ? formData.status == STATUSES.DELETE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B \", formData.name, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], null, \"\\u0412\\u044B \\u0445\\u043E\\u0442\\u0438\\u0442\\u0435 \\u0443\\u0434\\u0430\\u043B\\u0438\\u0442\\u044C \\u043F\\u043E\\u043A\\u0430\\u0437\\u0430\\u0442\\u0435\\u043B\\u044C \\u0440\\u0430\\u0437\\u0434\\u0435\\u043B\\u0430 \", formData.name, \"?\") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, formData.status != STATUSES.RRPCONFSCTNMRK_EDIT ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"code\",\n elementValue: formData.code,\n labelText: \"\\u041C\\u043D\\u0435\\u043C\\u043E\\u043A\\u043E\\u0434\",\n onChange: handleDialogItemChange\n }) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"name\",\n elementValue: formData.name,\n labelText: \"\\u041D\\u0430\\u0438\\u043C\\u0435\\u043D\\u043E\\u0432\\u0430\\u043D\\u0438\\u0435\",\n onChange: handleDialogItemChange\n }), formData.status == STATUSES.RRPCONFSCTNMRK_CREATE ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"row\",\n elementValue: formData.rowCode,\n labelText: \"\\u0421\\u0442\\u0440\\u043E\\u043A\\u0430\",\n onChange: handleDialogItemChange,\n dictionary: callBack => selectRow(pOnlineShowDictionary, callBack)\n }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_text_field__WEBPACK_IMPORTED_MODULE_3__.IUDFormTextField, {\n elementCode: \"column\",\n elementValue: formData.colCode,\n labelText: \"\\u0413\\u0440\\u0430\\u0444\\u0430\",\n onChange: handleDialogItemChange,\n dictionary: callBack => selectColumn(pOnlineShowDictionary, callBack)\n })) : null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n sx: STYLES.PADDING_DIALOG_BUTTONS_RIGHT\n }, renderSwitch(), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n onClick: handleCancel\n }, \"\\u041E\\u0442\\u043C\\u0435\\u043D\\u0430\")));\n};\n\n//Контроль свойств - Диалог\nIUDFormDialog.propTypes = {\n initial: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().object).isRequired,\n onClose: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func),\n onReload: (prop_types__WEBPACK_IMPORTED_MODULE_12___default().func)\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/iud_form_dialog.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/iud_form_text_field.js": -/*!***********************************************************!*\ - !*** ./app/panels/rrp_conf_editor/iud_form_text_field.js ***! - \***********************************************************/ -/***/ ((__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 */ IUDFormTextField: () => (/* binding */ IUDFormTextField),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\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_8__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_8__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/FormControl/FormControl.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputLabel/InputLabel.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Input/Input.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/InputAdornment/InputAdornment.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\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\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_WINDOW_WIDTH: {\n width: 400\n }\n};\n\n//---------------\n//Тело компонента\n//---------------\n\nconst IUDFormTextField = ({\n elementCode,\n elementValue,\n labelText,\n onChange,\n dictionary,\n ...other\n}) => {\n //Значение элемента\n const [value, setValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(elementValue);\n\n //При получении нового значения из вне\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n setValue(elementValue);\n }, [elementValue]);\n\n //Выбор значения из словаря\n const handleDictionaryClick = () => dictionary ? dictionary(res => res ? handleChange({\n target: {\n name: elementCode,\n value: res\n }\n }) : null) : null;\n\n //Изменение значения элемента\n const handleChange = e => {\n setValue(e.target.value);\n if (onChange) onChange(e.target.name, e.target.value);\n };\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 1\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], _extends({\n variant: \"standard\",\n sx: STYLES.DIALOG_WINDOW_WIDTH\n }, other), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n htmlFor: elementCode\n }, labelText), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n id: elementCode,\n name: elementCode,\n value: value ? value : \"\",\n endAdornment: dictionary ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n position: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_6__[\"default\"], {\n \"aria-label\": `${elementCode} select`,\n onClick: handleDictionaryClick,\n edge: \"end\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_7__[\"default\"], null, \"list\"))) : null,\n onChange: handleChange,\n multiline: true,\n maxRows: 4\n })));\n};\n\n//Контроль свойств - Поле ввода\nIUDFormTextField.propTypes = {\n elementCode: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n elementValue: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string),\n labelText: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().string).isRequired,\n onChange: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func),\n dictionary: (prop_types__WEBPACK_IMPORTED_MODULE_8___default().func)\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/iud_form_text_field.js?"); - -/***/ }), - /***/ "./app/panels/rrp_conf_editor/layouts.js": /*!***********************************************!*\ !*** ./app/panels/rrp_conf_editor/layouts.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 */ STYLES: () => (/* binding */ STYLES),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Link/Link.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\n//Стили\nconst STYLES = {\n BOX_ROW: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\"\n },\n LINK_STYLE: {\n component: \"button\",\n cursor: \"pointer\",\n width: \"-webkit-fill-available\"\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}, showRrpConfSctnMrk, editCR, deleteCR) => {\n let data = row[columnDef.name];\n columnDef.name != \"SROW_NAME\" && data != undefined && columnDef.visible == true ? data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: STYLES.BOX_ROW\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n sx: STYLES.LINK_STYLE,\n onClick: () => {\n showRrpConfSctnMrk(row[\"NRN_\" + columnDef.name.substring(5)]);\n }\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => editCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n onClick: () => deleteCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))) : null;\n return {\n data\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/layouts.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ STYLES: () => (/* binding */ STYLES),\n/* harmony export */ Statuses: () => (/* binding */ Statuses),\n/* harmony export */ dataCellRender: () => (/* binding */ dataCellRender)\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_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/*\r\n Парус 8 - \r\n Дополнительная разметка и вёрстка клиентских элементов\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n\n//---------\n//Константы\n//---------\n\nconst STYLES = {\n DIALOG_WINDOW_WIDTH: {\n width: 400\n },\n PADDING_DIALOG_BUTTONS_RIGHT: {\n paddingRight: \"32px\"\n }\n};\n\n//Статусы диалогового окна\nconst Statuses = {\n CREATE: 0,\n EDIT: 1,\n DELETE: 2,\n COLUMNROW_CREATE: 3,\n COLUMNROW_EDIT: 4,\n COLUMNROW_DELETE: 5\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Генерация представления ячейки c данными\nconst dataCellRender = ({\n row,\n columnDef\n}, editCR, deleteCR) => {\n let data = row[columnDef.name];\n columnDef.name != \"SROW_NAME\" && data != undefined && columnDef.visible == true ? data = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n width: \"-webkit-fill-available\"\n }, row[columnDef.name]), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n justifyContent: \"flex-end\",\n onClick: () => editCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n justifyContent: \"flex-end\",\n onClick: () => deleteCR(row[\"NRN_\" + columnDef.name.substring(5)], row[columnDef.name])\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_4__[\"default\"], null, \"delete\"))) : null;\n return {\n data\n };\n};\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/layouts.js?"); /***/ }), @@ -4536,18 +4536,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 */ RrpConfEditor: () => (/* binding */ RrpConfEditor),\n/* harmony export */ STYLES: () => (/* binding */ STYLES)\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/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Button/Button.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_application__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _context_backend__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/backend */ \"./app/context/backend.js\");\n/* harmony import */ var _context_navigation__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _context_messaging__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/messaging */ \"./app/context/messaging.js\");\n/* harmony import */ var _section_tab_panel__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./section_tab_panel */ \"./app/panels/rrp_conf_editor/section_tab_panel.js\");\n/* harmony import */ var _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./iud_form_dialog */ \"./app/panels/rrp_conf_editor/iud_form_dialog.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _app_text__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../../app.text */ \"./app.text.js\");\n/* harmony import */ var _hooks__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./hooks */ \"./app/panels/rrp_conf_editor/hooks.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, 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 pxOuterMenuH = 53;\n//Высота заголовка панели (пиксели)\nconst pxPanelHeaderH = 64;\n//Ширина кнопки добавления раздела (пиксели)\nconst pxSectionAddButtonW = 40;\n\n//Стили\nconst STYLES = {\n PANELS_MAIN_COLOR: {\n backgroundColor: \"#1976d2\"\n },\n ICON_WHITE: {\n color: \"white\"\n },\n TABS_BOTTOM_LINE: {\n borderBottom: 1,\n borderColor: \"divider\"\n },\n TABS_PADDING: {\n padding: \"5px\"\n },\n TABS_SIZES: {\n maxHeight: 150\n },\n GRID_PADDING: {\n paddingTop: 1,\n paddingBottom: 1\n },\n GRID_SIZES: {\n padding: 0,\n minWidth: 400,\n minHeight: 300\n }\n};\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор настройки регламентированного отчёта\nconst RrpConfEditor = () => {\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 [rrpDoc, setRrpDoc] = (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 [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\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 rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n };\n\n //Подключение к контексту взаимодействия с сервером\n const {\n executeStored\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_3__[\"ApplicationСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_5__.NavigationCtx);\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 handleSectionChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n //Отработка нажатия на кнопку добавления секции\n const addSectionClick = () => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const editSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const deleteSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const addRRPCONFSCTNMRKClick = (prn, sctnCode, sctnName) => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.RRPCONFSCTNMRK_CREATE,\n prn: prn,\n sctnCode: sctnCode,\n sctnName: sctnName\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const editRRPCONFSCTNMRKClick = (rn, name) => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.RRPCONFSCTNMRK_EDIT,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const deleteRRPCONFSCTNMRKClick = (rn, name) => {\n setFormData({\n status: _iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.STATUSES.RRPCONFSCTNMRK_DELETE,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Формирование разделов\n const a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n };\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpDoc.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = 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 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 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 setRrpDoc(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n setTabValue(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //Отбор показателя раздела по ид.\n const showRrpConfSctnMrk = async rn => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.RRPCONFSCTNMRK_GET_CODES\",\n args: {\n NRN: rn\n }\n });\n if (data) {\n pOnlineShowUnit({\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 });\n } else showMsgErr(_app_text__WEBPACK_IMPORTED_MODULE_10__.TEXTS.NO_DATA_FOUND);\n };\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpDoc.reload, dataGrid.reload, loadData]);\n\n //При изменениях элемента\n const handleDialogReload = () => {\n setRrpDoc(pv => ({\n ...pv,\n reload: true\n }));\n };\n\n //При закрытии диалога\n const handleDialogClose = () => {\n setForm(false);\n clearFormData();\n };\n\n //Состояние ширины и высоты рабочей области окна\n const [width, height] = (0,_hooks__WEBPACK_IMPORTED_MODULE_11__.useWindowResize)();\n\n //Состояние высоты вкладок с разделами\n const [pxTabsH, setPxTabsH] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(0);\n\n //При рендере данных\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n rrpDoc.docLoaded ? setPxTabsH(document.getElementById(\"sectionTabs\").offsetHeight) : null;\n }, [rrpDoc.docLoaded]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, formOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_iud_form_dialog__WEBPACK_IMPORTED_MODULE_8__.IUDFormDialog, {\n initial: formData,\n onClose: handleDialogClose,\n onReload: handleDialogReload\n }) : null, rrpDoc.docLoaded ? /*#__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_13__[\"default\"], {\n direction: \"row\",\n sx: STYLES.TABS_BOTTOM_LINE\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], {\n id: \"sectionTabs\",\n value: tabValue,\n onChange: handleSectionChange,\n variant: \"scrollable\",\n scrollButtons: false,\n visibleScrollbar: true,\n \"aria-label\": \"section tab\",\n sx: {\n ...STYLES.TABS_SIZES,\n maxWidth: width - pxSectionAddButtonW\n }\n }, rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], _extends({\n key: s.rn\n }, a11yProps(i), {\n sx: STYLES.TABS_PADDING,\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: _layouts__WEBPACK_IMPORTED_MODULE_9__.STYLES.BOX_ROW\n }, s.name, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n component: \"span\",\n onClick: () => editSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n component: \"span\",\n onClick: () => deleteSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], null, \"delete\"))),\n wrapped: true\n }));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n sx: STYLES.PANELS_MAIN_COLOR\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n onClick: addSectionClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n sx: STYLES.ICON_WHITE\n }, \"add\")))), rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_section_tab_panel__WEBPACK_IMPORTED_MODULE_7__.SectionTabPanel, {\n key: s.rn,\n value: tabValue,\n index: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n onClick: () => addRRPCONFSCTNMRKClick(s.rn, s.code, s.name)\n }, \"\\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), s.dataLoaded && s.columnsDef.length > 1 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], {\n sx: {\n ...STYLES.GRID_PADDING,\n ..._layouts__WEBPACK_IMPORTED_MODULE_9__.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,\n maxWidth: width * 0.95,\n maxHeight: (height - pxOuterMenuH - pxPanelHeaderH - pxTabsH) * 0.88\n }\n },\n columnsDef: s.columnsDef,\n groups: s.groups,\n rows: s.rows,\n fixedHeader: s.fixedHeader,\n fixedColumns: s.fixedColumns,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: s.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_9__.dataCellRender)({\n ...prms\n }, showRrpConfSctnMrk, editRRPCONFSCTNMRKClick, deleteRRPCONFSCTNMRKClick)\n }))) : null);\n })) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/rrp_conf_editor.js?"); - -/***/ }), - -/***/ "./app/panels/rrp_conf_editor/section_tab_panel.js": -/*!*********************************************************!*\ - !*** ./app/panels/rrp_conf_editor/section_tab_panel.js ***! - \*********************************************************/ -/***/ ((__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 */ SectionTabPanel: () => (/* binding */ SectionTabPanel)\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_3__ = __webpack_require__(/*! prop-types */ \"./node_modules/prop-types/index.js\");\n/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Box/Box.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Typography/Typography.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Панели мониторинга - РО - Редактор настройки регламентированного отчёта\r\n Панель мониторинга: Компонент вкладки раздела \r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Контроль свойств компонента\n //Интерфейсные компоненты\n\n//---------------\n//Тело компонента\n//---------------\n\nconst SectionTabPanel = props => {\n const {\n children,\n value,\n index,\n ...other\n } = props;\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(\"div\", _extends({\n role: \"tabpanel\",\n hidden: value !== index,\n id: `tabpanel-${index}`,\n \"aria-labelledby\": `tab-${index}`\n }, other), value === index && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n sx: {\n p: 3\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n component: \"span\"\n }, children)));\n};\n\n//Контроль свойств - Вкладка раздела\nSectionTabPanel.propTypes = {\n children: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().node),\n index: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired,\n value: (prop_types__WEBPACK_IMPORTED_MODULE_3___default().number).isRequired\n};\n\n//--------------------\n//Интерфейс компонента\n//--------------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/section_tab_panel.js?"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ RrpConfEditor: () => (/* binding */ RrpConfEditor)\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_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/Stack/Stack.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tabs/Tabs.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Tab/Tab.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/IconButton/IconButton.js\");\n/* harmony import */ var _mui_material__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @mui/material */ \"./node_modules/@mui/material/Icon/Icon.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 _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_navigation__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../context/navigation */ \"./app/context/navigation.js\");\n/* harmony import */ var _custom_tab_panel__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./custom_tab_panel */ \"./app/panels/rrp_conf_editor/custom_tab_panel.js\");\n/* harmony import */ var _context_application__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../context/application */ \"./app/context/application.js\");\n/* harmony import */ var _layouts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./layouts */ \"./app/panels/rrp_conf_editor/layouts.js\");\n/* harmony import */ var _custom_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./custom_dialog */ \"./app/panels/rrp_conf_editor/custom_dialog.js\");\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/*\r\n Парус 8 - Редактор настройки регламентированного отчёта\r\n*/\n\n//---------------------\n//Подключение библиотек\n//---------------------\n\n //Классы React\n //Интерфейсные компоненты\n //Таблица данных\n //Подключение компонентов к настройкам приложения\n //Контекст взаимодействия с сервером\n //Контекст навигации\n //Кастомный Tab\n //Контекст приложения\n //Дополнительная разметка и вёрстка клиентских элементов\n //Кастомное диалоговое окно\n\n//-----------\n//Тело модуля\n//-----------\n\n//Редактор настройки регламентированного отчёта\nconst RrpConfEditor = () => {\n const dataGrid = {\n rn: 0,\n code: \"\",\n name: \"\",\n dataLoaded: false,\n columnsDef: [],\n groups: [],\n rows: [],\n reload: false\n };\n\n //Собственное состояние\n const [rrpDoc, setRrpDoc] = (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 [tabValue, setTabValue] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(\"\");\n\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 filled: false,\n rn: \"\",\n prn: \"\",\n sctnName: \"\",\n sctnCode: \"\",\n status: \"\",\n code: \"\",\n name: \"\",\n colName: \"\",\n colCode: \"\",\n colVCode: \"\",\n colVRn: 0,\n rowName: \"\",\n rowCode: \"\",\n rowVCode: \"\",\n rowVRn: 0\n });\n\n //Открытие диалогового окна\n const openForm = () => {\n setForm(true);\n };\n\n //Закрытие диалогового окна\n const closeForm = () => {\n setForm(false);\n };\n\n //Очистка диалогового окна\n const clearFormData = () => {\n setFormData({\n rn: \"\",\n code: \"\",\n name: \"\"\n });\n };\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 pOnlineShowDictionary\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_application__WEBPACK_IMPORTED_MODULE_6__[\"ApplicationСtx\"]);\n\n //Подключение к контексту навигации\n const {\n getNavigationSearch\n } = (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_context_navigation__WEBPACK_IMPORTED_MODULE_4__.NavigationCtx);\n\n //Переключение раздела\n const handleChange = (event, newValue) => {\n setTabValue(newValue);\n };\n\n //Отработка нажатия на кнопку добавления секции\n const addSectionClick = () => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE,\n prn: Number(getNavigationSearch().NRN)\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления секции\n const editSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления секции\n const deleteSectionClick = (rn, code, name) => {\n setFormData({\n rn: rn,\n code: code,\n name: name,\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.DELETE\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку добавления показателя раздела\n const addColumnRowClick = (prn, sctnCode, sctnName) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE,\n prn: prn,\n sctnCode: sctnCode,\n sctnName: sctnName\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку исправления показателя раздела\n const editColumnRowClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на кнопку удаления показателя раздела\n const deleteColumnRowClick = (rn, name) => {\n setFormData({\n status: _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_DELETE,\n rn: rn,\n name: name\n });\n openForm();\n };\n\n //Отработка нажатия на словарь граф\n const dictColumnClick = () => {\n pOnlineShowDictionary({\n unitCode: \"RRPColumn\",\n callBack: res => res.success === true ? setFormData(pv => ({\n ...pv,\n colCode: res.outParameters.out_CODE,\n colVCode: res.outParameters.out_RRPVERSION_CODE,\n colVRn: res.outParameters.out_RRPVERSION\n })) : null\n });\n };\n\n //Отработка нажатия на словарь строк\n const dictRowClick = () => {\n pOnlineShowDictionary({\n unitCode: \"RRPRow\",\n callBack: res => res.success === true ? setFormData(pv => ({\n ...pv,\n rowCode: res.outParameters.out_CODE,\n rowVCode: res.outParameters.out_RRPVERSION_CODE,\n rowVRn: res.outParameters.out_RRPVERSION\n })) : null\n });\n };\n\n //Нажатие на кнопку подтверждения создания/исправления/удаления на форме\n const formBtnOkClick = () => {\n let formStateProps = {};\n if (formData.status === (_layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE)) formStateProps = {\n ...formStateProps,\n code: document.querySelector(\"#code-outlined\").value\n };\n if (formData.status === (_layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE || _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT)) formStateProps = {\n ...formStateProps,\n name: document.querySelector(\"#name-outlined\").value\n };\n setFormData(pv => ({\n ...pv,\n ...formStateProps,\n filled: true\n }));\n closeForm();\n };\n\n //Формирование разделов\n const a11yProps = index => {\n return {\n id: `simple-tab-${index}`,\n \"aria-controls\": `simple-tabpanel-${index}`\n };\n };\n\n //Отработка изменений в разделе или показателе раздела\n const changeSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (formData.filled) {\n switch (formData.status) {\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.CREATE:\n insertSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.EDIT:\n updateSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.DELETE:\n deleteSections();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE:\n addColumnRow();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_EDIT:\n editColumnRow();\n clearFormData();\n break;\n case _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_DELETE:\n deleteColumnRow();\n clearFormData();\n break;\n }\n setRrpDoc(pv => ({\n ...pv,\n reload: true\n }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [formData]);\n\n //Добавление раздела\n const insertSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_SECTIONS\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n setFormData(pv => ({\n ...pv,\n rn: Number(data.NRN)\n }));\n }, [formData.prn, formData.code, formData.name, executeStored]);\n\n //Исправление раздела\n const updateSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_SECTIONS\",\n args: {\n NRN: formData.rn,\n SCODE: formData.code,\n SNAME: formData.name\n }\n });\n }, [formData.name, formData.code, formData.rn, executeStored]);\n\n //Удаление раздела\n const deleteSections = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_SECTIONS\",\n args: {\n NRN: formData.rn\n }\n });\n }, [formData.rn, executeStored]);\n\n //Добавление показателя раздела\n const addColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.INSERT_RRPCONF_COLUMNROW\",\n args: {\n NPRN: formData.prn,\n SCODE: formData.code,\n SNAME: formData.name,\n SCOLCODE: formData.colCode,\n SCOLVER: formData.colVCode,\n SROWCODE: formData.rowCode,\n SROWVER: formData.rowVCode\n }\n });\n }, [executeStored, formData.code, formData.colVCode, formData.colCode, formData.name, formData.prn, formData.rowCode, formData.rowVCode]);\n\n //Исправление показателя раздела\n const editColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.UPDATE_RRPCONF_COLUMNROW\",\n args: {\n NRN: formData.rn,\n SNAME: formData.name\n }\n });\n }, [executeStored, formData.name, formData.rn]);\n\n //Удаление показателя раздела\n const deleteColumnRow = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.DELETE_RRPCONF_COLUMNROW\",\n args: {\n NRN: formData.rn\n }\n });\n }, [executeStored, formData.rn]);\n\n //Получение мнемокода и наименования показателя раздела\n const getSctnMrkCodeName = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONFSCTNMRK_CODE_NAME\",\n args: {\n SSCTNCODE: formData.sctnCode,\n SROWCODE: formData.rowCode,\n SCOLUMNCODE: formData.colCode\n }\n });\n setFormData(pv => ({\n ...pv,\n code: data.SCODE,\n name: data.SNAME\n }));\n }, [executeStored, formData.colCode, formData.rowCode, formData.sctnCode]);\n\n //Загрузка данных разделов регламентированного отчёта\n const loadData = (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(async () => {\n if (rrpDoc.reload) {\n //Переменная номера раздела с фокусом\n let tabFocus = 0;\n const data = await executeStored({\n stored: \"PKG_P8PANELS_RRPCONFED.GET_RRPCONF_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.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 dataLoaded: true,\n columnsDef: [...(s.XDATA.XCOLUMNS_DEF || [])],\n groups: [...(s.XDATA.XGROUPS || [])],\n rows: [...(s.XDATA.XROWS || [])],\n reload: false\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 tabFocus = curIndex - 1;\n });\n setRrpDoc(pv => ({\n ...pv,\n docLoaded: true,\n reload: false,\n sections: dataGrids\n }));\n setTabValue(tabFocus);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rrpDoc.reload, rrpDoc.docLoaded, dataGrid.reload, dataGrid.docLoaded, executeStored]);\n\n //При необходимости обновить данные таблицы\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n loadData();\n }, [rrpDoc.reload, dataGrid.reload, loadData]);\n\n //Обновление при изменении разделов\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n changeSections();\n }, [changeSections]);\n\n //Получение наименования и мнемокода показателя раздела при заполнении необходимых полей\n (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {\n formData.status == _layouts__WEBPACK_IMPORTED_MODULE_7__.Statuses.COLUMNROW_CREATE && formData.sctnName && formData.sctnCode && formData.colCode && formData.rowCode ? getSctnMrkCodeName() : null;\n }, [formData.colCode, formData.rowCode, formData.sctnCode, formData.sctnName, formData.status, getSctnMrkCodeName]);\n\n //Генерация содержимого\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n width: \"100%\"\n }\n }, formOpen ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_dialog__WEBPACK_IMPORTED_MODULE_8__.CustomDialog, {\n formOpen: formOpen,\n closeForm: closeForm,\n curStatus: formData.status,\n curCode: formData.code,\n curName: formData.name,\n curColCode: formData.colCode,\n curRowCode: formData.rowCode,\n btnOkClick: formBtnOkClick,\n codeOnChange: v => setFormData(pv => ({\n ...pv,\n code: v\n })),\n nameOnChange: v => setFormData(pv => ({\n ...pv,\n name: v\n })),\n dictColumnClick: dictColumnClick,\n dictRowClick: dictRowClick\n }) : null, rrpDoc.docLoaded ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n sx: {\n borderBottom: 1,\n borderColor: \"divider\"\n }\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\"\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_11__[\"default\"], {\n value: tabValue,\n onChange: handleChange,\n \"aria-label\": \"section tab\"\n }, rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_12__[\"default\"], _extends({\n key: s.rn\n }, a11yProps(i), {\n label: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {\n direction: \"row\",\n textAlign: \"center\"\n }, s.name, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => editSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"edit\")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: () => deleteSectionClick(s.rn, s.code, s.name)\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"delete\"))),\n wrapped: true\n }));\n })), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_13__[\"default\"], {\n onClick: addSectionClick\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_14__[\"default\"], null, \"add\"))), rrpDoc.sections.map((s, i) => {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_custom_tab_panel__WEBPACK_IMPORTED_MODULE_5__.CustomTabPanel, {\n key: s.rn,\n value: tabValue,\n index: i\n }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_mui_material__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n variant: \"contained\",\n onClick: () => addColumnRowClick(s.rn, s.code, s.name)\n }, \"+ \\u0414\\u043E\\u0431\\u0430\\u0432\\u0438\\u0442\\u044C\"), s.dataLoaded ? /*#__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 columnsDef: s.columnsDef,\n groups: s.groups,\n rows: s.rows,\n size: _components_p8p_data_grid__WEBPACK_IMPORTED_MODULE_1__.P8P_DATA_GRID_SIZE.LARGE,\n reloading: s.reload,\n dataCellRender: prms => (0,_layouts__WEBPACK_IMPORTED_MODULE_7__.dataCellRender)({\n ...prms\n }, editColumnRowClick, deleteColumnRowClick)\n })) : null);\n })) : null);\n};\n\n//----------------\n//Интерфейс модуля\n//----------------\n\n\n\n//# sourceURL=webpack://parus_8_panels_plugin/./app/panels/rrp_conf_editor/rrp_conf_editor.js?"); /***/ }), -- 2.34.1