diff --git a/app/controllers/admin/subscriptions_controller.rb b/app/controllers/admin/subscriptions_controller.rb index 3b892e2..c3ff1e4 100644 --- a/app/controllers/admin/subscriptions_controller.rb +++ b/app/controllers/admin/subscriptions_controller.rb @@ -16,6 +16,18 @@ module DiscoursePatrons return render_json_error e.message end end + + def destroy + begin + subscription = ::Stripe::Subscription.delete(params[:id]) + + render_json_dump subscription + + rescue ::Stripe::InvalidRequestError => e + return render_json_error e.message + end + end + end end end diff --git a/assets/javascripts/discourse/models/admin-subscription.js.es6 b/assets/javascripts/discourse/models/admin-subscription.js.es6 index e22ffd2..c464d80 100644 --- a/assets/javascripts/discourse/models/admin-subscription.js.es6 +++ b/assets/javascripts/discourse/models/admin-subscription.js.es6 @@ -2,6 +2,11 @@ import computed from "ember-addons/ember-computed-decorators"; import { ajax } from "discourse/lib/ajax"; const AdminSubscription = Discourse.Model.extend({ + @computed("status") + canceled(status) { + return status === "canceled"; + }, + @computed("metadata") metadataUserExists(metadata) { return metadata.user_id && metadata.username; @@ -12,6 +17,12 @@ const AdminSubscription = Discourse.Model.extend({ return Discourse.getURL( `/admin/users/${metadata.user_id}/${metadata.username}` ); + }, + + destroy() { + return ajax(`/patrons/admin/subscriptions/${this.id}`, { + method: "delete" + }).then(result => AdminSubscription.create(result)); } }); diff --git a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-subscriptions.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-subscriptions.js.es6 index ee7ea64..7644224 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-subscriptions.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-discourse-patrons-subscriptions.js.es6 @@ -3,5 +3,27 @@ import AdminSubscription from "discourse/plugins/discourse-patrons/discourse/mod export default Discourse.Route.extend({ model() { return AdminSubscription.find(); + }, + + actions: { + cancelSubscription(subscription) { + bootbox.confirm( + I18n.t( + "discourse_patrons.user.subscriptions.operations.destroy.confirm" + ), + I18n.t("no_value"), + I18n.t("yes_value"), + confirmed => { + if (confirmed) { + subscription + .destroy() + .then(result => subscription.set("status", result.status)) + .catch(data => + bootbox.alert(data.jqXHR.responseJSON.errors.join("\n")) + ); + } + } + ); + } } }); diff --git a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-subscriptions.hbs b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-subscriptions.hbs index 86ca6aa..2f62c27 100644 --- a/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-subscriptions.hbs +++ b/assets/javascripts/discourse/templates/admin/plugins-discourse-patrons-subscriptions.hbs @@ -7,6 +7,7 @@