admin.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. const Merchant = require("../models/merchant.js");
  2. const Ingredient = require("../models/ingredient.js");
  3. const Recipe = require("../models/recipe.js");
  4. const Order = require("../models/order.js");
  5. const helper = require("./helper.js");
  6. const fs = require("fs");
  7. module.exports = {
  8. /*
  9. POST: Adding data for admins
  10. req.body = {
  11. password: String
  12. id: String <merchant id>
  13. }
  14. req.files = {
  15. ingredients: txt
  16. recipes: txt
  17. }
  18. */
  19. addData: function(req, res){
  20. if(req.body.password !== process.env.ADMIN_PASS) return res.json("bad password");
  21. Merchant.findOne({_id: req.body.id})
  22. .populate("inventory.ingredient")
  23. .then((merchant)=>{
  24. //Ingredients
  25. let newIngredients = [];
  26. if(req.files.ingredients !== undefined){
  27. let ingredientData = fs.readFileSync(req.files.ingredients.tempFilePath).toString();
  28. fs.unlink(req.files.ingredients.tempFilePath, ()=>{});
  29. ingredientData = ingredientData.split("\n");
  30. merchant.inventory = [];
  31. for(let i = 0; i < ingredientData.length; i++){
  32. if(ingredientData[i] === "") continue;
  33. let data = ingredientData[i].split(",");
  34. let ingredient = new Ingredient({
  35. name: data[0],
  36. category: data[1],
  37. unitType: helper.getUnitType(data[3]),
  38. ingredients: []
  39. });
  40. let merchIngredient = {
  41. ingredient: ingredient._id,
  42. quantity: helper.convertQuantityToBaseUnit(data[2], data[3]),
  43. defaultUnit: data[3]
  44. };
  45. if(data[3].toLowerCase() === "bottle"){
  46. ingredient.unitType = data[5];
  47. ingredient.unitSize = helper.convertQuantityToBaseUnit(data[4], data[5])
  48. merchIngredient.defaultUnit = "bottle";
  49. }
  50. newIngredients.push(ingredient);
  51. merchant.inventory.push(merchIngredient);
  52. }
  53. }
  54. let indexIngredients = ()=>{
  55. let ingredients = {};
  56. for(let i = 0; i < merchant.inventory.length; i++){
  57. ingredients[merchant.inventory[i].ingredient.name.toLowerCase()] = merchant.inventory[i].ingredient;
  58. }
  59. return ingredients;
  60. }
  61. let ingredientIndices = indexIngredients();
  62. //Recipes
  63. let newRecipes = [];
  64. if(req.files.recipes !== undefined){
  65. let recipeData = fs.readFileSync(req.files.recipes.tempFilePath).toString();
  66. fs.unlink(req.files.recipes.tempFilePath, ()=>{});
  67. recipeData = recipeData.split("\n");
  68. merchant.recipes = [];
  69. for(let i = 0; i < recipeData.length; i++){
  70. if(recipeData[i] === "") continue;
  71. let data = recipeData[i].split(",");
  72. let recipe = new Recipe({
  73. merchant: merchant._id,
  74. name: data[0],
  75. price: parseInt(parseFloat(data[1]) * 100),
  76. category: data[2],
  77. ingredients: []
  78. });
  79. for(let j = 3; j < data.length; j+=3){
  80. if(data[j] === "") break;
  81. recipe.ingredients.push({
  82. ingredient: ingredientIndices[data[j].toLowerCase()],
  83. quantity: helper.convertQuantityToBaseUnit(parseFloat(data[j+1]), data[j+2])
  84. });
  85. }
  86. merchant.recipes.push(recipe);
  87. newRecipes.push(recipe);
  88. }
  89. }
  90. //Orders
  91. let newOrders = [];
  92. if(req.files.orders !== undefined){
  93. let orderData = fs.readFileSync(req.files.orders.tempFilePath).toString();
  94. fs.unlink(req.files.orders.tempFilePath, ()=>{});
  95. orderData = orderData.split("\n");
  96. for(let i = 0; i < orderData.length; i++){
  97. if(orderData[i] === "") continue;
  98. let data = orderData[i].split(",");
  99. let order = new Order({
  100. merchant: merchant._id,
  101. name: data[0],
  102. date: new Date(data[1]),
  103. taxes: parseFloat(data[2]),
  104. fees: parseFloat(data[3]),
  105. ingredients: []
  106. });
  107. for(let j = 4; j < data.length; j+=3){
  108. if(data[j] === "") break;
  109. order.ingredients.push({
  110. ingredient: ingredientIndices[data[j].toLowerCase()],
  111. quantity: parseFloat(data[j+1]),
  112. pricePerUnit: parseInt(parseFloat(data[j+2]) * 100)
  113. });
  114. }
  115. newOrders.push(order);
  116. }
  117. }
  118. return Promise.all([
  119. merchant.save(),
  120. Ingredient.create(newIngredients),
  121. Recipe.create(newRecipes),
  122. Order.create(newOrders)
  123. ]);
  124. })
  125. .then((response)=>{
  126. return res.redirect("/dashboard");
  127. })
  128. .catch((err)=>{
  129. console.log(err);
  130. return res.json("ERROR: A whoopsie has been made");
  131. });
  132. }
  133. }