This commit is contained in:
@@ -16,12 +16,15 @@ _DATETIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class CSEOrderRegistrationParams:
|
||||
"""Contract-specific required parameters for SaveDocuments."""
|
||||
"""Contract-specific required parameters for SaveDocuments.
|
||||
|
||||
``Urgency`` is not here: it comes from the tariff the client selected
|
||||
(``system_data.tariff.tariff_code`` holds the urgency GUID).
|
||||
"""
|
||||
|
||||
payer: str
|
||||
payment_method: str
|
||||
shipping_method: str
|
||||
urgency: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
@@ -31,39 +34,54 @@ class CSEOrderRegistrationResult:
|
||||
|
||||
def build_calc_body_for_calculation(
|
||||
request: DeliveryCalculationRequest,
|
||||
delivery_type: str = "",
|
||||
) -> dict[str, Element]:
|
||||
destination = Element(
|
||||
key="Destination",
|
||||
fields=[
|
||||
make_field("SenderGeography", resolve_cse_geography(request.from_city)),
|
||||
make_field("RecipientGeography", resolve_cse_geography(request.to_city)),
|
||||
make_field("TypeOfCargo", resolve_type_of_cargo(_parcel_type(request))),
|
||||
make_field("Weight", _format_decimal(request.weight_kg), "float"),
|
||||
make_field("Qty", "1", "int"),
|
||||
],
|
||||
)
|
||||
return _calc_body(destination)
|
||||
fields = [
|
||||
make_field("SenderGeography", resolve_cse_geography(request.from_city)),
|
||||
make_field("RecipientGeography", resolve_cse_geography(request.to_city)),
|
||||
make_field("TypeOfCargo", resolve_type_of_cargo(_parcel_type(request))),
|
||||
make_field("Weight", _format_decimal(request.weight_kg), "float"),
|
||||
make_field("Qty", "1", "int"),
|
||||
]
|
||||
_append_delivery_type(fields, delivery_type)
|
||||
return _calc_body(Element(key="Destination", fields=fields))
|
||||
|
||||
|
||||
def build_calc_body_for_payment(request: InitPaymentRequest) -> dict[str, Element]:
|
||||
def build_calc_body_for_payment(
|
||||
request: InitPaymentRequest,
|
||||
delivery_type: str = "",
|
||||
) -> dict[str, Element]:
|
||||
system_data = request.system_data
|
||||
destination = Element(
|
||||
key="Destination",
|
||||
fields=[
|
||||
make_field(
|
||||
"SenderGeography",
|
||||
resolve_cse_geography(request.sender_address.city_id),
|
||||
),
|
||||
make_field(
|
||||
"RecipientGeography",
|
||||
resolve_cse_geography(request.receiver_address.city_id),
|
||||
),
|
||||
make_field("TypeOfCargo", resolve_type_of_cargo(system_data.parcel_type)),
|
||||
make_field("Weight", system_data.weight, "float"),
|
||||
make_field("Qty", "1", "int"),
|
||||
],
|
||||
)
|
||||
return _calc_body(destination)
|
||||
fields = [
|
||||
make_field(
|
||||
"SenderGeography",
|
||||
resolve_cse_geography(request.sender_address.city_id),
|
||||
),
|
||||
make_field(
|
||||
"RecipientGeography",
|
||||
resolve_cse_geography(request.receiver_address.city_id),
|
||||
),
|
||||
make_field("TypeOfCargo", resolve_type_of_cargo(system_data.parcel_type)),
|
||||
make_field("Weight", system_data.weight, "float"),
|
||||
make_field("Qty", "1", "int"),
|
||||
]
|
||||
_append_delivery_type(fields, delivery_type)
|
||||
return _calc_body(Element(key="Destination", fields=fields))
|
||||
|
||||
|
||||
def _append_delivery_type(fields: list[Element], delivery_type: str) -> None:
|
||||
if delivery_type:
|
||||
fields.append(make_field("DeliveryType", delivery_type))
|
||||
|
||||
|
||||
def split_tariff_code(tariff_code: str) -> tuple[str, str]:
|
||||
"""Split the CSE ``tariff_code`` into (delivery_type, urgency).
|
||||
|
||||
The unified tariff_code encodes both dimensions as ``"<DeliveryType>|<Urgency>"``.
|
||||
"""
|
||||
|
||||
delivery_type, _, urgency = tariff_code.partition("|")
|
||||
return delivery_type, urgency
|
||||
|
||||
|
||||
def _calc_body(destination: Element) -> dict[str, Element]:
|
||||
@@ -83,6 +101,7 @@ def map_cse_save_order_request(
|
||||
) -> dict[str, Element]:
|
||||
system_data = request.system_data
|
||||
take_date = request.pickup_date.strftime(_DATETIME_FORMAT)
|
||||
delivery_type, urgency = split_tariff_code(system_data.tariff.tariff_code)
|
||||
|
||||
fields = [
|
||||
make_field("TakeDate", take_date, "dateTime"),
|
||||
@@ -101,7 +120,7 @@ def map_cse_save_order_request(
|
||||
),
|
||||
make_field("RecipientAddress", _compose_address(request.receiver_address)),
|
||||
make_field("RecipientPhone", request.receiver_contact.phone),
|
||||
make_field("Urgency", params.urgency),
|
||||
make_field("Urgency", urgency),
|
||||
make_field("Payer", params.payer, "float"),
|
||||
make_field("PaymentMethod", params.payment_method, "float"),
|
||||
make_field("ShippingMethod", params.shipping_method),
|
||||
@@ -109,6 +128,8 @@ def map_cse_save_order_request(
|
||||
make_field("Weight", system_data.weight, "float"),
|
||||
make_field("CargoPackageQty", "1", "float"),
|
||||
]
|
||||
if delivery_type:
|
||||
fields.append(make_field("DeliveryOfCargo", delivery_type))
|
||||
|
||||
if request.delivery_date is not None:
|
||||
fields.append(
|
||||
|
||||
Reference in New Issue
Block a user