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 && (