Skip to content

Commit 6231a3c

Browse files
committed
[FIX] delivery_ups_oca: Hide unavailable shipping methods
1 parent 3bd3eb4 commit 6231a3c

2 files changed

Lines changed: 37 additions & 10 deletions

File tree

delivery_ups_oca/models/delivery_carrier.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,18 @@
55
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
66

77
import base64
8+
import logging
89
from io import BytesIO
910

1011
from PIL import Image
1112

1213
from odoo import fields, models
14+
from odoo.exceptions import UserError
1315

1416
from .ups_request import UpsRequest
1517

18+
_logger = logging.getLogger(__name__)
19+
1620

1721
class DeliveryCarrier(models.Model):
1822
_inherit = "delivery.carrier"
@@ -121,16 +125,27 @@ def _ups_get_response_price(self, total_charges, currency, company):
121125

122126
def ups_rate_shipment(self, order):
123127
ups_request = UpsRequest(self)
124-
response = ups_request.rate_shipment(order)
125-
price = self._ups_get_response_price(
126-
response, order.currency_id, order.company_id
127-
)
128-
return {
129-
"success": True,
130-
"price": price,
131-
"error_message": False,
132-
"warning_message": False,
133-
}
128+
try:
129+
response = ups_request.rate_shipment(order)
130+
price = self._ups_get_response_price(
131+
response, order.currency_id, order.company_id
132+
)
133+
return {
134+
"success": True,
135+
"price": price,
136+
"error_message": False,
137+
"warning_message": False,
138+
}
139+
except UserError as e:
140+
# During rate shopping (checkout), return failure instead of
141+
# raising thus gracefully hide unavailable shipping methods.
142+
_logger.debug("UPS rate shipment failed: %s", e)
143+
return {
144+
"success": False,
145+
"price": 0.0,
146+
"error_message": str(e),
147+
"warning_message": False,
148+
}
134149

135150
def ups_create_shipping(self, picking):
136151
"""Send packages of the picking to UPS

delivery_ups_oca/tests/test_delivery_ups.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,18 @@ def test_order_ups_rate_shipment_currency_extra(self):
184184
self.assertGreater(res["price"], 0)
185185
self.assertTrue(res["success"])
186186

187+
def test_ups_rate_shipment_unavailable_service(self):
188+
"""A UserError during rating is swallowed so the method can be hidden."""
189+
with mock.patch(
190+
_provider_class + "._rate_shipment",
191+
side_effect=UserError("111217: service unavailable"),
192+
):
193+
res = self.carrier.ups_rate_shipment(self.sale)
194+
self.assertFalse(res["success"])
195+
self.assertEqual(res["price"], 0.0)
196+
self.assertIn("111217", res["error_message"])
197+
self.assertFalse(res["warning_message"])
198+
187199
def test_delivery_carrier_ups_integration(self):
188200
self.picking.action_confirm()
189201
self.picking.action_assign()

0 commit comments

Comments
 (0)