diff --git a/InvenTree/part/api.py b/InvenTree/part/api.py index 22f371c379..fbb73c1a12 100644 --- a/InvenTree/part/api.py +++ b/InvenTree/part/api.py @@ -119,6 +119,7 @@ class PartList(generics.ListCreateAPIView): 'image', 'name', 'IPN', + 'revision', 'description', 'keywords', 'is_template', diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py index e268c2a167..1564c16316 100644 --- a/InvenTree/part/forms.py +++ b/InvenTree/part/forms.py @@ -93,6 +93,7 @@ class EditPartForm(HelperForm): 'name', 'IPN', 'description', + 'revision', 'keywords', 'variant_of', 'is_template', diff --git a/InvenTree/part/migrations/0011_part_revision.py b/InvenTree/part/migrations/0011_part_revision.py new file mode 100644 index 0000000000..2ae0aa6b19 --- /dev/null +++ b/InvenTree/part/migrations/0011_part_revision.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.2 on 2019-06-20 11:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0010_auto_20190620_2135'), + ] + + operations = [ + migrations.AddField( + model_name='part', + name='revision', + field=models.CharField(blank=True, help_text='Part revision or version number', max_length=100), + ), + ] diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index f77e2d94f4..6a6ba6440c 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -246,6 +246,9 @@ class Part(models.Model): elements.append(self.name) + if self.revision: + elements.append(self.revision) + return ' | '.join(elements) def get_absolute_url(self): @@ -278,13 +281,15 @@ class Part(models.Model): try: parts = Part.objects.exclude(id=self.id).filter( name__iexact=self.name, - IPN__iexact=self.IPN) + IPN__iexact=self.IPN, + revision__iexact=self.revision) if parts.exists(): msg = _("Part must be unique for name, IPN and revision") raise ValidationError({ "name": msg, "IPN": msg, + "revision": msg, }) except Part.DoesNotExist: pass @@ -325,6 +330,8 @@ class Part(models.Model): IPN = models.CharField(max_length=100, blank=True, help_text='Internal Part Number') + revision = models.CharField(max_length=100, blank=True, help_text='Part revision or version number') + URL = models.URLField(blank=True, help_text='Link to extenal URL') image = models.ImageField(upload_to=rename_part_image, max_length=255, null=True, blank=True) @@ -803,6 +810,14 @@ class Part(models.Model): item.pk = None item.save() + # Copy the fields that aren't available in the duplicate form + self.salable = other.salable + self.assembly = other.assembly + self.component = other.component + self.purchaseable = other.purchaseable + self.trackable = other.trackable + self.virtual = other.virtual + self.save() def export_bom(self, **kwargs): diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 68ae0ed3bd..ddd917edc0 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -13,7 +13,7 @@
Part name | -{{ part.full_name }} | +{{ part.name }} |
{{ part.IPN }} | ||
Revision | +{{ part.revision }} | +|
Description | {{ part.description }} | diff --git a/InvenTree/static/script/inventree/part.js b/InvenTree/static/script/inventree/part.js index 83d21aa074..e8ae2662ed 100644 --- a/InvenTree/static/script/inventree/part.js +++ b/InvenTree/static/script/inventree/part.js @@ -126,6 +126,11 @@ function loadPartTable(table, url, options={}) { name += value; + if (row.revision) { + name += ' | '; + name += row.revision; + } + if (row.is_template) { name = '' + name + ''; }