diff --git a/app/panels/clnt_task_board/hooks/hooks.js b/app/panels/clnt_task_board/hooks/hooks.js index a7237d6..3b49d92 100644 --- a/app/panels/clnt_task_board/hooks/hooks.js +++ b/app/panels/clnt_task_board/hooks/hooks.js @@ -95,7 +95,7 @@ const useColorRules = () => { const [colorRules, setColorRules] = useState({ loaded: false, rules: [], - selectedColorRule: JSON.parse(getLocalStorageValue("settingsColorRule") || {}) + selectedColorRule: JSON.parse(getLocalStorageValue("settingsColorRule")) || {} }); //Подключение к контексту взаимодействия с сервером diff --git a/app/panels/clnt_task_board/hooks/tasks_hooks.js b/app/panels/clnt_task_board/hooks/tasks_hooks.js index 99a3fa8..2720d6d 100644 --- a/app/panels/clnt_task_board/hooks/tasks_hooks.js +++ b/app/panels/clnt_task_board/hooks/tasks_hooks.js @@ -160,7 +160,7 @@ const useTasksFunctions = () => { callBack: sendPrms => { const mainArgs = { NIDENT: pointInfo.NIDENT, - NSTEP: 3, + NSTEP: 4, NEVENT: nEvent, SEVENT_STAT: pointInfo.SEVENT_STAT, SSEND_CLIENT: sendPrms.outParameters.out_CLIENT_CODE, @@ -182,7 +182,7 @@ const useTasksFunctions = () => { //Общие аргументы const mainArgs = { NIDENT: pointInfo.NIDENT, - NSTEP: 3, + NSTEP: 4, NEVENT: nEvent, SEVENT_STAT: pointInfo.SEVENT_STAT }; @@ -193,46 +193,71 @@ const useTasksFunctions = () => { [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( - async ({ nIdent, nPass }) => { + async ({ nEvent, pointInfo, onReload = null, onNoteOpen = null }) => { + //Состояние параметров текущего действия + let currentPointInfo = { ...pointInfo }; //Выполняем переход на следующий шаг const secondStep = await executeStored({ stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_STATE_CHANGE", args: { - NIDENT: nIdent, + NIDENT: currentPointInfo.NIDENT, 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( ({ nEvent, pointInfo, onReload = null, onNoteOpen = null }) => { + //Состояние параметров текущего действия + let currentPointInfo = { ...pointInfo }; //Открываем раздел "Маршруты событий (точки перехода)" для выбора следующей точки handleEventRoutesPointsPassessOpen({ - sEventType: pointInfo.SEVENT_TYPE, - sEventStatus: pointInfo.SEVENT_STAT, - nPoint: pointInfo.NPOINT, + sEventType: currentPointInfo.SEVENT_TYPE, + sEventStatus: currentPointInfo.SEVENT_STAT, + nPoint: currentPointInfo.NPOINT, 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 }); - //Выполняем выбор исполнителя - handleExecuterSelect({ - nEvent, - pointInfo: { ...pointInfo, SEVENT_STAT: point.outParameters.out_NEXT_POINT, NSELECT_EXEC: secondStep.NSELECT_EXEC }, - onReload, - onNoteOpen - }); + handleMakeSecondStep({ nEvent, pointInfo: currentPointInfo, onReload, onNoteOpen }); } }); }, - [handleEventRoutesPointsPassessOpen, handleMakeSecondStep, handleExecuterSelect] + [handleEventRoutesPointsPassessOpen, handleMakeSecondStep] ); //По нажатию действия "Перейти" @@ -259,17 +284,12 @@ const useTasksFunctions = () => { onNoteOpen }); } else { - //Выполняем перехода без выбора точки - handleExecuterSelect({ - nEvent, - pointInfo: eventInfo, - onReload, - onNoteOpen - }); + //Выполняем второй шаг + handleMakeSecondStep({ nEvent, pointInfo: eventInfo, onReload, onNoteOpen }); } } }, - [executeStored, handleExecuterSelect, handleNextPointSelect] + [executeStored, handleMakeSecondStep, handleNextPointSelect] ); return { handleTaskStateChange, handleTaskSend }; diff --git a/app/panels/clnt_task_board/layouts.js b/app/panels/clnt_task_board/layouts.js index f52b9b9..a1c2cd2 100644 --- a/app/panels/clnt_task_board/layouts.js +++ b/app/panels/clnt_task_board/layouts.js @@ -183,9 +183,7 @@ export const formatSqlDate = timeStamp => { }; //Считывание значений из локального хранилища -export const getLocalStorageValue = (sName, defaultValue = null) => { - return localStorage.getItem(sName) ? localStorage.getItem(sName) : defaultValue; -}; +export const getLocalStorageValue = (sName, defaultValue = null) => localStorage.getItem(sName) || defaultValue; //Форматирование фильтра в массив для отбора export const convertFilterValuesToArray = filterValues => { diff --git a/db/PKG_P8PANELS_CLNTTSKBRD.pck b/db/PKG_P8PANELS_CLNTTSKBRD.pck index 84c3ceb..c1fd029 100644 --- a/db/PKG_P8PANELS_CLNTTSKBRD.pck +++ b/db/PKG_P8PANELS_CLNTTSKBRD.pck @@ -94,7 +94,7 @@ create or replace package PKG_P8PANELS_CLNTTSKBRD as SCLIENT_CLIENT in out varchar2, -- Клиент–организация, для отбора исполнителей SCLIENT_PERSON in out varchar2, -- Клиент–сотрудник, для отбора исполнителей NPOINT in out number, -- Текущая точка маршрута - NPASS in number, -- Точка перехода + NPASS in out number, -- Точка перехода NSELECT_EXEC out number, -- Признак необходимости выбора исполнителя SEXECUTEMETHOD out varchar2, -- Мнемокод метода SSEND_CLIENT in varchar2, -- Направить – организация @@ -1770,7 +1770,7 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as SCLIENT_CLIENT in out varchar2, -- Клиент–организация, для отбора исполнителей SCLIENT_PERSON in out varchar2, -- Клиент–сотрудник, для отбора исполнителей NPOINT in out number, -- Текущая точка маршрута - NPASS in number, -- Точка перехода + NPASS in out number, -- Точка перехода NSELECT_EXEC out number, -- Признак необходимости выбора исполнителя SEXECUTEMETHOD out varchar2, -- Мнемокод метода SSEND_CLIENT in varchar2, -- Направить – организация @@ -1882,43 +1882,17 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as NSEND_PREDEFINED_PROC => NSEND_PREDEFINED_PROC); /* Если это первый шаг и уже известен следующий статус */ if ((NSTEP_CURRENT = 1) and (SNEXT_STAT is not null)) then - /* Сразу выполняем следующее действие */ - P_CLNEVENTS_CHANGE_STATE_WEB(NCOMPANY => NCOMPANY, - NIDENT => NIDENT, - NSTEP => NSTEP, - NEVENT => NEVENT, - SEVENT => SEVENT, - 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); + /* Определим точку перехода */ + NPASS := EVRTPTPASS_NEXT_GET(NCOMPANY => NCOMPANY, + SEVENT_TYPE => SEVENT_TYPE, + NPOINT => NPOINT, + SEVENT_STAT => SEVENT_STAT, + SNEXT_STAT => SNEXT_STAT); /* Указываем следующий статус */ SEVENT_STAT := SNEXT_STAT; end if; /* Если это последний шаг */ - if (NSTEP_CURRENT = 3) then + if (NSTEP_CURRENT = 4) then /* Если добавлено примечание */ if (SNOTE is not null) then P_CLNEVNOTES_INSERT(NCOMPANY => NCOMPANY, @@ -2351,9 +2325,7 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as and U.UNITCODE = SUNIT_CLNEVENTS; exception when others then - P_EXCEPTION(0, - 'Профиль пользователя "%s" для раздела "События" не найден.', - SAUTHID); + return null; end; /* Возвращаем результат */ return BRESULT; @@ -2361,6 +2333,11 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as begin /* Считываем профиль пользователя для раздела "События" */ BXML := USERPROFILES_GET(NCOMPANY => NCOMPANY, SAUTHID => SAUTHID); + /* Проверим, что профиль не пустой */ + if (BXML is null) then + return; + end if; + /* Данные в профиле есть - будем разбирать */ begin /* Формируем XML данных */ PKG_XFAST.PROLOGUE(ITYPE => PKG_XFAST.CONTENT_);