diff --git a/InvenTree/part/forms.py b/InvenTree/part/forms.py
index 971373ed9b..339c8519fc 100644
--- a/InvenTree/part/forms.py
+++ b/InvenTree/part/forms.py
@@ -173,23 +173,7 @@ class PartPriceForm(forms.Form):
help_text=_('Input quantity for price calculation')
)
- currency = forms.ChoiceField(label='Currency', help_text=_('Select currency for price calculation'))
-
- def get_currency_choices(self):
- """ Create options for Currency """
-
- currencies = Currency.objects.all()
- choices = [(None, '---------')]
-
- for c in currencies:
- choices.append((c.pk, str(c)))
-
- return choices
-
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- self.fields['currency'].choices = self.get_currency_choices()
+ currency = forms.ModelChoiceField(queryset=Currency.objects.all(), label='Currency', help_text=_('Select currency for price calculation'))
class Meta:
model = Part
diff --git a/InvenTree/part/models.py b/InvenTree/part/models.py
index 5040bdc2f0..a06d5ea718 100644
--- a/InvenTree/part/models.py
+++ b/InvenTree/part/models.py
@@ -1140,6 +1140,8 @@ class BomItem(models.Model):
if self.part == self.sub_part:
raise ValidationError({'sub_part': _('Part cannot be added to its own Bill of Materials')})
+ # TODO - Make sure that there is no recusion
+
# Test for simple recursion
for item in self.sub_part.bom_items.all():
if self.part == item.sub_part:
diff --git a/InvenTree/part/templates/part/tabs.html b/InvenTree/part/templates/part/tabs.html
index 86b7986b00..23b0f8070c 100644
--- a/InvenTree/part/templates/part/tabs.html
+++ b/InvenTree/part/templates/part/tabs.html
@@ -13,7 +13,7 @@
Stock {{ part.total_stock }}
- {% if part.allocation_count > 0 %}
+ {% if part.component or part.used_in_count > 0 %}
Allocated {{ part.allocation_count }}
diff --git a/InvenTree/stock/forms.py b/InvenTree/stock/forms.py
index 3a34e0416d..8145a17f89 100644
--- a/InvenTree/stock/forms.py
+++ b/InvenTree/stock/forms.py
@@ -9,6 +9,8 @@ from django import forms
from django.forms.utils import ErrorDict
from django.utils.translation import ugettext as _
+from mptt.fields import TreeNodeChoiceField
+
from InvenTree.helpers import GetExportFormats
from InvenTree.forms import HelperForm
from .models import StockLocation, StockItem, StockItemTracking
@@ -67,25 +69,12 @@ class CreateStockItemForm(HelperForm):
class SerializeStockForm(forms.ModelForm):
""" Form for serializing a StockItem. """
- destination = forms.ChoiceField(label='Destination', required=True, help_text='Destination for serialized stock (by default, will remain in current location)')
+ destination = TreeNodeChoiceField(queryset=StockLocation.objects.all(), label='Destination', required=True, help_text='Destination for serialized stock (by default, will remain in current location)')
+
serial_numbers = forms.CharField(label='Serial numbers', required=True, help_text='Unique serial numbers (must match quantity)')
+
note = forms.CharField(label='Notes', required=False, help_text='Add transaction note (optional)')
- def get_location_choices(self):
- locs = StockLocation.objects.all()
-
- choices = [(None, '---------')]
-
- for loc in locs:
- choices.append((loc.pk, loc.pathstring + ' - ' + loc.description))
-
- return choices
-
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- self.fields['destination'].choices = self.get_location_choices()
-
class Meta:
model = StockItem
@@ -135,28 +124,16 @@ class AdjustStockForm(forms.ModelForm):
This form is used for managing stock adjuments for single or multiple stock items.
"""
- def get_location_choices(self):
- locs = StockLocation.objects.all()
-
- choices = [(None, '---------')]
-
- for loc in locs:
- choices.append((loc.pk, loc.pathstring + ' - ' + loc.description))
-
- return choices
-
- destination = forms.ChoiceField(label='Destination', required=True, help_text=_('Destination stock location'))
+ destination = TreeNodeChoiceField(queryset=StockLocation.objects.all(), label='Destination', required=True, help_text=_('Destination stock location'))
+
note = forms.CharField(label='Notes', required=True, help_text='Add note (required)')
+
# transaction = forms.BooleanField(required=False, initial=False, label='Create Transaction', help_text='Create a stock transaction for these parts')
+
confirm = forms.BooleanField(required=False, initial=False, label='Confirm stock adjustment', help_text=_('Confirm movement of stock items'))
set_loc = forms.BooleanField(required=False, initial=False, label='Set Default Location', help_text=_('Set the destination as the default location for selected parts'))
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
-
- self.fields['destination'].choices = self.get_location_choices()
-
class Meta:
model = StockItem