mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 12:06:44 +00:00
* Add pre-commit to the stack * exclude static * Add locales to excludes * fix style errors * rename pipeline steps * also wait on precommit * make template matching simpler * Use the same code for python setup everywhere * use step and cache for python setup * move regular settings up into general envs * just use full update * Use invoke instead of static references * make setup actions more similar * use python3 * refactor names to be similar * fix runner version * fix references * remove incidential change * use matrix for os * Github can't do this right now * ignore docstyle errors * Add seperate docstring test * update flake call * do not fail on docstring * refactor setup into workflow * update reference * switch to action * resturcture * add bash statements * remove os from cache * update input checks * make code cleaner * fix boolean * no relative paths * install wheel by python * switch to install * revert back to simple wheel * refactor import export tests * move setup keys back to not disturbe tests * remove docstyle till that is fixed * update references * continue on error * add docstring test * use relativ action references * Change step / job docstrings * update to merge * reformat comments 1 * fix docstrings 2 * fix docstrings 3 * fix docstrings 4 * fix docstrings 5 * fix docstrings 6 * fix docstrings 7 * fix docstrings 8 * fix docstirns 9 * fix docstrings 10 * docstring adjustments * update the remaining docstrings * small docstring changes * fix function name * update support files for docstrings * Add missing args to docstrings * Remove outdated function * Add docstrings for the 'build' app * Make API code cleaner * add more docstrings for plugin app * Remove dead code for plugin settings No idea what that was even intended for * ignore __init__ files for docstrings * More docstrings * Update docstrings for the 'part' directory * Fixes for related_part functionality * Fix removed stuff from merge 99676ee * make more consistent * Show statistics for docstrings * add more docstrings * move specific register statements to make them clearer to understant * More docstrings for common * and more docstrings * and more * simpler call * docstrings for notifications * docstrings for common/tests * Add docs for common/models * Revert "move specific register statements to make them clearer to understant" This reverts commit ca9665462202c2d63f34b4fd920013b1457bbb6d. * use typing here * Revert "Make API code cleaner" This reverts commit 24fb68bd3e1ccfea2ee398c9e18afb01eb340fee. * docstring updates for the 'users' app * Add generic Meta info to simple Meta classes * remove unneeded unique_together statements * More simple metas * Remove unnecessary format specifier * Remove extra json format specifiers * Add docstrings for the 'plugin' app * Docstrings for the 'label' app * Add missing docstrings for the 'report' app * Fix build test regression * Fix top-level files * docstrings for InvenTree/InvenTree * reduce unneeded code * add docstrings * and more docstrings * more docstrings * more docstrings for stock * more docstrings * docstrings for order/views * Docstrings for various files in the 'order' app * Docstrings for order/test_api.py * Docstrings for order/serializers.py * Docstrings for order/admin.py * More docstrings for the order app * Add docstrings for the 'company' app * Add unit tests for rebuilding the reference fields * Prune out some more dead code * remove more dead code Co-authored-by: Oliver Walters <oliver.henry.walters@gmail.com>
293 lines
7.3 KiB
Python
293 lines
7.3 KiB
Python
"""Admin functionality for the 'order' app"""
|
|
|
|
from django.contrib import admin
|
|
|
|
import import_export.widgets as widgets
|
|
from import_export.admin import ImportExportModelAdmin
|
|
from import_export.fields import Field
|
|
from import_export.resources import ModelResource
|
|
|
|
from .models import (PurchaseOrder, PurchaseOrderExtraLine,
|
|
PurchaseOrderLineItem, SalesOrder, SalesOrderAllocation,
|
|
SalesOrderExtraLine, SalesOrderLineItem,
|
|
SalesOrderShipment)
|
|
|
|
|
|
# region general classes
|
|
class GeneralExtraLineAdmin:
|
|
"""Admin class template for the 'ExtraLineItem' models"""
|
|
list_display = (
|
|
'order',
|
|
'quantity',
|
|
'reference'
|
|
)
|
|
|
|
search_fields = [
|
|
'order__reference',
|
|
'order__customer__name',
|
|
'reference',
|
|
]
|
|
|
|
autocomplete_fields = ('order', )
|
|
|
|
|
|
class GeneralExtraLineMeta:
|
|
"""Metaclass template for the 'ExtraLineItem' models"""
|
|
skip_unchanged = True
|
|
report_skipped = False
|
|
clean_model_instances = True
|
|
# endregion
|
|
|
|
|
|
class PurchaseOrderLineItemInlineAdmin(admin.StackedInline):
|
|
"""Inline admin class for the PurchaseOrderLineItem model"""
|
|
model = PurchaseOrderLineItem
|
|
extra = 0
|
|
|
|
|
|
class PurchaseOrderAdmin(ImportExportModelAdmin):
|
|
"""Admin class for the PurchaseOrder model"""
|
|
|
|
exclude = [
|
|
'reference_int',
|
|
]
|
|
|
|
list_display = (
|
|
'reference',
|
|
'supplier',
|
|
'status',
|
|
'description',
|
|
'creation_date'
|
|
)
|
|
|
|
search_fields = [
|
|
'reference',
|
|
'supplier__name',
|
|
'description',
|
|
]
|
|
|
|
inlines = [
|
|
PurchaseOrderLineItemInlineAdmin
|
|
]
|
|
|
|
autocomplete_fields = ('supplier',)
|
|
|
|
|
|
class SalesOrderAdmin(ImportExportModelAdmin):
|
|
"""Admin class for the SalesOrder model"""
|
|
|
|
exclude = [
|
|
'reference_int',
|
|
]
|
|
|
|
list_display = (
|
|
'reference',
|
|
'customer',
|
|
'status',
|
|
'description',
|
|
'creation_date',
|
|
)
|
|
|
|
search_fields = [
|
|
'reference',
|
|
'customer__name',
|
|
'description',
|
|
]
|
|
|
|
autocomplete_fields = ('customer',)
|
|
|
|
|
|
class PurchaseOrderResource(ModelResource):
|
|
"""Class for managing import / export of PurchaseOrder data."""
|
|
|
|
# Add number of line items
|
|
line_items = Field(attribute='line_count', widget=widgets.IntegerWidget(), readonly=True)
|
|
|
|
# Is this order overdue?
|
|
overdue = Field(attribute='is_overdue', widget=widgets.BooleanWidget(), readonly=True)
|
|
|
|
class Meta:
|
|
"""Metaclass"""
|
|
model = PurchaseOrder
|
|
skip_unchanged = True
|
|
clean_model_instances = True
|
|
exclude = [
|
|
'metadata',
|
|
]
|
|
|
|
|
|
class PurchaseOrderLineItemResource(ModelResource):
|
|
"""Class for managing import / export of PurchaseOrderLineItem data."""
|
|
|
|
part_name = Field(attribute='part__part__name', readonly=True)
|
|
|
|
manufacturer = Field(attribute='part__manufacturer', readonly=True)
|
|
|
|
MPN = Field(attribute='part__MPN', readonly=True)
|
|
|
|
SKU = Field(attribute='part__SKU', readonly=True)
|
|
|
|
class Meta:
|
|
"""Metaclass"""
|
|
model = PurchaseOrderLineItem
|
|
skip_unchanged = True
|
|
report_skipped = False
|
|
clean_model_instances = True
|
|
|
|
|
|
class PurchaseOrderExtraLineResource(ModelResource):
|
|
"""Class for managing import / export of PurchaseOrderExtraLine data."""
|
|
|
|
class Meta(GeneralExtraLineMeta):
|
|
"""Metaclass options."""
|
|
|
|
model = PurchaseOrderExtraLine
|
|
|
|
|
|
class SalesOrderResource(ModelResource):
|
|
"""Class for managing import / export of SalesOrder data."""
|
|
|
|
# Add number of line items
|
|
line_items = Field(attribute='line_count', widget=widgets.IntegerWidget(), readonly=True)
|
|
|
|
# Is this order overdue?
|
|
overdue = Field(attribute='is_overdue', widget=widgets.BooleanWidget(), readonly=True)
|
|
|
|
class Meta:
|
|
"""Metaclass options"""
|
|
model = SalesOrder
|
|
skip_unchanged = True
|
|
clean_model_instances = True
|
|
exclude = [
|
|
'metadata',
|
|
]
|
|
|
|
|
|
class SalesOrderLineItemResource(ModelResource):
|
|
"""Class for managing import / export of SalesOrderLineItem data."""
|
|
|
|
part_name = Field(attribute='part__name', readonly=True)
|
|
|
|
IPN = Field(attribute='part__IPN', readonly=True)
|
|
|
|
description = Field(attribute='part__description', readonly=True)
|
|
|
|
fulfilled = Field(attribute='fulfilled_quantity', readonly=True)
|
|
|
|
def dehydrate_sale_price(self, item):
|
|
"""Return a string value of the 'sale_price' field, rather than the 'Money' object.
|
|
|
|
Ref: https://github.com/inventree/InvenTree/issues/2207
|
|
"""
|
|
if item.sale_price:
|
|
return str(item.sale_price)
|
|
else:
|
|
return ''
|
|
|
|
class Meta:
|
|
"""Metaclass options"""
|
|
model = SalesOrderLineItem
|
|
skip_unchanged = True
|
|
report_skipped = False
|
|
clean_model_instances = True
|
|
|
|
|
|
class SalesOrderExtraLineResource(ModelResource):
|
|
"""Class for managing import / export of SalesOrderExtraLine data."""
|
|
|
|
class Meta(GeneralExtraLineMeta):
|
|
"""Metaclass options."""
|
|
|
|
model = SalesOrderExtraLine
|
|
|
|
|
|
class PurchaseOrderLineItemAdmin(ImportExportModelAdmin):
|
|
"""Admin class for the PurchaseOrderLine model"""
|
|
|
|
resource_class = PurchaseOrderLineItemResource
|
|
|
|
list_display = (
|
|
'order',
|
|
'part',
|
|
'quantity',
|
|
'reference'
|
|
)
|
|
|
|
search_fields = ('reference',)
|
|
|
|
autocomplete_fields = ('order', 'part', 'destination',)
|
|
|
|
|
|
class PurchaseOrderExtraLineAdmin(GeneralExtraLineAdmin, ImportExportModelAdmin):
|
|
"""Admin class for the PurchaseOrderExtraLine model"""
|
|
resource_class = PurchaseOrderExtraLineResource
|
|
|
|
|
|
class SalesOrderLineItemAdmin(ImportExportModelAdmin):
|
|
"""Admin class for the SalesOrderLine model"""
|
|
|
|
resource_class = SalesOrderLineItemResource
|
|
|
|
list_display = (
|
|
'order',
|
|
'part',
|
|
'quantity',
|
|
'reference'
|
|
)
|
|
|
|
search_fields = [
|
|
'part__name',
|
|
'order__reference',
|
|
'order__customer__name',
|
|
'reference',
|
|
]
|
|
|
|
autocomplete_fields = ('order', 'part',)
|
|
|
|
|
|
class SalesOrderExtraLineAdmin(GeneralExtraLineAdmin, ImportExportModelAdmin):
|
|
"""Admin class for the SalesOrderExtraLine model"""
|
|
resource_class = SalesOrderExtraLineResource
|
|
|
|
|
|
class SalesOrderShipmentAdmin(ImportExportModelAdmin):
|
|
"""Admin class for the SalesOrderShipment model"""
|
|
|
|
list_display = [
|
|
'order',
|
|
'shipment_date',
|
|
'reference',
|
|
]
|
|
|
|
search_fields = [
|
|
'reference',
|
|
'order__reference',
|
|
'order__customer__name',
|
|
]
|
|
|
|
autocomplete_fields = ('order',)
|
|
|
|
|
|
class SalesOrderAllocationAdmin(ImportExportModelAdmin):
|
|
"""Admin class for the SalesOrderAllocation model"""
|
|
|
|
list_display = (
|
|
'line',
|
|
'item',
|
|
'quantity'
|
|
)
|
|
|
|
autocomplete_fields = ('line', 'shipment', 'item',)
|
|
|
|
|
|
admin.site.register(PurchaseOrder, PurchaseOrderAdmin)
|
|
admin.site.register(PurchaseOrderLineItem, PurchaseOrderLineItemAdmin)
|
|
admin.site.register(PurchaseOrderExtraLine, PurchaseOrderExtraLineAdmin)
|
|
|
|
admin.site.register(SalesOrder, SalesOrderAdmin)
|
|
admin.site.register(SalesOrderLineItem, SalesOrderLineItemAdmin)
|
|
admin.site.register(SalesOrderExtraLine, SalesOrderExtraLineAdmin)
|
|
|
|
admin.site.register(SalesOrderShipment, SalesOrderShipmentAdmin)
|
|
admin.site.register(SalesOrderAllocation, SalesOrderAllocationAdmin)
|