gaf-mobile
Version:
GAF mobile Web site
111 lines (95 loc) • 3.96 kB
JavaScript
module('gafMobileApp')
.controller('MembershipsCtrl', function (Memberships, loggedInUser,
$q, $location, $filter, $window) {
var _this = this;
var DURATION_TYPE_MONTH = 'month';
// var EXCLUDED_PACKAGES = [17, 18, 19, 20, 21]; // in GAF AB Tests
var PROFESSIONAL_MEM_PKG_ID = 8;
var params = $location.search();
_this.returnUrl = params.return || '/dashboard';
_this.userCurrency = loggedInUser.getPrimaryCurrency().get();
_this.showUpsellTrialView = false;
_this.error = {};
_this.loading = true;
// Memberships.getUpsellTrial(DURATION_TYPE_MONTH, [_this.userCurrency.id],
// EXCLUDED_PACKAGES)
Memberships.getTrialPackages(DURATION_TYPE_MONTH, [_this.userCurrency.id],
{ 'packages[]': PROFESSIONAL_MEM_PKG_ID })
.then(function(result) {
_this.loading = false;
var upsellTrialObj = result.getList()[0];
_this.upsellTrial = upsellTrialObj.get();
_this.upsellTrial.benefits = upsellTrialObj.getVisibleBenefits();
// (upsellTrial only has 1 price obj with the specified duration type)
_this.upsellTrialPriceDetails = _this.upsellTrial.prices[0];
// set additional price properties for subscription params
_this.upsellTrialPriceDetails.isTrial = true;
_this.upsellTrialPriceDetails.quantity = 1;
if (params.verified === 'true' || params.subscribeToTrial === 'true') {
_this.subscribe(_this.upsellTrialPriceDetails);
} else {
_this.showUpsellTrialView = true;
}
})
.catch(function() {
$location.url(_this.returnUrl);
});
_this.subscribe = function(priceDetails) {
var isUserPaymentVerified = loggedInUser.get().status.payment_verified;
if (isUserPaymentVerified) {
_this.loading = true;
var packageId = priceDetails.package_id;
var durationType = priceDetails.duration.type;
var subscribeParams = {
'currency': priceDetails.currency_id,
'duration_cycle': priceDetails.duration.cycle,
'is_trial': priceDetails.isTrial,
'quantity': priceDetails.quantity,
'auto_renew': true // auto-renew subscription by default
};
return Memberships.subscribe(packageId, durationType, subscribeParams)
.then(function() {
_this.error = {};
$window.location.href = _this.returnUrl;
})
.catch(function(error) {
_this.showUpsellTrialView = true;
_this.error = { subscriptionError: true };
_this.error.internalError = error.data.message;
})
.finally(function() {
_this.loading = false;
});
} else {
$location.url('/payments/verify' +
'?return=/membership' +
'&type=membership' +
'&subtype=subscribe_trial' +
'&membership=' + _this.getPriceString(_this.userCurrency.sign,
_this.userCurrency.code, priceDetails.amount,
priceDetails.duration.type));
}
};
_this.getPriceString = function(currencySign, currencyCode, amount,
duration) {
return $filter('currency')(amount, currencySign) + ' ' + currencyCode +
(duration ? ' / ' + duration : '');
};
_this.getBenefitDisplayText = function(benefitObj) {
var benefit = benefitObj.benefit;
var benefit_value = benefitObj.benefit_value;
var display_name = benefit.display_name.replace('Bids', 'Jobs');
var displayText;
if (benefit_value === -1) {
displayText = 'Unlimited ' + display_name;
} else if (benefit_value === 1) {
displayText = display_name;
} else if (benefit_value !== null) {
displayText = benefit_value + ' ' + display_name;
} else {
displayText = benefit.value + ' ' + display_name;
}
return displayText;
};
});
;
angular.