1318 lines
69 KiB
JavaScript
1318 lines
69 KiB
JavaScript
const db = require("../models");
|
|
const API = require('../helper/API_Response');
|
|
const db_helper = require("../helper/db_helper");
|
|
const helper = require("../helper/helper");
|
|
const { Domain, Cohort } = require("../models");
|
|
|
|
exports.studentdash = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
var domains = await Domain.findAll({
|
|
where: {
|
|
certi_id: input.cource_id,
|
|
status: 0
|
|
}
|
|
});
|
|
const cohorts = await Cohort.findAll({
|
|
where: {
|
|
id: input.cohort_id,
|
|
status: 0
|
|
},
|
|
attributes: ['id', 'domain_sequence'],
|
|
});
|
|
|
|
let data = [];
|
|
for (let i = 0; i < domains.length; i++) {
|
|
let kp = 0;
|
|
let ttlkp = 0;
|
|
let pp = 0;
|
|
let ttlpp = 0;
|
|
let pAppP = 0;
|
|
let ttlpApp = 0;
|
|
let fp = 0;
|
|
let ttlfp = 0;
|
|
let qp = 0;
|
|
let ttlqp = 0;
|
|
let ttlkque = await db_helper.query("select count(*) as ttlques from know_ass_ques where status=0 and d_id =" + domains[i].id + " AND ass_id in(select type_id from cohort_schedules where type='KA' and cohort_id=" + input.cohort_id + " and due_date <> '')");
|
|
let totalKnowPoint = parseInt(ttlkque[0][0].ttlques);
|
|
const know = await db_helper.query("SELECT COUNT(*) AS kpoint FROM know_ass_ques_ans WHERE cohort_id=" + input.cohort_id + " and active=1 and user_id = " + input.user_id + " AND d_id =" + domains[i].id + " AND ass_id in(select type_id from cohort_schedules where type='KA' and cohort_id=" + input.cohort_id + " and due_date <> '')");
|
|
|
|
kp += parseInt(know[0][0].kpoint);
|
|
ttlkp = totalKnowPoint;
|
|
|
|
let ttlprque = await db_helper.query("select count(*) as ttlprques from practiceques where status=0 and d_id=" + domains[i].id + " and test_id in(select type_id from cohort_schedules where type='PRACTICE' and cohort_id=" + input.cohort_id + " and due_date <> '')");
|
|
let totalPracticePoint = parseInt(ttlprque[0][0].ttlprques);
|
|
const cohortscorePra = await db_helper.query("SELECT COUNT(*) AS ppoint FROM practice_ans WHERE cohort_id=" + input.cohort_id + " and active=1 and user_id = " + input.user_id + " AND d_id =" + domains[i].id + " and test_id in (select type_id from cohort_schedules where type = 'PRACTICE' and cohort_id = " + input.cohort_id + " and due_date <> '')");
|
|
|
|
pp += parseInt(cohortscorePra[0][0].ppoint);
|
|
ttlpp = totalPracticePoint;
|
|
|
|
const flash = await db_helper.query("select sum(correct) fp, (SELECT count(*) FROM flashcards WHERE d_id=" + domains[i].id + " AND status=0) as ttlcards from flashcard_offlines where UserId=" + input.user_id + " and cohort_id=" + input.cohort_id + " and domain=" + domains[i].id);
|
|
ttlfp = parseInt(flash[0][0].ttlcards);
|
|
fp = parseInt(flash[0][0].fp);
|
|
|
|
const ques = await db_helper.query("select sum(case when correct=answer then 1 else 0 end) correct,count(*) ttlq from practiceapp_ans where active=1 and user_id=" + input.user_id + " and domain_id=" + domains[i].id);
|
|
ttlqp = parseInt(ques[0][0].ttlq);
|
|
qp = parseInt(ques[0][0].correct);
|
|
|
|
const video_query = await db_helper.query("SELECT id from videos where status=0 and d_id=" + domains[i].id + "; SELECT * from video_mind_views where type_id in(SELECT id from videos where status=0 and d_id=" + domains[i].id + ") and type='VIDEO' and user_id=" + input.user_id + " and view_percent=100 and cohort_id=" + input.cohort_id);
|
|
let video_point_ttl = video_query[0][0].length;
|
|
let video_point = video_query[0][1].length;
|
|
|
|
const mind_query = await db_helper.query("SELECT id from mind_maps where status=0 and d_id=" + domains[i].id + "; SELECT * from video_mind_views where type_id in(SELECT id from mind_maps where status=0 and d_id=" + domains[i].id + ") and type='MIND' and user_id=" + input.user_id + " and view_percent=100 and cohort_id=" + input.cohort_id);
|
|
let mind_point_ttl = mind_query[0][0].length;
|
|
let mind_point = mind_query[0][1].length;
|
|
|
|
let kper = 0;
|
|
if (ttlkp > 0 && kp > 0)
|
|
kper = Math.round((kp * 100) / ttlkp);
|
|
else
|
|
kper = 0;
|
|
let pper = 0;
|
|
if (ttlpp > 0 && pp > 0)
|
|
pper = Math.round((pp * 100) / ttlpp);
|
|
else
|
|
pper = 0;
|
|
let pApp = 0;
|
|
if (ttlpApp > 0 && pAppP > 0)
|
|
pApp = Math.round((pAppP * 100) / ttlpApp);
|
|
else
|
|
pApp = 0;
|
|
let fper = 0;
|
|
if (ttlfp > 0)
|
|
fper = Math.round(((fp ? fp : 0) * 100) / ttlfp);
|
|
else
|
|
fper = 0;
|
|
let vper = 0;
|
|
if (video_point_ttl > 0)
|
|
vper = Math.round((video_point * 100) / video_point_ttl);
|
|
else
|
|
vper = 0;
|
|
let mper = 0;
|
|
if (mind_point_ttl > 0)
|
|
mper = Math.round((mind_point * 100) / mind_point_ttl);
|
|
else
|
|
mper = 0;
|
|
|
|
let qper = 0;
|
|
if (ttlqp > 0)
|
|
qper = Math.round((qp * 100) / ttlqp);
|
|
else
|
|
qper = 0;
|
|
|
|
if (fper >= 100) {
|
|
fper = 100;
|
|
}
|
|
let totalPro = 0;
|
|
totalPro = Math.round((kper + pper + fper + vper + mper + qper) / 6);
|
|
|
|
data.push({
|
|
num: i + 1,
|
|
title: domains[i].domin_name,
|
|
id: domains[i].id,
|
|
weight: 10,
|
|
totalPro: totalPro,
|
|
kp: kp,
|
|
kper: kper,
|
|
ttlkp: ttlkp,
|
|
cohorts: cohorts,
|
|
subPros: [{
|
|
title: 'Getting Started',
|
|
val: vper > 100 ? 100 : vper,
|
|
type: 'video',
|
|
text: 'Play',
|
|
link: 'true'
|
|
}, {
|
|
title: 'E-brochure',
|
|
val: fper,
|
|
type: 'flash',
|
|
text: 'App',
|
|
link: 'sidenav/resource#Apps'
|
|
},
|
|
{
|
|
title: 'Press Release',
|
|
val: kper,
|
|
type: 'KA',
|
|
text: 'Go',
|
|
link: 'sidenav/knowledge'
|
|
},
|
|
|
|
{
|
|
title: 'Webinar',
|
|
val: pper,
|
|
type: 'PT',
|
|
text: 'Go',
|
|
link: 'sidenav/practicetest'
|
|
},
|
|
{
|
|
title: 'Brand Kit',
|
|
val: mper,
|
|
type: 'mind',
|
|
text: 'Play',
|
|
link: 'true'
|
|
}, {
|
|
title: 'Videos',
|
|
val: qper,
|
|
type: 'ques',
|
|
text: 'App',
|
|
link: 'sidenav/resource#PracticeQuestionApp'
|
|
}
|
|
]
|
|
})
|
|
}
|
|
if (cohorts.length > 0) {
|
|
let domain_sequence = cohorts[0].domain_sequence;
|
|
if (domain_sequence) {
|
|
data = data.sort(function (a, b) {
|
|
const indexA = domain_sequence.indexOf(a.id);
|
|
const indexB = domain_sequence.indexOf(b.id);
|
|
return indexA - indexB;
|
|
});
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await data));
|
|
};
|
|
exports.cohortsCertificateExpireDate = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const getCohorts = await db.sequelize.query(" select * from cohorts where id=:cohort_id", { replacements: { cohort_id: input.cohort_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
var SelfCohorts = [];
|
|
for (let i = 0; i < getCohorts.length; i++) {
|
|
if (getCohorts[0].course_type == '' || getCohorts[0].course_type == null) {
|
|
SelfCohorts = await db.sequelize.query(" select max(overdue_date)expire_date from cohort_schedules where cohort_id=:cohort_id", { replacements: { cohort_id: input.cohort_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
}
|
|
else {
|
|
SelfCohorts = await db.sequelize.query("select exam_date expire_date from self_paced_schedules where cohort_id=:cohort_id and user_id=:user_id order by id limit 1", { replacements: { cohort_id: input.cohort_id, user_id: input.user_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await SelfCohorts));
|
|
};
|
|
exports.dashactivity = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
let time = await db.sequelize.query("select cs.*,ka.knowass_name,pt.practice_name,cat.ketexam_name,case when kans is not null then kans else case when pans is not null then pans else case when catans is not null then catans else 0 end end end resume from cohort_schedules as cs left join knowledge_asses as ka on ka.id=cs.type_id and cs.type='KA' left join (select count(ass_id)kans,ass_id from know_ass_ques_ans where user_id=:user_id and cohort_id=:cohort_id and active=1 group by ass_id,user_id)kaans on kaans.ass_id=cs.type_id and cs.type='KA' left join practicetests as pt on pt.id=cs.type_id and cs.type='PRACTICE' left join (select count(test_id)pans,test_id from practice_ans where user_id=:user_id and cohort_id=:cohort_id and active=1 group by test_id,user_id)paans on paans.test_id=cs.type_id and cs.type='PRACTICE' left join ketexamtests as cat on cat.id=cs.type_id and cs.type='CAT' left join (select count(test_id)catans,test_id from ketexam_ans where user_id=:user_id and cohort_id=:cohort_id group by test_id,user_id)ketans on ketans.test_id=cs.type_id and cs.type='CAT' where cs.type<>'EMAIL' and cs.type<>'video' and cs.type<>'mindmap' and cs.cohort_id in (select id from cohorts where cohort_id= :cohort_id and certi_id= :certi_id and find_in_set(" + input.user_id + ",userslist))", { replacements: { cohort_id: input.cohort_id, certi_id: input.certi_id, user_id: input.user_id } }).then((res) => {
|
|
return Array.from(new Set(res));
|
|
})
|
|
for (let i = 0; i < time[0].length; i++) {
|
|
if (time[0][i].type == "KA") {
|
|
time[0][i].examname = time[0][i].knowass_name;
|
|
const ka = await db_helper.query("select * from knowcompletes where ka_id=" + time[0][i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (ka[0].length > 0) {
|
|
time[0][i].status = "Completed";
|
|
} else {
|
|
time[0][i].status = "";
|
|
}
|
|
}
|
|
if (time[0][i].type == "CAT") {
|
|
time[0][i].examname = time[0][i].ketexam_name;
|
|
const cat = await db_helper.query("select * from ctestcomplates where ct_id=" + time[0][i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[0][i].status = "Completed";
|
|
} else {
|
|
time[0][i].status = "";
|
|
}
|
|
}
|
|
if (time[0][i].type == "PRACTICE") {
|
|
time[0][i].examname = time[0][i].practice_name;
|
|
const cat = await db_helper.query("select * from ptestcomplates where pt_id=" + time[0][i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[0][i].status = "Completed";
|
|
} else {
|
|
time[0][i].status = "";
|
|
}
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await time));
|
|
};
|
|
exports.get_baseline_ka = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const cohort_data = await db.sequelize.query("select baseline_ka from cohorts where id= :cohort_id", { replacements: { cohort_id: input.cohort_id } }).then((res) => {
|
|
return Array.from(new Set(res));
|
|
})
|
|
let time = [];
|
|
if (cohort_data[0][0].baseline_ka) {
|
|
const baseline_ka = await db.sequelize.query("select id,knowass_name from knowledge_asses where id=" + cohort_data[0][0].baseline_ka)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
if (baseline_ka.length > 0) {
|
|
let newevt = {
|
|
examname: baseline_ka[0].knowass_name,
|
|
type: "KA",
|
|
cohort_id: cohort_data[0][0].id,
|
|
status: "Not Started",
|
|
id: baseline_ka[0].id,
|
|
time: "00:00",
|
|
KA_access: 1,
|
|
RowNumber: 0
|
|
}
|
|
const ka = await db_helper.query("select * from knowcompletes where ka_id=" + baseline_ka[0].id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (ka[0].length > 0) {
|
|
const knowAssQues = await db.sequelize.query("SELECT ans,correct FROM know_ass_ques_ans WHERE user_id=" + input.user_id + " AND active=1 AND ass_id=" + baseline_ka[0].id + " AND cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await knowAssQues.filter(res => res.correct == 1);
|
|
let wrong = [];
|
|
wrong = await knowAssQues.filter(res => res.correct == 0);
|
|
let dknow = [];
|
|
dknow = await knowAssQues.filter(res => res.correct == 2);
|
|
newevt.status = "Completed";
|
|
newevt.correct = correct.length;
|
|
newevt.wrong = wrong.length;
|
|
newevt.ttlq = correct.length + wrong.length + dknow.length;
|
|
newevt.completed_date = ka[0][0].createdAt;
|
|
} else {
|
|
const kq = await db_helper.query("select count(*) as ttlq from know_ass_ques where status=0 and find_in_set(" + baseline_ka[0].id + ",ass_id); select count(*) as ttlcomplete from know_ass_ques_ans where status=0 and active=1 and cohort_id=" + input.cohort_id + " and ass_id=" + baseline_ka[0].id + " and user_id=" + input.user_id);
|
|
newevt.ttlq = kq[0][0][0].ttlq;
|
|
newevt.ttlcomplete = kq[0][1][0].ttlcomplete;
|
|
newevt.completed_date = "";
|
|
if (kq[0][1][0].ttlcomplete == 0) {
|
|
newevt.status = "Not Started";
|
|
} else {
|
|
newevt.status = "In Progress";
|
|
}
|
|
}
|
|
|
|
time.push(newevt);
|
|
}
|
|
}
|
|
|
|
res.status(200).send(API._200(await time));
|
|
};
|
|
exports.get_next_live_call = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const cohort_data = await db_helper.query("select time_zone,events,start_date,live_events,videos,mindmaps,KA_access,PT_access,CAT_access from cohorts where id=" + input.cohort_id);
|
|
var time = []
|
|
if (cohort_data[0][0].live_events) {
|
|
var evts = cohort_data[0][0].live_events.split(",");
|
|
const getaccduration = await db.sequelize.query("SELECT * FROM access_durations WHERE user_id=" + input.user_id + " and cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
if (evts[ev] != 0) {
|
|
|
|
let startaccessdate = new Date(new Date().setDate(new Date().getDate() - 1)).toISOString();
|
|
let endaccessdate = new Date(new Date().setDate(new Date().getDate() + 30)).toISOString();
|
|
if (getaccduration.length > 0) {
|
|
startaccessdate = new Date(new Date(getaccduration[0].createdAt)).toISOString();
|
|
endaccessdate = new Date(new Date(getaccduration[0].createdAt).setDate(new Date(getaccduration[0].createdAt).getDate() + getaccduration[0].access_duration)).toISOString();
|
|
}
|
|
var getEvents = [];
|
|
getEvents = await db.sequelize.query("SELECT * FROM all_live_events WHERE live_event_id=" + evts[ev])// + " and start_date between '" + startaccessdate + "' and '" + endaccessdate + "' and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (getEvents.length <= 0) {
|
|
getEvents = await db.sequelize.query("SELECT *,id AS live_event_id FROM live_events WHERE id=" + evts[ev])// + " and start_date between '" + startaccessdate + "' and '" + endaccessdate + "' and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
}
|
|
for (let i = 0; i < getEvents.length; i++) {
|
|
let start_date = getEvents[i].start_date
|
|
if (start_date) {
|
|
let meet_url = "";
|
|
let alreadyJoin = 0;
|
|
|
|
let attendy = getEvents[i].attendees ? JSON.parse(getEvents[i].attendees) : [];
|
|
if (attendy.length > 0) {
|
|
let user = attendy.filter(x => x.user_id == input.user_id);
|
|
if (user.length > 0) {
|
|
const meet_count = await db.sequelize.query("select count(*) ttljoin from meeting_chats where aws_meeting_id='" + getEvents[i].meeting_id + "' AND user_id=" + input.user_id + " AND message_type='log'")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
alreadyJoin = meet_count[0] ? meet_count[0].ttljoin : 0;
|
|
meet_url = {
|
|
"AttendeeId": user[0].AttendeeId,
|
|
"meeting_id": getEvents[i].live_event_id
|
|
}
|
|
|
|
}
|
|
}
|
|
let due_date = new Date(start_date) //.setHours(getEvents[i].start_time.split(":")[0], getEvents[i].start_time.split(":")[1], 0, 0)
|
|
let overdue_date = new Date(start_date).setHours(getEvents[i].end_time.split(":")[0], getEvents[i].end_time.split(":")[1], 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
var status = "";
|
|
var complete_date = "";
|
|
if (new Date(start_date) >= new Date()) {
|
|
status = "Not Started"
|
|
} else if (new Date() <= new Date(overdue_date)) {
|
|
status = "In Progress"
|
|
} else if (getEvents[i].is_completed == 1) {
|
|
status = "Completed";
|
|
complete_date = getEvents[i].complete_date
|
|
}
|
|
// else {
|
|
// status = "In Progress"
|
|
// }
|
|
|
|
let myevent = {
|
|
examname: getEvents[i].event_name,
|
|
type: "Events",
|
|
cohort_id: input.cohort_id,//cohort_data[0][0].id,
|
|
due_date: getEvents[i].start_date,
|
|
overdue_date: getEvents[i].start_date,//new Date(overdue_date),
|
|
event_duration: event_minutes,
|
|
event_time: getEvents[i].start_time,
|
|
event_url: getEvents[i].meeting_playform == 1 ? getEvents[i].event_link : meet_url,//getEvents[i].url ? getEvents[i].url : "#",
|
|
end_time: getEvents[i].end_time,
|
|
status: status,
|
|
time: "",
|
|
id: getEvents[i].live_event_id,
|
|
event_time_zone: getEvents[i].time_zone,
|
|
complete_date: complete_date,
|
|
meeting_playform: getEvents[i].meeting_playform,
|
|
is_completed: getEvents[i].is_completed,
|
|
is_live: getEvents[i].is_live,
|
|
alreadyJoin: alreadyJoin,
|
|
is_repeat: getEvents[i].is_repeat,
|
|
repeat_count: getEvents[i].repeat_count,
|
|
repeat_type: getEvents[i].repeat_type,
|
|
repeat_on: getEvents[i].repeat_on,
|
|
ends_on: getEvents[i].ends_on,
|
|
ends_type: getEvents[i].ends_type,
|
|
total_occurances: getEvents[i].total_occurances
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
if (cohort_data[0][0].events) {
|
|
var evts = JSON.parse(cohort_data[0][0].events);
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
let due_date = new Date(evts[ev].event_date).setHours(parseInt(evts[ev].event_time.split(":")[0]), parseInt(evts[ev].event_time.split(":")[1]), 0, 0)
|
|
let overdue_date = new Date(due_date).setHours(new Date(due_date).getHours(), (new Date(due_date).getMinutes() + parseInt(evts[ev].minutes)), 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
var status = "";
|
|
var complete_date = "";
|
|
var is_completed = 0;
|
|
if (new Date(due_date) > new Date()) {
|
|
status = "Not Started"
|
|
}
|
|
else {
|
|
status = "In Progress"
|
|
}
|
|
let hourmeeting = (parseInt(evts[ev].event_time.split(":")[1]) + parseInt(evts[ev].minutes)) >= 60 ? 1 : 0;
|
|
let myevent = {
|
|
examname: evts[ev].event_name,
|
|
type: "Events",
|
|
cohort_id: cohort_data[0][0].id,
|
|
due_date: evts[ev].event_date,
|
|
overdue_date: new Date(overdue_date),
|
|
event_duration: event_minutes,
|
|
end_time: (Math.round(((parseInt(evts[ev].event_time.split(":")[0]) * 60) + (parseInt(evts[ev].minutes))) / 60) + hourmeeting) + ":" + (Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60).toString().length > 1 ? Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60) : "0" + Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60)),
|
|
event_time: evts[ev].event_time + ":00",//evts[ev].minutes,
|
|
event_url: evts[ev].url ? evts[ev].url : "#",
|
|
status: status,
|
|
time: "",
|
|
id: 0,
|
|
event_time_zone: cohort_data[0][0].time_zone,
|
|
complete_date: complete_date,
|
|
meeting_playform: 1,
|
|
is_completed: is_completed,
|
|
is_live: 0,
|
|
my_data: new Date(due_date)
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await time));
|
|
};
|
|
exports.knowasscomplete = async (req, res) => {
|
|
const data = await helper.decryptRequest(req.body.data);
|
|
const select = await db_helper.selectByWhere('KaComplete', data);
|
|
var create;
|
|
if (select.length == 0) {
|
|
create = await db_helper.addData('KaComplete', data);
|
|
} else {
|
|
await db_helper.query("delete from knowcompletes where user_id=" + data.user_id + " and cohort_id=" + data.cohort_id + " and ka_id=" + data.ka_id)
|
|
create = await db_helper.addData('KaComplete', data);
|
|
}
|
|
res.status(200).send(API._200(await create));
|
|
};
|
|
exports.lbwithdomainid = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const domains = await Domain.findAll({
|
|
where: {
|
|
certi_id: input.cource_id,
|
|
status: 0
|
|
}
|
|
});
|
|
let data = [];
|
|
let all_score = await db_helper.allData("Scores");
|
|
for (let i = 0; i < domains.length; i++) {
|
|
let kp = 0;
|
|
let ttlkp = 0;
|
|
let pp = 0;
|
|
let ttlpp = 0;
|
|
let fp = 0;
|
|
let ttlfp = 0;
|
|
let knowled = 0;
|
|
let fr = await db_helper.query("SELECT ka.id as id from knowledge_asses as ka inner join cohorts as c on find_in_set(ka.id,c.knowassessments) where find_in_set(" + input.user_id + ",c.userslist) and ka.status=0 group by ka.id");
|
|
for (let ka = 0; ka < fr[0].length; ka++) {
|
|
let ttlkque = await db_helper.query("select count(*) as ttlques from know_ass_ques where status=0 and d_id=" + domains[i].id + " and find_in_set(" + fr[0][ka].id + ",ass_id)");
|
|
knowled += ttlkque[0][0].ttlques;
|
|
}
|
|
|
|
let totalKnowPoint = parseInt(knowled) * all_score[0].ka_r;
|
|
|
|
const know = await db_helper.query("SELECT SUM(CASE WHEN correct = 1 THEN " + all_score[0].ka_r + " ELSE " + all_score[0].ka_w + " END) AS kpoint FROM know_ass_ques_ans WHERE cohort_id=" + input.cohort_id + " and active=1 and user_id = " + input.user_id + " AND d_id =" + domains[i].id + " and ass_id in(SELECT ka.id as id from knowledge_asses as ka inner join cohorts as c on find_in_set(ka.id,c.knowassessments) where find_in_set(" + input.user_id + ",c.userslist) and ka.status=0 group by ka.id)");
|
|
|
|
kp = parseInt(know[0][0].kpoint);
|
|
ttlkp = totalKnowPoint;
|
|
|
|
let ttlprque = await db_helper.query("select count(*) as ttlprques from practiceques where d_id=" + domains[i].id + " and test_id in(SELECT pt.id from practicetests as pt inner join cohorts as c on find_in_set(pt.id,c.practicetests) where find_in_set(" + input.user_id + ",c.userslist) and pt.status=0 group by pt.id)");
|
|
let totalPracticePoint = parseInt(ttlprque[0][0].ttlprques) * all_score[0].pt_r;
|
|
|
|
const cohortscorePra = await db_helper.query("SELECT SUM(CASE WHEN correct = 1 THEN " + all_score[0].pt_r + " ELSE " + all_score[0].pt_w + " END) AS ppoint FROM practice_ans WHERE cohort_id=" + input.cohort_id + " and active=1 and user_id = " + input.user_id + " AND d_id =" + domains[i].id);
|
|
|
|
pp = parseInt(cohortscorePra[0][0].ppoint);
|
|
ttlpp = totalPracticePoint;
|
|
const flash = await db_helper.query("select sum(correct) fp, (SELECT count(*) FROM flashcards WHERE d_id=" + domains[i].id + " AND status=0) as ttlcards from flashcard_offlines where UserId=" + input.user_id + " and cohort_id=" + input.cohort_id + " and domain=" + domains[i].id);
|
|
ttlfp = parseInt(flash[0][0].ttlcards);
|
|
fp = parseInt(flash[0][0].fp);
|
|
|
|
const video_query = await db_helper.query("SELECT id from videos where d_id=" + domains[i].id + " and status=0; SELECT * from video_mind_views where type_id in(SELECT id from videos where d_id=" + domains[i].id + " and status=0) and type='VIDEO' and user_id=" + input.user_id + " and view_percent=100 and cohort_id=" + input.cohort_id);
|
|
let video_point_ttl = video_query[0][0].length * 2;
|
|
let video_point = video_query[0][1].length * 2;
|
|
|
|
let pq_point = 0;
|
|
let pq_point_ttl = 0;
|
|
const ques = await db_helper.query("select sum(case when correct=answer then 1 else 0 end) correct,count(*) ttlq from practiceapp_ans where user_id=" + input.user_id + " and domain_id=" + domains[i].id);
|
|
pq_point_ttl = parseInt(ques[0][0].ttlq);
|
|
pq_point = parseInt(ques[0][0].correct);
|
|
const mind_query = await db_helper.query("SELECT id from mind_maps where d_id=" + domains[i].id + "; SELECT * from video_mind_views where type_id in(SELECT id from mind_maps where d_id=" + domains[i].id + ") and type='MIND' and user_id=" + input.user_id + " and cohort_id=" + input.cohort_id + " and view_percent=100");
|
|
let mind_point_ttl = mind_query[0][0].length;
|
|
let mind_point = mind_query[0][1].length;
|
|
if (isNaN(kp))
|
|
kp = 0;
|
|
data.push({
|
|
id: domains[i].id,
|
|
domin_name: domains[i].domin_name,
|
|
kpoint: kp,
|
|
kpoint_ttl: ttlkp,
|
|
ppoint: pp,
|
|
ppoint_ttl: ttlpp,
|
|
flashpoint: fp > ttlfp ? ttlfp : (fp > 0 ? fp : 0),
|
|
flashpoint_ttl: ttlfp ? ttlfp : 0,
|
|
pq_point: pq_point,
|
|
pq_point_ttl: pq_point_ttl,
|
|
video_point: video_point,
|
|
video_point_ttl: video_point_ttl,
|
|
mind_point: mind_point,
|
|
mind_point_ttl: mind_point_ttl
|
|
})
|
|
}
|
|
res.status(200).send(API._200(await data));
|
|
};
|
|
exports.usp_leaderborad = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const time = await db_helper.query("call usp_leaderborad(" + input.cohort_id + ")")
|
|
res.status(200).send(API._200(await time));
|
|
};
|
|
exports.hybrid_schedules_test = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const cohort_data = await db_helper.query("select time_zone,events,start_date,live_events,videos,mindmaps,KA_access,PT_access,CAT_access from cohorts where id=" + input.cohort_id);
|
|
const time = await db.sequelize.query("select cs.*,ka.knowass_name,pt.practice_name,cat.ketexam_name,pt.time,cat.time from hybrid_schedules as cs left join knowledge_asses as ka on ka.id=cs.type_id and cs.type='KA' left join practicetests as pt on pt.id = cs.type_id and cs.type = 'PRACTICE' left join ketexamtests as cat on cat.id = cs.type_id and cs.type = 'CAT' left join videos as vid on vid.id = cs.type_id and cs.type = 'video' left join mind_maps as mind on mind.id = cs.type_id and cs.type = 'mindmap' where cs.type <> 'EMAIL' and cs.cohort_id in (select id from cohorts where id = :cohort_id and certi_id = :certi_id and find_in_set(" + input.user_id + ", userslist)) and (vid.status=0 or ka.status=0 or pt.status=0 or cat.status=0 or mind.status=0 or cs.type='title')", { replacements: { cohort_id: input.cohort_id, certi_id: input.certi_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
let titleDuedate;
|
|
var getminDate = await db.sequelize.query("select min(due_date)due_date from hybrid_schedules where cohort_id = :cohort_id and type != 'title'", { replacements: { cohort_id: input.cohort_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
for (let i = 0; i < time.length; i++) {
|
|
if (i == 0) {
|
|
if (time[i].type == 'title' && time[i].title_type != 'video') {
|
|
time[i].due_date = getminDate[0].due_date;
|
|
titleDuedate = time[i].due_date;
|
|
}
|
|
}
|
|
if (time[i].type != 'title') {
|
|
titleDuedate = time[i].due_date;
|
|
}
|
|
if (time[i].type == "KA") {
|
|
time[i].KA_access = cohort_data[0][0].KA_access;
|
|
time[i].examname = time[i].knowass_name;
|
|
const ka = await db_helper.query("select * from knowcompletes where ka_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (ka[0].length > 0) {
|
|
const knowAssQues = await db.sequelize.query("SELECT ans,correct FROM know_ass_ques_ans WHERE user_id=" + input.user_id + " AND active=1 AND ass_id=" + time[i].type_id + " AND cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await knowAssQues.filter(res => res.correct == 1);
|
|
let wrong = [];
|
|
wrong = await knowAssQues.filter(res => res.correct == 0);
|
|
let dknow = [];
|
|
dknow = await knowAssQues.filter(res => res.ans == 2);
|
|
time[i].status = "Completed";
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].completed_date = ka[0][0].createdAt;
|
|
time[i].ttlq = correct.length + wrong.length + dknow.length;
|
|
time[i].ttlcomplete = correct.length + wrong.length + dknow.length;
|
|
} else {
|
|
const kq = await db_helper.query("select count(*) as ttlq from know_ass_ques where status=0 and find_in_set(" + time[i].type_id + ",ass_id); select count(*) as ttlcomplete from know_ass_ques_ans where status=0 and active=1 and cohort_id=" + input.cohort_id + " and ass_id=" + time[i].type_id + " and user_id=" + input.user_id);
|
|
time[i].ttlq = kq[0][0][0].ttlq;
|
|
time[i].ttlcomplete = kq[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (kq[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
} else if (time[i].type == "CAT") {
|
|
time[i].KA_access = cohort_data[0][0].CAT_access;
|
|
time[i].examname = time[i].ketexam_name;
|
|
const cat = await db_helper.query("select * from ctestcomplates where ct_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[i].status = "Completed";
|
|
time[i].completed_date = cat[0][0].createdAt;
|
|
const catexamQues = await db.sequelize.query("SELECT CASE WHEN pa.ans IS NULL then 'pending' WHEN ptq.answer=pa.ans THEN 'true' ELSE 'false' END as validation FROM ketexamques as ptq LEFT JOIN (SELECT * from ketexam_ans where user_id=" + input.user_id + " and test_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + ") as pa ON ptq.id=pa.KEQ_id and find_in_set(pa.test_id,ptq.exam_id) WHERE FIND_IN_SET(" + time[i].type_id + ",ptq.exam_id) and ptq.status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await catexamQues.filter(res => res.validation == "true");
|
|
let wrong = [];
|
|
wrong = await catexamQues.filter(res => res.validation == "false");
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].ttlq = correct.length + wrong.length;
|
|
time[i].ttlcomplete = 0;
|
|
} else {
|
|
const cat = await db_helper.query("select count(*) as ttlq from ketexamques where status=0 and find_in_set(" + time[i].type_id + ",exam_id); select count(*) as ttlcomplete from ketexam_ans where status=0 and cohort_id=" + input.cohort_id + " and test_id=" + time[i].type_id + " and user_id=" + input.user_id);
|
|
time[i].ttlq = cat[0][0][0].ttlq;
|
|
time[i].ttlcomplete = cat[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (cat[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
} else if (time[i].type == "PRACTICE") {
|
|
time[i].KA_access = cohort_data[0][0].PT_access;
|
|
time[i].examname = time[i].practice_name;
|
|
const cat = await db_helper.query("select * from ptestcomplates where pt_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[i].status = "Completed";
|
|
time[i].completed_date = cat[0][0].createdAt;
|
|
const practiceQues = await db.sequelize.query("SELECT (CASE WHEN pa.ans IS NULL then 'pending' WHEN ptq.answer=pa.ans THEN 'true' ELSE 'false' END) as validation FROM practiceques as ptq LEFT JOIN (SELECT * from practice_ans where cohort_id=" + input.cohort_id + " and user_id=" + input.user_id + " and active=1 and test_id=" + time[i].type_id + ") as pa ON ptq.id=pa.ptq_id WHERE FIND_IN_SET(" + time[i].type_id + ",ptq.test_id) and ptq.status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await practiceQues.filter(res => res.validation == "true");
|
|
let wrong = [];
|
|
wrong = await practiceQues.filter(res => res.validation == "false");
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].ttlq = correct.length + wrong.length;
|
|
time[i].ttlcomplete = 0;
|
|
} else {
|
|
const prac = await db_helper.query("select count(*) as ttlq from practiceques where status=0 and test_id=" + time[i].type_id + "; select count(*) as ttlcomplete from practice_ans where active=1 and cohort_id=" + input.cohort_id + " and test_id=" + time[i].type_id + " and user_id=" + input.user_id);
|
|
time[i].ttlq = prac[0][0][0].ttlq;
|
|
time[i].ttlcomplete = prac[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (prac[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
} else if (time[i].type == "video") {
|
|
const videos = await db_helper.query("select v.id,case when vv.view_percent is null then 0 else vv.view_percent end view_percent,v.video_title,v.duration,case when vv.view_percent = 100 then vv.createdAt else null end view_date,case when vv.view_percent = 100 then 'Completed' else 'Not Started' end status from videos as v left join video_mind_views vv on vv.type_id=v.id and vv.type='VIDEO' and vv.user_id=" + input.user_id + " and vv.cohort_id=" + input.cohort_id + " where v.status=0 and v.id =" + time[i].type_id);
|
|
if (videos[0].length > 0) {
|
|
time[i].status = videos[0][0].status;
|
|
time[i].percentage = videos[0][0].view_percent;
|
|
time[i].examname = videos[0][0].video_title;
|
|
time[i].time = videos[0][0].duration;
|
|
time[i].completed_date = videos[0][0].view_date;
|
|
time[i].type = "VideoLesson";
|
|
}
|
|
}
|
|
else if (time[i].type == "mindmap") {
|
|
const videos = await db_helper.query("select 0 view_percent,v.id,v.name,case when vv.view_percent = 100 then vv.createdAt else null end view_date,v.duration,case when vv.user_id =" + input.user_id + " then 'Completed' else 'Not Started' end status from mind_maps as v left join video_mind_views vv on vv.type_id=v.id and vv.type='MIND' and vv.user_id=" + input.user_id + " and vv.cohort_id=" + input.cohort_id + " where v.status=0 and v.id=" + time[i].type_id);
|
|
if (videos[0].length > 0) {
|
|
time[i].status = videos[0][0].status;
|
|
time[i].percentage = videos[0][0].view_percent;
|
|
time[i].examname = videos[0][0].name;
|
|
time[i].time = videos[0][0].duration;
|
|
time[i].completed_date = videos[0][0].view_date;
|
|
time[i].type = "MindMap";
|
|
}
|
|
}
|
|
else if (time[i].type == 'title') {
|
|
time[i].due_date = titleDuedate;
|
|
if (time[i].title_type == "video") {
|
|
time[i].type = 'VideoLesson';
|
|
time[i].percentage = 0;
|
|
time[i].completed_date = "";
|
|
time[i].status = "Not Started";
|
|
time[i].time = "00:00";
|
|
time[i].examname = time[i].title_name;
|
|
}
|
|
else {
|
|
time[i].examname = time[i].title_name;
|
|
}
|
|
}
|
|
time[i]['homework'] = 1;
|
|
}
|
|
if (cohort_data[0][0].live_events) {
|
|
var evts = cohort_data[0][0].live_events.split(",");
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
if (evts[ev] != 0) {
|
|
const getaccduration = await db.sequelize.query("SELECT * FROM access_durations WHERE user_id=" + input.user_id + " and cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let startaccessdate = new Date(new Date().setDate(new Date().getDate() - 1)).toISOString();
|
|
let endaccessdate = new Date(new Date().setDate(new Date().getDate() + 30)).toISOString();
|
|
if (getaccduration.length > 0) {
|
|
startaccessdate = new Date(new Date(getaccduration[0].createdAt)).toISOString();
|
|
endaccessdate = new Date(new Date(getaccduration[0].createdAt).setDate(new Date(getaccduration[0].createdAt).getDate() + getaccduration[0].access_duration)).toISOString();
|
|
}
|
|
const getEvents = await db.sequelize.query("SELECT * FROM all_live_events WHERE live_event_id=" + evts[ev] + " and start_date between '" + startaccessdate + "' and '" + endaccessdate + "' and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
for (let i = 0; i < getEvents.length; i++) {
|
|
let start_date = getEvents[i].start_date
|
|
if (start_date) {
|
|
let meet_url = "";
|
|
let alreadyJoin = 0;
|
|
|
|
let attendy = getEvents[i].attendees ? JSON.parse(getEvents[i].attendees) : [];
|
|
if (attendy.length > 0) {
|
|
let user = attendy.filter(x => x.user_id == input.user_id);
|
|
if (user.length > 0) {
|
|
const meet_count = await db.sequelize.query("select count(*) ttljoin from meeting_chats where aws_meeting_id='" + getEvents[i].meeting_id + "' AND user_id=" + input.user_id + " AND message_type='log'")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
alreadyJoin = meet_count[0] ? meet_count[0].ttljoin : 0;
|
|
meet_url = {
|
|
"AttendeeId": user[0].AttendeeId,
|
|
"meeting_id": getEvents[i].live_event_id
|
|
}
|
|
|
|
}
|
|
}
|
|
let due_date = new Date(start_date).setHours(getEvents[i].start_time.split(":")[0], getEvents[i].start_time.split(":")[1], 0, 0)
|
|
let overdue_date = new Date(start_date).setHours(getEvents[i].end_time.split(":")[0], getEvents[i].end_time.split(":")[1], 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
var status = "";
|
|
var complete_date = "";
|
|
if (new Date(due_date) > new Date()) {
|
|
status = "Not Started"
|
|
} else if (new Date() < new Date(overdue_date)) {
|
|
status = "In Progress"
|
|
} else if (getEvents[i].is_completed == 1) {
|
|
status = "Completed";
|
|
complete_date = getEvents[i].complete_date
|
|
} else {
|
|
status = "In Progress"
|
|
}
|
|
let myevent = {
|
|
examname: getEvents[i].event_name,
|
|
type: "Events",
|
|
cohort_id: input.cohort_id,//cohort_data[0][0].id,
|
|
due_date: getEvents[i].start_date,//new Date(due_date),
|
|
overdue_date: getEvents[i].start_date,//new Date(overdue_date),
|
|
event_duration: event_minutes,
|
|
event_time: getEvents[i].start_time,
|
|
event_url: getEvents[i].meeting_playform == 1 ? getEvents[i].event_link : meet_url,//getEvents[i].url ? getEvents[i].url : "#",
|
|
end_time: getEvents[i].end_time,
|
|
status: status,
|
|
time: "",
|
|
id: getEvents[i].live_event_id,
|
|
event_time_zone: getEvents[i].time_zone,
|
|
complete_date: complete_date,
|
|
meeting_playform: getEvents[i].meeting_playform,
|
|
is_completed: getEvents[i].is_completed,
|
|
is_live: getEvents[i].is_live,
|
|
alreadyJoin: alreadyJoin
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
if (cohort_data[0][0].events) {
|
|
var evts = JSON.parse(cohort_data[0][0].events);
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
let due_date = new Date(evts[ev].event_date).setHours(parseInt(evts[ev].event_time.split(":")[0]), parseInt(evts[ev].event_time.split(":")[1]), 0, 0)
|
|
let overdue_date = new Date(due_date).setHours(new Date(due_date).getHours(), (new Date(due_date).getMinutes() + parseInt(evts[ev].minutes)), 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
var status = "";
|
|
var complete_date = "";
|
|
var is_completed = 0;
|
|
if (new Date(due_date) > new Date()) {
|
|
status = "Not Started"
|
|
}
|
|
else {
|
|
status = "In Progress"
|
|
}
|
|
let hourmeeting = (parseInt(evts[ev].event_time.split(":")[1]) + parseInt(evts[ev].minutes)) >= 60 ? 1 : 0;
|
|
let myevent = {
|
|
examname: evts[ev].event_name,
|
|
type: "Events",
|
|
cohort_id: cohort_data[0][0].id,
|
|
due_date: evts[ev].event_date,//new Date(due_date),
|
|
overdue_date: new Date(overdue_date),
|
|
event_duration: event_minutes,
|
|
end_time: (Math.round(((parseInt(evts[ev].event_time.split(":")[0]) * 60) + (parseInt(evts[ev].minutes))) / 60) + hourmeeting) + ":" + (Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60).toString().length > 1 ? Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60) : "0" + Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60)),
|
|
//Math.floor(parseInt(evts[ev].minutes) / 60) + ":" + Math.floor(parseInt(evts[ev].minutes) % 60),
|
|
event_time: evts[ev].event_time + ":00",//evts[ev].minutes,
|
|
event_url: evts[ev].url ? evts[ev].url : "#",
|
|
status: status,
|
|
time: "",
|
|
id: 0,
|
|
event_time_zone: cohort_data[0][0].time_zone,
|
|
complete_date: complete_date,
|
|
meeting_playform: 1,
|
|
is_completed: is_completed,
|
|
is_live: 0,
|
|
my_data: new Date(due_date)
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await time));
|
|
};
|
|
exports.schedules_test = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const cohort_data = await db_helper.query("select time_zone,events,start_date,live_events,videos,mindmaps,KA_access,PT_access,CAT_access from cohorts where id=" + input.cohort_id);
|
|
|
|
const time = await db.sequelize.query("select cs.*,ka.knowass_name,pt.practice_name,cat.ketexam_name,pt.time,cat.time from cohort_schedules as cs left join knowledge_asses as ka on ka.id=cs.type_id and cs.type='KA' and ka.knowass_name!='Baseline' left join practicetests as pt on pt.id = cs.type_id and cs.type = 'PRACTICE' left join ketexamtests as cat on cat.id = cs.type_id and cs.type = 'CAT' where cs.type <> 'EMAIL' and cs.cohort_id in (select id from cohorts where id = :cohort_id and certi_id = :certi_id and find_in_set(" + input.user_id + ", userslist)) and (ka.status=0 or pt.status=0 or cat.status=0)", { replacements: { cohort_id: input.cohort_id, certi_id: input.certi_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
|
|
for (let i = 0; i < time.length; i++) {
|
|
if (time[i].type == "KA") {
|
|
time[i].KA_access = cohort_data[0][0].KA_access;
|
|
time[i].examname = time[i].knowass_name;
|
|
const ka = await db_helper.query("select * from knowcompletes where ka_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (ka[0].length > 0) {
|
|
const knowAssQues = await db.sequelize.query("SELECT ans,correct FROM know_ass_ques_ans WHERE user_id=" + input.user_id + " AND active=1 AND ass_id=" + time[i].type_id + " AND cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await knowAssQues.filter(res => res.correct == 1);
|
|
let wrong = [];
|
|
wrong = await knowAssQues.filter(res => res.correct == 0);
|
|
let dknow = [];
|
|
dknow = await knowAssQues.filter(res => res.ans == 2);
|
|
time[i].status = "Completed";
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].completed_date = ka[0][0].createdAt;
|
|
time[i].ttlq = correct.length + wrong.length + dknow.length;
|
|
time[i].ttlcomplete = correct.length + wrong.length + dknow.length;
|
|
} else {
|
|
const kq = await db_helper.query("select count(*) as ttlq from know_ass_ques where status=0 and find_in_set(" + time[i].type_id + ",ass_id); select count(*) as ttlcomplete from know_ass_ques_ans where status=0 and active=1 and cohort_id=" + input.cohort_id + " and ass_id=" + time[i].type_id + " and user_id=" + input.user_id);
|
|
time[i].ttlq = kq[0][0][0].ttlq;
|
|
time[i].ttlcomplete = kq[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (kq[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
} else if (time[i].type == "CAT") {
|
|
time[i].KA_access = cohort_data[0][0].CAT_access;
|
|
time[i].examname = time[i].ketexam_name;
|
|
const cat = await db_helper.query("select * from ctestcomplates where ct_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[i].status = "Completed";
|
|
time[i].completed_date = cat[0][0].createdAt;
|
|
const catexamQues = await db.sequelize.query("SELECT CASE WHEN pa.ans IS NULL then 'pending' WHEN ptq.answer=pa.ans THEN 'true' ELSE 'false' END as validation FROM ketexamques as ptq LEFT JOIN (SELECT * from ketexam_ans where user_id=" + input.user_id + " and test_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + ") as pa ON ptq.id=pa.KEQ_id and find_in_set(pa.test_id,ptq.exam_id) WHERE FIND_IN_SET(" + time[i].type_id + ",ptq.exam_id) and ptq.status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await catexamQues.filter(res => res.validation == "true");
|
|
let wrong = [];
|
|
wrong = await catexamQues.filter(res => res.validation == "false");
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].ttlq = correct.length + wrong.length;
|
|
time[i].ttlcomplete = 0;
|
|
} else {
|
|
const cat = await db_helper.query("select count(*) as ttlq from ketexamques where status=0 and find_in_set(" + time[i].type_id + ",exam_id); select count(*) as ttlcomplete from ketexam_ans where status=0 and cohort_id=" + input.cohort_id + " and test_id=" + time[i].type_id + " and user_id=" + input.user_id);
|
|
time[i].ttlq = cat[0][0][0].ttlq;
|
|
time[i].ttlcomplete = cat[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (cat[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
} else if (time[i].type == "PRACTICE") {
|
|
time[i].KA_access = cohort_data[0][0].PT_access;
|
|
time[i].examname = time[i].practice_name;
|
|
const cat = await db_helper.query("select * from ptestcomplates where pt_id=" + time[i].type_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[i].status = "Completed";
|
|
time[i].completed_date = cat[0][0].createdAt;
|
|
const practiceQues = await db.sequelize.query("SELECT (CASE WHEN pa.ans IS NULL then 'pending' WHEN ptq.answer=pa.ans THEN 'true' ELSE 'false' END) as validation FROM practiceques as ptq LEFT JOIN (SELECT * from practice_ans where cohort_id=" + input.cohort_id + " and user_id=" + input.user_id + " and active=1 and test_id=" + time[i].type_id + ") as pa ON ptq.id=pa.ptq_id WHERE FIND_IN_SET(" + time[i].type_id + ",ptq.test_id) and ptq.status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await practiceQues.filter(res => res.validation == "true");
|
|
let wrong = [];
|
|
wrong = await practiceQues.filter(res => res.validation == "false");
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].ttlq = correct.length + wrong.length;
|
|
time[i].ttlcomplete = 0;
|
|
} else {
|
|
const prac = await db_helper.query("select count(*) as ttlq from practiceques where status=0 and test_id=" + time[i].type_id + "; select count(*) as ttlcomplete from practice_ans where active=1 and cohort_id=" + input.cohort_id + " and test_id=" + time[i].type_id + " and user_id=" + input.user_id);
|
|
time[i].ttlq = prac[0][0][0].ttlq;
|
|
time[i].ttlcomplete = prac[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (prac[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
}
|
|
time[i]['homework'] = 1;
|
|
}
|
|
if (cohort_data[0][0].live_events) {
|
|
var evts = cohort_data[0][0].live_events.split(",");
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
if (evts[ev] != 0) {
|
|
const getaccduration = await db.sequelize.query("SELECT * FROM access_durations WHERE user_id=" + input.user_id + " and cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let startaccessdate = new Date(new Date().setDate(new Date().getDate() - 1)).toISOString();
|
|
let endaccessdate = new Date(new Date().setDate(new Date().getDate() + 30)).toISOString();
|
|
if (getaccduration.length > 0) {
|
|
startaccessdate = new Date(new Date(getaccduration[0].createdAt)).toISOString();
|
|
endaccessdate = new Date(new Date(getaccduration[0].createdAt).setDate(new Date(getaccduration[0].createdAt).getDate() + getaccduration[0].access_duration)).toISOString();
|
|
}
|
|
var getEvents = []
|
|
getEvents = await db.sequelize.query("SELECT * FROM all_live_events WHERE live_event_id=" + evts[ev] + " and start_date between '" + startaccessdate + "' and '" + endaccessdate + "' and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (getEvents.length <= 0) {
|
|
getEvents = await db.sequelize.query("SELECT *,id live_event_id FROM live_events WHERE id=" + evts[ev] + " and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
}
|
|
for (let i = 0; i < getEvents.length; i++) {
|
|
let start_date = getEvents[i].start_date
|
|
if (start_date) {
|
|
let meet_url = "";
|
|
let alreadyJoin = 0;
|
|
|
|
let attendy = getEvents[i].attendees ? JSON.parse(getEvents[i].attendees) : [];
|
|
if (attendy.length > 0) {
|
|
let user = attendy.filter(x => x.user_id == input.user_id);
|
|
if (user.length > 0) {
|
|
const meet_count = await db.sequelize.query("select count(*) ttljoin from meeting_chats where aws_meeting_id='" + getEvents[i].meeting_id + "' AND user_id=" + input.user_id + " AND message_type='log'")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
alreadyJoin = meet_count[0] ? meet_count[0].ttljoin : 0;
|
|
meet_url = {
|
|
"AttendeeId": user[0].AttendeeId,
|
|
"meeting_id": getEvents[i].live_event_id
|
|
}
|
|
// meet_url = "http://64.23.254.43/#/conference/" + btoa(JSON.stringify(mylink));
|
|
|
|
}
|
|
}
|
|
let due_date = new Date(start_date).setHours(getEvents[i].start_time.split(":")[0], getEvents[i].start_time.split(":")[1], 0, 0)
|
|
let overdue_date = new Date(start_date).setHours(getEvents[i].end_time.split(":")[0], getEvents[i].end_time.split(":")[1], 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
var status = "";
|
|
var complete_date = "";
|
|
if (new Date(due_date) > new Date()) {
|
|
status = "Not Started"
|
|
} else if (new Date() < new Date(overdue_date)) {
|
|
status = "In Progress"
|
|
} else if (getEvents[i].is_completed == 1) {
|
|
status = "Completed";
|
|
complete_date = getEvents[i].complete_date
|
|
} else {
|
|
status = "In Progress"
|
|
}
|
|
let myevent = {
|
|
examname: getEvents[i].event_name,
|
|
type: "Events",
|
|
cohort_id: input.cohort_id,//cohort_data[0][0].id,
|
|
due_date: getEvents[i].start_date,//new Date(due_date),
|
|
overdue_date: getEvents[i].start_date,//new Date(overdue_date),
|
|
event_duration: event_minutes,
|
|
event_time: getEvents[i].start_time,
|
|
event_url: getEvents[i].meeting_playform == 1 ? getEvents[i].event_link : meet_url,//getEvents[i].url ? getEvents[i].url : "#",
|
|
end_time: getEvents[i].end_time,
|
|
status: status,
|
|
time: "",
|
|
id: getEvents[i].live_event_id,
|
|
event_time_zone: getEvents[i].time_zone,
|
|
complete_date: complete_date,
|
|
meeting_playform: getEvents[i].meeting_playform,
|
|
is_completed: getEvents[i].is_completed,
|
|
is_live: getEvents[i].is_live,
|
|
alreadyJoin: alreadyJoin,
|
|
is_day_event: false
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
if (cohort_data[0][0].events) {
|
|
var evts = JSON.parse(cohort_data[0][0].events);
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
let event_time = evts[ev].event_time.split(":")
|
|
let time_zone = JSON.parse(cohort_data[0][0].time_zone)
|
|
let stringDate = evts[ev].event_date.split("T")[0] + "T" + event_time[0].toString().padStart(2, "0") + ":" + event_time[1].toString().padStart(2, "0") + ":00" + time_zone.timeValue
|
|
let due_date = new Date(evts[ev].event_date).setHours(parseInt(evts[ev].event_time.split(":")[0]), parseInt(evts[ev].event_time.split(":")[1]), 0, 0)
|
|
let overdue_date = new Date(due_date).setHours(new Date(due_date).getHours(), (new Date(due_date).getMinutes() + parseInt(evts[ev].minutes)), 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
var status = "";
|
|
var complete_date = "";
|
|
var is_completed = 0;
|
|
|
|
if (new Date(due_date) > new Date()) {
|
|
status = "Not Started"
|
|
} else if (new Date() < new Date(overdue_date)) {
|
|
status = "In Progress"
|
|
} else {
|
|
status = "Completed";
|
|
complete_date = new Date(overdue_date)
|
|
is_completed = 1
|
|
}
|
|
|
|
let hourmeeting = (parseInt(evts[ev].event_time.split(":")[1]) + parseInt(evts[ev].minutes)) >= 60 ? 1 : 0;
|
|
let myevent = {
|
|
examname: evts[ev].event_name,
|
|
type: "Events",
|
|
cohort_id: cohort_data[0][0].id,
|
|
due_date: stringDate,//evts[ev].event_date,//new Date(due_date),
|
|
overdue_date: new Date(overdue_date),
|
|
event_duration: event_minutes,
|
|
end_time: (Math.round(((parseInt(evts[ev].event_time.split(":")[0]) * 60) + (parseInt(evts[ev].minutes))) / 60) + hourmeeting) + ":" + (Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60).toString().length > 1 ? Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60) : "0" + Math.floor(((parseInt(evts[ev].event_time.split(":")[1])) + (parseInt(evts[ev].minutes))) % 60)),
|
|
event_time: evts[ev].event_time + ":00",//evts[ev].minutes,
|
|
event_url: evts[ev].url ? evts[ev].url : "#",
|
|
status: status,
|
|
time: "",
|
|
id: 0,
|
|
event_time_zone: cohort_data[0][0].time_zone,
|
|
complete_date: complete_date,
|
|
meeting_playform: 1,
|
|
is_completed: is_completed,
|
|
is_live: 0,
|
|
my_data: new Date(due_date),
|
|
is_day_event: true
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await time));
|
|
};
|
|
|
|
exports.selfpaced_schedules_test = async (req, res) => {
|
|
const input = await helper.decryptRequest(req.body.data);
|
|
const time = await db.sequelize.query("select cs.*,cs.duration vid_sec_duration,m.name mindmap_title,m.duration mindmap_duration,vid.video_title,vid.duration,ka.knowass_name,pt.practice_name from self_paced_materials as cs left join knowledge_asses as ka on ka.id=cs.material_id and cs.material_type='KA' left join practicetests as pt on pt.id=cs.material_id and cs.material_type='Test' left join videos as vid on vid.id=cs.material_id and cs.material_type='Video' left join mind_maps as m on m.id=cs.material_id and cs.material_type='Mindmap' where cs.method_id= :method_id and cs.method_type='" + input.method_type + "'", { replacements: { method_id: input.method_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
const dueDate = await db.sequelize.query("select * from payment_transactions where user_id=" + input.user_id + " and plan_id=" + input.method_id + " order by id desc limit 1")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
if (dueDate.length <= 0) {
|
|
const users = await db.sequelize.query("select * from users where id= :user_id", { replacements: { user_id: input.user_id } })
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
if (users.length > 0) {
|
|
let createDate = new Date(users[0].createdAt)
|
|
createDate.setFullYear(createDate.getFullYear() + 1)
|
|
dueDate.push({ createdAt: createDate.toISOString() })
|
|
}
|
|
}
|
|
let total_flashcards = 0;
|
|
let total_practice = 0;
|
|
for (let i = 0; i < time.length; i++) {
|
|
time[i].due_date = dueDate[0].createdAt;
|
|
if (time[i].material_type == 'Video') {
|
|
const vids = await db.sequelize.query("select view_percent,case when view_percent = 100 then createdAt else null end video_view_date,case when view_percent >= 100 then 'Completed' else (case when view_percent>0 then 'In Progress' else 'Not Started' end ) end video_status from video_mind_views where type_id=" + time[i].material_id + " AND type='VIDEO' and user_id=" + input.user_id + " and cohort_id=" + input.cohort_id + " and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (vids.length > 0) {
|
|
time[i].view_percent = vids[0].view_percent ? vids[0].view_percent : 0;
|
|
time[i].view_date = vids[0].video_view_date;
|
|
time[i].status = vids[0].video_status
|
|
} else {
|
|
time[i].view_percent = 0;
|
|
time[i].view_date = null;
|
|
time[i].status = 'Not Started'
|
|
}
|
|
}
|
|
if (time[i].material_type == 'title') {
|
|
if (time[i].title_type == "Video") {
|
|
const vid_sec = await db_helper.query("select * from video_section_views where user_id=" + input.user_id + " and type_id=" + time[i].id + " and cohort_id=" + input.cohort_id);
|
|
if (vid_sec[0].length > 0) {
|
|
if (vid_sec[0][0].is_completed == 1) {
|
|
time[i].view_percent = 100;
|
|
time[i].view_date = vid_sec[0][0].createdAt;
|
|
time[i].status = "Completed";
|
|
} else {
|
|
time[i].view_percent = 0;
|
|
time[i].view_date = "";
|
|
time[i].status = "Not Started";
|
|
}
|
|
} else {
|
|
time[i].view_percent = 0;
|
|
time[i].view_date = "";
|
|
time[i].status = "Not Started";
|
|
}
|
|
if (time[i].vid_sec_duration) {
|
|
time[i].duration = time[i].vid_sec_duration;
|
|
} else {
|
|
time[i].duration = "00:00";
|
|
}
|
|
time[i].material_type = 'Video';
|
|
|
|
|
|
time[i].video_title = time[i].title_name;
|
|
}
|
|
else if (time[i].title_type == 'Section') {
|
|
let title_name = time[i].title_name
|
|
let title_name_array = title_name.split(": ")
|
|
if (title_name_array.length > 0) {
|
|
let domain_name = title_name_array[1]
|
|
const flashcard = await db.sequelize.query("select count(*) ttl_cards from flashcards where status=0 and d_id in(select id from domains where certi_id=11 and domin_name like '%" + domain_name + "%')")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
time[i].download_description = flashcard.length > 0 ? flashcard[0].ttl_cards : null
|
|
total_flashcards = flashcard.length > 0 ? flashcard[0].ttl_cards : 0;
|
|
const PAQues = await db.sequelize.query("select count(*) ttl_ques from practice_appques where status=0 and d_id in(select id from domains where certi_id=11 and domin_name like '%" + domain_name + "%')")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
})
|
|
time[i].download_url = PAQues.length > 0 ? PAQues[0].ttl_ques : null
|
|
total_practice = PAQues.length > 0 ? PAQues[0].ttl_ques : 0;
|
|
|
|
}
|
|
}
|
|
}
|
|
if (time[i].title_type != 'Download' && time[i].download_url == null) {
|
|
time[i].download_description = total_flashcards
|
|
time[i].download_url = total_practice
|
|
}
|
|
if (time[i].material_type == 'Mindmap') {
|
|
const vids = await db.sequelize.query("select case when view_percent = 100 then createdAt else null end mindmap_view_date,case when view_percent = 100 then 'Completed' else 'Not Started' end mindmap_status from video_mind_views where type_id=" + time[i].material_id + " and type='MIND' and user_id= " + input.user_id + " and cohort_id=" + input.cohort_id + " and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (vids.length > 0) {
|
|
time[i].view_percent = vids[0].view_percent ? vids[0].view_percent : 0;
|
|
time[i].view_date = vids[0].mindmap_view_date;
|
|
time[i].status = vids[0].mindmap_status
|
|
} else {
|
|
time[i].view_percent = 0;
|
|
time[i].view_date = null;
|
|
time[i].status = 'Not Started'
|
|
}
|
|
}
|
|
if (time[i].material_type == 'KA') {
|
|
time[i].examname = time[i].knowass_name;
|
|
const ka = await db_helper.query("select * from knowcompletes where ka_id=" + time[i].material_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (ka[0].length > 0) {
|
|
const knowAssQues = await db.sequelize.query("SELECT ans,correct FROM know_ass_ques_ans WHERE user_id=" + input.user_id + " AND active=1 AND ass_id=" + time[i].material_id + " AND cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await knowAssQues.filter(res => res.correct == 1);
|
|
let wrong = [];
|
|
wrong = await knowAssQues.filter(res => res.correct == 0);
|
|
let dknow = [];
|
|
dknow = await knowAssQues.filter(res => res.ans == 2);
|
|
time[i].status = "Completed";
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].ttlq = correct.length + wrong.length + dknow.length;
|
|
time[i].completed_date = ka[0][0].createdAt;
|
|
time[i].ttlcomplete = correct.length + wrong.length + dknow.length;
|
|
} else {
|
|
|
|
const kq = await db.sequelize.query("select count(*) as ttlq from know_ass_ques where status=0 and find_in_set(" + time[i].material_id + ",ass_id); select count(*) as ttlcomplete from know_ass_ques_ans where active=1 and cohort_id= :cohort_id and ass_id=" + time[i].material_id + " and user_id= :user_id", { replacements: { user_id: input.user_id, cohort_id: input.cohort_id } }).then((res) => {
|
|
return Array.from(new Set(res));
|
|
})
|
|
time[i].ttlq = kq[0][0][0].ttlq;
|
|
time[i].ttlcomplete = kq[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (kq[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
}
|
|
if (time[i].material_type == "Test") {
|
|
time[i].examname = time[i].practice_name;
|
|
|
|
const cat = await db_helper.query("select * from ptestcomplates where pt_id=" + time[i].material_id + " and cohort_id=" + input.cohort_id + " and user_id=" + input.user_id);
|
|
if (cat[0].length > 0) {
|
|
time[i].status = "Completed";
|
|
time[i].completed_date = cat[0][0].createdAt;
|
|
const practiceQues = await db.sequelize.query("select ans,correct from practice_ans where user_id=" + input.user_id + " and cohort_id=" + input.cohort_id + " and active=1 and test_id=" + time[i].material_id + " and status=0")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let correct = [];
|
|
correct = await practiceQues.filter(res => res.correct == 1);
|
|
let wrong = [];
|
|
wrong = await practiceQues.filter(res => res.correct == 0);
|
|
time[i].correct = correct.length;
|
|
time[i].wrong = wrong.length;
|
|
time[i].ttlq = correct.length + wrong.length;
|
|
time[i].ttlcomplete = correct.length + wrong.length;
|
|
} else {
|
|
|
|
const prac = await db.sequelize.query("select count(*) as ttlq from practiceques where test_id=" + time[i].material_id + "; select count(*) as ttlcomplete from practice_ans where active=1 and cohort_id= :cohort_id and test_id=" + time[i].material_id + " and user_id= :user_id", { replacements: { user_id: input.user_id, cohort_id: input.cohort_id } }).then((res) => {
|
|
return Array.from(new Set(res));
|
|
})
|
|
time[i].ttlq = prac[0][0][0].ttlq;
|
|
time[i].ttlcomplete = prac[0][1][0].ttlcomplete;
|
|
time[i].completed_date = "";
|
|
if (prac[0][1][0].ttlcomplete == 0) {
|
|
time[i].status = "Not Started";
|
|
} else {
|
|
time[i].status = "In Progress";
|
|
}
|
|
}
|
|
}
|
|
time[i]['homework'] = 1;
|
|
}
|
|
let table_name = "self_paced_one_times"
|
|
if (input.method_type == 'subscription') {
|
|
table_name = "self_paced_subscriptions"
|
|
} else if (input.method_type == 'Free') {
|
|
table_name = "self_paceds";
|
|
} else {
|
|
table_name = "self_paced_one_times"
|
|
}
|
|
const event_data = await db_helper.query("select * from " + table_name + " where cohort_id=" + input.cohort_id);
|
|
//select userslist,id from cohorts where id in(select cohort_id from " + table_name + " where find_in_set(" + input.id + ",live_events) and status=0)
|
|
if (event_data[0].length > 0) {
|
|
if (event_data[0][0].live_events && event_data[0][0].live_events != "") {
|
|
var evts = event_data[0][0].live_events.split(",");
|
|
for (let ev = 0; ev < evts.length; ev++) {
|
|
const getaccduration = await db.sequelize.query("SELECT * FROM access_durations WHERE user_id=" + input.user_id + " and cohort_id=" + input.cohort_id)
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
let startaccessdate = new Date(new Date().setDate(new Date().getDate() - 1)).toISOString();
|
|
let endaccessdate = new Date(new Date().setDate(new Date().getDate() + 30)).toISOString();
|
|
if (getaccduration.length > 0) {
|
|
startaccessdate = new Date(new Date(getaccduration[0].createdAt)).toISOString();
|
|
endaccessdate = new Date(new Date(getaccduration[0].createdAt).setDate(new Date(getaccduration[0].createdAt).getDate() + getaccduration[0].access_duration)).toISOString();
|
|
}
|
|
var getEvents = [];
|
|
getEvents = await db.sequelize.query("SELECT l.*,l.id live_event_id,r.recording_url FROM all_live_events as l left join event_recordings r on r.event_id=l.id WHERE l.live_event_id=" + evts[ev] + " and l.status=0 and l.start_date between '" + startaccessdate + "' and '" + endaccessdate + "';")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
if (getEvents.length <= 0) {
|
|
getEvents = await db.sequelize.query("SELECT l.*,l.id live_event_id,r.recording_url FROM live_events as l left join event_recordings r on r.event_id=l.id WHERE l.id=" + evts[ev] + " and l.status=0;")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
}
|
|
for (let i = 0; i < getEvents.length; i++) {
|
|
|
|
let meet_url = "";
|
|
let alreadyJoin = 0;
|
|
let attendy = getEvents[i].attendees ? JSON.parse(getEvents[i].attendees) : [];
|
|
if (attendy.length > 0) {
|
|
let user = attendy.filter(x => x.user_id == input.user_id);
|
|
if (user.length > 0) {
|
|
const meet_count = await db.sequelize.query("select count(*) ttljoin from meeting_chats where aws_meeting_id='" + getEvents[i].meeting_id + "' AND user_id=" + input.user_id + " AND message_type='log'")
|
|
.then(function (data) {
|
|
return Array.from(new Set(data[0]));
|
|
});
|
|
alreadyJoin = meet_count[0] ? meet_count[0].ttljoin : 0;
|
|
meet_url = {
|
|
"AttendeeId": user[0].AttendeeId,
|
|
"meeting_id": getEvents[i].live_event_id
|
|
}
|
|
// meet_url = "http://64.23.254.43/#/conference/" + btoa(JSON.stringify(mylink));
|
|
}
|
|
}
|
|
let due_date = new Date(getEvents[i].start_date).setHours(getEvents[i].start_time.split(":")[0], getEvents[i].start_time.split(":")[1], 0, 0)
|
|
let overdue_date = new Date(getEvents[i].start_date).setHours(getEvents[i].end_time.split(":")[0], getEvents[i].end_time.split(":")[1], 0, 0)
|
|
let event_minutes = (overdue_date - due_date) / 60000;
|
|
let myevent = {
|
|
examname: getEvents[i].event_name,
|
|
material_type: "Events",
|
|
cohort_id: input.cohort_id, // event_data[0][0].id,
|
|
due_date: getEvents[i].start_date,
|
|
overdue_date: getEvents[i].start_date,
|
|
event_duration: event_minutes,
|
|
event_time: getEvents[i].start_time,
|
|
end_time: getEvents[i].end_time,
|
|
event_url: getEvents[i].meeting_playform == 1 ? getEvents[i].event_link : meet_url,
|
|
status: "",
|
|
material_id: getEvents[i].live_event_id,
|
|
time: event_minutes,
|
|
event_time_zone: getEvents[i].time_zone,
|
|
complete_date: getEvents[i].complete_date,
|
|
is_completed: getEvents[i].is_completed,
|
|
meeting_playform: getEvents[i].meeting_playform,
|
|
id: getEvents[i].live_event_id,
|
|
is_live: getEvents[i].is_live,
|
|
alreadyJoin: alreadyJoin,
|
|
recording_url: getEvents[i].recording_url
|
|
}
|
|
time.push(myevent);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
res.status(200).send(API._200(await time));
|
|
}; |