finish payment logic
This commit is contained in:
@@ -55,6 +55,11 @@ class Cart(models.Model):
|
||||
def __str__(self):
|
||||
return f"Cart for {self.user.email}"
|
||||
|
||||
def clear_cart(self):
|
||||
self.items.all().delete()
|
||||
self.discount_code = None
|
||||
self.save()
|
||||
|
||||
@property
|
||||
def discount_code_amount(self):
|
||||
if self.discount_code:
|
||||
@@ -151,6 +156,11 @@ class OrderModel(models.Model):
|
||||
cart_total = models.BigIntegerField(
|
||||
null=True, blank=True, verbose_name='کل سبد خرید')
|
||||
|
||||
cart = models.ForeignKey(Cart, on_delete=models.CASCADE, null=True, blank=True)
|
||||
|
||||
is_stock_rolled_back = models.BooleanField(
|
||||
default=False, verbose_name="موجودی برگردانده شده")
|
||||
|
||||
def __str__(self):
|
||||
return f'سفارش: {self.pk + 1000}'
|
||||
|
||||
@@ -158,6 +168,34 @@ class OrderModel(models.Model):
|
||||
verbose_name = 'سفارش'
|
||||
verbose_name_plural = 'سفارشات'
|
||||
|
||||
def rollback_stock(self):
|
||||
"""
|
||||
Rollback stock quantities for all items in this order
|
||||
Returns True if successful, False otherwise
|
||||
"""
|
||||
if self.is_stock_rolled_back:
|
||||
return False
|
||||
|
||||
# if not self.cart:
|
||||
# return False
|
||||
|
||||
try:
|
||||
# Get all cart items and rollback their stock
|
||||
for order_item in self.items.all():
|
||||
product = order_item.product
|
||||
# Add back the quantity to stock
|
||||
product.stock_quantity += order_item.quantity
|
||||
product.save()
|
||||
|
||||
# Mark as rolled back
|
||||
self.is_stock_rolled_back = True
|
||||
self.save(update_fields=['is_stock_rolled_back'])
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
# Log the error if you have logging setup
|
||||
# logger.error(f"Failed to rollback stock for order {self.pk}: {e}")
|
||||
return False
|
||||
|
||||
class OrderItemModel(models.Model):
|
||||
order = models.ForeignKey(
|
||||
|
||||
Reference in New Issue
Block a user