2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-09-14 06:31:27 +00:00

[UI] Sales order button (#9938)

* Refactor stock actions into a hook

* Cleanup hooks

* Allow transfer of "incomplete" outputs

* Simplify even further

* Enable transfer of stock allocated to build order

* Remove StockItemBriefSerializer entirely

* stock actions for items allocated to sales order

* Refactor <PartDetail> page

* Refactor <StockDetail>

* Refactor <LocationDetail>

* Bump API version

* SO button text

- Observe the "SALESORDER_SHIP_COMPLETE" value

* Fix palywright tests
This commit is contained in:
Oliver
2025-07-03 15:22:23 +10:00
committed by GitHub
parent 7ceee940d3
commit 5e9a8f7cb2
17 changed files with 411 additions and 320 deletions

View File

@@ -1,12 +1,16 @@
"""InvenTree API version information."""
# InvenTree API version
INVENTREE_API_VERSION = 359
INVENTREE_API_VERSION = 360
"""Increment this API version number whenever there is a significant change to the API that any clients need to know about."""
INVENTREE_API_TEXT = """
v360 -> 2025-07-02 : https://github.com/inventree/InvenTree/pull/9937
- Provide more detailed StockItem information in the BuildItem serializer
- Provide more detailed StockItem information in the SalesOrderAllocation serializer
v359 -> 2025-07-01 : https://github.com/inventree/InvenTree/pull/9909
- Fixes annotated types for various part fields

View File

@@ -42,7 +42,7 @@ from stock.generators import generate_batch_code
from stock.models import StockItem, StockLocation
from stock.serializers import (
LocationBriefSerializer,
StockItemSerializerBrief,
StockItemSerializer,
StockStatusCustomSerializer,
)
from stock.status_codes import StockStatus
@@ -1227,7 +1227,7 @@ class BuildItemSerializer(DataImportExportSerializerMixin, InvenTreeModelSeriali
pricing=False,
)
stock_item_detail = StockItemSerializerBrief(
stock_item_detail = StockItemSerializer(
source='stock_item', read_only=True, allow_null=True, label=_('Stock Item')
)

View File

@@ -1430,7 +1430,7 @@ class SalesOrderAllocationSerializer(InvenTreeModelSerializer):
part_detail = PartBriefSerializer(
source='item.part', many=False, read_only=True, allow_null=True
)
item_detail = stock.serializers.StockItemSerializerBrief(
item_detail = stock.serializers.StockItemSerializer(
source='item', many=False, read_only=True, allow_null=True
)
location_detail = stock.serializers.LocationBriefSerializer(

View File

@@ -307,41 +307,6 @@ class StockItemTestResultSerializer(
return data
class StockItemSerializerBrief(
InvenTree.serializers.NotesFieldMixin,
InvenTree.serializers.InvenTreeModelSerializer,
):
"""Brief serializers for a StockItem."""
class Meta:
"""Metaclass options."""
model = StockItem
fields = [
'part',
'part_name',
'pk',
'location',
'quantity',
'serial',
'batch',
'supplier_part',
'barcode_hash',
]
read_only_fields = ['barcode_hash']
part_name = serializers.CharField(source='part.full_name', read_only=True)
quantity = InvenTreeDecimalField()
def validate_serial(self, value):
"""Make sure serial is not to big."""
if abs(InvenTree.helpers.extract_int(value)) > 0x7FFFFFFF:
raise serializers.ValidationError(_('Serial number is too large'))
return value
@register_importer()
class StockItemSerializer(
DataImportExportSerializerMixin,
@@ -1336,7 +1301,7 @@ class StockTrackingSerializer(
label = serializers.CharField(read_only=True)
item_detail = StockItemSerializerBrief(
item_detail = StockItemSerializer(
source='item', many=False, read_only=True, allow_null=True
)