mirror of
https://github.com/pretix/pretix.git
synced 2026-05-03 14:54:04 +00:00
Discounts: Add applicability date ranges (Z#23151897) (#4927)
* Add event date fields, add preliminary range check * Remove function, use filtered queryset for subevent id limit * Improve and fix date range check * Add formfields * Add tests * Improve tests * Add new fields to API and documentation * Add migration * Change description according to suggestion * Change discount apply signature, remove unnecessary query * Rename new fields, simplify range check * Rename fields in template * Apply suggestions from code review Co-authored-by: Raphael Michel <michel@rami.io> --------- Co-authored-by: Raphael Michel <michel@rami.io>
This commit is contained in:
@@ -47,6 +47,8 @@ TEST_DISCOUNT_RES = {
|
||||
"available_from": None,
|
||||
"available_until": None,
|
||||
"subevent_mode": "mixed",
|
||||
"subevent_date_from": None,
|
||||
"subevent_date_until": None,
|
||||
"condition_all_products": True,
|
||||
"condition_limit_products": [],
|
||||
"condition_apply_to_addons": True,
|
||||
|
||||
@@ -142,7 +142,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 2,
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -152,7 +152,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 3,
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -163,12 +163,12 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -184,7 +184,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 2,
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -194,7 +194,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 3,
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -205,7 +205,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 5,
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -218,7 +218,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 6,
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -232,12 +232,12 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('5.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('5.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -253,7 +253,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_value_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 4,
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -265,7 +265,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_value_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 5,
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -278,7 +278,7 @@ testcases_single_rule = [
|
||||
(
|
||||
mixed_min_value_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
) * 10,
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -298,10 +298,10 @@ testcases_single_rule = [
|
||||
(
|
||||
same_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -313,11 +313,11 @@ testcases_single_rule = [
|
||||
(
|
||||
same_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -330,14 +330,14 @@ testcases_single_rule = [
|
||||
(
|
||||
same_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -355,15 +355,15 @@ testcases_single_rule = [
|
||||
(
|
||||
same_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -380,15 +380,15 @@ testcases_single_rule = [
|
||||
(
|
||||
same_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('5.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('7.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('8.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('9.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('5.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('7.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('8.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('9.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -407,15 +407,15 @@ testcases_single_rule = [
|
||||
(
|
||||
same_min_value_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -434,9 +434,9 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -447,9 +447,9 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -460,14 +460,14 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -483,13 +483,13 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -504,13 +504,13 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_matching_percent,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('96.00'),
|
||||
@@ -527,9 +527,9 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -540,9 +540,9 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -553,12 +553,12 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -572,12 +572,12 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('3.00'),
|
||||
@@ -591,12 +591,12 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_two_free,
|
||||
(
|
||||
(1, 1, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('3.00'),
|
||||
@@ -610,12 +610,12 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 5, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 6, Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 5, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
(1, 6, now(), Decimal('120.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('120.00'),
|
||||
@@ -629,12 +629,12 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 5, Decimal('5.00'), False, False, Decimal('0.00')),
|
||||
(1, 6, Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('1.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('2.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('3.00'), False, False, Decimal('0.00')),
|
||||
(1, 4, now(), Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 5, now(), Decimal('5.00'), False, False, Decimal('0.00')),
|
||||
(1, 6, now(), Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -648,12 +648,12 @@ testcases_single_rule = [
|
||||
(
|
||||
distinct_min_count_one_free,
|
||||
(
|
||||
(1, 1, Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('4.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 2, now(), Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
(1, 3, now(), Decimal('6.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
# This one is unexpected, since the customer could get a lower price
|
||||
@@ -674,7 +674,7 @@ testcases_single_rule = [
|
||||
Discount(condition_min_count=1, benefit_discount_matching_percent=20),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('80.00'),
|
||||
@@ -689,8 +689,8 @@ testcases_single_rule = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('0.00'),
|
||||
@@ -708,9 +708,9 @@ testcases_single_rule = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('100.00'),
|
||||
@@ -728,9 +728,9 @@ testcases_single_rule = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('80.00'),
|
||||
@@ -747,11 +747,11 @@ testcases_single_rule = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('80.00'),
|
||||
@@ -770,9 +770,9 @@ testcases_single_rule = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('100.00'),
|
||||
@@ -791,9 +791,9 @@ testcases_single_rule = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, True, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), True, True, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, True, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), True, True, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('100.00'),
|
||||
@@ -818,9 +818,9 @@ testcases_multiple_rules = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('80.00'),
|
||||
@@ -843,9 +843,9 @@ testcases_multiple_rules = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('80.00'),
|
||||
@@ -867,9 +867,9 @@ testcases_multiple_rules = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('100.00'),
|
||||
@@ -890,11 +890,11 @@ testcases_multiple_rules = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('100.00'),
|
||||
@@ -917,9 +917,9 @@ testcases_multiple_rules = [
|
||||
),
|
||||
),
|
||||
(
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(1, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
),
|
||||
(
|
||||
Decimal('80.00'),
|
||||
@@ -954,10 +954,10 @@ def test_limit_products(event, item, item2):
|
||||
d2.save()
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('80.00'),
|
||||
@@ -979,10 +979,10 @@ def test_limit_products_subevents_distinct(event, item, item2):
|
||||
d1.condition_limit_products.add(item)
|
||||
|
||||
positions = (
|
||||
(item.pk, 1, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, 2, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, 3, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, 4, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, 1, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, 2, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, 3, now(), Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, 4, now(), Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('80.00'),
|
||||
@@ -1007,8 +1007,8 @@ def test_sales_channels(event, item):
|
||||
d2.limit_sales_channels.add(event.organizer.sales_channels.get(identifier="bar"))
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'bar', positions)]) == [Decimal('80.00'), Decimal('80.00')]
|
||||
@@ -1024,8 +1024,8 @@ def test_available_from(event, item):
|
||||
d2.save()
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'web', positions)]) == [Decimal('50.00'), Decimal('50.00')]
|
||||
@@ -1040,13 +1040,78 @@ def test_available_until(event, item):
|
||||
d2.save()
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'web', positions)]) == [Decimal('50.00'), Decimal('50.00')]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@scopes_disabled()
|
||||
def test_subevent_date_from(event, item, subevent):
|
||||
subevent_date = subevent.date_from # prevent test timing errors
|
||||
d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20,
|
||||
subevent_date_from=subevent_date + timedelta(days=1))
|
||||
d1.save()
|
||||
d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50,
|
||||
subevent_date_from=subevent_date)
|
||||
d2.save()
|
||||
|
||||
# (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, is_bundled, voucher_discount)
|
||||
positions = (
|
||||
(item.pk, subevent.pk, subevent.date_from, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, subevent.pk, subevent.date_from, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'web', positions)]) == [Decimal('50.00'), Decimal('50.00')]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@scopes_disabled()
|
||||
def test_subevent_date_until(event, item, subevent):
|
||||
subevent_date = subevent.date_from # prevent test timing errors
|
||||
d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20,
|
||||
subevent_date_until=subevent_date + timedelta(days=1))
|
||||
d1.save()
|
||||
d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50,
|
||||
subevent_date_until=subevent_date)
|
||||
d2.save()
|
||||
|
||||
# (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, is_bundled, voucher_discount)
|
||||
positions = (
|
||||
(item.pk, subevent.pk, subevent.date_from, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, subevent.pk, subevent.date_from, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'web', positions)]) == [Decimal('80.00'), Decimal('80.00')]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@scopes_disabled()
|
||||
def test_subevent_date_from_until(event, item, subevent):
|
||||
subevent_date = subevent.date_from # prevent test timing errors
|
||||
d1 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=20,
|
||||
subevent_date_from=subevent_date + timedelta(days=1),
|
||||
subevent_date_until=subevent_date + timedelta(days=2))
|
||||
d1.save()
|
||||
d2 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=50,
|
||||
subevent_date_from=subevent_date - timedelta(days=2),
|
||||
subevent_date_until=subevent_date - timedelta(days=1))
|
||||
d2.save()
|
||||
d3 = Discount(event=event, condition_min_count=2, benefit_discount_matching_percent=80,
|
||||
subevent_date_from=subevent_date, subevent_date_until=subevent_date + timedelta(days=1))
|
||||
d3.save()
|
||||
|
||||
# (item_id, subevent_id, subevent_date_from, line_price_gross, is_addon_to, is_bundled, voucher_discount)
|
||||
positions = (
|
||||
(item.pk, subevent.pk, subevent.date_from, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, subevent.pk, subevent.date_from, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
|
||||
assert sorted([p for p, d in apply_discounts(event, 'web', positions)]) == [Decimal('20.00'), Decimal('20.00')]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@scopes_disabled()
|
||||
def test_discount_other_products_min_count(event, item, item2):
|
||||
@@ -1064,21 +1129,21 @@ def test_discount_other_products_min_count(event, item, item2):
|
||||
d1.benefit_limit_products.add(item)
|
||||
|
||||
positions = (
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('100.00'),
|
||||
@@ -1120,12 +1185,12 @@ def test_discount_other_products_min_count_no_addon(event, item, item2):
|
||||
d1.benefit_limit_products.add(item)
|
||||
|
||||
positions = (
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), True, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), True, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('100.00'),
|
||||
@@ -1158,13 +1223,13 @@ def test_discount_other_products_min_count_no_voucher(event, item, item2):
|
||||
d1.benefit_limit_products.add(item)
|
||||
|
||||
positions = (
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('40.00'), False, False, Decimal('50.00')),
|
||||
(item.pk, None, Decimal('40.00'), False, False, Decimal('50.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('40.00'), False, False, Decimal('50.00')),
|
||||
(item.pk, None, None, Decimal('40.00'), False, False, Decimal('50.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('100.00'),
|
||||
@@ -1199,21 +1264,21 @@ def test_discount_subgroup_cheapest_n_min_count(event, item, item2):
|
||||
|
||||
positions = (
|
||||
# 11 items of item2, which contribute to the total count of 15, but do not get reduced
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('100.00'), False, False, Decimal('0.00')),
|
||||
# 4 items of item, of which 3 of the cheapest will be reduced
|
||||
(item.pk, None, Decimal('110.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('110.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('110.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('110.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('90.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('100.00'),
|
||||
@@ -1252,10 +1317,10 @@ def test_discount_other_products_min_value(event, item, item2):
|
||||
d1.benefit_limit_products.add(item2)
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('50.00'),
|
||||
@@ -1268,11 +1333,11 @@ def test_discount_other_products_min_value(event, item, item2):
|
||||
assert sorted(new_prices) == sorted(expected)
|
||||
|
||||
positions = (
|
||||
(item.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
Decimal('50.00'),
|
||||
@@ -1316,16 +1381,16 @@ def test_multiple_discounts_with_benefit_condition_overlap(event, item, item2):
|
||||
d2.condition_limit_products.add(item)
|
||||
|
||||
positions = (
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
# item2 remains untouched
|
||||
@@ -1379,16 +1444,16 @@ def test_multiple_discounts_with_same_condition(event, item, item2, item3):
|
||||
d2.benefit_limit_products.add(item3)
|
||||
|
||||
positions = (
|
||||
(item3.pk, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item3.pk, None, None, Decimal('42.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item2.pk, None, None, Decimal('50.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
(item.pk, None, None, Decimal('23.00'), False, False, Decimal('0.00')),
|
||||
)
|
||||
expected = (
|
||||
# both item1 remain full price
|
||||
|
||||
Reference in New Issue
Block a user