mirror of
https://github.com/nanoy42/coope
synced 2024-11-24 20:33:12 +00:00
Création des models
This commit is contained in:
parent
13160f14c3
commit
30d62032a9
25 changed files with 508 additions and 2 deletions
|
@ -37,6 +37,9 @@ INSTALLED_APPS = [
|
||||||
'django.contrib.sessions',
|
'django.contrib.sessions',
|
||||||
'django.contrib.messages',
|
'django.contrib.messages',
|
||||||
'django.contrib.staticfiles',
|
'django.contrib.staticfiles',
|
||||||
|
'gestion',
|
||||||
|
'users',
|
||||||
|
'preferences',
|
||||||
]
|
]
|
||||||
|
|
||||||
MIDDLEWARE = [
|
MIDDLEWARE = [
|
||||||
|
@ -103,9 +106,9 @@ AUTH_PASSWORD_VALIDATORS = [
|
||||||
# Internationalization
|
# Internationalization
|
||||||
# https://docs.djangoproject.com/en/2.1/topics/i18n/
|
# https://docs.djangoproject.com/en/2.1/topics/i18n/
|
||||||
|
|
||||||
LANGUAGE_CODE = 'en-us'
|
LANGUAGE_CODE = 'fr-fr'
|
||||||
|
|
||||||
TIME_ZONE = 'UTC'
|
TIME_ZONE = 'Europe/Paris'
|
||||||
|
|
||||||
USE_I18N = True
|
USE_I18N = True
|
||||||
|
|
||||||
|
|
0
gestion/__init__.py
Normal file
0
gestion/__init__.py
Normal file
3
gestion/admin.py
Normal file
3
gestion/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
5
gestion/apps.py
Normal file
5
gestion/apps.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class GestionConfig(AppConfig):
|
||||||
|
name = 'gestion'
|
154
gestion/migrations/0001_initial.py
Normal file
154
gestion/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,154 @@
|
||||||
|
# Generated by Django 2.1 on 2018-08-31 12:45
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
import gestion.models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('preferences', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Barrel',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=20)),
|
||||||
|
('stockHold', models.IntegerField(default=0)),
|
||||||
|
('barcode', models.CharField(max_length=20, unique=True)),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||||
|
('capacity', models.IntegerField(default=30)),
|
||||||
|
('active', models.BooleanField(default=False)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='ConsumptionHistory',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('quantity', models.PositiveIntegerField(default=0)),
|
||||||
|
('date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, default=0, max_digits=7)),
|
||||||
|
('coopeman', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='consumption_selled', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('customer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='consumption_taken', to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Menu',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255)),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||||
|
('barcode', models.CharField(max_length=20, unique=True)),
|
||||||
|
('is_active', models.BooleanField(default=False)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='MenuHistory',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('quantity', models.PositiveIntegerField(default=0)),
|
||||||
|
('date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
|
||||||
|
('PaymentMethod', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='preferences.PaymentMethod')),
|
||||||
|
('coopeman', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='menu_selled', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('customer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='menu_taken', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('menu', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='gestion.Menu')),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Product',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=40)),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||||
|
('stockHold', models.IntegerField(default=0)),
|
||||||
|
('stockBar', models.IntegerField(default=0)),
|
||||||
|
('barcode', models.CharField(max_length=20, unique=True)),
|
||||||
|
('category', models.CharField(choices=[('PP', 'Pinte Pression'), ('DP', 'Demi Pression'), ('GP', 'Galopin pression'), ('BT', 'Bouteille'), ('SO', 'Soft'), ('FO', 'Bouffe')], default='FO', max_length=2)),
|
||||||
|
('needQuantityButton', models.BooleanField(default=False)),
|
||||||
|
('is_active', models.BooleanField(default=True)),
|
||||||
|
('is_beer', models.BooleanField(default=False)),
|
||||||
|
('volume', models.IntegerField(default=0)),
|
||||||
|
('deg', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Raming',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('barrel', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='gestion.Barrel')),
|
||||||
|
('coopeman', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Refund',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||||
|
('coopeman', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='refund_realized', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('cutsomer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='refund_taken', to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Reload',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||||
|
('date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('PaymentMethod', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='preferences.PaymentMethod')),
|
||||||
|
('coopeman', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='reload_realized', to=settings.AUTH_USER_MODEL)),
|
||||||
|
('customer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='reload_taken', to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Stocking',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='menu',
|
||||||
|
name='articles',
|
||||||
|
field=models.ManyToManyField(to='gestion.Product'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='consumptionhistory',
|
||||||
|
name='menu',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='gestion.MenuHistory'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='consumptionhistory',
|
||||||
|
name='paymentMethod',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='preferences.PaymentMethod'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='consumptionhistory',
|
||||||
|
name='product',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='gestion.Product'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='barrel',
|
||||||
|
name='demi',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='futd', to='gestion.Product', validators=[gestion.models.isDemi]),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='barrel',
|
||||||
|
name='galopin',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='futg', to='gestion.Product', validators=[gestion.models.isGalopin]),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='barrel',
|
||||||
|
name='pinte',
|
||||||
|
field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='futp', to='gestion.Product', validators=[gestion.models.isPinte]),
|
||||||
|
),
|
||||||
|
]
|
0
gestion/migrations/__init__.py
Normal file
0
gestion/migrations/__init__.py
Normal file
143
gestion/models.py
Normal file
143
gestion/models.py
Normal file
|
@ -0,0 +1,143 @@
|
||||||
|
from django.db import models
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from preferences.models import PaymentMethod
|
||||||
|
class Product(models.Model):
|
||||||
|
P_PRESSION = 'PP'
|
||||||
|
D_PRESSION = 'DP'
|
||||||
|
G_PRESSION = 'GP'
|
||||||
|
BOTTLE = 'BT'
|
||||||
|
SOFT = 'SO'
|
||||||
|
FOOD = 'FO'
|
||||||
|
TYPEINPUT_CHOICES_CATEGORIE = (
|
||||||
|
(P_PRESSION, "Pinte Pression"),
|
||||||
|
(D_PRESSION, "Demi Pression"),
|
||||||
|
(G_PRESSION, "Galopin pression"),
|
||||||
|
(BOTTLE, "Bouteille"),
|
||||||
|
(SOFT, "Soft"),
|
||||||
|
(FOOD, "Bouffe"),
|
||||||
|
)
|
||||||
|
name = models.CharField(max_length=40)
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
|
stockHold = models.IntegerField(default=0)
|
||||||
|
stockBar = models.IntegerField(default=0)
|
||||||
|
barcode= models.CharField(max_length=20, unique=True)
|
||||||
|
category = models.CharField(max_length=2, choices=TYPEINPUT_CHOICES_CATEGORIE, default=FOOD)
|
||||||
|
needQuantityButton = models.BooleanField(default=False)
|
||||||
|
is_active = models.BooleanField(default=True)
|
||||||
|
is_beer = models.BooleanField(default=False)
|
||||||
|
volume = models.IntegerField(default=0)
|
||||||
|
deg = models.DecimalField(default=0,max_digits=5, decimal_places=2)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.nom
|
||||||
|
|
||||||
|
|
||||||
|
def isPinte(id):
|
||||||
|
product = Product.objects.get(id=id)
|
||||||
|
if product.category != Product.P_PRESSION:
|
||||||
|
raise ValidationError(
|
||||||
|
('%(product)s n\'est pas une pinte'),
|
||||||
|
params={'product': product},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def isDemi(id):
|
||||||
|
product = Product.objects.get(id=id)
|
||||||
|
if produit.category != Product.D_PRESSION:
|
||||||
|
raise ValidationError(
|
||||||
|
('%(product)s n\'est pas un demi'),
|
||||||
|
params={'product': product},
|
||||||
|
)
|
||||||
|
|
||||||
|
def isGalopin(id):
|
||||||
|
product = Product.objects.get(id)
|
||||||
|
if product.category != Product.G_PRESSION:
|
||||||
|
raise ValidationError(
|
||||||
|
('%(product)s n\'est pas un galopin'),
|
||||||
|
params={'product': product},
|
||||||
|
)
|
||||||
|
|
||||||
|
class Barrel(models.Model):
|
||||||
|
name = models.CharField(max_length=20)
|
||||||
|
stockHold = models.IntegerField(default=0)
|
||||||
|
barcode = models.CharField(max_length=20, unique=True)
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
|
capacity = models.IntegerField(default=30)
|
||||||
|
pinte = models.ForeignKey(Product, on_delete=models.PROTECT, related_name="futp", validators=[isPinte])
|
||||||
|
demi = models.ForeignKey(Product, on_delete=models.PROTECT, related_name="futd", validators=[isDemi])
|
||||||
|
galopin = models.ForeignKey(Product, on_delete=models.PROTECT, related_name="futg", validators=[isGalopin],null=True, blank=True)
|
||||||
|
active= models.BooleanField(default=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Reload(models.Model):
|
||||||
|
customer = models.ForeignKey(User, on_delete=models.PROTECT, related_name="reload_taken")
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
|
PaymentMethod = models.ForeignKey(PaymentMethod, on_delete=models.PROTECT)
|
||||||
|
coopeman = models.ForeignKey(User, on_delete=models.PROTECT, related_name="reload_realized")
|
||||||
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "Rechargement effectue par {0} le {1} ({2} euros, coopeman : {3})".format(self.customer, self.date, self.amount, self.coopeman)
|
||||||
|
|
||||||
|
|
||||||
|
class Raming(models.Model):
|
||||||
|
barrel = models.ForeignKey(Barrel, on_delete=models.PROTECT)
|
||||||
|
coopeman = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||||
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "Percussion d'un {0} effectué par {1} le {2}".format(self.barrel, self.coopeman, self.date)
|
||||||
|
|
||||||
|
class Stocking(models.Model):
|
||||||
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "Inventaire fait le {0}".format(self.date)
|
||||||
|
|
||||||
|
|
||||||
|
class Refund(models.Model):
|
||||||
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
cutsomer = models.ForeignKey(User, on_delete=models.PROTECT, related_name="refund_taken")
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
|
coopeman = models.ForeignKey(User, on_delete=models.PROTECT, related_name="refund_realized")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "{0} remboursé de {1} le {2} (effectué par {3})".format(self.customer, self.amount, self.date, self.coopeman)
|
||||||
|
|
||||||
|
|
||||||
|
class Menu(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
|
barcode = models.CharField(max_length=20, unique=True)
|
||||||
|
articles = models.ManyToManyField(Product)
|
||||||
|
is_active = models.BooleanField(default=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class MenuHistory(models.Model):
|
||||||
|
customer = models.ForeignKey(User, on_delete=models.PROTECT, related_name="menu_taken")
|
||||||
|
quantity = models.PositiveIntegerField(default=0)
|
||||||
|
PaymentMethod = models.ForeignKey(PaymentMethod, on_delete=models.PROTECT)
|
||||||
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
menu = models.ForeignKey(Menu, on_delete=models.PROTECT)
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2, default=0)
|
||||||
|
coopeman = models.ForeignKey(User, on_delete=models.PROTECT, related_name="menu_selled")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "{2} a consommé {0} {1}".format(self.quantite, self.menu, self.client)
|
||||||
|
|
||||||
|
class ConsumptionHistory(models.Model):
|
||||||
|
customer = models.ForeignKey(User, on_delete=models.PROTECT, related_name="consumption_taken")
|
||||||
|
quantity = models.PositiveIntegerField(default=0)
|
||||||
|
paymentMethod = models.ForeignKey(PaymentMethod, on_delete=models.PROTECT)
|
||||||
|
date = models.DateTimeField(auto_now_add=True)
|
||||||
|
product = models.ForeignKey(Product, on_delete=models.PROTECT)
|
||||||
|
menu = models.ForeignKey(MenuHistory, on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
amount = models.DecimalField(max_digits=7, decimal_places=2, default=0)
|
||||||
|
coopeman = models.ForeignKey(User, on_delete=models.PROTECT, related_name="consumption_selled")
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return "{0} {1} consommé par {2} le {3} (encaissé par {4})".format(self.quantity, self.product, self.customer, self.date, self.coopeman)
|
3
gestion/tests.py
Normal file
3
gestion/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
3
gestion/views.py
Normal file
3
gestion/views.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
0
preferences/__init__.py
Normal file
0
preferences/__init__.py
Normal file
3
preferences/admin.py
Normal file
3
preferences/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
5
preferences/apps.py
Normal file
5
preferences/apps.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class PreferencesConfig(AppConfig):
|
||||||
|
name = 'preferences'
|
36
preferences/migrations/0001_initial.py
Normal file
36
preferences/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Generated by Django 2.1 on 2018-08-31 12:45
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='GeneralPreferences',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('is_active', models.BooleanField(default=True)),
|
||||||
|
('active_message', models.TextField(blank=True)),
|
||||||
|
('global_message', models.TextField(blank=True)),
|
||||||
|
('president', models.CharField(blank=True, max_length=255)),
|
||||||
|
('vice_president', models.CharField(blank=True, max_length=255)),
|
||||||
|
('treasurer', models.CharField(blank=True, max_length=255)),
|
||||||
|
('secretary', models.CharField(blank=True, max_length=255)),
|
||||||
|
('brewer', models.CharField(blank=True, max_length=255)),
|
||||||
|
('grocer', models.CharField(blank=True, max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='PaymentMethod',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
0
preferences/migrations/__init__.py
Normal file
0
preferences/migrations/__init__.py
Normal file
18
preferences/models.py
Normal file
18
preferences/models.py
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
class PaymentMethod(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class GeneralPreferences(models.Model):
|
||||||
|
is_active = models.BooleanField(default=True)
|
||||||
|
active_message = models.TextField(blank=True)
|
||||||
|
global_message = models.TextField(blank=True)
|
||||||
|
president = models.CharField(max_length=255, blank=True)
|
||||||
|
vice_president = models.CharField(max_length=255, blank=True)
|
||||||
|
treasurer = models.CharField(max_length=255, blank=True)
|
||||||
|
secretary = models.CharField(max_length=255, blank=True)
|
||||||
|
brewer = models.CharField(max_length=255, blank=True)
|
||||||
|
grocer = models.CharField(max_length=255, blank=True)
|
3
preferences/tests.py
Normal file
3
preferences/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
3
preferences/views.py
Normal file
3
preferences/views.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
0
users/__init__.py
Normal file
0
users/__init__.py
Normal file
3
users/admin.py
Normal file
3
users/admin.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
|
||||||
|
# Register your models here.
|
5
users/apps.py
Normal file
5
users/apps.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class UsersConfig(AppConfig):
|
||||||
|
name = 'users'
|
55
users/migrations/0001_initial.py
Normal file
55
users/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
# Generated by Django 2.1 on 2018-08-31 12:45
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||||
|
('preferences', '0001_initial'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Cotisation',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('amount', models.DecimalField(decimal_places=2, max_digits=5)),
|
||||||
|
('paymentDate', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('endDate', models.DateTimeField()),
|
||||||
|
('paymentMethod', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='preferences.PaymentMethod')),
|
||||||
|
('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Profile',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('credit', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
|
||||||
|
('debit', models.DecimalField(decimal_places=2, default=0, max_digits=5)),
|
||||||
|
('cotisationEnd', models.DateTimeField(blank=True, null=True)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='School',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='profile',
|
||||||
|
name='school',
|
||||||
|
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='users.School'),
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='profile',
|
||||||
|
name='user',
|
||||||
|
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||||
|
),
|
||||||
|
]
|
0
users/migrations/__init__.py
Normal file
0
users/migrations/__init__.py
Normal file
55
users/models.py
Normal file
55
users/models.py
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
from django.db import models
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from django.db.models.signals import post_save
|
||||||
|
from django.dispatch import receiver
|
||||||
|
|
||||||
|
from preferences.models import PaymentMethod
|
||||||
|
|
||||||
|
class School(models.Model):
|
||||||
|
name = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return self.name
|
||||||
|
|
||||||
|
class Cotisation(models.Model):
|
||||||
|
user = models.ForeignKey(User, on_delete=models.PROTECT)
|
||||||
|
amount = models.DecimalField(max_digits=5, decimal_places=2)
|
||||||
|
paymentDate = models.DateTimeField(auto_now_add=True)
|
||||||
|
endDate = models.DateTimeField()
|
||||||
|
paymentMethod = models.ForeignKey(PaymentMethod, on_delete=models.PROTECT)
|
||||||
|
|
||||||
|
class Profile(models.Model):
|
||||||
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
||||||
|
credit = models.DecimalField(max_digits=5, decimal_places=2, default=0)
|
||||||
|
debit = models.DecimalField(max_digits=5, decimal_places=2, default=0)
|
||||||
|
school = models.ForeignKey(School, on_delete=models.PROTECT, blank=True, null=True)
|
||||||
|
cotisationEnd = models.DateTimeField(blank=True, null=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def solde(self):
|
||||||
|
return self.credit - self.debit
|
||||||
|
|
||||||
|
def soldePositif(self):
|
||||||
|
return self.solde() >= 0
|
||||||
|
|
||||||
|
@property
|
||||||
|
def classement(self):
|
||||||
|
return Compte.objects.filter(debit__gte=self.debit).count()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def alcool(self):
|
||||||
|
consos = Consommation.objects.filter(client=self).select_related('produit')
|
||||||
|
alcool = 0
|
||||||
|
for conso in consos:
|
||||||
|
produit = conso.produit
|
||||||
|
alcool += conso.nombre * float(produit.deg) * produit.volume * 0.79 /10 /1000
|
||||||
|
return alcool
|
||||||
|
|
||||||
|
@receiver(post_save, sender=User)
|
||||||
|
def create_user_profile(sender, instance, created, **kwargs):
|
||||||
|
if created:
|
||||||
|
Profile.objects.create(user=instance)
|
||||||
|
|
||||||
|
@receiver(post_save, sender=User)
|
||||||
|
def save_user_profile(sender, instance, **kwargs):
|
||||||
|
instance.profile.save()
|
3
users/tests.py
Normal file
3
users/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
3
users/views.py
Normal file
3
users/views.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
|
||||||
|
# Create your views here.
|
Loading…
Reference in a new issue