analytics.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. let analytics = {
  2. display: function(){
  3. const itemsList = document.getElementById("itemsList");
  4. while(itemsList.children.length > 0){
  5. itemsList.removeChild(itemsList.firstChild);
  6. }
  7. for(let i = 0; i < merchant.ingredients.length; i++){
  8. let li = document.createElement("li");
  9. li.classList.add("itemButton");
  10. li.item = merchant.ingredients[i];
  11. li.innerText = merchant.ingredients[i].ingredient.name;
  12. li.onclick = ()=>{this.ingredientDisplay(merchant.ingredients[i], li)};
  13. itemsList.appendChild(li);
  14. }
  15. },
  16. ingredientDisplay: function(ingredient, li){
  17. console.time("timing");
  18. const itemsList = document.getElementById("itemsList");
  19. for(let i = 0; i < itemsList.children.length; i++){
  20. itemsList.children[i].classList.remove("analItemActive");
  21. }
  22. li.classList.add("analItemActive");
  23. let startDate = new Date();
  24. startDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate() - 30);
  25. //Get list of recipes that contain the ingredient
  26. let containingRecipes = [];
  27. for(let i = 0; i < merchant.recipes.length; i++){
  28. for(let j = 0; j < merchant.recipes[i].ingredients.length; j++){
  29. if(merchant.recipes[i].ingredients[j].ingredient === ingredient.ingredient){
  30. containingRecipes.push({
  31. recipe: merchant.recipes[i],
  32. quantity: merchant.recipes[i].ingredients[j].quantity
  33. });
  34. break;
  35. }
  36. }
  37. }
  38. //Create Graph
  39. console.log(startDate);
  40. const dateIndices = merchant.transactionIndices(startDate);
  41. console.log(dateIndices);
  42. console.log(merchant.transactions[dateIndices[0]]);
  43. let quantities = [];
  44. let dates = [];
  45. let currentDate = merchant.transactions[dateIndices[0]].date;
  46. let currentQuantity = 0;
  47. for(let i = dateIndices[0]; i < dateIndices[1]; i++){
  48. if(currentDate.getDate() !== merchant.transactions[i].date.getDate()){
  49. quantities.push(ingredient.ingredient.convert(currentQuantity));
  50. dates.push(currentDate);
  51. currentQuantity = 0;
  52. currentDate = merchant.transactions[i].date;
  53. }
  54. for(let j = 0; j < merchant.transactions[i].recipes.length; j++){
  55. for(let k = 0; k < containingRecipes.length; k++){
  56. if(merchant.transactions[i].recipes[j].recipe === containingRecipes[k].recipe){
  57. for(let l = 0; l < merchant.transactions[i].recipes[j].recipe.ingredients.length; l++){
  58. const transIngredient = merchant.transactions[i].recipes[j].recipe.ingredients[l];
  59. if(transIngredient.ingredient === ingredient.ingredient){
  60. currentQuantity += transIngredient.quantity * merchant.transactions[i].recipes[j].quantity;
  61. break;
  62. }
  63. }
  64. }
  65. }
  66. }
  67. }
  68. let trace = {
  69. x: dates,
  70. y: quantities,
  71. mode: "lines+markers"
  72. }
  73. console.timeEnd("timing");
  74. Plotly.newPlot("itemUseGraph", [trace]);
  75. //Create daily use card
  76. let sum = 0;
  77. for(let i = 0; i < quantities.length; i++){
  78. sum += quantities[i];
  79. }
  80. document.getElementById("analAvgUse").innerText = `${(sum / 30).toFixed(2)} ${ingredient.ingredient.unit}`;
  81. }
  82. }
  83. module.exports = analytics;