Election bdd + first view

This commit is contained in:
Antoine Bartuccio 2016-12-05 20:18:03 +01:00
parent 0280a65623
commit d685e9ba29
13 changed files with 197 additions and 1 deletions

View File

@ -15,6 +15,8 @@ from club.models import Club, Membership
from subscription.models import Subscription from subscription.models import Subscription
from counter.models import Customer, ProductType, Product, Counter from counter.models import Customer, ProductType, Product, Counter
from com.models import Sith from com.models import Sith
from election.models import Election, Responsability, Candidate
class Command(BaseCommand): class Command(BaseCommand):
help = "Populate a new instance of the Sith AE" help = "Populate a new instance of the Sith AE"
@ -122,6 +124,14 @@ Welcome to the wiki page!
skia.save() skia.save()
skia.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id] skia.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
skia.save() skia.save()
# Adding user sli
sli = User(username='sli', last_name="Li", first_name="S",
email="sli@git.an",
date_of_birth="1942-06-12")
sli.set_password("plop")
sli.save()
skia.view_groups=[Group.objects.filter(name=settings.SITH_MAIN_MEMBERS_GROUP).first().id]
sli.save()
# Adding user public # Adding user public
public = User(username='public', last_name="Not subscribed", first_name="Public", public = User(username='public', last_name="Not subscribed", first_name="Public",
email="public@git.an", email="public@git.an",
@ -219,6 +229,14 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'], duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
start=s.subscription_start) start=s.subscription_start)
s.save() s.save()
## Sli
s = Subscription(member=Subscriber.objects.filter(pk=sli.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
s.subscription_start = s.compute_start()
s.subscription_end = s.compute_end(
duration=settings.SITH_SUBSCRIPTIONS[s.subscription_type]['duration'],
start=s.subscription_start)
s.save()
## Comptable ## Comptable
s = Subscription(member=User.objects.filter(pk=comptable.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0], s = Subscription(member=User.objects.filter(pk=comptable.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[0],
payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0])
@ -329,5 +347,12 @@ Cette page vise à documenter la syntaxe *Markdown* utilisée sur le site.
target_label=op[7], cheque_number=op[8]) target_label=op[7], cheque_number=op[8])
operation.clean() operation.clean()
operation.save() operation.save()
# Create an election
el = Election(title="Élection 2017", description="La roue tourne", start_date='1942-06-12 10:28:45', end_date='7942-06-12 10:28:45')
el.save()
resp = Responsability(election=el, title="Co Respo Info", description="Ghetto++")
resp.save()
cand = Candidate(responsability=resp, subscriber=skia)
cand.save()

0
election/__init__.py Normal file
View File

3
election/admin.py Normal file
View File

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('subscription', '0003_auto_20160902_1914'),
]
operations = [
migrations.CreateModel(
name='Candidate',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('votes', models.IntegerField(default=0, verbose_name='votes')),
],
),
migrations.CreateModel(
name='Election',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('title', models.CharField(verbose_name='title', max_length=255)),
('description', models.TextField(blank=True, null=True, verbose_name='description')),
('start_date', models.DateTimeField(verbose_name='start date')),
('end_date', models.DateTimeField(verbose_name='end date')),
],
),
migrations.CreateModel(
name='Responsability',
fields=[
('id', models.AutoField(primary_key=True, verbose_name='ID', auto_created=True, serialize=False)),
('title', models.CharField(verbose_name='title', max_length=255)),
('description', models.TextField(blank=True, null=True, verbose_name='description')),
('blank_votes', models.IntegerField(default=0, verbose_name='blank votes')),
('election', models.ForeignKey(to='election.Election', related_name='election', verbose_name='election')),
],
),
migrations.AddField(
model_name='candidate',
name='responsability',
field=models.ForeignKey(to='election.Responsability', related_name='responsability', verbose_name='responsability'),
),
migrations.AddField(
model_name='candidate',
name='subscriber',
field=models.ForeignKey(related_name='candidate', to='subscription.Subscriber', blank=True, verbose_name='user'),
),
]

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('election', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='candidate',
name='program',
field=models.TextField(verbose_name='description', null=True, blank=True),
),
]

View File

54
election/models.py Normal file
View File

@ -0,0 +1,54 @@
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.utils import timezone
from django.conf import settings
from datetime import timedelta
from core.models import User
from subscription.models import Subscriber
from subscription.views import get_subscriber
class Election(models.Model):
"""
This class allow to create a new election
"""
title = models.CharField(_('title'), max_length=255)
description = models.TextField(_('description'), null=True, blank=True)
start_date = models.DateTimeField(_('start date'), blank=False)
end_date = models.DateTimeField(_('end date'), blank=False)
def __str__(self):
return self.title
@property
def is_active(self):
now = timezone.now()
return bool(now <= self.end_date and now >= self.start_date)
def get_results(self):
pass
class Responsability(models.Model):
"""
"""
election = models.ForeignKey(Election, related_name='election', verbose_name=_("election"))
title = models.CharField(_('title'), max_length=255)
description = models.TextField(_('description'), null=True, blank=True)
blank_votes = models.IntegerField(_('blank votes'), default=0)
def __str__(self):
return ("%s : %s") % (self.election.title, self.title)
class Candidate(models.Model):
"""
"""
responsability = models.ForeignKey(Responsability, related_name='responsability', verbose_name=_("responsability"))
subscriber = models.ForeignKey(Subscriber, verbose_name=_('user'), related_name='candidate', blank=True)
program = models.TextField(_('description'), null=True, blank=True)
votes = models.IntegerField(_('votes'), default=0)
def __str__(self):
return ("%s : %s -> %s") % (self.election.title, self.title, self.subscriber.get_full_name())

View File

@ -0,0 +1,13 @@
{% extends "core/base.jinja" %}
{% block title %}
{% trans %}Election list{% endtrans %}
{% endblock %}
{% block content %}
{% for el in object_list %}
{% if el.is_active %}
<p>{{el}}</p>
{% endif %}
{% endfor %}
{% endblock %}

3
election/tests.py Normal file
View File

@ -0,0 +1,3 @@
from django.test import TestCase
# Create your tests here.

7
election/urls.py Normal file
View File

@ -0,0 +1,7 @@
from django.conf.urls import url, include
from election.views import *
urlpatterns = [
url(r'^$', ElectionsListView.as_view(), name='election_list'),
]

19
election/views.py Normal file
View File

@ -0,0 +1,19 @@
from django.shortcuts import render
from django.views.generic import ListView, DetailView, RedirectView
from django.views.generic.edit import UpdateView, CreateView, DeleteView, FormView
from django.core.urlresolvers import reverse_lazy, reverse
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from core.views import CanViewMixin, CanEditMixin, CanEditPropMixin, CanCreateMixin
from election.models import Election, Responsability, Candidate
# Display elections
class ElectionsListView(CanViewMixin, ListView):
"""
A list with all responsabilities and their candidates
"""
model = Election
template_name = 'election/election_list.jinja'

View File

@ -58,6 +58,7 @@ INSTALLED_APPS = (
'rootplace', 'rootplace',
'sas', 'sas',
'com', 'com',
'election',
) )
MIDDLEWARE_CLASSES = ( MIDDLEWARE_CLASSES = (

View File

@ -39,6 +39,7 @@ urlpatterns = [
url(r'^launderette/', include('launderette.urls', namespace="launderette", app_name="launderette")), url(r'^launderette/', include('launderette.urls', namespace="launderette", app_name="launderette")),
url(r'^sas/', include('sas.urls', namespace="sas", app_name="sas")), url(r'^sas/', include('sas.urls', namespace="sas", app_name="sas")),
url(r'^api/v1/', include('api.urls', namespace="api", app_name="api")), url(r'^api/v1/', include('api.urls', namespace="api", app_name="api")),
url(r'^election/', include('election.urls', namespace="election", app_name="election")),
url(r'^admin/', include(admin.site.urls)), url(r'^admin/', include(admin.site.urls)),
url(r'^ajax_select/', include(ajax_select_urls)), url(r'^ajax_select/', include(ajax_select_urls)),
url(r'^i18n/', include('django.conf.urls.i18n')), url(r'^i18n/', include('django.conf.urls.i18n')),