/*
Парус 8 - Панели мониторинга - ПУП - Производственный план цеха
Компонент панели: Таблица маршрутных листов
*/
//---------------------
//Подключение библиотек
//---------------------
import React, { useState, useCallback, useEffect, useContext } from "react"; //Классы React
import PropTypes from "prop-types"; //Контроль свойств компонента
import { Typography, Box, Paper, Dialog, DialogContent, DialogActions, Button, TextField } 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 { CostRouteListsOrdDataGrid } from "./fcroutlstord"; //Состояние таблицы заказов маршрутных листов
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
//---------
//Константы
//---------
//Стили
const STYLES = {
CONTAINER: { textAlign: "center" },
TABLE: { paddingTop: "15px" },
TABLE_SUM: { textAlign: "right", paddingTop: "5px", paddingRight: "15px" },
DIALOG_EDITOR: { maxWidth: "250px" },
DIALOG_BUTTONS: { marginTop: "10px", width: "240px" }
};
//---------------------------------------------
//Вспомогательные функции форматирования данных
//---------------------------------------------
//Генерация представления расширения строки
export const rowExpandRender = ({ row }) => {
return (
);
};
//Форматирование значений колонок
const dataCellRender = ({ row, columnDef /*, handlePriorEditOpen, handleOrderEditOpen */ }) => {
//!!! Пока отключено - не удалять
// switch (columnDef.name) {
// case "NPRIOR_PARTY":
// return {
// data: (
// <>
// {row["NPRIOR_PARTY"]}
// handlePriorEditOpen(row["NRN"], row["NPRIOR_PARTY"])}>
// edit
//
// >
// )
// };
// case "NCHANGE_FACEACC":
// return {
// data: (
//
// handleOrderEditOpen(row["NRN"], row["SPROD_ORDER"])}>
// inventory
//
//
// )
// };
// }
return {
data: row[columnDef]
};
};
//-----------
//Тело модуля
//-----------
//Таблица маршрутных листов
const CostRouteListsDataGrid = ({ task }) => {
//Собственное состояние - таблица данных
const [costRouteLists, setCostRouteLists] = useState({
dataLoaded: false,
columnsDef: [],
orders: null,
rows: [],
reload: true,
pageNumber: 1,
morePages: true,
editPriorNRN: null,
editPriorValue: null,
editOrderNRN: null,
editOrderValue: null
});
//Подключение к контексту взаимодействия с сервером
const { executeStored, SERV_DATA_TYPE_CLOB } = useContext(BackEndСtx);
//Подключение к контексту приложения
const { pOnlineShowDictionary } = useContext(ApplicationС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 handlePriorEditClose = () => {
setCostRouteLists(pv => ({ ...pv, editPriorNRN: null, editPriorValue: null }));
};
//При изменении значения приоритета партии
const handlePriorFormChanged = e => {
setCostRouteLists(pv => ({ ...pv, editPriorValue: e.target.value }));
};
//Изменение приоритета
const priorChange = useCallback(
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);
}
},
[executeStored]
);
//При нажатии на изменение приоритета партии
const handlePriorChange = () => {
//Изменяем значение
priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue, costRouteLists.rows);
};
//При открытии изменения заказа
const handleOrderEditOpen = (NRN, sProdOrderValue) => {
setCostRouteLists(pv => ({ ...pv, editOrderNRN: NRN, editOrderValue: sProdOrderValue }));
};
//При закрытии изменения заказа
const handleOrderEditClose = () => {
setCostRouteLists(pv => ({ ...pv, editOrderNRN: null, editOrderValue: null }));
};
//Изменение заказа
const setEditOrderValue = value => {
setCostRouteLists(pv => ({ ...pv, editOrderValue: value }));
};
//При изменении значения заказа
const handleOrderFormChanged = e => {
setEditOrderValue(e.target.value);
};
//При нажатии на изменение заказа
const handleOrderChange = () => {
//Изменяем значение
//priorChange(costRouteLists.editPriorNRN, costRouteLists.editPriorValue);
//Закрываем окно
handleOrderEditClose();
};
//Генерация содержимого
return (
Маршрутные листы
{costRouteLists.dataLoaded ? (
<>
dataCellRender({ ...prms, handlePriorEditOpen, handleOrderEditOpen })}
/>
>
) : null}
{costRouteLists.editPriorNRN ? (
) : null}
{costRouteLists.editOrderNRN ? (
) : null}
);
};
//Контроль свойств - Таблица маршрутных листов
CostRouteListsDataGrid.propTypes = {
task: PropTypes.number.isRequired
};
//Диалог с таблицей сдачи продукции
const CostRouteListsDataGridDialog = ({ task, onClose }) => {
return (
);
};
//Контроль свойств - Диалог с таблицей маршрутных листов
CostRouteListsDataGridDialog.propTypes = {
task: PropTypes.number.isRequired,
onClose: PropTypes.func
};
//----------------
//Интерфейс модуля
//----------------
export { CostRouteListsDataGridDialog };