diff --git a/app/panels/clnt_task_board/components/task_card.js b/app/panels/clnt_task_board/components/task_card.js index 953a2f2..4b69c66 100644 --- a/app/panels/clnt_task_board/components/task_card.js +++ b/app/panels/clnt_task_board/components/task_card.js @@ -86,19 +86,18 @@ const CardActions = ({ more_vert - {menuItems.map(action => { - if (action.visible) - return ( - handleActionClick(action)} - > - {action.icon} - {action.name} - - ); - })} + {menuItems.map(action => + action.visible ? ( + handleActionClick(action)} + > + {action.icon} + {action.name} + + ) : null + )} ); @@ -132,7 +131,7 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen const [menuItems, setMenuItems] = useState([]); //Вспомогательные функции открытия раздела - const { handleClientEventsOpen, handleClientEventsNotesOpen, handleFileLinksOpen } = useDictionary(); + const { handleClientEventsOpen, handleClientEventsNotesOpen, handleFileLinksOpen, handleCatalogTreeOpen } = useDictionary(); //Состояние вспомогательных функций событий const { handleTaskStateChange, handleTaskSend } = useTasksFunctions(); @@ -182,8 +181,21 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen [executeStored] ); + //При перемещении в каталог + const handleTaskMove = useCallback( + async ({ nEvent, nCrn, onReload }) => { + await executeStored({ + stored: "PKG_P8PANELS_CLNTTSKBRD.CLNEVENTS_MOVE", + args: { NCLNEVENTS: nEvent, NCRN: nCrn } + }); + //Если требуется перезагрузить данные + onReload ? onReload() : null; + }, + [executeStored] + ); + //По нажатию действия "Направить" - const handleSendAction = useCallback( + const handleTaskSendAction = useCallback( async ({ nEvent, onReload, onNoteOpen }) => { //Выполняем направление события handleTaskSend({ nEvent, onReload, onNoteOpen }); @@ -246,7 +258,7 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen ); //По нажатию действия "Перейти" - const handleStateChangeAction = useCallback( + const handleTaskStateChangeAction = useCallback( async ({ nEvent, onReload, onNoteOpen }) => { //Выполняем изменения статуса события handleTaskStateChange({ nEvent, onReload, onNoteOpen }); @@ -254,6 +266,26 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen [handleTaskStateChange] ); + //По нажатию действия "Переместить" + const handleTaskMoveAction = useCallback( + async ({ nEvent, onReload }) => { + //Открываем выбор записи из раздела "Каталоги иерархии" + handleCatalogTreeOpen({ + sUnitName: "ClientEvents", + nRn: task.nCrn, + callBack: res => { + //Выполняем перемещение события + handleTaskMove({ + nEvent, + nCrn: res.outParameters.out_RN, + onReload + }); + } + }); + }, + [handleCatalogTreeOpen, handleTaskMove, task.nCrn] + ); + //При изменении ссылок в меню действий (для того, чтобы ссылка на объект менялась при реальной необходимости) useEffect(() => { //Устанавливаем список меню @@ -262,22 +294,24 @@ const TaskCard = ({ task, index, onTasksReload, colorRule, pointSettings, onOpen handleTaskEditAction, handleTaskEditClientAction, handleTaskDeleteAction, - handleStateChangeAction, + handleTaskStateChangeAction, handleTaskReturnAction, - handleSendAction, + handleTaskSendAction, handleEventNotesOpenAction, - handleTaskFileLinksOpenAction + handleTaskFileLinksOpenAction, + handleTaskMoveAction ) ); }, [ handleEventNotesOpenAction, handleTaskFileLinksOpenAction, - handleSendAction, - handleStateChangeAction, + handleTaskSendAction, + handleTaskStateChangeAction, handleTaskDeleteAction, handleTaskEditAction, handleTaskEditClientAction, - handleTaskReturnAction + handleTaskReturnAction, + handleTaskMoveAction ]); //Генерация содержимого diff --git a/app/panels/clnt_task_board/hooks/dict_hooks.js b/app/panels/clnt_task_board/hooks/dict_hooks.js index 2b4ccfb..7e803b7 100644 --- a/app/panels/clnt_task_board/hooks/dict_hooks.js +++ b/app/panels/clnt_task_board/hooks/dict_hooks.js @@ -57,7 +57,8 @@ const useDictionary = () => { showMethod: "main", inputParameters: [ { name: "in_DOCNAME", value: prms.sUnitName }, - { name: "in_NAME", value: prms.sName } + { name: "in_NAME", value: prms.sName }, + { name: "in_RN", value: prms.nRn } ], callBack: res => { res.success ? prms.callBack(res) : null; diff --git a/app/panels/clnt_task_board/hooks/tasks_hooks.js b/app/panels/clnt_task_board/hooks/tasks_hooks.js index 2720d6d..a6437e9 100644 --- a/app/panels/clnt_task_board/hooks/tasks_hooks.js +++ b/app/panels/clnt_task_board/hooks/tasks_hooks.js @@ -325,6 +325,7 @@ const useTasks = (filterValues, ordersValues) => { name: task.SPREF_NUMB, nRn: task.NRN, sCrn: "", + nCrn: task.NCRN, sPrefix: task.SEVPREF, sNumber: task.SEVNUMB, sType: task.SEVTYPE_CODE, diff --git a/app/panels/clnt_task_board/layouts.js b/app/panels/clnt_task_board/layouts.js index 674670f..474ef56 100644 --- a/app/panels/clnt_task_board/layouts.js +++ b/app/panels/clnt_task_board/layouts.js @@ -197,7 +197,7 @@ export const convertFilterValuesToArray = filterValues => { }; //Формирование массива действий карточки события -export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen) => { +export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChange, onReturn, onSend, onNotesOpen, onFileLinksOpen, onMove) => { //Формируем список действий карточки return [ { @@ -220,6 +220,16 @@ export const makeCardActionsArray = (onEdit, onEditClient, onDelete, onStateChan needAccountsReload: false, func: onEditClient }, + { + method: "MOVE", + name: "Переместить", + icon: "drive_file_move", + visible: true, + delimiter: false, + tasksReload: true, + needAccountsReload: false, + func: onMove + }, { method: "DELETE", name: "Удалить", diff --git a/db/PKG_P8PANELS_CLNTTSKBRD.pck b/db/PKG_P8PANELS_CLNTTSKBRD.pck index 3af6ce6..979b611 100644 --- a/db/PKG_P8PANELS_CLNTTSKBRD.pck +++ b/db/PKG_P8PANELS_CLNTTSKBRD.pck @@ -113,6 +113,13 @@ create or replace package PKG_P8PANELS_CLNTTSKBRD as SNOTE in varchar2 := null -- Примечание (при наличии) ); + /* Перемещение события */ + procedure CLNEVENTS_MOVE + ( + NCLNEVENTS in number, -- Рег. номер события + NCRN in number -- Рег. номер каталога-получателя + ); + /* Переадресация события */ procedure CLNEVENTS_SEND ( @@ -1936,6 +1943,18 @@ create or replace package body PKG_P8PANELS_CLNTTSKBRD as P_EXCEPTION(0, PKG_STATE.SQL_ERRM()); end CLNEVENTS_STATE_CHANGE; + /* Перемещение события */ + procedure CLNEVENTS_MOVE + ( + NCLNEVENTS in number, -- Рег. номер события + NCRN in number -- Рег. номер каталога-получателя + ) + is + begin + /* Перемещение события в другой каталог */ + P_DOCUMENT_MOVE(SUNITCODE => 'ClientEvents', NDOCUMENT => NCLNEVENTS, NTARGET => NCRN); + end CLNEVENTS_MOVE; + /* Переадресация события */ procedure CLNEVENTS_SEND (