From 57ba9ee7754f665badd3ea1fb3459d4506681989 Mon Sep 17 00:00:00 2001 From: mark H Date: Tue, 24 Sep 2024 09:03:35 +0800 Subject: [PATCH] v1 --- controllers/collection.js | 114 ------- controllers/endpoint.js | 96 ------ controllers/kds.js | 105 ++++++ index.js | 656 +++++++++++++++++++++++++++++++++++++- models/Collection.js | 36 --- models/Endpoint.js | 67 ---- models/KDS.js | 38 +++ models/KDSGrouped.js | 33 ++ package-lock.json | 126 +++++++- package.json | 4 +- routes/collection.js | 52 --- routes/endpoint.js | 48 --- routes/kds.js | 19 ++ routes/users.js | 2 +- 14 files changed, 974 insertions(+), 422 deletions(-) delete mode 100644 controllers/collection.js delete mode 100644 controllers/endpoint.js create mode 100644 controllers/kds.js delete mode 100644 models/Collection.js delete mode 100644 models/Endpoint.js create mode 100644 models/KDS.js create mode 100644 models/KDSGrouped.js delete mode 100644 routes/collection.js delete mode 100644 routes/endpoint.js create mode 100644 routes/kds.js diff --git a/controllers/collection.js b/controllers/collection.js deleted file mode 100644 index b19e0ae..0000000 --- a/controllers/collection.js +++ /dev/null @@ -1,114 +0,0 @@ -import Collection from "../models/Collection.js"; - -export const createCollection = async (req, res, next) => { - const newCollection = new Collection({ - name: req.body.name, - created_by: req.body.created_by, - header: req.body.header, - }); - console.log(req.body); - try { - const savedCollection = await newCollection.save(); - res.status(200).json(savedCollection); - console.log(savedCollection); - } catch (err) { - // console.log(req.body); - - res.status(400).json({ message: err.message }); - - next(err); - } -}; - -export const updateCollection = async (req, res, next) => { - try { - console.log(req.params.id); - const updatedCollection = await Collection.findByIdAndUpdate( - req.params.id, - { $set: req.body }, - { new: true } - ); - if (updatedCollection) { - res.status(200).json(updatedCollection); - } else { - res.status(200).json("Collection does not exist."); - } - } catch (err) { - next(err); - } -}; - -export const updateCollectionByEndpoint = async (req, res, next) => { - try { - const { id, endpoint_id } = req.params; - - const updatedCollection = await Collection.findByIdAndUpdate( - req.params.id, - { $push: { endpoints: req.body.endpoint_id } }, - { new: true } - ); - - if (updatedCollection) { - console.log("Updated Collection:", endpoint_id); - res.status(200).json(updatedCollection); - } else { - res.status(404).json({ endpoint: "Collection or endpoint not found." }); - } - } catch (err) { - next(err); - } -}; - -export const deleteCollection = async (req, res, next) => { - try { - const getCollection = await Collection.findByIdAndDelete(req.params.id); - if (getCollection) { - res.status(200).json("Collection has been deleted."); - } else { - res.status(404).json("Collection does not exist."); - } - } catch (err) { - res.status(404).json({ message: err.message }); - - next(err); - } -}; -export const getCollections = async (req, res, next) => { - try { - const getCollection = await Collection.find() - .populate({ - path: "endpoints", - model: "Endpoint", - }) - .exec(); - // const Collection = getCollection.reverse(); - if (getCollection) { - res.status(200).json(getCollection); - } else { - res.status(404).json("Collection does not exist."); - } - } catch (err) { - res.status(404).json({ message: err.message }); - - next(err); - } -}; -export const getCollection = async (req, res, next) => { - try { - const foundCollection = await Collection.findById(req.params.id) - .populate({ - path: "endpoints", - model: "Endpoint", - }) - .exec(); - - if (foundCollection) { - res.status(200).json(foundCollection); - } else { - res.status(404).json("Collection does not exist."); - } - } catch (err) { - res.status(500).json({ message: err.message }); - next(err); - } -}; diff --git a/controllers/endpoint.js b/controllers/endpoint.js deleted file mode 100644 index eb37203..0000000 --- a/controllers/endpoint.js +++ /dev/null @@ -1,96 +0,0 @@ -import Endpoint from "../models/Endpoint.js"; - -export const createEndpoint = async (req, res, next) => { - const newEndpoint = new Endpoint({ - name: req.body.name, - endpoint: req.body.endpoint, - method: req.body.method, - collection_id: req.body.collection_id, - created_by: req.body.created_by, - body_json: req.body.body_json, - form_data: req.body.form_data, - header: req.body.header, - params: req.body.params, - }); - console.log(req.body); - try { - const savedEndpoint = await newEndpoint.save(); - res.status(200).json(savedEndpoint); - console.log(savedEndpoint); - } catch (err) { - // console.log(req.body); - - res.status(400).json({ message: err.message }); - - next(err); - } -}; - -export const updateEndpoint = async (req, res, next) => { - try { - console.log(req.params.id); - const updatedEndpoint = await Endpoint.findByIdAndUpdate( - req.params.id, - { $set: req.body }, - { new: true } - ); - if (updatedEndpoint) { - res.status(200).json(updatedEndpoint); - } else { - res.status(200).json("Endpoint does not exist."); - } - } catch (err) { - next(err); - } -}; - -export const deleteEndpoint = async (req, res, next) => { - try { - const getEndpoint = await Endpoint.findByIdAndDelete(req.params.id); - if (getEndpoint) { - res.status(200).json("Endpoint has been deleted."); - } else { - res.status(404).json("Endpoint does not exist."); - } - } catch (err) { - res.status(404).json({ message: err.message }); - - next(err); - } -}; -export const getEndpoints = async (req, res, next) => { - try { - const getEndpoint = await Endpoint.find(); - // const Endpoint = getEndpoint.reverse(); - if (getEndpoint) { - res.status(200).json(getEndpoint); - } else { - res.status(404).json("Endpoint does not exist."); - } - } catch (err) { - res.status(404).json({ message: err.message }); - - next(err); - } -}; -export const getEndpoint = async (req, res, next) => { - try { - const foundEndpoint = await Endpoint.findById(req.params.id) - .populate({ - path: "userRef", - model: "User", - // select: "fName lName username photo", - }) - - .exec(); - - if (foundEndpoint) { - res.status(200).json(foundEndpoint); - } else { - res.status(404).json("Endpoint does not exist."); - } - } catch (err) { - res.status(500).json({ message: err.message }); - next(err); - } -}; diff --git a/controllers/kds.js b/controllers/kds.js new file mode 100644 index 0000000..5b02d94 --- /dev/null +++ b/controllers/kds.js @@ -0,0 +1,105 @@ +import KDSModel from "../models/KDS.js"; + +// Resolver to create a new KDS document +export const createKDS = async (req, res) => { + try { + const kdsData = req.body; + const { ref_id } = kdsData; + + // Check if a KDS document with the same ref_id already exists + const existingKDS = await KDSModel.findOne({ ref_id }); + + if (existingKDS) { + return res.status(400).json({ error: `KDS with ref_id ${ref_id} already exists.` }); + } + + // Proceed to create the new KDS document if ref_id is unique + const newKDS = new KDSModel(kdsData); + await newKDS.save(); + + res.status(201).json(newKDS); + } catch (error) { + res.status(400).json({ error: `Failed to create KDS document: ${error.message}` }); + } +}; + + +// Resolver to get all KDS documents +export const getAllKDS = async (req, res) => { + try { + const kdsList = await KDSModel.find(); + res.status(200).json(kdsList); + } catch (error) { + res.status(500).json({ error: "Failed to retrieve KDS documents" }); + } +}; +export const getKDS = async (req, res, next) => { + try { + const foundKDS = await KDSModel.findById(req.params.id) + .populate({ + path: "userRef", + model: "User", + // select: "fName lName username photo", + }) + + .exec(); + + if (foundKDS) { + res.status(200).json(foundKDS); + } else { + res.status(404).json("KDS does not exist."); + } + } catch (err) { + res.status(500).json({ message: err.message }); + next(err); + } +}; + +export const updateKDS = async (req, res, next) => { + try { + console.log(req.params.id); + const updatedKDS = await KDSModel.findByIdAndUpdate( + req.params.id, + { $set: req.body }, + { new: true } + ); + if (updatedKDS) { + res.status(200).json(updatedKDS); + } else { + res.status(404).json("KDS does not exist."); + } + } catch (err) { + next(err); + } +}; +export const updateKDSrow = async (req, res, next) => { + try { + console.log(req.params.id); + const updatedKDS = await KDSModel.findByIdAndUpdate( + req.params.id, + { $set: req.body }, + { new: true } + ); + if (updatedKDS) { + res.status(200).json(updatedKDS); + } else { + res.status(404).json("KDS does not exist."); + } + } catch (err) { + next(err); + } +}; +export const deleteKDS = async (req, res, next) => { + try { + const getKDS = await KDSModel.findByIdAndDelete(req.params.id); + if (getKDS) { + res.status(200).json("KDS has been deleted."); + } else { + res.status(404).json("KDS does not exist."); + } + } catch (err) { + res.status(404).json({ message: err.message }); + + next(err); + } +}; diff --git a/index.js b/index.js index b46c4e6..ab607f1 100644 --- a/index.js +++ b/index.js @@ -10,8 +10,9 @@ import path from "path"; import { fileURLToPath } from "url"; import authRoutes from "./routes/auth.js"; import userRoutes from "./routes/users.js"; -import collectionRoutes from "./routes/collection.js"; -import endpointRoutes from "./routes/endpoint.js"; +import kdsRoutes from "./routes/kds.js"; + +import Odoo from "odoo-xmlrpc"; // import webemailRoutes from "./routes/webemail.js"; import axios from "axios"; @@ -71,8 +72,7 @@ const upload = multer({ storage }); /* ROUTES */ app.use("/api/auth", authRoutes); app.use("/api/users", userRoutes); -app.use("/api/collections", collectionRoutes); -app.use("/api/endpoints", endpointRoutes); +app.use("/api/kds", kdsRoutes); // app.use("/api/web-emails", webemailRoutes); app.post("/api/upload_images", upload.single("image"), async (req, res) => { @@ -88,7 +88,7 @@ app.post("/api/upload_images", upload.single("image"), async (req, res) => { }); function sendEmail(req, res, next) { const apiKey = - "ODA4MDc4ZThjMDA4NjVhYzU4MTcyNDJjNTMxY2JlZGU6MGQ4ODg3ZTdiZjY1ZWNkMmQ0NzdiOWJhZGIyYTJhY2Q="; // Replace with your Mailjet API key + "ODA4MDc4ZThjMDA4NjVhYzU4MTcyNDJjNTMxY2JlZGU6MGQ4ODg3ZTdiZjY1ZWNkMmQ0NzdiOWJhZGIyYTJhY2Q="; const apiUrl = "https://api.mailjet.com/v3.1/send"; // const otp = generateOTP(6); // You should have a function to generate the OTP @@ -142,8 +142,652 @@ function sendEmail(req, res, next) { }); } app.post("/api/send-email/", sendEmail); + +const odooClient = new Odoo({ + url: "https://gis.pivi.com.ph", + db: "gis.pivi.com.ph", + username: "egalang@obanana.com", + password: "P@$$w0rd!", +}); +const odooClient2 = new Odoo({ + url: "http://localhost:8069/", + db: "Paymongo", + username: "mahipe@obanana.com", + password: "abcd123", +}); +app.get("/get-assets", async (req, res) => { + try { + odooClient.connect(async function (err) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Connection Error: " + err.message }); + } + console.log("Connected to Odoo server."); + + // Fetch asset IDs + const inParams = []; + inParams.push([["name", "!=", false]]); + inParams.push(parseInt(req.query.offset) || 0); //offset + inParams.push(parseInt(req.query.limit) || 0); //Limit + const params = [inParams]; + const assets = []; + let recordsArray = []; + + let attributes = []; + let bounds = []; + let images = []; + + odooClient.execute_kw( + "pivi_assets.pivi_assets", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Search Error: " + err.message }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + const paramsRead = [inParamsRead]; + + odooClient.execute_kw( + "pivi_assets.pivi_assets", + "read", + paramsRead, + async function (err2, records) { + if (err2) { + console.log(err2); + return res + .status(500) + .json({ error: "Read Error: " + err2.message }); + } else { + recordsArray = records; + odooClient.execute_kw( + "pivi_assets.attributes", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Search Error: " + err.message }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + + const inParamsRead = []; + inParamsRead.push(ids); // IDs + inParamsRead.push([ + "id", + "name", + "value", + "asset", + "__last_update", + "display_name", + "create_uid", + "create_date", + "write_uid", + "write_date", + ]); + + const paramsRead = [inParamsRead]; + + odooClient.execute_kw( + "pivi_assets.attributes", + "read", + paramsRead, + async function (err2, attr) { + if (err2) { + console.log(err2); + return res + .status(500) + .json({ error: "Read Error: " + err2.message }); + } else { + attributes = attr; + odooClient.execute_kw( + "pivi_assets.bounds", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res.status(500).json({ + error: "Search Error: " + err.message, + }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + inParamsRead.push([ + "id", + "name", + "longitude", + "latitude", + "asset", + "__last_update", + "display_name", + "create_uid", + "create_date", + "write_uid", + "write_date", + ]); + const paramsRead = [inParamsRead]; + + odooClient.execute_kw( + "pivi_assets.bounds", + "read", + paramsRead, + async function (err2, bound) { + if (err2) { + console.log(err2); + return res.status(500).json({ + error: "Read Error: " + err2.message, + }); + } else { + bounds = bound; + odooClient.execute_kw( + "ir.attachment", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res.status(500).json({ + error: + "Search Error: " + err.message, + }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + inParamsRead.push([ + "id", + "name", + "local_url", + "res_id", + ]); + const paramsRead = [inParamsRead]; + + odooClient.execute_kw( + "ir.attachment", + "read", + paramsRead, + async function (err2, image) { + if (err2) { + console.log(err2); + return res.status(500).json({ + error: + "Read Error: " + err2.message, + }); + } else { + images = image; + + const asset = recordsArray.map( + (item) => { + // Find matching attributes based on the numeric part of attr.assets + const matchedAttr = + attributes.filter( + (attribute) => + item.attributes.some( + (attrId) => + attrId === + attribute.id + ) // Compare to the first element of attr.assets + ); + + // Find matching bounds based on the numeric part of bounds.assets + const matchedBounds = + bounds.filter( + (bound) => + item.bounds.some( + (boundId) => + boundId === bound.id + ) // Compare to the first element of bounds.assets + ); + + // Find matching images based on data.id == images.res_id + const matchedImages = + images.filter( + (image) => + image.res_id === item.id + ); + + // Construct the asset object for this item + return { + attr: matchedAttr, + bounds: matchedBounds, + data: item, + images: matchedImages, + }; + } + ); + // res.json({ + // data: recordsArray, + // attr: attributes, + // bounds: bounds, + // images: images, + // }); + res.json(asset); + } + + let pendingRequests = + records.length; + } + ); + } + ); + } + } + ); + } + ); + } + } + ); + } + ); + } + + let pendingRequests = records.length; + } + ); + } + ); + }); + } catch (error) { + console.error("Error:", error); + res.status(500).json({ error: "Data Fetch Error: " + error.message }); + } +}); +app.get("/get-orders", async (req, res) => { + try { + odooClient2.connect(async function (err) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Connection Error: " + err.message }); + } + console.log("Connected to Odoo server."); + + // Fetch asset IDs + const inParams = []; + inParams.push([["name", "!=", false]]); + inParams.push(parseInt(req.query.offset) || 0); //offset + inParams.push(parseInt(req.query.limit) || 0); //Limit + const params = [inParams]; + const assets = []; + let recordsArray = []; + + let attributes = []; + let bounds = []; + let images = []; + + odooClient2.execute_kw( + "pos.order", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Search Error: " + err.message }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + const paramsRead = [inParamsRead]; + + odooClient2.execute_kw( + "pos.order", + "read", + paramsRead, + async function (err2, records) { + if (err2) { + console.log(err2); + return res + .status(500) + .json({ error: "Read Error: " + err2.message }); + } else { + recordsArray = records; + res.json(recordsArray); + } + + let pendingRequests = records.length; + } + ); + } + ); + }); + } catch (error) { + console.error("Error:", error); + res.status(500).json({ error: "Data Fetch Error: " + error.message }); + } +}); +app.get("/get-products", async (req, res) => { + try { + odooClient2.connect(async function (err) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Connection Error: " + err.message }); + } + console.log("Connected to Odoo server."); + + // Fetch asset IDs + const inParams = []; + inParams.push([["name", "!=", false]]); + inParams.push(parseInt(req.query.offset) || 0); //offset + inParams.push(parseInt(req.query.limit) || 0); //Limit + const params = [inParams]; + const assets = []; + let recordsArray = []; + + let attributes = []; + let bounds = []; + let images = []; + + odooClient2.execute_kw( + "product.template", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Search Error: " + err.message }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + inParamsRead.push(["id", "name"]); + const paramsRead = [inParamsRead]; + + odooClient2.execute_kw( + "product.template", + "read", + paramsRead, + async function (err2, records) { + if (err2) { + console.log(err2); + return res + .status(500) + .json({ error: "Read Error: " + err2.message }); + } else { + recordsArray = records; + res.json(recordsArray); + } + + let pendingRequests = records.length; + } + ); + } + ); + }); + } catch (error) { + console.error("Error:", error); + res.status(500).json({ error: "Data Fetch Error: " + error.message }); + } +}); +app.get("/get-product_ordered", async (req, res) => { + try { + odooClient2.connect(async function (err) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Connection Error: " + err.message }); + } + console.log("Connected to Odoo server."); + + // Fetch asset IDs + const inParams = []; + inParams.push([["name", "!=", false]]); + inParams.push(parseInt(req.query.offset) || 0); //offset + inParams.push(parseInt(req.query.limit) || 0); //Limit + const params = [inParams]; + const assets = []; + let recordsArray = []; + + let attributes = []; + let bounds = []; + let images = []; + + odooClient2.execute_kw( + "pos.order.line", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Search Error: " + err.message }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + // inParamsRead.push([ + // "id", + // "name", + + // ]); + const paramsRead = [inParamsRead]; + + odooClient2.execute_kw( + "pos.order.line", + "read", + paramsRead, + async function (err2, records) { + if (err2) { + console.log(err2); + return res + .status(500) + .json({ error: "Read Error: " + err2.message }); + } else { + recordsArray = records; + res.json(recordsArray); + } + + let pendingRequests = records.length; + } + ); + } + ); + }); + } catch (error) { + console.error("Error:", error); + res.status(500).json({ error: "Data Fetch Error: " + error.message }); + } +}); +app.get("/get-stages", async (req, res) => { + try { + odooClient2.connect(async function (err) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Connection Error: " + err.message }); + } + console.log("Connected to Odoo server."); + + // Fetch asset IDs + const inParams = []; + inParams.push([["name", "!=", false]]); + inParams.push(parseInt(req.query.offset) || 0); + inParams.push(parseInt(req.query.limit) || 0); + const params = [inParams]; + const assets = []; + let recordsArray = []; + + let attributes = []; + let bounds = []; + let images = []; + + odooClient2.execute_kw( + "kds.stages", + "search", + params, + async function (err, ids) { + if (err) { + console.log(err); + return res + .status(500) + .json({ error: "Search Error: " + err.message }); + } + + if (ids.length === 0) { + return res.json([]); // No assets found + } + + // Fetch asset records + const inParamsRead = []; + inParamsRead.push(ids); // IDs + // inParamsRead.push([ + // "id", + // "name", + + // ]); + const paramsRead = [inParamsRead]; + + odooClient2.execute_kw( + "kds.stages", + "read", + paramsRead, + async function (err2, records) { + if (err2) { + console.log(err2); + return res + .status(500) + .json({ error: "Read Error: " + err2.message }); + } else { + recordsArray = records; + res.json(recordsArray); + } + + let pendingRequests = records.length; + } + ); + } + ); + }); + } catch (error) { + console.error("Error:", error); + res.status(500).json({ error: "Data Fetch Error: " + error.message }); + } +}); + +app.post('/update-order-state', async (req, res) => { + const { id, state } = req.body; // Order ID and new state passed in the request body + + if (!id || !state) { + return res.status(400).json({ error: 'Order ID and state are required.' }); + } + + try { + odooClient2.connect(function (err) { + if (err) { + console.log(err); + return res.status(500).json({ error: 'Connection Error: ' + err.message }); + } + console.log('Connected to Odoo server.'); + + // Search for the order by ID + const inParams = []; + inParams.push([['id', '=', id]]); // Find the order by its ID + const params = [inParams]; + + odooClient2.execute_kw('pos.order', 'search', params, function (err, orderIds) { + if (err) { + console.log(err); + return res.status(500).json({ error: 'Search Error: ' + err.message }); + } + + if (orderIds.length === 0) { + return res.status(404).json({ error: 'Order not found.' }); + } + + // Update the state of the order + const inParamsUpdate = []; + inParamsUpdate.push(orderIds); // Order IDs to update + inParamsUpdate.push({ state: state }); // Fields to update + const paramsUpdate = [inParamsUpdate]; + + odooClient2.execute_kw('pos.order', 'write', paramsUpdate, function (err2, result) { + if (err2) { + console.log(err2); + return res.status(500).json({ error: 'Update Error: ' + err2.message }); + } + + if (result) { + return res.json({ success: true, message: `Order ID ${id} updated to state: ${state}` }); + } else { + return res.status(500).json({ error: 'Failed to update order state.' }); + } + }); + }); + }); + } catch (error) { + console.error('Error:', error); + return res.status(500).json({ error: 'Update Error: ' + error.message }); + } +}); + + +function fetchOdooData(model, method, params) { + return new Promise((resolve, reject) => { + odooClient.execute_kw(model, method, params, (err, data) => { + if (err) return reject(err); + resolve(data); + }); + }); +} + /* MONGOOSE SETUP */ -const PORT = process.env.PORT || 3000; +const PORT = process.env.PORT || 3002; // mongoose // .connect(process.env.MONGO_URL, { // useNewUrlParser: true, diff --git a/models/Collection.js b/models/Collection.js deleted file mode 100644 index e6d2518..0000000 --- a/models/Collection.js +++ /dev/null @@ -1,36 +0,0 @@ -import mongoose from "mongoose"; - -const CollectionSchema = mongoose.Schema( - { - name: { - type: String, - // required: true, - }, - created_by: { - type: mongoose.Schema.Types.ObjectId, - ref: "User", - }, - header: [ - { - key: { - type: String, - }, - value: { - type: String, - }, - //required: true, - }, - ], - endpoints: [ - { - type: mongoose.Schema.Types.ObjectId, - ref: "Endpoint", - }, - ], - }, - { timestamps: true } -); - -const Collection = mongoose.model("Collection", CollectionSchema); - -export default Collection; diff --git a/models/Endpoint.js b/models/Endpoint.js deleted file mode 100644 index b51e227..0000000 --- a/models/Endpoint.js +++ /dev/null @@ -1,67 +0,0 @@ -import mongoose from "mongoose"; - -const EndpointSchema = mongoose.Schema( - { - endpoint: { - type: String, - // required: true, - }, - name: { - type: String, - // required: true, - }, - method: { - type: String, - // required: true, - }, - collection_id: { - type: mongoose.Schema.Types.ObjectId, - ref: "Collection", - }, - // created_by: { - // type: mongoose.Schema.Types.ObjectId, - // ref: "User", - // }, - body_json: { - type: Array, - }, - form_data: [ - { - key: { - type: String, - }, - value: { - type: String, - }, - //required: true, - }, - ], - header: [ - { - key: { - type: String, - }, - value: { - type: String, - }, - //required: true, - }, - ], - params: [ - { - key: { - type: String, - }, - value: { - type: String, - }, - //required: true, - }, - ], - }, - { timestamps: true } -); - -const Endpoint = mongoose.model("Endpoint", EndpointSchema); - -export default Endpoint; diff --git a/models/KDS.js b/models/KDS.js new file mode 100644 index 0000000..ec514a6 --- /dev/null +++ b/models/KDS.js @@ -0,0 +1,38 @@ +import mongoose, { Schema } from "mongoose"; + +// Define the KDSItem schema +const KDSItemSchema = new Schema( + { + ordered_prod_id: { type: Number }, + product_id: { type: Number }, + quantity: { type: Number }, + order_id: { type: Number }, + product_name: { type: String }, + note: { type: String }, + }, + { _id: false } +); +// Define the KDS schema +const KDSSchema = new Schema( + { + order_id: { type: Number, required: true, unique: true }, + order_name: { type: String }, + order_date: { type: String }, + cancelled: { type: Boolean }, + ref_ticket: { type: String }, + take_away: { type: Boolean }, + seat_id: { type: String }, + customer_count: { type: Number }, + row_pos: { type: Number }, + ref_id: { type: String, required: true, unique: true }, + items: { type: [KDSItemSchema] }, + stage: { type: String }, + state: { type: String }, + + duration: { type: Number }, + }, + { timestamps: true } +); +const KDSModel = mongoose.model("KDS", KDSSchema); + +export default KDSModel; diff --git a/models/KDSGrouped.js b/models/KDSGrouped.js new file mode 100644 index 0000000..7806fe4 --- /dev/null +++ b/models/KDSGrouped.js @@ -0,0 +1,33 @@ +import mongoose, { Schema } from "mongoose"; + +// Define the KDSItem schema +const KDSItemSchema = new Schema( + { + ordered_prod_id: { type: Number }, + product_id: { type: Number }, + quantity: { type: Number }, + order_id: { type: Number }, + product_name: { type: String }, + note: { type: String }, + }, + { _id: false } +); +// Define the KDS schema +const KDSSchema = new Schema({ + order_id: { type: Number, required: true, unique: true }, + order_name: { type: String }, + order_date: { type: String }, + cancelled: { type: Boolean }, + ref_ticket: { type: String }, + take_away: { type: Boolean }, + seat_id: { type: String }, + customer_count: { type: Number }, + row_pos: { type: Number }, + ref_id: { type: String, required: true, unique: true }, + items: { type: [KDSItemSchema] }, + stage: { type: String }, + duration: { type: Number }, +}); +const KDSGrouped = mongoose.model("KDS", KDSSchema); + +export default KDSGrouped; diff --git a/package-lock.json b/package-lock.json index 8f64f3f..b6eb8c8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,8 +23,10 @@ "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "nodemon": "^3.1.4", + "odoo-xmlrpc": "^1.0.8", "streamifier": "^0.1.1", - "ws": "^8.18.0" + "ws": "^8.18.0", + "xmlrpc": "^1.3.2" } }, "node_modules/@mapbox/node-pre-gyp": { @@ -1638,6 +1640,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/odoo-xmlrpc": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/odoo-xmlrpc/-/odoo-xmlrpc-1.0.8.tgz", + "integrity": "sha512-tkUwrlyARnkSsbwcQqpLDgyMXNC29cMTU4EZd1JmWK9+Q+gX19EVoqsYfrUDrVAu3gXQKDW/+UvAXibbP/ZDwQ==", + "dependencies": { + "url": "*", + "xmlrpc": "^1.3.1" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.0.0" + } + }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -1855,6 +1870,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -2147,6 +2167,37 @@ "node": ">= 0.8" } }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/url/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -2221,6 +2272,27 @@ } } }, + "node_modules/xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha512-eKRAFz04jghooy8muekqzo8uCSVNeyRedbuJrp0fovbLIi7wlsYtdUn3vBAAPq2Y3/0xMz2WMEUQ8yhVVO9Stw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlrpc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz", + "integrity": "sha512-jQf5gbrP6wvzN71fgkcPPkF4bF/Wyovd7Xdff8d6/ihxYmgETQYSuTc+Hl+tsh/jmgPLro/Aro48LMFlIyEKKQ==", + "dependencies": { + "sax": "1.2.x", + "xmlbuilder": "8.2.x" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.0.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -3422,6 +3494,15 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==" }, + "odoo-xmlrpc": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/odoo-xmlrpc/-/odoo-xmlrpc-1.0.8.tgz", + "integrity": "sha512-tkUwrlyARnkSsbwcQqpLDgyMXNC29cMTU4EZd1JmWK9+Q+gX19EVoqsYfrUDrVAu3gXQKDW/+UvAXibbP/ZDwQ==", + "requires": { + "url": "*", + "xmlrpc": "^1.3.1" + } + }, "on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -3576,6 +3657,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -3805,6 +3891,30 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "requires": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "requires": { + "side-channel": "^1.0.6" + } + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3853,6 +3963,20 @@ "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "requires": {} }, + "xmlbuilder": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz", + "integrity": "sha512-eKRAFz04jghooy8muekqzo8uCSVNeyRedbuJrp0fovbLIi7wlsYtdUn3vBAAPq2Y3/0xMz2WMEUQ8yhVVO9Stw==" + }, + "xmlrpc": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/xmlrpc/-/xmlrpc-1.3.2.tgz", + "integrity": "sha512-jQf5gbrP6wvzN71fgkcPPkF4bF/Wyovd7Xdff8d6/ihxYmgETQYSuTc+Hl+tsh/jmgPLro/Aro48LMFlIyEKKQ==", + "requires": { + "sax": "1.2.x", + "xmlbuilder": "8.2.x" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index cc9de94..41ff3b4 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,9 @@ "morgan": "^1.10.0", "multer": "^1.4.5-lts.1", "nodemon": "^3.1.4", + "odoo-xmlrpc": "^1.0.8", "streamifier": "^0.1.1", - "ws": "^8.18.0" + "ws": "^8.18.0", + "xmlrpc": "^1.3.2" } } diff --git a/routes/collection.js b/routes/collection.js deleted file mode 100644 index cfad26b..0000000 --- a/routes/collection.js +++ /dev/null @@ -1,52 +0,0 @@ -import express from "express"; -import { - getCollection, - getCollections, - deleteCollection, - createCollection, - updateCollection, - updateCollectionByEndpoint, -} from "../controllers/collection.js"; -import { verifyToken } from "../middleware/auth.js"; -import logApiCall from "../middleware/log.js"; - -const router = express.Router(); - -/* READ */ -router.get( - "/", - // verifyToken, - getCollections -); -router.get( - "/:id", - // verifyToken, - getCollection -); - -router.post( - "/create", - // verifyToken, - // logApiCall, - createCollection -); -router.patch( - "/update/:id", - // verifyToken, - // logApiCall, - updateCollection -); -router.patch( - "/update/:id/endpoint", - // verifyToken, - // logApiCall, - updateCollectionByEndpoint -); -router.delete( - "/:id/delete", - // verifyToken, - // logApiCall, - deleteCollection -); - -export default router; diff --git a/routes/endpoint.js b/routes/endpoint.js deleted file mode 100644 index cc99a70..0000000 --- a/routes/endpoint.js +++ /dev/null @@ -1,48 +0,0 @@ -import express from "express"; -import { - getEndpoint, - getEndpoints, - deleteEndpoint, - createEndpoint, - updateEndpoint, -} from "../controllers/endpoint.js"; -import { verifyToken } from "../middleware/auth.js"; -import logApiCall from "../middleware/log.js"; - -const router = express.Router(); - -/* READ */ -router.get( - "/", - // verifyToken, - - getEndpoints -); -router.get( - "/:id", - // verifyToken, - - getEndpoint -); - -router.post( - "/create", - // verifyToken, - // logApiCall, - createEndpoint -); -router.patch( - "/update/:id", - // verifyToken, - // logApiCall, - updateEndpoint -); - -router.delete( - "/:id/delete", - // verifyToken, - // logApiCall, - deleteEndpoint -); - -export default router; diff --git a/routes/kds.js b/routes/kds.js new file mode 100644 index 0000000..c00ac99 --- /dev/null +++ b/routes/kds.js @@ -0,0 +1,19 @@ +import express from "express"; +import { + deleteKDS, + updateKDS, + getAllKDS, + createKDS, + getKDS, +} from "../controllers/kds.js"; +const router = express.Router(); + +router.post("/", createKDS); +router.get("/", getAllKDS); +router.get("/:id", getKDS); + +router.patch("/:id", updateKDS); +router.delete("/:id", deleteKDS); + +export default router; + \ No newline at end of file diff --git a/routes/users.js b/routes/users.js index a346efd..39a0e84 100644 --- a/routes/users.js +++ b/routes/users.js @@ -39,7 +39,7 @@ router.get( "/id/:id", // verifyToken, getUserId -); +); router.post("/send-otp", sendOtpEmail); router.post("/confirm-otp", confirmOtp);