Group plans subs to all (#8394)

* Added subscriptions to all members when group subs

* Added unsub when group cancels

* Give user a subscription when they join a subbed group

* Removed subscription when user leaves or is removed from group

* Fixed linting issues:

* Added tests for users with a subscription being upgraded to group plan

* Added tests for checking if existing recurring user sub gets updated during group plan. Added better merging for plans

* Added test for existing gift subscriptions

* Added additional months to user when they have an existing recurring subscription and get upgraded to group sub

* Adds test for user who has cancelled with date termined in the future

* Added test to ensure date termined is reset

* Added tests for extra months carrying over

* Added test for gems bought field

* Add tests to for fields that should remain when upgrading

* Added test for all payment methods

* Added prevention for when a user joins a second group plan

* Fixed subscribing tests

* Separated group plan payment tests

* Added prevention of editing a user with a unlimited sub

* Add tests to ensure group keeps plan if they are in two and leave one

* Ensured users with two group plans do not get cancelled when on group plan is cancelled

* Ensured users without group sub are untouched when group cancels

* Fixed lint issues

* Added new emails

* Added fix for cron tests

* Add restore to stubbed methods

* Ensured cancelled group subscriptions are updated

* Changed group plan exist check to check for date terminated

* Updated you cannont delete active group message

* Removed description requirement

* Added upgrade group plan for Amazon payments

* Fixed lint issues

* Fixed broken tests

* Fixed user delete tests

* Fixed function calls

* Hid cancel button if user has group plan

* Hide difficulty from rewards

* Prevented add user functions to be called when group plan is cancelled

* Fixed merge issue

* Correctly displayed group price

* Added message when you are about to join canclled group plan

* Fixed linting issues

* Updated tests to have no redirect to homes

* Allowed leaving a group with a canceld subscription

* Fixed spelling issues

* Prevented user from changing leader with active sub

* Added payment details title to replace subscription title

* Ensured we do not count leader when displaying upcoming cost

* Prevented party tasks from being displayed twice

* Prevented cancelling and already cancelled sub

* Fixed styles of subscriptions

* Added more specific mystery item tests

* Fixed test to refer to leader

* Extended test range to account for short months

* Fixed merge conflicts

* Updated yarn file

* Added missing locales

* Trigger notification

* Removed yarn

* Fixed locales

* Fixed scope mispelling

* Fixed line endings

* Removed extra advanced options from rewards

* Prevent group leader from leaving an active group plan

* Fixed issue with extra months applied to cancelled group plan

* Ensured member count is calculated when updatedGroupPlan

* Updated amazon payment method constant name

* Added comment to cancel sub user method

* Fixed smantic issues

* Added unite test for user isSubscribed and hasNotCancelled

* Add tests for isSubscribed and hasNotCanceled

* Changed default days remaining to 2 days for group plans

* Fixed logic with adding canceled notice to group invite
This commit is contained in:
Keith Holliday
2017-03-06 15:09:50 -07:00
committed by GitHub
parent 03a1d61c08
commit be60fb0635
33 changed files with 2128 additions and 668 deletions

View File

@@ -1,78 +1,78 @@
'use strict';
(function(){
angular
.module('habitrpg')
.directive('taskList', taskList);
taskList.$inject = [
'$state',
'User',
'$rootScope',
];
function taskList($state, User, $rootScope) {
return {
restrict: 'EA',
templateUrl: 'templates/task-list.html',
transclude: true,
scope: true,
// scope: {
// taskList: '=list',
// list: '=listDetails',
// obj: '=object',
// user: "=",
// },
link: function($scope, element, attrs) {
// @TODO: The use of scope with tasks is incorrect. We need to fix all task ctrls to use directives/services
// $scope.obj = {};
function setObj (obj, force) {
if (!force && ($scope.obj || scope.obj !== {} || !obj)) return;
$scope.obj = obj;
setUpGroupedList();
setUpTaskWatch();
}
$rootScope.$on('obj-updated', function (event, obj) {
setObj(obj, true);
});
function setUpGroupedList () {
if (!$scope.obj) return;
$scope.groupedList = {};
['habit', 'daily', 'todo', 'reward'].forEach(function (listType) {
groupTasksByChallenge($scope.obj[listType + 's'], listType);
});
}
setUpGroupedList();
function groupTasksByChallenge (taskList, type) {
$scope.groupedList[type] = _.groupBy(taskList, 'challenge.shortName');
};
function setUpTaskWatch () {
if (!$scope.obj) return;
$scope.$watch(function () { return $scope.obj.tasksOrder; }, function () {
setUpGroupedList();
}, true);
}
setUpTaskWatch();
$scope.getTaskList = function (list, taskList, obj) {
setObj(obj);
if (!$scope.obj) return [];
if (taskList) return taskList;
return $scope.obj[list.type+'s'];
};
$scope.showNormalList = function () {
return !$state.includes("options.social.challenges") && !User.user.preferences.tasks.groupByChallenge;
};
$scope.showChallengeList = function () {
return $state.includes("options.social.challenges");
};
}
}
}
}());
'use strict';
(function(){
angular
.module('habitrpg')
.directive('taskList', taskList);
taskList.$inject = [
'$state',
'User',
'$rootScope',
];
function taskList($state, User, $rootScope) {
return {
restrict: 'EA',
templateUrl: 'templates/task-list.html',
transclude: true,
scope: true,
// scope: {
// taskList: '=list',
// list: '=listDetails',
// obj: '=object',
// user: "=",
// },
link: function($scope, element, attrs) {
// @TODO: The use of scope with tasks is incorrect. We need to fix all task ctrls to use directives/services
// $scope.obj = {};
function setObj (obj, force) {
if (!force && ($scope.obj || $scope.obj !== {} || !obj)) return;
$scope.obj = obj;
setUpGroupedList();
setUpTaskWatch();
}
$rootScope.$on('obj-updated', function (event, obj) {
setObj(obj, true);
});
function setUpGroupedList () {
if (!$scope.obj) return;
$scope.groupedList = {};
['habit', 'daily', 'todo', 'reward'].forEach(function (listType) {
groupTasksByChallenge($scope.obj[listType + 's'], listType);
});
}
setUpGroupedList();
function groupTasksByChallenge (taskList, type) {
$scope.groupedList[type] = _.groupBy(taskList, 'challenge.shortName');
};
function setUpTaskWatch () {
if (!$scope.obj) return;
$scope.$watch(function () { return $scope.obj.tasksOrder; }, function () {
setUpGroupedList();
}, true);
}
setUpTaskWatch();
$scope.getTaskList = function (list, taskList, obj) {
setObj(obj);
if (!$scope.obj) return [];
if (taskList) return taskList;
return $scope.obj[list.type+'s'];
};
$scope.showNormalList = function () {
return !$state.includes("options.social.challenges") && !User.user.preferences.tasks.groupByChallenge;
};
$scope.showChallengeList = function () {
return $state.includes("options.social.challenges");
};
}
}
}
}());