Esempio n. 1
0
def create_order(request):
    data = copy.deepcopy(request.data)
    request_serializer = CreateNewOrderSerializer(data=data)
    request_serializer.is_valid(raise_exception=True)

    user = request.user
    person = Person.objects.get(user=user)

    try:
        # Create the initial order
        items = []
        for order_item in data['order_items']:
            items.append({
                "type": 'sku',
                "parent": order_item['parent'],
                "quantity": order_item['quantity']
            })

        stripe.api_key = settings.STRIPE_PRIVATE_KEY
        stripe_order = stripe.Order.create(
            currency='usd',
            items=items,
            shipping={
                "name": '%s %s' % (user.first_name, user.last_name),
                "address": {
                    "line1": person.address_line_1,
                    "city": person.city,
                    "state": person.state,
                    "country": 'US',
                    "postal_code": person.zipcode
                },
            },
            email=user.email)

        # Store the order data in our database
        order = Order(order_id=stripe_order.id,
                      user=user,
                      amount=stripe_order.amount,
                      email=stripe_order.email,
                      status=stripe_order.status,
                      created=datetime.fromtimestamp(stripe_order.created),
                      updated=datetime.fromtimestamp(stripe_order.updated))
        order.currency = stripe_order.currency
        order.save()

        order_status = OrderStatusTransition(order=order,
                                             status=stripe_order.status,
                                             created=datetime.fromtimestamp(
                                                 stripe_order.updated))
        order_status.save()

        for item in stripe_order['items']:
            order_item = OrderItem(order=order,
                                   amount=item['amount'],
                                   description=item['description'],
                                   parent=item['parent'],
                                   quantity=item['quantity'],
                                   item_type=item['type'])
            order_item.currency = item.currency,
            order_item.save()

        updated_order = Order.objects.get(order_id=order.order_id)
        response_serializer = OrderSerializer(updated_order)
        return Response(response_serializer.data,
                        status=status.HTTP_201_CREATED)

    except Exception as e:
        return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)