Убрали ПВЗ для КСЕ, и поправили формирование тарифа КСЕ
Deploy / deploy (push) Successful in 1m8s

This commit is contained in:
Раис Юсупалиев
2026-05-31 21:34:00 +03:00
parent 6c0f97adf6
commit c2757d24fc
8 changed files with 254 additions and 67 deletions
@@ -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(