mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Merge remote-tracking branch 'inventree/master'
This commit is contained in:
commit
d97484b30b
@ -90,7 +90,8 @@ class EditCategoryForm(HelperForm):
|
||||
fields = [
|
||||
'parent',
|
||||
'name',
|
||||
'description'
|
||||
'description',
|
||||
'default_location'
|
||||
]
|
||||
|
||||
|
||||
|
@ -0,0 +1,20 @@
|
||||
# Generated by Django 2.2 on 2019-05-04 08:57
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('stock', '0013_remove_stockitem_uuid'),
|
||||
('part', '0014_auto_20190502_2039'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='partcategory',
|
||||
name='default_location',
|
||||
field=models.ForeignKey(blank=True, help_text='Default location for parts in this category', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_categories', to='stock.StockLocation'),
|
||||
),
|
||||
]
|
@ -30,6 +30,13 @@ class PartCategory(InvenTreeTree):
|
||||
""" PartCategory provides hierarchical organization of Part objects.
|
||||
"""
|
||||
|
||||
default_location = models.ForeignKey(
|
||||
'stock.StockLocation', related_name="default_categories",
|
||||
null=True, blank=True,
|
||||
on_delete=models.SET_NULL,
|
||||
help_text='Default location for parts in this category'
|
||||
)
|
||||
|
||||
def get_absolute_url(self):
|
||||
return reverse('category-detail', kwargs={'pk': self.id})
|
||||
|
||||
@ -141,6 +148,29 @@ class Part(models.Model):
|
||||
help_text='Where is this item normally stored?',
|
||||
related_name='default_parts')
|
||||
|
||||
def get_default_location(self):
|
||||
""" Get the default location for a Part (may be None).
|
||||
|
||||
If the Part does not specify a default location,
|
||||
look at the Category this part is in.
|
||||
The PartCategory object may also specify a default stock location
|
||||
"""
|
||||
|
||||
if self.default_location:
|
||||
return self.default_location
|
||||
elif self.category:
|
||||
# Traverse up the category tree until we find a default location
|
||||
cat = self.category
|
||||
|
||||
while cat:
|
||||
if cat.default_location:
|
||||
return cat.default_location
|
||||
else:
|
||||
cat = cat.parent
|
||||
|
||||
# Default case - no default category found
|
||||
return None
|
||||
|
||||
# Default supplier part
|
||||
default_supplier = models.ForeignKey('part.SupplierPart',
|
||||
on_delete=models.SET_NULL,
|
||||
|
@ -8,8 +8,11 @@
|
||||
{% if category %}
|
||||
<h3>{{ category.name }}</h3>
|
||||
<p>{{ category.description }}</p>
|
||||
{% if category.default_location %}
|
||||
<p>Default Location: <a href="{% url 'stock-location-detail' category.default-location.id }%">{{ category.default_location }}</a></p>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<h3>Parts</h3>
|
||||
<h3>Part Categories</h3>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class='col-sm-6'>
|
||||
|
@ -211,7 +211,7 @@ class StockItemCreate(AjaxCreateView):
|
||||
try:
|
||||
part = Part.objects.get(pk=part_id)
|
||||
initials['part'] = part
|
||||
initials['location'] = part.default_location
|
||||
initials['location'] = part.get_default_location()
|
||||
initials['supplier_part'] = part.default_supplier
|
||||
except Part.DoesNotExist:
|
||||
pass
|
||||
|
Loading…
Reference in New Issue
Block a user