From 516b3257fa78a763fabd12ceb77c8b9429e82209 Mon Sep 17 00:00:00 2001 From: vhu-axelor <146069039+vhu-axelor@users.noreply.github.com> Date: Fri, 17 Jan 2025 16:12:17 +0100 Subject: [PATCH] refactor: show leave reason available quantity only on managed reason (#871) * RM#89558 --- .../LeaveAvailableDuractionCard.tsx | 10 ++++-- .../CompleteRequestQuantityCard.tsx | 32 +++++++++++++------ packages/apps/hr/src/models/objectFields.ts | 2 ++ .../leaveRequests/CompleteRequestScreen.tsx | 1 + .../leaveRequests/LeaveDetailsScreen.tsx | 6 +++- 5 files changed, 39 insertions(+), 12 deletions(-) diff --git a/packages/apps/hr/src/components/atoms/LeaveAvailableDuractionCard/LeaveAvailableDuractionCard.tsx b/packages/apps/hr/src/components/atoms/LeaveAvailableDuractionCard/LeaveAvailableDuractionCard.tsx index fd9fead37a..bbb5f0a820 100644 --- a/packages/apps/hr/src/components/atoms/LeaveAvailableDuractionCard/LeaveAvailableDuractionCard.tsx +++ b/packages/apps/hr/src/components/atoms/LeaveAvailableDuractionCard/LeaveAvailableDuractionCard.tsx @@ -34,6 +34,7 @@ interface LeaveAvailableDuractionCardProps { availableLeave: number; durationLeave: number; durationUnitSelect: number; + isExceptionalLeave: boolean; } const LeaveAvailableDuractionCard = ({ @@ -42,6 +43,7 @@ const LeaveAvailableDuractionCard = ({ availableLeave, durationLeave, durationUnitSelect, + isExceptionalLeave, }: LeaveAvailableDuractionCardProps) => { const I18n = useTranslator(); const Colors = useThemeColor(); @@ -66,8 +68,12 @@ const LeaveAvailableDuractionCard = ({ {I18n.t('Hr_Available')} diff --git a/packages/apps/hr/src/components/templates/CompleteRequestQuantityCard/CompleteRequestQuantityCard.tsx b/packages/apps/hr/src/components/templates/CompleteRequestQuantityCard/CompleteRequestQuantityCard.tsx index f0552d3d3b..eb43155cdd 100644 --- a/packages/apps/hr/src/components/templates/CompleteRequestQuantityCard/CompleteRequestQuantityCard.tsx +++ b/packages/apps/hr/src/components/templates/CompleteRequestQuantityCard/CompleteRequestQuantityCard.tsx @@ -17,7 +17,7 @@ */ import React, {useMemo} from 'react'; -import {useSelector, useTranslator} from '@axelor/aos-mobile-core'; +import {useSelector, useTranslator, useTypes} from '@axelor/aos-mobile-core'; import {QuantityCard, Text, useDigitFormat} from '@axelor/aos-mobile-ui'; interface CompleteRequestQuantityCardProps { @@ -34,17 +34,33 @@ const CompleteRequestQuantityCard = ({ newLine, }: CompleteRequestQuantityCardProps) => { const I18n = useTranslator(); + const {LeaveReason} = useTypes(); const formatNumber = useDigitFormat(); const {user} = useSelector(state => state.user); - const availableQty = useMemo( - () => + const availableQty = useMemo(() => { + if ( + newLine.leaveReasonTypeSelect === + LeaveReason?.leaveReasonTypeSelect.ExceptionalLeave + ) { + return '-'; + } + + const _availableQty = user.employee?.leaveLineList?.find( leaveLine => leaveLine.leaveReason.id === newLine.id, - )?.quantity ?? 0, - [newLine.id, user.employee?.leaveLineList], - ); + )?.quantity ?? 0; + + return `${formatNumber(_availableQty)} ${newLine.unitName}`; + }, [ + LeaveReason?.leaveReasonTypeSelect.ExceptionalLeave, + formatNumber, + newLine.id, + newLine.leaveReasonTypeSelect, + newLine.unitName, + user.employee?.leaveLineList, + ]); return ( {`${I18n.t('Hr_LeaveReason')} : ${newLine.name}`} - {`${I18n.t('Hr_AvailableQty')} : ${formatNumber( - availableQty, - )} ${newLine.unitName}`} + {`${I18n.t('Hr_AvailableQty')} : ${availableQty}`} ); diff --git a/packages/apps/hr/src/models/objectFields.ts b/packages/apps/hr/src/models/objectFields.ts index 7240ab4ba8..ee090ab923 100644 --- a/packages/apps/hr/src/models/objectFields.ts +++ b/packages/apps/hr/src/models/objectFields.ts @@ -165,6 +165,7 @@ export const hr_modelAPI: ObjectFields = { schemaContructor.object({ name: schemaContructor.string(), unitSelect: schemaContructor.number(), + leaveReasonTypeSelect: schemaContructor.number(), }), ), company: schemaContructor.subObject('name'), @@ -183,5 +184,6 @@ export const hr_modelAPI: ObjectFields = { hr_leaveReason: schemaContructor.object({ name: schemaContructor.string(), unitSelect: schemaContructor.number(), + leaveReasonTypeSelect: schemaContructor.number(), }), }; diff --git a/packages/apps/hr/src/screens/leaveRequests/CompleteRequestScreen.tsx b/packages/apps/hr/src/screens/leaveRequests/CompleteRequestScreen.tsx index 409d88dfff..396fd37a67 100644 --- a/packages/apps/hr/src/screens/leaveRequests/CompleteRequestScreen.tsx +++ b/packages/apps/hr/src/screens/leaveRequests/CompleteRequestScreen.tsx @@ -192,6 +192,7 @@ const CompleteRequestScreen = ({}) => { LeaveReason?.unitSelect, leaveReason.unitSelect, ), + leaveReasonTypeSelect: leaveReason.leaveReasonTypeSelect, }) } /> diff --git a/packages/apps/hr/src/screens/leaveRequests/LeaveDetailsScreen.tsx b/packages/apps/hr/src/screens/leaveRequests/LeaveDetailsScreen.tsx index 2fced2ce7f..e7f2e7fbfa 100644 --- a/packages/apps/hr/src/screens/leaveRequests/LeaveDetailsScreen.tsx +++ b/packages/apps/hr/src/screens/leaveRequests/LeaveDetailsScreen.tsx @@ -44,7 +44,7 @@ import {fetchLeaveById} from '../../features/leaveSlice'; const LeaveDetailsScreen = ({route}) => { const {leaveId} = route.params; const I18n = useTranslator(); - const {LeaveRequest} = useTypes(); + const {LeaveRequest, LeaveReason} = useTypes(); const dispatch = useDispatch(); const {leave, loadingLeave} = useSelector(state => state.hr_leave); @@ -90,6 +90,10 @@ const LeaveDetailsScreen = ({route}) => { availableLeave={leave.quantityBeforeValidation} durationLeave={leave.duration} durationUnitSelect={leave.leaveReason?.unitSelect} + isExceptionalLeave={ + leave.leaveReason?.leaveReasonTypeSelect === + LeaveReason?.leaveReasonTypeSelect.ExceptionalLeave + } /> {leave.statusSelect > LeaveRequest?.statusSelect.Draft && (