Skip to content

Commit a72a02b

Browse files
authored
feat: Implement shipping_status most_expensive (viur-framework#135)
1 parent 7a4af69 commit a72a02b

3 files changed

Lines changed: 16 additions & 5 deletions

File tree

src/viur/shop/modules/api.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ def cart_update(
210210
name: str = None,
211211
customer_comment: str = None,
212212
shipping_address_key: str | db.Key = None,
213-
shipping_key: str | db.Key = None,
213+
shipping_key: str | db.Key = SENTINEL,
214214
discount_key: str | db.Key = None, # TODO: use sentinel?
215215
**kwargs,
216216
):

src/viur/shop/skeletons/cart.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -154,15 +154,23 @@ def unserialize_compute(self, skel: "SkeletonInstance", name: str) -> bool:
154154
if skel["is_frozen"]: # locked, unserialize the latest stored value from entity
155155
return False
156156

157-
if skel["shipping_status"] == ShippingStatus.CHEAPEST: # compute cheapest
157+
match skel["shipping_status"]:
158+
case ShippingStatus.CHEAPEST:
159+
func = min
160+
case ShippingStatus.MOST_EXPENSIVE:
161+
func = max
162+
case _:
163+
func = None
164+
165+
if func is not None: # compute cheapest & most expensive
158166
self._prevent_compute = True
159167
try:
160168
applicable_shippings = SHOP_INSTANCE.get().shipping.get_shipping_skels_for_cart(
161169
cart_skel=skel, use_cache=True,
162170
)
163171
if applicable_shippings:
164-
cheapest_shipping = min(applicable_shippings,
165-
key=lambda shipping: shipping["dest"]["shipping_cost"] or 0)
172+
cheapest_shipping = func(applicable_shippings,
173+
key=lambda shipping: shipping["dest"]["shipping_cost"] or 0)
166174
skel.setBoneValue("shipping", cheapest_shipping["dest"]["key"])
167175
finally:
168176
self._prevent_compute = False
@@ -190,7 +198,7 @@ def _is_valid_user_shipping(self, skel: SkeletonInstance) -> bool:
190198
else:
191199
logger.warning(f"Invalid shipping. {shipping_key=!r} not found in applicable_shippings")
192200
skel.setBoneValue("shipping", None)
193-
skel.setBoneValue("shipping_status", ShippingStatus.CHEAPEST)
201+
skel.setBoneValue("shipping_status", skel.shipping_status.getDefaultValue())
194202
return False
195203
finally:
196204
self._prevent_compute = False

src/viur/shop/types/enums.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ class ShippingStatus(enum.Enum):
131131
CHEAPEST = "cheapest"
132132
"""Cheapest shipping selected"""
133133

134+
MOST_EXPENSIVE = "most_expensive"
135+
"""Most expensive shipping selected"""
136+
134137

135138
class VatRateCategory(enum.StrEnum):
136139
"""Categorizes different VAT rate categories in the EU applied to goods and services."""

0 commit comments

Comments
 (0)