Просмотр исходного кода

Many bug fixes regarding data/time

Lee Morgan 6 лет назад
Родитель
Сommit
001caead9b

+ 11 - 1
views/dataPage/data.ejs

@@ -123,7 +123,17 @@
             </div>
         </div>
 
-        <script>let data = <%- JSON.stringify(data); %></script>
+        <script>
+            let data = <%- JSON.stringify(data); %>;
+
+            for(let transaction of data.transactions){
+                transaction.date = new Date(transaction.date);
+            }
+
+            for(let purchase of data.purchases){
+                purchase.date = new Date(purchase.date);
+            }
+        </script>
         <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
         <script src="/shared/validation.js"></script>
         <script src="/dataPage/home.js"></script>

+ 38 - 12
views/dataPage/fetchData.js

@@ -57,28 +57,42 @@ window.fetchData = function(from, to, callback){
                     data.dates = mergedDates;
 
                     for(let set of response.data){
-                        if(set.transactions[0] < data.transactions[0]){
+                        for(let transaction of set.transactions){
+                            transaction.date = new Date(transaction.date);
+                            transaction.date.setMinutes(transaction.date.getMinutes() + transaction.date.getTimezoneOffset());
+                        }
+
+                        if(set.transactions[0].date < data.transactions[0].date){
                             data.transactions = set.transactions.concat(data.transactions);
-                        }else if(set.transactions[set.transactions.length-1] > data.transactions[data.transactions.length-1]){
+                        }else if(set.transactions[set.transactions.length-1].date > data.transactions[data.transactions.length-1].date){
                             data.transactions = data.transactions.concat(set.transactions);
                         }else{
                             for(let i = 0; i < data.transactions.length; i++){
-                                if(set.transactions[0] > data.transactions[i].date){
+                                if(set.transactions[0].date > data.transactions[i].date){
                                     data.transactions = data.transactions.slice(0, i).concat(set.transactions).concat(data.transactions.slice(i, data.transactions.length - 1));
                                     break;
                                 }
                             }
                         }
 
-                        if(set.purchases[0] < data.purchases[0]){
-                            data.purchases = set.purchases.concat(data.purchases);
-                        }else if(set.purchases[set.purchases.length-1] > data.purchases[data.purchases.length-1]){
-                            data.purchases = data.purchases.concat(set.purchases);
-                        }else{
-                            for(let i = 0; i < data.purchases.length; i++){
-                                if(set.purchases[0] > data.purchases[i].date){
-                                    data.purchases = data.purchases.slice(0, i).concat(set.purchases).concat(data.purchases.slice(i, data.purchases.length - 1));
-                                    break;
+                        for(let purchase of set.purchases){
+                            purchase.date = new Date();
+                            purchase.date.setMinutes(purchase.date.getMinutes() + purchase.date.getTimezoneOffset());
+                        }
+
+                        if(set.purchases.length > 0){
+                            if(data.purchases.length === 0){
+                                data.purchases = set.purchases;
+                            }else if(set.purchases[0].date < data.purchases[0].date){
+                                data.purchases = set.purchases.concat(data.purchases);
+                            }else if(set.purchases[set.purchases.length-1].date > data.purchases[data.purchases.length-1].date){
+                                data.purchases = data.purchases.concat(set.purchases);
+                            }else{
+                                for(let i = 0; i < data.purchases.length; i++){
+                                    if(set.purchases[0].date > data.purchases[i].date){
+                                        data.purchases = data.purchases.slice(0, i).concat(set.purchases).concat(data.purchases.slice(i, data.purchases.length - 1));
+                                        break;
+                                    }
                                 }
                             }
                         }
@@ -89,6 +103,18 @@ window.fetchData = function(from, to, callback){
             })
             .catch((err)=>{});
     }else{
+
         callback();
     }
+}
+
+window.getInputDates = function(name){
+    let from = document.querySelector(`#${name}From`).valueAsDate;
+    let to = document.querySelector(`#${name}To`).valueAsDate;
+
+    from.setMinutes(from.getMinutes() + from.getTimezoneOffset());
+    to.setMinutes(to.getMinutes() + to.getTimezoneOffset());
+    to.setDate(to.getDate() + 1);
+
+    return [from, to];
 }

+ 6 - 8
views/dataPage/home.js

@@ -62,10 +62,6 @@ window.homeObj = {
         //Populate number of recipes sold
         let i = 0;
         for(let transaction of transactions){
-            // if(i === 0){
-            //     console.log(transaction);
-            //     i++;
-            // }
             for(let recipe of transaction.recipes){
                 for(let newRecipe of recipes){
                     if(recipe.recipe === newRecipe.id){
@@ -139,6 +135,8 @@ window.homeObj = {
         for(let recipe of recipes){
             let row = document.createElement("tr");
             recipesBody.appendChild(row);
+            row.classList = "clickableRow";
+            row.onclick = ()=>{window.recipeObj.display(recipe)};
 
             let name = document.createElement("td");
             name.innerText = recipe.name;
@@ -179,8 +177,8 @@ window.homeObj = {
     },
 
     newDates: function(){
-        let from = new Date(document.querySelector("#homeFrom").value);
-        let to = new Date(document.querySelector("#homeTo").value);
+        let from = document.querySelector("#homeFrom").value;
+        let to = document.querySelector("#homeTo").value;
 
         if(from === "" || to === ""){
             banner.createError("Invalid date");
@@ -199,14 +197,14 @@ window.homeObj = {
                 let endIndex = data.transactions.length;
 
                 for(let i = 0; i < data.transactions.length; i++){
-                    if(from < new Date(data.transactions[i].date)){
+                    if(from < data.transactions[i].date){
                         startIndex = i;
                         break;
                     }
                 }
     
                 for(let i = 0; i < data.transactions.length; i++){
-                    if(to < new Date(data.transactions[i].date)){
+                    if(to < data.transactions[i].date){
                         endIndex = i;
                         break;
                     }

+ 6 - 17
views/dataPage/ingredient.js

@@ -54,8 +54,8 @@ window.ingredientObj = {
         if(ingredient){
             this.graph.clearData();
 
-            let from = document.querySelector("#ingredientFrom").valueAsDate;
-            let to = document.querySelector("#ingredientTo").valueAsDate;
+            let from, to;
+            [from, to] = getInputDates("ingredient");
             
             this.graph.addData(this.formatData(ingredient.id, from, to), [from, to], ingredient.name);
 
@@ -74,10 +74,10 @@ window.ingredientObj = {
         let dataList = new Array(Math.abs(dateRange)).fill(0);
 
         for(let transaction of data.transactions){
-            let transDate = new Date(transaction.date);
+            let transDate = transaction.date;
             let diff = Math.floor((Date.UTC(transDate.getFullYear(), transDate.getMonth(), transDate.getDate()) - Date.UTC(endDate.getFullYear(), endDate.getMonth(), endDate.getDate())) / (1000 * 60 * 60 * 24));
 
-            if(transDate > from && diff <= 0){
+            if(transDate > startDate && diff <= 0){
                 for(let recipe of transaction.recipes){
                     for(let merchRecipe of data.merchant.recipes){
                         if(merchRecipe._id === recipe.recipe){
@@ -97,19 +97,8 @@ window.ingredientObj = {
     },
 
     newDates: function(){
-        let from = document.querySelector("#ingredientFrom").value;
-        let to  = document.querySelector("#ingredientTo").value;
-
-        if(from === "" || to === ""){
-            banner.createError("Invalid date");
-            return;
-        }else{
-            from = new Date(from);
-            to = new Date(to);
-
-            from.setMinutes(from.getMinutes() + from.getTimezoneOffset());
-            to.setMinutes(to.getMinutes() + to.getTimezoneOffset());
-        }
+        let from, to;
+        [from, to] = getInputDates("ingredient");
 
         if(validator.transaction.date(from, to)){
             window.fetchData(from, to, ()=>{

+ 8 - 17
views/dataPage/recipe.js

@@ -54,13 +54,13 @@ window.recipeObj = {
         if(recipe){
             this.graph.clearData();
 
-            let from = document.querySelector("#recipeFrom").valueAsDate;
-            let to = document.querySelector("#recipeTo").valueAsDate;
+            let from, to;
+            [from, to] = getInputDates("recipe");
 
             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){
+                if(label.innerText === recipe.name){
                     label.children[0].checked = true;
                 }else{
                     label.children[0].checked = false;
@@ -74,7 +74,7 @@ window.recipeObj = {
         let dataList = new Array(Math.abs(dateRange)).fill(0);
 
         for(let transaction of data.transactions){
-            let transDate = new Date(transaction.date);
+            let transDate = 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(transDate > from && diff <= 0){
@@ -89,20 +89,11 @@ window.recipeObj = {
         return dataList;
     },
 
+    
+
     newDates: function(){
-        let from = document.querySelector("#recipeFrom").value;
-        let to = document.querySelector("#recipeTo").value;
-
-        if(from === "" || to === ""){
-            banner.createError("Invalid date");
-            return;
-        }else{
-            from = new Date(from);
-            to = new Date(to);
-
-            from.setMinutes(from.getMinutes() + from.getTimezoneOffset());
-            to.setMinutes(to.getMinutes() + to.getTimezoneOffset());
-        }
+        let from, to;
+        [from, to] = getInputDates("recipe");
 
         if(validator.transaction.date(from, to)){
             window.fetchData(from, to, ()=>{

+ 1 - 1
views/shared/validation.js

@@ -119,7 +119,7 @@ let validator = {
                 errors.push("Starting date must be before ending date");
             }
 
-            if(from > today || to > today){
+            if(from > today || to > today.setDate(today.getDate() + 1)){
                 errors.push("Cannot choose a date in the future");
             }