forked from CITKParus/P8-Panels
ЦИТК-878 - "Доски задач" - доработана под логику смены статуса события с релиза "июнь 2025", исправлена ошибка инициализации клиента с пустым хранилищем, купирована ошибка с отсутствием профиля настроек
This commit is contained in:
parent
fe1e3ba04f
commit
9cbc52cff2
@ -95,7 +95,7 @@ const useColorRules = () => {
|
|||||||
const [colorRules, setColorRules] = useState({
|
const [colorRules, setColorRules] = useState({
|
||||||
loaded: false,
|
loaded: false,
|
||||||
rules: [],
|
rules: [],
|
||||||
selectedColorRule: JSON.parse(getLocalStorageValue("settingsColorRule") || {})
|
selectedColorRule: JSON.parse(getLocalStorageValue("settingsColorRule")) || {}
|
||||||
});
|
});
|
||||||
|
|
||||||
//Подключение к контексту взаимодействия с сервером
|
//Подключение к контексту взаимодействия с сервером
|
||||||
|
|||||||
@ -160,7 +160,7 @@ const useTasksFunctions = () => {
|
|||||||
callBack: sendPrms => {
|
callBack: sendPrms => {
|
||||||
const mainArgs = {
|
const mainArgs = {
|
||||||
NIDENT: pointInfo.NIDENT,
|
NIDENT: pointInfo.NIDENT,
|
||||||
NSTEP: 3,
|
NSTEP: 4,
|
||||||
NEVENT: nEvent,
|
NEVENT: nEvent,
|
||||||
SEVENT_STAT: pointInfo.SEVENT_STAT,
|
SEVENT_STAT: pointInfo.SEVENT_STAT,
|
||||||
SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE,
|
SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE,
|
||||||
@ -182,7 +182,7 @@ const useTasksFunctions = () => {
|
|||||||
//Общие аргументы
|
//Общие аргументы
|
||||||
const mainArgs = {
|
const mainArgs = {
|
||||||
NIDENT: pointInfo.NIDENT,
|
NIDENT: pointInfo.NIDENT,
|
||||||
NSTEP: 3,
|
NSTEP: 4,
|
||||||
NEVENT: nEvent,
|
NEVENT: nEvent,
|
||||||
SEVENT_STAT: pointInfo.SEVENT_STAT
|
SEVENT_STAT: pointInfo.SEVENT_STAT
|
||||||
};
|
};
|
||||||
@ -193,46 +193,71 @@ const useTasksFunctions = () => {
|
|||||||
[handleEventRoutesPointExecutersOpen, handleStateChange]
|
[handleEventRoutesPointExecutersOpen, handleStateChange]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//При выполнении третьего шага
|
||||||
|
const handleMakeThirdStep = useCallback(
|
||||||
|
async ({ nEvent, pointInfo, onReload = null, onNoteOpen = null }) => {
|
||||||
|
//Выполняем переход на следующий шаг
|
||||||
|
await executeStored({
|
||||||
|
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
||||||
|
args: {
|
||||||
|
NIDENT: pointInfo.NIDENT,
|
||||||
|
NSTEP: 3,
|
||||||
|
NPASS: pointInfo.NPASS
|
||||||
|
}
|
||||||
|
});
|
||||||
|
//Выполняем выбор исполнителя
|
||||||
|
handleExecuterSelect({
|
||||||
|
nEvent,
|
||||||
|
pointInfo,
|
||||||
|
onReload,
|
||||||
|
onNoteOpen
|
||||||
|
});
|
||||||
|
},
|
||||||
|
[executeStored, handleExecuterSelect]
|
||||||
|
);
|
||||||
|
|
||||||
//При выполнении второго шага
|
//При выполнении второго шага
|
||||||
const handleMakeSecondStep = useCallback(
|
const handleMakeSecondStep = useCallback(
|
||||||
async ({ nIdent, nPass }) => {
|
async ({ nEvent, pointInfo, onReload = null, onNoteOpen = null }) => {
|
||||||
|
//Состояние параметров текущего действия
|
||||||
|
let currentPointInfo = { ...pointInfo };
|
||||||
//Выполняем переход на следующий шаг
|
//Выполняем переход на следующий шаг
|
||||||
const secondStep = await executeStored({
|
const secondStep = await executeStored({
|
||||||
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE",
|
||||||
args: {
|
args: {
|
||||||
NIDENT: nIdent,
|
NIDENT: currentPointInfo.NIDENT,
|
||||||
NSTEP: 2,
|
NSTEP: 2,
|
||||||
NPASS: nPass
|
NPASS: currentPointInfo.NPASS
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//Возвращаем параметры выполнения
|
//Устанавливаем признак необходимости выбора исполнителя
|
||||||
return secondStep;
|
currentPointInfo.NSELECT_EXEC = secondStep.NSELECT_EXEC;
|
||||||
|
//Выполняем третий шаг
|
||||||
|
handleMakeThirdStep({ nEvent, pointInfo: currentPointInfo, onReload, onNoteOpen });
|
||||||
},
|
},
|
||||||
[executeStored]
|
[executeStored, handleMakeThirdStep]
|
||||||
);
|
);
|
||||||
|
|
||||||
//При выборе следующей точки события
|
//При выборе следующей точки события
|
||||||
const handleNextPointSelect = useCallback(
|
const handleNextPointSelect = useCallback(
|
||||||
({ nEvent, pointInfo, onReload = null, onNoteOpen = null }) => {
|
({ nEvent, pointInfo, onReload = null, onNoteOpen = null }) => {
|
||||||
|
//Состояние параметров текущего действия
|
||||||
|
let currentPointInfo = { ...pointInfo };
|
||||||
//Открываем раздел "Маршруты событий (точки перехода)" для выбора следующей точки
|
//Открываем раздел "Маршруты событий (точки перехода)" для выбора следующей точки
|
||||||
handleEventRoutesPointsPassessOpen({
|
handleEventRoutesPointsPassessOpen({
|
||||||
sEventType: pointInfo.SEVENT_TYPE,
|
sEventType: currentPointInfo.SEVENT_TYPE,
|
||||||
sEventStatus: pointInfo.SEVENT_STAT,
|
sEventStatus: currentPointInfo.SEVENT_STAT,
|
||||||
nPoint: pointInfo.NPOINT,
|
nPoint: currentPointInfo.NPOINT,
|
||||||
callBack: async point => {
|
callBack: async point => {
|
||||||
|
//Устанавливаем полученную точку перехода
|
||||||
|
currentPointInfo.NPASS = point.outParameters.out_RN;
|
||||||
|
currentPointInfo.SEVENT_STAT = point.outParameters.out_NEXT_POINT;
|
||||||
//Выполняем второй шаг
|
//Выполняем второй шаг
|
||||||
let secondStep = await handleMakeSecondStep({ nIdent: pointInfo.NIDENT, nPass: point.outParameters.out_RN });
|
handleMakeSecondStep({ nEvent, pointInfo: currentPointInfo, onReload, onNoteOpen });
|
||||||
//Выполняем выбор исполнителя
|
|
||||||
handleExecuterSelect({
|
|
||||||
nEvent,
|
|
||||||
pointInfo: { ...pointInfo, SEVENT_STAT: point.outParameters.out_NEXT_POINT, NSELECT_EXEC: secondStep.NSELECT_EXEC },
|
|
||||||
onReload,
|
|
||||||
onNoteOpen
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
[handleEventRoutesPointsPassessOpen, handleMakeSecondStep, handleExecuterSelect]
|
[handleEventRoutesPointsPassessOpen, handleMakeSecondStep]
|
||||||
);
|
);
|
||||||
|
|
||||||
//По нажатию действия "Перейти"
|
//По нажатию действия "Перейти"
|
||||||
@ -259,17 +284,12 @@ const useTasksFunctions = () => {
|
|||||||
onNoteOpen
|
onNoteOpen
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
//Выполняем перехода без выбора точки
|
//Выполняем второй шаг
|
||||||
handleExecuterSelect({
|
handleMakeSecondStep({ nEvent, pointInfo: eventInfo, onReload, onNoteOpen });
|
||||||
nEvent,
|
|
||||||
pointInfo: eventInfo,
|
|
||||||
onReload,
|
|
||||||
onNoteOpen
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
[executeStored, handleExecuterSelect, handleNextPointSelect]
|
[executeStored, handleMakeSecondStep, handleNextPointSelect]
|
||||||
);
|
);
|
||||||
|
|
||||||
return { handleTaskStateChange, handleTaskSend };
|
return { handleTaskStateChange, handleTaskSend };
|
||||||
|
|||||||
@ -183,9 +183,7 @@ export const formatSqlDate = timeStamp => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Считывание значений из локального хранилища
|
//Считывание значений из локального хранилища
|
||||||
export const getLocalStorageValue = (sName, defaultValue = null) => {
|
export const getLocalStorageValue = (sName, defaultValue = null) => localStorage.getItem(sName) || defaultValue;
|
||||||
return localStorage.getItem(sName) ? localStorage.getItem(sName) : defaultValue;
|
|
||||||
};
|
|
||||||
|
|
||||||
//Форматирование фильтра в массив для отбора
|
//Форматирование фильтра в массив для отбора
|
||||||
export const convertFilterValuesToArray = filterValues => {
|
export const convertFilterValuesToArray = filterValues => {
|
||||||
|
|||||||
@ -94,7 +94,7 @@ create or replace package PKG_P8PANELS_CLNTTSKBRD as
|
|||||||
SCLIENT_CLIENT in out varchar2, -- Клиент–организация, для отбора исполнителей
|
SCLIENT_CLIENT in out varchar2, -- Клиент–организация, для отбора исполнителей
|
||||||
SCLIENT_PERSON in out varchar2, -- Клиент–сотрудник, для отбора исполнителей
|
SCLIENT_PERSON in out varchar2, -- Клиент–сотрудник, для отбора исполнителей
|
||||||
NPOINT in out number, -- Текущая точка маршрута
|
NPOINT in out number, -- Текущая точка маршрута
|
||||||
NPASS in number, -- Точка перехода
|
NPASS in out number, -- Точка перехода
|
||||||
NSELECT_EXEC out number, -- Признак необходимости выбора исполнителя
|
NSELECT_EXEC out number, -- Признак необходимости выбора исполнителя
|
||||||
SEXECUTEMETHOD out varchar2, -- Мнемокод метода
|
SEXECUTEMETHOD out varchar2, -- Мнемокод метода
|
||||||
SSEND_CLIENT in varchar2, -- Направить – организация
|
SSEND_CLIENT in varchar2, -- Направить – организация
|
||||||
@ -1770,7 +1770,7 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as
|
|||||||
SCLIENT_CLIENT in out varchar2, -- Клиент–организация, для отбора исполнителей
|
SCLIENT_CLIENT in out varchar2, -- Клиент–организация, для отбора исполнителей
|
||||||
SCLIENT_PERSON in out varchar2, -- Клиент–сотрудник, для отбора исполнителей
|
SCLIENT_PERSON in out varchar2, -- Клиент–сотрудник, для отбора исполнителей
|
||||||
NPOINT in out number, -- Текущая точка маршрута
|
NPOINT in out number, -- Текущая точка маршрута
|
||||||
NPASS in number, -- Точка перехода
|
NPASS in out number, -- Точка перехода
|
||||||
NSELECT_EXEC out number, -- Признак необходимости выбора исполнителя
|
NSELECT_EXEC out number, -- Признак необходимости выбора исполнителя
|
||||||
SEXECUTEMETHOD out varchar2, -- Мнемокод метода
|
SEXECUTEMETHOD out varchar2, -- Мнемокод метода
|
||||||
SSEND_CLIENT in varchar2, -- Направить – организация
|
SSEND_CLIENT in varchar2, -- Направить – организация
|
||||||
@ -1882,43 +1882,17 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as
|
|||||||
NSEND_PREDEFINED_PROC => NSEND_PREDEFINED_PROC);
|
NSEND_PREDEFINED_PROC => NSEND_PREDEFINED_PROC);
|
||||||
/* Если это первый шаг и уже известен следующий статус */
|
/* Если это первый шаг и уже известен следующий статус */
|
||||||
if ((NSTEP_CURRENT = 1) and (SNEXT_STAT is not null)) then
|
if ((NSTEP_CURRENT = 1) and (SNEXT_STAT is not null)) then
|
||||||
/* Сразу выполняем следующее действие */
|
/* Определим точку перехода */
|
||||||
P_CLNEVENTS_CHANGE_STATE_WEB(NCOMPANY => NCOMPANY,
|
NPASS := EVRTPTPASS_NEXT_GET(NCOMPANY => NCOMPANY,
|
||||||
NIDENT => NIDENT,
|
SEVENT_TYPE => SEVENT_TYPE,
|
||||||
NSTEP => NSTEP,
|
NPOINT => NPOINT,
|
||||||
NEVENT => NEVENT,
|
SEVENT_STAT => SEVENT_STAT,
|
||||||
SEVENT => SEVENT,
|
SNEXT_STAT => SNEXT_STAT);
|
||||||
SEVENT_TYPE => SEVENT_TYPE,
|
|
||||||
SEVENT_STAT => SEVENT_STAT,
|
|
||||||
SINIT_PERSON => SINIT_PERSON,
|
|
||||||
SINIT_AUTHNAME => SINIT_AUTHNAME,
|
|
||||||
SCLIENT_CLIENT => SCLIENT_CLIENT,
|
|
||||||
SCLIENT_PERSON => SCLIENT_PERSON,
|
|
||||||
NPOINT => NPOINT,
|
|
||||||
NPASS => EVRTPTPASS_NEXT_GET(NCOMPANY => NCOMPANY,
|
|
||||||
SEVENT_TYPE => SEVENT_TYPE,
|
|
||||||
NPOINT => NPOINT,
|
|
||||||
SEVENT_STAT => SEVENT_STAT,
|
|
||||||
SNEXT_STAT => SNEXT_STAT),
|
|
||||||
NSELECT_EXEC => NSELECT_EXEC,
|
|
||||||
NCONFIRM_REQUIRED => NCONFIRM_REQUIRED,
|
|
||||||
SCONFIRM_TEXT => SCONFIRM_TEXT,
|
|
||||||
SEXECUTEMETHOD => SEXECUTEMETHOD,
|
|
||||||
SSEND_CLIENT => SSEND_CLIENT,
|
|
||||||
SSEND_DIVISION => SSEND_DIVISION,
|
|
||||||
SSEND_POST => SSEND_POST,
|
|
||||||
SSEND_PERFORM => SSEND_PERFORM,
|
|
||||||
SSEND_PERSON => SSEND_PERSON,
|
|
||||||
SSEND_STAFFGRP => SSEND_STAFFGRP,
|
|
||||||
SSEND_USER_GROUP => SSEND_USER_GROUP,
|
|
||||||
SSEND_USER_NAME => SSEND_USER_NAME,
|
|
||||||
NSEND_PREDEFINED_EXEC => NSEND_PREDEFINED_EXEC,
|
|
||||||
NSEND_PREDEFINED_PROC => NSEND_PREDEFINED_PROC);
|
|
||||||
/* Указываем следующий статус */
|
/* Указываем следующий статус */
|
||||||
SEVENT_STAT := SNEXT_STAT;
|
SEVENT_STAT := SNEXT_STAT;
|
||||||
end if;
|
end if;
|
||||||
/* Если это последний шаг */
|
/* Если это последний шаг */
|
||||||
if (NSTEP_CURRENT = 3) then
|
if (NSTEP_CURRENT = 4) then
|
||||||
/* Если добавлено примечание */
|
/* Если добавлено примечание */
|
||||||
if (SNOTE is not null) then
|
if (SNOTE is not null) then
|
||||||
P_CLNEVNOTES_INSERT(NCOMPANY => NCOMPANY,
|
P_CLNEVNOTES_INSERT(NCOMPANY => NCOMPANY,
|
||||||
@ -2351,9 +2325,7 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as
|
|||||||
and U.UNITCODE = SUNIT_CLNEVENTS;
|
and U.UNITCODE = SUNIT_CLNEVENTS;
|
||||||
exception
|
exception
|
||||||
when others then
|
when others then
|
||||||
P_EXCEPTION(0,
|
return null;
|
||||||
'Профиль пользователя "%s" для раздела "События" не найден.',
|
|
||||||
SAUTHID);
|
|
||||||
end;
|
end;
|
||||||
/* Возвращаем результат */
|
/* Возвращаем результат */
|
||||||
return BRESULT;
|
return BRESULT;
|
||||||
@ -2361,6 +2333,11 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as
|
|||||||
begin
|
begin
|
||||||
/* Считываем профиль пользователя для раздела "События" */
|
/* Считываем профиль пользователя для раздела "События" */
|
||||||
BXML := USERPROFILES_GET(NCOMPANY => NCOMPANY, SAUTHID => SAUTHID);
|
BXML := USERPROFILES_GET(NCOMPANY => NCOMPANY, SAUTHID => SAUTHID);
|
||||||
|
/* Проверим, что профиль не пустой */
|
||||||
|
if (BXML is null) then
|
||||||
|
return;
|
||||||
|
end if;
|
||||||
|
/* Данные в профиле есть - будем разбирать */
|
||||||
begin
|
begin
|
||||||
/* Формируем XML данных */
|
/* Формируем XML данных */
|
||||||
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user