\r\n
\r\n showPopup('history', e.row?.data)}\r\n />\r\n \r\n {(ApprovalStatus === 1 || ApprovalStatus === 4 || ApprovalStatus === 100) && (\r\n
\r\n {\r\n const message = Config.lang('DHR_Ban_co_chac_muon_bo_trang_thai_nay?');\r\n Config.popup.show('YES_NO', message, () => {\r\n dataApproval.current = {\r\n anchorEl: null,\r\n type: '',\r\n rowData: data ?? null,\r\n };\r\n cancelApprovals();\r\n });\r\n }}\r\n />\r\n \r\n )}\r\n {ApprovalStatus === 0 && (\r\n
\r\n \r\n onOpenApproval('approve', e, data)}\r\n />\r\n \r\n \r\n onOpenApproval('cancel', e, data)}\r\n />\r\n \r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n const showPopup = (mode, rowData) => {\r\n dataPopup.current = {\r\n mode: mode ?? '',\r\n rowData: rowData ?? null,\r\n };\r\n switch (mode) {\r\n case 'history':\r\n setOpenW84F3005Popup(true);\r\n break;\r\n case 'view':\r\n setOpenW09F2271Popup(true);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n const onOpenApproval = (type, e, data) => {\r\n dataApproval.current = {\r\n anchorEl: e?.currentTarget ?? null,\r\n type: type ?? '',\r\n rowData: data ?? null,\r\n };\r\n setOpenApprovals(true);\r\n };\r\n\r\n const onCloseApproval = () => {\r\n dataApproval.current = {\r\n anchorEl: null,\r\n type: '',\r\n rowData: null,\r\n };\r\n setOpenApprovals(false);\r\n setErrorNote('');\r\n };\r\n\r\n useEffect(() => {\r\n if (openApprovals) {\r\n if (refApprovalPopover.current) refApprovalPopover.current.onOpenPopover();\r\n } else {\r\n onCloseApproval();\r\n }\r\n }, [openApprovals]);\r\n\r\n const saveApprovals = (status, approvalNotes) => {\r\n const { rowData } = dataApproval.current;\r\n const validate = MForm.isRequired(approvalNotes, 'errorNote');\r\n\r\n if (!rowData?.VoucherID) {\r\n Config.popup.show('INFO', Config.lang('DHR_Khong_the_duyet'));\r\n return false;\r\n }\r\n\r\n if (status === 100) {\r\n if (validate?.errorNote) {\r\n setErrorNote(validate?.errorNote ?? '');\r\n return false;\r\n }\r\n }\r\n\r\n const params = {\r\n DivisionID: Config.getDivisionID() ?? '',\r\n FormID: 'W09F2272',\r\n EmployeeID: rowData?.EmployeeID ?? '',\r\n VoucherID: rowData?.VoucherID ?? '',\r\n ApprovalLevel: rowData?.ApprovalLevel ?? '',\r\n ApprovalFlowID: rowData?.ApprovalFlowID ?? '',\r\n ApprovalStatus: status ?? 1,\r\n ApprovalNotesU: approvalNotes ?? '',\r\n AttendanceDate: rowData?.AttendanceDate ?? '',\r\n };\r\n\r\n setApproving(true);\r\n\r\n dispatch(\r\n approvalActions.saveApprovals(params, (error, data) => {\r\n setApproving(false);\r\n\r\n if (error) {\r\n let message = Config.lang('DHR_Loi_chua_xac_dinh');\r\n switch (error?.code) {\r\n case 'F1002E007':\r\n message =\r\n params.ApprovalStatus === 1 ? Config.lang('DHR_Duyet_khong_thanh_cong') : Config.lang('DHR_Tu_choi_khong_thanh_cong');\r\n break;\r\n default:\r\n break;\r\n }\r\n Config.popup.show('INFO', message);\r\n return false;\r\n }\r\n\r\n if (data?.Status === 1) {\r\n let message =\r\n data.Message ??\r\n (params.ApprovalStatus === 1 ? Config.lang('DHR_Duyet_khong_thanh_cong') : Config.lang('DHR_Tu_choi_khong_thanh_cong'));\r\n\r\n if (refApprovalPopover.current) {\r\n refApprovalPopover.current.onClosePopover(() => {\r\n Config.popup.show('INFO', message);\r\n });\r\n } else {\r\n Config.popup.show('INFO', message);\r\n }\r\n return false;\r\n }\r\n\r\n onReset(true);\r\n\r\n if (refApprovalPopover.current) refApprovalPopover.current.onClosePopover();\r\n\r\n Config.notify.show('success', Config.lang('DHR_Thuc_hien_thanh_cong'), 2000);\r\n })\r\n );\r\n };\r\n\r\n const cancelApprovals = () => {\r\n const { rowData } = dataApproval.current;\r\n if (!rowData?.VoucherID) {\r\n Config.popup.show('INFO', Config.lang('DHR_Khong_the_duyet'));\r\n return false;\r\n }\r\n\r\n const params = {\r\n DivisionID: Config.getDivisionID(),\r\n FormID: 'W09F2272',\r\n VoucherID: rowData?.VoucherID ?? '',\r\n EmployeeID: rowData?.EmployeeID ?? '',\r\n ApprovalLevel: rowData?.ApprovalLevel ?? '',\r\n ApprovalFlowID: rowData?.ApprovalFlowID ?? '',\r\n ApprovalStatus: rowData?.ApprovalStatus ?? '',\r\n AttendanceDate: rowData?.AttendanceDate ?? '',\r\n };\r\n\r\n setApproving(true);\r\n\r\n dispatch(\r\n approvalActions.cancelApprovals(params, (error, data) => {\r\n setApproving(false);\r\n\r\n if (error) {\r\n let message = Config.lang('DHR_Loi_chua_xac_dinh');\r\n Config.popup.show('INFO', message);\r\n return false;\r\n }\r\n\r\n if (data?.Status === 1) {\r\n let message = data.Message || Config.lang('DHR_Cap_tiep_theo_da_duyet._Ban_khong_the_bo_duyet');\r\n Config.popup.show('INFO', message);\r\n return false;\r\n }\r\n\r\n onReset(true);\r\n\r\n Config.notify.show('success', Config.lang('DHR_Thuc_hien_thanh_cong'), 2000);\r\n })\r\n );\r\n };\r\n\r\n const onReset = (resetData) => {\r\n dataApproval.current = {\r\n anchorEl: null,\r\n type: '',\r\n rowData: null,\r\n };\r\n\r\n setOpenApprovals(false);\r\n setErrorNote('');\r\n\r\n if (resetData) loadGrid();\r\n };\r\n\r\n const onSearch = () => {\r\n loadGrid();\r\n\r\n if (toolFilter.current) toolFilter.current.close();\r\n };\r\n\r\n const onDbCellClick = (e) => {\r\n const { data = {} } = e;\r\n\r\n showPopup('view', data);\r\n };\r\n\r\n const onChangePage = (page) => {\r\n itemPageDataGrid.current.skip = page * (itemPageDataGrid.current?.limit ?? 10);\r\n loadGrid();\r\n };\r\n\r\n const onChangePerPage = (perPage) => {\r\n itemPageDataGrid.current.skip = 0;\r\n itemPageDataGrid.current.limit = perPage;\r\n loadGrid();\r\n };\r\n\r\n const onCloseModal = (key, reload = false) => {\r\n dataPopup.current = {\r\n mode: '',\r\n rowData: null,\r\n };\r\n switch (key) {\r\n case 'W09F2271':\r\n setOpenW09F2271Popup(false);\r\n if (reload) loadGrid();\r\n break;\r\n case 'W84F3005':\r\n setOpenW84F3005Popup(false);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n