expephalon-demomodule/core/models/local.py

35 lines
1.2 KiB
Python
Raw Normal View History

from django.db.models import Model, CharField, BooleanField, DecimalField, ForeignKey, CASCADE
from django_countries.fields import CountryField
class Currency(Model):
name = CharField(max_length=255, unique=True)
code = CharField(max_length=16, unique=True)
symbol = CharField(max_length=8)
base = BooleanField(default=False)
rate = DecimalField(default=1, max_digits=30, decimal_places=10)
def set_base(self):
type(self).get_base().update(base=False)
self.update(base=True)
@classmethod
def get_base(cls):
return cls.objects.get(base=True)
class TaxPolicy(Model):
name = CharField(max_length=255, blank=True)
default_rate = DecimalField(default=0, max_digits=10, decimal_places=5)
def get_applicable_rate(self, country, reverse_charge=False):
rule = self.taxrule_set.get(destination_country=country)
if reverse_charge:
return rule.tax_rate if not rule.reverse_charge else 0
return rule.tax_rate
class TaxRule(Model):
policy = ForeignKey(TaxPolicy, on_delete=CASCADE)
destination_country = CountryField()
tax_rate = DecimalField(max_digits=10, decimal_places=5)
reverse_charge = BooleanField(default=False)