Răsfoiți Sursa

Save before making large changes

Lee Morgan 6 ani în urmă
părinte
comite
628e3c57c0

+ 52 - 8
controllers/helper.js

@@ -1,5 +1,8 @@
 const axios = require("axios");
 
+const Transaction = require("../models/transaction.js");
+const { response } = require("express");
+
 module.exports = {
     getSquareData: function(merchant){
         let now = new Date().toISOString();
@@ -7,7 +10,9 @@ module.exports = {
         let before = new Date(merchant.lastUpdatedTime).toISOString();
         before = `${before.substring(0, before.length - 1)}+00:00`;
 
-        axios.post(`${process.env.SQUARE_ADDRESS}/v2/orders/search`, {
+        let ingredients = {};
+
+        return axios.post(`${process.env.SQUARE_ADDRESS}/v2/orders/search`, {
             location_ids: [merchant.squareLocation],
             query: {
                 filter: {
@@ -32,21 +37,60 @@ module.exports = {
             }
         })
             .then((response)=>{
+                console.log(response.data.orders.length);
+                let transactions = [];
+
                 if(response.data.orders){
-                    console.log(response.data.orders[0].line_items);
                     for(let i = 0; i < response.data.orders.length; i++){
-                        for(let j = 0; j < merchant.recipes.length; j++){
-                            if(response.data.orders[i].name === merchant.recipes[j].name){
-                                
-                                break;
+                        let transaction = new Transaction({
+                            merchant: merchant,
+                            date: response.data.orders[i].created_at,
+                            posId: response.data.orders[i].id,
+                            recipes: []
+                        });
+
+                        for(let j = 0; j < response.data.orders[i].line_items.length; j++){
+                            for(let k = 0; k < merchant.recipes.length; k++){
+                                if(response.data.orders[i].line_items[j].catalog_object_id === merchant.recipes[k].posId){
+                                    let quantitySold = parseInt(response.data.orders[i].line_items[j].quantity);
+
+                                    transaction.recipes.push({
+                                        recipe: merchant.recipes[k],
+                                        quantity: quantitySold
+                                    });
+
+                                    for(let l = 0; l < merchant.recipes[k].ingredients.length; l++){
+                                        let ingredient = merchant.recipes[k].ingredients[l];
+                                        let quantity = quantitySold * ingredient.quantity
+                                        ingredients[ingredient.ingredient] = ingredients[ingredient.ingredient] + quantity || quantity;
+                                    }
+
+                                    break;
+                                }
                             }
                         }
+
+                        transactions.push(transaction);
                     }
                 }
+
+                return Transaction.create(transactions);
+            })
+            .then((transactions)=>{
+                const keys = Object.keys(ingredients);
+                for(let i = 0; i < keys.length; i++){
+                    for(let j = 0; j < merchant.inventory.length; j++){
+                        if(keys[i] === merchant.inventory[j].ingredient._id.toString()){
+                            merchant.inventory[j].quantity -= ingredients[keys[i]];
+                            break;
+                        }
+                    }
+                }
+
+                return transactions;
             })
             .catch((err)=>{
-                console.log(err);
-                // console.log(err.response.data.errors);
+                return "ERROR: UNABLE TO UPDATE TRANSACTION DATA";
             });
     }
 }

+ 24 - 9
controllers/merchantData.js

@@ -163,16 +163,30 @@ module.exports = {
                 let recipes = [];
                 
                 for(let i = 0; i < response.data.objects.length; i++){
-                    let recipe = new Recipe({
-                        posId: response.data.objects[i].id,
-                        merchant: merchant._id,
-                        name: response.data.objects[i].item_data.name,
-                        price: response.data.objects[i].item_data.variations[0].item_variation_data.price_money.amount,
-                        ingredients: []
-                    });
+                    if(response.data.objects[i].item_data.variations.length > 1){
+                        for(let j = 0; j < response.data.objects[i].item_data.variations.length; j++){
+                            let recipe = new Recipe({
+                                posId: response.data.objects[i].item_data.variations[j].id,
+                                merchant: merchant._id,
+                                name: `${response.data.objects[i].item_data.name} '${response.data.objects[i].item_data.variations[j].item_variation_data.name}'`,
+                                price: response.data.objects[i].item_data.variations[j].item_variation_data.price_money.amount
+                            });
 
-                    recipes.push(recipe);
-                    merchant.recipes.push(recipe);
+                            recipes.push(recipe);
+                            merchant.recipes.push(recipe);
+                        }
+                    }else{
+                        let recipe = new Recipe({
+                            posId: response.data.objects[i].item_data.variations[0].id,
+                            merchant: merchant._id,
+                            name: response.data.objects[i].item_data.name,
+                            price: response.data.objects[i].item_data.variations[0].item_variation_data.price_money.amount,
+                            ingredients: []
+                        });
+
+                        recipes.push(recipe);
+                        merchant.recipes.push(recipe);
+                    }
                 }
 
                 return Recipe.create(recipes);
@@ -219,6 +233,7 @@ module.exports = {
                     })
             })
             .catch((err)=>{
+                console.log(err);
                 return res.json("ERROR: UNABLE TO RETRIEVE USER DATA");
             });
     },

+ 11 - 4
controllers/renderer.js

@@ -70,7 +70,7 @@ module.exports = {
             .populate("inventory.ingredient")
             .populate("recipes")
             .then(async (merchant)=>{
-                let promiseArray = [];
+                let transactionPromise = {};
                 if(merchant.pos === "clover"){
                     const subscriptionCheck = axios.get(`${process.env.CLOVER_ADDRESS}/v3/apps/${process.env.SUBLINE_CLOVER_APPID}/merchants/${merchant.posId}/billing_info?access_token=${merchant.posAccessToken}`);
                     const transactionRetrieval = axios.get(`${process.env.CLOVER_ADDRESS}/v3/merchants/${merchant.posId}/orders?filter=modifiedTime>=${merchant.lastUpdatedTime}&expand=lineItems&expand=payment&access_token=${merchant.posAccessToken}`);
@@ -152,19 +152,25 @@ module.exports = {
                             }
                             Transaction.deleteMany({posId: {$in: ids}});
 
-                            promiseArray.push(Transaction.create(transactions));
+                            transactionPromise = Transaction.create(transactions);
+                            // promiseArray.push(Transaction.create(transactions));
                         })
                         .catch((err)=>{
                             req.session.error = "ERROR: UNABLE TO RETRIEVE DATA FROM CLOVER";
                             return res.redirect("/");
                         });
                 }else if(merchant.pos === "square"){
-                    promiseArray = helper.getSquareData(merchant);
+                    transactionPromise = helper.getSquareData(merchant);
                 }
 
-                return Promise.all([merchant.save()].concat(promiseArray));
+                // const arr = [merchant.save()].concat(promiseArray)
+                console.log(merchant.inventory);
+                merchant.save();
+
+                return Promise.all([transactionPromise]);
             })
             .then((response)=>{
+                console.log(response[0].inventory);
                 let date = new Date();
                 let firstDay = new Date(date.getFullYear(), date.getMonth() - 1, 1);
 
@@ -190,6 +196,7 @@ module.exports = {
                     .catch((err)=>{});
             })
             .catch((err)=>{
+                console.log(err);
                 req.session.error = "ERROR: UNABLE TO RETRIEVE USER DATA";
                 return res.redirect("/");
             });

Fișier diff suprimat deoarece este prea mare
+ 62 - 0
views/dashboardPage/bundle.js


+ 8 - 3
views/dashboardPage/js/recipeDetails.js

@@ -1,3 +1,5 @@
+const merchant = require("../../../models/merchant");
+
 module.exports = {
     recipe: {},
 
@@ -35,7 +37,9 @@ module.exports = {
         document.getElementById("recipeUpdate").style.display = "none";
 
         document.getElementById("editRecipeBtn").onclick = ()=>{this.edit()};
-        document.getElementById("removeRecipeBtn").onclick = ()=>{this.remove()};
+        if(merchant.pos === "none"){
+            document.getElementById("removeRecipeBtn").onclick = ()=>{this.remove()};
+        }
         document.getElementById("addRecIng").onclick = ()=>{this.displayAddIngredient()};
         document.getElementById("recipeUpdate").onclick = ()=>{this.update()};
     },
@@ -120,11 +124,12 @@ module.exports = {
                 if(typeof(response) === "string"){
                     banner.createError(response);
                 }else{
-                    merchant.editRecipes([this.recipe]);
+                    window.merchant.editRecipes([this.recipe]);
                     banner.createNotification("RECIPE UPDATE");
                 }
             })
             .catch((err)=>{
+                console.log(err);
                 banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE");
             })
             .finally(()=>{
@@ -155,7 +160,7 @@ module.exports = {
         template.name = "new";
         document.getElementById("recipeIngredientList").appendChild(template);
 
-        let categories = merchant.categorizeIngredients();
+        let categories = window.merchant.categorizeIngredients();
 
         for(let i = 0; i < categories.length; i++){
             let optGroup = document.createElement("optgroup");

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff