!function(){var e={isPopulated:!1,display:function(){this.isPopulated||(this.drawRevenueCard(),this.drawRevenueGraph(),this.drawInventoryCheckCard(),this.drawPopularCard(),this.isPopulated=!0)},drawRevenueCard:function(){let e=new Date,t=new Date(e.getFullYear(),e.getMonth(),1),n=new Date(e.getFullYear(),e.getMonth()-1,1),i=new Date((new Date).setMonth(e.getMonth()-1));const r=merchant.getRevenue(t),s=merchant.getRevenue(n,i);document.getElementById("revenue").innerText="$"+r.toFixed(2);let a=(r-s)/s*100,d="";d=a>=0?"/shared/images/upArrow.png":"/shared/images/downArrow.png",document.querySelector("#revenueChange p").innerText=Math.abs(a).toFixed(2)+"% vs last month",document.querySelector("#revenueChange img").src=d},drawRevenueGraph:function(){let e=new Date;e.setMonth(e.getMonth()-1);let t=[],n=[],i=0;const r=merchant.getTransactions(e);let s=r.length>0?r[0].date:void 0;for(let d=0;d0;)n.removeChild(n.firstChild);for(let r=0;r{s.value--,s.changed=!0},"bottle"===a.ingredient.specialUnit?(s.value=a.quantity.toFixed(2),e.children[2].innerText="BOTTLES"):(s.value=a.quantity.toFixed(2),e.children[2].innerText=a.ingredient.unit.toUpperCase()),e.children[1].children[2].onclick=()=>{s.value++,s.changed=!0},s.onchange=()=>{s.changed=!0},n.appendChild(e)}document.getElementById("inventoryCheck").onclick=()=>{this.submitInventoryCheck()}},drawPopularCard:function(){let e=new Date;e.setDate(1);const t=merchant.getIngredientsSold(e);if(!1!==t){t.sort((e,t)=>e.quantityt.quantity?-1:0);let e=[],n=[],i=[];for(let a=t.length<5?t.length-1:4;a>=0;a--){const r=t[a].ingredient.name,s=t[a].quantity,d=t[a].ingredient.unit;e.push(t[a].quantity),n.push(`${r}: ${s.toFixed(2)} ${d.toUpperCase()}`),0===a?i.push("rgb(255, 99, 107"):i.push("rgb(179, 191, 209")}let r={x:e,type:"bar",orientation:"h",text:n,textposition:"auto",hoverinfo:"none",marker:{color:i}},s={title:"MOST POPULAR INGREDIENTS",xaxis:{zeroline:!1,title:"QUANTITY"},yaxis:{showticklabels:!1}};Plotly.newPlot("popularIngredientsCard",[r],s)}else{document.getElementById("popularCanvas").style.display="none";let e=document.createElement("p");e.innerText="N/A",e.classList="notice",document.getElementById("popularIngredientsCard").appendChild(e)}},submitInventoryCheck:function(){let e=document.querySelectorAll("#inventoryCheckCard li"),t=[],n=[];for(let i=0;i=0))return void banner.createError("CANNOT HAVE NEGATIVE INGREDIENTS");{let r=e[i].ingredient;if(!0===e[i].children[1].children[1].changed){let s=0;s="bottle"===r.ingredient.specialUnit?parseFloat(e[i].children[1].children[1].value)*r.ingredient.unitSize:controller.convertToMain(r.ingredient.unit,parseFloat(e[i].children[1].children[1].value)),t.push({ingredient:r.ingredient,quantity:s}),n.push({id:r.ingredient.id,quantity:s}),e[i].children[1].children[1].changed=!1}}}if(n.length>0){let e=document.getElementById("loaderContainer");e.style.display="flex",fetch("/merchant/ingredients/update",{method:"PUT",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify(n)}).then(e=>e.json()).then(e=>{if("string"==typeof e)banner.createError(e);else{for(let e=0;e{}).finally(()=>{e.style.display="none"})}}};var t={isPopulated:!1,isFetched:!1,display:async function(e){if(!this.isFetched){let t=document.getElementById("loaderContainer");t.style.display="flex",fetch("/order",{method:"GET",headers:{"Content-Type":"application/json;charset=utf-8"}}).then(e=>e.json()).then(t=>{if("string"==typeof t)banner.createError(t);else{for(let n=0;n{this.submitFilter(e)},this.isFetched=!0,this.populate(),this.isPopulated=!0}}).catch(e=>{banner.createError("SOMETHING WENT WRONG. TRY REFRESHING THE PAGE")}).finally(()=>{t.style.display="none"})}this.isPopulated||(this.populate(),this.isPopulated=!0)},populate:function(){let e=document.getElementById("orderList"),t=document.getElementById("order").content.children[0],n=document.getElementById("dateDropdownOrder"),i=document.getElementById("ingredientDropdown");n.style.display="none",i.style.display="none",document.getElementById("dateFilterBtnOrder").onclick=()=>{this.toggleDropdown(n)},document.getElementById("ingredientFilterBtn").onclick=()=>{this.toggleDropdown(i)};for(let r=0;r0;)e.removeChild(e.firstChild);for(let r=0;r{controller.openSidebar("orderDetails",merchant.orders[r])},e.appendChild(n)}},submitFilter:function(){event.preventDefault();let e={startDate:document.getElementById("orderFilDate1").valueAsDate,endDate:document.getElementById("orderFilDate2").valueAsDate,ingredients:[]};if(e.startDate>=e.endDate)return void banner.createError("START DATE CANNOT BE AFTER END DATE");let t=document.getElementById("ingredientDropdown");for(let i=0;ie.json()).then(e=>{if("string"==typeof e)banner.createError(e);else{let t=document.getElementById("orderList"),n=document.getElementById("order").content.children[0];for(;t.children.length>0;)t.removeChild(t.firstChild);for(let i=0;i{controller.openSidebar("orderDetails",s)},t.appendChild(r)}}}).catch(e=>{banner.createError("UNABLE TO DISPLAY THE ORDERS")}).finally(()=>{n.style.display="none"})},toggleDropdown:function(e){event.preventDefault();let t=e.parentElement.children[0].children[1].children[0].children[0];"none"===e.style.display?(e.style.display="block",t.setAttribute("points","18 15 12 9 6 15")):(e.style.display="none",t.setAttribute("points","6 9 12 15 18 9"))}};const{populate:n}=t;var i={isPopulated:!1,ingredients:[],display:function(){this.isPopulated||(document.getElementById("ingredientSearch").oninput=()=>{this.search()},document.getElementById("ingredientClearButton").onclick=()=>{this.clearSorting()},document.getElementById("ingredientSelect").onchange=()=>{this.sort()},this.populateByProperty("category"),this.isPopulated=!0)},populateByProperty:function(e){let t;"category"===e?t=merchant.categorizeIngredients():"unit"===e&&(t=merchant.unitizeIngredients());let n=document.getElementById("categoryList"),i=document.getElementById("categoryDiv").content.children[0],r=document.getElementById("ingredient").content.children[0];for(this.ingredients=[];n.children.length>0;)n.removeChild(n.firstChild);for(let s=0;s{this.toggleCategory(e.children[1],e.children[0].children[1])},e.children[1].style.display="none",n.appendChild(e);for(let n=0;n{controller.openSidebar("ingredientDetails",i)},a._name=i.ingredient.name.toLowerCase(),a._unit=i.ingredient.unit.toLowerCase(),"bottle"===i.ingredient.specialUnit?a.children[2].innerText=i.quantity.toFixed(2)+" BOTTLES":a.children[2].innerText=`${i.quantity.toFixed(2)} ${i.ingredient.unit.toUpperCase()}`,e.children[1].appendChild(a),this.ingredients.push(a)}}},displayIngredientsOnly:function(e){let t=document.getElementById("categoryList");for(;t.children.length>0;)t.removeChild(t.firstChild);for(let n=0;n',e.style.display="flex"):"flex"===e.style.display&&(t.innerHTML='',e.style.display="none")},search:function(){let e=document.getElementById("ingredientSearch").value.toLowerCase();if(document.getElementById("ingredientSelect").selectedIndex=0,""===e)return this.populateByProperty("category"),void(document.getElementById("ingredientClearButton").style.display="none");let t=[];for(let n=0;nt[e]>n[e]?1:-1);this.displayIngredientsOnly(t)},clearSorting:function(e){document.getElementById("ingredientSearch").value="",document.getElementById("ingredientSelect").selectedIndex=0,document.getElementById("ingredientClearButton").style.display="none",this.populateByProperty("category")}};var r={isPopulated:!1,recipeDivList:[],display:function(e){this.isPopulated||(this.populateRecipes(),"none"!==merchant.pos&&(document.getElementById("posUpdateRecipe").onclick=()=>{this.posUpdate(e)}),document.getElementById("recipeSearch").oninput=()=>{this.search()},document.getElementById("recipeClearButton").onclick=()=>{this.clearSorting()},this.populateRecipes(),this.isPopulated=!0)},populateRecipes:function(){let e=document.getElementById("recipeList"),t=document.getElementById("recipe").content.children[0];for(this.recipeDivList=[];e.children.length>0;)e.removeChild(e.firstChild);for(let n=0;n{controller.openSidebar("recipeDetails",merchant.recipes[n])},i._name=merchant.recipes[n].name,e.appendChild(i),i.children[0].innerText=merchant.recipes[n].name,i.children[1].innerText="$"+merchant.recipes[n].price.toFixed(2),this.recipeDivList.push(i)}},search:function(){let e=document.getElementById("recipeSearch").value.toLowerCase(),t=document.getElementById("recipeList"),n=document.getElementById("recipeClearButton"),i=[];for(let r=0;r0;)t.removeChild(t.firstChild);for(let r=0;re.json()).then(t=>{for(let n=0;n{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{t.style.display="none"})}};var s={newData:!1,dateChange:!1,transactions:[],ingredient:{},recipe:{},display:function(e){if(document.getElementById("analDateBtn").onclick=()=>{this.changeDates(e)},0===this.transactions.length||!0===this.newData){let e=new Date;e.setMonth(e.getMonth()-1),this.transactions=merchant.getTransactions(e)}let t=document.getElementById("analSlider");t.onchange=()=>{this.display(e)};let n=document.getElementById("analIngredientContent"),i=document.getElementById("analRecipeContent");t.checked?(n.style.display="none",i.style.display="flex",this.displayRecipes()):(n.style.display="flex",i.style.display="none",this.displayIngredients())},displayIngredients:function(){const e=document.getElementById("itemsList");for(;e.children.length>0;)e.removeChild(e.firstChild);for(let t=0;t{const e=document.getElementById("itemsList");for(let t=0;t0;)e.removeChild(e.firstChild);for(let t=0;t{let e=document.getElementById("analRecipeList");for(let t=0;t0?this.transactions[0].date:void 0,r=0;for(let u=0;u0?t[0]:0;for(let u=0;ul?l=t[u]:t[u]0&&(e=this.transactions[0].date);for(let d=0;dt.to||""===t.from||""===t.to||t.to>new Date)return void banner.createError("INVALID DATE");let n=document.getElementById("loaderContainer");n.style.display="flex",fetch("/transaction/retrieve",{method:"post",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify(t)}).then(e=>e.json()).then(t=>{if("string"==typeof t)banner.createError(t.data);else{this.transactions=[];for(let i=0;i{banner.createError("ERROR: UNABLE TO DISPLAY THE DATA")}).finally(()=>{n.style.display="none"})}};var a={isPopulated:!1,display:function(e){if(!this.isPopulated){let t=document.getElementById("transactionsList"),n=document.getElementById("dateDropdown"),i=document.getElementById("recipeDropDown"),r=document.getElementById("transaction").content.children[0],s=new Date,a=new Date(s.getFullYear(),s.getMonth()-1,s.getDate());for(document.getElementById("transFilDate1").valueAsDate=a,document.getElementById("transFilDate2").valueAsDate=s,n.style.display="none",i.style.display="none",document.getElementById("dateFilterBtn").onclick=()=>{this.toggleDropdown(n)},document.getElementById("recipeFilterBtn").onclick=()=>{this.toggleDropdown(i)};i.children.length>0;)i.removeChild(i.firstChild);for(let e=0;e0;)t.removeChild(t.firstChild);let d=0;const l=merchant.getTransactions();for(;d{controller.openSidebar("transactionDetails",n)},t.appendChild(e);let i=0,s=0;for(let t=0;t{this.submitFilter(e)},this.isPopulated=!0}},submitFilter:function(e){event.preventDefault();let t={startDate:document.getElementById("transFilDate1").valueAsDate,endDate:document.getElementById("transFilDate2").valueAsDate,recipes:[]};if(t.startDate>=t.endDate)return void banner.createError("START DATE CANNOT BE AFTER END DATE");let n=document.getElementById("recipeDropDown");for(let r=0;re.json()).then(t=>{if("string"==typeof t)banner.createError(t);else{let n=document.getElementById("transactionsList"),i=document.getElementById("transaction").content.children[0];for(;n.children.length>0;)n.removeChild(n.firstChild);for(let r=0;r{controller.openSidebar("transactionDetails",l)},n.appendChild(s)}}}).catch(e=>{banner.createError("UNABLE TO DISPLAY THE TRANSACTIONS")}).finally(()=>{i.style.display="none"})},toggleDropdown:function(e){event.preventDefault();let t=e.parentElement.children[0].children[1].children[0].children[0];"none"===e.style.display?(e.style.display="block",t.setAttribute("points","18 15 12 9 6 15")):(e.style.display="none",t.setAttribute("points","6 9 12 15 18 9"))}};var d={dailyUse:0,display:function(e){document.getElementById("editIngBtn").onclick=()=>{controller.openSidebar("editIngredient",e)},document.getElementById("removeIngBtn").onclick=()=>{this.remove(e)},document.getElementById("ingredientDetailsCategory").innerText=e.ingredient.category,document.getElementById("ingredientDetailsName").innerText=e.ingredient.name,document.getElementById("ingredientStock").innerText=e.getQuantityDisplay();let t=[],n=new Date;for(let l=1;l<31;l++){let i=new Date(n.getFullYear(),n.getMonth(),n.getDate()-l),r=new Date(n.getFullYear(),n.getMonth(),n.getDate()-l-1);t.push(merchant.getSingleIngredientSold(e,r,i))}let i=0;for(let l=0;l0;)a.removeChild(a.firstChild);for(let l=0;l{controller.openStrand("recipeBook"),controller.openSidebar("recipeDetails",d[l])},a.appendChild(e)}},remove:function(e){for(let n=0;ne.json()).then(t=>{"string"==typeof t?banner.createError(t):(merchant.removeIngredient(e),controller.openStrand("ingredients"),banner.createNotification("INGREDIENT REMOVED"))}).catch(e=>{}).finally(()=>{t.style.display="none"})}};var l={display:function(e){const t=document.getElementById("unitSelector");document.getElementById("newIngName").value="",document.getElementById("newIngCategory").value="",document.getElementById("newIngQuantity").value=0,document.getElementById("bottleSizeLabel").style.display="none",t.value="g",t.onchange=()=>{this.unitChange()},document.getElementById("submitNewIng").onclick=()=>{this.submit(e)}},unitChange:function(){const e=document.getElementById("unitSelector"),t=document.getElementById("bottleSizeLabel");"bottle"===e.value?t.style.display="block":t.style.display="none"},submit:function(e){let t=document.getElementById("unitSelector"),n=document.querySelectorAll("#unitSelector option");const r=parseFloat(document.getElementById("newIngQuantity").value);let s=t.value,a={ingredient:{name:document.getElementById("newIngName").value,category:document.getElementById("newIngCategory").value,unitType:n[t.selectedIndex].getAttribute("type")},quantity:r,defaultUnit:s};"bottle"===s&&(a.ingredient.unitType="volume",a.ingredient.unitSize=document.getElementById("bottleSize").value,a.defaultUnit=document.getElementById("bottleUnits").value,a.ingredient.specialUnit=s,a.quantity=r);let d=document.getElementById("loaderContainer");d.style.display="flex",fetch("/ingredients/create",{method:"POST",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify(a)}).then(e=>e.json()).then(t=>{if("string"==typeof t)banner.createError(t);else{const n=new e(t.ingredient._id,t.ingredient.name,t.ingredient.category,t.ingredient.unitType,t.defaultUnit,merchant,t.ingredient.specialUnit,t.ingredient.unitSize);merchant.addIngredient(n,t.quantity),i.display(),controller.closeSidebar(),banner.createNotification("INGREDIENT CREATED")}}).catch(e=>{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{d.style.display="none"})}},c=class{constructor(e,t,n,i,r,s,a,d){return this.isSanitaryString(t)?this.isSanitaryString(n)?(this._id=e,this._name=t,this._category=n,this._unitType=i,this._unit=r,this._parent=s,void(a&&(this._specialUnit=a,this._unitSize=d))):(banner.createError("CATEGORY CONTAINS ILLEGAL CHARACTERS"),!1):(banner.createError("NAME CONTAINS ILLEGAL CHARCTERS"),!1)}get id(){return this._id}get name(){return this._name}set name(e){if(!this.isSanitaryString(e))return!1;this._name=e}get category(){return this._category}set category(e){if(!this.isSanitaryString(e))return!1;this._category=e}get unitType(){return this._unitType}get unit(){return this._unit}set unit(e){this._unit=e}get parent(){return this._parent}get specialUnit(){return this._specialUnit}get unitSize(){switch(this._unit){case"g":return this._unitSize;case"kg":return this._unitSize/1e3;case"oz":return this._unitSize/28.3495;case"lb":return this._unitSize/453.5924;case"ml":return 1e3*this._unitSize;case"l":return this._unitSize;case"tsp":return 202.8842*this._unitSize;case"tbsp":return 67.6278*this._unitSize;case"ozfl":return 33.8141*this._unitSize;case"cup":return 4.1667*this._unitSize;case"pt":return 2.1134*this._unitSize;case"qt":return 1.0567*this._unitSize;case"gal":return this._unitSize/3.7854;case"mm":return 1e3*this._unitSize;case"cm":return 100*this._unitSize;case"m":return this._unitSize;case"in":return 39.3701*this._unitSize;case"ft":return 3.2808*this._unitSize;default:return this._unitSize}}set unitSize(e){if(e<0)return!1;this._unitSize=e}getNameAndUnit(){return"bottle"===this._specialUnit?this._name+" (BOTTLES)":`${this._name} (${this._unit.toUpperCase()})`}isSanitaryString(e){let t=["\\","<",">","$","{","}","(",")"];for(let n=0;n0;)t.removeChild(t.firstChild);document.getElementById("editIngTitle").innerText=e.ingredient.name,document.getElementById("editIngName").value=e.ingredient.name,document.getElementById("editIngCategory").value=e.ingredient.category,n.innerText=`CURRENT STOCK (${e.ingredient.unit.toUpperCase()})`,document.getElementById("editIngSubmit").onclick=()=>{this.submit(e)};const r=merchant.units[e.ingredient.unitType];for(let a=0;a{this.changeUnit(n)},t.appendChild(n),r[a]===e.ingredient.unit&&n.classList.add("unitActive")}if("bottle"===e.ingredient.specialUnit){n.innerText="CURRENT STOCK (BOTTLES):",i.style.display="flex",i.innerText=`BOTTLE SIZE (${e.ingredient.unit.toUpperCase()}):`;let t=document.createElement("input");t.id="editIngSpecialSize",t.type="number",t.min="0",t.step="0.01",t.value=e.ingredient.unitSize.toFixed(2),i.appendChild(t)}else i.style.display="none";let s=document.createElement("input");s.id="editIngQuantity",s.type="number",s.min="0",s.step="0.01",s.value=e.quantity.toFixed(2),n.appendChild(s)},changeUnit(e){let t=document.getElementById("unitButtons");for(let n=0;ne.json()).then(t=>{"string"==typeof t?banner.createError(t):(e.ingredient.name=t.ingredient.name,e.ingredient.category=t.ingredient.category,e.ingredient.unitSize=t.ingredient.unitSize,e.ingredient.unit=t.unit,merchant.updateIngredient(e,t.quantity),controller.openStrand("ingredients"),banner.createNotification("INGREDIENT UPDATED"))}).catch(e=>{banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE")}).finally(()=>{r.style.display="none"})}};var h={display:function(e){document.getElementById("sidebarDiv").classList.add("sidebarWide"),document.getElementById("newOrderIngredientList").style.display="flex";let t=document.getElementById("selectedIngredientList");for(;t.children.length>0;)t.removeChild(t.firstChild);let n=document.getElementById("newOrderIngredients");for(;n.children.length>0;)n.removeChild(n.firstChild);for(let i=0;i{this.addIngredient(merchant.ingredients[i],e)},n.appendChild(e)}document.getElementById("submitNewOrder").onclick=()=>{this.submit(e)}},addIngredient:function(e,t){t.style.display="none";let n=document.getElementById("selectedIngredient").content.children[0].cloneNode(!0);n.ingredient=e,n.children[0].children[1].onclick=()=>{this.removeIngredient(n,t)},"bottle"===e.ingredient.specialUnit?n.children[0].children[0].innerText=e.ingredient.name+" (BOTTLES)":n.children[0].children[0].innerText=`${e.ingredient.name} (${e.ingredient.unit.toUpperCase()})`,document.getElementById("selectedIngredientList").appendChild(n)},removeIngredient:function(e,t){e.parentElement.removeChild(e),t.style.display="block"},submit:function(e){let t=document.getElementById("newOrderDate").value,n=100*document.getElementById("orderTaxes").value,i=100*document.getElementById("orderFees").value,r=document.getElementById("selectedIngredientList").children;if(""===t)return void banner.createError("DATE IS REQUIRED FOR ORDERS");let s={name:document.getElementById("newOrderName").value,date:t,taxes:n,fees:i,ingredients:[]};for(let d=0;de.json()).then(t=>{if("string"==typeof t)banner.createError(t);else{console.log(t);let n=[];for(let e=0;e{console.log(e),banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE")}).finally(()=>{a.style.display="none"})},convertPrice:function(e,t){if("bottle"===e.specialUnit)return t/e.unitSize;switch(e.unit){case"g":return t;case"kg":return t/1e3;case"oz":return t/28.3495;case"lb":return t/453.5924;case"ml":return 1e3*t;case"l":return t;case"tsp":return 202.8842*t;case"tbsp":return 67.6278*t;case"ozfl":return 33.8141*t;case"cup":return 4.1667*t;case"pt":return 2.1134*t;case"qt":return 1.0567*t;case"gal":return t/3.7854;case"mm":return 1e3*t;case"cm":return 100*t;case"m":return t;case"in":return 39.3701*t;case"ft":return 3.2808*t}}};var u={display:function(e){let t=document.querySelector("#recipeInputIngredients select"),n=merchant.categorizeIngredients();for(;t.children.length>0;)t.removeChild(t.firstChild);for(let i=0;i{this.changeRecipeCount()},document.getElementById("submitNewRecipe").onclick=()=>{this.submit(e)}},changeRecipeCount:function(){let e=document.getElementById("ingredientCount").value,t=document.getElementById("recipeInputIngredients"),n=t.children.length;if(e>n){let i=e-n;for(let e=0;e div");for(let r=0;re.json()).then(t=>{if("string"==typeof t)banner.createError(t);else{let n=[];for(let e=0;e{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{i.style.display="none"})}};var g={display:function(e){let t=document.getElementById("editRecipeName");"none"===merchant.pos?t.value=e.name:(document.getElementById("editRecipeNoName").innertext=e.name,t.parentNode.style.display="none");let n=document.getElementById("editRecipeIngList");for(;n.children.length>0;)n.removeChild(n.firstChild);let i=document.getElementById("editRecipeIng").content.children[0];for(let r=0;r{t.parentNode.removeChild(t)},t.children[1].innerText=e.ingredients[r].ingredient.getNameAndUnit(),t.children[2].style.display="none",t.children[3].value=e.ingredients[r].quantity,t.ingredient=e.ingredients[r],n.appendChild(t)}document.getElementById("addRecIng").onclick=()=>{this.newIngredient()},document.getElementById("editRecipePrice").value=e.price,document.getElementById("editRecipeSubmit").onclick=()=>{this.submit(e)},document.getElementById("editRecipeCancel").onclick=()=>{controller.openSidebar("recipeDetails",e)}},newIngredient:function(){let e=document.getElementById("editRecipeIngList"),t=document.getElementById("editRecipeIng").content.children[0].cloneNode(!0);t.children[0].onclick=()=>{t.parentNode.removeChild(t)},t.children[1].style.display="none",t.children[3].value="0.00";let n=merchant.categorizeIngredients();for(let i=0;ie.json()).then(e=>{"string"==typeof e?banner.createError(e):(merchant.updateRecipe(e),controller.openStrand("recipeBook"))}).catch(e=>{banner.createError("SOMETHING WENT WRONG, PLEASE REFRESH THE PAGE")}).finally(()=>{i.style.display="none"})}};var p={display:function(e){let t=document.getElementById("newTransactionRecipes"),n=document.getElementById("createTransaction").content.children[0];for(;t.children.length>0;)t.removeChild(t.firstChild);for(let i=0;i{this.submit(e)}},submit:function(e){let t=document.getElementById("newTransactionRecipes"),n=document.getElementById("newTransactionDate").valueAsDate;if(n>new Date)return void banner.createError("CANNOT HAVE A DATE IN THE FUTURE");let i={date:n,recipes:[],ingredientUpdates:{}};for(let r=0;r0)i.recipes.push({recipe:n.id,quantity:e});else if(e<0)return void banner.createError("CANNOT HAVE NEGATIVE VALUES")}if(i.recipes.length>0){let t=document.getElementById("loaderContainer");t.style.display="flex",fetch("/transaction/create",{method:"post",headers:{"Content-Type":"application/json;charset=utf-8"},body:JSON.stringify(i)}).then(e=>e.json()).then(t=>{if("string"==typeof t)banner.createError(t);else{const n=new e(t._id,t.date,t.recipes,merchant);merchant.addTransaction(n),controller.openStrand("transactions"),banner.createNotification("TRANSACTION CREATED")}}).catch(e=>{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{t.style.display="none"})}}};var m={display:function(e){document.getElementById("removeOrderBtn").onclick=()=>{this.remove(e)},document.getElementById("orderDetailName").innerText=e.name,document.getElementById("orderDetailDate").innerText=e.date.toLocaleDateString("en-US"),document.getElementById("orderDetailTax").innerText="$"+e.taxes.toFixed(2),document.getElementById("orderDetailFee").innerText="$"+e.fees.toFixed(2);let t=document.getElementById("orderIngredients");for(;t.children.length>0;)t.removeChild(t.firstChild);let n=document.getElementById("orderIngredient").content.children[0];for(let i=0;ie.json()).then(t=>{"string"==typeof t?banner.createError(t):(merchant.removeOrder(e),controller.openStrand("orders"),banner.createNotification("ORDER REMOVED"))}).catch(e=>{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{t.style.display="none"})}};var y={display:function(e){document.getElementById("editRecipeBtn").onclick=()=>{controller.openSidebar("editRecipe",e)},document.getElementById("removeRecipeBtn").onclick=()=>{this.remove(e)},document.getElementById("recipeName").innerText=e.name;let t=document.getElementById("recipeIngredientList");for(;t.children.length>0;)t.removeChild(t.firstChild);let n=document.getElementById("recipeIngredient").content.children[0];for(let i=0;ie.json()).then(t=>{"string"==typeof t?banner.createError(t):(merchant.removeRecipe(e),banner.createNotification("RECIPE REMOVED"),controller.openStrand("recipeBook"))}).catch(e=>{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{t.style.display="none"})},displayAddIngredient:function(){let e=document.getElementById("addRecIngredient").content.children[0].cloneNode(!0);e.name="new",document.getElementById("recipeIngredientList").appendChild(e);let t=merchant.categorizeIngredients();for(let n=0;n0;)t.removeChild(t.firstChild);for(let a=0;a{this.remove()})},remove:function(){let e=document.getElementById("loaderContainer");e.style.display="flex",fetch("/transaction/"+this.transaction.id,{method:"delete",headers:{"Content-Type":"application/json;charset=utf-8"}}).then(e=>e.json()).then(e=>{"string"==typeof e?banner.createError(e):(merchant.removeTransaction(this.transaction),controller.openStrand("transactions"),banner.createNotification("TRANSACTION REMOVED"))}).catch(e=>{banner.createError("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE")}).finally(()=>{e.style.display="none"})}};class f{constructor(e,t){if(t<0)return banner.createError("QUANTITY CANNOT BE A NEGATIVE NUMBER"),!1;this._quantity=t,this._ingredient=e}get ingredient(){return this._ingredient}get quantity(){if("bottle"===this._ingredient.specialUnit)return this._quantity/this._ingredient._unitSize;switch(this._ingredient.unit){case"g":return this._quantity;case"kg":return this._quantity/1e3;case"oz":return this._quantity/28.3495;case"lb":return this._quantity/453.5924;case"ml":return 1e3*this._quantity;case"l":return this._quantity;case"tsp":return 202.8842*this._quantity;case"tbsp":return 67.6278*this._quantity;case"ozfl":return 33.8141*this._quantity;case"cup":return 4.1667*this._quantity;case"pt":return 2.1134*this._quantity;case"qt":return 1.0567*this._quantity;case"gal":return this._quantity/3.7854;case"mm":return 1e3*this._quantity;case"cm":return 100*this._quantity;case"m":return this._quantity;case"in":return 39.3701*this._quantity;case"ft":return 3.2808*this._quantity;default:return this._quantity}}set quantity(e){if(e<0)return!1;this._quantity=e}convertToBase(e){switch(this._ingredient.unit){case"g":return e;case"kg":return 1e3*e;case"oz":return 28.3495*e;case"lb":return 453.5924*e;case"ml":return e/1e3;case"l":return e;case"tsp":return e/202.8842;case"tbsp":return e/67.6278;case"ozfl":return e/33.8141;case"cup":return e/4.1667;case"pt":return e/2.1134;case"qt":return e/1.0567;case"gal":return 3.7854*e;case"mm":return e/1e3;case"cm":return e/100;case"m":return e;case"in":return e/39.3701;case"ft":return e/3.2808;default:return e}}getQuantityDisplay(){return"bottle"===this._ingredient.specialUnit?this.quantity.toFixed(2)+" BOTTLES":`${this.quantity.toFixed(2)} ${this._ingredient.unit.toUpperCase()}`}}class I{constructor(e,t){if(t<0)return banner.createError("QUANTITY CANNOT BE A NEGATIVE NUMBER"),!1;this._ingredient=e,this._quantity=t}get ingredient(){return this._ingredient}get quantity(){switch(this._ingredient.unit){case"g":return this._quantity;case"kg":return this._quantity/1e3;case"oz":return this._quantity/28.3495;case"lb":return this._quantity/453.5924;case"ml":return 1e3*this._quantity;case"l":return this._quantity;case"tsp":return 202.8842*this._quantity;case"tbsp":return 67.6278*this._quantity;case"ozfl":return 33.8141*this._quantity;case"cup":return 4.1667*this._quantity;case"pt":return 2.1134*this._quantity;case"qt":return 1.0567*this._quantity;case"gal":return this._quantity/3.7854;case"mm":return 1e3*this._quantity;case"cm":return 100*this._quantity;case"m":return this._quantity;case"in":return 39.3701*this._quantity;case"ft":return 3.2808*this._quantity;default:return this._quantity}}set quantity(e){if(e<0)return banner.createError("QUANTITY CANNOT BE A NEGATIVE NUMBER"),!1;this_quantity=this.convertToBase(e)}getQuantityDisplay(){return"bottle"===this._ingredient.specialUnit?this.quantity.toFixed(2)+" BOTTLES":`${this.quantity.toFixed(2)} ${this._ingredient.unit.toUpperCase()}`}convertToBase(e){switch(this._ingredient.unit){case"g":return e;case"kg":return 1e3*e;case"oz":return 28.3495*e;case"lb":return 453.5924*e;case"ml":return e/1e3;case"l":return e;case"tsp":return e/202.8842;case"tbsp":return e/67.6278;case"ozfl":return e/33.8141;case"cup":return e/4.1667;case"pt":return e/2.1134;case"qt":return e/1.0567;case"gal":return 3.7854*e;case"mm":return e/1e3;case"cm":return e/100;case"m":return e;case"in":return e/39.3701;case"ft":return e/3.2808;default:return e}}}var _=class{constructor(e,t,n,i,r){if(n<0)return banner.createError("PRICE CANNOT BE A NEGATIVE NUMBER"),!1;if(!this.isSanitaryString(t))return banner.createError("NAME CONTAINS ILLEGAL CHARACTERS"),!1;this._id=e,this._name=t,this._price=n,this._parent=r,this._ingredients=[];for(let s=0;s","$","{","}","(",")"];for(let n=0;nnew Date)return!1;for(let d=0;d","$","{","}","(",")"];for(let n=0;nnew Date)return banner.createError("DATE CANNOT BE SET TO THE FUTURE"),!1;this._id=e,this._parent=i,this._date=t,this._recipes=[];for(let r=0;re.date>t.date?-1:1);let t={};for(let i=0;i=0;r--)if(this._transactions[r].date>=e){n=r;break}for(let r=0;r","$","{","}","(",")"];for(let n=0;n{document.getElementById("max").style.display="flex",document.getElementById("min").style.display="none"},150)}}else{e.classList="menu menuMinimized";for(let e=0;e{this.closeMenu()}},closeMenu:function(){document.getElementById("menu").style.display="none",document.querySelector(".contentBlock").style.display="flex",document.getElementById("mobileMenuSelector").onclick=()=>{this.openMenu()}},reconvertPrice(e,t,n){if("mass"===e)switch(t){case"g":break;case"kg":n*=1e3;break;case"oz":n*=28.3495;break;case"lb":n*=453.5924}else if("volume"===e)switch(t){case"ml":n/=1e3;break;case"l":break;case"tsp":n/=202.8842;break;case"tbsp":n/=67.6278;break;case"ozfl":n/=33.8141;break;case"cup":n/=4.1667;break;case"pt":n/=2.1134;break;case"qt":n/=1.0567;break;case"gal":n*=3.7854}else if("length"===e)switch(t){case"mm":n/=1e3;break;case"cm":n/=100;break;case"m":break;case"in":n/=39.3701;break;case"ft":n/=3.2808}return n}},window.screen.availWidth>1e3&&window.screen.availWidth<=1400&&(this.changeMenu(),document.getElementById("menuShifter2").style.display="none"),controller.openStrand("home")}();