2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-16 03:55:41 +00:00

[Feature] External build order (#9312)

* Add BuildOrder reference to PurchaseOrderLineItem

* Add setting to enable / disable external build orders

* Fix for supplier part detail

* Update forms

* Filter build list by "external" status

* Add "external" attribute to BuildOrder

* Filter by external build when selecting against purchase order line item

* Add frontend elements

* Prevent creation of build outputs

* Tweak related model field

- Send filters when fetching initial data

* Fix migrations

* Fix some existing typos

* Add build info when receiving line items

* Logic fix

* Bump API version

* Updated relationship

* Add external orders tab for order

* Display table of external purchase orders against a build order

* Fix permissions

* Tweak field definition

* Add unit tests

* Tweak api_version.py

* Playwright testing

* Fix discrepancy in 'building' filter

* Add basic documentation

( more work required )

* Tweak docs macros

* Migration fix

* Adjust build page tabs

* Fix imports

* Fix broken import

* Update playywright tests

* Bump API version

* Handle DB issues

* Improve filter

* Cleaner code

* Fix column ordering bug

* Add filters to build output table

* Documentation

* Tweak unit test

* Add "scheduled_for_production" field

* Add helper function to part model

* Cleanup
This commit is contained in:
Oliver
2025-06-12 18:27:15 +10:00
committed by GitHub
parent 5915a1e13d
commit c6848b8e87
46 changed files with 864 additions and 157 deletions

View File

@ -318,8 +318,14 @@ def define_env(env):
json.dump(data, f, indent=4)
@env.macro
def rendersetting(key: str, setting: dict):
"""Render a provided setting object into a table row."""
def rendersetting(key: str, setting: dict, short: bool = False):
"""Render a provided setting object into a table row.
Arguments:
key: The name of the setting to extract information for.
setting: The setting object to render.
short: If True, return a short version of the setting (default: False)
"""
name = setting['name']
description = setting['description']
default = setting.get('default')
@ -328,37 +334,44 @@ def define_env(env):
default = f'`{default}`' if default else ''
units = f'`{units}`' if units else ''
return (
f'| <div title="{key}">{name}</div> | {description} | {default} | {units} |'
)
if short:
return f'<span title="{key}"><strong>{name}</strong></span>'
return f'| <div title="{key}"><strong>{name}</strong></div> | {description} | {default} | {units} |'
@env.macro
def globalsetting(key: str):
def globalsetting(key: str, short: bool = False):
"""Extract information on a particular global setting.
Arguments:
key: The name of the global setting to extract information for.
short: If True, return a short version of the setting (default: False)
"""
global GLOBAL_SETTINGS
setting = GLOBAL_SETTINGS[key]
observe_setting(key, 'global')
# Settings are only 'observed' if they are displayed in full
if not short:
observe_setting(key, 'global')
return rendersetting(key, setting)
return rendersetting(key, setting, short=short)
@env.macro
def usersetting(key: str):
def usersetting(key: str, short: bool = False):
"""Extract information on a particular user setting.
Arguments:
key: The name of the user setting to extract information for.
short: If True, return a short version of the setting (default: False)
"""
global USER_SETTINGS
setting = USER_SETTINGS[key]
observe_setting(key, 'user')
# Settings are only 'observed' if they are displayed in full
if not short:
observe_setting(key, 'user')
return rendersetting(key, setting)
return rendersetting(key, setting, short=short)
@env.macro
def tags_and_filters():