97 Commits

Author SHA1 Message Date
Justin DiRose
f596a0f78a
FEATURE: Campaigns (#67)
Co-authored-by: Jordan Vidrine <jordan@jordanvidrine.com>

See https://github.com/discourse/discourse-subscriptions/pull/67 for the full description.
2021-06-02 13:15:03 -05:00
Jay Pfaffman
3fb597a4cf
FIX: Don't use Discourse global (#66)
Discourse.SiteSettings should be this.siteSettings.
2021-05-26 21:33:31 +02:00
Justin DiRose
400313cded
FEATURE: Allow creation of coupons in admin panel (#43)
Adds full support to create coupon/promo codes in the Admin > Plugins > Subscriptions section of the plugin. The Create Coupon button opens a form on the same page, and the active checkboxes toggle the active status of the coupon code.
2021-01-13 11:47:22 -06:00
Justin DiRose
d430098bad
FIX: Properly allow no group to be selected (#33) 2020-11-24 14:52:00 -06:00
Justin DiRose
b92627677f
FEATURE: Implement refunds from dashboard (#27)
An implementation of refunds from the Admin dashboard. To refund, go to Plugins > Subscriptions > Subscriptions then click the `Cancel` button. You'll be presented with a modal. If you wish to refund only the most recent payment, check the box. 

This only implements refunds for Subscriptions, not One Time Payments. One Time Payments will still need to be handled manually at this time.
2020-10-29 10:31:12 -05:00
Justin DiRose
3a5078ded6
REFACTOR: Simplify controller setup (#24)
The code in the plugin needed a dramatic cleanup. This refactor collapses the Plan/Product/Subscription controllers on the backend into one new controller: `SubscribeController`.

This reduces N+1 calls to the back end during the subscription process and simplifies use of the code. 

I've also removed a bunch of dead code and refactored some logic into methods for easier readability. No feature/functionality changes in this commit; only refactoring. However, refactoring will allow for implementation of better anonymous user handling, so this is largely a foundation to enable making that change.
2020-10-21 13:36:31 -05:00
Justin DiRose
7e753d45bd
DEV: Update to new prettier standards 2020-09-16 09:53:50 -05:00
Justin DiRose
a868e6b838
FEATURE: Cancel payments at end of subscription vs immediately
Previously, when a user canceled a subscription, the access would revoke
immediately on Discourse vs. at the end of the billing period. This
commit changes the behavior to remove membership at the end of the
billing period using Stripe's `cancel_at_period_end` attribute on the
Subscription object.

This commit now requires the setup of webhooks for subscription
processing to occur correctly.
2020-08-19 14:37:47 -05:00
Justin DiRose
954beeb094
FIX: Properly show information on saved plans 2020-07-28 11:56:58 -05:00
Justin DiRose
587661fafb
FEATURE: Allow one-time purchases on products (#18)
Building off the foundation of using the Prices API, this PR adds the ability to create a one-time purchase plan for any product, which then can add a user to the specified plan group.

Some things to be aware of:

    One-time purchases cannot have trials.
    One-time purchases use the Invoice API instead of Subscriptions. Invoices are created then charged immediately.
    Users should receive emails for these invoices directly from Stripe just like subscriptions.
2020-07-22 11:06:34 -05:00
Justin DiRose
9c46794e80
DEV: Remove deprecations & improve error handling (#12)
- Replace deprecated methods on client
- Fix broken dropdowns due to select kit 2 upgrade
- Graceful error handling when Stripe keys are not configured but plugin enabled
2020-05-28 10:32:57 -05:00
Justin DiRose
fb4fac197b
REFACTOR: Use models to store data (#11)
* REFACTOR: Use api to add subscribe link

* FIX: I18n subscribe link

* REFACTOR: Use models to store some data

This enables the plugin to show only subscription information which was
generated on Discourse. Subscription data storage is limited to the
external identifiers Stripe generates so we can interact with the API.

* DEV: Test/linting fixes/rake task
2020-05-22 11:20:05 -05:00
Rimian Perkins
52db93ecd8 user payments page 2019-12-17 16:31:58 +11:00
Rimian Perkins
55f4592033 subscription and billing templates 2019-12-16 10:42:55 +11:00
Rimian Perkins
8264930e92 user activity link to payments 2019-12-13 13:44:25 +11:00
Rimian Perkins
4b334a69b5 remove subscribe index 2019-12-13 11:54:32 +11:00
Rimian Perkins
831e64317b refactor models, routes and buttons 2019-12-12 12:59:26 +11:00
Rimian Perkins
1c31884475 show the plans in the buttons proper 2019-12-09 12:01:10 +11:00
Rimian Perkins
09bfe419d8 set new product inactive by default 2019-12-05 17:07:26 +11:00
Rimian Perkins
80b721ddd8 rename some settings 2019-12-04 11:53:05 +11:00
Rimian Perkins
49591130a5 wrapping with longer names 2019-12-04 09:35:07 +11:00
Rimian Perkins
21b8340f4f rename the translations 2019-12-04 09:29:13 +11:00
Rimian Perkins
ccb6e5fcbd prettier does not like line lengths 2019-12-03 10:52:46 +11:00
Rimian Perkins
08cbff0c1c change engine mount point and base path in jsapp 2019-12-03 10:29:44 +11:00
Rimian Perkins
382fd4ac41 name space the js admin 2019-12-02 18:58:14 +11:00
Rimian Perkins
709aebb593 set the currency in the plan 2019-11-30 16:39:28 +11:00
Rimian Perkins
e5753095d8 cannot subscribe to a product twice 2019-11-28 20:11:48 +11:00
Rimian Perkins
b3b7d88481 spinner on subscription cancel 2019-11-14 14:07:45 +11:00
Rimian Perkins
6590d8051c delete subscriptions in admin 2019-11-14 10:51:04 +11:00
Rimian Perkins
482ce178d5 pretty js 2019-11-06 20:59:35 +11:00
Rimian Perkins
e14b4dcd96 the subscribe product page 2019-11-04 16:37:21 +11:00
Rimian Perkins
2b3c52bdd4 name space user subscription request 2019-11-01 13:43:09 +11:00
Rimian Perkins
bec2d57920 pretty 2019-10-31 13:31:24 +11:00
Rimian Perkins
ced4d1c786 format the amount in admin 2019-10-31 11:41:01 +11:00
Rimian Perkins
dbaa30ba18 user cancels subscription 2019-10-31 10:01:41 +11:00
Rimian Perkins
03cbc235b1 list customer subscriptions 2019-10-30 14:19:43 +11:00
Rimian Perkins
2a985ae554 fix subscribe request 2019-10-29 14:15:13 +11:00
Rimian Perkins
7edb0fe39b list subscriptions 2019-10-29 11:43:32 +11:00
Rimian Perkins
5a7097b774 billing/subscriptions 2019-10-28 14:48:59 +11:00
Rimian Perkins
87c83abcd3 add basic invoices page 2019-10-28 14:05:58 +11:00
Rimian Perkins
1f7549060d fix eslint and rubocop 2019-10-25 14:00:59 +11:00
Rimian Perkins
570ef2fbb4 use the billing page 2019-10-25 13:55:57 +11:00
Rimian Perkins
948399662d transition to billing after payment 2019-10-25 13:40:03 +11:00
Rimian Perkins
edd6449105 basic user billing page 2019-10-25 13:23:32 +11:00
Rimian Perkins
6fbcea2cf3 product controller 2019-10-25 08:18:16 +11:00
Rimian Perkins
5f71def8a4 format the select dropdowns for plans 2019-10-24 16:51:58 +11:00
Rimian Perkins
603ddc354b plan can be active or not 2019-10-24 10:02:31 +11:00
Rimian Perkins
922dee581c fix bugs in create plans 2019-10-23 15:55:06 +11:00
Rimian Perkins
a94287434d plans have group names 2019-10-23 11:50:54 +11:00
Rimian Perkins
bb1e330f68 eslint rm & old files 2019-10-23 10:36:12 +11:00