Карточка тех. объекта: отображение даты следующего ТО, изменение графика ТО
This commit is contained in:
parent
b9a925d0d1
commit
2201fa4004
@ -22,6 +22,15 @@ create or replace package UDO_PKG_EQUIPTCF as
|
|||||||
COUT out clob -- Сериализованная таблица данных
|
COUT out clob -- Сериализованная таблица данных
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Выбор графиков технического обслуживания и ремонта технического объекта */
|
||||||
|
procedure EQCONFIG_THOBJ_SELECT_EQTCHSRV
|
||||||
|
(
|
||||||
|
NEQTCHSRV in number := null, -- Рег. номер графика ТО и ремонтов (null - любой)
|
||||||
|
NEQCONFIG in number := null, -- Рег. номер технического объекта (null - любой)
|
||||||
|
NSTATE in number := null, -- Состояние (null - любое)
|
||||||
|
NIDENT out number -- Идентификатор списка
|
||||||
|
);
|
||||||
|
|
||||||
/* Формирование карточки технического объекта */
|
/* Формирование карточки технического объекта */
|
||||||
procedure EQCONFIG_THOBJ_CARD
|
procedure EQCONFIG_THOBJ_CARD
|
||||||
(
|
(
|
||||||
@ -36,6 +45,14 @@ create or replace package UDO_PKG_EQUIPTCF as
|
|||||||
NEQUIPDSCMML in number -- Рег. номер модели
|
NEQUIPDSCMML in number -- Рег. номер модели
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/* Модификация графика ТО и ремонтов для технического объекта */
|
||||||
|
procedure EQCONFIG_THOBJ_CHNG_EQTCHSRV
|
||||||
|
(
|
||||||
|
NEQCONFIG in number, -- Рег. номер технического объекта
|
||||||
|
NEQTCHSRV in number, -- Рег. номер графика ТО и ремонтов
|
||||||
|
DPLANDATE_FROM in date -- Уточнённая плановая дата начала ремонта
|
||||||
|
);
|
||||||
|
|
||||||
/* Формирование ремонтной ведомости для технического объекта */
|
/* Формирование ремонтной ведомости для технического объекта */
|
||||||
procedure EQCONFIG_THOBJ_MAKE_EQRPSHEET
|
procedure EQCONFIG_THOBJ_MAKE_EQRPSHEET
|
||||||
(
|
(
|
||||||
@ -390,6 +407,57 @@ text="Проверка прав доступа при формировании
|
|||||||
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
COUT := PKG_P8PANELS_VISUAL.TDATA_GRID_TO_XML(RDATA_GRID => RDG, NINCLUDE_DEF => NINCLUDE_DEF);
|
||||||
end EQCONFIG_THOBJ_LIST;
|
end EQCONFIG_THOBJ_LIST;
|
||||||
|
|
||||||
|
/* Получение даты следующего технического обслуживания технического объекта */
|
||||||
|
function EQCONFIG_THOBJ_GET_NXTEQTCHSRV
|
||||||
|
(
|
||||||
|
NEQCONFIG in number, -- Рег. номер технического объекта
|
||||||
|
NSTATE in number := null -- Состояние (null - любое)
|
||||||
|
) return date -- Дата следующего технического обслуживания
|
||||||
|
is
|
||||||
|
DRES PKG_STD.TLDATE; -- Буфер для результата
|
||||||
|
begin
|
||||||
|
/* Найдем график ТО и ремонтов, утвержденный, с минимальной датой по данному тех. объекту */
|
||||||
|
select min(T.DATEPRD_BEG)
|
||||||
|
into DRES
|
||||||
|
from EQTCHSRV T
|
||||||
|
where T.EQCONFIG_TECH = NEQCONFIG
|
||||||
|
and ((NSTATE is null) or ((NSTATE is not null) and (T.STATE = NSTATE)))
|
||||||
|
and T.DATEPRD_BEG >= sysdate;
|
||||||
|
/* Вернём результат */
|
||||||
|
return DRES;
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
return null;
|
||||||
|
end EQCONFIG_THOBJ_GET_NXTEQTCHSRV;
|
||||||
|
|
||||||
|
/* Выбор графиков технического обслуживания и ремонта технического объекта */
|
||||||
|
procedure EQCONFIG_THOBJ_SELECT_EQTCHSRV
|
||||||
|
(
|
||||||
|
NEQTCHSRV in number := null, -- Рег. номер графика ТО и ремонтов (null - любой)
|
||||||
|
NEQCONFIG in number := null, -- Рег. номер технического объекта (null - любой)
|
||||||
|
NSTATE in number := null, -- Состояние (null - любое)
|
||||||
|
NIDENT out number -- Идентификатор списка
|
||||||
|
)
|
||||||
|
is
|
||||||
|
NTMP PKG_STD.TREF; -- Рег. номер записи буфера отобранных
|
||||||
|
begin
|
||||||
|
/* Обходим графики по тех. объекту */
|
||||||
|
for C in (select T.RN
|
||||||
|
from EQTCHSRV T
|
||||||
|
where ((NEQTCHSRV is null) or ((NEQTCHSRV is not null) and (T.RN = NEQTCHSRV)))
|
||||||
|
and ((NEQCONFIG is null) or ((NEQCONFIG is not null) and (T.EQCONFIG_TECH = NEQCONFIG)))
|
||||||
|
and ((NEQTCHSRV is not null) or ((NEQTCHSRV is null) and (T.DATEPRD_BEG >= sysdate)))
|
||||||
|
and ((NSTATE is null) or ((NSTATE is not null) and (T.STATE = NSTATE))))
|
||||||
|
loop
|
||||||
|
/* Формируем идентификатор списка если необходимо */
|
||||||
|
if (NIDENT is null) then
|
||||||
|
NIDENT := GEN_IDENT();
|
||||||
|
end if;
|
||||||
|
/* Добавляем отобранное в список */
|
||||||
|
P_SELECTLIST_INSERT(NIDENT => NIDENT, NDOCUMENT => C.RN, SUNITCODE => 'EquipTechServices', NRN => NTMP);
|
||||||
|
end loop;
|
||||||
|
end EQCONFIG_THOBJ_SELECT_EQTCHSRV;
|
||||||
|
|
||||||
/* Формирование карточки технического объекта */
|
/* Формирование карточки технического объекта */
|
||||||
procedure EQCONFIG_THOBJ_CARD
|
procedure EQCONFIG_THOBJ_CARD
|
||||||
(
|
(
|
||||||
@ -431,6 +499,10 @@ text="Проверка прав доступа при формировании
|
|||||||
SNAME => 'DOPER_DATE',
|
SNAME => 'DOPER_DATE',
|
||||||
DVALUE => C.DOPER_DATE),
|
DVALUE => C.DOPER_DATE),
|
||||||
RATTRIBUTE04 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
RATTRIBUTE04 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||||||
|
SNAME => 'DNEXT_EQTCHSRV',
|
||||||
|
SVALUE => TO_CHAR(EQCONFIG_THOBJ_GET_NXTEQTCHSRV(NEQCONFIG => C.NRN),
|
||||||
|
'dd.mm.yyyy hh24:mi:ss')),
|
||||||
|
RATTRIBUTE05 => PKG_XMAKE.ATTRIBUTE(ICURSOR => NCUR,
|
||||||
SNAME => 'SEQOBJKIND',
|
SNAME => 'SEQOBJKIND',
|
||||||
SVALUE => C.SEQOBJKIND)));
|
SVALUE => C.SEQOBJKIND)));
|
||||||
end loop;
|
end loop;
|
||||||
@ -472,6 +544,79 @@ text="Проверка прав доступа при формировании
|
|||||||
end loop;
|
end loop;
|
||||||
end EQCONFIG_THOBJ_FORECAST;
|
end EQCONFIG_THOBJ_FORECAST;
|
||||||
|
|
||||||
|
/* Модификация графика ТО и ремонтов для технического объекта */
|
||||||
|
procedure EQCONFIG_THOBJ_CHNG_EQTCHSRV
|
||||||
|
(
|
||||||
|
NEQCONFIG in number, -- Рег. номер технического объекта
|
||||||
|
NEQTCHSRV in number, -- Рег. номер графика ТО и ремонтов
|
||||||
|
DPLANDATE_FROM in date -- Уточнённая плановая дата начала ремонта
|
||||||
|
)
|
||||||
|
is
|
||||||
|
REQTCHSRV EQTCHSRV%rowtype; -- Запись графика ТО и ремонтов
|
||||||
|
RDSCMMLH UDO_T_EQUIPDSCMMLH%rowtype; -- Запись истории прогнозов
|
||||||
|
NDIFF PKG_STD.TNUMBER; -- Отклонение старой и новой дат
|
||||||
|
DDATEPRD_BEG PKG_STD.TLDATE; -- Новая дата начала
|
||||||
|
DDATEPRD_END PKG_STD.TLDATE; -- Новая дата окончания
|
||||||
|
SNOTE PKG_STD.TSTRING; -- Новое примечание
|
||||||
|
begin
|
||||||
|
/* Считаем график */
|
||||||
|
begin
|
||||||
|
select T.* into REQTCHSRV from EQTCHSRV T where T.RN = NEQTCHSRV;
|
||||||
|
exception
|
||||||
|
when NO_DATA_FOUND then
|
||||||
|
PKG_MSG.RECORD_NOT_FOUND(NFLAG_SMART => 0, NDOCUMENT => NEQTCHSRV, SUNIT_TABLE => 'EquipTechServices');
|
||||||
|
end;
|
||||||
|
/* Считаем запись истории прогнозов */
|
||||||
|
begin
|
||||||
|
select T.*
|
||||||
|
into RDSCMMLH
|
||||||
|
from UDO_T_EQUIPDSCMMLH T
|
||||||
|
where T.RN = (select max(TT.RN) from UDO_T_EQUIPDSCMMLH TT where TT.EQCONFIG = NEQCONFIG);
|
||||||
|
exception
|
||||||
|
when others then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Не удалось определить запись-основание истории прогнозов модели.');
|
||||||
|
end;
|
||||||
|
/* Проверим, что из графика не сформирована ремонтная ведомость */
|
||||||
|
if (F_DOCLINKS_LINK_OUT_DOC(SIN_UNITCODE => 'EquipTechServices',
|
||||||
|
NIN_DOCUMENT => REQTCHSRV.RN,
|
||||||
|
SOUT_UNITCODE => 'EquipRepairSheets') is not null) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Из графика ТО и ремонтов (RN: %s) уже создана ремонтная ведомость.',
|
||||||
|
TO_CHAR(REQTCHSRV.RN));
|
||||||
|
end if;
|
||||||
|
/* Проверим, что есть на что менять */
|
||||||
|
if (TRUNC(DPLANDATE_FROM) = TRUNC(REQTCHSRV.DATEPRD_BEG)) then
|
||||||
|
P_EXCEPTION(0,
|
||||||
|
'Выбранный график ТО и ремонтов уже запланирован на %s',
|
||||||
|
TO_CHAR(DPLANDATE_FROM, 'dd.mm.yyyy'));
|
||||||
|
end if;
|
||||||
|
/* Определим отклонение и новые даты графика */
|
||||||
|
NDIFF := DPLANDATE_FROM - REQTCHSRV.DATEPRD_BEG;
|
||||||
|
DDATEPRD_BEG := REQTCHSRV.DATEPRD_BEG + NDIFF;
|
||||||
|
DDATEPRD_END := REQTCHSRV.DATEPRD_END + NDIFF;
|
||||||
|
/* Формируем новое примечание */
|
||||||
|
SNOTE := 'Автоматически перенесён с "' || TO_CHAR(REQTCHSRV.DATEPRD_BEG, 'dd.mm.yyyy hh24:mi:ss') || '" на "' ||
|
||||||
|
TO_CHAR(DDATEPRD_BEG, 'dd.mm.yyyy hh24:mi:ss') || '" на основании прогноза от "' ||
|
||||||
|
TO_CHAR(RDSCMMLH.RQ_DATE, 'dd.mm.yyyy hh24:mi:ss') || '" (RN: ' || TO_CHAR(RDSCMMLH.RN) ||
|
||||||
|
', пользователь: ' || RDSCMMLH.RQ_AUTHID || ').';
|
||||||
|
/* Изменим заголовок графика */
|
||||||
|
update EQTCHSRV T
|
||||||
|
set T.DATEPRD_BEG = DDATEPRD_BEG,
|
||||||
|
T.DATEPRD_END = DDATEPRD_END,
|
||||||
|
T.NOTE = SNOTE
|
||||||
|
where T.RN = REQTCHSRV.RN;
|
||||||
|
/* Сдвинем работы */
|
||||||
|
P_EQTCHSRV_MOVE_WORK(NCOMPANY => REQTCHSRV.COMPANY,
|
||||||
|
NRN => REQTCHSRV.RN,
|
||||||
|
NDUP_RN => null,
|
||||||
|
DDATEPRD_BEG => DDATEPRD_BEG,
|
||||||
|
DOLD_DATEPRD_BEG => REQTCHSRV.DATEPRD_BEG,
|
||||||
|
DDATEPRD_END => DDATEPRD_END,
|
||||||
|
NPERIOD => null,
|
||||||
|
NMODE => 1);
|
||||||
|
end EQCONFIG_THOBJ_CHNG_EQTCHSRV;
|
||||||
|
|
||||||
/* Формирование ремонтной ведомости для технического объекта */
|
/* Формирование ремонтной ведомости для технического объекта */
|
||||||
procedure EQCONFIG_THOBJ_MAKE_EQRPSHEET
|
procedure EQCONFIG_THOBJ_MAKE_EQRPSHEET
|
||||||
(
|
(
|
||||||
|
@ -240,7 +240,7 @@ const IUDFormTextField = ({ elementCode, elementValue, labelText, onChange, dict
|
|||||||
//Контроль свойств - Поле ввода формы
|
//Контроль свойств - Поле ввода формы
|
||||||
IUDFormTextField.propTypes = {
|
IUDFormTextField.propTypes = {
|
||||||
elementCode: PropTypes.string.isRequired,
|
elementCode: PropTypes.string.isRequired,
|
||||||
elementValue: PropTypes.string,
|
elementValue: PropTypes.oneOfType([PropTypes.number, PropTypes.string, PropTypes.instanceOf(Date)]),
|
||||||
labelText: PropTypes.string.isRequired,
|
labelText: PropTypes.string.isRequired,
|
||||||
onChange: PropTypes.func,
|
onChange: PropTypes.func,
|
||||||
dictionary: PropTypes.func,
|
dictionary: PropTypes.func,
|
||||||
|
@ -21,6 +21,7 @@ import {
|
|||||||
TechObjCard,
|
TechObjCard,
|
||||||
eqConfigTechObjTableValueFormatter,
|
eqConfigTechObjTableValueFormatter,
|
||||||
eqConfigTechObjTableDataCellRender,
|
eqConfigTechObjTableDataCellRender,
|
||||||
|
TechObjChangeEqTchSrv,
|
||||||
TechObjMakeEqRpSheet,
|
TechObjMakeEqRpSheet,
|
||||||
TechObjMakeDataSet
|
TechObjMakeDataSet
|
||||||
} from "./forecast_tab_layout"; //Вспомогательные компоненты и вёрстка
|
} from "./forecast_tab_layout"; //Вспомогательные компоненты и вёрстка
|
||||||
@ -40,15 +41,16 @@ import {
|
|||||||
//Начальное состояние флагов обновления
|
//Начальное состояние флагов обновления
|
||||||
const REFRESH_INITIAL = {
|
const REFRESH_INITIAL = {
|
||||||
techObjSpec: 0,
|
techObjSpec: 0,
|
||||||
|
techObjCard: 0,
|
||||||
techObjForecastHistList: 0
|
techObjForecastHistList: 0
|
||||||
};
|
};
|
||||||
|
|
||||||
//Начальное состояние диалогов
|
//Начальное состояние диалогов
|
||||||
const DIALOGS_INITIAL = { makeEqRpSheet: false, makeEqDataSet: false, techObjCard: false };
|
const DIALOGS_INITIAL = { makeEqRpSheet: false, makeEqDataSet: false, techObjCard: false, changeEqTchSrv: false };
|
||||||
|
|
||||||
//Начальное состояние спецификации технических объектов
|
//Начальное состояние спецификации технических объектов
|
||||||
const TECH_OBJ_SPEC_INITIAL = {
|
const TECH_OBJ_SPEC_INITIAL = {
|
||||||
parent: null,
|
parent: 8938140,
|
||||||
filters: [],
|
filters: [],
|
||||||
orders: [],
|
orders: [],
|
||||||
pageNumber: 1
|
pageNumber: 1
|
||||||
@ -120,7 +122,7 @@ const ForecastTab = ({ onGoToAdmin }) => {
|
|||||||
);
|
);
|
||||||
|
|
||||||
//Загрузчик карточки выбранного технического объекта
|
//Загрузчик карточки выбранного технического объекта
|
||||||
const { techObjCard, techObjCardIsLoading } = useEqConfigTechObjCard(techObj.id);
|
const { techObjCard } = useEqConfigTechObjCard(techObj.id, refresh.techObjCard);
|
||||||
|
|
||||||
//Загрузчик моделей выбранного технического объекта
|
//Загрузчик моделей выбранного технического объекта
|
||||||
const { techObjModelsList } = useTechObjModelsList(techObj.id);
|
const { techObjModelsList } = useTechObjModelsList(techObj.id);
|
||||||
@ -173,9 +175,15 @@ const ForecastTab = ({ onGoToAdmin }) => {
|
|||||||
setTechObj(TECH_OBJ_INITIAL);
|
setTechObj(TECH_OBJ_INITIAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//При нажатии на "Изменить график ТО" в карточке технического объекта
|
||||||
|
const handleTechObjeCardChangeEqTchSrv = () => setDialogs(pv => ({ ...pv, changeEqTchSrv: true }));
|
||||||
|
|
||||||
//При нажатии на "Ремонтировать" в карточке технического объекта
|
//При нажатии на "Ремонтировать" в карточке технического объекта
|
||||||
const handleTechObjeCardMakeEqRpSheet = () => setDialogs(pv => ({ ...pv, makeEqRpSheet: true }));
|
const handleTechObjeCardMakeEqRpSheet = () => setDialogs(pv => ({ ...pv, makeEqRpSheet: true }));
|
||||||
|
|
||||||
|
//При необходимости обновления карточки технического объекта
|
||||||
|
const handleCardDataRefresh = () => setRefresh(pv => ({ ...pv, techObjCard: pv.techObjCard + 1 }));
|
||||||
|
|
||||||
//При нажатии "ОК" в диалоге формирования ремонтной ведомости
|
//При нажатии "ОК" в диалоге формирования ремонтной ведомости
|
||||||
const handleTechObjMakeEqRpSheetOk = async values => {
|
const handleTechObjMakeEqRpSheetOk = async values => {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
@ -194,6 +202,29 @@ const ForecastTab = ({ onGoToAdmin }) => {
|
|||||||
//При нажитии "Отмена" в диалоге формирования ремонтной ведомости
|
//При нажитии "Отмена" в диалоге формирования ремонтной ведомости
|
||||||
const handleTechObjMakeEqRpSheetCancel = () => setDialogs(pv => ({ ...pv, makeEqRpSheet: false }));
|
const handleTechObjMakeEqRpSheetCancel = () => setDialogs(pv => ({ ...pv, makeEqRpSheet: false }));
|
||||||
|
|
||||||
|
//При нажатии "ОК" в диалоге корректировки графика ТО и ремонтов
|
||||||
|
const handleTechObjChangeEqTchSrvOk = async values => {
|
||||||
|
await executeStored({
|
||||||
|
stored: "UDO_PKG_EQUIPTCF.EQCONFIG_THOBJ_CHNG_EQTCHSRV",
|
||||||
|
args: {
|
||||||
|
NEQCONFIG: techObj.id,
|
||||||
|
NEQTCHSRV: values.eQTchSrv,
|
||||||
|
DPLANDATE_FROM: new Date(values.planDateFrom)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
handleCardDataRefresh();
|
||||||
|
setDialogs(pv => ({ ...pv, changeEqTchSrv: false }));
|
||||||
|
const data = await executeStored({ stored: "UDO_PKG_EQUIPTCF.EQCONFIG_THOBJ_SELECT_EQTCHSRV", args: { NEQTCHSRV: values.eQTchSrv } });
|
||||||
|
if (data.NIDENT)
|
||||||
|
pOnlineShowUnit({
|
||||||
|
unitCode: "EquipTechServices",
|
||||||
|
inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }]
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
//При нажитии "Отмена" в диалоге корректировки графика ТО и ремонтов
|
||||||
|
const handleTechObjChangeEqTchSrvCancel = () => setDialogs(pv => ({ ...pv, changeEqTchSrv: false }));
|
||||||
|
|
||||||
//При нажатии "ОК" в диалоге формирования выборки данных
|
//При нажатии "ОК" в диалоге формирования выборки данных
|
||||||
const handleTechObjMakeDataSetOk = async values => {
|
const handleTechObjMakeDataSetOk = async values => {
|
||||||
const data = await executeStored({
|
const data = await executeStored({
|
||||||
@ -234,7 +265,7 @@ const ForecastTab = ({ onGoToAdmin }) => {
|
|||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{dialogs.techObjCard ? (
|
{dialogs.techObjCard ? (
|
||||||
techObj.id && !techObjCardIsLoading && techObjCard?.SCODE ? (
|
techObj.id && techObjCard?.SCODE ? (
|
||||||
<TechObjCard
|
<TechObjCard
|
||||||
cardData={techObjCard}
|
cardData={techObjCard}
|
||||||
modelsList={techObjModelsList}
|
modelsList={techObjModelsList}
|
||||||
@ -242,7 +273,9 @@ const ForecastTab = ({ onGoToAdmin }) => {
|
|||||||
onClose={handleTechObjeCardClose}
|
onClose={handleTechObjeCardClose}
|
||||||
onGoToModel={handleTechObjeCardGoToModel}
|
onGoToModel={handleTechObjeCardGoToModel}
|
||||||
onGetPrediction={handleTechObjeCardGetPrediction}
|
onGetPrediction={handleTechObjeCardGetPrediction}
|
||||||
|
onChangeEqTchSrv={handleTechObjeCardChangeEqTchSrv}
|
||||||
onMakeEqRpSheet={handleTechObjeCardMakeEqRpSheet}
|
onMakeEqRpSheet={handleTechObjeCardMakeEqRpSheet}
|
||||||
|
onCardDataRefresh={handleCardDataRefresh}
|
||||||
/>
|
/>
|
||||||
) : null
|
) : null
|
||||||
) : null}
|
) : null}
|
||||||
@ -255,6 +288,9 @@ const ForecastTab = ({ onGoToAdmin }) => {
|
|||||||
onOk={handleTechObjMakeDataSetOk}
|
onOk={handleTechObjMakeDataSetOk}
|
||||||
/>
|
/>
|
||||||
) : null}
|
) : null}
|
||||||
|
{dialogs.changeEqTchSrv ? (
|
||||||
|
<TechObjChangeEqTchSrv eQConfig={techObj.id} onCancel={handleTechObjChangeEqTchSrvCancel} onOk={handleTechObjChangeEqTchSrvOk} />
|
||||||
|
) : null}
|
||||||
<Grid container>
|
<Grid container>
|
||||||
<Grid item xs={3} sx={STYLES.LEFT_SIDE_GRID}>
|
<Grid item xs={3} sx={STYLES.LEFT_SIDE_GRID}>
|
||||||
<Box sx={STYLES.TREE_BOX}>
|
<Box sx={STYLES.TREE_BOX}>
|
||||||
|
@ -147,7 +147,7 @@ const useEqConfigTechObjTable = (parent, filters, orders, pageNumber, refresh) =
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Загрузка карточки технического объекта
|
//Загрузка карточки технического объекта
|
||||||
const useEqConfigTechObjCard = id => {
|
const useEqConfigTechObjCard = (id, refresh) => {
|
||||||
//Собственное состояние - флаг загрузки
|
//Собственное состояние - флаг загрузки
|
||||||
const [isLoading, setLoading] = useState(false);
|
const [isLoading, setLoading] = useState(false);
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ const useEqConfigTechObjCard = id => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (id) loadData();
|
if (id) loadData();
|
||||||
}, [id, executeStored]);
|
}, [id, refresh, executeStored]);
|
||||||
|
|
||||||
//Вернём данные
|
//Вернём данные
|
||||||
return { techObjCard: card, techObjCardIsLoading: isLoading };
|
return { techObjCard: card, techObjCardIsLoading: isLoading };
|
||||||
|
@ -12,7 +12,9 @@ import PropTypes from "prop-types"; //Контроль свойств компо
|
|||||||
import { Stack, Card, CardContent, Typography, Button, Link, Dialog, DialogTitle, DialogContent, DialogActions } from "@mui/material"; //Интерфейсные компоненты
|
import { Stack, Card, CardContent, Typography, Button, Link, Dialog, DialogTitle, DialogContent, DialogActions } from "@mui/material"; //Интерфейсные компоненты
|
||||||
import { useTheme } from "@mui/material/styles"; //Темы оформления
|
import { useTheme } from "@mui/material/styles"; //Темы оформления
|
||||||
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
import { ApplicationСtx } from "../../context/application"; //Контекст приложения
|
||||||
import { BUTTONS } from "../../../app.text"; //Текстовые ресурсы и константы
|
import { BackEndСtx } from "../../context/backend"; //Контекст взаимодействия с серверомs
|
||||||
|
import { MessagingСtx } from "../../context/messaging"; //Контекст сообщений
|
||||||
|
import { BUTTONS, TEXTS } from "../../../app.text"; //Текстовые ресурсы и константы
|
||||||
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
|
import { P8PDataGrid, P8P_DATA_GRID_SIZE } from "../../components/p8p_data_grid"; //Таблица данных
|
||||||
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
import { P8P_DATA_GRID_CONFIG_PROPS } from "../../config_wrapper"; //Подключение компонентов к настройкам приложения
|
||||||
import { formatDateRF, xml2JSON } from "../../core/utils"; //Вспомогательные функции
|
import { formatDateRF, xml2JSON } from "../../core/utils"; //Вспомогательные функции
|
||||||
@ -189,7 +191,26 @@ const eqConfigTechObjTableDataCellRender = ({ row, columnDef, onCMMLStatus }) =>
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Карточка технического объекта
|
//Карточка технического объекта
|
||||||
const TechObjCard = ({ cardData, modelsList, forecastHistList, onClose, onGoToModel, onGetPrediction, onMakeEqRpSheet }) => {
|
const TechObjCard = ({
|
||||||
|
cardData,
|
||||||
|
modelsList,
|
||||||
|
forecastHistList,
|
||||||
|
onClose,
|
||||||
|
onGoToModel,
|
||||||
|
onGetPrediction,
|
||||||
|
onChangeEqTchSrv,
|
||||||
|
onMakeEqRpSheet,
|
||||||
|
onCardDataRefresh
|
||||||
|
}) => {
|
||||||
|
//Подключение к контексту приложения
|
||||||
|
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
|
//Подключение к контексту взаимодействия с сервером
|
||||||
|
const { executeStored } = useContext(BackEndСtx);
|
||||||
|
|
||||||
|
//Подключение к контексту сообщений
|
||||||
|
const { showMsgErr } = useContext(MessagingСtx);
|
||||||
|
|
||||||
//Подключаемся к теме
|
//Подключаемся к теме
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
|
|
||||||
@ -205,6 +226,9 @@ const TechObjCard = ({ cardData, modelsList, forecastHistList, onClose, onGoToMo
|
|||||||
//При нажатии на запрос предсказания
|
//При нажатии на запрос предсказания
|
||||||
const handleGetPredictionClick = model => (onGetPrediction ? onGetPrediction(model) : null);
|
const handleGetPredictionClick = model => (onGetPrediction ? onGetPrediction(model) : null);
|
||||||
|
|
||||||
|
//При нажатии на изменение графика ТО и ремонтов
|
||||||
|
const handleChangeEqTchSrvClick = () => (onChangeEqTchSrv ? onChangeEqTchSrv() : null);
|
||||||
|
|
||||||
//При нажатии на формирование ремонтной ведомости
|
//При нажатии на формирование ремонтной ведомости
|
||||||
const handleMakeEqRpSheetClick = () => (onMakeEqRpSheet ? onMakeEqRpSheet() : null);
|
const handleMakeEqRpSheetClick = () => (onMakeEqRpSheet ? onMakeEqRpSheet() : null);
|
||||||
|
|
||||||
@ -216,6 +240,18 @@ const TechObjCard = ({ cardData, modelsList, forecastHistList, onClose, onGoToMo
|
|||||||
//При нажатии на закрытие деталей прогноза
|
//При нажатии на закрытие деталей прогноза
|
||||||
const handleCloseForecastDetailClick = () => setState(pv => ({ ...pv, forecastDetail: null, forecastDate: null }));
|
const handleCloseForecastDetailClick = () => setState(pv => ({ ...pv, forecastDetail: null, forecastDate: null }));
|
||||||
|
|
||||||
|
//При нажатии на дату следующего обслуживания
|
||||||
|
const handleNextRepairClick = async () => {
|
||||||
|
const data = await executeStored({ stored: "UDO_PKG_EQUIPTCF.EQCONFIG_THOBJ_SELECT_EQTCHSRV", args: { NEQCONFIG: cardData.NRN } });
|
||||||
|
if (data.NIDENT)
|
||||||
|
pOnlineShowDictionary({
|
||||||
|
unitCode: "EquipTechServices",
|
||||||
|
inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }],
|
||||||
|
callBack: res => (res.success && onCardDataRefresh ? onCardDataRefresh() : null)
|
||||||
|
});
|
||||||
|
else showMsgErr(TEXTS.NO_DATA_FOUND);
|
||||||
|
};
|
||||||
|
|
||||||
//Генерация содержимого
|
//Генерация содержимого
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
@ -227,9 +263,19 @@ const TechObjCard = ({ cardData, modelsList, forecastHistList, onClose, onGoToMo
|
|||||||
<DialogContent sx={STYLES.TECH_OBJ_CARD_DIALOG_CONTENT}>
|
<DialogContent sx={STYLES.TECH_OBJ_CARD_DIALOG_CONTENT}>
|
||||||
<Typography variant="h6">{cardData.SNAME}</Typography>
|
<Typography variant="h6">{cardData.SNAME}</Typography>
|
||||||
<Stack spacing={2}>
|
<Stack spacing={2}>
|
||||||
<Typography color="text.secondary" variant="caption" gutterBottom>
|
<Stack>
|
||||||
{`${formatDateRF(cardData.DOPER_DATE)}, ${cardData.SEQOBJKIND}`}
|
<Typography color="text.secondary" variant="caption">
|
||||||
</Typography>
|
{`${formatDateRF(cardData.DOPER_DATE)}, ${cardData.SEQOBJKIND}`}
|
||||||
|
</Typography>
|
||||||
|
{cardData.DNEXT_EQTCHSRV ? (
|
||||||
|
<Typography color="text.secondary" variant="caption" gutterBottom>
|
||||||
|
Следующее ТО:{" "}
|
||||||
|
<Link component="button" variant="body2" align="left" underline="hover" onClick={handleNextRepairClick}>
|
||||||
|
{cardData.DNEXT_EQTCHSRV}
|
||||||
|
</Link>
|
||||||
|
</Typography>
|
||||||
|
) : null}
|
||||||
|
</Stack>
|
||||||
{modelsList.init ? (
|
{modelsList.init ? (
|
||||||
<Card elevation={6}>
|
<Card elevation={6}>
|
||||||
<CardContent>
|
<CardContent>
|
||||||
@ -287,6 +333,11 @@ const TechObjCard = ({ cardData, modelsList, forecastHistList, onClose, onGoToMo
|
|||||||
</Stack>
|
</Stack>
|
||||||
</DialogContent>
|
</DialogContent>
|
||||||
<DialogActions>
|
<DialogActions>
|
||||||
|
{cardData.DNEXT_EQTCHSRV ? (
|
||||||
|
<Button onClick={handleChangeEqTchSrvClick} color={"warning"}>
|
||||||
|
Изменить график ТО
|
||||||
|
</Button>
|
||||||
|
) : null}
|
||||||
<Button onClick={handleMakeEqRpSheetClick} color={"error"}>
|
<Button onClick={handleMakeEqRpSheetClick} color={"error"}>
|
||||||
Ремонтировать
|
Ремонтировать
|
||||||
</Button>
|
</Button>
|
||||||
@ -305,7 +356,97 @@ TechObjCard.propTypes = {
|
|||||||
onClose: PropTypes.func,
|
onClose: PropTypes.func,
|
||||||
onGoToModel: PropTypes.func,
|
onGoToModel: PropTypes.func,
|
||||||
onGetPrediction: PropTypes.func,
|
onGetPrediction: PropTypes.func,
|
||||||
onMakeEqRpSheet: PropTypes.func
|
onChangeEqTchSrv: PropTypes.func,
|
||||||
|
onMakeEqRpSheet: PropTypes.func,
|
||||||
|
onCardDataRefresh: PropTypes.func
|
||||||
|
};
|
||||||
|
|
||||||
|
//Диалог модификации гарфика ТО и ремонтов
|
||||||
|
const TechObjChangeEqTchSrv = ({ eQConfig, onOk, onCancel }) => {
|
||||||
|
//Подключение к контексту приложения
|
||||||
|
const { pOnlineShowDictionary } = useContext(ApplicationСtx);
|
||||||
|
|
||||||
|
//Подключение к контексту взаимодействия с сервером
|
||||||
|
const { executeStored } = useContext(BackEndСtx);
|
||||||
|
|
||||||
|
//Подключение к контексту сообщений
|
||||||
|
const { showMsgErr } = useContext(MessagingСtx);
|
||||||
|
|
||||||
|
//Собственное состояние - значения формы
|
||||||
|
const [values, setValues] = useState({
|
||||||
|
eQTchSrv: "",
|
||||||
|
eQTchSrvDesc: "",
|
||||||
|
planDateFrom: ""
|
||||||
|
});
|
||||||
|
|
||||||
|
//Отработка воода значения в форму
|
||||||
|
const handleValueChanged = (name, value) => setValues(pv => ({ ...pv, [name]: value }));
|
||||||
|
|
||||||
|
//Выбор графика ТО и ремонтов
|
||||||
|
const selectEquipTechService = async (name, callBack) => {
|
||||||
|
const data = await executeStored({ stored: "UDO_PKG_EQUIPTCF.EQCONFIG_THOBJ_SELECT_EQTCHSRV", args: { NEQCONFIG: eQConfig } });
|
||||||
|
if (data.NIDENT)
|
||||||
|
pOnlineShowDictionary({
|
||||||
|
unitCode: "EquipTechServices",
|
||||||
|
inputParameters: [{ name: "in_SelectList_Ident", value: data.NIDENT }],
|
||||||
|
callBack: res =>
|
||||||
|
callBack(
|
||||||
|
res.success
|
||||||
|
? [
|
||||||
|
{ name: "eQTchSrv", value: res.outParameters.out_RN },
|
||||||
|
{
|
||||||
|
name,
|
||||||
|
value: `${res.outParameters.out_DOCTYPES_DOCCODE} №${String(res.outParameters.out_PREF).trim()}-${String(
|
||||||
|
res.outParameters.out_NUMB
|
||||||
|
).trim()} от ${formatDateRF(res.outParameters.out_DOCDATE)}`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
: null
|
||||||
|
)
|
||||||
|
});
|
||||||
|
else showMsgErr(TEXTS.NO_DATA_FOUND);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Генерация содержимого
|
||||||
|
return (
|
||||||
|
<Dialog open={true} onClose={() => (onOk ? onCancel() : null)}>
|
||||||
|
<DialogTitle>Корректировка графика ТО и ремонтов</DialogTitle>
|
||||||
|
<DialogContent>
|
||||||
|
<IUDFormTextField
|
||||||
|
elementCode={"eQTchSrvDesc"}
|
||||||
|
elementValue={values.eQTchSrvDesc}
|
||||||
|
labelText={"График ТО"}
|
||||||
|
onChange={handleValueChanged}
|
||||||
|
dictionary={callBack => selectEquipTechService("eQTchSrvDesc", callBack)}
|
||||||
|
/>
|
||||||
|
<IUDFormTextField
|
||||||
|
elementCode={"eQTchSrv"}
|
||||||
|
elementValue={values.eQTchSrv}
|
||||||
|
labelText={"График ТО (идентификатор)"}
|
||||||
|
onChange={handleValueChanged}
|
||||||
|
sx={{ display: "none" }}
|
||||||
|
/>
|
||||||
|
<IUDFormTextField
|
||||||
|
elementCode={"planDateFrom"}
|
||||||
|
elementValue={values.planDateFrom}
|
||||||
|
labelText={"Плановая дата ремонта"}
|
||||||
|
onChange={handleValueChanged}
|
||||||
|
type={"date"}
|
||||||
|
/>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<Button onClick={() => (onOk ? onOk(values) : null)}>{BUTTONS.OK}</Button>
|
||||||
|
<Button onClick={() => (onOk ? onCancel() : null)}>{BUTTONS.CANCEL}</Button>
|
||||||
|
</DialogActions>
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
//Контроль свойств - Диалог модификации гарфика ТО и ремонтов
|
||||||
|
TechObjChangeEqTchSrv.propTypes = {
|
||||||
|
eQConfig: PropTypes.number.isRequired,
|
||||||
|
onOk: PropTypes.func,
|
||||||
|
onCancel: PropTypes.func
|
||||||
};
|
};
|
||||||
|
|
||||||
//Диалог формирования ремонтной ведомости
|
//Диалог формирования ремонтной ведомости
|
||||||
@ -393,16 +534,16 @@ const TechObjMakeDataSet = ({ eqobjKind, measureUnit, onOk, onCancel }) => {
|
|||||||
const [values, setValues] = useState({
|
const [values, setValues] = useState({
|
||||||
dataSet: "",
|
dataSet: "",
|
||||||
eqobjKind: eqobjKind,
|
eqobjKind: eqobjKind,
|
||||||
measureUnit: measureUnit || "",
|
measureUnit: measureUnit || "СУТ",
|
||||||
userprocsData: "",
|
userprocsData: "ФормДанВыгрОбучМод",
|
||||||
exsServiceUpload: "",
|
exsServiceUpload: "Загрузка_на_SCP",
|
||||||
exsServiceFnUpload: "",
|
exsServiceFnUpload: "Загрузка_на_SCP",
|
||||||
exsServiceSendMd: "",
|
exsServiceSendMd: "Загрузка_на_Фреймворк",
|
||||||
exsServiceFnSendMd: "",
|
exsServiceFnSendMd: "Передача данных",
|
||||||
exsServiceSendRq: "",
|
exsServiceSendRq: "Загрузка_на_Фреймворк",
|
||||||
exsServiceFnSendRq: "",
|
exsServiceFnSendRq: "Запрос на обучение",
|
||||||
task: "RUL",
|
task: "RUL",
|
||||||
precisionP: null
|
precisionP: 99
|
||||||
});
|
});
|
||||||
|
|
||||||
//Отработка воода значения в форму
|
//Отработка воода значения в форму
|
||||||
@ -519,4 +660,11 @@ TechObjMakeDataSet.propTypes = {
|
|||||||
//Интерфейс модуля
|
//Интерфейс модуля
|
||||||
//----------------
|
//----------------
|
||||||
|
|
||||||
export { eqConfigTechObjTableValueFormatter, eqConfigTechObjTableDataCellRender, TechObjCard, TechObjMakeEqRpSheet, TechObjMakeDataSet };
|
export {
|
||||||
|
eqConfigTechObjTableValueFormatter,
|
||||||
|
eqConfigTechObjTableDataCellRender,
|
||||||
|
TechObjCard,
|
||||||
|
TechObjChangeEqTchSrv,
|
||||||
|
TechObjMakeEqRpSheet,
|
||||||
|
TechObjMakeDataSet
|
||||||
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user