mirror of
https://github.com/discourse/discourse-subscriptions.git
synced 2025-07-08 15:22:46 +00:00
delete subscriptions in admin
This commit is contained in:
parent
0f17acc47e
commit
6590d8051c
@ -16,6 +16,18 @@ module DiscoursePatrons
|
|||||||
return render_json_error e.message
|
return render_json_error e.message
|
||||||
end
|
end
|
||||||
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
|
end
|
||||||
end
|
end
|
||||||
|
@ -2,6 +2,11 @@ import computed from "ember-addons/ember-computed-decorators";
|
|||||||
import { ajax } from "discourse/lib/ajax";
|
import { ajax } from "discourse/lib/ajax";
|
||||||
|
|
||||||
const AdminSubscription = Discourse.Model.extend({
|
const AdminSubscription = Discourse.Model.extend({
|
||||||
|
@computed("status")
|
||||||
|
canceled(status) {
|
||||||
|
return status === "canceled";
|
||||||
|
},
|
||||||
|
|
||||||
@computed("metadata")
|
@computed("metadata")
|
||||||
metadataUserExists(metadata) {
|
metadataUserExists(metadata) {
|
||||||
return metadata.user_id && metadata.username;
|
return metadata.user_id && metadata.username;
|
||||||
@ -12,6 +17,12 @@ const AdminSubscription = Discourse.Model.extend({
|
|||||||
return Discourse.getURL(
|
return Discourse.getURL(
|
||||||
`/admin/users/${metadata.user_id}/${metadata.username}`
|
`/admin/users/${metadata.user_id}/${metadata.username}`
|
||||||
);
|
);
|
||||||
|
},
|
||||||
|
|
||||||
|
destroy() {
|
||||||
|
return ajax(`/patrons/admin/subscriptions/${this.id}`, {
|
||||||
|
method: "delete"
|
||||||
|
}).then(result => AdminSubscription.create(result));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,5 +3,27 @@ import AdminSubscription from "discourse/plugins/discourse-patrons/discourse/mod
|
|||||||
export default Discourse.Route.extend({
|
export default Discourse.Route.extend({
|
||||||
model() {
|
model() {
|
||||||
return AdminSubscription.find();
|
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"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
<th>{{i18n 'discourse_patrons.admin.subscriptions.subscription.plan'}}</th>
|
<th>{{i18n 'discourse_patrons.admin.subscriptions.subscription.plan'}}</th>
|
||||||
<th>{{i18n 'discourse_patrons.admin.subscriptions.subscription.status'}}</th>
|
<th>{{i18n 'discourse_patrons.admin.subscriptions.subscription.status'}}</th>
|
||||||
<th class="td-right">{{i18n 'discourse_patrons.admin.subscriptions.subscription.created_at'}}</th>
|
<th class="td-right">{{i18n 'discourse_patrons.admin.subscriptions.subscription.created_at'}}</th>
|
||||||
|
<th></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
{{#each model as |subscription|}}
|
{{#each model as |subscription|}}
|
||||||
@ -22,6 +23,7 @@
|
|||||||
<td>{{subscription.plan.id}}</td>
|
<td>{{subscription.plan.id}}</td>
|
||||||
<td>{{subscription.status}}</td>
|
<td>{{subscription.status}}</td>
|
||||||
<td class="td-right">{{format-unix-date subscription.created}}</td>
|
<td class="td-right">{{format-unix-date subscription.created}}</td>
|
||||||
|
<td class="td-right">{{d-button disabled=subscription.canceled label="cancel" action=(route-action "cancelSubscription" subscription) icon="times"}}</td>
|
||||||
</tr>
|
</tr>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
</table>
|
</table>
|
||||||
|
@ -8,7 +8,7 @@ DiscoursePatrons::Engine.routes.draw do
|
|||||||
|
|
||||||
namespace :admin do
|
namespace :admin do
|
||||||
resources :plans
|
resources :plans
|
||||||
resources :subscriptions, only: [:index]
|
resources :subscriptions, only: [:index, :destroy]
|
||||||
resources :products
|
resources :products
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -27,7 +27,6 @@ add_admin_route 'discourse_patrons.title', 'discourse-patrons.products'
|
|||||||
|
|
||||||
Discourse::Application.routes.append do
|
Discourse::Application.routes.append do
|
||||||
get '/admin/plugins/discourse-patrons' => 'admin/plugins#index'
|
get '/admin/plugins/discourse-patrons' => 'admin/plugins#index'
|
||||||
get '/admin/plugins/discourse-patrons/dashboard' => 'admin/plugins#index'
|
|
||||||
get '/admin/plugins/discourse-patrons/products' => 'admin/plugins#index'
|
get '/admin/plugins/discourse-patrons/products' => 'admin/plugins#index'
|
||||||
get '/admin/plugins/discourse-patrons/products/:product_id' => 'admin/plugins#index'
|
get '/admin/plugins/discourse-patrons/products/:product_id' => 'admin/plugins#index'
|
||||||
get '/admin/plugins/discourse-patrons/products/:product_id/plans' => 'admin/plugins#index'
|
get '/admin/plugins/discourse-patrons/products/:product_id/plans' => 'admin/plugins#index'
|
||||||
|
@ -14,6 +14,11 @@ module DiscoursePatrons
|
|||||||
get "/patrons/admin/subscriptions.json"
|
get "/patrons/admin/subscriptions.json"
|
||||||
expect(response.status).to eq(403)
|
expect(response.status).to eq(403)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "does not destroy a subscription" do
|
||||||
|
::Stripe::Subscription.expects(:delete).never
|
||||||
|
patch "/patrons/admin/subscriptions/sub_12345.json"
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'authenticated' do
|
context 'authenticated' do
|
||||||
@ -21,11 +26,20 @@ module DiscoursePatrons
|
|||||||
|
|
||||||
before { sign_in(admin) }
|
before { sign_in(admin) }
|
||||||
|
|
||||||
it "gets the empty subscriptions" do
|
describe "index" do
|
||||||
|
it "gets the subscriptions" do
|
||||||
::Stripe::Subscription.expects(:list)
|
::Stripe::Subscription.expects(:list)
|
||||||
get "/patrons/admin/subscriptions.json"
|
get "/patrons/admin/subscriptions.json"
|
||||||
expect(response.status).to eq(200)
|
expect(response.status).to eq(200)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "destroy" do
|
||||||
|
it "deletes a subscription" do
|
||||||
|
::Stripe::Subscription.expects(:delete).with('sub_12345')
|
||||||
|
delete "/patrons/admin/subscriptions/sub_12345.json"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user