diff --git a/src/src/attendances/attendances.core.service.ts b/src/src/attendances/attendances.core.service.ts index abd9c3c98..c69548b94 100644 --- a/src/src/attendances/attendances.core.service.ts +++ b/src/src/attendances/attendances.core.service.ts @@ -231,15 +231,22 @@ export class AttendancesCoreService { return result; } - async getUserAttendancePresentList(user_id, context, context_id) { + async getUserAttendancePresentList({ + user_id, + context, + context_id, + event_end_date, + event_start_date, + }) { const query = `query MyQuery { - attendance(where: {user_id: {_eq: ${user_id}}, context: {_eq: ${context}}, context_id: {_eq:${context_id}}, status: {_eq: "present"}}) { + attendance(where: {user_id: {_eq: ${user_id}}, context: {_eq: ${context}}, context_id: {_eq:${context_id}}, status: {_eq: "present"}, date_time: {_gte: "${event_start_date}", _lte: "${event_end_date}"}}, distinct_on: date_time) { id status context context_id } }`; + try { const result_response = await this.hasuraServiceFromServices.getData({ query }); diff --git a/src/src/cron/prepareCertificateHtml.cron.ts b/src/src/cron/prepareCertificateHtml.cron.ts index 961c727e9..b610ea63d 100644 --- a/src/src/cron/prepareCertificateHtml.cron.ts +++ b/src/src/cron/prepareCertificateHtml.cron.ts @@ -7,6 +7,7 @@ import { html_code } from 'src/lms/certificate_html'; import { LMSCertificateDto } from 'src/lms/dto/lms-certificate.dto'; import { UserService } from 'src/user/user.service'; import { HasuraService } from '../services/hasura/hasura.service'; +import { json } from 'stream/consumers'; const moment = require('moment'); const qr = require('qrcode'); @@ -71,21 +72,35 @@ export class PrepareCertificateHtmlCron { //get attendance status let attendance_valid = false; + const startMoment = moment( + userTestData?.events?.[0]?.start_date, + ); + const endMoment = moment(userTestData?.events?.[0]?.end_date); + let datesD = []; + while (startMoment.isSameOrBefore(endMoment)) { + datesD.push(startMoment.format('YYYY-MM-DD')); + startMoment.add(1, 'day'); + } + let usrAttendanceList = await this.attendanceCoreService.getUserAttendancePresentList( - user_id, - context, - context_id, + { + user_id, + context, + context_id, + event_start_date: `${userTestData?.events?.[0]?.start_date}T00:00:00`, + event_end_date: `${userTestData?.events?.[0]?.end_date}T23:59:59`, + }, ); + console.log('usrAttendanceList list', usrAttendanceList); - let minAttendance = parseInt( - this.configService.get( - 'LMS_CERTIFICATE_ISSUE_MIN_ATTENDANCE', - ), - ); + console.log('events-dates', JSON.stringify(datesD)); + let minAttendance = datesD.length; + if (usrAttendanceList.length >= minAttendance) { attendance_valid = true; } + //check certificate criteria if (userTestData?.score >= minPercentage && attendance_valid) { issue_status = 'true'; @@ -217,10 +232,19 @@ export class PrepareCertificateHtmlCron { if (issue_status == 'true') { testTrackingUpdateData['certificate_status'] = issue_status; } - await this.updateTestTrackingData( + const result = await this.updateTestTrackingData( userTestData?.id, testTrackingUpdateData, ); + if (issue_status === 'false') { + console.log( + `user_id ${user_id} name ${user_name} testID ${test_id} Not Genrated event date count ${minAttendance} attendance count ${usrAttendanceList.length}`, + ); + } else if (result) { + console.log( + `user_id ${user_id} name ${user_name} testID ${test_id} Certificate Genrated Sucssefully`, + ); + } } } } @@ -278,10 +302,9 @@ export class PrepareCertificateHtmlCron { } } `; - console.log('fetchTestTrackingData query', query); + try { const result_query = await this.hasuraService.getData({ query }); - console.log('result_query', result_query); const data_list = result_query?.data?.lms_test_tracking; if (data_list) { return data_list; @@ -382,8 +405,6 @@ export class PrepareCertificateHtmlCron { } } async updateTestTrackingData(id, testTrackingUpdateData) { - console.log('id', id); - console.log('testTrackingUpdateData', testTrackingUpdateData); let setQuery = ``; if (testTrackingUpdateData?.certificate_status) { setQuery += `certificate_status: ${testTrackingUpdateData.certificate_status}`; diff --git a/src/src/events/events.service.ts b/src/src/events/events.service.ts index 2ef4c47a2..e0b564633 100644 --- a/src/src/events/events.service.ts +++ b/src/src/events/events.service.ts @@ -301,11 +301,13 @@ export class EventsService { ); if (body?.start_date) { - filter.push(`start_date: {_eq:"${body?.start_date}"}`); + filter.push(`start_date: {_gte:"${body?.start_date}"}`); } if (body?.end_date) { - filter.push(`end_date: {_eq:"${body?.end_date}"}`); + filter.push(`end_date: {_lte:"${body?.end_date}"}`); + } else if (body?.start_date) { + filter.push(`end_date: {_lte:"${body?.start_date}"}`); } const allIpList = getIps?.data?.users.map((curr) => curr.id); @@ -342,28 +344,6 @@ export class EventsService { created_by updated_by user_id - attendances { - context - context_id - created_by - date_time - id - lat - long - rsvp - status - updated_by - user_id - user { - first_name - id - last_name - middle_name - profile_url - aadhar_verified - aadhaar_verification_mode - } - } } }`, }; diff --git a/src/src/lms/certificate_html.ts b/src/src/lms/certificate_html.ts index 9c72c2e39..88e60000c 100644 --- a/src/src/lms/certificate_html.ts +++ b/src/src/lms/certificate_html.ts @@ -29,12 +29,12 @@ export const html_code = ` .font-600 { font-weight: 600; } - .font-size-13 { - font-size: 13px !important; - } .font-size-14 { font-size: 14px !important; } + .font-size-15 { + font-size: 15px !important; + } .center { padding: 20px; @@ -61,19 +61,17 @@ export const html_code = ` .px-10 { padding: 0 10px; } + .p-30 { + padding: 30px; + } body { - background-size: 100%; - height: 700px; + margin: 0; padding: 0; - margin: 0 auto; - font-size: 16px; - color: #5b5b5b; + background: #f2e4e1; } .color { background: #f2e4e1; -webkit-print-color-adjust: exact; - padding: 30px; - height: 200mm; } div { line-height: 1.8; @@ -100,11 +98,24 @@ export const html_code = ` font-weight: 700; background: #fff; /* Background color of the title */ } + .w-1140 { + min-width: 1140px !important; + } + .w-1080 { + width: 1080px !important; + } + .h-800 { + height: 800px !important; + } + .h-700 { + height: 700px !important; + } + .h-740 { + height: 740px !important; + } .bg-white { - width: 84%; margin: 0 auto; margin-top: 20px; - height: 675px; border-radius: 30px; background-color: #fff; background-repeat: repeat; @@ -118,8 +129,8 @@ export const html_code = ` width: 24.3%; float: left; } - .m-25px { - margin: -17px 7px; + .side-image { + margin: -17px 10px; } .pt-30 { padding-top: 30px; @@ -193,8 +204,8 @@ export const html_code = ` -
-
+
+
@@ -206,14 +217,14 @@ export const html_code = ` />
-
+
सत्र   
{{academic_year}}
 के लिए
-
यह प्रमाणित किया जाता है कि
+
यह प्रमाणित किया जाता है कि
श्री / सुश्री   
@@ -231,8 +242,8 @@ export const html_code = `
 तक
-
-
+
+
'प्रोजेक्ट प्रगति' के प्रशिक्षण को सफलतापूर्वक पूरा किया है।
@@ -251,12 +262,12 @@ export const html_code = `
- प्रशिक्षण में अर्जित किए गए कौशल:
-
+
-
+
-
+
 
दिनांक :  
@@ -316,7 +327,7 @@ export const html_code = ` width="100px" />
-
+