/*
Парус 8 - Панели мониторинга - ПУП - Производственный план цеха
Компонент панели: Таблица маршрутных листов
*/
//---------------------
//Подключение библиотек
//---------------------
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 { CostRouteListsSpecsDataGrid } from "./fcroutlstsp"; //Состояние таблицы заказов маршрутных листов
import { useCostRouteLists } from "./hooks.js"; //Хук состояния таблицы маршрутных листов
//---------
//Константы
//---------
//Стили
const STYLES = {
CONTAINER: { textAlign: "center" },
TABLE: { paddingTop: "15px" },
DIALOG_BUTTONS: { marginTop: "10px", width: "240px" }
};
//---------------------------------------------
//Вспомогательные функции и компоненты
//---------------------------------------------
//Генерация представления расширения строки
export const rowExpandRender = ({ row }) => {
return (
);
};
//Форматирование значений колонок
const dataCellRender = ({ row, columnDef, handlePriorEditOpen }) => {
//Если колонка "Приоритет партии"
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 [state, setState] = useState(initPrior);
//При закрытии изменения приоритета партии
const handlePriorEditClose = () => {
setCostRouteLists(pv => ({ ...pv, editPriorNRN: null }));
};
//При нажатии на изменение приоритета партии
const handlePriorChange = () => {
//Асинхронное изменение
const asyncChange = async (NRN, PriorValue, rows) => {
try {
await executeStored({
stored: "PKG_P8PANELS_MECHREC.FCROUTLST_PRIOR_PARTY_UPDATE",
args: { NFCROUTLST: NRN, SPRIOR_PARTY: PriorValue }
});
//Изменяем значение приоритета у нужного
rows[rows.findIndex(obj => obj.NRN == NRN)].NPRIOR_PARTY = PriorValue;
//Актуализируем строки таблицы
setCostRouteLists(pv => ({ ...pv, rows: rows }));
//Закрываем окно
handlePriorEditClose();
} catch (e) {
throw new Error(e.message);
}
};
//Изменяем значение
asyncChange(costRouteLists.editPriorNRN, state, costRouteLists.rows);
};
return (
);
};
//Контроль свойств - Диалог с изменением приоритета маршрутного листа
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 }));
};
//Генерация содержимого
return (
В производстве
{costRouteLists.dataLoaded ? (
<>
dataCellRender({ ...prms, handlePriorEditOpen })}
/>
>
) : null}
{costRouteLists.editPriorNRN ? (
) : null}
);
};
//Контроль свойств - Таблица маршрутных листов
CostRouteListsDataGrid.propTypes = {
task: PropTypes.number.isRequired
};
//Диалог с таблицей сдачи продукции
const CostRouteListsDataGridDialog = ({ task, onClose }) => {
return (
);
};
//Контроль свойств - Диалог с таблицей маршрутных листов
CostRouteListsDataGridDialog.propTypes = {
task: PropTypes.number.isRequired,
onClose: PropTypes.func
};
//----------------
//Интерфейс модуля
//----------------
export { CostRouteListsDataGridDialog };