diff --git a/RIGS/tests/test_models.py b/RIGS/tests/test_models.py index 5d602f8f..e6bdc743 100644 --- a/RIGS/tests/test_models.py +++ b/RIGS/tests/test_models.py @@ -10,6 +10,10 @@ from reversion import revisions as reversion from RIGS import models +def assert_decimal_equality(d1, d2): + assert float(d1) == pytest.approx(float(d2)) + + def test_str(): profile = models.Profile(first_name='Test', last_name='Case') assert str(profile) == 'Test Case' @@ -18,12 +22,12 @@ def test_str(): @pytest.mark.django_db -def test_find_correct(): +def test_find_correct(vat_rate): new_rate = models.VatRate.objects.create(start_at='2016-03-01', rate=0.15, comment='test2') r = models.VatRate.objects.find_rate('2015-03-01') - assert r == vat_rate + assert_decimal_equality(r.rate, vat_rate.rate) r = models.VatRate.objects.find_rate('2016-03-01') - assert r == new_rate + assert_decimal_equality(r.rate, new_rate.rate) def test_percent_correct(vat_rate): diff --git a/assets/__init__.py b/assets/__init__.py index e69de29b..f11e3b4c 100644 --- a/assets/__init__.py +++ b/assets/__init__.py @@ -0,0 +1 @@ +default_app_config = 'assets.apps.AssetsAppConfig' diff --git a/assets/apps.py b/assets/apps.py new file mode 100644 index 00000000..f9eaa84d --- /dev/null +++ b/assets/apps.py @@ -0,0 +1,8 @@ +from django.apps import AppConfig + + +class AssetsAppConfig(AppConfig): + name = 'assets' + + def ready(self): + import assets.signals diff --git a/assets/management/commands/generateSampleAssetsData.py b/assets/management/commands/generateSampleAssetsData.py index 622fed28..f66f80c8 100644 --- a/assets/management/commands/generateSampleAssetsData.py +++ b/assets/management/commands/generateSampleAssetsData.py @@ -2,10 +2,12 @@ import random from django.core.management.base import BaseCommand, CommandError from django.utils import timezone +from django.db import transaction from reversion import revisions as reversion from RIGS import models as rigsmodels from assets import models +from assets.signals import split_asset_id class Command(BaseCommand): @@ -26,6 +28,7 @@ class Command(BaseCommand): random.seed('Some object to see the random number generator') + # with transaction.atomic(): This is redundant since its all bulk create self.create_categories() models.AssetCategory.objects.bulk_create(self.categories) self.create_statuses() @@ -57,7 +60,7 @@ class Command(BaseCommand): def create_categories(self): choices = ['Case', 'Video', 'General', 'Sound', 'Lighting', 'Rigging'] - pk = 99 + pk = models.AssetCategory.objects.count() + 10 for cat in choices: self.categories.append(models.AssetCategory(pk=pk, name=cat)) pk += 1 @@ -66,9 +69,12 @@ class Command(BaseCommand): asset_description = ['Large cable', 'Shiny thing', 'New lights', 'Really expensive microphone', 'Box of fuse flaps', 'Expensive tool we didn\'t agree to buy', 'Cable drums', 'Boring amount of tape', 'Video stuff no one knows how to use', 'More amplifiers', 'Heatshrink'] pk = 1 for i in range(100): + asset_search = split_asset_id(str(pk)) asset = models.Asset( pk=pk, asset_id=str(pk), + asset_id_prefix = asset_search.group(1), + asset_id_number = int(asset_search.group(2)), description=random.choice(asset_description), category=random.choice(self.categories), status=random.choice(self.statuses), @@ -91,9 +97,13 @@ class Command(BaseCommand): lengths = [1, 2, 5, 10, 15, 20, 25, 30, 50, 100] pk = 9000 # Offset to avoid other asset IDs for i in range(100): + asset_id = random.choice(asset_prefixes) + str(pk) + asset_search = split_asset_id(asset_id) asset = models.Asset( pk=pk, - asset_id=random.choice(asset_prefixes) + str(pk), + asset_id=asset_id, + asset_id_prefix = asset_search.group(1), + asset_id_number = int(asset_search.group(2)), description=random.choice(asset_description), category=random.choice(self.categories), status=random.choice(self.statuses), diff --git a/assets/models.py b/assets/models.py index 8e3d4acb..4e18887c 100644 --- a/assets/models.py +++ b/assets/models.py @@ -2,8 +2,6 @@ import re from django.core.exceptions import ValidationError from django.db import models, connection -from django.db.models.signals import pre_save -from django.dispatch.dispatcher import receiver from django.urls import reverse from reversion import revisions as reversion from reversion.models import Version @@ -188,14 +186,3 @@ class Asset(models.Model, RevisionMixin): @property def display_id(self): return str(self.asset_id) - - -@receiver(pre_save, sender=Asset) -def pre_save_asset(sender, instance, **kwargs): - """Automatically fills in hidden members on database access""" - asset_search = re.search("^([a-zA-Z0-9]*?[a-zA-Z]?)([0-9]+)$", instance.asset_id) - if asset_search is None: - instance.asset_id += "1" - asset_search = re.search("^([a-zA-Z0-9]*?[a-zA-Z]?)([0-9]+)$", instance.asset_id) - instance.asset_id_prefix = asset_search.group(1) - instance.asset_id_number = int(asset_search.group(2)) diff --git a/assets/signals.py b/assets/signals.py new file mode 100644 index 00000000..21b04fd6 --- /dev/null +++ b/assets/signals.py @@ -0,0 +1,20 @@ +import re +from django.db.models.signals import pre_save +from django.dispatch.dispatcher import receiver +from .models import Asset + + +def split_asset_id(asset_id): + """Automatically fills in hidden members on database access""" + asset_search = re.search("^([a-zA-Z0-9]*?[a-zA-Z]?)([0-9]+)$", asset_id) + return asset_search + + +@receiver(pre_save, sender=Asset) +def pre_save_asset(sender, instance, **kwargs): + asset_search = split_asset_id(instance.asset_id) + if asset_search is None: + instance.asset_id += "1" + asset_search = split_asset_id(instance.asset_id) + instance.asset_id_prefix = asset_search.group(1) + instance.asset_id_number = int(asset_search.group(2)) diff --git a/assets/templates/partials/asset_buttons.html b/assets/templates/partials/asset_buttons.html index 93347975..d1941eff 100644 --- a/assets/templates/partials/asset_buttons.html +++ b/assets/templates/partials/asset_buttons.html @@ -5,7 +5,7 @@ {% button 'submit' %} {% elif duplicate %} - + {% else %}