LMS/E-Learning-Backend-main/app/controllers/template.controller.js
2025-09-01 19:37:35 +05:30

579 lines
23 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 { Templates, Domain, TemplateSchedule, Certificate, CohortSchedule, Cohort, Cource, KnowledgeAsses, Practicetest, Ketexamtest, HybridTemplates, HybridTemplatesSchedule } = require("../models");
exports.add = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
var err = [];
var data = {
"name": input.name,
"certi_id": input.certi_id,
"knowassessments": input.knowassessments,
"practicetests": input.practicetests,
"ketexamtests": input.ketexamtests,
"flashcard_app": input.flashcard_app,
"practice_que_app": input.practice_que_app,
"events": input.tevents,
"email_templates": input.email_templates,
"cohortIds": "",
"video_access": input.video_access,
"mindmap_access": input.mindmap_access,
"summary_access": input.summary_access,
"reference_access": input.reference_access,
"KA_access": input.KA_access,
"PT_access": input.PT_access,
"CAT_access": input.CAT_access,
"livechat_access": input.livechat_access,
"liveq_access": input.liveq_access,
"liveevent_access": input.liveevent_access,
"start_date": input.start_date,
"flashcard_access": input.flashcard_access,
"question_access": input.question_access,
"videos": input.videos,
"mindmaps": input.mindmaps,
"live_events": input.live_events,
"baseline_ka": input.baseline_ka,
"baseline_ka_schedule": input.baseline_ka_schedule
};
const template = await Templates.create(data).catch((ex) => err = ex.errors[0]);
if (input.schedule) {
let schedule = input.schedule
let template_id = template.id;
for (let i = 0; i < schedule.length; i++) {
schedule[i].template_id = template_id;
await TemplateSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]);
}
}
if (err.length > 0) {
res.status(404).send(API._404({ message: err.message }));
}
res.status(200).send(API._200(await template));
};
exports.all = async (req, res) => {
const result = await Templates.findAll({
where: {
status: 0
},
include: [{
model: Certificate,
attributes: ['id', 'certificate_name']
}]
})
if (result.length > 0) {
for (let j = 0; j < result.length; j++) {
result[j] = result[j].toJSON()
const knowassessments = await result[j].knowassessments;
const practicetests = await result[j].practicetests;
const cattests = await result[j].ketexamtests;
const email_templates = await result[j].email_templates;
const videos = await result[j].videos;
const mindmaps = await result[j].mindmaps;
if (videos != "") {
let data1 = await db_helper.query("select id,video_title from videos where id in(" + videos + ")");
result[j].videos = data1[0];
let eschedule = await db_helper.query("select * from templates_schedules where type_id in(" + videos + ") and template_id=" + result[j].id + " and type='video'");
result[j].video_schedule = eschedule[0];
} else {
result[j].videos = [];
result[j].video_schedule = [];
}
if (mindmaps != "") {
let data1 = await db_helper.query("select id,name from mind_maps where id in(" + mindmaps + ")");
result[j].mindmaps = data1[0];
let eschedule = await db_helper.query("select * from templates_schedules where type_id in(" + mindmaps + ") and template_id=" + result[j].id + " and type='mindmap'");
result[j].mindmap_schedule = eschedule[0];
} else {
result[j].mindmaps = [];
result[j].mindmap_schedule = [];
}
if (email_templates != "") {
let data1 = await db_helper.query("select id,name,certi_id from email_templates where id in(" + email_templates + ")");
result[j].email_templates = data1[0];
let eschedule = await db_helper.query("select * from templates_schedules where type_id in(" + email_templates + ") and template_id=" + result[j].id + " and type='EMAIL'");
result[j].email_schedule = eschedule[0];
} else {
result[j].email_templates = [];
result[j].email_schedule = [];
}
if (knowassessments != "") {
let data1 = await db_helper.query("select id,knowass_name from knowledge_asses where id in(" + knowassessments + ")");
result[j].knowledge_asses = data1[0];
let kschedule = await db_helper.query("select * from templates_schedules where type_id in(" + knowassessments + ") and template_id=" + result[j].id + " and type='KA'");
result[j].knowledge_schedule = kschedule[0];
} else {
result[j].knowledge_asses = [];
result[j].knowledge_schedule = [];
}
if (practicetests != "") {
let data2 = await db_helper.query("select id,practice_name from practicetests where id in(" + practicetests + ")");
result[j].practicetests = data2[0];
let pschedule = await db_helper.query("select * from templates_schedules where type_id in(" + practicetests + ") and template_id=" + result[j].id + " and type='PRACTICE'");
result[j].practice_schedule = pschedule[0];
} else {
result[j].practicetests = [];
result[j].pschedule = [];
}
if (cattests != "") {
let data3 = await db_helper.query("select id,ketexam_name from ketexamtests where id in(" + cattests + ")");
result[j].ketexamtests = data3[0];
let catschedule = await db_helper.query("select * from templates_schedules where type_id in(" + cattests + ") and template_id=" + result[j].id + " and type='CAT'");
result[j].cat_schedule = catschedule[0];
} else {
result[j].ketexamtests = [];
result[j].catschedule = [];
}
}
}
res.status(200).send(API._200(await result));
};
exports.addcohort = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
var err = [];
var data = {
"cohort_name": input.cohort_name,
"certi_id": input.certi_id,
"cource_id": input.cource_id,
"knowassessments": input.knowassessments,
"practicetests": input.practicetests,
"ketexamtests": input.ketexamtests,
"flashcard_app": input.flashcard_app,
"practice_que_app": input.practice_que_app,
"events": input.tevents,
"userslist": input.userslist,
"location": input.location,
"email_templates": input.email_templates,
"company_id": input.company_id,
"time_zone": input.time_zone,
"template_id": input.template_id,
"video_access": input.video_access,
"mindmap_access": input.mindmap_access,
"summary_access": input.summary_access,
"reference_access": input.reference_access,
"KA_access": input.KA_access,
"PT_access": input.PT_access,
"CAT_access": input.CAT_access,
"livechat_access": input.livechat_access,
"liveq_access": input.liveq_access,
"liveevent_access": input.liveevent_access,
"start_date": input.start_date,
"flashcard_access": input.flashcard_access,
"question_access": input.question_access,
"method_id": input.method_id,
"access_duration": input.access_duration,
"course_type": input.course_type,
"videos": input.videos,
"mindmaps": input.mindmaps,
"live_events": input.live_events,
"baseline_ka": input.baseline_ka,
"baseline_ka_schedule": input.baseline_ka_schedule
};
const cohort = await Cohort.create(data).catch((ex) => err = ex.errors[0]);
if (input.schedule) {
let schedule = input.schedule
let cohort_id = cohort.id;
for (let i = 0; i < schedule.length; i++) {
schedule[i].cohort_id = cohort_id;
await CohortSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]);
}
}
if (input.flashcard_app) {
if (input.userslist) {
await db_helper.query("update users set free_flashcard=2 where id in(" + input.userslist + ")");
}
}
if (input.practice_que_app) {
if (input.userslist) {
await db_helper.query("update users set free_practque=2 where id in(" + input.userslist + ")");
}
}
if (err.length > 0) {
res.status(404).send(API._404({ message: err.message }));
}
res.status(200).send(API._200(await cohort));
};
exports.byid = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const result = await Templates.findAll({
where: {
id: input.id,
status: 0
},
include: [{
model: Certificate,
attributes: ['id', 'certificate_name']
}, {
model: Cource,
attributes: ['id', 'course_name']
}]
})
if (result.length > 0) {
for (let j = 0; j < result.length; j++) {
result[j] = result[j].toJSON()
const knowassessments = await result[j].knowassessments;
const practicetests = await result[j].practicetests;
const cattests = await result[j].ketexamtests;
const cohortid = await result[j].cohortIds;
let data1 = await KnowledgeAsses.findAll({
attributes: ['id', 'knowass_name'],
where: {
status: 0,
id: knowassessments
}
});
result[j].knowledge_asses = data1.map((a) => a.toJSON())
let data2 = await Practicetest.findAll({
attributes: ['id', 'practice_name'],
where: {
status: 0,
id: practicetests
}
})
result[j].practice_tests = data2.map((a) => a.toJSON())
let data3 = await Ketexamtest.findAll({
attributes: ['id', 'ketexam_name'],
where: {
status: 0,
id: cattests
}
})
result[j].ketexam_tests = data3.map((a) => a.toJSON())
let data4 = await Cohort.findAll({
attributes: ['id', 'cohort_name'],
where: {
status: 0,
id: cohortid
}
})
result[j]["cohorts"] = data4.map((a) => a.toJSON())
}
}
res.status(200).send(API._200(await result));
};
exports.delete = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const template = await Templates.findByPk(input.id)
if (!template) {
res.status(404).send(API._404({ message: `Template with id: ${input.id} was not found` }));
}
template.status = 1
await db.sequelize.query("delete from templates_schedules where template_id= :id", { replacements: { id: input.id } })
let result = template.save();
res.status(200).send(API._200(await result));
};
exports.hybrid_add = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
var err = [];
var data = {
"name": input.name,
"certi_id": input.certi_id,
"knowassessments": input.knowassessments,
"practicetests": input.practicetests,
"ketexamtests": input.ketexamtests,
"flashcard_app": input.flashcard_app,
"practice_que_app": input.practice_que_app,
"events": input.tevents,
"email_templates": input.email_templates,
"cohortIds": "",
"video_access": input.video_access,
"mindmap_access": input.mindmap_access,
"summary_access": input.summary_access,
"reference_access": input.reference_access,
"KA_access": input.KA_access,
"PT_access": input.PT_access,
"CAT_access": input.CAT_access,
"livechat_access": input.livechat_access,
"liveq_access": input.liveq_access,
"liveevent_access": input.liveevent_access,
"start_date": input.start_date,
"flashcard_access": input.flashcard_access,
"question_access": input.question_access,
"videos": input.videos,
"mindmaps": input.mindmaps,
"live_events": input.live_events,
"baseline_ka": input.baseline_ka,
"baseline_ka_schedule": input.baseline_ka_schedule
};
const template = await HybridTemplates.create(data).catch((ex) => err = ex.errors[0]);
if (input.schedule) {
let schedule = input.schedule
let template_id = template.id;
for (let i = 0; i < schedule.length; i++) {
schedule[i].template_id = template_id;
await HybridTemplatesSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]);
}
}
if (err.length > 0) {
res.status(404).send(API._404({ message: err.message }));
}
res.status(200).send(API._200(await template));
};
exports.hybrid_all = async (req, res) => {
const result = await HybridTemplates.findAll({
where: {
status: 0
},
include: [{
model: Certificate,
attributes: ['id', 'certificate_name']
}]
})
if (result.length > 0) {
for (let j = 0; j < result.length; j++) {
result[j] = result[j].toJSON()
let eschedule = await db_helper.query("select * from hybrid_templates_schedules where template_id=" + result[j].id + "");
result[j].scheduleData = eschedule[0];
}
}
res.status(200).send(API._200(await result));
};
exports.hybrid_get_save_schedule = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const sub = await HybridTemplatesSchedule.findAll({
where: {
template_id: input.template_id
}
});
res.status(200).send(API._200(await sub));
};
exports.hybrid_update = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const tmp = await HybridTemplates.findByPk(input.id)
if (!tmp) {
res.status(404).send(API._404({ message: `Template with id: ${input.id} was not found` }));
}
if (input.name) tmp.name = input.name
if (input.certi_id) tmp.certi_id = input.certi_id
tmp.knowassessments = input.knowassessments
tmp.practicetests = input.practicetests;
tmp.ketexamtests = input.ketexamtests;
if (input.flashcard_app) input.flashcard_app = input.flashcard_app;
if (input.practice_que_app) input.practice_que_app = input.practice_que_app;
if (input.status) tmp.status = input.status;
tmp.events = input.tevents;
tmp.email_templates = input.email_templates;
if (input.start_date) tmp.start_date = input.start_date;
tmp.videos = input.videos;
tmp.mindmaps = input.mindmaps;
tmp.baseline_ka = input.baseline_ka;
tmp.live_events = input.live_events;
tmp.video_access = input.video_access;
tmp.mindmap_access = input.mindmap_access;
tmp.summary_access = input.summary_access;
tmp.reference_access = input.reference_access;
tmp.KA_access = input.KA_access;
tmp.PT_access = input.PT_access;
tmp.CAT_access = input.CAT_access;
tmp.livechat_access = input.livechat_access;
tmp.liveq_access = input.liveq_access;
tmp.liveevent_access = input.liveevent_access;
tmp.flashcard_access = input.flashcard_access;
tmp.question_access = input.question_access;
tmp.baseline_ka_schedule = input.baseline_ka_schedule;
let result = tmp.save();
if (input.schedule) {
await db.sequelize.query("delete from hybrid_templates_schedules where template_id= :id", { replacements: { id: input.id } })
let schedule = input.schedule
let template_id = input.id;
for (let i = 0; i < schedule.length; i++) {
schedule[i].template_id = template_id;
await HybridTemplatesSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]);
}
}
res.status(200).send(API._200(await result));
};
exports.hybridtemplatedelete = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const template = await HybridTemplates.findByPk(input.id)
if (!template) {
res.status(404).send(API._404({ message: `Template with id: ${input.id} was not found` }));
}
template.status = 1
let result = template.save();
await db.sequelize.query("delete from hybrid_templates_schedules where template_id= :id", { replacements: { id: input.id } })
res.status(200).send(API._200(await result));
};
exports.update = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const tmp = await Templates.findByPk(input.id)
if (!tmp) {
res.status(404).send(API._404({ message: `Template with id: ${input.id} was not found` }));
}
if (input.name) tmp.name = input.name
if (input.certi_id) tmp.certi_id = input.certi_id
tmp.knowassessments = input.knowassessments
tmp.practicetests = input.practicetests;
tmp.ketexamtests = input.ketexamtests;
if (input.flashcard_app) input.flashcard_app = input.flashcard_app;
if (input.practice_que_app) input.practice_que_app = input.practice_que_app;
if (input.status) tmp.status = input.status;
tmp.events = input.tevents;
tmp.email_templates = input.email_templates;
if (input.start_date) tmp.start_date = input.start_date;
tmp.videos = input.videos;
tmp.mindmaps = input.mindmaps;
tmp.baseline_ka = input.baseline_ka;
tmp.live_events = input.live_events;
tmp.video_access = input.video_access;
tmp.mindmap_access = input.mindmap_access;
tmp.summary_access = input.summary_access;
tmp.reference_access = input.reference_access;
tmp.KA_access = input.KA_access;
tmp.PT_access = input.PT_access;
tmp.CAT_access = input.CAT_access;
tmp.livechat_access = input.livechat_access;
tmp.liveq_access = input.liveq_access;
tmp.liveevent_access = input.liveevent_access;
tmp.flashcard_access = input.flashcard_access;
tmp.question_access = input.question_access;
tmp.baseline_ka_schedule = input.baseline_ka_schedule;
let result = tmp.save();
if (input.schedule) {
await db.sequelize.query("delete from templates_schedules where template_id= :id", { replacements: { id: input.id } })
let schedule = input.schedule
let template_id = input.id;
for (let i = 0; i < schedule.length; i++) {
schedule[i].template_id = template_id;
await TemplateSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]);
}
}
res.status(200).send(API._200(await result));
};
exports.update_cohort_videomind = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
let result = [];
await db.sequelize.query("update cohorts set videos='" + input.videos + "',mindmaps='" + input.mindmaps + "' where template_id= :template_id", { replacements: { template_id: input.template_id } })
if (input.schedule) {
const cohorts = await Cohort.findAll({
attributes: ['id'],
where: {
template_id: input.template_id,
status: 0
}
});
let schedule = input.schedule
for (let i = 0; i < cohorts.length; i++) {
await db.sequelize.query("delete from cohort_schedules where cohort_id=" + cohorts[i].id + " and (type='video' or type='mindmap')")
}
for (let i = 0; i < schedule.length; i++) {
for (let j = 0; j < cohorts.length; j++) {
schedule[i].cohort_id = cohorts[j].id;
result.push(await CohortSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]));
}
}
}
res.status(200).send(API._200(await result));
};
exports.update_domain = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const domain = await Domain.findByPk(input.id)
if (!domain) {
res.status(404).send(API._404({ message: `Domain with id: ${input.id} was not found` }));
}
if (input.domin_name) domain.domin_name = input.domin_name
if (input.certi_id) domain.certi_id = input.certi_id
if (input.cource_id) domain.cource_id = input.cource_id
if (input.domain_number) domain.domain_number = input.domain_number
if (input.status) domain.status = input.status
res.status(200).send(API._200(await domain.save()));
};
exports.updatecohorttemp = async (req, res) => {
const input = await helper.decryptRequest(req.body.data);
const tmp = await Cohort.findByPk(input.id)
if (!tmp) {
res.status(404).send(API._404({ message: `Cohort with id: ${input.id} was not found` }));
}
if (input.cohort_name) tmp.cohort_name = input.cohort_name;
if (input.certi_id) tmp.certi_id = input.certi_id;
if (input.cource_id) tmp.cource_id = input.cource_id;
if (input.knowassessments) tmp.knowassessments = input.knowassessments;
if (input.practicetests) tmp.practicetests = input.practicetests;
if (input.ketexamtests) tmp.ketexamtests = input.ketexamtests;
tmp.events = input.tevents;
if (input.userslist) tmp.userslist = input.userslist;
if (input.location) tmp.location = input.location;
if (input.company_id) tmp.company_id = input.company_id;
if (input.email_templates) tmp.email_templates = input.email_templates;
if (input.time_zone) tmp.time_zone = input.time_zone;
if (input.template_id) tmp.template_id = input.template_id;
if (input.start_date) tmp.start_date = input.start_date;
if (input.flashcard_access) tmp.flashcard_access = input.flashcard_access;
if (input.question_access) tmp.question_access = input.question_access;
if (input.method_id) tmp.method_id = input.method_id;
if (input.access_duration) tmp.access_duration = input.access_duration;
if (input.course_type) tmp.course_type = input.course_type;
tmp.live_events = input.live_events ? input.live_events : "";
if (input.videos) tmp.videos = input.videos;
if (input.mindmaps) tmp.mindmaps = input.mindmaps;
if (input.baseline_ka) tmp.baseline_ka = input.baseline_ka;
tmp.video_access = input.video_access;
tmp.mindmap_access = input.mindmap_access;
tmp.summary_access = input.summary_access;
tmp.reference_access = input.reference_access;
tmp.KA_access = input.KA_access;
tmp.PT_access = input.PT_access;
tmp.CAT_access = input.CAT_access;
tmp.livechat_access = input.livechat_access;
tmp.liveq_access = input.liveq_access;
tmp.liveevent_access = input.liveevent_access;
tmp.flashcard_access = input.flashcard_access;
tmp.question_access = input.question_access;
tmp.baseline_ka_schedule = input.baseline_ka_schedule;
let result = await tmp.save();
if (input.schedule) {
await db.sequelize.query("delete from cohort_schedules where cohort_id= :id", { replacements: { id: input.id } })
let schedule = input.schedule
let cohort_id = input.id;
for (let i = 0; i < schedule.length; i++) {
schedule[i].cohort_id = cohort_id;
await CohortSchedule.create(schedule[i]).catch((ex) => err = ex.errors[0]);
}
}
if (input.flashcard_app) {
if (input.userslist) {
await db_helper.query("update users set free_flashcard=2 where id in(" + input.userslist + ")");
} else {
if (tmp.userslist.length > 0)
await db_helper.query("update users set free_flashcard=2 where id in(" + tmp.userslist.join() + ")");
}
} else {
if (input.userslist) {
await db_helper.query("update users set free_flashcard=0 where id in(" + input.userslist + ")");
} else {
if (tmp.userslist.length > 0)
await db_helper.query("update users set free_flashcard=0 where id in(" + tmp.userslist.join() + ")");
}
}
if (input.practice_que_app) {
if (input.userslist) {
await db_helper.query("update users set free_practque=2 where id in(" + input.userslist + ")");
} else {
if (tmp.userslist.length > 0)
await db_helper.query("update users set free_practque=2 where id in(" + tmp.userslist.join() + ")");
}
} else {
if (input.userslist) {
await db_helper.query("update users set free_practque=0 where id in(" + input.userslist + ")");
} else {
if (tmp.userslist.length > 0)
await db_helper.query("update users set free_practque=0 where id in(" + tmp.userslist.join() + ")");
}
}
res.status(200).send(API._200(await result));
};