From 68ae1110adb0e620038485375fe111ff0cb50d3e Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Wed, 29 Mar 2017 08:37:41 +1100 Subject: [PATCH] Updates - Improved some models - Added PEP check script --- .travis.yml | 2 +- InvenTree/InvenTree/models.py | 4 ++-- InvenTree/part/models.py | 28 ++++++++++++++-------------- InvenTree/part/serializers.py | 17 +++++++++++++++-- InvenTree/stock/models.py | 5 ++++- pep_check.py | 3 +++ 6 files changed, 39 insertions(+), 20 deletions(-) create mode 100644 pep_check.py diff --git a/.travis.yml b/.travis.yml index 2ee970d740..3f55eeb22b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,6 +8,6 @@ before_install: - pip install djangorestframework script: - - "pep8 --exclude=migrations --ignore=E402,W293,E501 InvenTree" + - python pep_check.py - python InvenTree/manage.py check - python InvenTree/manage.py test --noinput \ No newline at end of file diff --git a/InvenTree/InvenTree/models.py b/InvenTree/InvenTree/models.py index 81bf2c62db..e28ca80111 100644 --- a/InvenTree/InvenTree/models.py +++ b/InvenTree/InvenTree/models.py @@ -38,7 +38,7 @@ class InvenTreeTree(models.Model): abstract = True name = models.CharField(max_length=100) - description = models.CharField(max_length=250) + description = models.CharField(max_length=250, blank=True) parent = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, @@ -83,7 +83,7 @@ class InvenTreeTree(models.Model): for a in available: if a.id not in childs: acceptable.append(a) - + return acceptable @property diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 863d2c44a4..62041f756b 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -39,20 +39,13 @@ class Part(models.Model): verbose_name = "Part" verbose_name_plural = "Parts" - @property - def stock_list(self): - """ Return a list of all stock objects associated with this part - """ - - return self.stockitem_set.all() - @property def stock(self): """ Return the total stock quantity for this part. Part may be stored in multiple locations """ - stocks = self.stock_list + stocks = self.locations.all() if len(stocks) == 0: return 0 @@ -132,8 +125,7 @@ class PartParameter(models.Model): """ PartParameter is associated with a single part """ - part = models.ForeignKey(Part, on_delete=models.CASCADE) - + part = models.ForeignKey(Part, on_delete=models.CASCADE, related_name='parameters') template = models.ForeignKey(PartParameterTemplate) # Value data @@ -145,10 +137,10 @@ class PartParameter(models.Model): # from being added to the same part def save(self, *args, **kwargs): params = PartParameter.objects.filter(part=self.part, template=self.template) - if len(params) > 0: - raise ValidationError("Parameter '{param}' already exists for {part}".format( - param=self.template.name, - part=self.part.name)) + if len(params) > 1: + return + if len(params) == 1 and params[0].id != self.id: + return super(PartParameter, self).save(*args, **kwargs) @@ -158,6 +150,14 @@ class PartParameter(models.Model): val=self.value, units=self.template.units) + @property + def units(self): + return self.template.units + + @property + def name(self): + return self.template.name + class Meta: verbose_name = "Part Parameter" verbose_name_plural = "Part Parameters" diff --git a/InvenTree/part/serializers.py b/InvenTree/part/serializers.py index b15ea800c6..267db2b40c 100644 --- a/InvenTree/part/serializers.py +++ b/InvenTree/part/serializers.py @@ -1,16 +1,29 @@ from rest_framework import serializers -from .models import Part, PartCategory +from .models import Part, PartCategory, PartParameter + + +class ParameterSerializer(serializers.ModelSerializer): + class Meta: + model = PartParameter + fields = ('name', + 'value', + 'units') class PartSerializer(serializers.ModelSerializer): + + params = ParameterSerializer(source='parameters', many=True) + class Meta: model = Part fields = ('pk', + 'name', 'IPN', 'description', 'category', - 'stock') + 'stock', + 'params') class PartCategorySerializer(serializers.ModelSerializer): diff --git a/InvenTree/stock/models.py b/InvenTree/stock/models.py index f72a0f3d3a..0e6baeb840 100644 --- a/InvenTree/stock/models.py +++ b/InvenTree/stock/models.py @@ -12,13 +12,15 @@ class Warehouse(InvenTreeTree): class StockItem(models.Model): part = models.ForeignKey(Part, - on_delete=models.CASCADE) + on_delete=models.CASCADE, + related_name='locations') location = models.ForeignKey(Warehouse, on_delete=models.CASCADE) quantity = models.IntegerField() updated = models.DateField(auto_now=True) # Stock status types ITEM_IN_PROGRESS = 0 + ITEM_INCOMING = 5 ITEM_DAMAGED = 10 ITEM_ATTENTION = 20 ITEM_COMPLETE = 50 @@ -26,6 +28,7 @@ class StockItem(models.Model): status = models.IntegerField(default=ITEM_IN_PROGRESS, choices=[ (ITEM_IN_PROGRESS, "In progress"), + (ITEM_INCOMING, "Incoming"), (ITEM_DAMAGED, "Damaged"), (ITEM_ATTENTION, "Requires attention"), (ITEM_COMPLETE, "Complete") diff --git a/pep_check.py b/pep_check.py new file mode 100644 index 0000000000..64de2a568f --- /dev/null +++ b/pep_check.py @@ -0,0 +1,3 @@ +import subprocess + +subprocess.call(['pep8', '--exclude=migrations', '--ignore=EC04,W293,E501', 'InvenTree']) \ No newline at end of file