Skip to content

Commit

Permalink
Merge branch 'release-1.0.0' of github.com:tekdi/teachers-app into bo…
Browse files Browse the repository at this point in the history
…ardEnrollment
  • Loading branch information
shreyas1434shinde committed Oct 3, 2024
2 parents c680bf1 + e14d5e7 commit bad0466
Show file tree
Hide file tree
Showing 6 changed files with 303 additions and 251 deletions.
1 change: 1 addition & 0 deletions public/locales/en/common.json
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@
"DELETE_USER": "Delete User Permanently",
"DELETE_USER_WITH_REASON": "Delete User",
"USER_DELETED_PERMANENTLY": "User successfully deleted!",
"CANNOT_REASSIGN_TODAY_ATTENDANCE_MARKED": "Cannot re-assign learner as attendance has already been marked for today",
"CANNOT_DELETE_TODAY_ATTENDANCE_MARKED": "Cannot delete learner as attendance has already been marked for today",
"CANNOT_DROPOUT_TODAY_ATTENDANCE_MARKED": "Cannot mark learner as dropout as attendance has already been marked for today",
"OBSERVATIONS_FORMS": "Observations and Forms",
Expand Down
130 changes: 130 additions & 0 deletions src/components/AttendanceDetails.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import { attendanceStatusList } from '@/services/AttendanceService';
import { shortDateFormat } from '@/utils/Helper';
import { AttendanceStatusListProps, DropoutMember } from '@/utils/Interfaces';
import { Status, cohortPrivileges } from '@/utils/app.constant';

export const fetchAttendanceDetails = async (
nameUserIdArray: any[],
selectedDate: any,
classId: string,
onAttendanceDataUpdate: (data: {
cohortMemberList: any[];
presentCount: number;
absentCount: number;
numberOfCohortMembers: number;
dropoutMemberList: any[];
dropoutCount: number;
bulkStatus: string;
}) => void
) => {
let cohortMemberList: Array<{}> = [];
let presentCount = 0;
let absentCount = 0;
let numberOfCohortMembers = 0;
let dropoutMemberList: Array<DropoutMember> = [];
let dropoutCount = 0;
let bulkAttendanceStatus = '';

const updateBulkAttendanceStatus = (arr: any[]) => {
const isAllPresent = arr.every((user: any) => user.attendance === 'present');
const isAllAbsent = arr.every((user: any) => user.attendance === 'absent');
bulkAttendanceStatus = isAllPresent ? 'present' : isAllAbsent ? 'absent' : '';
};

const getPresentCount = (newArray: { attendance: string }[]) => {
return newArray.filter((user) => user.attendance === 'present').length;
};

const getAbsentCount = (newArray: { attendance: string }[]) => {
return newArray.filter((user) => user.attendance === 'absent').length;
};

if (nameUserIdArray && selectedDate) {
const formatSelectedDate = shortDateFormat(new Date(selectedDate));

const attendanceStatusData: AttendanceStatusListProps = {
limit: 0,
page: 0,
filters: {
fromDate: formatSelectedDate,
toDate: formatSelectedDate,
contextId: classId,
scope: cohortPrivileges.STUDENT,
},
};

const res = await attendanceStatusList(attendanceStatusData);
const response = res?.data?.attendanceList;

if (nameUserIdArray && response) {
const getUserAttendanceStatus = (
nameUserIdArray: any[],
response: any[]
) => {
const userAttendanceArray: { userId: any; attendance: any }[] = [];

nameUserIdArray.forEach((user) => {
const userId = user.userId;
const attendance = response.find((status) => status.userId === userId);
userAttendanceArray.push({
userId,
attendance: attendance?.attendance || '',
});
});
return userAttendanceArray;
};

const userAttendanceArray = getUserAttendanceStatus(nameUserIdArray, response);

const mergeArrays = (
nameUserIdArray: { userId: string; name: string; memberStatus: string }[],
userAttendanceArray: { userId: string; attendance: string }[]
) => {
const newArray = nameUserIdArray.map((user) => {
const attendanceEntry = userAttendanceArray.find(
(entry) => entry.userId === user.userId
);
return {
userId: user.userId,
name: user.name,
memberStatus: user.memberStatus,
attendance: attendanceEntry?.attendance || '',
};
});

if (newArray.length !== 0) {
numberOfCohortMembers = newArray.length;
cohortMemberList = newArray;
presentCount = getPresentCount(newArray);
absentCount = getAbsentCount(newArray);

const hasDropout = newArray.some((user) => user.memberStatus === Status.DROPOUT);
if (hasDropout) {
cohortMemberList = newArray.filter((user) => user.memberStatus === Status.ACTIVE);
dropoutMemberList = newArray.filter((user) => user.memberStatus === Status.DROPOUT);
dropoutCount = dropoutMemberList.length;
}
} else {
cohortMemberList = nameUserIdArray.filter((user) => user.memberStatus === Status.ACTIVE);
dropoutMemberList = nameUserIdArray.filter((user) => user.memberStatus === Status.DROPOUT);
numberOfCohortMembers = nameUserIdArray.length;
}

updateBulkAttendanceStatus(newArray);
return newArray;
};

mergeArrays(nameUserIdArray, userAttendanceArray);
}
}

onAttendanceDataUpdate({
cohortMemberList,
presentCount,
absentCount,
numberOfCohortMembers,
dropoutMemberList,
dropoutCount,
bulkStatus: bulkAttendanceStatus,
});
};
40 changes: 24 additions & 16 deletions src/components/LearnersListItem.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -344,24 +344,32 @@ const LearnersListItem: React.FC<LearnerListProps> = ({
};

const handleReassignCenterRequest = async () => {
const payload: BulkCreateCohortMembersRequest = {
userId: [reassignStore?.reassignId],
cohortId: [reassignStore?.cohortId],
removeCohortId: [reassignStore?.removeCohortId],
};

try {
const response = await bulkCreateCohortMembers(payload);
console.log('Cohort members created successfully', response);

const attendanceStats = await fetchAttendanceStats(userId);
if (attendanceStats && attendanceStats.length > 0) {
showToastMessage(
t('MANAGE_USERS.CENTERS_REQUESTED_SUCCESSFULLY'),
'success'
t('COMMON.CANNOT_REASSIGN_TODAY_ATTENDANCE_MARKED'),
'error'
);
setReloadState(true);
} catch (error) {
console.error('Error creating cohort members', error);
showToastMessage(t('MANAGE_USERS.CENTERS_REQUEST_FAILED'), 'error');
} else {
const payload: BulkCreateCohortMembersRequest = {
userId: [reassignStore?.reassignId],
cohortId: [reassignStore?.cohortId],
removeCohortId: [reassignStore?.removeCohortId],
};

try {
const response = await bulkCreateCohortMembers(payload);
console.log('Cohort members created successfully', response);

showToastMessage(
t('MANAGE_USERS.CENTERS_REQUESTED_SUCCESSFULLY'),
'success'
);
setReloadState(true);
} catch (error) {
console.error('Error creating cohort members', error);
showToastMessage(t('MANAGE_USERS.CENTERS_REQUEST_FAILED'), 'error');
}
}
};
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
Expand Down
Loading

0 comments on commit bad0466

Please sign in to comment.