| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- from django.db import models
- from django.contrib.contenttypes.models import ContentType
- from django.contrib.contenttypes.fields import GenericForeignKey
- class AuthoringDatesModel(models.Model):
- created_at = models.DateTimeField(auto_now_add=True, null=True)
- modified_at = models.DateTimeField(auto_now=True)
- class Meta:
- abstract = True
- class Source(AuthoringDatesModel):
- name = models.CharField(max_length=150)
- def __str__(self):
- return self.name
- class OnlineSource(Source):
- url = models.URLField(max_length=200)
- class PhysicalSource(Source):
- # TODO auto add coordinates by searching shop address
- latitude = models.FloatField()
- longitude = models.FloatField()
- class Category(AuthoringDatesModel):
- name = models.CharField(max_length=150)
- type = models.CharField(
- max_length=20,
- choices=[
- ("Fixed", "Fixed expense"),
- ("Variable", "Variable expense"),
- ],
- default="Variable",
- )
- # Surcharge de la manière d'afficher un objet sensor
- def __str__(self):
- return self.name
- class Meta:
- # db_table = 'book' # Permet de personnaliser le nom de la table en BDD
- verbose_name = "Category" # Le nom lisbile du modèle
- verbose_name_plural = "Categories" # Le nom au pluriel du modèle
- ordering = ("name", "type") # Le tri par défaut dans les listes
- class MetaExpense(AuthoringDatesModel):
- category = models.ForeignKey(
- Category,
- related_name="%(app_label)s_%(class)s_related",
- on_delete=models.PROTECT,
- )
- source = models.ForeignKey(
- Source, related_name="%(app_label)s_%(class)s_related", on_delete=models.PROTECT
- )
- class Meta:
- abstract = True
- class RawExpense(models.Model):
- name = models.CharField(max_length=150)
- date = models.DateField()
- amount = models.DecimalField(max_digits=10, decimal_places=2)
- class LoneExpense(RawExpense, MetaExpense):
- def __str__(self):
- return self.name
- class Meta:
- # db_table = 'book' # Permet de personnaliser le nom de la table en BDD
- verbose_name = "LoneExpense" # Le nom lisbile du modèle
- verbose_name_plural = "LoneExpenses" # Le nom au pluriel du modèle
- ordering = ("name", "date", "amount") # Le tri par défaut dans les listes
- class Expense(models.Model):
- object_id = models.PositiveIntegerField()
- content_type = models.ForeignKey(
- ContentType,
- related_name="%(app_label)s_%(class)s_related",
- on_delete=models.CASCADE,
- )
- content_object = GenericForeignKey("content_type", "object_id")
- # Surcharge de la manière d'afficher un objet sensor
- def __str__(self):
- return self.content_object.name
- class Meta:
- # db_table = 'book' # Permet de personnaliser le nom de la table en BDD
- verbose_name = "Expense" # Le nom lisbile du modèle
- verbose_name_plural = "Expenses" # Le nom au pluriel du modèle
- """ ordering = ("name", "date", "amount") # Le tri par défaut dans les listes """
- class MultiplePaymentExepense(MetaExpense):
- name = models.CharField(max_length=150)
- date = models.DateField()
- amount = models.DecimalField(max_digits=10, decimal_places=2)
- payments = models.ForeignKey(
- RawExpense, related_name="multiple_payment_expense", on_delete=models.PROTECT
- )
- number_of_payment = models.PositiveIntegerField()
- def __str__(self):
- return self.name
|