Skip to content

Commit c461dfd

Browse files
Merge pull request #392 from MySecondLanguage/serializer-updated
Serializer"
2 parents d9f4d7c + ea685c2 commit c461dfd

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

nxtbn/order/__init__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ class OrderStockReservationStatus(models.TextChoices):
153153
NOT_RESERVED: The stock has not been reserved for the order.
154154
"""
155155
RESERVED = 'RESERVED', _('Reserved')
156-
RELEASED = 'RELEASED', _('Released')
157-
FAILED = 'FAILED', _('Failed')
158-
NOT_RESERVED = 'NOT_RESERVED', _('Not Reserved')
156+
RELEASED = 'RELEASED', _('Released') # Re-adjust stock after order is cancelled
157+
FAILED = 'FAILED', _('Failed') # If failed, that is mean stock is insufficient to fulfill the order, have to fixed it before proceed
158+
NOT_RESERVED = 'NOT_RESERVED', _('Not Reserved') # DO NOTHING IF NOT RESERVED, NO NEED VALIDATION
159159
DISPATCHED = 'DISPATCHED', _('Dispatched')

nxtbn/order/api/dashboard/serializers.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from nxtbn.product.api.dashboard.serializers import ProductVariantSerializer
1414
from nxtbn.product.models import ProductVariant
1515
from nxtbn.users.models import User
16-
from nxtbn.warehouse.utils import deduct_reservation_on_dispatch, release_stock
16+
from nxtbn.warehouse.utils import deduct_reservation_on_packed_for_dispatch, release_stock
1717

1818
class LineVariantSerializer(serializers.ModelSerializer):
1919
variant_thumbnail = serializers.SerializerMethodField()
@@ -200,7 +200,7 @@ def validate(self, attrs):
200200
if current_status == OrderStatus.CANCELLED:
201201
raise serializers.ValidationError(_("Order is already cancelled."))
202202
elif current_status not in [OrderStatus.PENDING, OrderStatus.APPROVED]:
203-
raise serializers.ValidationError(_(f"{current_status.value} orders cannot be cancelled."))
203+
raise serializers.ValidationError(_(f"{current_status} orders cannot be cancelled."))
204204

205205
if new_status == OrderStatus.PACKED:
206206
if current_status != OrderStatus.APPROVED:
@@ -228,8 +228,8 @@ def update(self, instance, validated_data):
228228
if validated_data.get('status') == OrderStatus.CANCELLED:
229229
release_stock(instance)
230230

231-
if validated_data.get('status') == OrderStatus.SHIPPED:
232-
deduct_reservation_on_dispatch(instance)
231+
if validated_data.get('status') == OrderStatus.PACKED:
232+
deduct_reservation_on_packed_for_dispatch(instance)
233233

234234
return super().update(instance, validated_data)
235235

nxtbn/warehouse/utils.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,15 @@ def release_stock(order):
105105
order.save()
106106
return order
107107

108-
def deduct_reservation_on_dispatch(order):
109-
if order.reservation_status != OrderStockReservationStatus.RESERVED:
110-
raise ValidationError("Order stock must be reserved before dispatching.")
108+
def deduct_reservation_on_packed_for_dispatch(order):
109+
if order.reservation_status == OrderStockReservationStatus.FAILED:
110+
raise ValidationError("One or more items are not reserved. Please ensure all items are available in stock and reserved before preparing for shipment.")
111+
112+
if order.reservation_status == OrderStockReservationStatus.DISPATCHED:
113+
raise ValidationError("Order has already been dispatched.")
114+
115+
if order.reservation_status == OrderStockReservationStatus.RELEASED:
116+
raise ValidationError("Cannot dispatch an order with released stock reservations.")
111117

112118
with transaction.atomic():
113119
for item in order.line_items.all():

0 commit comments

Comments
 (0)