Esempio n. 1
0
    def _add(self, cart: Cart, product: Product, quantity: int):
        for product_item in product.items.filter(
                quantity__gt=0,
                latest_delivery_date__gt=datetime.datetime.utcnow().date(
                )).order_by("latest_delivery_date"):
            item_quantity = (quantity if quantity <= product_item.quantity else
                             product_item.quantity)

            cart_item, created = CartItem.objects.get_or_create(
                cart=cart,
                product=product,
                latest_delivery_date=product_item.latest_delivery_date,
                defaults={
                    "quantity": item_quantity,
                    "delivery_option":
                    product.first_available_delivery_option(),
                },
            )

            if not created:
                cart_item.quantity += item_quantity
                cart_item.save()

            product_item.quantity -= item_quantity

            if product_item.quantity == 0:
                product_item.delete()
            else:
                product_item.save()

            quantity -= item_quantity

            if quantity == 0:
                break

        # TODO: bulk save?

        return quantity