mirror of
https://github.com/nottinghamtec/PyRIGS.git
synced 2026-01-21 15:32:14 +00:00
Created VatRateManager to help find correct VAT Rates
Added necessary properties to Event for rendering in templates
This commit is contained in:
@@ -3,6 +3,7 @@ from django.contrib.auth.models import AbstractUser
|
|||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
import hashlib
|
import hashlib
|
||||||
import reversion
|
import reversion
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
class Profile(AbstractUser):
|
class Profile(AbstractUser):
|
||||||
@@ -64,16 +65,36 @@ class Organisation(models.Model, RevisionMixin):
|
|||||||
return string
|
return string
|
||||||
|
|
||||||
|
|
||||||
|
class VatManager(models.Manager):
|
||||||
|
def currentRate(self):
|
||||||
|
return self.find_rate(datetime.now())
|
||||||
|
|
||||||
|
def find_rate(self, date):
|
||||||
|
# return self.filter(startAt__lte=date).latest()
|
||||||
|
try:
|
||||||
|
return self.filter(start_at__lte=date).latest()
|
||||||
|
except VatRate.DoesNotExist:
|
||||||
|
r = VatRate
|
||||||
|
r.rate = 0
|
||||||
|
return r
|
||||||
|
|
||||||
|
|
||||||
@reversion.register
|
@reversion.register
|
||||||
class VatRate(models.Model, RevisionMixin):
|
class VatRate(models.Model, RevisionMixin):
|
||||||
start_at = models.DateTimeField()
|
start_at = models.DateTimeField()
|
||||||
rate = models.DecimalField(max_digits=6, decimal_places=6)
|
rate = models.DecimalField(max_digits=6, decimal_places=6)
|
||||||
comment = models.CharField(max_length=255)
|
comment = models.CharField(max_length=255)
|
||||||
|
|
||||||
|
objects = VatManager()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def as_percent(self):
|
def as_percent(self):
|
||||||
return (self.rate * 100)
|
return (self.rate * 100)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ['-start_at']
|
||||||
|
get_latest_by = 'start_at'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.comment + " " + str(self.start_at) + " @ " + str(self.as_percent) + "%"
|
return self.comment + " " + str(self.start_at) + " @ " + str(self.as_percent) + "%"
|
||||||
|
|
||||||
@@ -139,6 +160,26 @@ class Event(models.Model, RevisionMixin):
|
|||||||
purchase_order = models.CharField(max_length=255, blank=True, null=True)
|
purchase_order = models.CharField(max_length=255, blank=True, null=True)
|
||||||
collector = models.CharField(max_length=255, blank=True, null=True)
|
collector = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
|
||||||
|
# Calculated values
|
||||||
|
@property
|
||||||
|
def sum_total(self):
|
||||||
|
sum = 0
|
||||||
|
for item in self.items.all():
|
||||||
|
sum += item.total_cost
|
||||||
|
return sum
|
||||||
|
|
||||||
|
@property
|
||||||
|
def vat_rate(self):
|
||||||
|
return VatRate.objects.find_rate(self.start_date)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def vat(self):
|
||||||
|
return self.sum_total * self.vat_rate.rate
|
||||||
|
|
||||||
|
@property
|
||||||
|
def total(self):
|
||||||
|
return self.sum_total + self.vat
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return str(self.pk) + ": " + self.name
|
return str(self.pk) + ": " + self.name
|
||||||
|
|
||||||
@@ -155,8 +196,11 @@ class EventItem(models.Model):
|
|||||||
def total_cost(self):
|
def total_cost(self):
|
||||||
return self.cost * self.quantity
|
return self.cost * self.quantity
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
ordering = ['order']
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.event.name + " | " + self.name
|
return str(self.event.pk) + "." + str(self.order) + ": " + self.event.name + " | " + self.name
|
||||||
|
|
||||||
|
|
||||||
class EventCrew(models.Model):
|
class EventCrew(models.Model):
|
||||||
|
|||||||
Reference in New Issue
Block a user