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;