Exemple #1
0
def update_order(order: Order, send_order_summary=False) -> Order:

    if order.current_status is DRAFT:
        # update order_items based on order.draft_cart

        order_item_ids_processed = []
        for cart_index_string, cart_item in order.draft_cart.items():
            if not cart_index_string.startswith("i"):
                continue

            if 'item_id' not in cart_item:
                raise OrderException("missing item_id in cart item")
            if 'quantity' not in cart_item:
                raise OrderException("missing quantity in cart item")

            order_item = OrderItem.objects.none()
            if 'order_item_id' in cart_item:
                if cart_item['order_item_id'] in order_item_ids_processed:
                    raise OrderException("duplicate order_item_id found")
                if cart_item['order_item_id']:
                    order_item = OrderItem.objects.filter(
                        id=cart_item['order_item_id']).first()

            if all([
                    not order_item,
                    cart_item.get('item_id'),
                    cart_item.get('quantity'),
            ]):
                order_item = OrderItem.objects.create(
                    order=order, item_id=cart_item['item_id'])

            order_item.quantity = Decimal(cart_item['quantity'])

            if len(cart_item.get('note', "")):
                note = order_item.notes.first()
                if note:
                    note.text = cart_item['note']
                    note.save()
                else:
                    order_item.add_note(cart_item['note'])

            order_item.save()
            order_item_ids_processed.append(order_item.id)

        order.order_items.exclude(id__in=order_item_ids_processed).delete()
        order.save()

    if send_order_summary and order.is_ready_for_checkout:
        # send order summary to customer
        order.line_channel_membership.send_order_status(order)

    if order.current_status is PLACED and order.next_status is SHOP_CONFIRMED:
        pursue_shop_confirmation(order)

    return order
Exemple #2
0
    def create(self, validated_data):
        order_list = validated_data.pop("orders")
        order_line = OrderLine.objects.create(**validated_data)
        while len(order_list) > 0:
            order_data = order_list.pop()
            order = Order(order_line=order_line, **order_data)
            item = Item.objects.get(pk=order.object_id)
            order.content_object = item
            order.price = item.price
            order.save()

        order_line.pay()

        return order_line