def consume_items(self, offer, basket, affected_lines):
"""
Same as ValueCondition.consume_items, except that it returns a list of consumed items. This
is needed for CompoundCondition to be able to correctly consume items.
"""
applicable_lines = self.get_applicable_lines(offer, basket, most_expensive_first=True)
applicable_line_ids = set(line.id for __, line in applicable_lines)
value_consumed = D('0.00')
affected_lines = list(affected_lines)
for line, __, qty in affected_lines:
if line.id in applicable_line_ids:
price = self._get_unit_price(offer, line)
value_consumed += price * qty
to_consume = max(0, self.value - value_consumed)
if to_consume == 0:
return affected_lines
for price, line in applicable_lines:
quantity_to_consume = (to_consume / price).quantize(D(1), ROUND_UP)
quantity_to_consume = min(line.quantity_without_discount, quantity_to_consume)
line.consume(quantity_to_consume)
affected_lines.append((line, 0, quantity_to_consume))
to_consume -= price * quantity_to_consume
if to_consume <= 0:
break
return affected_lines
评论列表
文章目录