const Order = require("./Order"); module.exports = { isFetched: false, display: async function(Order){ if(!this.isFetched){ let loader = document.getElementById("loaderContainer"); loader.style.display = "flex"; fetch("/order", { method: "GET", headers: { "Content-Type": "application/json;charset=utf-8" }, }) .then((response) => response.json()) .then((response)=>{ if(typeof(response) === "string"){ banner.createError(response); }else{ let newOrders = []; for(let i = 0; i < response.length; i++){ newOrders.push(new Order( response[i]._id, response[i].name, response[i].date, response[i].ingredients, merchant )); } merchant.editOrders(newOrders); document.getElementById("orderSubmitForm").onsubmit = ()=>{this.submitFilter(Order)}; this.isFetched = true; } }) .catch((err)=>{ banner.createError("SOMETHING WENT WRONG. TRY REFRESHING THE PAGE"); }) .finally(()=>{ loader.style.display = "none"; }); } }, populate: function(){ let listDiv = document.getElementById("orderList"); let template = document.getElementById("order").content.children[0]; let dateDropdown = document.getElementById("dateDropdownOrder"); let ingredientDropdown = document.getElementById("ingredientDropdown"); dateDropdown.style.display = "none"; ingredientDropdown.style.display = "none"; document.getElementById("dateFilterBtnOrder").onclick = ()=>{this.toggleDropdown(dateDropdown)}; document.getElementById("ingredientFilterBtn").onclick = ()=>{this.toggleDropdown(ingredientDropdown)}; for(let i = 0; i < merchant.ingredients.length; i++){ let checkbox = document.createElement("input"); checkbox.type = "checkbox"; checkbox.ingredient = merchant.ingredients[i].ingredient; ingredientDropdown.appendChild(checkbox); let label = document.createElement("label"); label.innerText = merchant.ingredients[i].ingredient.name; label.for = checkbox; ingredientDropdown.appendChild(label); let brk = document.createElement("br"); ingredientDropdown.appendChild(brk); } while(listDiv.children.length > 0){ listDiv.removeChild(listDiv.firstChild); } for(let i = 0; i < merchant.orders.length; i++){ let row = template.cloneNode(true); let totalCost = 0; for(let j = 0; j < merchant.orders[i].ingredients.length; j++){ totalCost += merchant.orders[i].ingredients[j].quantity * merchant.orders[i].ingredients[j].price; } row.children[0].innerText = merchant.orders[i].name; row.children[1].innerText = `${merchant.orders[i].ingredients.length} items`; row.children[2].innerText = new Date(merchant.orders[i].date).toLocaleDateString("en-US"); row.children[3].innerText = `$${(totalCost / 100).toFixed(2)}`; row.order = merchant.orders[i]; row.onclick = ()=>{controller.openSidebar("orderDetails", merchant.orders[i])}; listDiv.appendChild(row); } }, submitFilter: function(){ event.preventDefault(); let data = { startDate: document.getElementById("orderFilDate1").valueAsDate, endDate: document.getElementById("orderFilDate2").valueAsDate, ingredients: [] } if(data.startDate >= data.endDate){ banner.createError("START DATE CANNOT BE AFTER END DATE"); return; } let ingredientChoices = document.getElementById("ingredientDropdown"); for(let i = 0; i < ingredientChoices.children.length; i += 3){ if(ingredientChoices.children[i].checked){ data.ingredients.push(ingredientChoices.children[i].ingredient.id); } } if(data.ingredients.length === 0){ for(let i = 0; i < merchant.ingredients.length; i++){ data.ingredients.push(merchant.ingredients[i].ingredient.id); } } let loader = document.getElementById("loaderContainer"); loader.style.display = "flex"; fetch("/order", { method: "POST", headers: { "Content-Type": "application/json;charset=utf-8" }, body: JSON.stringify(data) }) .then((response) => response.json()) .then((response)=>{ if(typeof(response) === "string"){ banner.createError(response); }else{ let orderList = document.getElementById("orderList"); let template = document.getElementById("order").content.children[0]; while(orderList.children.length > 0){ orderList.removeChild(orderList.firstChild); } for(let i = 0; i < response.length; i++){ let orderDiv = template.cloneNode(true); let order = new Order( response[i]._id, response[i].name, response[i].date, response[i].ingredients, merchant ); let cost = 0; for(let j = 0; j < order.ingredients.length; j++){ cost += (order.ingredients[j].price / 100) * order.ingredients[j].quantity; } orderDiv.children[0].innerText = order.name; orderDiv.children[1].innerText = `${order.ingredients.length} items`; orderDiv.children[2].innerText = order.date.toLocaleDateString(); orderDiv.children[3].innerText = `$${cost.toFixed(2)}`; orderDiv.onclick = ()=>{controller.openSidebar("orderDetails", order)}; orderList.appendChild(orderDiv); } } }) .catch((err)=>{ banner.createError("UNABLE TO DISPLAY THE ORDERS"); }) .finally(()=>{ loader.style.display = "none"; }); }, toggleDropdown: function(dropdown){ event.preventDefault(); let polyline = dropdown.parentElement.children[0].children[1].children[0].children[0]; if(dropdown.style.display === "none"){ dropdown.style.display = "block"; polyline.setAttribute("points", "18 15 12 9 6 15"); }else{ dropdown.style.display = "none"; polyline.setAttribute("points", "6 9 12 15 18 9"); } } }