checkout.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. """ Checkout utils functions """
  2. from store_order.models import Order, OrderItem, OrderItemGiftDetail
  3. from cart.cart import get_cart_items
  4. def create_order(request):
  5. """create a new order containing each CartItem instance. If Order
  6. already exists for this cart, delete and create a new one. That
  7. means they made a change.
  8. """
  9. order = Order.objects.get_order_by_cart(request)
  10. if order.has_items:
  11. # if this order has items it means it was from a
  12. # previous checkout attempt so delete those.
  13. order.delete_items()
  14. order.ip_address = request.META.get("REMOTE_ADDR")
  15. order.user = None
  16. if request.user.is_authenticated():
  17. order.user = request.user
  18. order.status = Order.INIT
  19. order.save()
  20. if order.pk:
  21. # if the order save succeeded
  22. cart_items = get_cart_items(request)
  23. for ci in cart_items:
  24. """ create order item for each cart item """
  25. oi = OrderItem()
  26. oi.order = order
  27. oi.quantity = ci.quantity
  28. oi.price = ci.unit_price
  29. oi.product = ci.product
  30. oi.account_number = ci.account_number
  31. oi.save()
  32. if ci.is_gift:
  33. cigd = ci.gift_detail
  34. oigd = OrderItemGiftDetail()
  35. oigd.first_name = cigd.first_name
  36. oigd.last_name = cigd.last_name
  37. oigd.company = cigd.company
  38. oigd.address1 = cigd.address1
  39. oigd.address2 = cigd.address2
  40. oigd.city = cigd.city
  41. oigd.region = cigd.region
  42. oigd.phone = cigd.phone
  43. oigd.country = cigd.country
  44. oigd.postal_code = cigd.postal_code
  45. oigd.plus_four = cigd.plus_four
  46. oigd.email = cigd.email
  47. oigd.bill_on_renewal = cigd.bill_on_renewal
  48. oigd.gift_card_delivery = cigd.gift_card_delivery
  49. oigd.message = cigd.message
  50. oigd.save()
  51. oi.gift_detail = oigd
  52. oi.save()
  53. # all set, clear the cart
  54. # cart.empty_cart(request)
  55. # TODO: do this later after we know payment was good.
  56. return order