From 4f071fc301bd2a8a619279bd78561488e5df69f6 Mon Sep 17 00:00:00 2001 From: Mahesh Mahajan Date: Mon, 11 Nov 2024 16:39:02 +0530 Subject: [PATCH] TASK : #0000 Event crtificate functionality --- .../src/pages/events/eventDetails.js | 86 ++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/packages/nulp_elite/src/pages/events/eventDetails.js b/packages/nulp_elite/src/pages/events/eventDetails.js index a1cbbd69..6ab28bc5 100644 --- a/packages/nulp_elite/src/pages/events/eventDetails.js +++ b/packages/nulp_elite/src/pages/events/eventDetails.js @@ -111,6 +111,8 @@ const EventDetails = () => { const [recording, setRecording] = useState(); const [isAllreadyFilledRegistation,setIsAlreadyFilledRegistration] = useState(true) const [isExpired , setIsExpired] = useState(false) + const [batchCertData,setBatchCertData] = useState(); + const [isCertificateIssued , setIsCertificateIssued] = useState(true) const handleClickOpen = () => { setOpen(true); }; @@ -286,6 +288,8 @@ const formatTimeWithTimezone = (date) => { getUserData(_userId, "loggedIn"); fetchMyEvents(); getEventRecording(); + fetchData(); + checkCertificateAlreadyIssued(); // checkEnrolledCourse(); }, [_userId, eventId]); @@ -308,7 +312,7 @@ const formatTimeWithTimezone = (date) => { const { result } = response.data; const { response: batchResponse } = result; - + setBatchCertData(response.data.result) if (batchResponse && batchResponse.count === 0) { showErrorMessage(t("This course has no active Batches")); } else if (batchResponse?.content?.length > 0) { @@ -455,6 +459,82 @@ const formatTimeWithTimezone = (date) => { }); }; + const fetchData = async () => { + try { + const url = `${urlConfig.URLS.LEARNER_PREFIX}${urlConfig.URLS.USER.GET_PROFILE}${_userId}?fields=${urlConfig.params.userReadParam.fields}`; + + const header = "application/json"; + const response = await fetch(url, { + // headers: { + // "Content-Type": "application/json", + // }, + }); + const data = await response.json(); + setUserData(data); + } catch (error) { + console.error("Error fetching user data:", error); + showErrorMessage(t("FAILED_TO_FETCH_DATA")); + } + }; + + const checkCertificateAlreadyIssued = async () => { + try{ + const url = `${urlConfig.URLS.LEARNER_PREFIX}${urlConfig.URLS.CERTIFICATE.CERTIF_SEARCH}`; + const requestBody = { + filters: { + recipient: { + id: { + eq: _userId + } + } + } + } + const resopnse = await axios.post(url, requestBody); + setIsCertificateIssued(resopnse.data.some((item) => item.training?.id === eventId)); + + }catch(error){ + console.log("error While calling API "); + } + + } + + const generateCertificate = async () => { + const templateId = Object.keys(batchCertData?.response?.content[0]["certTemplates"])[0]; + const certificateDetails = batchCertData?.response?.content[0]["certTemplates"][templateId]; + try { + const url = `${urlConfig.URLS.CERTIFICATE.CUSTOM_CERTIFICATE_CREATE}`; + const requestBody = { + recipient: { + id: _userId, + name: userData?.result?.response?.firstName + " " + userData?.result?.response?.lastName, + type: "user", + }, + issuer: certificateDetails?.issuer, + training: { + id: detailData?.identifier, + name: detailData?.name, + type: "Event", + batchId: batchData?.batchId, + }, + templateUrl: + certificateDetails?.url, + status: "ACTIVE", + signatoryList: + certificateDetails?.signatoryList, + certificateLabel: "test", + issuedOn: new Date().toISOString(), + }; + if(!isCertificateIssued){ + const response = await axios.post(url, requestBody); + if(response.data.responseCode === "OK"){ + setIsCertificateIssued(true) + } + } + } catch (error) { + console.error("Error creating certificate:", error); + } +}; + const managePublicPrivateEvent = (button) => { if (eventVisibility && eventVisibility === "Public" && button === "reg") { handleOpenConsentModal(); @@ -865,6 +945,10 @@ const formatTimeWithTimezone = (date) => { type="button" onClick={() => { managePublicPrivateEvent("join"); + // generateCertificate(); + if(detailData.issueCerificate === "Yes"){ + generateCertificate(); + } }} // onClick={attendWebinar} style={{