fix: 运费金额为空时返回空值,便于顺丰批次展示月结
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
1 parent
92c59d67b4
commit
dd00dba39c
3 files changed
+48
-2
No files matched your search
@@ -27,6 +27,7 @@ from app.models.research_donation import (
|
||||
BizResearchDonationSample,
|
||||
)
|
||||
from app.services.sample_transport_mode import DICT_TYPE, resolve_transport_mode_value
|
||||
from app.services.sf_express_settlement import freight_amount_label
|
||||
|
||||
SAMPLE_SOURCE_CELL = "cell_storage"
|
||||
SAMPLE_SOURCE_DONATION = "research_donation"
|
||||
@@ -160,7 +161,13 @@ def _row_to_dict(
|
||||
"freightNo": getattr(obj, "freight_no", None) or "",
|
||||
"transportMode": obj.transport_mode or "",
|
||||
"transportModeLabel": transport_mode_label or (obj.transport_mode or ""),
|
||||
"freightAmount": float(amount) if amount is not None else 0.0,
|
||||
"freightAmount": float(amount) if amount is not None else None,
|
||||
"freightAmountLabel": freight_amount_label(obj.transport_mode, amount),
|
||||
"waybillNo": getattr(obj, "waybill_no", None) or "",
|
||||
"settleStatus": getattr(obj, "settle_status", None) or "",
|
||||
"settleTime": _fmt_dt(getattr(obj, "settle_time", None))
|
||||
if getattr(obj, "settle_time", None)
|
||||
else "",
|
||||
"linkedSampleCount": int(linked_sample_count or 0),
|
||||
"tenantNo": obj.tenant_no,
|
||||
"orderNum": obj.order_num if obj.order_num is not None else 0,
|
||||
|
||||
@@ -43,6 +43,7 @@ from app.services.market_field_scope import (
|
||||
apply_donation_scope,
|
||||
)
|
||||
from app.services.sample_transport_mode import DICT_TYPE, resolve_transport_mode_value
|
||||
from app.services.sf_express_settlement import freight_amount_label
|
||||
from app.services.web_auth_roles import (
|
||||
_map_role_name_to_web,
|
||||
resolve_web_role_for_user,
|
||||
@@ -307,12 +308,20 @@ def _creator_name_map(
|
||||
def _batch_dict(
|
||||
obj: BizSampleFreight, count: int, label: str, creator_name: str = ''
|
||||
) -> Dict[str, Any]:
|
||||
amount = obj.freight_amount
|
||||
settle_time = getattr(obj, 'settle_time', None)
|
||||
return {
|
||||
'id': obj.id,
|
||||
'freightNo': obj.freight_no or '',
|
||||
'transportMode': obj.transport_mode or '',
|
||||
'transportModeLabel': label or obj.transport_mode or '',
|
||||
'freightAmount': str((obj.freight_amount or Decimal('0')).quantize(Decimal('0.01'))),
|
||||
'freightAmount': None
|
||||
if amount is None
|
||||
else str(Decimal(amount).quantize(Decimal('0.01'))),
|
||||
'freightAmountLabel': freight_amount_label(obj.transport_mode, amount),
|
||||
'waybillNo': getattr(obj, 'waybill_no', None) or '',
|
||||
'settleStatus': getattr(obj, 'settle_status', None) or '',
|
||||
'settleTime': _fmt_dt(settle_time) if settle_time else '',
|
||||
'visibleItemCount': int(count),
|
||||
'remark': obj.remark or '',
|
||||
'createBy': obj.create_by or '',
|
||||
|
||||
@@ -181,3 +181,33 @@ def test_freight_model_allows_null_amount_and_settlement_columns():
|
||||
assert cols["waybill_no"].nullable is True
|
||||
assert cols["settle_status"].nullable is True
|
||||
assert cols["settle_time"].nullable is True
|
||||
|
||||
|
||||
def test_amount_serializer_keeps_null_instead_of_zero():
|
||||
from types import SimpleNamespace
|
||||
from app.crud.sample_freight import _row_to_dict
|
||||
from app.services.market_freight import _batch_dict
|
||||
|
||||
obj = SimpleNamespace(
|
||||
id="f1",
|
||||
freight_no="YF1",
|
||||
transport_mode="sfkd",
|
||||
freight_amount=None,
|
||||
waybill_no=None,
|
||||
settle_status="wjs",
|
||||
settle_time=None,
|
||||
tenant_no="zkxw",
|
||||
order_num=0,
|
||||
remark="",
|
||||
create_by="u1",
|
||||
create_time=None,
|
||||
update_time=None,
|
||||
)
|
||||
admin = _row_to_dict(obj, transport_mode_label="顺丰快递", create_by_name="张三")
|
||||
market = _batch_dict(obj, 1, "顺丰快递", "张三")
|
||||
assert admin["freightAmount"] is None
|
||||
assert admin["waybillNo"] == ""
|
||||
assert admin["settleStatus"] == "wjs"
|
||||
assert admin["freightAmountLabel"] == "月结"
|
||||
assert market["freightAmount"] is None
|
||||
assert market["freightAmountLabel"] == "月结"
|
||||
Reference in new issue
Block a user