window.ingredientsStrandObj = {
isPopulated: false,
addIngredientsDiv: [],
display: function(){
if(!this.isPopulated){
this.populateIngredients();
this.isPopulated = true;
}
},
populateIngredients: function(){
let categories = categorizeIngredients(merchant.inventory);
let ingredientStrand = document.querySelector("#categoryList");
while(ingredientStrand.children.length > 0){
ingredientStrand.removeChild(ingredientStrand.firstChild);
}
for(let category of categories){
let categoryDiv = document.createElement("div");
categoryDiv.classList = "categoryDiv"
ingredientStrand.appendChild(categoryDiv);
let headerDiv = document.createElement("div");
categoryDiv.appendChild(headerDiv);
let headerTitle = document.createElement("p");
headerTitle.innerText = category.name;
headerDiv.appendChild(headerTitle);
let ingredientsDiv = document.createElement("div");
ingredientsDiv.classList = "ingredientsDiv";
ingredientsDiv.style.display = "none";
categoryDiv.appendChild(ingredientsDiv);
let headerButton = document.createElement("button");
headerButton.innerHTML = '';
headerButton.onclick = ()=>{this.toggleCategory(ingredientsDiv, headerButton)};
headerDiv.appendChild(headerButton);
for(let ingredient of category.ingredients){
let ingredientDiv = document.createElement("div");
ingredientDiv.classList = "ingredient";
ingredientDiv.onclick = ()=>{this.displayIngredient(ingredient, category)};
ingredientsDiv.appendChild(ingredientDiv);
let ingredientName = document.createElement("p");
ingredientName.innerText = ingredient.name;
ingredientDiv.appendChild(ingredientName);
let spacer = document.createElement("hr");
spacer.classList = "ingredientSpacer";
ingredientDiv.appendChild(spacer);
let ingredientData = document.createElement("p");
ingredientData.innerText = `${ingredient.quantity} ${ingredient.unit}`;
ingredientDiv.appendChild(ingredientData);
}
}
},
//Open or close the list of ingredients for a category
toggleCategory: function(div, button){
if(div.style.display === "none"){
button.innerHTML = '';
div.style.display = "flex";
}else if(div.style.display === "flex"){
button.innerHTML = '';
div.style.display = "none";
}
},
displayAddIngredients: function(){
let sidebar = document.querySelector("#addIngredients");
let addIngredientsDiv = document.getElementById("addIngredientList");
let categoryTemplate = document.getElementById("addIngredientsCategory");
let ingredientTemplate = document.getElementById("addIngredientsIngredient");
fetch("/ingredients")
.then((response) => response.json())
.then((response)=>{
if(typeof(response) === "string"){
banner.createError(response);
}else{
let categories = categorizeIngredientsFromDB(response);
this.addIngredientsDiv = [];
for(let i = 0; i < categories.length; i++){
let categoryDiv = categoryTemplate.content.children[0].cloneNode(true);
categoryDiv.children[0].children[0].innerText = categories[i].name;
categoryDiv.children[0].children[1].onclick = ()=>{this.toggleAddIngredient(categoryDiv)};
categoryDiv.children[1].style.display = "none";
categoryDiv.children[0].children[1].children[1].style.display = "none";
addIngredientsDiv.appendChild(categoryDiv);
for(let j = 0; j < categories[i].ingredients.length; j++){
let ingredientDiv = ingredientTemplate.content.children[0].cloneNode(true);
ingredientDiv.children[1].innerText = categories[i].ingredients[j].name;
ingredientDiv._id = categories[i].ingredients[j].id;
ingredientDiv._name = categories[i].ingredients[j].name;
ingredientDiv._unit = categories[i].ingredients[j].unit;
ingredientDiv._category = categories[i].name;
categoryDiv.children[1].appendChild(ingredientDiv);
this.addIngredientsDiv.push(ingredientDiv);
}
}
}
})
.catch((err)=>{
banner.createError("Unable to retrieve data");
});
openSidebar(sidebar);
},
toggleAddIngredient: function(categoryElement){
let button = categoryElement.children[0].children[1];
let ingredientDisplay = categoryElement.children[1];
if(ingredientDisplay.style.display === "none"){
ingredientDisplay.style.display = "flex";
button.children[0].style.display = "none";
button.children[1].style.display = "block";
}else{
ingredientDisplay.style.display = "none";
button.children[0].style.display = "block";
button.children[1].style.display = "none";
}
},
displayIngredient: function(ingredient, category){
sidebar = document.querySelector("#ingredientDetails");
openSidebar(sidebar);
document.querySelector("#ingredientDetails p").innerText = category.name;
document.querySelector("#ingredientDetails h1").innerText = ingredient.name;
document.querySelector("#ingredientStock").innerText = `${ingredient.quantity} ${ingredient.unit}`;
let quantities = [];
let now = new Date();
for(let i = 1; i < 31; i++){
let endDay = new Date(now.getFullYear(), now.getMonth(), now.getDate() - i)
let startDay = new Date(now.getFullYear(), now.getMonth(), now.getDate() - i - 1);
quantities.push(ingredientSold(dateIndices(startDay, endDay), ingredient.id));
}
let sum = 0;
for(let quantity of quantities){
sum += quantity;
}
document.querySelector("#dailyUse").innerText = `${(sum/quantities.length).toFixed(2)} ${ingredient.unit}`;
},
submitAddIngredients: function(){
let addIngredients = [];
for(let i = 0; i < this.addIngredientsDiv.length; i++){
let ingredient = this.addIngredientsDiv[i];
if(ingredient.children[0].checked){
if(!validator.ingredient.quantity(ingredient.children[2].value)){
return;
}
addIngredients.push({
ingredient: {
_id: ingredient._id,
name: ingredient._name,
category: ingredient._category,
unit: ingredient._unit
},
quantity: ingredient.children[2].value,
});
}
}
fetch("/merchant/ingredients/add", {
method: "PUT",
headers: {
"Content-Type": "application/json;charset=utf-8"
},
body: JSON.stringify(addIngredients)
})
.then((response)=>{
if(typeof(response.data) === "string"){
banner.createError(response.data);
}else{
banner.createNotification("Ingredients added");
updateInventory(addIngredients);
}
})
.catch((err)=>{
console.log(err);
banner.createError("Unable to update data. Please refresh the page");
});
}
}