(function(orderFactory, $){ Storage.prototype.setObject = function(key, value) { this.setItem(key, JSON.stringify(value)); } Storage.prototype.getObject = function(key) { return JSON.parse(this.getItem(key)); } orderFactory.checkValidUser = function(userID){ var order = orderFactory.retrieveOrderFromSession(); if (order != null && order.order.contactid != userID){ orderFactory.saveOrderToSession(null); } } orderFactory.retrieveOrderFromSession = function (){ var polled = localStorage.getItem("lastPolled"); var dateLimit = new Date(Date.now() - (3600 * 1000 * 24)); if (!polled) return null; var dateRefreshed = new Date(polled); if (dateRefreshed > dateLimit) { localStorage.setItem("lastPolled", orderFactory.getTimeStamp()); return localStorage.getObject("order"); } else { orderFactory.saveOrderToSession(null); return null; } }; orderFactory.saveOrderToSession = function(order){ localStorage.setObject("order",order); localStorage.setItem("lastPolled", order == null? null: orderFactory.getTimeStamp()); }; orderFactory.getAttendee = function(attendeeid){ var order = orderFactory.retrieveOrderFromSession(); return order.order.lines[attendeeid]; } orderFactory.getTimeStamp = function() { var now = new Date(); return ((now.getMonth() + 1) + '/' + (now.getDate()) + '/' + now.getFullYear() + " " + now.getHours() + ':' + ((now.getMinutes() < 10) ? ("0" + now.getMinutes()) : (now.getMinutes())) + ':' + ((now.getSeconds() < 10) ? ("0" + now.getSeconds()) : (now.getSeconds()))); }; orderFactory.upsertOrderToCRM = async function (url){ var order = orderFactory.retrieveOrderFromSession(); if(order != null){ var id= null; const response = await fetch(url, { method: 'POST', mode: 'cors', cache: 'no-cache', credentials: 'omit', headers: { 'Content-Type': 'application/json' }, redirect: 'follow', referrerPolicy: 'no-referrer', body: JSON.stringify(order) }); var jsonResponse = await response.json(); order.order.id = jsonResponse.SalesOrderId; orderFactory.saveOrderToSession(order); return order.order.id; } }; orderFactory.retrieveOrderFromCRM = async function(url){ var order = orderFactory.retrieveOrderFromSession(); url=url+"&orderid=" + order.order.id; const response = await fetch(url, { method: 'Get', mode: 'cors', cache: 'no-cache', credentials: 'omit', redirect: 'follow', referrerPolicy: 'no-referrer' }); order = await response.json(); orderFactory.saveOrderToSession(order); return(order); }; orderFactory.applyDiscountCode= function(discount){ var order = orderFactory.retrieveOrderFromSession(); order.order.checkoutDiscountCode = discount; order.order.isUpdated= true; orderFactory.saveOrderToSession(order); } orderFactory.clearOrdersInSession = function(){ orderFactory.saveOrderToSession(null); }; orderFactory.addProduct = function(productId, eventId, userId, userFullName, eventStartDate, eventEndDate, eventDescription, eventLocation, name, eventRegion, seats, eventName, duration){ var order = orderFactory.retrieveOrderFromSession(); if (order == null){ order = {}; order.order = {}; order.order.orderType = 498400001; order.order.paymentType = null; order.order.orderStatus = 0; order.order.orderStatusReason=1; order.order.checkoutDiscountCode=null; order.order.products = []; order.order.contactid = userId; order.order.lines = []; order.order.isUpdated= true; } var productsInOrder = order.order.products; if (productsInOrder.filter(e => e.id === productId && e.eventId=== eventId).length == 0) { var nextIndex = productsInOrder.length == 0 ? 0 : Math.max.apply(Math, productsInOrder.map(function(o) { return o.index; })) +1; var productToAdd = {}; productToAdd.id = productId; productToAdd.eventId = eventId; productToAdd.index = nextIndex; productToAdd.eventStartDate = eventStartDate; productToAdd.eventEndDate = eventEndDate; productToAdd.eventDescription = eventDescription; productToAdd.eventLocation = eventLocation; productToAdd.name = name; productToAdd.eventName = eventName; productToAdd.eventRegion = eventRegion; productToAdd.availableSeats =seats; productToAdd.availableSeatsApplies=true; productToAdd.duration = duration; order.order.products.push(productToAdd); orderFactory.saveOrderToSession(order); } return order; }; orderFactory.addEmployee = function(contactId, firstName, lastName, phone, email, dob, ethnicity,gender, organisation, billingAccount,productIndex, quantity, isPlaceholder, isWriteIn){ var order = orderFactory.retrieveOrderFromSession(); if (order.order.lines == null){ order.order.lines = []; } var line = {}; var nextIndex = order.order.lines.length == 0 ? 0 : Math.max.apply(Math, order.order.lines.map(function(o) { return o.lineIndex; })) +1; line.lineIndex = nextIndex; line.contactid = contactId?contactId:null; line.firstName = firstName; line.lastName = lastName; line.phone = phone; line.email = email; line.dob = dob; line.ethnicity = ethnicity; line.gender = gender; line.organisation = organisation; line.billingAccount = billingAccount; line.productIndex = productIndex; line.quantity = quantity; line.isPlaceholder = isPlaceholder; line.isWriteIn = isWriteIn; line.iwi=null; line.deleteLine= false; line.isUpdated= true; order.order.lines.push(line); orderFactory.saveOrderToSession(order); return line.lineIndex; }; orderFactory.updateEmployee = function(contactId, firstName, lastName, phone, email, dob, ethnicity,gender, organisation, billingAccount, attendeeid){ var order = orderFactory.retrieveOrderFromSession(); if (order.order.lines == null){ order.order.lines = []; } var line = order.order.lines[attendeeid]; line.contactid = contactId?contactId:null; line.firstName = firstName; line.lastName = lastName; line.phone = phone; line.email = email; line.dob = dob; line.ethnicity = ethnicity; line.gender = gender; line.organisation = organisation; line.deleteLine= false; line.isUpdated= true; order.order.lines[attendeeid] = line; orderFactory.saveOrderToSession(order); }; orderFactory.getProductIndex = function(eventid, productid){ var order = orderFactory.retrieveOrderFromSession(); return order.order.products.filter(e => e.id === productid && e.eventId=== eventid)[0].index; } orderFactory.deleteAttendee = function(attendeeID){ var order = orderFactory.retrieveOrderFromSession(); order.order.lines[attendeeID].deleteLine = true; order.order.lines[attendeeID].isUpdated = true; orderFactory.saveOrderToSession(order); }; orderFactory.deleteAllAttendees = function(eventid,productid){ var index = orderFactory.getProductIndex(eventid,productid); var order = orderFactory.retrieveOrderFromSession(); if (order.order.lines.length >0){ var returnLines=[]; order.order.lines.forEach(function(element){ if (element.productIndex == index && !element.deleteLine){ order.order.lines[element.lineIndex].deleteLine = true; order.order.lines[element.lineIndex].isUpdated = true; returnLines.push(element) } }) } orderFactory.saveOrderToSession(order); return returnLines; } orderFactory.isContactOnEvent = function(contactid,eventid, productid){ var index = orderFactory.getProductIndex(eventid,productid); var order = orderFactory.retrieveOrderFromSession(); return order.order.lines.filter(e => e.productIndex === index && e.contactid=== contactid && e.deleteLine == false).length > 0; } orderFactory.getSubTotal = function(){ var amount = 0; var order = orderFactory.retrieveOrderFromSession(); order.order.products.forEach(function(product){ //Get ppu var ppu = 0; var priceURL = window.location.origin + "/lccwebapi/?operation=getPrice&productid="+product.id; $.get({ url: priceURL, async: false }, function (data) { if (data!==null){ ppu = data.ppu; } }); amount = amount + order.order.lines.filter(e => e.productIndex === product.index && !e.deleteLine).length * ppu; }); return amount; } })(window.orderFactory = window.f5common || {}, jQuery)