helper.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. const axios = require("axios");
  2. const Transaction = require("../models/transaction.js");
  3. const { response } = require("express");
  4. module.exports = {
  5. getSquareData: function(merchant){
  6. let now = new Date().toISOString();
  7. now = `${now.substring(0, now.length - 1)}+00:00`;
  8. let before = new Date(merchant.lastUpdatedTime).toISOString();
  9. before = `${before.substring(0, before.length - 1)}+00:00`;
  10. let ingredients = {};
  11. return axios.post(`${process.env.SQUARE_ADDRESS}/v2/orders/search`, {
  12. location_ids: [merchant.squareLocation],
  13. query: {
  14. filter: {
  15. date_time_filter: {
  16. closed_at: {
  17. start_at: before,
  18. end_at: now
  19. }
  20. },
  21. state_filter: {
  22. states: ["COMPLETED"]
  23. }
  24. },
  25. sort: {
  26. sort_field: "CLOSED_AT",
  27. sort_order: "DESC"
  28. }
  29. }
  30. }, {
  31. headers: {
  32. Authorization: `Bearer ${merchant.posAccessToken}`
  33. }
  34. })
  35. .then((response)=>{
  36. console.log(response.data.orders.length);
  37. let transactions = [];
  38. if(response.data.orders){
  39. for(let i = 0; i < response.data.orders.length; i++){
  40. let transaction = new Transaction({
  41. merchant: merchant,
  42. date: response.data.orders[i].created_at,
  43. posId: response.data.orders[i].id,
  44. recipes: []
  45. });
  46. for(let j = 0; j < response.data.orders[i].line_items.length; j++){
  47. for(let k = 0; k < merchant.recipes.length; k++){
  48. if(response.data.orders[i].line_items[j].catalog_object_id === merchant.recipes[k].posId){
  49. let quantitySold = parseInt(response.data.orders[i].line_items[j].quantity);
  50. transaction.recipes.push({
  51. recipe: merchant.recipes[k],
  52. quantity: quantitySold
  53. });
  54. for(let l = 0; l < merchant.recipes[k].ingredients.length; l++){
  55. let ingredient = merchant.recipes[k].ingredients[l];
  56. let quantity = quantitySold * ingredient.quantity
  57. ingredients[ingredient.ingredient] = ingredients[ingredient.ingredient] + quantity || quantity;
  58. }
  59. break;
  60. }
  61. }
  62. }
  63. transactions.push(transaction);
  64. }
  65. }
  66. return Transaction.create(transactions);
  67. })
  68. .then((transactions)=>{
  69. const keys = Object.keys(ingredients);
  70. for(let i = 0; i < keys.length; i++){
  71. for(let j = 0; j < merchant.inventory.length; j++){
  72. if(keys[i] === merchant.inventory[j].ingredient._id.toString()){
  73. merchant.inventory[j].quantity -= ingredients[keys[i]];
  74. break;
  75. }
  76. }
  77. }
  78. return transactions;
  79. })
  80. .catch((err)=>{
  81. return "ERROR: UNABLE TO UPDATE TRANSACTION DATA";
  82. });
  83. }
  84. }