2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-08-19 18:05:54 +00:00

Separate purchase_price and purchase_price_currency for StockItem serializer

- Add "purchase_price_string" for a read-only stringified representation
- Unit testing
This commit is contained in:
Oliver
2021-08-23 21:44:12 +10:00
parent d267d04bed
commit bb8b85c375
3 changed files with 89 additions and 8 deletions

View File

@@ -4,6 +4,8 @@ JSON serializers for Stock app
from rest_framework import serializers
from django.utils.translation import ugettext_lazy as _
from .models import StockItem, StockLocation
from .models import StockItemTracking
from .models import StockItemAttachment
@@ -22,9 +24,11 @@ from decimal import Decimal
from datetime import datetime, timedelta
import common.models
from common.settings import currency_code_default, currency_code_mappings
from company.serializers import SupplierPartSerializer
from part.serializers import PartBriefSerializer
from InvenTree.serializers import UserSerializerBrief, InvenTreeModelSerializer
from InvenTree.serializers import UserSerializerBrief, InvenTreeModelSerializer, InvenTreeMoneySerializer
from InvenTree.serializers import InvenTreeAttachmentSerializer, InvenTreeAttachmentSerializerField
@@ -139,17 +143,28 @@ class StockItemSerializer(InvenTreeModelSerializer):
required_tests = serializers.IntegerField(source='required_test_count', read_only=True, required=False)
purchase_price = serializers.SerializerMethodField()
purchase_price = InvenTreeMoneySerializer(
label=_('Purchase Price'),
max_digits=19, decimal_places=4,
allow_null=True
)
purchase_price_currency = serializers.ChoiceField(
choices=currency_code_mappings(),
default=currency_code_default,
label=_('Currency'),
)
purchase_price_string = serializers.SerializerMethodField()
def get_purchase_price_string(self, obj):
return str(obj.purchase_price) if obj.purchase_price else '-'
purchase_order_reference = serializers.CharField(source='purchase_order.reference', read_only=True)
sales_order_reference = serializers.CharField(source='sales_order.reference', read_only=True)
def get_purchase_price(self, obj):
""" Return purchase_price (Money field) as string (includes currency) """
return str(obj.purchase_price) if obj.purchase_price else '-'
def __init__(self, *args, **kwargs):
part_detail = kwargs.pop('part_detail', False)
@@ -208,9 +223,12 @@ class StockItemSerializer(InvenTreeModelSerializer):
'uid',
'updated',
'purchase_price',
'purchase_price_currency',
'purchase_price_string',
]
""" These fields are read-only in this context.
"""
These fields are read-only in this context.
They can be updated by accessing the appropriate API endpoints
"""
read_only_fields = [