Skip to content

Commit 9862c59

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

2 files changed

Lines changed: 36 additions & 10 deletions

File tree

delivery_ups_oca/models/delivery_carrier.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,17 @@
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__)
1619

1720
class DeliveryCarrier(models.Model):
1821
_inherit = "delivery.carrier"
@@ -121,16 +124,27 @@ def _ups_get_response_price(self, total_charges, currency, company):
121124

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

135149
def ups_create_shipping(self, picking):
136150
"""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)