function calculateTotal() { let baseFee = 0; if(currentCustomerType == "newTeam"){ baseFee = 80000; } else if(currentCustomerType == "newPlayer") { baseFee = 20000; } else if(currentCustomerType == "existingCustomer") { baseFee = 0; } else if(currentCustomerType == "patron") { baseFee = 0; } let fee = 0; for(let product of products) { let quantityDiv = product.querySelector(".product-element.unit-counter"); let quantity = parseInt(quantityDiv.innerText); let price = parseInt(product.getAttribute("price")) * 100; fee += quantity * price; } total.setAttribute("total", (baseFee + fee)); total.innerText = "$" + ((baseFee + fee) / 100).toFixed(2); } function generateProductsPanel(products) { let productList = []; let groups = {"Team": false, "Tickets": false, "Merch": false}; for(const product of products) { if(product.group != null) { groups[product.group] = true; } } for(let group in groups) { if(groups[group] == true) { const groupDiv = document.createElement("div"); groupDiv.id = "group_" + group; groupDiv.classList.add("product-group"); groupDiv.innerText = group; productPanel.append(groupDiv); } } for(const product of products) { if(product.backendProduct == true) { backendProducts[product.handle] = product.squareId; continue; } const productDiv = document.createElement("div"); productDiv.id = "product_" + product.handle; productDiv.classList.add("product"); productDiv.classList.add(product.group.toLowerCase() + "-record"); productDiv.setAttribute ( "price", product.price ); productDiv.setAttribute ( "capacity", product.capacity ); productDiv.setAttribute ("team-product", product.teamProduct); productDiv.setAttribute ( "handle", product.handle ); productDiv.setAttribute ( "square-id", product.squareId ); let productHtml = `
${product.name}
-
0
+
$${product.price}
?
${product.description}
` productDiv.innerHTML = productHtml; const unitCounter = productDiv.getElementsByClassName("unit-counter")[0]; const decrementer = productDiv.getElementsByClassName("decrement-button")[0]; const incrementer = productDiv.getElementsByClassName("increment-button")[0]; decrementer.addEventListener('click', e => { e.preventDefault() if(!decrementer.classList.contains("button-disabled")){ adjustUnits(-1); } }); incrementer.addEventListener('click', e => { e.preventDefault() if(!incrementer.classList.contains("button-disabled")){ adjustUnits(1); } }); function adjustUnits (unitsToAdjust) { let units = parseInt(unitCounter.innerText) + unitsToAdjust; unitCounter.innerText = units; if(units == 0) { decrementer.classList.add("button-disabled"); incrementer.classList.remove("button-disabled"); unitCounter.classList.remove("bold"); } else { unitCounter.classList.add("bold"); decrementer.classList.remove("button-disabled"); if(units < parseInt(unitCounter.getAttribute("capacity"))) { incrementer.classList.remove("button-disabled"); } else { incrementer.classList.add("button-disabled"); } } calculateTotal(); } const groupDiv = document.getElementById("group_" + product.group); groupDiv.append(productDiv); productList.push(productDiv); } return productList; } function appendPreviousPurchaserOptions(purchasers) { for(let purchaser of purchasers) { let purchaserName = purchaser.customer; let option = document.createElement('option'); option.value = purchaserName; option.innerHTML = purchaserName; previousPurchaserSelector.appendChild(option); customers[purchaserName] = purchaser.items; } customers["(select)"] = {}; } function initiateCheckout() { checkoutButton.innerText = "Loading..." let body = {}; let items = []; for(let product of products) { const unitCounter = product.getElementsByClassName("unit-counter")[0]; let units = parseInt(unitCounter.innerText); if(units > 0) { let item = { "catalog_object_id": product.getAttribute("square-id"), "quantity": String(units), "metadata": { "sku": product.getAttribute("handle") } } items.push(item); } } if(currentCustomerType == "newTeam"){ let players = player1.value + "\n" + player2.value + "\n" + player3.value + "\n" + player4.value; items.push({"catalog_object_id": backendProducts.teamEntry, "quantity": "1", "note": players, "metadata": {"sku": "teamEntry"}}); items.push({"catalog_object_id": backendProducts.dinnerTicket, "quantity": "4", "base_price_money": {"amount": 0, "currency": "USD"}, "metadata": {"sku": "dinnerTicket"}}); body.customer_id = teamName.value; } else if(currentCustomerType == "newPlayer") { items.push({"catalog_object_id": backendProducts.singlePlayerTicket, "quantity": "1", "metadata": {"sku": "singlePlayerTicket"}}); items.push({"catalog_object_id": backendProducts.dinnerTicket, "quantity": "1", "base_price_money": {"amount": 0, "currency": "USD"}, "metadata": {"sku": "dinnerTicket"}}); body.customer_id = personName.value; } else if(currentCustomerType == "patron") { body.customer_id = personName.value; } else { body.customer_id = previousPurchaserSelector.options[previousPurchaserSelector.selectedIndex].value; } body.metadata = {"type": currentCustomerType, "name": body.customer_id}; body.items = items; fetch('https://5czhapgl7ci2pq225tsx7dsyeq0kfvlr.lambda-url.us-east-2.on.aws/', { method: 'POST', body : JSON.stringify(body) }).then(response => response.json()) .then(response => {handleResponse(response)}); function handleResponse(response) { setTimeout(function(){ if(response.payment_link != null) { window.location.href = response.payment_link.url; } else { checkoutButton.innerText = "Secure Checkout" } }, 1000); } } function updateCapacities() { let currentCustomerItems = customers[previousPurchaserSelector.options[previousPurchaserSelector.selectedIndex].value]; console.log(JSON.stringify(currentCustomerItems)); for(product of products) { const unitCounter = product.getElementsByClassName("unit-counter")[0]; const decrementer = product.getElementsByClassName("decrement-button")[0]; const incrementer = product.getElementsByClassName("increment-button")[0]; if(currentCustomerType == "existingCustomer" && currentCustomerItems != null && currentCustomerItems.hasOwnProperty(product.getAttribute("handle"))) { unitCounter.setAttribute("capacity", parseInt(product.getAttribute("capacity")) - currentCustomerItems[product.getAttribute("handle")]); } else { unitCounter.setAttribute("capacity", product.getAttribute("capacity")); } if(currentCustomerType == "patron" && product.getAttribute("team-product") == "true") { unitCounter.setAttribute("capacity", "0"); } unitCounter.innerText = "0"; decrementer.classList.add("button-disabled"); if(unitCounter.getAttribute("capacity") != "0") { incrementer.classList.remove("button-disabled"); } else { incrementer.classList.add("button-disabled"); } unitCounter.classList.remove("bold"); } calculateTotal(); } const formPanel = document.getElementById("form-panel"); const productPanel = document.getElementById("product-panel"); const teamCreationContainer = document.getElementById("team-creation-container"); const playerCreationContainer = document.getElementById("player-creation-container"); const teamSelectionContainer = document.getElementById("team-selection-container"); const newTeamButton = document.getElementById("new-team-button"); const newPlayerButton = document.getElementById("new-player-button"); const newPatronButton = document.getElementById("new-patron-button"); const selectTeamButton = document.getElementById("select-team-button"); const previousPurchaserSelector = document.getElementById("purchaser-selector"); const teamName = document.getElementById("team-name-input"); const personName = document.getElementById("person-name-input"); const player1 = document.getElementById("player1"); const player2 = document.getElementById("player2"); const player3 = document.getElementById("player3"); const player4 = document.getElementById("player4"); const singlePlayerNote = document.getElementById("single-player-note"); let customers = {}; previousPurchaserSelector.addEventListener("change", e => { e.preventDefault() updateCapacities(); }); const checkoutButton = document.getElementById("checkout-button"); const total = document.getElementById("total"); let currentCustomerType = "newTeam"; let products = []; let backendProducts = {}; let supabaseReadKey = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Indzd2p5YWppZ3B1aXVrcXR1YWlsIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzMxNjYwOTAsImV4cCI6MjA4ODc0MjA5MH0.PbZ_f-K6HJtb_IEhJcgpcYk4axPuHERW_ZNWQs3jufo"; let supaUrl = "https://wswjyajigpuiukqtuail.supabase.co/rest/v1/" fetch(supaUrl + 'esnCupProducts2024?apikey=' + supabaseReadKey + "&order=order.asc", { method: 'GET', }).then(response => response.json()) .then(productsJson => {products = generateProductsPanel(productsJson)}); fetch(supaUrl + 'esnCupCustomers2024?apikey=' + supabaseReadKey + "&order=customer.asc", { method: 'GET', }).then(response => response.json()) .then(customersJson => {appendPreviousPurchaserOptions(customersJson)}); let buttons = new Map(); buttons.set(newTeamButton, teamCreationContainer); buttons.set(newPlayerButton, playerCreationContainer); buttons.set(newPatronButton, playerCreationContainer); buttons.set(selectTeamButton, teamSelectionContainer); for(let [button, container] of buttons) { button.addEventListener('click', e => { e.preventDefault() if(!button.classList.contains("button-selected")){ for(let [button2, container2] of buttons) { button2.classList.remove("button-binary-pressed"); container2.classList.remove("container-active"); } button.classList.add("button-binary-pressed"); container.classList.add("container-active"); } currentCustomerType = button.getAttribute("customerType"); if(currentCustomerType != "newPlayer") { singlePlayerNote.classList.add("hidden"); } else { singlePlayerNote.classList.remove("hidden"); } updateCapacities(); }); } let checkoutTimeout = false; checkoutButton.addEventListener('click', e => { e.preventDefault() if(checkoutTimeout == false && previousPurchaserSelector.options[previousPurchaserSelector.selectedIndex].value != "(select)"){ initiateCheckout(); } checkoutTimeout = true; setTimeout(function(){ checkoutTimeout = false; }, 5000); }); teamCreationContainer.classList.add("container-active"); newTeamButton.classList.add("button-binary-pressed");