From 5af246fac4bf750cdd0373142540858d71b9dbf9 Mon Sep 17 00:00:00 2001 From: upendraTekdi Date: Thu, 3 Oct 2024 18:12:28 +0530 Subject: [PATCH] Task #224820: update all changes of oblf admin --- public/locales/en/common.json | 23 ++-- src/components/AddNewCenters.tsx | 3 + src/components/layouts/sidebar/MenuItems.js | 8 +- src/pages/centers.tsx | 144 +++++++++++++++----- src/services/CohortService/cohortService.ts | 12 +- src/utils/Helper.ts | 11 ++ src/utils/app.constant.ts | 1 + 7 files changed, 149 insertions(+), 53 deletions(-) diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 7b2c6af8..4c9ba3a9 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -143,7 +143,9 @@ "UPDATE_CLASS": "Update Class", "CLASS_UPDATED_SUCCESS": "Class Updated Successfully!", "CLASS_ADDED_SUCCESS": "Class Added Successfully!", - "CLASS_NOT_FOUND": "Class not found" + "CLASS_NOT_FOUND": "Class not found", + "SCHOOL_NAME_REQUIRED": "School Name Required", + "SCHOOL_CODE_REQUIRED": "School Code Required" }, "LOGIN_PAGE": { "USERNAME": "Username", @@ -300,7 +302,10 @@ "TAKEN_TC": "Taken TC", "ALLOCATION_CHANGE": "Allocation Change", "INCORRECT_ENTRY": "Incorrect Entry", - "DUPLICATION_ENTRY": "Duplicate Entry" + "DUPLICATION_ENTRY": "Duplicate Entry", + "CENTER_CREATED_SUCCESSFULLY": "Center Created Successfully", + "NOT_ABLE_CREATE_CENTER": "Not Able To Create Center", + "NO_COHORT_ID_SELECTED":"No Cohort Id Selected" }, "FORM": { "FULL_NAME": "Full Name", @@ -397,12 +402,14 @@ "PROGRAM": "Program", "IS_STUDENT_INVOLVED_IN_ANY_SUB_PROGRAM": "Is Student Involved In Any Sub Program", "SUB_PROGRAM": "Sub Program", - "VILLAGE_NAME":"Village Name", - "DATE_OF_JOINING":"Date Of joining", - "OLD_TEACHER_ID":"Old Teacher Id", - "DATE_OF_LEAVING":"Date Of Leaving", - "REASON_FOR_LEAVING":"Reason For Leaving", - "EMPLOYEE_ID":"Employee Id" + "VILLAGE_NAME": "Village Name", + "DATE_OF_JOINING": "Date Of joining", + "OLD_TEACHER_ID": "Old Teacher Id", + "DATE_OF_LEAVING": "Date Of Leaving", + "REASON_FOR_LEAVING": "Reason For Leaving", + "EMPLOYEE_ID": "Employee Id", + "FROM_TIME": "From Time", + "TO_TIME": "To Time" }, "FORM_ERROR_MESSAGES": { "INVALID_INPUT": "Invalid Input.", diff --git a/src/components/AddNewCenters.tsx b/src/components/AddNewCenters.tsx index 1068cbc1..7a1bce38 100644 --- a/src/components/AddNewCenters.tsx +++ b/src/components/AddNewCenters.tsx @@ -168,9 +168,12 @@ const AddNewCenters: React.FC = ({ } } else { showToastMessage("Please Input Data", "warning"); + onClose(); } } else { + showToastMessage(t("CENTER.NOT_ABLE_CREATE_CENTER"), "error"); + onClose(); } }; diff --git a/src/components/layouts/sidebar/MenuItems.js b/src/components/layouts/sidebar/MenuItems.js index 9fe51519..d439bedd 100644 --- a/src/components/layouts/sidebar/MenuItems.js +++ b/src/components/layouts/sidebar/MenuItems.js @@ -63,10 +63,10 @@ const Menuitems = [ title: "Class", href: "/class", }, - { - title: "Slot", - href: "/slot", - }, + // { + // title: "Slot", + // href: "/slot", + // }, ], }, showCoursePlanner && { diff --git a/src/pages/centers.tsx b/src/pages/centers.tsx index 41d2da06..8638c87f 100644 --- a/src/pages/centers.tsx +++ b/src/pages/centers.tsx @@ -145,7 +145,7 @@ const Center: React.FC = () => { const [filters, setFilters] = useState({ type: CohortTypes.COHORT, - states: selectedStateCode, + // states: selectedStateCode, status: [statusValue], }); const handleCloseAddLearnerModal = () => { @@ -208,21 +208,12 @@ const Center: React.FC = () => { sort: sort, filters: filters, }; - const resp = await queryClient.fetchQuery({ - queryKey: [ - QueryKeys.GET_COHORT_LIST, - data.limit, - data.offset, - JSON.stringify(data.filters), - JSON.stringify(data.sort), - ], - queryFn: () => getCohortList(data), - }); + const resp = await getCohortList(data); if (resp) { - const result = resp?.results?.cohortDetails; + const result = await resp?.results?.cohortDetails; const resultData: centerData[] = []; - const cohortIds = result.map((item: any) => item.cohortId); // Extract cohort IDs + const cohortIds = result?.map((item: any) => item.cohortId); // Extract cohort IDs // Fetch member counts for each cohort const memberCounts = await Promise.all( @@ -257,7 +248,11 @@ const Center: React.FC = () => { }; resultData?.push(requiredData); }); - setCohortData(resultData); + if (resultData) { + setCohortData(resultData); + } + + console.log("resultData", resultData); const totalCount = resp?.count; setTotalCound(totalCount); @@ -273,12 +268,14 @@ const Center: React.FC = () => { ); const pageCount = Math.ceil(totalCount / pageLimit); setPageCount(pageCount); - setLoading(false); + // setLoading(false); } } catch (error) { setCohortData([]); setLoading(false); console.error("Error fetching user list:", error); + } finally { + setLoading(false); } }; @@ -299,7 +296,7 @@ const Center: React.FC = () => { const getCohortMemberlistData = async (cohortId: string) => { const data = { - limit: 300, + limit: 0, page: 0, filters: { cohortId: cohortId, @@ -361,7 +358,7 @@ const Center: React.FC = () => { useEffect(() => { fetchUserList(); getFormData(); - }, [pageOffset, pageLimit, sortBy, filters, filters.states, filters.status]); + }, [pageOffset, pageLimit, sortBy, filters, filters.status]); // handle functions const handleChange = (event: SelectChangeEvent) => { @@ -607,6 +604,7 @@ const Center: React.FC = () => { const cohortDetails = resp?.results?.cohortDetails?.[0] || {}; setEditFormData(mapFields(formFields, cohortDetails)); + setLoading(false); setIsEditForm(true); } @@ -752,20 +750,76 @@ const Center: React.FC = () => { ) => { setLoading(true); const formData = data?.formData; + const schoolFieldOptions = centerFormData.fields.find( + (item: any) => item.name === "nondependantschools" + ); + const schoolField = schoolFieldOptions.options.find( + (item: any) => item.value === formData.nondependantschools + ); + + const classFieldOptions = centerFormData.fields.find( + (item: any) => item.name === "classes" + ); + const classField = classFieldOptions.options.find( + (item: any) => item.value === formData.classes + ); //const schemaProperties = schema.properties; + const originalTime = formData.from_time; + const timeBefore = adjustTime(originalTime, -5); // 5 minutes before + const timeAfter = adjustTime(originalTime, 5); // 5 minutes after + + const fromTimeOption = centerFormData.fields.find( + (item: any) => item.name === "from_time" + ); + + const schoolOption = centerFormData.fields.find( + (item: any) => item.name === "nondependantschools" + ); + const classOption = centerFormData.fields.find( + (item: any) => item.name === "classes" + ); + const toTimeOption = centerFormData.fields.find( + (item: any) => item.name === "to_time" + ); + + console.log("fromTimeOption", fromTimeOption); + + // Extract the field IDs dynamically + const fromTimeFieldId = fromTimeOption?.fieldId || ""; + const toTimeFieldId = toTimeOption?.fieldId || ""; + const schoolFieldId = schoolOption?.fieldId || ""; + const classFieldId = classOption?.fieldId || ""; + + console.log("formDataFOR EDIT", formData); - // Initialize the API body similar to handleSubmit let cohortDetails: CohortDetails = { - name: formData?.name, - customFields: [], + name: schoolField.label + ", " + classField.label + ", ", + customFields: [ + { + fieldId: fromTimeFieldId, + value: formData.from_time, + }, + { + fieldId: toTimeFieldId, + value: formData.to_time, + }, + { + fieldId: schoolFieldId, + value: [schoolField.value], + }, + { + fieldId: classFieldId, + value: [classField.value], + }, + ], params: { self: { allowed: 1, allow_late_marking: 1, restrict_attendance_timings: 1, - attendance_starts_at: formData?.attendance_starts_at, - attendance_ends_at: formData?.attendance_ends_at, + attendance_starts_at: timeBefore, + attendance_ends_at: timeAfter, back_dated_attendance: 0, back_dated_attendance_allowed_days: 0, can_be_updated: 0, @@ -801,6 +855,7 @@ const Center: React.FC = () => { } const resp = await updateCohortUpdate(selectedCohortId, cohortDetails); if (resp?.responseCode === 200 || resp?.responseCode === 201) { + fetchUserList(); showToastMessage(t("CENTERS.CLASS_UPDATE_SUCCESSFULLY"), "success"); } else { showToastMessage(t("CENTERS.CLASS_UPDATE_FAILED"), "error"); @@ -938,6 +993,12 @@ const Center: React.FC = () => { (item: any) => item.name === "from_time" ); + const schoolOption = centerFormData.fields.find( + (item: any) => item.name === "nondependantschools" + ); + const classOption = centerFormData.fields.find( + (item: any) => item.name === "classes" + ); const toTimeOption = centerFormData.fields.find( (item: any) => item.name === "to_time" ); @@ -947,6 +1008,8 @@ const Center: React.FC = () => { // Extract the field IDs dynamically const fromTimeFieldId = fromTimeOption?.fieldId || ""; const toTimeFieldId = toTimeOption?.fieldId || ""; + const schoolFieldId = schoolOption?.fieldId || ""; + const classFieldId = classOption?.fieldId || ""; console.log( "cohortName", @@ -1004,14 +1067,26 @@ const Center: React.FC = () => { fieldId: toTimeFieldId, value: formData.to_time, }, + { + fieldId: schoolFieldId, + value: [schoolField.value], + }, + { + fieldId: classFieldId, + value: [classField.value], + }, ], }; - console.log("cohortDetails", newClassCohort); + const cohortData = await createCohort(newClassCohort); + if (cohortData) { showToastMessage(t("CENTERS.CENTER_CREATED_SUCCESSFULLY"), "success"); setOpenAddNewCohort(false); // onClose(); + } else { + showToastMessage(t("CENTER.NOT_ABLE_CREATE_CENTER"), "error"); + setOpenAddNewCohort(false); } fetchUserList(); }; @@ -1106,6 +1181,7 @@ const Center: React.FC = () => { /> + {/* {console.log("cohortData",cohortData)} */} {loading ? ( { onDelete={handleDelete} /> ) : ( - - - {t("COMMON.NO_CLASSES_FOUND")} - - + !loading && ( + + + {t("COMMON.NO_CLASSES_FOUND")} + + + ) )} => { return response?.data?.result; } catch (error) { console.error("error in getting cohort list", error); - return error + return error; // throw error; } }; @@ -85,7 +85,7 @@ export const createCohort = async (userData: any): Promise => { const apiUrl: string = `${process.env.NEXT_PUBLIC_BASE_URL}/cohort/create`; try { const response = await post(apiUrl, userData); - return response?.data; + return response?.data ? response?.data :response; } catch (error) { console.error("error in getting cohort list", error); // throw error; @@ -113,20 +113,17 @@ export const fetchCohortMemberList = async ({ } }; - - export const bulkCreateCohortMembers = async (payload: any): Promise => { const apiUrl: string = `${process.env.NEXT_PUBLIC_BASE_URL}/cohortmember/bulkCreate`; try { const response = await post(apiUrl, payload); return response.data; } catch (error) { - console.error('Error in bulk creating cohort members', error); + console.error("Error in bulk creating cohort members", error); throw error; } }; - export const updateCohortMemberStatus = async ({ memberStatus, statusReason, @@ -138,10 +135,9 @@ export const updateCohortMemberStatus = async ({ status: memberStatus, statusReason, }); - console.log('data', response?.data); return response?.data; } catch (error) { - console.error('error in attendance report api ', error); + console.error("error in attendance report api ", error); // throw error; } }; diff --git a/src/utils/Helper.ts b/src/utils/Helper.ts index 5da76c70..df7d5c00 100644 --- a/src/utils/Helper.ts +++ b/src/utils/Helper.ts @@ -196,6 +196,7 @@ export const getCurrentYearPattern = () => { export const mapFields = (formFields: any, Details: any) => { let initialFormData: any = {}; console.log("Details", Details); + formFields?.fields.forEach((item: any) => { const customFieldValue = Details?.customFields?.find( @@ -207,10 +208,13 @@ export const mapFields = (formFields: any, Details: any) => { return item.default; } if (item?.isMultiSelect) { + if (data[item.name] && item?.maxSelections > 1) { return [field?.value]; } else if (item?.type === InputTypes.CHECKBOX) { return String(field?.value).split(","); + } else if (item?.type === InputTypes.DROPDOWN) { + return field?.code || null; } else { return field?.value?.toLowerCase(); } @@ -237,6 +241,12 @@ export const mapFields = (formFields: any, Details: any) => { initialFormData[item.name] = [Details[item.name]]; } else if (item?.type === "checkbox") { initialFormData[item.name] = String(Details[item.name]).split(","); + } else if (item?.type === "drop_down") { + const customField = Details.customFields.find( + (field: any) => field.fieldId === item.fieldId + ); + + initialFormData[item.name] = customField ? customField.code : null; // Ensure it uses 'code' or matches the expected enum } else { initialFormData[item.name] = Details[item.name]; } @@ -245,6 +255,7 @@ export const mapFields = (formFields: any, Details: any) => { } else if (item?.type === "numeric") { initialFormData[item.name] = Number(Details[item.name]); } else if (item?.type === "text" && Details[item.name]) { + initialFormData[item.name] = String(Details[item.name]); } else { if (Details[item.name]) { diff --git a/src/utils/app.constant.ts b/src/utils/app.constant.ts index e3d20b9d..4d697aa1 100644 --- a/src/utils/app.constant.ts +++ b/src/utils/app.constant.ts @@ -88,6 +88,7 @@ export enum InputTypes { RADIO = "radio", NUMERIC = "numeric", TEXT = "text", + DROPDOWN = "drop_down" } export enum apiCatchingDuration { GETREADFORM = 36000000,