From 8fc360a9770ee3ce259107dba55c54c4a12afa4c Mon Sep 17 00:00:00 2001 From: Skia Date: Thu, 28 Jan 2016 17:42:22 +0100 Subject: [PATCH] Improve subscription and add it to admin app --- ae/admin.py | 3 --- ae/migrations/0002_auto_20151215_1625.py | 19 --------------- core/admin.py | 2 ++ sith/settings.py | 14 +++++++---- sith/urls.py | 2 +- {ae => subscription}/__init__.py | 0 subscription/admin.py | 8 +++++++ .../migrations/0001_initial.py | 10 ++++---- {ae => subscription}/migrations/__init__.py | 0 {ae => subscription}/models.py | 23 ++++++++++++++++++- .../templates/subscription}/subscription.html | 0 {ae => subscription}/tests.py | 0 {ae => subscription}/urls.py | 2 +- {ae => subscription}/views.py | 4 ++-- 14 files changed, 50 insertions(+), 37 deletions(-) delete mode 100644 ae/admin.py delete mode 100644 ae/migrations/0002_auto_20151215_1625.py rename {ae => subscription}/__init__.py (100%) create mode 100644 subscription/admin.py rename {ae => subscription}/migrations/0001_initial.py (67%) rename {ae => subscription}/migrations/__init__.py (100%) rename {ae => subscription}/models.py (78%) rename {ae/templates/ae => subscription/templates/subscription}/subscription.html (100%) rename {ae => subscription}/tests.py (100%) rename {ae => subscription}/urls.py (85%) rename {ae => subscription}/views.py (86%) diff --git a/ae/admin.py b/ae/admin.py deleted file mode 100644 index 8c38f3f3..00000000 --- a/ae/admin.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.contrib import admin - -# Register your models here. diff --git a/ae/migrations/0002_auto_20151215_1625.py b/ae/migrations/0002_auto_20151215_1625.py deleted file mode 100644 index 9a3a8828..00000000 --- a/ae/migrations/0002_auto_20151215_1625.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -from __future__ import unicode_literals - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ae', '0001_initial'), - ] - - operations = [ - migrations.AlterField( - model_name='subscription', - name='subscription_type', - field=models.CharField(verbose_name='subscription type', max_length=255, choices=[('cursus-branche', 'Cursus Branche'), ('cursus-tronc-commun', 'Cursus Tronc Commun'), ('deux-semestres', 'Deux semestres'), ('un-semestre', 'Un semestre')]), - ), - ] diff --git a/core/admin.py b/core/admin.py index 3d943daa..305cc92c 100644 --- a/core/admin.py +++ b/core/admin.py @@ -1,8 +1,10 @@ from django.contrib import admin from core.models import User, Page, Group +from django.contrib.auth.models import Group as AuthGroup admin.site.register(User) +admin.site.unregister(AuthGroup) admin.site.register(Group) admin.site.register(Page) diff --git a/sith/settings.py b/sith/settings.py index 3c5c99f6..f55564db 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -38,7 +38,7 @@ INSTALLED_APPS = ( 'django.contrib.messages', 'django.contrib.staticfiles', 'core', - 'ae', + 'subscription', 'accounting', ) @@ -151,19 +151,23 @@ AE_PAYMENT_METHOD = [('cheque', 'Chèque'), # Subscription durations are in semestres (should be settingized) AE_SUBSCRIPTIONS = { - 'Un semestre': { + 'un-semestre': { + 'name': 'Un semestre', 'price': 15, 'duration': 1, }, - 'Deux semestres': { + 'deux-semestres': { + 'name': 'Deux semestres', 'price': 28, 'duration': 2, }, - 'Cursus Tronc Commun': { + 'cursus-tronc-commun': { + 'name': 'Cursus Tronc Commun', 'price': 45, 'duration': 4, }, - 'Cursus Branche': { + 'cursus-branche': { + 'name': 'Cursus Branche', 'price': 45, 'duration': 6, }, diff --git a/sith/urls.py b/sith/urls.py index 546fb12e..0d2d125e 100644 --- a/sith/urls.py +++ b/sith/urls.py @@ -23,6 +23,6 @@ handler404 = "core.views.not_found" urlpatterns = [ url(r'^', include('core.urls', namespace="core", app_name="core")), - url(r'^ae/', include('ae.urls', namespace="ae", app_name="ae")), + url(r'^subscription/', include('subscription.urls', namespace="asso", app_name="subscription")), url(r'^admin/', include(admin.site.urls)), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # TODO: remove me for production!!! diff --git a/ae/__init__.py b/subscription/__init__.py similarity index 100% rename from ae/__init__.py rename to subscription/__init__.py diff --git a/subscription/admin.py b/subscription/admin.py new file mode 100644 index 00000000..6b0f4bb1 --- /dev/null +++ b/subscription/admin.py @@ -0,0 +1,8 @@ +from django.contrib import admin + +from subscription.models import Member, Subscription + + + +admin.site.register(Member) +admin.site.register(Subscription) diff --git a/ae/migrations/0001_initial.py b/subscription/migrations/0001_initial.py similarity index 67% rename from ae/migrations/0001_initial.py rename to subscription/migrations/0001_initial.py index e36abd65..ce5abc8f 100644 --- a/ae/migrations/0001_initial.py +++ b/subscription/migrations/0001_initial.py @@ -8,25 +8,25 @@ from django.conf import settings class Migration(migrations.Migration): dependencies = [ - ('core', '0002_auto_20151215_0827'), + ('core', '0005_auto_20160128_0842'), ] operations = [ migrations.CreateModel( name='Member', fields=[ - ('user', models.OneToOneField(primary_key=True, to=settings.AUTH_USER_MODEL, serialize=False)), + ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL, primary_key=True, serialize=False)), ], ), migrations.CreateModel( name='Subscription', fields=[ - ('id', models.AutoField(auto_created=True, serialize=False, primary_key=True, verbose_name='ID')), - ('subscription_type', models.CharField(choices=[('cursus branche', 'Cursus Branche'), ('cursus tronc commun', 'Cursus Tronc Commun'), ('deux semestres', 'Deux semestres'), ('un semestre', 'Un semestre')], verbose_name='subscription type', max_length=255)), + ('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)), + ('subscription_type', models.CharField(choices=[('cursus-branche', 'Cursus Branche'), ('cursus-tronc-commun', 'Cursus Tronc Commun'), ('deux-semestres', 'Deux semestres'), ('un-semestre', 'Un semestre')], verbose_name='subscription type', max_length=255)), ('subscription_start', models.DateField(verbose_name='subscription start')), ('subscription_end', models.DateField(verbose_name='subscription end')), ('payment_method', models.CharField(choices=[('cheque', 'Chèque'), ('cash', 'Espèce'), ('other', 'Autre')], verbose_name='payment method', max_length=255)), - ('member', models.ForeignKey(related_name='subscriptions', to='ae.Member')), + ('member', models.ForeignKey(to='subscription.Member', related_name='subscriptions')), ], options={ 'ordering': ['subscription_start'], diff --git a/ae/migrations/__init__.py b/subscription/migrations/__init__.py similarity index 100% rename from ae/migrations/__init__.py rename to subscription/migrations/__init__.py diff --git a/ae/models.py b/subscription/models.py similarity index 78% rename from ae/models.py rename to subscription/models.py index 1703f519..1908ea8a 100644 --- a/ae/models.py +++ b/subscription/models.py @@ -20,18 +20,39 @@ class Member(models.Model): def is_subscribed(self): return self.subscriptions.last().is_valid_now() + def __str__(self): + return self.user.username + class Subscription(models.Model): member = models.ForeignKey(Member, related_name='subscriptions') subscription_type = models.CharField(_('subscription type'), max_length=255, - choices=((k.lower().replace(' ', '-'), k) for k in sorted(settings.AE_SUBSCRIPTIONS.keys()))) + choices=((k, v['name']) for k,v in sorted(settings.AE_SUBSCRIPTIONS.items()))) subscription_start = models.DateField(_('subscription start')) subscription_end = models.DateField(_('subscription end')) payment_method = models.CharField(_('payment method'), max_length=255, choices=settings.AE_PAYMENT_METHOD) + def save(self, *args, **kwargs): + """ + This makes the Subscription to be updated with right dates with respect to date.today() each time you save the + Subscription object. + It means that you must be careful when modifying old Subscription, because you could make + someone that had no more valid subscription to get one again! + + TODO: FIXME by putting it in the right function that would be triggered only when using the right Form!!!! + """ + self.subscription_start = self.compute_start() + self.subscription_end = self.compute_end( + duration=settings.AE_SUBSCRIPTIONS[self.subscription_type]['duration'], + start=self.subscription_start) + super(Subscription, self).save(*args, **kwargs) + class Meta: ordering = ['subscription_start',] + def __str__(self): + return self.member.user.username+' - '+str(self.pk) + @staticmethod def compute_start(d=date.today()): """ diff --git a/ae/templates/ae/subscription.html b/subscription/templates/subscription/subscription.html similarity index 100% rename from ae/templates/ae/subscription.html rename to subscription/templates/subscription/subscription.html diff --git a/ae/tests.py b/subscription/tests.py similarity index 100% rename from ae/tests.py rename to subscription/tests.py diff --git a/ae/urls.py b/subscription/urls.py similarity index 85% rename from ae/urls.py rename to subscription/urls.py index b550ad04..2e3fc812 100644 --- a/ae/urls.py +++ b/subscription/urls.py @@ -1,6 +1,6 @@ from django.conf.urls import url, include -from ae.views import * +from subscription.views import * urlpatterns = [ # Subscription views diff --git a/ae/views.py b/subscription/views.py similarity index 86% rename from ae/views.py rename to subscription/views.py index c760693b..7ec7c4e9 100644 --- a/ae/views.py +++ b/subscription/views.py @@ -4,7 +4,7 @@ from django import forms from django.forms import Select from django.conf import settings -from ae.models import Member, Subscription +from subscription.models import Member, Subscription from core.views import CanEditMixin, CanEditPropMixin, CanViewMixin class SubscriptionForm(forms.ModelForm): @@ -17,5 +17,5 @@ class SubscriptionForm(forms.ModelForm): class NewSubscription(CanEditMixin, CreateView): - template_name = 'ae/subscription.html' + template_name = 'subscription/subscription.html' form_class = SubscriptionForm