(function (context, $) { "use strict"; context.JK = context.JK || {}; context.JK.AccountAffiliateScreen = function (app) { var logger = context.JK.logger; var rest = context.JK.Rest(); var userId; var user = {}; var affiliatePartnerTabs = ['account', 'agreement', 'signups', 'earnings']; var affiliatePartnerData = null; var $screen = null; function beforeShow(data) { userId = context.JK.currentUserId affiliatePartnerData = null; } function afterShow(data) { rest.getAffiliatePartnerData(userId) .done(function (response) { affiliatePartnerData = response; renderAffiliateTab('account') }) .fail(app.ajaxError) } function events() { // Affiliate Partner $("#account-affiliate-partner-content-scroller").on('click', '#affiliate-partner-account-link', function (evt) { evt.stopPropagation(); renderAffiliateTab('account'); return false; }); $("#account-affiliate-partner-content-scroller").on('click', '#affiliate-partner-links-link', function (evt) { evt.stopPropagation(); renderAffiliateTab('links'); return false; }); $("#account-affiliate-partner-content-scroller").on('click', '#affiliate-partner-agreement-link', function (evt) { evt.stopPropagation(); renderAffiliateTab('agreement'); return false; }); $("#account-affiliate-partner-content-scroller").on('click', '#affiliate-partner-signups-link', function (evt) { evt.stopPropagation(); renderAffiliateTab('signups'); return false; }); $("#account-affiliate-partner-content-scroller").on('click', '#affiliate-partner-earnings-link', function (evt) { evt.stopPropagation(); renderAffiliateTab('earnings'); return false; }); $("#account-affiliate-partner-content-scroller").on('click', '#affiliate-profile-account-submit', function (evt) { evt.stopPropagation(); handleUpdateAffiliateAccount(); return false; }); } function _renderAffiliateTableSignups(rows) { rest.getAffiliateSignups() .done(onAffiliateSignups) .fail(app.ajaxError) } function _renderAffiliateTableEarnings(rows) { rest.getAffiliatePayments() .done(onAffiliatePayments) .fail(app.ajaxError) } function _renderAffiliateTableLinks(rows) { $screen.find('.affiliate-agreement').on('click', function () { renderAffiliateTab('agreement'); return false; }) $screen.find('.affiliate-link-page').attr('href', '/affiliate/links/' + affiliatePartnerData.account.id) $screen.find('select.link_type').easyDropDown(); var $linkType = $screen.find('.link_type') $linkType.on('change', function() { logger.debug("link type changed") updateLinks(); }) updateLinks(); } function onAffiliateSignups(signups) { var traffics = signupsByMonth(signups.traffics); console.log('traffics', traffics); var $table = $screen.find('table.traffic-table tbody') $table.empty(); var template = $('#template-affiliate-partner-signups-row').html(); context._.each(traffics, function(item) { var $link = $(context._.template(template, item, {variable: 'data'})); var $day = $link.find('td.day') var day = $day.text(); var bits = day.split('-') if(bits.length == 3) { $day.text(context.JK.getMonth(new Number(bits[1]) - 1) + ' ' + new Number(bits[2])) } $table.append($link) }) } function signupsByMonth(data){ var item, i = 0, groups = {}, output = [], date, year, month, key, monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; while (item = data[i++]) { date = new Date(item.day); year = date.getFullYear(); month = date.getMonth(); key = monthNames[month] + " " + year groups[key] || (groups[key] = []); // exists OR create [] groups[key].push(item); } for (var key in groups) { var sumVisits = groups[key].reduce(function (s, a) { return s + a.visits; }, 0); var sumSignups = groups[key].reduce(function (s, a) { return s + a.signups; }, 0); output.push({ month: key, signups: sumSignups, visits: sumVisits }) } return output; } function onAffiliatePayments(payments) { var $table = $screen.find('table.payment-table tbody') $table.empty(); var template = $('#template-affiliate-partner-earnings-row').html(); context._.each(payments.payments, function(item) { var data = {} // if(item.payment_type == 'quarterly') { // if(item.quarter == 0) { // data.time = '1st Quarter ' + item.year // } // else if(item.quarter == 1) { // data.time = '2nd Quarter ' + item.year // } // else if(item.quarter == 2) { // data.time = '3rd Quarter ' + item.year // } // else if(item.quarter == 3) { // data.time = '4th Quarter ' + item.year // } // data.sold = '' // if(item.paid) { // data.earnings = 'PAID $' + (item.due_amount_in_cents / 100).toFixed(2); // } // else { // data.earnings = 'No earning were paid, as the $10 minimum threshold was not reached.' // } // } // else { data.time = context.JK.getMonth(item.month - 1) + ' ' + item.year; if(item.jamtracks_sold == 1) { data.sold = 'JamTracks: ' + item.jamtracks_sold + ' unit sold'; } else if(item.jamtracks_sold > 1) { data.sold = 'JamTracks: ' + item.jamtracks_sold + ' units sold'; } data.earnings = '$' + (item.due_amount_in_cents / 100).toFixed(2); if(item.subscriptions){ data.subscriptions = $.map(item.subscriptions, function(subs){ return '