jam-cloud/web/app/assets/javascripts/accounts_affiliate.js

325 lines
10 KiB
JavaScript

(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 = data.id;
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 $table = $screen.find('table.traffic-table tbody')
$table.empty();
var template = $('#template-affiliate-partner-signups-row').html();
context._.each(signups.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 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 {
data.sold = 'JamTracks: ' + item.jamtracks_sold + ' units sold';
}
data.earnings = '$' + (item.due_amount_in_cents / 100).toFixed(2);
}
var $earning = $(context._.template(template, data, {variable: 'data'}));
$table.append($earning)
})
}
function updateLinks() {
var $select = $screen.find('select.link_type')
var value = $select.val()
logger.debug("value: " + value)
var type = 'jamtrack_songs';
if(value == 'JamTrack Song') {
type = 'jamtrack_songs'
}
else if(value == 'JamTrack Band') {
type = 'jamtrack_bands'
}
else if(value == 'JamTrack General') {
type = 'jamtrack_general'
}
else if(value == 'JamKazam General') {
type = 'jamkazam'
}
else if(value == 'JamKazam Session') {
type = 'sessions'
}
else if(value == 'JamKazam Recording') {
type = 'recordings'
}
else if(value == 'Custom Link') {
type = 'custom_links'
}
$screen.find('.link-type-prompt').hide();
$screen.find('.link-type-prompt[data-type="' + type + '"]').show();
if(type == 'custom_links') {
$screen.find('table.links-table').hide();
$screen.find('.link-type-prompt[data-type="custom_links"] span.affiliate_id').text(affiliatePartnerData.account.id)
}
else {
rest.getLinks(type)
.done(populateLinkTable)
.fail(function() {
app.notify({text: 'Unable to fetch links. Please try again later.' })
})
}
}
function _renderAffiliateTab(theTab) {
affiliateTabRefresh(theTab);
var template = $('#template-affiliate-partner-' + theTab).html();
var tabHtml = context._.template(template, affiliatePartnerData[theTab], {variable: 'data'});
$('#affiliate-partner-tab-content').html(tabHtml);
if (theTab == 'signups') {
_renderAffiliateTableSignups(affiliatePartnerData[theTab]);
} else if (theTab == 'earnings') {
_renderAffiliateTableEarnings(affiliatePartnerData[theTab]);
} else if (theTab == 'links') {
_renderAffiliateTableLinks(affiliatePartnerData[theTab]);
}
}
function renderAffiliateTab(theTab) {
if (affiliatePartnerData) {
return _renderAffiliateTab(theTab);
}
rest.getAffiliatePartnerData(userId)
.done(function (response) {
affiliatePartnerData = response;
_renderAffiliateTab(theTab);
})
.fail(app.ajaxError)
}
function affiliateTabRefresh(selectedTab) {
var container = $('#account-affiliate-partner-content-scroller');
container.find('.affiliate-partner-nav a.active').removeClass('active');
if (selectedTab) {
container.find('.affiliate-partner-' + selectedTab).show();
$.each(affiliatePartnerTabs, function (index, val) {
if (val != selectedTab) {
container.find('.affiliate-partner-' + val).hide();
}
});
container.find('.affiliate-partner-nav a#affiliate-partner-' + selectedTab + '-link').addClass('active');
} else {
$.each(affiliatePartnerTabs, function (index, val) {
container.find('.affiliate-partner-' + val).hide();
});
container.find('.affiliate-partner-nav a#affiliate-partner-' + affiliatePartnerTabs[0] + '-link').addClass('active');
}
}
function handleUpdateAffiliateAccount() {
var tab_content = $('#affiliate-partner-tab-content');
var affiliate_partner_data = {
'address': {
'address1': tab_content.find('#affiliate_partner_address1').val(),
'address2': tab_content.find('#affiliate_partner_address2').val(),
'city': tab_content.find('#affiliate_partner_city').val(),
'state': tab_content.find('#affiliate_partner_state').val(),
'postal_code': tab_content.find('#affiliate_partner_postal_code').val(),
'country': tab_content.find('#affiliate_partner_country').val()
},
'tax_identifier': tab_content.find('#affiliate_partner_tax_identifier').val()
}
rest.postAffiliatePartnerData(userId, affiliate_partner_data)
.done(postUpdateAffiliateAccountSuccess);
}
function postUpdateAffiliateAccountSuccess(response) {
app.notify(
{
title: "Affiliate Account",
text: "You have updated your affiliate partner data successfully."
},
null, true);
}
function populateLinkTable(response) {
$screen.find('table.links-table').show();
var $linkTable = $screen.find('.links-table tbody')
$linkTable.empty();
var template = $('#template-affiliate-link-entry').html();
context._.each(response, function(item) {
var $link = $(context._.template(template, item, {variable: 'data'}));
$link.find('td.copy-link a').click(copyLink)
$linkTable.append($link)
})
}
function copyLink() {
var element = $(this);
var $url = element.closest('tr').find('td.url input')
$url.select()
return false;
}
function initialize() {
var screenBindings = {
'beforeShow': beforeShow,
'afterShow': afterShow
};
app.bindScreen('account/affiliatePartner', screenBindings);
$screen = $('#account-affiliate-partner')
events();
}
this.initialize = initialize;
this.beforeShow = beforeShow;
this.afterShow = afterShow;
return this;
};
})(window, jQuery);