Advertisement
Guest User

Untitled

a guest
May 17th, 2020
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.86 KB | None | 0 0
  1. from django.db import models
  2. from django.contrib.auth import get_user_model
  3. from django.core.validators import MinValueValidator, MaxValueValidator
  4.  
  5. class FinanceSheet(models.Model):
  6.     user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE, related_name="sheets")
  7.     name = models.CharField(max_length=100)
  8.  
  9.     class Meta:
  10.         db_table = 'booker_sheets'
  11.         unique_together = ('user', 'name')
  12.  
  13.  
  14. class FinanceCategory(models.Model):
  15.     sheet = models.ForeignKey(FinanceSheet, on_delete=models.CASCADE, related_name="categories")
  16.     name = models.CharField(default=sheet.name, max_length=100)
  17.     positive = models.BooleanField()
  18.  
  19.     class Meta:
  20.         db_table = 'booker_categories'
  21.  
  22.  
  23. class FinanceSheetEntry(models.Model):
  24.     sheet = models.ForeignKey(FinanceSheet, on_delete=models.CASCADE, related_name="entries")
  25.     period = models.DateField()
  26.     name = models.CharField(max_length=100)
  27.  
  28.     class Meta:
  29.         db_table = 'booker_entry'
  30.  
  31.  
  32. class GenericFinanceRow(models.Model):
  33.     name = models.CharField(max_length=100)
  34.     category = models.ForeignKey(FinanceCategory, on_delete=models.CASCADE)
  35.     amount = models.DecimalField(decimal_places=2, max_digits=20)
  36.  
  37.     class Meta:
  38.         abstract = True
  39.  
  40. class TemplatedRow(GenericFinanceRow):
  41.     sheet = models.ForeignKey(FinanceSheet, on_delete=models.CASCADE)
  42.  
  43.     class Meta:
  44.         db_table = 'booker_templated_rows'
  45.  
  46. class EntryRow(GenericFinanceRow):
  47.     entry = models.ForeignKey(FinanceSheetEntry, on_delete=models.CASCADE, related_name="rows")
  48.     description = models.CharField(blank=True, max_length=200)
  49.     pinned = models.BooleanField(default=False)
  50.     origin_amount = models.DecimalField(decimal_places=2, max_digits=20)
  51.     deleted = models.BooleanField(default=False)
  52.  
  53.     class Meta:
  54.         db_table = 'booker_rows'
  55.         unique_together = ('name', 'entry', 'category')
  56.  
  57.     def save(self, *args, **kwargs):
  58.         first_save = self.pk is None
  59.         if first_save:
  60.             self.origin_amount = self.amount
  61.  
  62.         if self.category.positive:
  63.             self.amount = abs(self.amount)
  64.         else:
  65.             self.amount = -abs(self.amount)
  66.  
  67.         return super(EntryRow, self).save(*args, **kwargs)
  68.  
  69.  
  70. class Wish(models.Model):
  71.     sheet = models.ForeignKey(FinanceSheet, on_delete=models.CASCADE)
  72.     name = models.CharField(max_length=100)
  73.     description = models.CharField(blank=True, max_length=200)
  74.     balance = models.DecimalField(default=0, decimal_places=2, max_digits=20)
  75.     amount = models.DecimalField(decimal_places=2, max_digits=20)
  76.     deleted = models.BooleanField(default=False)
  77.     expected_date =  models.DateField()
  78.     expected_percent = models.DecimalField(validators=[MinValueValidator(.1), MaxValueValidator(100)], decimal_places=2, max_digits=3)
  79.    
  80.     class Meta:
  81.         db_table = 'booker_wishlist'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement