Skip to content

Commit 48dec15

Browse files
fix(return): fix/return shipments (#1016)
* fix(ups): set ShipFrom to customer address for return shipments * fix(fedex): set origin to customer address for return shipments * fix(ups): swap shipper/recipient in rate request for return shipments * fix(fedex): swap shipper/recipient in rate request for return shipments
1 parent f19fe20 commit 48dec15

4 files changed

Lines changed: 30 additions & 14 deletions

File tree

modules/connectors/fedex/karrio/providers/fedex/rate.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,9 @@ def rate_request(
9292
payload: models.RateRequest,
9393
settings: provider_utils.Settings,
9494
) -> lib.Serializable:
95-
shipper = lib.to_address(payload.shipper)
96-
recipient = lib.to_address(payload.recipient)
95+
is_return = (payload.options or {}).get("is_return", False)
96+
shipper = lib.to_address(payload.recipient if is_return else payload.shipper)
97+
recipient = lib.to_address(payload.shipper if is_return else payload.recipient)
9798
service = lib.to_services(payload.services, provider_units.ShippingService).first
9899
options = lib.to_shipping_options(
99100
payload.options,
@@ -114,11 +115,11 @@ def rate_request(
114115
default_currency = lib.identity(
115116
options.currency.state
116117
or settings.default_currency
117-
or units.CountryCurrency.map(payload.shipper.country_code).value
118+
or units.CountryCurrency.map(shipper.country_code).value
118119
or "USD"
119120
)
120121
weight_unit, dim_unit = lib.identity(
121-
provider_units.COUNTRY_PREFERED_UNITS.get(payload.shipper.country_code)
122+
provider_units.COUNTRY_PREFERED_UNITS.get(shipper.country_code)
122123
or packages.compatible_units
123124
)
124125
request_types = lib.identity(
@@ -149,8 +150,8 @@ def rate_request(
149150

150151
customs = lib.to_customs_info(
151152
payload.customs,
152-
shipper=payload.shipper,
153-
recipient=payload.recipient,
153+
shipper=(payload.recipient if is_return else payload.shipper),
154+
recipient=(payload.shipper if is_return else payload.recipient),
154155
weight_unit=weight_unit.value,
155156
)
156157
commodities = lib.identity(

modules/connectors/fedex/karrio/providers/fedex/shipment/return_shipment.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ def return_shipment_request(
3131
}
3232

3333
return create.shipment_request(
34-
models.ShipmentRequest(**{**lib.to_dict(payload), "options": options}),
34+
models.ShipmentRequest(
35+
**{
36+
**lib.to_dict(payload),
37+
"options": options,
38+
# origin should be the customer (shipper after SDK swap), not the merchant
39+
"return_address": lib.to_dict(payload.shipper),
40+
}
41+
),
3542
settings,
3643
)

modules/connectors/ups/karrio/providers/ups/rate.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -106,9 +106,10 @@ def rate_request(
106106
payload: models.RateRequest,
107107
settings: provider_utils.Settings,
108108
) -> lib.Serializable:
109-
shipper = lib.to_address(payload.shipper)
110-
recipient = lib.to_address(payload.recipient)
111-
return_address = lib.to_address(payload.return_address or payload.shipper)
109+
is_return = (payload.options or {}).get("is_return", False)
110+
shipper = lib.to_address(payload.recipient if is_return else payload.shipper)
111+
recipient = lib.to_address(payload.shipper if is_return else payload.recipient)
112+
return_address = lib.to_address(payload.return_address or shipper)
112113
packages = lib.to_packages(payload.parcels, provider_units.PackagePresets)
113114
is_document = all([parcel.is_document for parcel in payload.parcels])
114115
service = lib.to_services(payload.services, provider_units.ServiceCode).first
@@ -122,8 +123,8 @@ def rate_request(
122123
currency = options.currency.state or settings.default_currency
123124
customs = lib.to_customs_info(
124125
payload.customs,
125-
shipper=payload.shipper,
126-
recipient=payload.recipient,
126+
shipper=(payload.recipient if is_return else payload.shipper),
127+
recipient=(payload.shipper if is_return else payload.recipient),
127128
weight_unit=packages.weight_unit,
128129
)
129130
declared_value = (
@@ -135,7 +136,7 @@ def rate_request(
135136
provider_units.PackagingType.ups_unknown.value if len(packages) > 1 else None
136137
)
137138
weight_unit, dim_unit = lib.identity(
138-
provider_units.COUNTRY_PREFERED_UNITS.get(payload.shipper.country_code)
139+
provider_units.COUNTRY_PREFERED_UNITS.get(shipper.country_code)
139140
or packages.compatible_units
140141
)
141142
indications = [

modules/connectors/ups/karrio/providers/ups/shipment/return_shipment.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ def return_shipment_request(
3434
}
3535

3636
return create.shipment_request(
37-
models.ShipmentRequest(**{**lib.to_dict(payload), "options": options}),
37+
models.ShipmentRequest(
38+
**{
39+
**lib.to_dict(payload),
40+
"options": options,
41+
# ShipFrom should be the customer (shipper after SDK swap), not the merchant
42+
"return_address": lib.to_dict(payload.shipper),
43+
}
44+
),
3845
settings,
3946
)

0 commit comments

Comments
 (0)