function patriotacademyRequireCart(p) { patriotacademyCartSynced = user.id; var userdata = patriotacademy.data.user && patriotacademy.data.user[user.id]; function syncCarts() { var order = userdata && userdata.storecart; var item = user.id ? (userdata.storecart && userdata.storecart.item) : patriotacademy.rowslocal.order_item; if (order && order.item && patriotacademy.rowslocal.order_item && patriotacademy.rowslocal.order_item.length) { var incart = []; for (var i = 0; i < order.item.length; i++) { var productId = order.item[i].product; if (typeof productId == 'object') productId = productId.id; incart.push(productId); } var copy = []; for (var i = 0; i < patriotacademy.rowslocal.order_item.length; i++) { var productId = patriotacademy.rowslocal.order_item[i].product; if (typeof productId == 'object') productId = productId.id; if (incart.indexOf(productId) == -1) copy.push(patriotacademy.rowslocal.order_item[i]); } if (copy.length) { patriotacademy.dataCopy(copy, { destination: 'server', path: 'attribute', override: { parent: order.id } }, function () { if (patriotacademy.page.pageid == 'store/cart') patriotacademy.refresh(); }); } patriotacademy.dataDelete(patriotacademy.rowslocal.order_item); } } if (user.id) { if (userdata.storecart) syncCarts(); else { patriotacademy.dataCreate({ table: 'user', fields: { username: { value: userdata.username }, type: 'user', first: { value: userdata.first }, last: { value: userdata.last }, storecart: { table: 'order', fields: { status: { value: 'cart' }, user: { value: user.id }, shippingname: { value: userdata.name }, shippingphone: { value: userdata.phone }, shippingstreet: { value: userdata.street }, shippingcity: { value: userdata.city }, shippingstate: { value: userdata.state }, shippingzip: { value: userdata.zip }, shippingcountry: { value: userdata.country } } } } }, function (rows) { syncCarts(); patriotacademy.refresh(); }); } } else if (!patriotacademy.datalocal.order || !patriotacademy.datalocal.order[1]) patriotacademy.dataCreate({ table: 'order', local: true, id: 1 }, p && p.onfinish); } function processAffiliateLinking() { // save the coachID if it is passed on the URL. if (patriotacademy.page.parameters) { if (patriotacademy.page.parameters.af) localStorage.patriotacademy_af = patriotacademy.page.parameters.af; } if (user.id) { var clearCoachAFValue = false; var parentCoachId = null; var afstorage = localStorage.patriotacademy_af; if (afstorage) parentCoachId = atob(afstorage); // not allowed to link to yourself... if (parentCoachId == user.id) clearCoachAFValue = true; if (parentCoachId && !clearCoachAFValue) { // load the 'parent' coach data. patriotacademy.dataLoad( [ { table: 'user', load: true, id: user.id, fields: [ { field: 'coachlevel', load: true } ] }, { table: 'user', load: true, id: parentCoachId } ], function (r) { var currentUser = patriotacademy.data.user[user.id]; // coaches already earning commissions cannot activate affiliate links. if (currentUser.coachlevel && currentUser.coachlevel.commissionsenabled) clearCoachAFValue = true; // only set the coach reference fields if the current user is not already linked to anyone. if (!clearCoachAFValue && currentUser.coachlead == null && currentUser.coachreference == null) { patriotacademy.dataSet({ table: 'user', id: currentUser.id, coachlead: parentCoachId, coachreference: parentCoachId }); clearCoachAFValue = true; } // if link is successful, or illegal, we clear the localStorage value. if (clearCoachAFValue) delete localStorage.patriotacademy_af; } ); } // if link is successful, or illegal, we clear the localStorage value. if (clearCoachAFValue) delete localStorage.patriotacademy_af; } } function patriotacademySubscriptionCoupon(p) { patriotacademy.dataLoad({ table: 'coachlevel_coupon', rows: true, filter: { code: p.element.value } }, function (r) { if (!patriotacademy.data.coachlevel_coupon) { p.onfinish(); return; } var coupon = patriotacademy.data.coachlevel_coupon[p.element.value]; if (!coupon || !coupon.active || (coupon.parent.id != patriotacademy.page.data.id && coupon.parent != patriotacademy.page.data.id)) { if (p.element.value) alert('Sorry, that is not a valid coupon code.'); p.element.value = ''; } p.element.entry.fields.coupon.value = p.element.value; patriotacademy.entryChanged(p.element.entry.fields.coupon); //if (coupon) // p.element.entry.fields.physical.value = coupon.physicalshipment; //else // p.element.entry.fields.physical.value = p.element.entry.fields.coachlevel.value.physical; //patriotacademy.entryChanged(p.element.entry.fields.physical); p.onfinish(); }); } patriotacademy.addListener('navigate', function (p) { if (window.fbq) fbq('track', 'PageView'); switch (p.page) { case 'coach/commissions': var commissiontotal = document.getElementById('commissiontotal'); var commissionunpaid = document.getElementById('commissionunpaid'); if (!commissiontotal) return; patriotacademy.page.loading.style.display = 'block'; if (user.id) { request = { table: 'user', rows: true, filter: { coachlead: user.id }, fields: [ { field: 'user-order_item', load: true, fields: [ { field: 'parent', load: true } ] }, { field: 'user-subscription_payment', load: true, fields: [ { field: 'parent', rows: true } ] } ] }; } patriotacademy.dataLoad(request, function (r) { var userdata = patriotacademy.data.user[user.id]; if (userdata) { for (var s = 0; s < userdata['coachlead-user'].length; s++) userdata['coachlead-user'][s].coachcommissions = 0; } var total = 0, unpaid = 0; if (patriotacademy.rows.order_item) { for (var i = 0; i < patriotacademy.rows.order_item.length; i++) { var item = patriotacademy.rows.order_item[i]; if (!item.commission) continue; if (item.commissionreference) { if (item.commissionreference.id != user.id) continue; } else continue; if (item.parent.status != 'paid') continue; item.user.coachcommissions += item.commission; total += item.commission; if (item.commissionpayment) continue; unpaid += item.commission; } } if (patriotacademy.rows.subscription_payment) { for (var i = 0; i < patriotacademy.rows.subscription_payment.length; i++) { var payment = patriotacademy.rows.subscription_payment[i]; if (!payment.commission) continue; if (payment.commissionreference) { if (payment.commissionreference.id != user.id) continue; } else continue; if (payment.parent.status != 'paid') continue; payment.user.coachcommissions += payment.commission; total += payment.commission; if (payment.commissionpayment) continue; unpaid += payment.commission; } } if (userdata) { for (var s = 0; s < userdata['coachlead-user'].length; s++) { var student = userdata['coachlead-user'][s]; if (student.DOMElements && student.DOMElements.length) { for (var e = 0; e < student.DOMElements.length; e++) { var element = student.DOMElements[e]; if (element.tagName != 'TR') continue; //var control = element.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode; //if(control.getAttribute('id') != 'commissionstudents') // continue; if (!element.children[3]) continue; element.children[3].innerHTML = patriotacademy.format(student.coachcommissions, 'dollar'); } } } commissiontotal.innerHTML = 'Earned to Date: ' + patriotacademy.format(total, 'dollar'); commissionunpaid.innerHTML = 'Unpaid: ' + patriotacademy.format(unpaid, 'dollar'); } patriotacademy.page.loading.style.display = 'none'; }); break; case 'store': if (patriotacademy.page.parameters.category) patriotacademy.setting('category', patriotacademy.page.parameters.category); processAffiliateLinking(); patriotacademyRequireCart(); break; case 'store/product': patriotacademyRequireCart(); if (window.fbq) fbq('track', 'ViewContent', {}); processAffiliateLinking(); break; case 'store/cart': patriotacademyRequireCart(); break; case 'store/checkout': patriotacademyRequireCart(); var order = user.id ? (patriotacademy.data.user && patriotacademy.data.user[user.id] && patriotacademy.data.user[user.id].storecart) : (patriotacademy.datalocal.order && patriotacademy.datalocal.order[1]); if (!order || !order.item) return; if (!order.user || order.user.id != user.id) { var set = { table: 'order', id: 1, user: user.id }; if (order.local) set.local = true; patriotacademy.dataSet(set); } var order_items = []; var subtotal = 0; for (var i = 0; i < order.item.length; i++) { var item = order.item[i]; subtotal += item.subtotal; order_items.push({ item_id: item.id, item_name: item.product.name, coupon: item.coupon, currency: 'USD', discount: item.discount, index: i, price: item.price, quantity: item.quantity }); } var order_event = { currency: 'USD', value: order.subtotal, coupon: order.coupon | '', items: order_items } var set = { table: 'order', id: order.id }; if (order.local) set.local = true; var params = { shippingservice: null, estimatedshippingcost: null }; var fields = Object.keys(params); var fieldcount = 0; for (var i = 0; i < fields.length; i++) { if (order[fields[i]] != params[fields[i]]) { set[fields[i]] = params[fields[i]]; fieldcount++; } } if (fieldcount) patriotacademy.dataSet(set); if (window.gtag) gtag('event', 'begin_checkout', order_event); break; case 'coach/subscriptions': case 'coach/subscribe': processAffiliateLinking(); } }); patriotacademy.addListener('datacreate', function (p) { for (var i = 0; i < p.rows.length; i++) { var row = p.rows[i]; switch (row.table) { case 'order_item': if (window.fbq) fbq('track', 'AddToCart', { content_name: row.product.name, content_ids: [row.product.id], content_type: 'product', value: row.price, currency: 'USD' }); } } }); patriotacademy.addListener('dataset', function (p) { for (var i = 0; i < p.rows.length; i++) { var row = p.rows[i]; switch (row.table) { case 'user': if (row.commissionsenabled) { alert('Thank you for signing up! The Coach Commission Program has been activated on your account.'); patriotacademy.refresh(); } else if (row.coachagreement || row.connectpermission) patriotacademy.refresh(); break; case 'order': var order = row; if (row.coupon !== undefined && row.coupon != window.oldcoupon) { var couponCode = row.coupon; if (couponCode) { patriotacademy.dataLoad([{ table: 'coupon', rows: true, filter: { code: couponCode } }, { table: 'order', rows: true, filter: { user: user.id, coupon: couponCode } }], function (r) { var coupon = patriotacademy.data.coupon[couponCode]; if (!coupon || !coupon.active) { if (couponCode) alert('Sorry, that is not a valid coupon code.'); order.coupon = null; } order.discount = 0; if (coupon) { if (coupon.limitperuser) { var orders = patriotacademy.filter(patriotacademy.rows.order, { user: user.id, coupon: coupon.code, status: 'paid' }); if (orders.length >= coupon.limitperuser) { alert('Sorry, you have exceeded the maximum number of uses for that coupon.'); order.coupon = null; } } if (coupon.type == 'order') order.discount = -coupon.amount; } patriotacademy.dataSet(order); }); } window.oldcoupon = row.coupon; } if (row.status && window.fbq && row.subtotal) { var items = []; for (var i = 0; i < row.item.length; i++) { items.push({ id: row.item[i].product.id, quantity: row.item[i].quantity }); } fbq('track', 'Purchase', { id: row.id, value: row.total, currency: 'USD', contents: items, content_type: 'product' }); } } } }); patriotacademy.addListener('login', function (login) { processAffiliateLinking(); });