ZoeApi/controllers/courseController.js

616 lines
20 KiB
JavaScript

require("../connections/mysql-server");
require("../connections/sql-server");
require("../helpers/CheckToken");
const express = require("express");
const router = express.Router();
const bodyParser = require("body-parser");
router.use(bodyParser.urlencoded({ extended: true }));
router.use(bodyParser.json());
var routes = function () {
router.get("/getRobotCourses", verifyJWT, (req, res) => {
execSQLQuery(`
SELECT
0 as 'IDMatricula',
idcourses as 'IDCurso',
name as 'NomeVersao',
aditional as 'Adicional',
extracourse as 'CursoExtra'
FROM courses
WHERE idtypescourse = 5 and disabled = 0;`,
res,
req.originalUrl
);
});
router.get("/getRobotCourseByStudent/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
execSQLQuery(`
SELECT distinct
zus.user AS IDMatricula,
zuc.idcourses AS IDCurso,
co.name AS NomeVersao
FROM zoeusercourses zuc
INNER JOIN courses co ON co.idcourses = zuc.idcourses
INNER JOIN zoeusers zus ON zus.id = zuc.idzoeusers
INNER JOIN zoeunits zun ON zun.id = zuc.idzoeunits
WHERE zuc.enabled = 1 AND (zuc.expiresAt IS NULL OR CURRENT_TIMESTAMP < zuc.expiresAt) AND zus.user = '${idusers}' and CONCAT(zun.id, '.dbo.') = '${db}';`,
res,
req.originalUrl
);
});
router.get("/getRobotCourseByStudentOld/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
execSQLQuery2(`
SELECT distinct
mt.IDMatricula,
tt.IDCurso,
cu.NomeVersao
FROM ${db}MatriculasTreinandos mt
INNER JOIN ${db}TreinandosTurmas tt ON mt.IDMatricula = tt.IDMatricula
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
WHERE mt.IDMatricula = ${idusers} AND cu.Desativado = 0 AND tt.Desistente = 0 AND cu.IDTipoCurso = 5;`,
res,
req.originalUrl
);
});
router.get("/getAll", verifyJWT, (req, res) => {
const domain = req.hostname.split(".").pop();
let language;
switch (domain) {
case "br":
language = 1;
break;
case "py":
language = 2;
break;
case "us":
language = 3;
break;
default:
language = 1;
break;
}
execSQLQuery(
`SELECT
*
FROM myrobot.courses where idlanguage = ${language} order by name asc`,
res,
req.originalUrl
);
});
router.get("/getAllCourseOn", verifyJWT, (req, res) => {
const domain = req.hostname.split(".").pop();
let language;
switch (domain) {
case "br":
language = 1;
break;
case "py":
language = 2;
break;
case "us":
language = 3;
break;
default:
language = 1;
break;
}
execSQLQuery(
`SELECT
*
FROM myrobot.courses where idlanguage = ${language} and disabled = 0 order by name asc`,
res,
req.originalUrl
);
});
router.get("/getAllCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM courses
WHERE idtypescourse != 5;`,
res,
req.originalUrl
);
});
router.get("/getSQLServerCourses/:db", verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(
`SELECT
*
FROM ${db}Cursos;`,
res,
req.originalUrl
);
});
router.get("/getMySQLinSQLServerCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
idcourses AS 'Codigo',
coursecode AS 'CodigoCurso',
idtypescourse AS 'IDTipoCurso',
name AS 'NomeVersao',
description AS 'DescricaoContrato',
durationtraineeprogram AS 'CH_ProgTrein',
durationtraineevip AS 'CH_TurmaVIP',
durationtraineeindividual AS 'CH_Individual',
valueprogram AS 'VR_ProgTrein',
valuevip AS 'VR_TurmaVIP',
valueindividual AS 'VR_Individual',
materialvalue AS 'ValorMaterial',
materialcode AS 'CodigoMaterial',
CASE WHEN extracourse = 1 THEN 'true' else 'false' END AS 'CursoExtra',
CASE WHEN aditional = 1 THEN 'true' else 'false' END AS 'Adicional',
CASE WHEN disabled = 1 THEN 'true' else 'false' END AS 'Desativado',
CASE WHEN autospeak = 1 THEN 'true' else 'false' END AS 'FalaAutomatica'
FROM courses;`,
res,
req.originalUrl
);
});
router.get("/typescourse", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM typescourse;`,
res,
req.originalUrl
);
});
router.get("/getMySQLinSQLServerTypescourse", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
idtypescourse AS 'IDTipoCurso',
description AS 'Descricao',
case when disabled = 1 then true else false end as 'Desativado',
gradecalc AS 'CalculosNotas'
FROM typescourse;`,
res,
req.originalUrl
);
});
router.get("/SQLServertypescourse/:db", verifyJWT, (req, res) => {
const db = req.params.db;
execSQLQuery2(
`SELECT
*
FROM ${db}TiposCurso;`,
res,
req.originalUrl
);
});
router.get("/getExtraCourses", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
0 as 'IDMatricula',
idcourses as 'IDCurso',
name as 'NomeVersao'
FROM courses
WHERE aditional = 1 and disabled = 0;`,
res,
req.originalUrl
);
});
router.get("/getCourse/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`SELECT
*
FROM courses
WHERE idcourses = ${idcourses};`,
res,
req.originalUrl
);
});
router.get("/getCourseNote/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`SELECT
*
FROM coursenotes
WHERE idcourses = ${idcourses};`,
res,
req.originalUrl
);
});
router.get("/getAllSQLServerCourses/:idusers", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
let sqlQuery = `SELECT idcourses AS 'IDCurso', ${idusers} AS 'IDMatricula', name AS 'NomeVersao' FROM courses where idtypescourse != 5 and disabled = 0 order by name asc;`;
execSQLQuery(sqlQuery, res, req.originalUrl);
});
router.get("/getCourseByStudent/:idusers/:banco", verifyJWT, (req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
const EAD = req.headers.host && req.headers.host.includes("myrobothome");
mysqlConnection.query(
"select cursoferias from config;",
function (error, results, fields) {
let sqlQuery = `SELECT distinct
mt.IDMatricula,
cu.Codigo as 'IDCurso',
cu.NomeVersao,
cu.IDTipoCurso
FROM ${db}MatriculasTreinandos mt
INNER JOIN ${db}TreinandosTurmas tt ON mt.IDMatricula = tt.IDMatricula
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
WHERE mt.IDMatricula = ${idusers} AND cu.Desativado = 0 AND tt.Desistente = 0 AND cu.IDTipoCurso ${
EAD ? "= 7" : "!= 5"
}
union all select
0 as IDMatricula,
cu2.Codigo as 'IDCurso',
cu2.NomeVersao,
cu2.IDTipoCurso
from ${db}Cursos cu2
where 1=0${
results[0]["cursoferias"] == 1 ? " or cu2.CursoExtra = 1" : ""
}${EAD ? " or cu2.Adicional = 1" : ""};`;
//console.log(sqlQuery);
execSQLQuery2(sqlQuery, res, req.originalUrl);
}
);
});
router.get(
"/getHomeCourseByStudent/:idusers/:banco",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const db = req.params.banco;
const EAD = req.headers.host && req.headers.host.includes("myrobothome");
mysqlConnection.query(
"select cursoferias from config;",
function (error, results, fields) {
let sqlQuery = `SELECT distinct
mt.IDMatricula,
cu.Codigo as 'IDCurso',
cu.NomeVersao,
cu.IDTipoCurso
FROM ${db}MatriculasTreinandos mt
INNER JOIN ${db}TreinandosTurmas tt ON mt.IDMatricula = tt.IDMatricula
INNER JOIN ${db}Cursos cu ON cu.Codigo = tt.IDCurso
WHERE mt.IDMatricula = ${idusers} AND cu.Desativado = 0 AND tt.Desistente = 0 AND
(cu.IDTipoCurso = 4 or cu.IDTipoCurso = 6 or cu.IDTipoCurso = 7)
union all select
0 as IDMatricula,
cu2.Codigo as 'IDCurso',
cu2.NomeVersao,
cu2.IDTipoCurso
from ${db}Cursos cu2
where (cu2.IDTipoCurso = 4 or cu2.IDTipoCurso = 6 or cu2.IDTipoCurso = 7) and
(1=0${
results[0]["cursoferias"] == 1 ? " or cu2.CursoExtra = 1" : ""
}${EAD ? " or cu2.Adicional = 1" : ""});`;
console.log(sqlQuery);
execSQLQuery2(sqlQuery, res, req.originalUrl);
}
);
}
);
router.get("/list", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
idcourses,
name,
description,
concat('R$ ',format(materialvalue,2,'de_DE')) as materialvalue,
disabled,
idtypescourse
FROM courses
WHERE disabled = 0
order by name asc;`,
res,
req.originalUrl
);
});
router.get("/disable/:idcourses", verifyJWT, (req, res) => {
const idcourses = parseInt(req.params.idcourses);
execSQLQuery(
`UPDATE courses SET
disabled = not disabled
WHERE idcourses = ${idcourses};`,
res,
req.originalUrl
);
});
router.post("/insertSQL", verifyJWT, (req, res) => {
const coursecode = req.body.coursecode
const idtypescourse = parseInt(req.body.idtypescourse)
const name = req.body.name
const description = req.body.description
const durationtraineeprogram = req.body.durationtraineeprogram
const durationtraineevip = req.body.durationtraineevip
const durationtraineeindividual = req.body.durationtraineeindividual
const valueprogram = parseFloat(req.body.valueprogram)
const valuevip = parseFloat(req.body.valuevip)
const valueindividual = parseFloat(req.body.valueindividual)
const disabled = req.body.disabled
const materialvalue = parseFloat(req.body.materialvalue)
const materialcode = req.body.materialcode
const aditional = req.body.aditional
const extracourse = req.body.aditional
const autospeak = req.body.autospeak
console.log(req.body)
})
router.post("/insert", verifyJWT, (req, res) => {
const coursecode = req.body.coursecode;
const idtypescourse = parseInt(req.body.idtypescourse);
const name = req.body.name;
const description = req.body.description;
const durationtraineeprogram = req.body.durationtraineeprogram;
const durationtraineevip = req.body.durationtraineevip;
const durationtraineeindividual = req.body.durationtraineeindividual;
const valueprogram = parseFloat(req.body.valueprogram);
const valuevip = parseFloat(req.body.valuevip);
const valueindividual = parseFloat(req.body.valueindividual);
const materialvalue = parseFloat(req.body.materialvalue);
const materialcode = req.body.materialcode;
const extracourse = req.body.extracourse ? 1 : 0;
const aditional = req.body.aditional ? 1 : 0;
const disabled = req.body.disabled ? 1 : 0;
const autospeak = req.body.autospeak ? 1 : 0;
const idlanguage = req.body.idlanguage;
try {
execSQLQuery(
`INSERT INTO courses (coursecode, idtypescourse, name, description, durationtraineeprogram, durationtraineevip, durationtraineeindividual, valueprogram, valuevip, valueindividual, materialvalue, materialcode, extracourse, aditional, disabled, autospeak, idlanguage)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?);`,
res,
req.originalUrl,
[
coursecode,
idtypescourse,
name,
description,
durationtraineeprogram,
durationtraineevip,
durationtraineeindividual,
valueprogram,
valuevip,
valueindividual,
materialvalue,
materialcode,
extracourse,
aditional,
disabled,
autospeak,
idlanguage,
]
);
} catch (error) {
console.log("oi");
console.log(error);
}
});
router.patch("/update", verifyJWT, (req, res) => {
const idcourses = parseInt(req.body.idcourses);
const coursecode = req.body.coursecode;
const idtypescourse = parseInt(req.body.idtypescourse);
const name = req.body.name;
const description = req.body.description;
const durationtraineeprogram = req.body.durationtraineeprogram;
const durationtraineevip = req.body.durationtraineevip;
const durationtraineeindividual = req.body.durationtraineeindividual;
const valueprogram = parseFloat(req.body.valueprogram);
const valuevip = parseFloat(req.body.valuevip);
const valueindividual = parseFloat(req.body.valueindividual);
const materialvalue = parseFloat(req.body.materialvalue);
const materialcode = req.body.materialcode;
const extracourse = req.body.extracourse ? 1 : 0;
const aditional = req.body.aditional ? 1 : 0;
const disabled = req.body.disabled ? 1 : 0;
const autospeak = req.body.autospeak ? 1 : 0;
execSQLQuery(
`UPDATE courses SET
coursecode = ?,
idtypescourse = ?,
name = ?,
description = ?,
durationtraineeprogram = ?,
durationtraineevip = ?,
durationtraineeindividual = ?,
valueprogram = ?,
valuevip = ?,
valueindividual = ?,
materialvalue = ?,
materialcode = ?,
extracourse = ?,
aditional = ?,
disabled = ?,
autospeak = ?
WHERE idcourses = ?;`,
res,
req.originalUrl,
[
coursecode,
idtypescourse,
name,
description,
durationtraineeprogram,
durationtraineevip,
durationtraineeindividual,
valueprogram,
valuevip,
valueindividual,
materialvalue,
materialcode,
extracourse,
aditional,
disabled,
autospeak,
idcourses,
]
);
});
router.get(
"/getCourseAndClass/:idusers/:idCursos/:idunits",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const idunits = parseInt(req.params.idunits);
const WhereClause = req.params.idCursos;
const domain = req.hostname.split(".").pop();
let language;
switch (domain) {
case "br":
language = 1;
break;
case "py":
language = 2;
break;
case "us":
language = 3;
break;
default:
language = 1;
break;
}
let sqlQuery = `select distinct
*,
COALESCE(((R.actualItem / R.itensInClass) * 100) , 0) AS 'progressB'
FROM (
select
co.*,
cl.idclasses,
cl.name AS 'nameC',
cl.description AS 'descriptionC',
cl.aval,
cl.demo,
COALESCE(sc.actualItem, 0) AS 'actualItem',
sc.continueClass,
sc.completedClass,
sc.lockedClass,
sc.liberado,
ROUND(sc.note, 2) AS 'note',
sc.notification,
sc.homework,
(select count(*) from userstages us where us.idunits = sc.idunits and us.idusers = sc.idusers and us.idclasses = sc.idclasses) as 'licao',
0 AS 'showdet',
0 AS 'btnVis',
COALESCE(sc.actualItem, 0) AS 'actualItenInClass',
(SELECT COUNT(*) AS 'qtdeItens'
from classescontent cc
LEFT join exercisequestions eq ON eq.idexercises = cc.idexercises
LEFT join media m ON m.idmedia = cc.idmedia
LEFT join texts t ON t.idtexts = cc.idtexts
LEFT join slides s ON s.idslides = cc.idslides
LEFT join texts g ON g.idtexts = cc.idgames AND t.game = 1
where cc.idclasses = cl.idclasses)
AS 'itensInClass',
cl.download AS 'downloads',
cl.ordem,
(select count(*) from barcodes bc where bc.idunits = ${idunits} and bc.idusers = ${idusers} and bc.idcourses = co.idcourses) as 'Apostila'
from courses co
inner join classes cl on cl.idcourses = co.idcourses and cl.disabled = 0
left join stepclass sc on sc.idclasses = cl.idclasses and sc.idusers = ${idusers} and sc.idunits = ${idunits}
WHERE ${
idusers == 190001 ? "cl.demo = 1" : "co.idcourses in " + WhereClause
} AND co.disabled = 0 AND cl.homework = 0 and co.idtypescourse != 5
AND co.idlanguage = ${language} OR co.idlanguage = 0
ORDER BY co.name, cl.ordem ASC) R
ORDER BY R.name ASC, ordem ASC;`;
execSQLQuery(sqlQuery, res, req.originalUrl);
}
);
router.get(
"/getHomeCourseAndClass/:idusers/:idCursos/:idunits",
verifyJWT,
(req, res) => {
const idusers = parseInt(req.params.idusers);
const idunits = parseInt(req.params.idunits);
const WhereClause = req.params.idCursos;
let sqlQuery = `select distinct
*,
COALESCE(((R.actualItem / R.itensInClass) * 100) , 0) AS 'progressB'
FROM (
select
co.*,
cl.idclasses,
cl.name AS 'nameC',
cl.description AS 'descriptionC',
cl.aval,
cl.demo,
COALESCE(sc.actualItem, 0) AS 'actualItem',
sc.continueClass,
sc.completedClass,
sc.lockedClass,
sc.liberado,
ROUND(sc.note, 2) AS 'note',
sc.notification,
sc.homework,
(select count(*) from userstages us where us.idunits = sc.idunits and us.idusers = sc.idusers and us.idclasses = sc.idclasses) as 'licao',
0 AS 'showdet',
0 AS 'btnVis',
COALESCE(sc.actualItem, 0) AS 'actualItenInClass',
(SELECT COUNT(*) AS 'qtdeItens'
from classescontent cc
LEFT join exercisequestions eq ON eq.idexercises = cc.idexercises
LEFT join media m ON m.idmedia = cc.idmedia
LEFT join texts t ON t.idtexts = cc.idtexts
LEFT join slides s ON s.idslides = cc.idslides
LEFT join texts g ON g.idtexts = cc.idgames AND t.game = 1
where cc.idclasses = cl.idclasses)
AS 'itensInClass',
cl.download AS 'downloads',
cl.ordem,
(select count(*) from barcodes bc where bc.idunits = ${idunits} and bc.idusers = ${idusers} and bc.idcourses = co.idcourses) as 'Apostila'
from courses co
inner join classes cl on cl.idcourses = co.idcourses and cl.disabled = 0
left join stepclass sc on sc.idclasses = cl.idclasses and sc.idusers = ${idusers} and sc.idunits = ${idunits}
WHERE ${
idusers == 190001 ? "cl.demo = 1" : "co.idcourses in " + WhereClause
} AND co.disabled = 0 AND cl.homework = 0 and co.idtypescourse != 5
and (co.idtypescourse = 4 or co.idtypescourse = 6 or co.idtypescourse = 7)
ORDER BY co.name, cl.ordem ASC) R
ORDER BY R.name ASC, ordem ASC;`;
execSQLQuery(sqlQuery, res, req.originalUrl);
console.log(sqlQuery);
}
);
return router;
};
module.exports = routes;