Changeset View
Changeset View
Standalone View
Standalone View
blender_fund_main/views/settings.py
| import datetime | import datetime | ||||
| import logging | import logging | ||||
| import pathlib | import pathlib | ||||
| import typing | import typing | ||||
| import django.forms | import django.forms | ||||
| import django.utils.timezone | import django.utils.timezone | ||||
| from django.contrib.auth.decorators import login_required | from django.contrib.auth.decorators import login_required | ||||
| from django.contrib.auth.mixins import LoginRequiredMixin | from django.contrib.auth.mixins import LoginRequiredMixin | ||||
| from django.http import HttpResponse | from django.http import HttpResponse | ||||
| from django.shortcuts import render, get_object_or_404, redirect | from django.shortcuts import render, get_object_or_404, redirect | ||||
| from django.urls import reverse | from django.urls import reverse | ||||
| from django.views.generic import FormView, DetailView, TemplateView | from django.views.generic import FormView, TemplateView | ||||
| from looper.models import Subscription, Order, Transaction | from looper.models import Subscription, Order, Transaction | ||||
| import looper.exceptions | import looper.exceptions | ||||
| import looper.utils | import looper.utils | ||||
| import looper.views.checkout | import looper.views.checkout | ||||
| from looper.money import Money | from looper.money import Money | ||||
| from ..models import Membership | from ..models import Membership | ||||
| from .. import forms, pdf | from .. import forms | ||||
| log = logging.getLogger(__name__) | log = logging.getLogger(__name__) | ||||
| RECHARGEABLE_SUBS_STATUSES = {'active', 'on-hold'} | RECHARGEABLE_SUBS_STATUSES = {'active', 'on-hold'} | ||||
| @login_required | @login_required | ||||
| def settings_home(request): | def settings_home(request): | ||||
| mems = request.user.memberships.select_related('subscription', 'level').all() | mems = request.user.memberships.select_related('subscription', 'level').all() | ||||
| if len(mems) == 1: | if len(mems) == 1: | ||||
| return redirect('settings_membership_edit', membership_id=mems[0].pk) | return redirect('settings_membership_edit', membership_id=mems[0].pk) | ||||
| mems = sorted(mems, key=Membership.template_sort) | mems = sorted(mems, key=Membership.template_sort) | ||||
| context = {'memberships': mems} | context = {'memberships': mems} | ||||
| return render(request, 'settings/home.html', context=context) | return render(request, 'settings/home.html', context=context) | ||||
| @login_required | |||||
| def settings_receipts(request): | |||||
| order_set = request.user.order_set | |||||
| orders = order_set.paid().select_related('subscription__plan') | |||||
| context = { | |||||
| 'orders': orders, | |||||
| 'can_woosh': request.user.is_staff and request.user.has_perm('looper.change_order') | |||||
| } | |||||
| return render(request, 'settings/receipts.html', context=context) | |||||
| class ReceiptView(LoginRequiredMixin, DetailView): | |||||
| template_name = 'settings/receipt.html' | |||||
| pk_url_kwarg = 'order_id' | |||||
| def get_queryset(self): | |||||
| """Limit the allowed order IDs to the ones owned by the user. | |||||
| Staff users with the permission to view orders can access | |||||
| all orders of all users. | |||||
| """ | |||||
| user = self.request.user | |||||
| if user.is_staff and user.has_perm('looper.view_order'): | |||||
| return looper.models.Order.objects.paid() | |||||
| return user.order_set.paid() | |||||
| class ReceiptPDFView(ReceiptView): | |||||
| template_name = 'settings/receipt_pdf.html' | |||||
| response_class = pdf.PDFResponse | |||||
| class SingleMembershipMixin(LoginRequiredMixin): | class SingleMembershipMixin(LoginRequiredMixin): | ||||
| @property | @property | ||||
| def membership_id(self) -> int: | def membership_id(self) -> int: | ||||
| return self.kwargs['membership_id'] | return self.kwargs['membership_id'] | ||||
| def get_membership(self) -> Membership: | def get_membership(self) -> Membership: | ||||
| return get_object_or_404( | return get_object_or_404( | ||||
| self.request.user.memberships, | self.request.user.memberships, | ||||
| ▲ Show 20 Lines • Show All 292 Lines • Show Last 20 Lines | |||||