|
|
@@ -0,0 +1,117 @@
|
|
|
+window.recipeObj = {
|
|
|
+ isPopulated: false,
|
|
|
+ graph: {},
|
|
|
+
|
|
|
+ display: function(recipe){
|
|
|
+ clearScreen();
|
|
|
+ document.querySelector("#recipeStrand").style.display = "flex";
|
|
|
+ document.querySelector("strand-selector").setAttribute("strand", "recipe");
|
|
|
+
|
|
|
+ if(!this.isPopulated){
|
|
|
+ document.querySelector("#recipeFrom").valueAsDate = new Date(new Date().getFullYear(), new Date().getMonth(), 1);
|
|
|
+ document.querySelector("#recipeTo").valueAsDate = new Date();
|
|
|
+
|
|
|
+ let recipesDiv = document.querySelector("#recipeOptions");
|
|
|
+
|
|
|
+ for(let recipe of data.merchant.recipes){
|
|
|
+ let checkDiv = document.createElement("div");
|
|
|
+ checkDiv.classList = "checkboxDiv";
|
|
|
+ recipesDiv.appendChild(checkDiv);
|
|
|
+
|
|
|
+ let checkbox = document.createElement("input");
|
|
|
+ checkbox.type = "checkbox";
|
|
|
+ checkbox.id = `${recipe.name}Checkbox`;
|
|
|
+ checkbox._id = recipe._id;
|
|
|
+ checkbox.name = recipe.name;
|
|
|
+ checkbox.onchange = ()=>{
|
|
|
+ if(checkbox.checked){
|
|
|
+ let from = document.querySelector("#recipeFrom").valueAsDate;
|
|
|
+ let to = document.querySelector("#recipeTo").valueAsDate;
|
|
|
+
|
|
|
+ this.graph.addData(this.formatData(recipe._id, from, to), [from, to], recipe.name);
|
|
|
+ }else{
|
|
|
+ this.graph.removeData(recipe.name);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ checkDiv.appendChild(checkbox);
|
|
|
+
|
|
|
+ let label = document.createElement("label");
|
|
|
+ label.innerText = recipe.name;
|
|
|
+ label.setAttribute("for", `${recipe.name}Checkbox`);
|
|
|
+ checkDiv.appendChild(label);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.graph = new LineGraph(
|
|
|
+ document.querySelector("#recipeStrand canvas"),
|
|
|
+ "Quantity",
|
|
|
+ "Date"
|
|
|
+ );
|
|
|
+
|
|
|
+ this.isPopulated = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(recipe){
|
|
|
+ this.graph.clearData();
|
|
|
+
|
|
|
+ let from = document.querySelector("#recipeFrom").valueAsDate;
|
|
|
+ let to = document.querySelector("#recipeTo").valueAsDate;
|
|
|
+
|
|
|
+ this.graph.addData(this.formatData(recipe.id, from, to), [from, to], recipe.name);
|
|
|
+
|
|
|
+ for(let label of document.querySelector("#recipeOptions").children){
|
|
|
+ if(label.innerText === ingredient.name){
|
|
|
+ label.children[0].checked = true;
|
|
|
+ }else{
|
|
|
+ label.children[0].checked = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+ formatData: function(id, from, to){
|
|
|
+ let dateRange = Math.floor((Date.UTC(to.getFullYear(), to.getMonth(), to.getDate()) - Date.UTC(from.getFullYear(), from.getMonth(), from.getDate())) / (1000 * 60 * 60 * 24)) + 1;
|
|
|
+ let dataList = new Array(Math.abs(dateRange)).fill(0);
|
|
|
+
|
|
|
+ for(let transaction of data.transactions){
|
|
|
+ let transDate = new Date(transaction.date);
|
|
|
+ let diff = Math.floor((Date.UTC(transDate.getFullYear(), transDate.getMonth(), transDate.getDate()) - Date.UTC(to.getFullYear(), to.getMonth(), to.getDate())) / (1000 * 60 * 60 * 24));
|
|
|
+
|
|
|
+ if(diff <= 0){
|
|
|
+ for(let recipe of transaction.recipes){
|
|
|
+ if(recipe.recipe === id){
|
|
|
+ dataList[dateRange - Math.abs(diff) - 1] += recipe.quantity;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return dataList;
|
|
|
+ },
|
|
|
+
|
|
|
+ newDates: function(){
|
|
|
+ let from = document.querySelector("recipeFrom").valueAsDate;
|
|
|
+ let to = document.querySelector("recipeTo").valueAsDate;
|
|
|
+
|
|
|
+ if(from === "" || to === ""){
|
|
|
+ banner.createError("Invalid date");
|
|
|
+ return;
|
|
|
+ }else{
|
|
|
+ from = new Date(from);
|
|
|
+ to = new Date(to);
|
|
|
+ }
|
|
|
+
|
|
|
+ if(validator.transaction.date(from, to)){
|
|
|
+ window.fetchData(from, to, ()=>{
|
|
|
+ this.graph.clearData();
|
|
|
+
|
|
|
+ let recipesDiv = document.querySelector("#recipeOptions");
|
|
|
+ for(let div of recipesDiv.children){
|
|
|
+ let checkbox = div.children[0];
|
|
|
+ if(checkbox.checked){
|
|
|
+ this.graph.addData(this.formatData(checkbox._id, from, to), [from, to], checkbox.name);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|