WEB APP: Панель "Работы проектов" - разделение на компоненты главной страницы, корректировка серверных вызовов детализаций под изменения пакета
This commit is contained in:
parent
08c9459f40
commit
d51f8b5e09
@ -45,7 +45,7 @@ const LabFactRptDtl = ({ periodId, title, onHide }) => {
|
|||||||
const loadFactRptDtl = useCallback(async () => {
|
const loadFactRptDtl = useCallback(async () => {
|
||||||
if (factRptDtl.reload) {
|
if (factRptDtl.reload) {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_FACT_RPT",
|
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_FACT_RPT_LIST",
|
||||||
args: {
|
args: {
|
||||||
NJB_PERIODS: periodId,
|
NJB_PERIODS: periodId,
|
||||||
CORDERS: { VALUE: object2Base64XML(factRptDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
CORDERS: { VALUE: object2Base64XML(factRptDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
||||||
|
@ -44,7 +44,7 @@ const LabPlanFOTDtl = ({ periodId, title, onHide }) => {
|
|||||||
const loadPlanFOTDtl = useCallback(async () => {
|
const loadPlanFOTDtl = useCallback(async () => {
|
||||||
if (planFOTDtl.reload) {
|
if (planFOTDtl.reload) {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_FOT",
|
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_FOT_LIST",
|
||||||
args: {
|
args: {
|
||||||
NJB_PERIODS: periodId,
|
NJB_PERIODS: periodId,
|
||||||
CORDERS: { VALUE: object2Base64XML(planFOTDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
CORDERS: { VALUE: object2Base64XML(planFOTDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
||||||
|
@ -49,7 +49,7 @@ const LabPlanJobsDtl = ({ periodId, title, onHide, onProjectClick }) => {
|
|||||||
const loadPlanJobsDtl = useCallback(async () => {
|
const loadPlanJobsDtl = useCallback(async () => {
|
||||||
if (planJobsDtl.reload) {
|
if (planJobsDtl.reload) {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_LIST_PLAN_JOBS",
|
stored: "PKG_P8PANELS_PROJECTS.JB_PERIODS_PLAN_JOBS_LIST",
|
||||||
args: {
|
args: {
|
||||||
NJB_PERIODS: periodId,
|
NJB_PERIODS: periodId,
|
||||||
CORDERS: { VALUE: object2Base64XML(planJobsDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
CORDERS: { VALUE: object2Base64XML(planJobsDtl.orders, { arrayNodeName: "orders" }), SDATA_TYPE: SERV_DATA_TYPE_CLOB },
|
||||||
|
@ -66,22 +66,12 @@ const STYLES = {
|
|||||||
PERIODS_DRAWER: { width: "1200px", flexShrink: 0, [`& .MuiDrawer-paper`]: { width: "1200px", boxSizing: "border-box" } }
|
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) });
|
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,
|
dateBegin: PropTypes.instanceOf(Date).isRequired,
|
||||||
dateFact: PropTypes.instanceOf(Date).isRequired,
|
dateFact: PropTypes.instanceOf(Date).isRequired,
|
||||||
onOk: PropTypes.func,
|
onOk: PropTypes.func,
|
||||||
onCancel: 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 } = {}) => {
|
const ProjectsList = ({ projects = [], selectedProject, onClick } = {}) => {
|
||||||
//Подключение к контексту сообщений
|
//Подключение к контексту сообщений
|
||||||
@ -210,7 +259,9 @@ const PrjJobs = () => {
|
|||||||
dateBegin: null,
|
dateBegin: null,
|
||||||
dateFact: null,
|
dateFact: null,
|
||||||
durationMeas: null,
|
durationMeas: null,
|
||||||
|
durationMeasCode: null,
|
||||||
labMeas: null,
|
labMeas: null,
|
||||||
|
labMeasCode: null,
|
||||||
resourceStatus: null,
|
resourceStatus: null,
|
||||||
ident: null,
|
ident: null,
|
||||||
projects: [],
|
projects: [],
|
||||||
@ -270,12 +321,12 @@ const PrjJobs = () => {
|
|||||||
|
|
||||||
//Изменение работы в графике
|
//Изменение работы в графике
|
||||||
const modifyJob = useCallback(
|
const modifyJob = useCallback(
|
||||||
async (job, dateFrom, dateTo, dateBegin, dateFact, durationMeas) => {
|
async (job, dateFrom, dateTo) => {
|
||||||
let data = null;
|
let data = null;
|
||||||
try {
|
try {
|
||||||
data = await executeStored({
|
data = await executeStored({
|
||||||
stored: "PKG_P8PANELS_PROJECTS.JB_JOBS_MODIFY_PERIOD",
|
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) {
|
if (data?.NRESOURCE_STATUS != -1) {
|
||||||
setState(pv => ({ ...pv, resourceStatus: data.NRESOURCE_STATUS, needSave: true }));
|
setState(pv => ({ ...pv, resourceStatus: data.NRESOURCE_STATUS, needSave: true }));
|
||||||
@ -306,8 +357,6 @@ const PrjJobs = () => {
|
|||||||
args: {
|
args: {
|
||||||
DBEGIN: state.dateBegin ? state.dateBegin : null,
|
DBEGIN: state.dateBegin ? state.dateBegin : null,
|
||||||
DFACT: state.dateFact ? state.dateFact : null,
|
DFACT: state.dateFact ? state.dateFact : null,
|
||||||
NDURATION_MEAS: state.durationMeas,
|
|
||||||
SLAB_MEAS: state.labMeas,
|
|
||||||
NIDENT: state.ident
|
NIDENT: state.ident
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -318,12 +367,14 @@ const PrjJobs = () => {
|
|||||||
dateBegin: new Date(data.DBEGIN),
|
dateBegin: new Date(data.DBEGIN),
|
||||||
dateFact: new Date(data.DFACT),
|
dateFact: new Date(data.DFACT),
|
||||||
durationMeas: data.NDURATION_MEAS,
|
durationMeas: data.NDURATION_MEAS,
|
||||||
labMeas: data.SLAB_MEAS,
|
durationMeasCode: data.SDURATION_MEAS,
|
||||||
|
labMeas: data.NLAB_MEAS,
|
||||||
|
labMeasCode: data.SLAB_MEAS,
|
||||||
resourceStatus: data.NRESOURCE_STATUS,
|
resourceStatus: data.NRESOURCE_STATUS,
|
||||||
ident: data.NIDENT
|
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(() => {
|
useEffect(() => {
|
||||||
@ -377,7 +428,7 @@ const PrjJobs = () => {
|
|||||||
|
|
||||||
//Обработка измненения сроков задачи в диаграмме Гантта
|
//Обработка измненения сроков задачи в диаграмме Гантта
|
||||||
const handleTaskDatesChange = ({ task, start, end, isMain }) => {
|
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 (
|
return (
|
||||||
<Box p={2}>
|
<Box p={2}>
|
||||||
{state.showInitDialog ? (
|
{state.showInitDialog ? (
|
||||||
<InitDialog
|
<InitPrmsDialog
|
||||||
dateBegin={state.dateBegin}
|
dateBegin={state.dateBegin}
|
||||||
dateFact={state.dateFact}
|
dateFact={state.dateFact}
|
||||||
onOk={handleOKInitDialogClick}
|
onOk={handleOKInitDialogClick}
|
||||||
@ -427,48 +478,17 @@ const PrjJobs = () => {
|
|||||||
>
|
>
|
||||||
{state.projectsLoaded ? (
|
{state.projectsLoaded ? (
|
||||||
<>
|
<>
|
||||||
<List>
|
<InitPrmsArea
|
||||||
<ListItem>
|
dateBegin={state.dateBegin}
|
||||||
<ListItemText
|
dateFact={state.dateFact}
|
||||||
secondary={
|
durationMeasCode={state.durationMeasCode}
|
||||||
<>
|
labMeasCode={state.labMeasCode}
|
||||||
<b>Начало: </b>
|
onClick={handleShowInitDialogClick}
|
||||||
{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>
|
|
||||||
<Divider />
|
<Divider />
|
||||||
{state.needSave ? (
|
{state.needSave ? (
|
||||||
<>
|
<>
|
||||||
<List>
|
<SaveChangesArea onClick={handleSaveToProjectsClick} />
|
||||||
<ListItem>
|
|
||||||
<Button
|
|
||||||
fullWidth
|
|
||||||
color="warning"
|
|
||||||
variant="contained"
|
|
||||||
startIcon={<Icon>save</Icon>}
|
|
||||||
onClick={handleSaveToProjectsClick}
|
|
||||||
>
|
|
||||||
Сохранить
|
|
||||||
</Button>
|
|
||||||
</ListItem>
|
|
||||||
</List>
|
|
||||||
<Divider />
|
<Divider />
|
||||||
</>
|
</>
|
||||||
) : null}
|
) : null}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user