ZoeApi/controllers/barcodeController.js

385 lines
11 KiB
JavaScript

require("../connections/mysql-server");
require("../helpers/CheckToken");
require("../helpers/config");
const express = require("express");
const router = express.Router();
const bodyParser = require("body-parser");
const { genSerialList, generateCSV } = require("../helpers/serialBook");
router.use(
bodyParser.urlencoded({
limit: "10mb",
extended: true,
})
);
router.use(
bodyParser.json({
limit: "10mb",
extended: true,
})
);
var routes = function () {
router.get("/listLotes", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM barlotes;`,
res,
req.originalUrl
);
});
router.get("/listBarCodes", verifyJWT, (req, res) => {
execSQLQuery(
`SELECT
*
FROM barcodes;`,
res,
req.originalUrl
);
});
router.get("/listBarcodesByAny/:field/:value", verifyJWT, (req, res) => {
var field = req.params.field;
var value = req.params.value;
execSQLQuery(
`SELECT
bc.*,
un.unityname as 'unity',
co.name as 'course',
un2.unityname as 'unity_env',
co2.name as 'course_apo'
FROM barcodes bc
left join units un on un.idunits = bc.idunits
left join courses co on co.idcourses = bc.idcourses
left join units un2 on un2.idunits = bc.idunits_env
left join courses co2 on co2.idcourses = bc.idcourses_apo
WHERE bc.${field} = '${value}';`,
res,
req.originalUrl
);
});
router.post("/insertLotes", verifyJWT, (req, res) => {
const qtdepack = parseInt(req.body.qtdepack);
const date = req.body.date;
execSQLQuery(
`INSERT INTO barlotes(qtdepack, date)
VALUES (?, ?);`,
res,
req.originalUrl,
[qtdepack, date]
);
});
router.post("/createSerial", verifyJWT, (req, res) => {
let oldserialExists = req.body.oldserial;
let quantity = parseInt(req.body.quantity);
let disAllowFranchise = quantity < 2 && !oldserialExists;
function deleteList(list) {
let deleteQuery = "DELETE FROM myrobot.serialbook WHERE serial = ?";
Object.values(list).forEach((element) => {
mysqlConnection.query(deleteQuery, element.serial, function (err) {
if (err) {
console.log(
new Date(),
"Erro ao deletar registros api/barcode/createSerial post",
err
);
}
});
});
}
if (quantity < 1 || disAllowFranchise) {
console.log(
new Date(),
"Erro ao gerar registros api/barcode/createSerial post error 400"
);
res
.status(400)
.send(
"Quantidade mínima de etiquetas por lote: 1 ou código antigo não foi enviado"
);
} else {
let selectQuery = "SELECT serial FROM myrobot.serialbook;";
mysqlConnection.query(selectQuery, function (error, results, fields) {
if (error) {
console.log(
new Date(),
"Erro ao obter registros api/barcode/createSerial post error 500"
);
res.status(500).send(error);
}
genSerialList(quantity, results)
.then((serialList) => {
let insertQuery =
"INSERT INTO myrobot.serialbook (serial, createdAt, updatedAt, oldserial) VALUES ?";
let valuesList = [];
Object.values(serialList).forEach((element) => {
quantity < 2 ? (element.oldserial = req.body.oldserial) : "";
valuesList.push([
element.serial,
element.createdAt,
element.updatedAt,
element.oldserial,
]);
});
mysqlConnection.query(insertQuery, [valuesList], function (err) {
if (err) {
console.log(
new Date(),
"Erro ao salvar registros api/barcode/createSerial post error 500",
err
);
res.status(500).json({
message: "Não foi possível salvar os registros",
erro: err,
});
deleteList(serialList);
} else {
if (serialList.length < 2) {
console.log(
new Date(),
" - api/barcode/createSerial post success 200"
);
res.status(200).json({
serial: serialList[0].serial,
});
} else {
generateCSV(serialList)
.then((path) => {
console.log(
new Date(),
" - api/barcode/createSerial post success 200"
);
res.download(path);
})
.catch((err) => {
console.log(
new Date(),
"Erro ao enviar registros api/barcode/createSerial post error 500",
err
);
res.status(500).json({
message: "Não foi possível enviar os registros",
erro: err,
});
deleteList(serialList);
});
}
}
});
})
.catch((error) => {
console.log(
new Date(),
"Erro ao gerar registros api/barcode/createSerial post error 500",
error
);
res.status(500).json({
message: "Impossível gerar seriais",
erro: error,
});
});
});
}
});
router.put("/createSerial", verifyJWT, (req, res) => {
let dateUpdate = new Date();
let values = [
req.body.user,
req.body.course,
req.body.unity,
true,
dateUpdate,
req.body.serial,
];
Object.values(values).forEach((element) => {
let notEmpty = !!element;
if (!notEmpty) {
return res.status(400).json({ error: "Faltam campos na requisição" });
}
});
let updateQuery =
"UPDATE myrobot.serialbook SET iduser = ?, idcourse = ?, idunity = ?, used = ?, updatedAt = ? WHERE serial = ? AND used = false";
mysqlConnection.query(
updateQuery,
values,
function (error, results, fields) {
if (error) {
console.log(
new Date(),
"Erro ao alterar registro api/barcode/createSerial put error 500",
error
);
res.status(500).json({
message: "Não foi possível atualizar o serial",
});
} else {
console.log(
new Date(),
" - api/barcode/createSerial put success 200"
);
res.status(200).json({
results: results,
});
}
}
);
});
router.get("/createSerial", verifyJWT, (req, res) => {
let values = [req.query.user, req.query.course, req.query.unity];
let validFields = true;
for (let i = 0; i < values.length; i++) {
let notEmpty = !!values[0];
if (!notEmpty) {
validFields = false;
break;
}
}
if (validFields) {
let selectQuery =
"SELECT * FROM myrobot.serialbook WHERE iduser = ? AND idcourse = ? AND idunity = ?"
mysqlConnection.query(
selectQuery,
values,
function (error, results, fields) {
if (error) {
console.log(
new Date(),
"Erro ao obter registros api/barcode/createSerial get error 500",
error
);
res.status(500).json({
message: "Não foi possível pesquisar pelo serial",
});
} else {
console.log(new Date(), "api/barcode/createSerial get 200");
res.status(200).json({
results: results,
});
}
}
);
} else {
console.log(
new Date(),
"Erro ao obter registro api/barcode/createSerial get error 400"
);
return res.status(400).json({ error: "Faltam campos na requisição" });
}
});
router.get("/listSerial", verifyJWT, (req, res) => {
let selectQuery =
"SELECT sb.idserialbook, sb.serial, sb.createdAt, sb.oldserial FROM myrobot.serialbook as sb limit 100;";
mysqlConnection.query(selectQuery, function (error, results, fields) {
if (error) {
console.log(error);
res.status(500).json({
message: "Não foi possivel obter os seriais",
});
} else {
res.status(200).json({
results: results,
});
}
});
});
router.post("/insertBarcodes", verifyJWT, (req, res) => {
const idbarlotes = parseInt(req.body.idbarlotes);
const _key = req.body._key;
const ordem = parseInt(req.body.ordem);
execSQLQuery(
`INSERT INTO barcodes(idbarlotes, _key, ordem) VALUES
(?, ?, ?);`,
res,
req.originalUrl,
[idbarlotes, _key, ordem]
);
});
router.patch("/updateBarcodes", verifyJWT, (req, res) => {
const idbarcodes = parseInt(req.body.idbarcodes);
const idusers = parseInt(req.body.idusers);
const idunits = parseInt(req.body.idunits);
const idcourses = parseInt(req.body.idcourses);
execSQLQuery(
`UPDATE barcodes SET
idusers = ${idusers},
idunits = ${idunits},
idcourses = ${idcourses}
WHERE idbarcodes = ${idbarcodes};`,
res,
req.originalUrl
);
});
router.post("/generateTxt", verifyJWT, (req, res) => {
var name = req.body.name;
var content = req.body.content;
var fs = require("fs");
fs.writeFile(
Variables("src_media") + "barcodes/" + name + ".txt",
content,
function (erro) {
if (erro) {
throw erro;
} else {
res.send(true);
}
}
);
});
router.get("/downloadPack/:idbarlotes", verifyJWT, (req, res) => {
var idbarlotes = req.params.idbarlotes;
var path = Variables("src_media") + "barcodes";
var fs = require("fs");
if (!fs.existsSync(path + "/codigo_barras_" + idbarlotes + ".zip")) {
require("all-unpacker").pack(
path + "/barlote_" + idbarlotes + ".zip",
{
targetDir: path + "/codigo_barras_" + idbarlotes + ".txt",
},
function (err, files, text) {
if (err) return console.error(err);
if (files) console.log("files", files);
if (text) {
console.log("text", text);
console.log("compactado");
res.send(true);
}
}
);
} else {
res.send(true);
}
});
router.post("/VincularCodigo", verifyJWT, (req, res) => {
const idbarcodes = parseInt(req.body.idbarcodes);
const idunits_env = parseInt(req.body.idunits_env);
const idcourses_apo = parseInt(req.body.idcourses_apo);
execSQLQuery(
`UPDATE barcodes SET
idunits_env = ${idunits_env},
idcourses_apo = ${idcourses_apo}
WHERE idbarcodes = ${idbarcodes};`,
res,
req.originalUrl
);
});
return router;
};
module.exports = routes;