WEB APP: Панель "Работы проектов" - разделение на компоненты главной страницы, корректировка серверных вызовов детализаций под изменения пакета

This commit is contained in:
Mikhail Chechnev 2024-04-19 21:41:21 +03:00
parent 08c9459f40
commit d51f8b5e09
4 changed files with 82 additions and 62 deletions

View File

@ -45,7 +45,7 @@ const LabFactRptDtl = ({ periodId, title, onHide }) => {
const loadFactRptDtl = useCallback(async () => {
if (factRptDtl.reload) {
const data = await executeStored({
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_FACT_RPT",
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_FACT_RPT_LIST",
args: {
NJB_PERIODS: periodId,
CORDERS: { VALUE: object2Base64XML(factRptDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },

View File

@ -44,7 +44,7 @@ const LabPlanFOTDtl = ({ periodId, title, onHide }) => {
const loadPlanFOTDtl = useCallback(async () => {
if (planFOTDtl.reload) {
const data = await executeStored({
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_FOT",
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_FOT_LIST",
args: {
NJB_PERIODS: periodId,
CORDERS: { VALUE: object2Base64XML(planFOTDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },

View File

@ -49,7 +49,7 @@ const LabPlanJobsDtl = ({ periodId, title, onHide, onProjectClick }) => {
const loadPlanJobsDtl = useCallback(async () => {
if (planJobsDtl.reload) {
const data = await executeStored({
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS",
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_JOBS_LIST",
args: {
NJB_PERIODS: periodId,
CORDERS: { VALUE: object2Base64XML(planJobsDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },

View File

@ -66,22 +66,12 @@ const STYLES = {
PERIODS_DRAWER: { width: "1200px", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "1200px", boxSizing: "border-box" } }
};
//Единицы измерения длительности
const DURATION_MEAS = {
0: "День",
1: "Неделя",
2: "Декада",
3: "Месяц",
4: "Квартал",
5: "Год"
};
//------------------------------------
//Вспомогательные функции и компоненты
//------------------------------------
//Диалог параметров инициализации панели
const InitDialog = ({ dateBegin, dateFact, onOk, onCancel }) => {
const InitPrmsDialog = ({ dateBegin, dateFact, onOk, onCancel }) => {
//Собственное состояние - значения с-по
const [values, setValues] = useState({ dateBegin: formatDateJSONDateOnly(dateBegin), dateFact: formatDateJSONDateOnly(dateFact) });
@ -130,13 +120,72 @@ const InitDialog = ({ dateBegin, dateFact, onOk, onCancel }) => {
};
//Контроль свойств - Диалог параметров инициализации панели
InitDialog.propTypes = {
InitPrmsDialog.propTypes = {
dateBegin: PropTypes.instanceOf(Date).isRequired,
dateFact: PropTypes.instanceOf(Date).isRequired,
onOk: PropTypes.func,
onCancel: PropTypes.func
};
//Область параметров инициализации панели
const InitPrmsArea = ({ dateBegin, dateFact, durationMeasCode, labMeasCode, onClick }) => {
return (
<List>
<ListItem>
<ListItemText
secondary={
<>
<b>Начало: </b>
{formatDateRF(dateBegin)}
<br />
<b>Факт на: </b>
{formatDateRF(dateFact)}
<br />
<b>Длительность: </b>
{durationMeasCode}
<br />
<b>Трудоёмкость: </b>
{labMeasCode}
</>
}
/>
</ListItem>
<ListItem>
<Button fullWidth variant="contained" startIcon={<Icon>refresh</Icon>} onClick={onClick ? onClick : null}>
Переформировать...
</Button>
</ListItem>
</List>
);
};
//Контроль свойств - Область параметров инициализации панели
InitPrmsArea.propTypes = {
dateBegin: PropTypes.instanceOf(Date),
dateFact: PropTypes.instanceOf(Date),
durationMeasCode: PropTypes.string,
labMeasCode: PropTypes.string,
onClick: PropTypes.func
};
//Область сохранения изменений
const SaveChangesArea = ({ onClick }) => {
return (
<List>
<ListItem>
<Button fullWidth color="warning" variant="contained" startIcon={<Icon>save</Icon>} onClick={onClick}>
Сохранить
</Button>
</ListItem>
</List>
);
};
//Контроль свойств - Область сохранения изменений
SaveChangesArea.propTypes = {
onClick: PropTypes.func
};
//Список проектов
const ProjectsList = ({ projects = [], selectedProject, onClick } = {}) => {
//Подключение к контексту сообщений
@ -210,7 +259,9 @@ const PrjJobs = () => {
dateBegin: null,
dateFact: null,
durationMeas: null,
durationMeasCode: null,
labMeas: null,
labMeasCode: null,
resourceStatus: null,
ident: null,
projects: [],
@ -270,12 +321,12 @@ const PrjJobs = () => {
//Изменение работы в графике
const modifyJob = useCallback(
async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {
async (job, dateFrom, dateTo) => {
let data = null;
try {
data = await executeStored({
stored: "PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD",
args: { NJB_JOBS: job, DDATE_FROM: dateFrom, DDATE_TO: dateTo, DBEGIN: dateBegin, DFACT: dateFact, NDURATION_MEAS: durationMeas }
args: { NJB_JOBS: job, DDATE_FROM: dateFrom, DDATE_TO: dateTo }
});
if (data?.NRESOURCE_STATUS != -1) {
setState(pv => ({ ...pv, resourceStatus: data.NRESOURCE_STATUS, needSave: true }));
@ -306,8 +357,6 @@ const PrjJobs = () => {
args: {
DBEGIN: state.dateBegin ? state.dateBegin : null,
DFACT: state.dateFact ? state.dateFact : null,
NDURATION_MEAS: state.durationMeas,
SLAB_MEAS: state.labMeas,
NIDENT: state.ident
}
});
@ -318,12 +367,14 @@ const PrjJobs = () => {
dateBegin: new Date(data.DBEGIN),
dateFact: new Date(data.DFACT),
durationMeas: data.NDURATION_MEAS,
labMeas: data.SLAB_MEAS,
durationMeasCode: data.SDURATION_MEAS,
labMeas: data.NLAB_MEAS,
labMeasCode: data.SLAB_MEAS,
resourceStatus: data.NRESOURCE_STATUS,
ident: data.NIDENT
}));
}
}, [state.init, state.dateBegin, state.dateFact, state.durationMeas, state.labMeas, state.ident, executeStored]);
}, [state.init, state.dateBegin, state.dateFact, state.ident, executeStored]);
//Грузим список проектов при смене идентификатора процесса
useEffect(() => {
@ -377,7 +428,7 @@ const PrjJobs = () => {
//Обработка измненения сроков задачи в диаграмме Гантта
const handleTaskDatesChange = ({ task, start, end, isMain }) => {
if (isMain) modifyJob(task.rn, new Date(start), new Date(end), new Date(state.dateBegin), new Date(state.dateFact), state.durationMeas);
if (isMain) modifyJob(task.rn, new Date(start), new Date(end));
};
//Отработка нажатия на отображения диалога параметров инициализации панели
@ -403,7 +454,7 @@ const PrjJobs = () => {
return (
<Box p={2}>
{state.showInitDialog ? (
<InitDialog
<InitPrmsDialog
dateBegin={state.dateBegin}
dateFact={state.dateFact}
onOk={handleOKInitDialogClick}
@ -427,48 +478,17 @@ const PrjJobs = () => {
>
{state.projectsLoaded ? (
<>
<List>
<ListItem>
<ListItemText
secondary={
<>
<b>Начало: </b>
{formatDateRF(state.dateBegin)}
<br />
<b>Факт на: </b>
{formatDateRF(state.dateFact)}
<br />
<b>Длительность: </b>
{DURATION_MEAS[state.durationMeas]}
<br />
<b>Трудоёмкость: </b>
{state.labMeas}
</>
}
/>
</ListItem>
<ListItem>
<Button fullWidth variant="contained" startIcon={<Icon>refresh</Icon>} onClick={handleShowInitDialogClick}>
Переформировать...
</Button>
</ListItem>
</List>
<InitPrmsArea
dateBegin={state.dateBegin}
dateFact={state.dateFact}
durationMeasCode={state.durationMeasCode}
labMeasCode={state.labMeasCode}
onClick={handleShowInitDialogClick}
/>
<Divider />
{state.needSave ? (
<>
<List>
<ListItem>
<Button
fullWidth
color="warning"
variant="contained"
startIcon={<Icon>save</Icon>}
onClick={handleSaveToProjectsClick}
>
Сохранить
</Button>
</ListItem>
</List>
<SaveChangesArea onClick={handleSaveToProjectsClick} />
<Divider />
</>
) : null}