|
|
@@ -1,13 +1,10 @@
|
|
|
const Recipe = require("../models/recipe.js");
|
|
|
-const Merchant = require("../models/merchant.js");
|
|
|
const ArchivedRecipe = require("../models/archivedRecipe.js");
|
|
|
|
|
|
const helper = require("./helper.js");
|
|
|
|
|
|
-const axios = require("axios");
|
|
|
const xlsx = require("xlsx");
|
|
|
const fs = require("fs");
|
|
|
-const { Console } = require("console");
|
|
|
|
|
|
module.exports = {
|
|
|
/*
|
|
|
@@ -23,13 +20,8 @@ module.exports = {
|
|
|
Return = newly created recipe in same form as above, with _id
|
|
|
*/
|
|
|
createRecipe: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
|
|
|
- return res.redirect("/");
|
|
|
- }
|
|
|
-
|
|
|
let recipe = new Recipe({
|
|
|
- merchant: req.session.user,
|
|
|
+ merchant: res.locals.merchant._id,
|
|
|
name: req.body.name,
|
|
|
price: Math.round(req.body.price * 100),
|
|
|
ingredients: req.body.ingredients
|
|
|
@@ -37,6 +29,9 @@ module.exports = {
|
|
|
|
|
|
recipe.save()
|
|
|
.then((newRecipe)=>{
|
|
|
+ res.locals.merchant.recipes.push(recipe);
|
|
|
+ res.locals.merchant.save().catch((err)=>{throw err});
|
|
|
+
|
|
|
return res.json(newRecipe);
|
|
|
})
|
|
|
.catch((err)=>{
|
|
|
@@ -48,13 +43,6 @@ module.exports = {
|
|
|
}
|
|
|
return res.json("ERROR: UNABLE TO SAVE INGREDIENT");
|
|
|
});
|
|
|
-
|
|
|
- Merchant.findOne({_id: req.session.user})
|
|
|
- .then((merchant)=>{
|
|
|
- merchant.recipes.push(recipe);
|
|
|
- return merchant.save();
|
|
|
- })
|
|
|
- .catch((err)=>{});
|
|
|
},
|
|
|
|
|
|
/*
|
|
|
@@ -70,15 +58,10 @@ module.exports = {
|
|
|
}
|
|
|
*/
|
|
|
updateRecipe: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
|
|
|
- return res.redirect("/");
|
|
|
- }
|
|
|
-
|
|
|
Recipe.findOne({_id: req.body.id})
|
|
|
.then((recipe)=>{
|
|
|
new ArchivedRecipe({
|
|
|
- merchant: req.session.user,
|
|
|
+ merchant: res.locals.merchant._id,
|
|
|
name: recipe.name,
|
|
|
price: recipe.price,
|
|
|
date: new Date(),
|
|
|
@@ -107,31 +90,18 @@ module.exports = {
|
|
|
|
|
|
//DELETE - removes a single recipe from the merchant and the database
|
|
|
removeRecipe: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
|
|
|
- return res.redirect("/");
|
|
|
+ if(res.locals.merchant.pos === "clover"){
|
|
|
+ return res.json("YOU MUST EDIT YOUR RECIPES INSIDE CLOVER");
|
|
|
+ }
|
|
|
+
|
|
|
+ for(let i = 0; i < res.locals.merchant.recipes.length; i++){
|
|
|
+ if(res.locals.merchant.recipes[i].toString() === req.params.id){
|
|
|
+ res.locals.merchant.recipes.splice(i, 1);
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- Merchant.findOne({_id: req.session.user})
|
|
|
- .then((merchant)=>{
|
|
|
- if(merchant.pos === "clover"){
|
|
|
- return res.json("YOU MUST EDIT YOUR RECIPES INSIDE CLOVER");
|
|
|
- }
|
|
|
-
|
|
|
- for(let i = 0; i < merchant.recipes.length; i++){
|
|
|
- if(merchant.recipes[i].toString() === req.params.id){
|
|
|
- merchant.recipes.splice(i, 1);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- merchant.save()
|
|
|
- .catch((err)=>{
|
|
|
- return res.json("ERROR: UNABLE TO SAVE DATA");
|
|
|
- })
|
|
|
-
|
|
|
- return Recipe.deleteOne({_id: req.params.id});
|
|
|
- })
|
|
|
+ Promise.all([Recipe.deleteOne({_id: req.params.id}), res.locals.merchant.save()])
|
|
|
.then((response)=>{
|
|
|
return res.json({});
|
|
|
})
|
|
|
@@ -146,181 +116,7 @@ module.exports = {
|
|
|
});
|
|
|
},
|
|
|
|
|
|
- //GET - Checks clover for new or deleted recipes
|
|
|
- //Returns:
|
|
|
- // merchant: Full merchant (recipe ingredients populated)
|
|
|
- // count: Number of new recipes
|
|
|
- updateRecipesClover: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "Must be logged in to do that";
|
|
|
- return res.redirect("/");
|
|
|
- }
|
|
|
-
|
|
|
- let merchant = {};
|
|
|
- let newRecipes = [];
|
|
|
- let deletedRecipes = []
|
|
|
- Merchant.findOne({_id: req.session.user})
|
|
|
- .populate("recipes")
|
|
|
- .then((response)=>{
|
|
|
- merchant = response;
|
|
|
- return axios.get(`https://apisandbox.dev.clover.com/v3/merchants/${merchant.posId}/items?access_token=${merchant.posAccessToken}`);
|
|
|
- })
|
|
|
- .then((result)=>{
|
|
|
- deletedRecipes = merchant.recipes.slice();
|
|
|
- for(let i = 0; i < result.data.elements.length; i++){
|
|
|
- for(let j = 0; j < deletedRecipes.length; j++){
|
|
|
- if(result.data.elements[i].id === deletedRecipes[j].posId){
|
|
|
- result.data.elements.splice(i, 1);
|
|
|
- deletedRecipes.splice(j, 1);
|
|
|
- i--;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- for(let i = 0; i < deletedRecipes.length; i++){
|
|
|
- for(let j = 0; j < merchant.recipes.length; j++){
|
|
|
- if(deletedRecipes[i]._id === merchant.recipes[j]._id){
|
|
|
- merchant.recipes.splice(j, 1);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- for(let i = 0; i < result.data.elements.length; i++){
|
|
|
- let newRecipe = new Recipe({
|
|
|
- posId: result.data.elements[i].id,
|
|
|
- merchant: merchant._id,
|
|
|
- name: result.data.elements[i].name,
|
|
|
- ingredients: [],
|
|
|
- price: result.data.elements[i].price
|
|
|
- });
|
|
|
-
|
|
|
- merchant.recipes.push(newRecipe);
|
|
|
- newRecipes.push(newRecipe);
|
|
|
- }
|
|
|
-
|
|
|
- Recipe.create(newRecipes).catch((err)=>{});
|
|
|
-
|
|
|
- return merchant.save();
|
|
|
- })
|
|
|
- .then((newMerchant)=>{
|
|
|
- return res.json({new: newRecipes, removed: deletedRecipes});
|
|
|
- })
|
|
|
- .catch((err)=>{
|
|
|
- if(typeof(err) === "string"){
|
|
|
- return res.json(err);
|
|
|
- }
|
|
|
- if(err.name === "ValidationError"){
|
|
|
- return res.json(err.errors[Object.keys(err.errors)[0]].properties.message);
|
|
|
- }
|
|
|
- return res.json("ERROR: UNABLE TO RETRIEVE MERCHANT DATA");
|
|
|
- });
|
|
|
- },
|
|
|
-
|
|
|
- updateRecipesSquare: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "Must be logged in to do that";
|
|
|
- return res.redirect("/");
|
|
|
- }
|
|
|
-
|
|
|
- let merchant = {};
|
|
|
- let merchantRecipes = [];
|
|
|
- let newRecipes = [];
|
|
|
-
|
|
|
- Merchant.findOne({_id: req.session.user})
|
|
|
- .populate("recipes")
|
|
|
- .then((fetchedMerchant)=>{
|
|
|
- merchant = fetchedMerchant;
|
|
|
- return axios.post(`${process.env.SQUARE_ADDRESS}/v2/catalog/search`, {
|
|
|
- object_types: ["ITEM"]
|
|
|
- }, {
|
|
|
- headers: {
|
|
|
- Authorization: `Bearer ${merchant.posAccessToken}`
|
|
|
- }
|
|
|
- });
|
|
|
- })
|
|
|
- .then((response)=>{
|
|
|
- merchantRecipes = merchant.recipes.slice();
|
|
|
-
|
|
|
-
|
|
|
- for(let i = 0; i < response.data.objects.length; i++){
|
|
|
- let itemData = response.data.objects[i].item_data;
|
|
|
- for(let j = 0; j < itemData.variations.length; j++){
|
|
|
- let isFound = false;
|
|
|
-
|
|
|
- for(let k = 0; k < merchantRecipes.length; k++){
|
|
|
- if(itemData.variations[j].id === merchantRecipes[k].posId){
|
|
|
- merchantRecipes.splice(k, 1);
|
|
|
- k--;
|
|
|
- isFound = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(!isFound){
|
|
|
- let newRecipe = new Recipe({
|
|
|
- posId: itemData.variations[j].id,
|
|
|
- merchant: merchant._id,
|
|
|
- name: "",
|
|
|
- price: itemData.variations[j].item_variation_data.price_money.amount,
|
|
|
- ingredients: []
|
|
|
- });
|
|
|
-
|
|
|
- if(itemData.variations.length > 1){
|
|
|
- newRecipe.name = `${itemData.name} '${itemData.variations[j].item_variation_data.name}'`;
|
|
|
- }else{
|
|
|
- newRecipe.name = itemData.name;
|
|
|
- }
|
|
|
-
|
|
|
- newRecipes.push(newRecipe);
|
|
|
- merchant.recipes.push(newRecipe);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- let ids = [];
|
|
|
- for(let i = 0; i < merchantRecipes.length; i++){
|
|
|
- ids.push(merchantRecipes[i]._id);
|
|
|
- for(let j = 0; j < merchant.recipes.length; j++){
|
|
|
- if(merchantRecipes[i]._id.toString() === merchant.recipes[j]._id.toString()){
|
|
|
- merchant.recipes.splice(j, 1);
|
|
|
- j--;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(newRecipes.length > 0){
|
|
|
- Recipe.create(newRecipes);
|
|
|
- }
|
|
|
-
|
|
|
- if(merchantRecipes.length > 0){
|
|
|
- Recipe.deleteMany({_id: {$in: ids}});
|
|
|
- }
|
|
|
-
|
|
|
- return merchant.save();
|
|
|
- })
|
|
|
- .then((merchant)=>{
|
|
|
- return res.json({new: newRecipes, removed: merchantRecipes});
|
|
|
- })
|
|
|
- .catch((err)=>{
|
|
|
- if(typeof(err) === "string"){
|
|
|
- return res.json(err);
|
|
|
- }
|
|
|
- if(err.name === "ValidationError"){
|
|
|
- return res.json(err.errors[Object.keys(err.errors)[0]].properties.message);
|
|
|
- }
|
|
|
- return res.json("ERROR: UNABLE TO RETRIEVE RECIPE DATA FROM SQUARE");
|
|
|
- });
|
|
|
- },
|
|
|
-
|
|
|
createFromSpreadsheet: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
|
|
|
- return res.redirect("/");
|
|
|
- }
|
|
|
-
|
|
|
//read file, get the correct sheet, create array from sheet
|
|
|
let workbook = xlsx.readFile(req.file.path);
|
|
|
fs.unlink(req.file.path, ()=>{});
|
|
|
@@ -351,8 +147,9 @@ module.exports = {
|
|
|
|
|
|
let merchant = {};
|
|
|
let ingredients = [];
|
|
|
- Merchant.findOne({_id: req.session.user})
|
|
|
+ res.locals.merchant
|
|
|
.populate("inventory.ingredient")
|
|
|
+ .execPopulate()
|
|
|
.then((response)=>{
|
|
|
merchant = response;
|
|
|
|
|
|
@@ -375,7 +172,7 @@ module.exports = {
|
|
|
|
|
|
if(array[i][locations.name] !== undefined){
|
|
|
currentRecipe = {
|
|
|
- merchant: req.session.user,
|
|
|
+ merchant: res.locals.merchant._id,
|
|
|
name: array[i][locations.name],
|
|
|
price: parseInt(array[i][locations.price] * 100),
|
|
|
ingredients: []
|
|
|
@@ -428,13 +225,9 @@ module.exports = {
|
|
|
},
|
|
|
|
|
|
spreadsheetTemplate: function(req, res){
|
|
|
- if(!req.session.user){
|
|
|
- req.session.error = "MUST BE LOGGED IN TO DO THAT";
|
|
|
- return res.redirect("/");
|
|
|
- }
|
|
|
-
|
|
|
- Merchant.findOne({_id: req.session.user})
|
|
|
+ res.locals.merchant
|
|
|
.populate("inventory.ingredient")
|
|
|
+ .execPopulate()
|
|
|
.then((merchant)=>{
|
|
|
let workbook = xlsx.utils.book_new();
|
|
|
workbook.SheetNames.push("Recipes");
|