Changeset View
Changeset View
Standalone View
Standalone View
looper/admin.py
| import copy | import copy | ||||
| from typing import ( | from typing import ( | ||||
| Any, | Any, | ||||
| Callable, | Callable, | ||||
| Dict, | Dict, | ||||
| List, | |||||
| Optional, | Optional, | ||||
| Sequence, | Sequence, | ||||
| Set, | Set, | ||||
| Tuple, | Tuple, | ||||
| Union, | Union, | ||||
| ) | ) | ||||
| import django.db.models | import django.db.models | ||||
| ▲ Show 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | if customer is None: | ||||
| return '-' | return '-' | ||||
| user = customer.user | user = customer.user | ||||
| admin_link = reverse('admin:auth_user_change', kwargs={'object_id': user.pk}) | admin_link = reverse('admin:auth_user_change', kwargs={'object_id': user.pk}) | ||||
| return format_html('<a href="{}">{}</a>', admin_link, str(customer)) | return format_html('<a href="{}">{}</a>', admin_link, str(customer)) | ||||
| customer_link.admin_order_field = 'customer' # type: ignore | customer_link.admin_order_field = 'customer' # type: ignore | ||||
| # TODO(Sybren): this is a total hack, as the membership is only a single product, and | |||||
| # there can be subscriptions without memberships. Furthermore, this creates a dependency | |||||
| # cycle between Blender Fund Main and Looper. For now it's a quick way to get the link, though. | |||||
| membership_link = create_admin_fk_link( | |||||
| 'membership', 'Membership', 'admin:blender_fund_main_membership_change' | |||||
| ) | |||||
| subscription_link = create_admin_fk_link( | subscription_link = create_admin_fk_link( | ||||
| 'subscription', 'subscription', 'admin:looper_subscription_change' | 'subscription', 'subscription', 'admin:looper_subscription_change' | ||||
| ) | ) | ||||
| order_link = create_admin_fk_link('order', 'order', 'admin:looper_order_change') | order_link = create_admin_fk_link('order', 'order', 'admin:looper_order_change') | ||||
| plan_link = create_admin_fk_link('plan', 'plan', 'admin:looper_plan_change') | plan_link = create_admin_fk_link('plan', 'plan', 'admin:looper_plan_change') | ||||
| product_link = create_admin_fk_link('product', 'product', 'admin:looper_product_change') | product_link = create_admin_fk_link('product', 'product', 'admin:looper_product_change') | ||||
| user_link = create_admin_fk_link('user', 'user', 'admin:auth_user_change') | user_link = create_admin_fk_link('user', 'user', 'admin:auth_user_change') | ||||
| ▲ Show 20 Lines • Show All 139 Lines • ▼ Show 20 Lines | class SubscriptionAdmin(EditableWhenNewMixin, admin.ModelAdmin): | ||||
| date_hierarchy = 'created_at' | date_hierarchy = 'created_at' | ||||
| form = forms.SubscriptionAdminForm | form = forms.SubscriptionAdminForm | ||||
| raw_id_fields = ['user'] | raw_id_fields = ['user'] | ||||
| readonly_fields = [ | readonly_fields = [ | ||||
| user_link, | user_link, | ||||
| plan_link, | plan_link, | ||||
| membership_link, | |||||
| 'created_at', | 'created_at', | ||||
| 'updated_at', | 'updated_at', | ||||
| 'intervals_elapsed', | 'intervals_elapsed', | ||||
| 'last_notification', | 'last_notification', | ||||
| ] | ] | ||||
| editable_when_new = {user_link, plan_link} | editable_when_new = {user_link, plan_link} | ||||
| fieldsets = [ | fieldsets: List[Tuple[Any, Dict]] = [ | ||||
| ( | ( | ||||
| None, | None, | ||||
| { | { | ||||
| 'fields': [ | 'fields': [ | ||||
| user_link, | user_link, | ||||
| plan_link, | plan_link, | ||||
| membership_link, | |||||
| 'status', | 'status', | ||||
| 'interval_unit', | 'interval_unit', | ||||
| 'interval_length', | 'interval_length', | ||||
| 'intervals_elapsed', | 'intervals_elapsed', | ||||
| ], | ], | ||||
| }, | }, | ||||
| ), | ), | ||||
| ( | ( | ||||
| ▲ Show 20 Lines • Show All 270 Lines • Show Last 20 Lines | |||||