forked from CITKParus/P8-Panels
Compare commits
No commits in common. "8507127c39416390b0d9163f68ba54cdd490c625" and "c0b905fe18ae8d8c81312e5005119256e5453d2b" have entirely different histories.
8507127c39
...
c0b905fe18
@ -17,7 +17,6 @@ import { FilterDialog } from "./components/filter_dialog"; //Компонент
|
|||||||
import { TaskCardSettings } from "./components/task_card_settings.js"; //Компонент настроек карточки события
|
import { TaskCardSettings } from "./components/task_card_settings.js"; //Компонент настроек карточки события
|
||||||
import { useTasks, COLORS } from "./hooks.js"; //Вспомогательные хуки
|
import { useTasks, COLORS } from "./hooks.js"; //Вспомогательные хуки
|
||||||
import { APP_STYLES } from "../../../app.styles"; //Типовые стили
|
import { APP_STYLES } from "../../../app.styles"; //Типовые стили
|
||||||
import { NoteDialog } from "./components/note_dialog.js"; //Диалог примечания
|
|
||||||
|
|
||||||
//---------
|
//---------
|
||||||
//Константы
|
//Константы
|
||||||
@ -78,8 +77,6 @@ const ClntTaskBoard = () => {
|
|||||||
const [
|
const [
|
||||||
tasks,
|
tasks,
|
||||||
eventRoutes,
|
eventRoutes,
|
||||||
eventPoints,
|
|
||||||
noteTypes,
|
|
||||||
docLinks,
|
docLinks,
|
||||||
accounts,
|
accounts,
|
||||||
taskFormOpen,
|
taskFormOpen,
|
||||||
@ -97,15 +94,6 @@ const ClntTaskBoard = () => {
|
|||||||
getDocLinks
|
getDocLinks
|
||||||
] = useTasks();
|
] = useTasks();
|
||||||
|
|
||||||
//Состояние диалога примечания
|
|
||||||
const [noteDialog, setNoteDialog] = useState({ visible: false, callback: null });
|
|
||||||
|
|
||||||
//Открытие диалога примечания
|
|
||||||
const handleNoteDialogOpen = f => setNoteDialog({ visible: true, callback: v => f(v) });
|
|
||||||
|
|
||||||
//Закрытие диалога примечания
|
|
||||||
const handleNoteDialogClose = () => setNoteDialog({ visible: false, callback: null });
|
|
||||||
|
|
||||||
//Состояние доступных маршрутов события
|
//Состояние доступных маршрутов события
|
||||||
const [availableRoutes, setAvailableRoutes] = useState({ sorce: "", routes: [] });
|
const [availableRoutes, setAvailableRoutes] = useState({ sorce: "", routes: [] });
|
||||||
|
|
||||||
@ -148,7 +136,6 @@ const ClntTaskBoard = () => {
|
|||||||
handleOrderChanged={handleOrderChanged}
|
handleOrderChanged={handleOrderChanged}
|
||||||
sx={STYLES.FILTER}
|
sx={STYLES.FILTER}
|
||||||
/>
|
/>
|
||||||
{noteDialog.visible ? <NoteDialog noteTypes={noteTypes} onOk={n => noteDialog.callback(n)} onCancel={handleNoteDialogClose} /> : null}
|
|
||||||
{tasks.filters.values.type ? (
|
{tasks.filters.values.type ? (
|
||||||
<DragDropContext
|
<DragDropContext
|
||||||
onDragStart={e => {
|
onDragStart={e => {
|
||||||
@ -156,7 +143,7 @@ const ClntTaskBoard = () => {
|
|||||||
setAvailableRoutes({ sorce: srcCode, routes: [...eventRoutes.filter(r => r.src === srcCode)] });
|
setAvailableRoutes({ sorce: srcCode, routes: [...eventRoutes.filter(r => r.src === srcCode)] });
|
||||||
}}
|
}}
|
||||||
onDragEnd={e => {
|
onDragEnd={e => {
|
||||||
onDragEnd(e, eventPoints, handleNoteDialogOpen);
|
onDragEnd(e);
|
||||||
clearARState();
|
clearARState();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@ -219,9 +206,6 @@ const ClntTaskBoard = () => {
|
|||||||
index={index}
|
index={index}
|
||||||
handleReload={handleReload}
|
handleReload={handleReload}
|
||||||
key={item.id}
|
key={item.id}
|
||||||
eventPoints={eventPoints}
|
|
||||||
pointSettings={eventPoints.find(p => p.point === status.code)}
|
|
||||||
openNoteDialog={handleNoteDialogOpen}
|
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
{provided.placeholder}
|
{provided.placeholder}
|
||||||
|
@ -60,9 +60,8 @@ const STYLES = {
|
|||||||
const selectEventType = (value, showDictionary, callBack) => {
|
const selectEventType = (value, showDictionary, callBack) => {
|
||||||
showDictionary({
|
showDictionary({
|
||||||
unitCode: "ClientEventTypes",
|
unitCode: "ClientEventTypes",
|
||||||
showMethod: "dictionary",
|
inputParameters: [{ name: "in_EVNTYPE_CODE", value: value }],
|
||||||
inputParameters: [{ name: "pos_eventtypecode", value: value }],
|
callBack: res => (res.success === true ? callBack(res.outParameters.out_EVNTYPE_CODE) : callBack(null))
|
||||||
callBack: res => (res.success === true ? callBack(res.outParameters.eventtypecode) : callBack(null))
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -78,13 +77,12 @@ const selectCatalog = (value, showDictionary, callBack) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
//Выбор исполнителя
|
//Выбор производственного объекта
|
||||||
const selectSendPerson = (value, showDictionary, callBack) => {
|
const selectSendPerson = (value, showDictionary, callBack) => {
|
||||||
showDictionary({
|
showDictionary({
|
||||||
unitCode: "AGNLIST",
|
unitCode: "AGNLIST",
|
||||||
showMethod: "agents",
|
inputParameters: [{ name: "in_AGNABBR", value: value }],
|
||||||
inputParameters: [{ name: "pos_agnmnemo", value: value }],
|
callBack: res => (res.success === true ? callBack(res.outParameters.out_AGNABBR) : callBack(null))
|
||||||
callBack: res => (res.success === true ? callBack(res.outParameters.agnmnemo) : callBack(null))
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -101,7 +99,6 @@ const selectSendDivision = (value, showDictionary, callBack) => {
|
|||||||
const selectSendUsrGrp = (value, showDictionary, callBack) => {
|
const selectSendUsrGrp = (value, showDictionary, callBack) => {
|
||||||
showDictionary({
|
showDictionary({
|
||||||
unitCode: "CostStaffGroups",
|
unitCode: "CostStaffGroups",
|
||||||
//showMethod: "dictionary",
|
|
||||||
inputParameters: [{ name: "in_CODE", value: value }],
|
inputParameters: [{ name: "in_CODE", value: value }],
|
||||||
callBack: res => (res.success === true ? callBack(res.outParameters.out_CODE) : callBack(null))
|
callBack: res => (res.success === true ? callBack(res.outParameters.out_CODE) : callBack(null))
|
||||||
});
|
});
|
||||||
@ -116,18 +113,21 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
//Собственное состояние
|
//Собственное состояние
|
||||||
const [filter, setFilter] = useState({ ...initial });
|
const [filter, setFilter] = useState({ ...initial });
|
||||||
|
|
||||||
//Состояние текущего типа события
|
|
||||||
const [curType, setCurType] = useState(initial.type);
|
const [curType, setCurType] = useState(initial.type);
|
||||||
|
|
||||||
//Состояние учётных документов
|
|
||||||
const [curDocLinks, setCurDocLinks] = useState([...docs]);
|
const [curDocLinks, setCurDocLinks] = useState([...docs]);
|
||||||
|
|
||||||
//Состояние изменения типа события
|
|
||||||
const [typeDif, setTypeDif] = useState(false);
|
const [typeDif, setTypeDif] = useState(false);
|
||||||
|
|
||||||
|
//const [catalogs, setCatalogs] = useState(initial.wSubcatalogs ? initial.crn : initial.crn.split(";")[0]);
|
||||||
|
|
||||||
|
//const [curDocLink, setCurDocLink] = useState(initial.docLink ? initial.docLink : "");
|
||||||
|
|
||||||
//Подключение к контексту взаимодействия с сервером
|
//Подключение к контексту взаимодействия с сервером
|
||||||
const { executeStored } = useContext(BackEndСtx);
|
const { executeStored } = useContext(BackEndСtx);
|
||||||
|
|
||||||
|
//const promisedSetCrn = crn => new Promise(resolve => setFilter(pv => ({ ...pv, crn: crn }), resolve));
|
||||||
|
|
||||||
//Получение субкаталогов
|
//Получение субкаталогов
|
||||||
const getSubCatalogs = useCallback(async () => {
|
const getSubCatalogs = useCallback(async () => {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
@ -137,7 +137,11 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
NSUBCAT: filter.wSubcatalogs ? 1 : 0
|
NSUBCAT: filter.wSubcatalogs ? 1 : 0
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
//Заполняем субкаталоги
|
||||||
|
//setCatalogs(data.SRESULT);
|
||||||
|
//setFilter(pv => ({ ...pv, crn: data.SRESULT }));
|
||||||
return data.SRESULT;
|
return data.SRESULT;
|
||||||
|
//await promisedSetCrn(data.SRESULT);
|
||||||
}, [executeStored, filter.catalog, filter.wSubcatalogs]);
|
}, [executeStored, filter.catalog, filter.wSubcatalogs]);
|
||||||
|
|
||||||
//Подключение к контексту приложения
|
//Подключение к контексту приложения
|
||||||
@ -170,6 +174,13 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
crns ? (filterCopy.crn = crns) : null;
|
crns ? (filterCopy.crn = crns) : null;
|
||||||
onOk(filterCopy);
|
onOk(filterCopy);
|
||||||
} else onOk(filter);
|
} else onOk(filter);
|
||||||
|
|
||||||
|
// if (filter.catalog && filter.wSubcatalogs) {
|
||||||
|
// const crns = await getSubCatalogs(filter.crn);
|
||||||
|
// let filterCopy = { ...filter };
|
||||||
|
// crns ? (filterCopy.crn = crns) : null;
|
||||||
|
// onOk(filterCopy);
|
||||||
|
// } else onOk(filter);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -179,6 +190,12 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
//Очистка учётного документа
|
//Очистка учётного документа
|
||||||
const clearDocLink = () => setFilter(pv => ({ ...pv, docLink: "" }));
|
const clearDocLink = () => setFilter(pv => ({ ...pv, docLink: "" }));
|
||||||
|
|
||||||
|
//Очистка галочки "Включая подкаталоги"
|
||||||
|
//const clearWSubcatalogs = () => setFilter(pv => ({ ...pv, wSubcatalogs: false }));
|
||||||
|
|
||||||
|
//Очистка сотстояния подкаталогов
|
||||||
|
//const clearCatalogs = () => setCatalogs("");
|
||||||
|
|
||||||
//При изменении типа события
|
//При изменении типа события
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (curType) {
|
if (curType) {
|
||||||
@ -190,6 +207,14 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
}
|
}
|
||||||
}, [curType, filter.type]);
|
}, [curType, filter.type]);
|
||||||
|
|
||||||
|
//При очистке каталога
|
||||||
|
// useEffect(() => {
|
||||||
|
// if (!filter.catalog && filter.wSubcatalogs) {
|
||||||
|
// clearWSubcatalogs();
|
||||||
|
// //clearCatalogs();
|
||||||
|
// }
|
||||||
|
// }, [filter.catalog, filter.wSubcatalogs]);
|
||||||
|
|
||||||
//Обработка изменений с каталогами
|
//Обработка изменений с каталогами
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!filter.catalog && filter.wSubcatalogs) setFilter(pv => ({ ...pv, wSubcatalogs: false }));
|
if (!filter.catalog && filter.wSubcatalogs) setFilter(pv => ({ ...pv, wSubcatalogs: false }));
|
||||||
@ -202,6 +227,10 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
setFilter(pv => ({ ...pv, crn: "" }));
|
setFilter(pv => ({ ...pv, crn: "" }));
|
||||||
}, [filter.catalog, filter.crn, filter.wSubcatalogs, initial.catalog, initial.crn, initial.wSubcatalogs]);
|
}, [filter.catalog, filter.crn, filter.wSubcatalogs, initial.catalog, initial.crn, initial.wSubcatalogs]);
|
||||||
|
|
||||||
|
// useEffect(() => {
|
||||||
|
// console.log(`State changed: ${filter.crn}`);
|
||||||
|
// }, [filter.crn]);
|
||||||
|
|
||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
@ -299,6 +328,7 @@ const FilterDialog = ({ initial, docs, onCancel, onOk, getDocLinks }) => {
|
|||||||
</IconButton>
|
</IconButton>
|
||||||
<IconButton
|
<IconButton
|
||||||
title="Обновить"
|
title="Обновить"
|
||||||
|
//disabled={!((!curType && filter.type) || (typeDif && filter.type))}
|
||||||
disabled={!((!curType || typeDif) && filter.type)}
|
disabled={!((!curType || typeDif) && filter.type)}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
setCurType(filter.type);
|
setCurType(filter.type);
|
||||||
|
@ -10,7 +10,6 @@
|
|||||||
import React, { useEffect, useState } from "react"; //Классы React
|
import React, { useEffect, useState } from "react"; //Классы React
|
||||||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
import PropTypes from "prop-types"; //Контроль свойств компонента
|
||||||
import { FormControl, InputLabel, Input, InputAdornment, IconButton, Icon, FormHelperText, Select, MenuItem } from "@mui/material"; //Интерфейсные компоненты
|
import { FormControl, InputLabel, Input, InputAdornment, IconButton, Icon, FormHelperText, Select, MenuItem } from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { APP_STYLES } from "../../../../app.styles"; //Типовые стили
|
|
||||||
|
|
||||||
//---------
|
//---------
|
||||||
//Константы
|
//Константы
|
||||||
@ -18,8 +17,7 @@ import { APP_STYLES } from "../../../../app.styles"; //Типовые стили
|
|||||||
|
|
||||||
//Стили
|
//Стили
|
||||||
const STYLES = {
|
const STYLES = {
|
||||||
HELPER_TEXT: { color: "red" },
|
HELPER_TEXT: { color: "red" }
|
||||||
SELECT_MENU: { overflowY: "auto", ...APP_STYLES.SCROLL }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//---------------
|
//---------------
|
||||||
@ -82,7 +80,6 @@ const FilterInputField = ({ elementCode, elementValue, labelText, onChange, requ
|
|||||||
value={value}
|
value={value}
|
||||||
aria-describedby={`${elementCode}-helper-text`}
|
aria-describedby={`${elementCode}-helper-text`}
|
||||||
label={labelText}
|
label={labelText}
|
||||||
MenuProps={{ slotProps: { paper: { sx: STYLES.SELECT_MENU } } }}
|
|
||||||
onChange={handleChange}
|
onChange={handleChange}
|
||||||
{...other}
|
{...other}
|
||||||
>
|
>
|
||||||
|
@ -1,139 +0,0 @@
|
|||||||
/*
|
|
||||||
Парус 8 - Панели мониторинга - УДП - Доски задач
|
|
||||||
Компонент: Диалоговое окно примечания
|
|
||||||
*/
|
|
||||||
|
|
||||||
//---------------------
|
|
||||||
//Подключение библиотек
|
|
||||||
//---------------------
|
|
||||||
|
|
||||||
import React, { useState } from "react"; //Классы React
|
|
||||||
import PropTypes from "prop-types"; //Контроль свойств компонента
|
|
||||||
import {
|
|
||||||
Dialog,
|
|
||||||
DialogTitle,
|
|
||||||
IconButton,
|
|
||||||
Icon,
|
|
||||||
DialogContent,
|
|
||||||
DialogActions,
|
|
||||||
Button,
|
|
||||||
TextField,
|
|
||||||
FormControl,
|
|
||||||
InputLabel,
|
|
||||||
Select,
|
|
||||||
MenuItem
|
|
||||||
} from "@mui/material"; //Интерфейсные компоненты
|
|
||||||
import { APP_STYLES } from "../../../../app.styles"; //Типовые стили
|
|
||||||
import { arrayFormer } from "../hooks"; //Формировщик массива
|
|
||||||
|
|
||||||
//Стили
|
|
||||||
const STYLES = {
|
|
||||||
DIALOG_ACTIONS: { justifyContent: "end", paddingRight: "24px", paddingLeft: "24px" },
|
|
||||||
CLOSE_BUTTON: {
|
|
||||||
position: "absolute",
|
|
||||||
right: 8,
|
|
||||||
top: 8,
|
|
||||||
color: theme => theme.palette.grey[500]
|
|
||||||
},
|
|
||||||
DIALOG_CONTENT: { paddingTop: 0, paddingBottom: 0 },
|
|
||||||
TEXT_FIELD: {
|
|
||||||
overflowY: "auto",
|
|
||||||
...APP_STYLES.SCROLL
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//---------------
|
|
||||||
//Тело компонента
|
|
||||||
//---------------
|
|
||||||
|
|
||||||
const NoteDialog = ({ noteTypes, onOk, onCancel }) => {
|
|
||||||
//Собственное состояние
|
|
||||||
const [note, setNote] = useState({ headerV: 0, text: "" });
|
|
||||||
|
|
||||||
//При изменении примечания
|
|
||||||
const handleNoteChange = value => setNote(pv => ({ ...pv, text: value }));
|
|
||||||
|
|
||||||
//При изменении заголовка примечания
|
|
||||||
const handleNoteHeaderChange = h => {
|
|
||||||
setNote(pv => ({ ...pv, headerV: h }));
|
|
||||||
};
|
|
||||||
|
|
||||||
//При закрытии диалога с изменением фильтра
|
|
||||||
const handleOK = () => {
|
|
||||||
//setNoteDialogOpen(false);
|
|
||||||
onOk({ header: noteTypes[note.headerV], text: note.text });
|
|
||||||
onCancel();
|
|
||||||
};
|
|
||||||
|
|
||||||
//При закрытии диалога без изменения фильтра
|
|
||||||
const handleCancel = () => {
|
|
||||||
onCancel();
|
|
||||||
};
|
|
||||||
|
|
||||||
//Генерация содержимого
|
|
||||||
return (
|
|
||||||
<Dialog open onClose={handleCancel} fullWidth maxWidth="sm">
|
|
||||||
<DialogTitle>Примечание</DialogTitle>
|
|
||||||
<IconButton aria-label="close" onClick={handleCancel} sx={STYLES.CLOSE_BUTTON}>
|
|
||||||
<Icon>close</Icon>
|
|
||||||
</IconButton>
|
|
||||||
<DialogContent sx={STYLES.DIALOG_CONTENT}>
|
|
||||||
<FormControl fullWidth variant="standard">
|
|
||||||
<InputLabel htmlFor="noteHeader">Заголовок примечания</InputLabel>
|
|
||||||
<Select
|
|
||||||
id="noteHeader"
|
|
||||||
name="noteHeader"
|
|
||||||
value={note.headerV}
|
|
||||||
aria-describedby="noteHeader-helper-text"
|
|
||||||
label="Заголовок примечания"
|
|
||||||
margin="dense"
|
|
||||||
onChange={e => handleNoteHeaderChange(e.target.value)}
|
|
||||||
>
|
|
||||||
{noteTypes
|
|
||||||
? arrayFormer(noteTypes).map((item, i) => (
|
|
||||||
<MenuItem key={i} value={i}>
|
|
||||||
{item}
|
|
||||||
</MenuItem>
|
|
||||||
))
|
|
||||||
: null}
|
|
||||||
</Select>
|
|
||||||
</FormControl>
|
|
||||||
<TextField
|
|
||||||
id="note"
|
|
||||||
label="Описание"
|
|
||||||
variant="standard"
|
|
||||||
fullWidth
|
|
||||||
required
|
|
||||||
multiline
|
|
||||||
minRows={7}
|
|
||||||
maxRows={7}
|
|
||||||
value={note.text}
|
|
||||||
margin="normal"
|
|
||||||
inputProps={{ sx: STYLES.TEXT_FIELD }}
|
|
||||||
onChange={e => handleNoteChange(e.target.value)}
|
|
||||||
/>
|
|
||||||
</DialogContent>
|
|
||||||
<DialogActions sx={STYLES.DIALOG_ACTIONS}>
|
|
||||||
<Button disabled={!note.text} variant="text" onClick={handleOK}>
|
|
||||||
ОК
|
|
||||||
</Button>
|
|
||||||
<Button variant="text" onClick={handleCancel}>
|
|
||||||
Отмена
|
|
||||||
</Button>
|
|
||||||
</DialogActions>
|
|
||||||
</Dialog>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
//Контроль свойств - Диалоговое окно примечания
|
|
||||||
NoteDialog.propTypes = {
|
|
||||||
noteTypes: PropTypes.array,
|
|
||||||
onOk: PropTypes.func.isRequired,
|
|
||||||
onCancel: PropTypes.func.isRequired
|
|
||||||
};
|
|
||||||
|
|
||||||
//----------------
|
|
||||||
//Интерфейс модуля
|
|
||||||
//----------------
|
|
||||||
|
|
||||||
export { NoteDialog };
|
|
@ -47,17 +47,7 @@ const STYLES = {
|
|||||||
//------------------------------------
|
//------------------------------------
|
||||||
|
|
||||||
//Действия карточки события
|
//Действия карточки события
|
||||||
const DataCellCardActions = ({
|
const DataCellCardActions = ({ taskRn, menuItems, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, handleReload }) => {
|
||||||
taskRn,
|
|
||||||
menuItems,
|
|
||||||
cardActions,
|
|
||||||
handleMethodsMenuButtonClick,
|
|
||||||
handleMethodsMenuClose,
|
|
||||||
handleReload,
|
|
||||||
eventPoints,
|
|
||||||
pointSettings,
|
|
||||||
openNoteDialog
|
|
||||||
}) => {
|
|
||||||
return (
|
return (
|
||||||
<Box sx={STYLES.BOX_ROW}>
|
<Box sx={STYLES.BOX_ROW}>
|
||||||
<IconButton id={`${taskRn}_menu_button`} aria-haspopup="true" onClick={handleMethodsMenuButtonClick}>
|
<IconButton id={`${taskRn}_menu_button`} aria-haspopup="true" onClick={handleMethodsMenuButtonClick}>
|
||||||
@ -71,14 +61,8 @@ const DataCellCardActions = ({
|
|||||||
sx={action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {}}
|
sx={action.delimiter ? STYLES.MENU_ITEM_DELIMITER : {}}
|
||||||
key={`${taskRn}_${action.method}`}
|
key={`${taskRn}_${action.method}`}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
if (openNoteDialog && action.method === "TASK_STATE_CHANGE") {
|
//Выполняем действие
|
||||||
action.func(taskRn, action.needReload ? handleReload : null, eventPoints, openNoteDialog);
|
action.func(taskRn, action.needReload ? handleReload : null);
|
||||||
} else if (openNoteDialog && action.method === "TASK_SEND" && pointSettings.addNoteOnSend) {
|
|
||||||
openNoteDialog(n => action.func(taskRn, action.needReload ? handleReload : null, n));
|
|
||||||
} else {
|
|
||||||
//Выполняем действие
|
|
||||||
action.func(taskRn, action.needReload ? handleReload : null);
|
|
||||||
}
|
|
||||||
//Закрываем меню
|
//Закрываем меню
|
||||||
handleMethodsMenuClose();
|
handleMethodsMenuClose();
|
||||||
}}
|
}}
|
||||||
@ -100,10 +84,7 @@ DataCellCardActions.propTypes = {
|
|||||||
cardActions: PropTypes.object.isRequired,
|
cardActions: PropTypes.object.isRequired,
|
||||||
handleMethodsMenuButtonClick: PropTypes.func.isRequired,
|
handleMethodsMenuButtonClick: PropTypes.func.isRequired,
|
||||||
handleMethodsMenuClose: PropTypes.func.isRequired,
|
handleMethodsMenuClose: PropTypes.func.isRequired,
|
||||||
handleReload: PropTypes.func,
|
handleReload: PropTypes.func
|
||||||
eventPoints: PropTypes.array,
|
|
||||||
pointSettings: PropTypes.object,
|
|
||||||
openNoteDialog: PropTypes.func
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//-----------
|
//-----------
|
||||||
@ -111,7 +92,7 @@ DataCellCardActions.propTypes = {
|
|||||||
//-----------
|
//-----------
|
||||||
|
|
||||||
//Карточка события
|
//Карточка события
|
||||||
const TaskCard = ({ task, account, index, handleReload, eventPoints, pointSettings, openNoteDialog }) => {
|
const TaskCard = ({ task, account, index, handleReload }) => {
|
||||||
//Собственное состояние
|
//Собственное состояние
|
||||||
const [taskCard, setTaskCard, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, menuItems] = useTaskCard();
|
const [taskCard, setTaskCard, cardActions, handleMethodsMenuButtonClick, handleMethodsMenuClose, menuItems] = useTaskCard();
|
||||||
|
|
||||||
@ -143,9 +124,6 @@ const TaskCard = ({ task, account, index, handleReload, eventPoints, pointSettin
|
|||||||
handleMethodsMenuButtonClick={handleMethodsMenuButtonClick}
|
handleMethodsMenuButtonClick={handleMethodsMenuButtonClick}
|
||||||
handleMethodsMenuClose={handleMethodsMenuClose}
|
handleMethodsMenuClose={handleMethodsMenuClose}
|
||||||
handleReload={handleReload}
|
handleReload={handleReload}
|
||||||
eventPoints={eventPoints}
|
|
||||||
pointSettings={pointSettings}
|
|
||||||
openNoteDialog={openNoteDialog}
|
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
@ -167,7 +145,6 @@ const TaskCard = ({ task, account, index, handleReload, eventPoints, pointSettin
|
|||||||
{taskCard.openEdit ? (
|
{taskCard.openEdit ? (
|
||||||
<TaskFormDialog
|
<TaskFormDialog
|
||||||
taskRn={task.nrn}
|
taskRn={task.nrn}
|
||||||
editable={pointSettings.banUpdate ? false : true}
|
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
setTaskCard(pv => ({ ...pv, openEdit: false }));
|
setTaskCard(pv => ({ ...pv, openEdit: false }));
|
||||||
}}
|
}}
|
||||||
@ -182,10 +159,7 @@ TaskCard.propTypes = {
|
|||||||
task: PropTypes.object.isRequired,
|
task: PropTypes.object.isRequired,
|
||||||
account: PropTypes.object,
|
account: PropTypes.object,
|
||||||
index: PropTypes.number.isRequired,
|
index: PropTypes.number.isRequired,
|
||||||
handleReload: PropTypes.func,
|
handleReload: PropTypes.func
|
||||||
eventPoints: PropTypes.array,
|
|
||||||
pointSettings: PropTypes.object,
|
|
||||||
openNoteDialog: PropTypes.func
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//----------------
|
//----------------
|
||||||
|
@ -92,15 +92,7 @@ CustomTabPanel.propTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Вкладка основной информации
|
//Вкладка основной информации
|
||||||
const MainEventInfoTab = ({
|
const MainEventInfoTab = ({ task, handleFieldEdit, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet }) => {
|
||||||
task,
|
|
||||||
editable,
|
|
||||||
handleFieldEdit,
|
|
||||||
handleClientClientsOpen,
|
|
||||||
handleClientPersonOpen,
|
|
||||||
handleCrnOpen,
|
|
||||||
handleEventNextNumbGet
|
|
||||||
}) => {
|
|
||||||
return (
|
return (
|
||||||
<Box>
|
<Box>
|
||||||
<Box sx={STYLES.BOX_WITH_LEGEND} component="fieldset">
|
<Box sx={STYLES.BOX_WITH_LEGEND} component="fieldset">
|
||||||
@ -167,7 +159,7 @@ const MainEventInfoTab = ({
|
|||||||
value={task.sdescription}
|
value={task.sdescription}
|
||||||
variant="standard"
|
variant="standard"
|
||||||
onChange={handleFieldEdit}
|
onChange={handleFieldEdit}
|
||||||
disabled={!task.stype || !editable}
|
disabled={!task.stype}
|
||||||
required
|
required
|
||||||
multiline
|
multiline
|
||||||
minRows={7}
|
minRows={7}
|
||||||
@ -205,7 +197,6 @@ const MainEventInfoTab = ({
|
|||||||
//Контроль свойств - Вкладка основной информации
|
//Контроль свойств - Вкладка основной информации
|
||||||
MainEventInfoTab.propTypes = {
|
MainEventInfoTab.propTypes = {
|
||||||
task: PropTypes.object.isRequired,
|
task: PropTypes.object.isRequired,
|
||||||
editable: PropTypes.bool,
|
|
||||||
handleFieldEdit: PropTypes.func.isRequired,
|
handleFieldEdit: PropTypes.func.isRequired,
|
||||||
handleClientClientsOpen: PropTypes.func.isRequired,
|
handleClientClientsOpen: PropTypes.func.isRequired,
|
||||||
handleClientPersonOpen: PropTypes.func.isRequired,
|
handleClientPersonOpen: PropTypes.func.isRequired,
|
||||||
@ -341,7 +332,7 @@ ExecutorEventInfoTab.propTypes = {
|
|||||||
//-----------
|
//-----------
|
||||||
|
|
||||||
//Форма события
|
//Форма события
|
||||||
const TaskForm = ({ task, setTask, editable, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet }) => {
|
const TaskForm = ({ task, setTask, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet }) => {
|
||||||
//Состояние вкладки
|
//Состояние вкладки
|
||||||
const [value, setValue] = useState(0);
|
const [value, setValue] = useState(0);
|
||||||
|
|
||||||
@ -374,7 +365,6 @@ const TaskForm = ({ task, setTask, editable, handleClientClientsOpen, handleClie
|
|||||||
<CustomTabPanel value={value} index={0}>
|
<CustomTabPanel value={value} index={0}>
|
||||||
<MainEventInfoTab
|
<MainEventInfoTab
|
||||||
task={task}
|
task={task}
|
||||||
editable={task.nrn ? editable : null}
|
|
||||||
handleFieldEdit={handleFieldEdit}
|
handleFieldEdit={handleFieldEdit}
|
||||||
handleClientClientsOpen={handleClientClientsOpen}
|
handleClientClientsOpen={handleClientClientsOpen}
|
||||||
handleClientPersonOpen={handleClientPersonOpen}
|
handleClientPersonOpen={handleClientPersonOpen}
|
||||||
@ -393,7 +383,6 @@ const TaskForm = ({ task, setTask, editable, handleClientClientsOpen, handleClie
|
|||||||
TaskForm.propTypes = {
|
TaskForm.propTypes = {
|
||||||
task: PropTypes.object.isRequired,
|
task: PropTypes.object.isRequired,
|
||||||
setTask: PropTypes.func.isRequired,
|
setTask: PropTypes.func.isRequired,
|
||||||
editable: PropTypes.bool,
|
|
||||||
handleClientClientsOpen: PropTypes.func.isRequired,
|
handleClientClientsOpen: PropTypes.func.isRequired,
|
||||||
handleClientPersonOpen: PropTypes.func.isRequired,
|
handleClientPersonOpen: PropTypes.func.isRequired,
|
||||||
handleCrnOpen: PropTypes.func.isRequired,
|
handleCrnOpen: PropTypes.func.isRequired,
|
||||||
@ -401,7 +390,7 @@ TaskForm.propTypes = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Диалог с формой события
|
//Диалог с формой события
|
||||||
const TaskFormDialog = ({ taskRn, taskType, taskStatus, editable, onClose }) => {
|
const TaskFormDialog = ({ taskRn, taskType, taskStatus, onClose }) => {
|
||||||
//Собственное состояние
|
//Собственное состояние
|
||||||
const [task, setTask, insertEvent, updateEvent, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet] =
|
const [task, setTask, insertEvent, updateEvent, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, handleEventNextNumbGet] =
|
||||||
useClientEvent(taskRn, taskType, taskStatus);
|
useClientEvent(taskRn, taskType, taskStatus);
|
||||||
@ -412,7 +401,6 @@ const TaskFormDialog = ({ taskRn, taskType, taskStatus, editable, onClose }) =>
|
|||||||
<TaskForm
|
<TaskForm
|
||||||
task={task}
|
task={task}
|
||||||
setTask={setTask}
|
setTask={setTask}
|
||||||
editable={taskRn ? editable : null}
|
|
||||||
handleClientClientsOpen={handleClientClientsOpen}
|
handleClientClientsOpen={handleClientClientsOpen}
|
||||||
handleClientPersonOpen={handleClientPersonOpen}
|
handleClientPersonOpen={handleClientPersonOpen}
|
||||||
handleCrnOpen={handleCrnOpen}
|
handleCrnOpen={handleCrnOpen}
|
||||||
@ -422,7 +410,7 @@ const TaskFormDialog = ({ taskRn, taskType, taskStatus, editable, onClose }) =>
|
|||||||
{onClose ? (
|
{onClose ? (
|
||||||
<DialogActions sx={STYLES.DIALOG_ACTIONS}>
|
<DialogActions sx={STYLES.DIALOG_ACTIONS}>
|
||||||
{taskRn ? (
|
{taskRn ? (
|
||||||
<Button onClick={() => updateEvent(onClose)} disabled={task.updateDisabled || !editable}>
|
<Button onClick={() => updateEvent(onClose)} disabled={task.updateDisabled}>
|
||||||
Исправить
|
Исправить
|
||||||
</Button>
|
</Button>
|
||||||
) : (
|
) : (
|
||||||
@ -442,7 +430,6 @@ TaskFormDialog.propTypes = {
|
|||||||
taskRn: PropTypes.number,
|
taskRn: PropTypes.number,
|
||||||
taskType: PropTypes.string,
|
taskType: PropTypes.string,
|
||||||
taskStatus: PropTypes.string,
|
taskStatus: PropTypes.string,
|
||||||
editable: PropTypes.bool,
|
|
||||||
onClose: PropTypes.func.isRequired
|
onClose: PropTypes.func.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -45,7 +45,6 @@ const randomColor = index => {
|
|||||||
return hslToRgba(hue, 50, 70);
|
return hslToRgba(hue, 50, 70);
|
||||||
};
|
};
|
||||||
|
|
||||||
//Цвет из hsl формата в rgba формат
|
|
||||||
const hslToRgba = (h, s, l) => {
|
const hslToRgba = (h, s, l) => {
|
||||||
s /= 100;
|
s /= 100;
|
||||||
l /= 100;
|
l /= 100;
|
||||||
@ -55,10 +54,29 @@ const hslToRgba = (h, s, l) => {
|
|||||||
return `rgba(${Math.floor(255 * f(0))},${Math.floor(255 * f(8))},${Math.floor(255 * f(4))},0.3)`;
|
return `rgba(${Math.floor(255 * f(0))},${Math.floor(255 * f(8))},${Math.floor(255 * f(4))},0.3)`;
|
||||||
};
|
};
|
||||||
|
|
||||||
//Формирование массива из 0, 1 и 1< элементов
|
//Формирование случайного цвета rgba
|
||||||
export const arrayFormer = arr => {
|
// const randomColorRgba = index => {
|
||||||
return arr ? (arr.length ? arr : [arr]) : [];
|
// const s = [255, 204, 153, 102, 51, 0];
|
||||||
};
|
// function rValue() {
|
||||||
|
// return s[Math.floor(Math.random() * s.length)];
|
||||||
|
// }
|
||||||
|
// let t = 3;
|
||||||
|
// let rgb = [0, 0, 0];
|
||||||
|
// function howMuchToLearnJS(x) {
|
||||||
|
// if (t === 0) return;
|
||||||
|
// rgb[3 - t] = x % 6;
|
||||||
|
// t--;
|
||||||
|
// howMuchToLearnJS(Math.floor(x / 6));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //let r = rValue();
|
||||||
|
// //let g = rValue();
|
||||||
|
// //let b = rValue();
|
||||||
|
// let r, g, b;
|
||||||
|
// howMuchToLearnJS(index);
|
||||||
|
// //while ((r === 0 && g === 0 && b === 0) || b === 255) b = rValue();
|
||||||
|
// return "rgba(" + rgb[0] + "," + rgb[1] + "," + rgb[2] + ",0.2)";
|
||||||
|
// };
|
||||||
|
|
||||||
//-----------
|
//-----------
|
||||||
//Тело модуля
|
//Тело модуля
|
||||||
@ -75,12 +93,6 @@ const useTasks = () => {
|
|||||||
//Состояние маршрута события
|
//Состояние маршрута события
|
||||||
const [eventRoutes, setEventRoutes] = useState([]);
|
const [eventRoutes, setEventRoutes] = useState([]);
|
||||||
|
|
||||||
//Состояние точек маршрута события
|
|
||||||
const [eventPoints, setEventPoints] = useState([]);
|
|
||||||
|
|
||||||
//Состояние типов заголовков событий
|
|
||||||
const [noteTypes, setNoteTypes] = useState([]);
|
|
||||||
|
|
||||||
//Состояние учётных документов
|
//Состояние учётных документов
|
||||||
const [docLinks, setDocLinks] = useState([]);
|
const [docLinks, setDocLinks] = useState([]);
|
||||||
|
|
||||||
@ -293,7 +305,7 @@ const useTasks = () => {
|
|||||||
|
|
||||||
//Изменение статуса события (переносом)
|
//Изменение статуса события (переносом)
|
||||||
const handleStateChange = useCallback(
|
const handleStateChange = useCallback(
|
||||||
async (nEvent, sNextStat, note = null) => {
|
async (nEvent, sNextStat) => {
|
||||||
try {
|
try {
|
||||||
//Выполняем инициализацию параметров
|
//Выполняем инициализацию параметров
|
||||||
const firstStep = await executeStored({
|
const firstStep = await executeStored({
|
||||||
@ -328,7 +340,6 @@ const useTasks = () => {
|
|||||||
args: {
|
args: {
|
||||||
NIDENT: firstStep.NIDENT,
|
NIDENT: firstStep.NIDENT,
|
||||||
NSTEP: 3,
|
NSTEP: 3,
|
||||||
NEVENT: nEvent,
|
|
||||||
SEVENT_STAT: firstStep.SEVENT_STAT,
|
SEVENT_STAT: firstStep.SEVENT_STAT,
|
||||||
SSEND_CLIENT: send.outParameters.out_CLIENT_CODE,
|
SSEND_CLIENT: send.outParameters.out_CLIENT_CODE,
|
||||||
SSEND_DIVISION: send.outParameters.out_DIVISION_CODE,
|
SSEND_DIVISION: send.outParameters.out_DIVISION_CODE,
|
||||||
@ -339,9 +350,7 @@ const useTasks = () => {
|
|||||||
SSEND_USER_GROUP: send.outParameters.out_USER_GROUP_CODE,
|
SSEND_USER_GROUP: send.outParameters.out_USER_GROUP_CODE,
|
||||||
SSEND_USER_NAME: send.outParameters.out_USER_NAME,
|
SSEND_USER_NAME: send.outParameters.out_USER_NAME,
|
||||||
NSEND_PREDEFINED_EXEC: send.outParameters.out_PREDEFINED_EXEC,
|
NSEND_PREDEFINED_EXEC: send.outParameters.out_PREDEFINED_EXEC,
|
||||||
NSEND_PREDEFINED_PROC: send.outParameters.out_PREDEFINED_PROC,
|
NSEND_PREDEFINED_PROC: send.outParameters.out_PREDEFINED_PROC
|
||||||
SNOTE_HEADER: note.text ? note.header : null,
|
|
||||||
SNOTE: note.text ? note.text : null
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//Необходимо обновить данные
|
//Необходимо обновить данные
|
||||||
@ -355,10 +364,7 @@ const useTasks = () => {
|
|||||||
args: {
|
args: {
|
||||||
NIDENT: firstStep.NIDENT,
|
NIDENT: firstStep.NIDENT,
|
||||||
NSTEP: 3,
|
NSTEP: 3,
|
||||||
NEVENT: nEvent,
|
SEVENT_STAT: firstStep.SEVENT_STAT
|
||||||
SEVENT_STAT: firstStep.SEVENT_STAT,
|
|
||||||
SNOTE_HEADER: note.header ? note.header : null,
|
|
||||||
SNOTE: note.text ? note.text : null
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//Необходимо обновить данные
|
//Необходимо обновить данные
|
||||||
@ -380,7 +386,7 @@ const useTasks = () => {
|
|||||||
|
|
||||||
//Взаимодействие с событием (через перенос)
|
//Взаимодействие с событием (через перенос)
|
||||||
const onDragEnd = useCallback(
|
const onDragEnd = useCallback(
|
||||||
(result, eventPoints, openNoteDialog) => {
|
result => {
|
||||||
//Определяем нужные параметры
|
//Определяем нужные параметры
|
||||||
const { source, destination } = result;
|
const { source, destination } = result;
|
||||||
//Если путь не указан
|
//Если путь не указан
|
||||||
@ -400,24 +406,10 @@ const useTasks = () => {
|
|||||||
}
|
}
|
||||||
: task
|
: task
|
||||||
);
|
);
|
||||||
//Мнемокод точки назначения
|
//Переинициализируем строки с учетом изменений (для визуального отображения)
|
||||||
const destCode = tasks.statuses.find(s => s.id == destination.droppableId).code;
|
setTasks(pv => ({ ...pv, rows: [...rows] }));
|
||||||
//Получение настройки точки назначения
|
|
||||||
const pointSettings = eventPoints.find(ep => ep.point === destCode);
|
|
||||||
//Если необходимо примечание при переходе
|
|
||||||
if (pointSettings.addNoteOnChst) {
|
|
||||||
//Изменяем статус события с добавлением примечания
|
|
||||||
openNoteDialog(n => {
|
|
||||||
setTasks(pv => ({ ...pv, rows: [...rows] }));
|
|
||||||
handleStateChange(row.nrn, destCode, n);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//Изменяем статус события
|
//Изменяем статус события
|
||||||
else {
|
handleStateChange(row.nrn, tasks.statuses.find(s => s.id == destination.droppableId).code);
|
||||||
//Переинициализируем строки с учетом изменений (для визуального отображения)
|
|
||||||
setTasks(pv => ({ ...pv, rows: [...rows] }));
|
|
||||||
handleStateChange(row.nrn, tasks.statuses.find(s => s.id == destination.droppableId).code);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[handleStateChange, tasks.rows, tasks.statuses]
|
[handleStateChange, tasks.rows, tasks.statuses]
|
||||||
@ -437,7 +429,7 @@ const useTasks = () => {
|
|||||||
let newDocLinks = [];
|
let newDocLinks = [];
|
||||||
//Если найдены учётные документы
|
//Если найдены учётные документы
|
||||||
if (data.XDOCLINKS) {
|
if (data.XDOCLINKS) {
|
||||||
arrayFormer(data.XDOCLINKS).map(d => {
|
data.XDOCLINKS.map(d => {
|
||||||
newDocLinks.push({ id: d.NRN, descr: d.SDESCR });
|
newDocLinks.push({ id: d.NRN, descr: d.SDESCR });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -462,29 +454,16 @@ const useTasks = () => {
|
|||||||
let newRoutes = [];
|
let newRoutes = [];
|
||||||
//Если найдены маршруты
|
//Если найдены маршруты
|
||||||
if (data.XEVROUTES) {
|
if (data.XEVROUTES) {
|
||||||
arrayFormer(data.XEVROUTES).map(r => {
|
data.XEVROUTES.map(r => {
|
||||||
newRoutes.push({ src: r.SSOURCE, dest: r.SDESTINATION });
|
newRoutes.push({ src: r.SSOURCE, dest: r.SDESTINATION });
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
//Инициализируем точки событий
|
|
||||||
let newPoints = [];
|
|
||||||
if (data.XEVPOINTS) {
|
|
||||||
arrayFormer(data.XEVPOINTS).map(p => {
|
|
||||||
newPoints.push({ point: p.SEVPOINT, addNoteOnChst: p.ADDNOTE_ONCHST, addNoteOnSend: p.ADDNOTE_ONSEND, banUpdate: p.BAN_UPDATE });
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//Инициализируем типы заголовков примечаний
|
|
||||||
let newNoteTypes = [];
|
|
||||||
if (data.XNOTETYPES) {
|
|
||||||
arrayFormer(data.XNOTETYPES).map(nt => {
|
|
||||||
newNoteTypes.push(nt.SNAME);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
//Инициализируем пользователей
|
//Инициализируем пользователей
|
||||||
let newAccounts = [];
|
let newAccounts = [];
|
||||||
//Если найдены пользователи
|
//Если найдены пользователи
|
||||||
if (data.XACCOUNTS) {
|
if (data.XACCOUNTS) {
|
||||||
arrayFormer(data.XACCOUNTS).map(a => {
|
data.XACCOUNTS.map(a => {
|
||||||
|
//console.log(a.SEVRN_LIST.toString().includes(";"));
|
||||||
newAccounts.push({
|
newAccounts.push({
|
||||||
agnAbbr: a.SAGNABBR,
|
agnAbbr: a.SAGNABBR,
|
||||||
image: a.BIMAGE,
|
image: a.BIMAGE,
|
||||||
@ -494,10 +473,6 @@ const useTasks = () => {
|
|||||||
}
|
}
|
||||||
//Указываем сформированные маршруты
|
//Указываем сформированные маршруты
|
||||||
setEventRoutes([...newRoutes]);
|
setEventRoutes([...newRoutes]);
|
||||||
//Указываем сформированные точки маршрута
|
|
||||||
setEventPoints([...newPoints]);
|
|
||||||
//Указываем типы заголовков примечаний
|
|
||||||
setNoteTypes([...newNoteTypes]);
|
|
||||||
//Указываем сформированные аккаунты
|
//Указываем сформированные аккаунты
|
||||||
setAccounts([...newAccounts]);
|
setAccounts([...newAccounts]);
|
||||||
};
|
};
|
||||||
@ -528,13 +503,13 @@ const useTasks = () => {
|
|||||||
//Если статусы есть
|
//Если статусы есть
|
||||||
if (data.XGROUPS) {
|
if (data.XGROUPS) {
|
||||||
//Формируем структуру статусов
|
//Формируем структуру статусов
|
||||||
arrayFormer(data.XGROUPS).map((group, i) => {
|
data.XGROUPS.map((group, i) => {
|
||||||
newGroups.push({ id: i, code: group.name, caption: group.caption, color: randomColor(i + 1) });
|
newGroups.push({ id: i, code: group.name, caption: group.caption, color: randomColor(i + 1) });
|
||||||
});
|
});
|
||||||
//Если есть события
|
//Если есть события
|
||||||
if (data.XROWS) {
|
if (data.XROWS) {
|
||||||
//Формируем структуру событий
|
//Формируем структуру событий
|
||||||
arrayFormer(data.XROWS).map((task, i) => {
|
data.XROWS.map((task, i) => {
|
||||||
newRows.push(initTask(i, newGroups.find(x => x.caption === task.groupName).id, task));
|
newRows.push(initTask(i, newGroups.find(x => x.caption === task.groupName).id, task));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -569,8 +544,6 @@ const useTasks = () => {
|
|||||||
return [
|
return [
|
||||||
tasks,
|
tasks,
|
||||||
eventRoutes,
|
eventRoutes,
|
||||||
eventPoints,
|
|
||||||
noteTypes,
|
|
||||||
docLinks,
|
docLinks,
|
||||||
accounts,
|
accounts,
|
||||||
taskFormOpen,
|
taskFormOpen,
|
||||||
@ -646,6 +619,57 @@ const useClientEvent = (taskRn, taskType = "", taskStatus = "") => {
|
|||||||
}
|
}
|
||||||
}, [task.sprefix, task.stype, executeStored]);
|
}, [task.sprefix, task.stype, executeStored]);
|
||||||
|
|
||||||
|
//Отображение раздела "Типы событий"
|
||||||
|
// const handleTypeOpen = useCallback(async () => {
|
||||||
|
// pOnlineShowDictionary({
|
||||||
|
// unitCode: "ClientEventTypes",
|
||||||
|
// showMethod: "main",
|
||||||
|
// inputParameters: [{ name: "in_EVNTYPE_NAME", value: task.stype }],
|
||||||
|
// callBack: async res => {
|
||||||
|
// if (res.success) {
|
||||||
|
// //Считываем параметры исходя из типа события
|
||||||
|
// const data = await executeStored({
|
||||||
|
// stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVNTYPES_INIT",
|
||||||
|
// args: {
|
||||||
|
// SEVENT_TYPE: res.outParameters.out_EVNTYPE_CODE,
|
||||||
|
// SCURRENT_PREF: task.sprefix
|
||||||
|
// },
|
||||||
|
// tagValueProcessor: () => undefined
|
||||||
|
// });
|
||||||
|
// if (data) {
|
||||||
|
// setTask(pv => ({
|
||||||
|
// ...pv,
|
||||||
|
// stype: res.outParameters.out_EVNTYPE_CODE,
|
||||||
|
// sprefix: data.SPREF,
|
||||||
|
// snumber: data.SNUMB,
|
||||||
|
// sstatus: data.SDEFAULT_STATUS
|
||||||
|
// }));
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }, [executeStored, pOnlineShowDictionary, task.sprefix, task.stype]);
|
||||||
|
|
||||||
|
//Отображение раздела "Статусы типового события"
|
||||||
|
// const handleStatusOpen = useCallback(async () => {
|
||||||
|
// pOnlineShowDictionary({
|
||||||
|
// unitCode: "ClientEventTypesStates",
|
||||||
|
// showMethod: "main",
|
||||||
|
// inputParameters: [
|
||||||
|
// { name: "in_SEVNTYPE_CODE", value: task.stype },
|
||||||
|
// { name: "in_EVENT_STATUS_EVNSTAT_CODE", value: task.sstatus }
|
||||||
|
// ],
|
||||||
|
// callBack: res => {
|
||||||
|
// res.success
|
||||||
|
// ? setTask(pv => ({
|
||||||
|
// ...pv,
|
||||||
|
// sstatus: res.outParameters.out_EVENT_STATUS_EVNSTAT_CODE
|
||||||
|
// }))
|
||||||
|
// : null;
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }, [pOnlineShowDictionary, task.sstatus, task.stype]);
|
||||||
|
|
||||||
//Отображение раздела "Клиенты"
|
//Отображение раздела "Клиенты"
|
||||||
const handleClientClientsOpen = useCallback(async () => {
|
const handleClientClientsOpen = useCallback(async () => {
|
||||||
pOnlineShowDictionary({
|
pOnlineShowDictionary({
|
||||||
@ -869,7 +893,18 @@ const useClientEvent = (taskRn, taskType = "", taskStatus = "") => {
|
|||||||
}));
|
}));
|
||||||
}, [task.scrn, task.sdescription, task.sinit_clnperson, task.sinit_user, task.snumber, task.sprefix, task.sstatus, task.stype]);
|
}, [task.scrn, task.sdescription, task.sinit_clnperson, task.sinit_user, task.snumber, task.sprefix, task.sstatus, task.stype]);
|
||||||
|
|
||||||
return [task, setTask, insertEvent, updateEvent, handleClientClientsOpen, handleClientPersonOpen, handleCrnOpen, getEventNextNumb];
|
return [
|
||||||
|
task,
|
||||||
|
setTask,
|
||||||
|
insertEvent,
|
||||||
|
updateEvent,
|
||||||
|
//handleTypeOpen,
|
||||||
|
//handleStatusOpen,
|
||||||
|
handleClientClientsOpen,
|
||||||
|
handleClientPersonOpen,
|
||||||
|
handleCrnOpen,
|
||||||
|
getEventNextNumb
|
||||||
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
//Карточка события
|
//Карточка события
|
||||||
@ -946,7 +981,8 @@ const useTaskCard = () => {
|
|||||||
if (data.NIDENT) {
|
if (data.NIDENT) {
|
||||||
pOnlineShowDictionary({
|
pOnlineShowDictionary({
|
||||||
unitCode: "ClientEvents",
|
unitCode: "ClientEvents",
|
||||||
inputParameters: [{ name: "in_Ident", value: data.NIDENT }]
|
showMethod: "main",
|
||||||
|
inputParameters: [{ name: "in_IDENT", value: data.NIDENT }]
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -992,7 +1028,7 @@ const useTaskCard = () => {
|
|||||||
|
|
||||||
//По нажатию действия "Перейти"
|
//По нажатию действия "Перейти"
|
||||||
const handleStateChange = useCallback(
|
const handleStateChange = useCallback(
|
||||||
async (nEvent, handleReload, evPoints, handleNote) => {
|
async (nEvent, handleReload) => {
|
||||||
//Выполняем инициализацию параметров
|
//Выполняем инициализацию параметров
|
||||||
const firstStep = await executeStored({
|
const firstStep = await executeStored({
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
||||||
@ -1021,7 +1057,6 @@ const useTaskCard = () => {
|
|||||||
NPASS: point.outParameters.out_RN
|
NPASS: point.outParameters.out_RN
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
const pointSettings = evPoints.find(ep => ep.point === point.outParameters.out_NEXT_POINT);
|
|
||||||
if (secondStep) {
|
if (secondStep) {
|
||||||
//Если требуется выбрать получателя
|
//Если требуется выбрать получателя
|
||||||
if (secondStep.NSELECT_EXEC === 1) {
|
if (secondStep.NSELECT_EXEC === 1) {
|
||||||
@ -1040,79 +1075,43 @@ const useTaskCard = () => {
|
|||||||
{ name: "in_CLIENT_PERSON", value: firstStep.SCLIENT_PERSON }
|
{ name: "in_CLIENT_PERSON", value: firstStep.SCLIENT_PERSON }
|
||||||
],
|
],
|
||||||
callBack: async send => {
|
callBack: async send => {
|
||||||
//Общие аргументы
|
|
||||||
const mainArgs = {
|
|
||||||
NIDENT: firstStep.NIDENT,
|
|
||||||
NSTEP: 3,
|
|
||||||
NEVENT: nEvent,
|
|
||||||
SEVENT_STAT: point.outParameters.out_NEXT_POINT,
|
|
||||||
SSEND_CLIENT: send.outParameters.out_CLIENT_CODE,
|
|
||||||
SSEND_DIVISION: send.outParameters.out_DIVISION_CODE,
|
|
||||||
SSEND_POST: send.outParameters.out_POST_CODE,
|
|
||||||
SSEND_PERFORM: send.outParameters.out_POST_IN_DIV_CODE,
|
|
||||||
SSEND_PERSON: send.outParameters.out_PERSON_CODE,
|
|
||||||
SSEND_STAFFGRP: send.outParameters.out_STAFFGRP_CODE,
|
|
||||||
SSEND_USER_GROUP: send.outParameters.out_USER_GROUP_CODE,
|
|
||||||
SSEND_USER_NAME: send.outParameters.out_USER_NAME,
|
|
||||||
NSEND_PREDEFINED_EXEC: send.outParameters.out_PREDEFINED_EXEC,
|
|
||||||
NSEND_PREDEFINED_PROC: send.outParameters.out_PREDEFINED_PROC
|
|
||||||
};
|
|
||||||
//Выполняем переход к выбранной точке с исполнителем
|
//Выполняем переход к выбранной точке с исполнителем
|
||||||
pointSettings.addNoteOnChst
|
await executeStored({
|
||||||
? handleNote(async n => {
|
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
||||||
//Если требуется примечание
|
args: {
|
||||||
await executeStored({
|
NIDENT: firstStep.NIDENT,
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
NSTEP: 3,
|
||||||
args: {
|
SEVENT_STAT: point.outParameters.out_NEXT_POINT,
|
||||||
...mainArgs,
|
SSEND_CLIENT: send.outParameters.out_CLIENT_CODE,
|
||||||
...{ SNOTE_HEADER: n.header ? n.header : null, SNOTE: n.text ? n.text : null }
|
SSEND_DIVISION: send.outParameters.out_DIVISION_CODE,
|
||||||
}
|
SSEND_POST: send.outParameters.out_POST_CODE,
|
||||||
});
|
SSEND_PERFORM: send.outParameters.out_POST_IN_DIV_CODE,
|
||||||
//Если требуется перезагрузить данные
|
SSEND_PERSON: send.outParameters.out_PERSON_CODE,
|
||||||
if (handleReload) {
|
SSEND_STAFFGRP: send.outParameters.out_STAFFGRP_CODE,
|
||||||
handleReload();
|
SSEND_USER_GROUP: send.outParameters.out_USER_GROUP_CODE,
|
||||||
}
|
SSEND_USER_NAME: send.outParameters.out_USER_NAME,
|
||||||
})
|
NSEND_PREDEFINED_EXEC: send.outParameters.out_PREDEFINED_EXEC,
|
||||||
: await executeStored({
|
NSEND_PREDEFINED_PROC: send.outParameters.out_PREDEFINED_PROC
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
}
|
||||||
args: mainArgs
|
});
|
||||||
});
|
|
||||||
//Если требуется перезагрузить данные
|
//Если требуется перезагрузить данные
|
||||||
if (handleReload && !pointSettings.addNoteOnChst) {
|
if (handleReload) {
|
||||||
handleReload();
|
handleReload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
//Общие аргументы
|
|
||||||
const mainArgs = {
|
|
||||||
NIDENT: firstStep.NIDENT,
|
|
||||||
NSTEP: 3,
|
|
||||||
NEVENT: nEvent,
|
|
||||||
SEVENT_STAT: point.outParameters.out_NEXT_POINT
|
|
||||||
};
|
|
||||||
//Выполняем переход к выбранной точке с предопределенным исполнителем
|
//Выполняем переход к выбранной точке с предопределенным исполнителем
|
||||||
pointSettings.addNoteOnChst
|
await executeStored({
|
||||||
? handleNote(async n => {
|
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
||||||
//Если требуется примечание
|
args: {
|
||||||
await executeStored({
|
NIDENT: firstStep.NIDENT,
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
NSTEP: 3,
|
||||||
args: {
|
SEVENT_STAT: point.outParameters.out_NEXT_POINT
|
||||||
...mainArgs,
|
}
|
||||||
...{ SNOTE_HEADER: n.header ? n.header : null, SNOTE: n.text ? n.text : null }
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
//Если требуется перезагрузить данные
|
|
||||||
if (handleReload) {
|
|
||||||
handleReload();
|
|
||||||
}
|
|
||||||
})
|
|
||||||
: await executeStored({
|
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
|
||||||
args: mainArgs
|
|
||||||
});
|
|
||||||
//Если требуется перезагрузить данные
|
//Если требуется перезагрузить данные
|
||||||
if (handleReload && !pointSettings.addNoteOnChst) {
|
if (handleReload) {
|
||||||
handleReload();
|
handleReload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1121,13 +1120,12 @@ const useTaskCard = () => {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
||||||
[executeStored, pOnlineShowDictionary]
|
[executeStored, pOnlineShowDictionary]
|
||||||
);
|
);
|
||||||
|
|
||||||
//Изменение статуса события
|
//Изменение статуса события
|
||||||
const handleSend = useCallback(
|
const handleSend = useCallback(
|
||||||
async (nEvent, handleReload, note = null) => {
|
async (nEvent, handleReload) => {
|
||||||
//Выполняем инициализацию параметров
|
//Выполняем инициализацию параметров
|
||||||
const firstStep = await executeStored({
|
const firstStep = await executeStored({
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SEND",
|
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_SEND",
|
||||||
@ -1160,7 +1158,6 @@ const useTaskCard = () => {
|
|||||||
args: {
|
args: {
|
||||||
NIDENT: firstStep.NIDENT,
|
NIDENT: firstStep.NIDENT,
|
||||||
NSTEP: 2,
|
NSTEP: 2,
|
||||||
NEVENT: nEvent,
|
|
||||||
SSEND_CLIENT: send.outParameters.out_CLIENT_CODE,
|
SSEND_CLIENT: send.outParameters.out_CLIENT_CODE,
|
||||||
SSEND_DIVISION: send.outParameters.out_DIVISION_CODE,
|
SSEND_DIVISION: send.outParameters.out_DIVISION_CODE,
|
||||||
SSEND_POST: send.outParameters.out_POST_CODE,
|
SSEND_POST: send.outParameters.out_POST_CODE,
|
||||||
@ -1170,9 +1167,7 @@ const useTaskCard = () => {
|
|||||||
SSEND_USER_GROUP: send.outParameters.out_USER_GROUP_CODE,
|
SSEND_USER_GROUP: send.outParameters.out_USER_GROUP_CODE,
|
||||||
SSEND_USER_NAME: send.outParameters.out_USER_NAME,
|
SSEND_USER_NAME: send.outParameters.out_USER_NAME,
|
||||||
NSEND_PREDEFINED_EXEC: send.outParameters.out_PREDEFINED_EXEC,
|
NSEND_PREDEFINED_EXEC: send.outParameters.out_PREDEFINED_EXEC,
|
||||||
NSEND_PREDEFINED_PROC: send.outParameters.out_PREDEFINED_PROC,
|
NSEND_PREDEFINED_PROC: send.outParameters.out_PREDEFINED_PROC
|
||||||
SNOTE_HEADER: note.text ? note.header : null,
|
|
||||||
SNOTE: note.text ? note.text : null
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//Если требуется перезагрузить данные
|
//Если требуется перезагрузить данные
|
||||||
|
Loading…
x
Reference in New Issue
Block a user