import _ from 'lodash' /* global recurly */ /* eslint-disable camelcase, max-len, no-return-assign, no-unused-vars, */ // TODO: This file was created by bulk-decaffeinate. // Fix any style issues and re-enable lint. /* * decaffeinate suggestions: * DS102: Remove unnecessary code created because of implicit returns * DS104: Avoid inline assignments * DS204: Change includes calls to have a more natural evaluation order * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ import App from '../base' import getMeta from '../utils/meta' const SUBSCRIPTION_URL = '/user/subscription/update' const ensureRecurlyIsSetup = _.once(() => { if (typeof recurly === 'undefined' || !recurly) { return false } recurly.configure(getMeta('ol-recurlyApiKey')) return true }) App.controller('MetricsEmailController', function($scope, $http) { $scope.institutionEmailSubscription = function(institutionId) { var inst = _.find(window.managedInstitutions, function(institution) { return institution.v1Id === parseInt(institutionId) }) if (inst.metricsEmail.optedOutUserIds.includes(window.user_id)) { return 'Subscribe' } else { return 'Unsubscribe' } } $scope.changeInstitutionalEmailSubscription = function(institutionId) { $scope.subscriptionChanging = true return $http({ method: 'POST', url: `/institutions/${institutionId}/emailSubscription`, headers: { 'X-CSRF-Token': window.csrfToken } }).then(function successCallback(response) { window.managedInstitutions = _.map(window.managedInstitutions, function( institution ) { if (institution.v1Id === parseInt(institutionId)) { institution.metricsEmail.optedOutUserIds = response.data } return institution }) $scope.subscriptionChanging = false }) } }) App.factory('RecurlyPricing', function($q, MultiCurrencyPricing) { return { loadDisplayPriceWithTax: function(planCode, currency, taxRate) { if (!ensureRecurlyIsSetup()) return const currencySymbol = MultiCurrencyPricing.plans[currency].symbol const pricing = recurly.Pricing() return $q(function(resolve, reject) { pricing .plan(planCode, { quantity: 1 }) .currency(currency) .done(function(price) { const totalPriceExTax = parseFloat(price.next.total) let taxAmmount = totalPriceExTax * taxRate if (isNaN(taxAmmount)) { taxAmmount = 0 } let total = totalPriceExTax + taxAmmount if (total % 1 !== 0) { total = total.toFixed(2) } resolve(`${currencySymbol}${total}`) }) }) } } }) App.controller('ChangePlanFormController', function( $scope, $modal, RecurlyPricing ) { if (!ensureRecurlyIsSetup()) return $scope.changePlan = () => $modal.open({ templateUrl: 'confirmChangePlanModalTemplate', controller: 'ConfirmChangePlanController', scope: $scope }) $scope.$watch('plan', function(plan) { if (!plan) return const planCode = plan.planCode const subscription = getMeta('ol-subscription') const { currency, taxRate } = subscription.recurly $scope.price = '...' // Placeholder while we talk to recurly RecurlyPricing.loadDisplayPriceWithTax(planCode, currency, taxRate).then( price => { $scope.price = price } ) }) }) App.controller('ConfirmChangePlanController', function( $scope, $modalInstance, $http ) { $scope.confirmChangePlan = function() { const body = { plan_code: $scope.plan.planCode, _csrf: window.csrfToken } $scope.inflight = true return $http .post(`${SUBSCRIPTION_URL}?origin=confirmChangePlan`, body) .then(() => location.reload()) .catch(() => console.log('something went wrong changing plan')) } return ($scope.cancel = () => $modalInstance.dismiss('cancel')) }) App.controller('LeaveGroupModalController', function( $scope, $modalInstance, $http ) { $scope.confirmLeaveGroup = function() { $scope.inflight = true return $http({ url: '/subscription/group/user', method: 'DELETE', params: { subscriptionId: $scope.subscriptionId, _csrf: window.csrfToken } }) .then(() => location.reload()) .catch(() => console.log('something went wrong changing plan')) } return ($scope.cancel = () => $modalInstance.dismiss('cancel')) }) App.controller('GroupMembershipController', function($scope, $modal) { $scope.removeSelfFromGroup = function(subscriptionId) { $scope.subscriptionId = subscriptionId return $modal.open({ templateUrl: 'LeaveGroupModalTemplate', controller: 'LeaveGroupModalController', scope: $scope }) } }) App.controller('RecurlySubscriptionController', function($scope) { const recurlyIsSetup = ensureRecurlyIsSetup() const subscription = getMeta('ol-subscription') $scope.showChangePlanButton = recurlyIsSetup && !subscription.groupPlan if ( subscription.recurly.account.has_past_due_invoice && subscription.recurly.account.has_past_due_invoice._ === 'true' ) { $scope.showChangePlanButton = false } $scope.recurlyLoadError = !recurlyIsSetup $scope.switchToDefaultView = () => { $scope.showCancellation = false $scope.showChangePlan = false } $scope.switchToDefaultView() $scope.switchToCancellationView = () => { $scope.showCancellation = true $scope.showChangePlan = false } $scope.switchToChangePlanView = () => { $scope.showCancellation = false $scope.showChangePlan = true } }) App.controller('RecurlyCancellationController', function( $scope, RecurlyPricing, $http ) { if (!ensureRecurlyIsSetup()) return const subscription = getMeta('ol-subscription') const sevenDaysTime = new Date() sevenDaysTime.setDate(sevenDaysTime.getDate() + 7) const freeTrialEndDate = new Date(subscription.recurly.trial_ends_at) const freeTrialInFuture = freeTrialEndDate > new Date() const freeTrialExpiresUnderSevenDays = freeTrialEndDate < sevenDaysTime const isMonthlyCollab = subscription.plan.planCode.indexOf('collaborator') !== -1 && subscription.plan.planCode.indexOf('ann') === -1 && !subscription.groupPlan const stillInFreeTrial = freeTrialInFuture && freeTrialExpiresUnderSevenDays if (isMonthlyCollab && stillInFreeTrial) { $scope.showExtendFreeTrial = true } else if (isMonthlyCollab && !stillInFreeTrial) { $scope.showDowngradeToStudent = true } else { $scope.showBasicCancel = true } const { currency, taxRate } = subscription.recurly $scope.studentPrice = '...' // Placeholder while we talk to recurly RecurlyPricing.loadDisplayPriceWithTax('student', currency, taxRate).then( price => { $scope.studentPrice = price } ) $scope.downgradeToStudent = function() { const body = { plan_code: 'student', _csrf: window.csrfToken } $scope.inflight = true return $http .post(`${SUBSCRIPTION_URL}?origin=downgradeToStudent`, body) .then(() => location.reload()) .catch(() => console.log('something went wrong changing plan')) } $scope.cancelSubscription = function() { const body = { _csrf: window.csrfToken } $scope.inflight = true return $http .post('/user/subscription/cancel', body) .then(() => (location.href = '/user/subscription/canceled')) .catch(() => console.log('something went wrong changing plan')) } $scope.extendTrial = function() { const body = { _csrf: window.csrfToken } $scope.inflight = true return $http .put('/user/subscription/extend', body) .then(() => location.reload()) .catch(() => console.log('something went wrong changing plan')) } })