mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-16 22:27:26 +01:00
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:
@@ -3,6 +3,7 @@ import nconf from 'nconf';
|
||||
import Bluebird from 'bluebird';
|
||||
import moment from 'moment';
|
||||
import cc from 'coupon-code';
|
||||
import uuid from 'uuid';
|
||||
|
||||
import common from '../../common';
|
||||
import {
|
||||
@@ -38,6 +39,7 @@ api.constants = {
|
||||
SELLER_NOTE: 'Habitica Payment',
|
||||
SELLER_NOTE_SUBSCRIPTION: 'Habitica Subscription',
|
||||
SELLER_NOTE_ATHORIZATION_SUBSCRIPTION: 'Habitica Subscription Payment',
|
||||
SELLER_NOTE_GROUP_NEW_MEMBER: 'Habitica Group Plan New Member',
|
||||
STORE_NAME: 'Habitica',
|
||||
|
||||
GIFT_TYPE_GEMS: 'gems',
|
||||
@@ -45,8 +47,8 @@ api.constants = {
|
||||
|
||||
METHOD_BUY_GEMS: 'buyGems',
|
||||
METHOD_CREATE_SUBSCRIPTION: 'createSubscription',
|
||||
PAYMENT_METHOD_AMAZON: 'Amazon Payments',
|
||||
PAYMENT_METHOD_AMAZON_GIFT: 'Amazon Payments (Gift)',
|
||||
PAYMENT_METHOD: 'Amazon Payments',
|
||||
PAYMENT_METHOD_GIFT: 'Amazon Payments (Gift)',
|
||||
};
|
||||
|
||||
api.getTokenInfo = Bluebird.promisify(amzPayment.api.getTokenInfo, {context: amzPayment.api});
|
||||
@@ -138,7 +140,7 @@ api.checkout = async function checkout (options = {}) {
|
||||
|
||||
let data = {
|
||||
user,
|
||||
paymentMethod: this.constants.PAYMENT_METHOD_AMAZON,
|
||||
paymentMethod: this.constants.PAYMENT_METHOD,
|
||||
headers,
|
||||
};
|
||||
|
||||
@@ -146,7 +148,7 @@ api.checkout = async function checkout (options = {}) {
|
||||
if (gift.type === this.constants.GIFT_TYPE_SUBSCRIPTION) method = this.constants.METHOD_CREATE_SUBSCRIPTION;
|
||||
gift.member = await User.findById(gift ? gift.uuid : undefined).exec();
|
||||
data.gift = gift;
|
||||
data.paymentMethod = this.constants.PAYMENT_METHOD_AMAZON_GIFT;
|
||||
data.paymentMethod = this.constants.PAYMENT_METHOD_GIFT;
|
||||
}
|
||||
|
||||
await payments[method](data);
|
||||
@@ -209,7 +211,7 @@ api.cancelSubscription = async function cancelSubscription (options = {}) {
|
||||
user,
|
||||
groupId,
|
||||
nextBill: moment(lastBillingDate).add({ days: subscriptionLength }),
|
||||
paymentMethod: this.constants.PAYMENT_METHOD_AMAZON,
|
||||
paymentMethod: this.constants.PAYMENT_METHOD,
|
||||
headers,
|
||||
});
|
||||
};
|
||||
@@ -281,11 +283,36 @@ api.subscribe = async function subscribe (options) {
|
||||
await payments.createSubscription({
|
||||
user,
|
||||
customerId: billingAgreementId,
|
||||
paymentMethod: this.constants.PAYMENT_METHOD_AMAZON,
|
||||
paymentMethod: this.constants.PAYMENT_METHOD,
|
||||
sub,
|
||||
headers,
|
||||
groupId,
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
api.chargeForAdditionalGroupMember = async function chargeForAdditionalGroupMember (group) {
|
||||
// @TODO: Can we get this from the content plan?
|
||||
let priceForNewMember = 3;
|
||||
|
||||
// @TODO: Prorate?
|
||||
|
||||
return this.authorizeOnBillingAgreement({
|
||||
AmazonBillingAgreementId: group.purchased.plan.customerId,
|
||||
AuthorizationReferenceId: uuid.v4().substring(0, 32),
|
||||
AuthorizationAmount: {
|
||||
CurrencyCode: this.constants.CURRENCY_CODE,
|
||||
Amount: priceForNewMember,
|
||||
},
|
||||
SellerAuthorizationNote: this.constants.SELLER_NOTE_GROUP_NEW_MEMBER,
|
||||
TransactionTimeout: 0,
|
||||
CaptureNow: true,
|
||||
SellerNote: this.constants.SELLER_NOTE_GROUP_NEW_MEMBER,
|
||||
SellerOrderAttributes: {
|
||||
SellerOrderId: uuid.v4(),
|
||||
StoreName: this.constants.STORE_NAME,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = api;
|
||||
|
||||
Reference in New Issue
Block a user