Fix subscription and improve views

This commit is contained in:
Skia 2016-03-22 11:42:00 +01:00
parent 0dba76e02e
commit 2e84ee7d4f
9 changed files with 46 additions and 33 deletions

View File

@ -8,7 +8,6 @@ from django.core.exceptions import ValidationError
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin
from club.models import Club, Membership from club.models import Club, Membership
from subscription.views import SubscriberMixin
class ClubListView(CanViewMixin, ListView): class ClubListView(CanViewMixin, ListView):
""" """

View File

@ -201,6 +201,10 @@ class User(AbstractBaseUser, PermissionsMixin):
return True return True
return False return False
def can_be_edited_by(self, user):
return user.is_in_group(settings.AE_GROUPS['board']['name']) or user.is_in_group(settings.AE_GROUPS['root']['name'])
class AnonymousUser(AuthAnonymousUser): class AnonymousUser(AuthAnonymousUser):
def __init__(self, request): def __init__(self, request):
super(AnonymousUser, self).__init__() super(AnonymousUser, self).__init__()

View File

@ -24,8 +24,16 @@
You're seeing the profile of <strong>{{ profile.get_full_name() }}</strong><br/> You're seeing the profile of <strong>{{ profile.get_full_name() }}</strong><br/>
<strong>{{ profile.nick_name }}</strong><br/> <strong>{{ profile.nick_name }}</strong><br/>
<em>{{ profile.date_of_birth|date("d/m/Y") }}</em> <em>{{ profile.date_of_birth|date("d/m/Y") }}</em>
</p> </p>
<p>
{% if get_subscriber(profile).is_subscribed() %}
User is subscriber until {{ get_subscriber(profile).subscriptions.last().subscription_end }}
{% else %}
User is not subscribed. <a href="{{ url('subscription:subscription') }}?member={{ profile.id }}">New subscription</a>
{% endif %}
</p>
{% endblock %} {% endblock %}

View File

@ -9,9 +9,12 @@
<p><a href="{{ url('core:user_profile', user_id=request.user.id) }}">Back to profile</a></p> <p><a href="{{ url('core:user_profile', user_id=request.user.id) }}">Back to profile</a></p>
<ul> <ul>
{% if user.has_perms('core.add_group') %} {% if user.is_in_group(settings.AE_GROUPS['root']['name']) %}
<li><a href="{{ url('core:group_list') }}">Groups</a></li> <li><a href="{{ url('core:group_list') }}">Groups</a></li>
{% endif %} {% endif %}
{% if user.is_in_group(settings.AE_GROUPS['root']['name']) or user.is_in_group(settings.AE_GROUPS['board']['name']) %}
<li><a href="{{ url('subscription:subscription') }}">Subscriptions</a></li>
{% endif %}
</ul> </ul>
{% endblock %} {% endblock %}

View File

@ -97,6 +97,8 @@ TEMPLATES = [
"can_edit_prop": "core.views.can_edit_prop", "can_edit_prop": "core.views.can_edit_prop",
"can_edit": "core.views.can_edit", "can_edit": "core.views.can_edit",
"can_view": "core.views.can_view", "can_view": "core.views.can_view",
"get_subscriber": "subscription.views.get_subscriber",
"settings": "sith.settings",
}, },
"bytecode_cache": { "bytecode_cache": {
"name": "default", "name": "default",

View File

@ -35,6 +35,7 @@ class Subscription(models.Model):
subscription_start = models.DateField(_('subscription start')) subscription_start = models.DateField(_('subscription start'))
subscription_end = models.DateField(_('subscription end')) subscription_end = models.DateField(_('subscription end'))
payment_method = models.CharField(_('payment method'), max_length=255, choices=settings.AE_PAYMENT_METHOD) payment_method = models.CharField(_('payment method'), max_length=255, choices=settings.AE_PAYMENT_METHOD)
# TODO add location!
class Meta: class Meta:
permissions = ( permissions = (
@ -112,6 +113,9 @@ class Subscription(models.Model):
return start.replace(month=(start.month+6*duration)%12, return start.replace(month=(start.month+6*duration)%12,
year=start.year+int(duration/2)+(1 if start.month > 6 and duration%2 == 1 else 0)) year=start.year+int(duration/2)+(1 if start.month > 6 and duration%2 == 1 else 0))
def can_be_edited_by(self, user):
return user.is_in_group(settings.AE_GROUPS['board']['name']) or user.is_in_group(settings.AE_GROUPS['root']['name'])
def is_valid_now(self): def is_valid_now(self):
return self.subscription_start <= date.today() and date.today() <= self.subscription_end return self.subscription_start <= date.today() and date.today() <= self.subscription_end

View File

@ -1,18 +0,0 @@
{% extends "core/base.html" %}
{% block title %}
{% if profile %}
Edit {{ member.user.get_display_name }}'s subscription
{% endif %}
{% endblock %}
{% block content %}
<h3>Edit subscription</h3>
{# <p><a href="{% url 'core:user_profile' object.member.user.id %}">Go to profile</a></p> #}
{# <p>You're editing the subscription of <strong>{{ member.user.get_display_name }}</strong></p>#}
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<p><input type="submit" value="Save!" /></p>
</form>
{% endblock %}

View File

@ -0,0 +1,14 @@
{% extends "core/base.jinja" %}
{% block title %}
New subscription
{% endblock %}
{% block content %}
<h3>New subscription</h3>
<form action="" method="post">
{% csrf_token %}
{{ form.as_p() }}
<p><input type="submit" value="Save!" /></p>
</form>
{% endblock %}

View File

@ -10,23 +10,20 @@ from subscription.models import Subscriber, Subscription
from core.views import CanEditMixin, CanEditPropMixin, CanViewMixin from core.views import CanEditMixin, CanEditPropMixin, CanViewMixin
from core.models import User from core.models import User
class SubscriberMixin(View): def get_subscriber(user):
def dispatch(self, request, *arg, **kwargs): s = Subscriber.objects.filter(pk=user.pk).first()
res = super(SubscriberMixin, self).dispatch(request, *arg, **kwargs) return s
subscriber = Subscriber.objects.filter(pk=request.user.pk).first()
if subscriber is not None and subscriber.is_subscribed():
return ret
raise PermissionDenied
class SubscriptionForm(forms.ModelForm): class SubscriptionForm(forms.ModelForm):
class Meta: class Meta:
model = Subscription model = Subscription
fields = ['member', 'subscription_type', 'payment_method'] fields = ['member', 'subscription_type', 'payment_method']
#widgets = {
# 'subscription_type': Select(choices={(k.lower(), k+" - "+str(v['price'])+"€"+str(Subscription.compute_end(2))) for k,v in settings.AE_SUBSCRIPTIONS.items()}),
#}
class NewSubscription(CanEditMixin, CreateView): class NewSubscription(CanEditMixin, CreateView):
template_name = 'subscription/subscription.html' template_name = 'subscription/subscription.jinja'
form_class = SubscriptionForm form_class = SubscriptionForm
def get_initial(self):
if 'member' in self.request.GET.keys():
return {'member': self.request.GET['member']}
return {}