mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
Merge pull request #2269 from SchrodingersGat/bo-form
Improvements for build order forms
This commit is contained in:
commit
bcc086657a
@ -98,7 +98,7 @@ class InvenTreeMetadata(SimpleMetadata):
|
|||||||
Override get_serializer_info so that we can add 'default' values
|
Override get_serializer_info so that we can add 'default' values
|
||||||
to any fields whose Meta.model specifies a default value
|
to any fields whose Meta.model specifies a default value
|
||||||
"""
|
"""
|
||||||
|
|
||||||
serializer_info = super().get_serializer_info(serializer)
|
serializer_info = super().get_serializer_info(serializer)
|
||||||
|
|
||||||
model_class = None
|
model_class = None
|
||||||
@ -108,6 +108,13 @@ class InvenTreeMetadata(SimpleMetadata):
|
|||||||
|
|
||||||
model_fields = model_meta.get_field_info(model_class)
|
model_fields = model_meta.get_field_info(model_class)
|
||||||
|
|
||||||
|
model_default_func = getattr(model_class, 'api_defaults', None)
|
||||||
|
|
||||||
|
if model_default_func:
|
||||||
|
model_default_values = model_class.api_defaults(self.request)
|
||||||
|
else:
|
||||||
|
model_default_values = {}
|
||||||
|
|
||||||
# Iterate through simple fields
|
# Iterate through simple fields
|
||||||
for name, field in model_fields.fields.items():
|
for name, field in model_fields.fields.items():
|
||||||
|
|
||||||
@ -123,6 +130,9 @@ class InvenTreeMetadata(SimpleMetadata):
|
|||||||
|
|
||||||
serializer_info[name]['default'] = default
|
serializer_info[name]['default'] = default
|
||||||
|
|
||||||
|
elif name in model_default_values:
|
||||||
|
serializer_info[name]['default'] = model_default_values[name]
|
||||||
|
|
||||||
# Iterate through relations
|
# Iterate through relations
|
||||||
for name, relation in model_fields.relations.items():
|
for name, relation in model_fields.relations.items():
|
||||||
|
|
||||||
@ -141,6 +151,9 @@ class InvenTreeMetadata(SimpleMetadata):
|
|||||||
if 'help_text' not in serializer_info[name] and hasattr(relation.model_field, 'help_text'):
|
if 'help_text' not in serializer_info[name] and hasattr(relation.model_field, 'help_text'):
|
||||||
serializer_info[name]['help_text'] = relation.model_field.help_text
|
serializer_info[name]['help_text'] = relation.model_field.help_text
|
||||||
|
|
||||||
|
if name in model_default_values:
|
||||||
|
serializer_info[name]['default'] = model_default_values[name]
|
||||||
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ def get_next_build_number():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if Build.objects.count() == 0:
|
if Build.objects.count() == 0:
|
||||||
return
|
return '0001'
|
||||||
|
|
||||||
build = Build.objects.exclude(reference=None).last()
|
build = Build.objects.exclude(reference=None).last()
|
||||||
|
|
||||||
@ -100,13 +100,28 @@ class Build(MPTTModel, ReferenceIndexingMixin):
|
|||||||
return reverse('api-build-list')
|
return reverse('api-build-list')
|
||||||
|
|
||||||
def api_instance_filters(self):
|
def api_instance_filters(self):
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'parent': {
|
'parent': {
|
||||||
'exclude_tree': self.pk,
|
'exclude_tree': self.pk,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def api_defaults(cls, request):
|
||||||
|
"""
|
||||||
|
Return default values for this model when issuing an API OPTIONS request
|
||||||
|
"""
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
'reference': get_next_build_number(),
|
||||||
|
}
|
||||||
|
|
||||||
|
if request and request.user:
|
||||||
|
defaults['issued_by'] = request.user.pk
|
||||||
|
|
||||||
|
return defaults
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
|
|
||||||
self.rebuild_reference_field()
|
self.rebuild_reference_field()
|
||||||
|
@ -37,7 +37,7 @@ def get_next_po_number():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if PurchaseOrder.objects.count() == 0:
|
if PurchaseOrder.objects.count() == 0:
|
||||||
return
|
return '0001'
|
||||||
|
|
||||||
order = PurchaseOrder.objects.exclude(reference=None).last()
|
order = PurchaseOrder.objects.exclude(reference=None).last()
|
||||||
|
|
||||||
@ -66,7 +66,7 @@ def get_next_so_number():
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if SalesOrder.objects.count() == 0:
|
if SalesOrder.objects.count() == 0:
|
||||||
return
|
return '0001'
|
||||||
|
|
||||||
order = SalesOrder.objects.exclude(reference=None).last()
|
order = SalesOrder.objects.exclude(reference=None).last()
|
||||||
|
|
||||||
|
@ -43,11 +43,18 @@ function buildFormFields() {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
sales_order: {
|
sales_order: {
|
||||||
|
icon: 'fa-truck',
|
||||||
},
|
},
|
||||||
batch: {},
|
batch: {},
|
||||||
target_date: {},
|
target_date: {
|
||||||
take_from: {},
|
icon: 'fa-calendar-alt',
|
||||||
destination: {},
|
},
|
||||||
|
take_from: {
|
||||||
|
icon: 'fa-sitemap',
|
||||||
|
},
|
||||||
|
destination: {
|
||||||
|
icon: 'fa-sitemap',
|
||||||
|
},
|
||||||
link: {
|
link: {
|
||||||
icon: 'fa-link',
|
icon: 'fa-link',
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user