diff --git a/InvenTree/InvenTree/static/script/inventree/filters.js b/InvenTree/InvenTree/static/script/inventree/filters.js index 3209ba3beb..df767441d4 100644 --- a/InvenTree/InvenTree/static/script/inventree/filters.js +++ b/InvenTree/InvenTree/static/script/inventree/filters.js @@ -14,7 +14,7 @@ function defaultFilters() { return { - stock: "cascade=1", + stock: "cascade=1&in_stock=1", build: "", parts: "cascade=1", company: "", diff --git a/InvenTree/company/migrations/0022_auto_20200613_1045.py b/InvenTree/company/migrations/0022_auto_20200613_1045.py new file mode 100644 index 0000000000..66cd1231b8 --- /dev/null +++ b/InvenTree/company/migrations/0022_auto_20200613_1045.py @@ -0,0 +1,55 @@ +# Generated by Django 3.0.7 on 2020-06-13 10:45 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('part', '0045_auto_20200605_0932'), + ('company', '0021_remove_supplierpart_manufacturer_name'), + ] + + operations = [ + migrations.AlterField( + model_name='company', + name='address', + field=models.CharField(blank=True, help_text='Company address', max_length=200, verbose_name='Address'), + ), + migrations.AlterField( + model_name='company', + name='contact', + field=models.CharField(blank=True, help_text='Point of contact', max_length=100, verbose_name='Contact'), + ), + migrations.AlterField( + model_name='company', + name='description', + field=models.CharField(help_text='Description of the company', max_length=500, verbose_name='Company description'), + ), + migrations.AlterField( + model_name='company', + name='email', + field=models.EmailField(blank=True, help_text='Contact email address', max_length=254, verbose_name='Email'), + ), + migrations.AlterField( + model_name='company', + name='name', + field=models.CharField(help_text='Company name', max_length=100, unique=True, verbose_name='Company name'), + ), + migrations.AlterField( + model_name='company', + name='phone', + field=models.CharField(blank=True, help_text='Contact phone number', max_length=50, verbose_name='Phone number'), + ), + migrations.AlterField( + model_name='company', + name='website', + field=models.URLField(blank=True, help_text='Company website URL', verbose_name='Website'), + ), + migrations.AlterField( + model_name='supplierpart', + name='part', + field=models.ForeignKey(help_text='Select part', limit_choices_to={'is_template': False, 'purchaseable': True}, on_delete=django.db.models.deletion.CASCADE, related_name='supplier_parts', to='part.Part', verbose_name='Base Part'), + ), + ] diff --git a/InvenTree/company/models.py b/InvenTree/company/models.py index ec87619cdb..2179897263 100644 --- a/InvenTree/company/models.py +++ b/InvenTree/company/models.py @@ -80,21 +80,25 @@ class Company(models.Model): """ name = models.CharField(max_length=100, blank=False, unique=True, - help_text=_('Company name')) + help_text=_('Company name'), + verbose_name=_('Company name')) - description = models.CharField(max_length=500, help_text=_('Description of the company')) + description = models.CharField(max_length=500, verbose_name=_('Company description'), help_text=_('Description of the company')) - website = models.URLField(blank=True, help_text=_('Company website URL')) + website = models.URLField(blank=True, verbose_name=_('Website'), help_text=_('Company website URL')) address = models.CharField(max_length=200, + verbose_name=_('Address'), blank=True, help_text=_('Company address')) phone = models.CharField(max_length=50, + verbose_name=_('Phone number'), blank=True, help_text=_('Contact phone number')) - email = models.EmailField(blank=True, help_text=_('Contact email address')) + email = models.EmailField(blank=True, verbose_name=_('Email'), help_text=_('Contact email address')) contact = models.CharField(max_length=100, + verbose_name=_('Contact'), blank=True, help_text=_('Point of contact')) link = InvenTreeURLField(blank=True, help_text=_('Link to external company information')) @@ -269,6 +273,7 @@ class SupplierPart(models.Model): part = models.ForeignKey('part.Part', on_delete=models.CASCADE, related_name='supplier_parts', + verbose_name=_('Base Part'), limit_choices_to={ 'purchaseable': True, 'is_template': False, diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py index 47e22fc938..550645cb68 100644 --- a/InvenTree/part/models.py +++ b/InvenTree/part/models.py @@ -594,7 +594,16 @@ class Part(MPTTModel): def quantity_to_order(self): """ Return the quantity needing to be ordered for this part. """ - required = -1 * self.net_stock + # How many do we need to have "on hand" at any point? + required = self.net_stock - self.minimum_stock + + if required < 0: + return abs(required) + + # Do not need to order any + return 0 + + required = self.net_stock return max(required, 0) @property diff --git a/InvenTree/part/templates/part/detail.html b/InvenTree/part/templates/part/detail.html index 1e7d36e127..18970fe373 100644 --- a/InvenTree/part/templates/part/detail.html +++ b/InvenTree/part/templates/part/detail.html @@ -191,7 +191,7 @@