2018-12-13 17:48:16 +00:00
|
|
|
from django.db import models
|
|
|
|
|
2018-12-14 18:52:18 +00:00
|
|
|
from django.utils import timezone
|
|
|
|
|
2019-02-05 18:41:28 +00:00
|
|
|
|
2018-12-13 23:06:54 +00:00
|
|
|
class Account(models.Model):
|
|
|
|
"""Account for a member."""
|
|
|
|
balance = models.DecimalField(
|
|
|
|
verbose_name="Solde",
|
|
|
|
max_digits=4,
|
|
|
|
decimal_places=2,
|
|
|
|
default=0
|
|
|
|
)
|
|
|
|
firstname = models.CharField(max_length=255, verbose_name="Nom")
|
|
|
|
lastname = models.CharField(max_length=255, verbose_name="Prénom")
|
|
|
|
email = models.EmailField(verbose_name="Email")
|
|
|
|
|
|
|
|
def calc_balance(self):
|
|
|
|
"""Adjust the ballance according to the sales,
|
|
|
|
without saving the model."""
|
|
|
|
self.balance = Sale.objects.filter(account=self)\
|
2019-02-05 18:43:17 +00:00
|
|
|
.aggregate(models.Sum('price'))['price__sum'] or 0
|
2019-02-05 18:41:28 +00:00
|
|
|
|
2018-12-13 23:06:54 +00:00
|
|
|
|
|
|
|
class Sale(models.Model):
|
|
|
|
"""Represents a sale"""
|
|
|
|
price = models.DecimalField(
|
2018-12-14 17:28:58 +00:00
|
|
|
verbose_name="Prix (€)",
|
2019-02-05 18:41:28 +00:00
|
|
|
max_digits=5,
|
|
|
|
decimal_places=3
|
2018-12-13 23:06:54 +00:00
|
|
|
)
|
|
|
|
account = models.ForeignKey(Account, on_delete=models.SET_NULL, null=True)
|
|
|
|
title = models.CharField(max_length=255, verbose_name="Intitulé")
|
2018-12-14 18:52:18 +00:00
|
|
|
date = models.DateTimeField(verbose_name="Date", default=timezone.now)
|
2018-12-13 23:06:54 +00:00
|
|
|
|
2019-02-05 18:41:28 +00:00
|
|
|
|
2018-12-13 23:06:54 +00:00
|
|
|
class Article(models.Model):
|
|
|
|
"""An article which can be sold."""
|
|
|
|
price = models.DecimalField(
|
|
|
|
verbose_name="Prix unitaire (au €/g)",
|
|
|
|
max_digits=4,
|
2019-02-05 18:41:28 +00:00
|
|
|
decimal_places=3
|
2018-12-13 23:06:54 +00:00
|
|
|
)
|
|
|
|
name = models.CharField(
|
|
|
|
max_length=255,
|
|
|
|
verbose_name="Désignation"
|
|
|
|
)
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
return ' '.join([self.name, str(self.price), '€/g'])
|