wbcommission 1.50.6__py2.py3-none-any.whl → 1.58.1__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of wbcommission might be problematic. Click here for more details.
- wbcommission/analytics/marginality.py +6 -6
- wbcommission/filters/rebate.py +4 -6
- wbcommission/locale/de/LC_MESSAGES/django.mo +0 -0
- wbcommission/locale/de/LC_MESSAGES/django.po +29 -0
- wbcommission/locale/en/LC_MESSAGES/django.mo +0 -0
- wbcommission/locale/en/LC_MESSAGES/django.po +28 -0
- wbcommission/locale/fr/LC_MESSAGES/django.mo +0 -0
- wbcommission/locale/fr/LC_MESSAGES/django.po +29 -0
- wbcommission/models/account_service.py +6 -4
- wbcommission/models/commission.py +3 -0
- wbcommission/models/signals.py +4 -4
- wbcommission/permissions.py +2 -2
- wbcommission/reports/customer_report.py +1 -1
- wbcommission/tests/analytics/test_marginality.py +4 -4
- wbcommission/tests/models/test_account_service.py +14 -19
- wbcommission/tests/models/test_commission.py +8 -12
- wbcommission/tests/models/test_rebate.py +10 -10
- wbcommission/viewsets/endpoints/rebate.py +0 -6
- {wbcommission-1.50.6.dist-info → wbcommission-1.58.1.dist-info}/METADATA +4 -1
- {wbcommission-1.50.6.dist-info → wbcommission-1.58.1.dist-info}/RECORD +21 -15
- {wbcommission-1.50.6.dist-info → wbcommission-1.58.1.dist-info}/WHEEL +0 -0
|
@@ -71,10 +71,10 @@ class MarginalityCalculator:
|
|
|
71
71
|
|
|
72
72
|
# Build the fees dataframe where product id is the index and colum are the every fees type available and value are the amount.
|
|
73
73
|
fees = Fees.valid_objects.filter(
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
fee_date__lte=bday_to_date,
|
|
75
|
+
fee_date__gte=bday_from_date,
|
|
76
76
|
transaction_subtype__in=self.FEE_MAP.keys(),
|
|
77
|
-
|
|
77
|
+
product__in=products,
|
|
78
78
|
).annotate(
|
|
79
79
|
fee_type=Case(
|
|
80
80
|
*[When(transaction_subtype=k, then=Value(v)) for k, v in self.FEE_MAP.items()],
|
|
@@ -82,9 +82,9 @@ class MarginalityCalculator:
|
|
|
82
82
|
)
|
|
83
83
|
)
|
|
84
84
|
self.df_fees = pd.DataFrame(
|
|
85
|
-
fees.values_list("
|
|
86
|
-
columns=["
|
|
87
|
-
).rename(columns={"
|
|
85
|
+
fees.values_list("product", "fee_type", "total_value", "fee_date", "calculated"),
|
|
86
|
+
columns=["product", "fee_type", "total_value", "fee_date", "calculated"],
|
|
87
|
+
).rename(columns={"product": "id", "fee_date": "date"})
|
|
88
88
|
self.df_fees["date"] = pd.to_datetime(self.df_fees["date"])
|
|
89
89
|
|
|
90
90
|
self.df_fees = (
|
wbcommission/filters/rebate.py
CHANGED
|
@@ -13,11 +13,10 @@ from wbcommission.models.rebate import RebateGroupbyChoice
|
|
|
13
13
|
|
|
14
14
|
class RebateDateFilter(CommissionBaseFilterSet):
|
|
15
15
|
date = wb_filters.DateRangeFilter(
|
|
16
|
-
method=wb_filters.DateRangeFilter.base_date_range_filter_method,
|
|
17
16
|
label="Date Range",
|
|
18
17
|
required=True,
|
|
19
18
|
clearable=False,
|
|
20
|
-
|
|
19
|
+
initial=current_quarter_date_range,
|
|
21
20
|
)
|
|
22
21
|
|
|
23
22
|
class Meta:
|
|
@@ -35,13 +34,13 @@ class RebateGroupByFilter(PandasFilterSetMixin, RebateDateFilter):
|
|
|
35
34
|
group_by = wb_filters.ChoiceFilter(
|
|
36
35
|
label="Group By",
|
|
37
36
|
choices=RebateGroupbyChoice.choices(),
|
|
38
|
-
|
|
37
|
+
initial=RebateGroupbyChoice.ACCOUNT.name, # typing: ignore
|
|
39
38
|
method=lambda queryset, label, value: queryset,
|
|
40
39
|
clearable=False,
|
|
41
40
|
required=True,
|
|
42
41
|
)
|
|
43
42
|
groupby_classification_group = wb_filters.ModelChoiceFilter(
|
|
44
|
-
|
|
43
|
+
initial=lambda k, v, f: get_default_classification_group().id,
|
|
45
44
|
method=lambda queryset, label, value: queryset,
|
|
46
45
|
label="Group by Classification Group",
|
|
47
46
|
queryset=ClassificationGroup.objects.all(),
|
|
@@ -98,10 +97,9 @@ class CustomerRebateGroupByFilter(RebateGroupByFilter):
|
|
|
98
97
|
class RebateMarginalityFilter(PandasFilterSetMixin, wb_filters.FilterSet):
|
|
99
98
|
date = wb_filters.DateRangeFilter(
|
|
100
99
|
label="Date Range",
|
|
101
|
-
method=wb_filters.DateRangeFilter.base_date_range_filter_method,
|
|
102
100
|
required=True,
|
|
103
101
|
clearable=False,
|
|
104
|
-
|
|
102
|
+
initial=current_quarter_date_range,
|
|
105
103
|
)
|
|
106
104
|
|
|
107
105
|
bank = wb_filters.ModelMultipleChoiceFilter(
|
|
Binary file
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
#, fuzzy
|
|
7
|
+
msgid ""
|
|
8
|
+
msgstr ""
|
|
9
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
|
+
"Report-Msgid-Bugs-To: \n"
|
|
11
|
+
"POT-Creation-Date: 2025-05-30 11:37+0200\n"
|
|
12
|
+
"PO-Revision-Date: 2025-05-30 09:40+0000\n"
|
|
13
|
+
"Language-Team: German (https://app.transifex.com/stainly/teams/171242/de/)\n"
|
|
14
|
+
"MIME-Version: 1.0\n"
|
|
15
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
16
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
17
|
+
"Language: de\n"
|
|
18
|
+
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
|
19
|
+
|
|
20
|
+
#: viewsets/buttons/rebate.py:19
|
|
21
|
+
msgid "Start"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
#: viewsets/rebate.py:435
|
|
25
|
+
msgid ""
|
|
26
|
+
"The selected date range includes a Saturday or Sunday. Please note that fees"
|
|
27
|
+
" and rebates are normalized over the weekend, as fees continue to accumulate"
|
|
28
|
+
" during this period."
|
|
29
|
+
msgstr ""
|
|
Binary file
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
msgid ""
|
|
7
|
+
msgstr ""
|
|
8
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
9
|
+
"Report-Msgid-Bugs-To: \n"
|
|
10
|
+
"POT-Creation-Date: 2025-05-30 11:37+0200\n"
|
|
11
|
+
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
12
|
+
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
13
|
+
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
14
|
+
"Language: \n"
|
|
15
|
+
"MIME-Version: 1.0\n"
|
|
16
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
17
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
18
|
+
|
|
19
|
+
#: viewsets/buttons/rebate.py:19
|
|
20
|
+
msgid "Start"
|
|
21
|
+
msgstr ""
|
|
22
|
+
|
|
23
|
+
#: viewsets/rebate.py:435
|
|
24
|
+
msgid ""
|
|
25
|
+
"The selected date range includes a Saturday or Sunday. Please note that fees "
|
|
26
|
+
"and rebates are normalized over the weekend, as fees continue to accumulate "
|
|
27
|
+
"during this period."
|
|
28
|
+
msgstr ""
|
|
Binary file
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# SOME DESCRIPTIVE TITLE.
|
|
2
|
+
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
3
|
+
# This file is distributed under the same license as the PACKAGE package.
|
|
4
|
+
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
5
|
+
#
|
|
6
|
+
#, fuzzy
|
|
7
|
+
msgid ""
|
|
8
|
+
msgstr ""
|
|
9
|
+
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
|
+
"Report-Msgid-Bugs-To: \n"
|
|
11
|
+
"POT-Creation-Date: 2025-05-30 11:37+0200\n"
|
|
12
|
+
"PO-Revision-Date: 2025-05-30 09:40+0000\n"
|
|
13
|
+
"Language-Team: French (https://app.transifex.com/stainly/teams/171242/fr/)\n"
|
|
14
|
+
"MIME-Version: 1.0\n"
|
|
15
|
+
"Content-Type: text/plain; charset=UTF-8\n"
|
|
16
|
+
"Content-Transfer-Encoding: 8bit\n"
|
|
17
|
+
"Language: fr\n"
|
|
18
|
+
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
|
|
19
|
+
|
|
20
|
+
#: viewsets/buttons/rebate.py:19
|
|
21
|
+
msgid "Start"
|
|
22
|
+
msgstr ""
|
|
23
|
+
|
|
24
|
+
#: viewsets/rebate.py:435
|
|
25
|
+
msgid ""
|
|
26
|
+
"The selected date range includes a Saturday or Sunday. Please note that fees"
|
|
27
|
+
" and rebates are normalized over the weekend, as fees continue to accumulate"
|
|
28
|
+
" during this period."
|
|
29
|
+
msgstr ""
|
|
@@ -31,13 +31,13 @@ class AccountRebateManager:
|
|
|
31
31
|
# get the fees as a multi-index matrix
|
|
32
32
|
self.df_fees = pd.DataFrame(
|
|
33
33
|
Fees.valid_objects.filter(
|
|
34
|
-
|
|
34
|
+
product__in=claim_products,
|
|
35
35
|
transaction_subtype__in=self.FEE_MAP[self.commission_type_key],
|
|
36
|
-
).values("
|
|
36
|
+
).values("product", "fee_date", "total_value")
|
|
37
37
|
)
|
|
38
38
|
if not self.df_fees.empty:
|
|
39
39
|
self.df_fees = (
|
|
40
|
-
self.df_fees.rename(columns={"
|
|
40
|
+
self.df_fees.rename(columns={"product": "product", "fee_date": "date"})
|
|
41
41
|
.groupby(["product", "date"])
|
|
42
42
|
.sum()
|
|
43
43
|
.total_value.astype(float)
|
|
@@ -182,7 +182,9 @@ class AccountRebateManager:
|
|
|
182
182
|
and date, a KeyError will be caught, and the function will return Decimal(0).
|
|
183
183
|
"""
|
|
184
184
|
with suppress(InstrumentPrice.DoesNotExist, KeyError):
|
|
185
|
-
product_shares = max(
|
|
185
|
+
product_shares = max(
|
|
186
|
+
product.prices.get(date=compute_date, calculated=True).outstanding_shares or Decimal(0), Decimal(0)
|
|
187
|
+
)
|
|
186
188
|
account_shares = max(
|
|
187
189
|
Decimal(self.df_shares.loc[(terminal_account.id, product.id, compute_date)]), Decimal(0)
|
|
188
190
|
)
|
wbcommission/models/signals.py
CHANGED
|
@@ -31,15 +31,15 @@ def post_fees_save_for_rebate_computation(sender, instance, created, **kwargs):
|
|
|
31
31
|
# if a new commission line is created, we create a general rule
|
|
32
32
|
if (
|
|
33
33
|
created
|
|
34
|
-
and (date.today() - instance.
|
|
34
|
+
and (date.today() - instance.fee_date).days
|
|
35
35
|
<= global_preferences_registry.manager()["wbcommission__days_to_recompute_rebate_from_fees_threshold"]
|
|
36
36
|
): # we make sure that the fee won't trigger rebate computation if they are created too much in the past
|
|
37
37
|
for root_account in Account.objects.filter(level=0):
|
|
38
38
|
if Claim.objects.filter(
|
|
39
|
-
account__in=root_account.get_descendants(include_self=True), product=instance.
|
|
39
|
+
account__in=root_account.get_descendants(include_self=True), product=instance.product
|
|
40
40
|
).exists():
|
|
41
41
|
manage_rebate_as_task.delay(
|
|
42
42
|
root_account.id,
|
|
43
|
-
start_date=instance.
|
|
44
|
-
only_content_object_ids=[instance.
|
|
43
|
+
start_date=instance.fee_date,
|
|
44
|
+
only_content_object_ids=[instance.product.id],
|
|
45
45
|
)
|
wbcommission/permissions.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
from rest_framework.permissions import
|
|
1
|
+
from rest_framework.permissions import IsAuthenticated
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
class IsCommissionAdmin(
|
|
4
|
+
class IsCommissionAdmin(IsAuthenticated):
|
|
5
5
|
def has_permission(self, request, view):
|
|
6
6
|
return request.user.has_perm("wbcommission.administrate_commission")
|
|
@@ -218,7 +218,7 @@ def create_report(user, customer, start_date, end_date):
|
|
|
218
218
|
worksheet_trade_performance.write_string(bank_cell, claim.bank, base_format)
|
|
219
219
|
worksheet_trade_performance.write_string(root_account_cell, claim.account.get_root().title, base_format)
|
|
220
220
|
worksheet_trade_performance.write_string(account_cell, str(claim.account), base_format)
|
|
221
|
-
worksheet_trade_performance.write_string(product_cell, claim.product.
|
|
221
|
+
worksheet_trade_performance.write_string(product_cell, claim.product.name, base_format)
|
|
222
222
|
|
|
223
223
|
worksheet_trade_performance.write_number(
|
|
224
224
|
price_trade_cell, claim.price_date or claim.product.share_price, decimal_format
|
|
@@ -21,14 +21,14 @@ def _create_fixture(product, val_date, net_value=100, outstanding_shares=100):
|
|
|
21
21
|
instrument=product, net_value=net_value, outstanding_shares=outstanding_shares, calculated=False, date=val_date
|
|
22
22
|
).net_value # create a price of AUM 100*100
|
|
23
23
|
management_fees_1 = FeesFactory.create(
|
|
24
|
-
|
|
24
|
+
product=product, fee_date=val_date, transaction_subtype="MANAGEMENT", calculated=False
|
|
25
25
|
).total_value
|
|
26
26
|
performance_fees_1 = FeesFactory.create(
|
|
27
|
-
|
|
27
|
+
product=product, fee_date=val_date, transaction_subtype="PERFORMANCE", calculated=False
|
|
28
28
|
).total_value
|
|
29
29
|
performance_crys_fees_1 = FeesFactory.create(
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
product=product,
|
|
31
|
+
fee_date=val_date,
|
|
32
32
|
transaction_subtype="PERFORMANCE_CRYSTALIZED",
|
|
33
33
|
calculated=False,
|
|
34
34
|
).total_value
|
|
@@ -21,18 +21,18 @@ class TestAccountService(AccountManagerFixture):
|
|
|
21
21
|
mngt_fees = fees_factory.create(transaction_subtype="MANAGEMENT")
|
|
22
22
|
perf_fees = fees_factory.create( # noqa
|
|
23
23
|
transaction_subtype="PERFORMANCE",
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
fee_date=mngt_fees.fee_date,
|
|
25
|
+
product=mngt_fees.product,
|
|
26
26
|
) # noqa
|
|
27
27
|
claim_factory.create(
|
|
28
28
|
account=management_account_manager.root_account,
|
|
29
|
-
trade=customer_trade_factory.create(underlying_instrument=mngt_fees.
|
|
29
|
+
trade=customer_trade_factory.create(underlying_instrument=mngt_fees.product),
|
|
30
30
|
status="APPROVED",
|
|
31
31
|
)
|
|
32
32
|
management_account_manager.initialize()
|
|
33
33
|
|
|
34
34
|
assert (
|
|
35
|
-
management_account_manager.get_commission_pool(mngt_fees.
|
|
35
|
+
management_account_manager.get_commission_pool(mngt_fees.product, mngt_fees.fee_date)
|
|
36
36
|
== mngt_fees.total_value
|
|
37
37
|
)
|
|
38
38
|
|
|
@@ -42,24 +42,24 @@ class TestAccountService(AccountManagerFixture):
|
|
|
42
42
|
mngt_fees = fees_factory.create(transaction_subtype="MANAGEMENT")
|
|
43
43
|
perf_fees = fees_factory.create(
|
|
44
44
|
transaction_subtype="PERFORMANCE",
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
fee_date=mngt_fees.fee_date,
|
|
46
|
+
product=mngt_fees.product,
|
|
47
47
|
)
|
|
48
48
|
perf2_fees = fees_factory.create(
|
|
49
49
|
transaction_subtype="PERFORMANCE_CRYSTALIZED",
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
fee_date=mngt_fees.fee_date,
|
|
51
|
+
product=mngt_fees.product,
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
claim_factory.create(
|
|
55
55
|
account=performance_account_manager.root_account,
|
|
56
|
-
trade=customer_trade_factory.create(underlying_instrument=mngt_fees.
|
|
56
|
+
trade=customer_trade_factory.create(underlying_instrument=mngt_fees.product),
|
|
57
57
|
status="APPROVED",
|
|
58
58
|
)
|
|
59
59
|
performance_account_manager.initialize()
|
|
60
60
|
|
|
61
61
|
assert (
|
|
62
|
-
performance_account_manager.get_commission_pool(mngt_fees.
|
|
62
|
+
performance_account_manager.get_commission_pool(mngt_fees.product, mngt_fees.fee_date)
|
|
63
63
|
== perf_fees.total_value + perf2_fees.total_value
|
|
64
64
|
)
|
|
65
65
|
|
|
@@ -70,30 +70,25 @@ class TestAccountService(AccountManagerFixture):
|
|
|
70
70
|
calculated_fees = fees_factory.create(calculated=True, transaction_subtype="MANAGEMENT")
|
|
71
71
|
claim_factory.create(
|
|
72
72
|
account=management_account_manager.root_account,
|
|
73
|
-
trade=customer_trade_factory.create(underlying_instrument=calculated_fees.
|
|
73
|
+
trade=customer_trade_factory.create(underlying_instrument=calculated_fees.product),
|
|
74
74
|
status="APPROVED",
|
|
75
75
|
)
|
|
76
76
|
management_account_manager.initialize()
|
|
77
77
|
|
|
78
78
|
assert (
|
|
79
|
-
management_account_manager.get_commission_pool(
|
|
80
|
-
calculated_fees.linked_product, calculated_fees.transaction_date
|
|
81
|
-
)
|
|
79
|
+
management_account_manager.get_commission_pool(calculated_fees.product, calculated_fees.fee_date)
|
|
82
80
|
== calculated_fees.total_value
|
|
83
81
|
)
|
|
84
82
|
# Check that is there is a non calculated fees, it is used instead of the calculated one
|
|
85
83
|
fees = fees_factory.create(transaction_subtype=calculated_fees.transaction_subtype, calculated=False)
|
|
86
84
|
claim_factory.create(
|
|
87
85
|
account=management_account_manager.root_account,
|
|
88
|
-
trade=customer_trade_factory.create(underlying_instrument=fees.
|
|
86
|
+
trade=customer_trade_factory.create(underlying_instrument=fees.product),
|
|
89
87
|
status="APPROVED",
|
|
90
88
|
)
|
|
91
89
|
management_account_manager.initialize()
|
|
92
90
|
|
|
93
|
-
assert (
|
|
94
|
-
management_account_manager.get_commission_pool(fees.linked_product, fees.transaction_date)
|
|
95
|
-
== fees.total_value
|
|
96
|
-
)
|
|
91
|
+
assert management_account_manager.get_commission_pool(fees.product, fees.fee_date) == fees.total_value
|
|
97
92
|
|
|
98
93
|
@pytest.mark.parametrize("val_date", [fake.past_date()])
|
|
99
94
|
def test_get_terminal_account_holding_ratio(
|
|
@@ -420,14 +420,10 @@ class TestCommissionType:
|
|
|
420
420
|
):
|
|
421
421
|
val_date = (val_date + BDay(0)).date()
|
|
422
422
|
val_date_1 = (val_date - BDay(1)).date()
|
|
423
|
-
fees_factory.create(
|
|
424
|
-
fees_factory.create(
|
|
425
|
-
perf_fees = fees_factory.create(
|
|
426
|
-
|
|
427
|
-
)
|
|
428
|
-
mngt_fees = fees_factory.create(
|
|
429
|
-
linked_product=product, transaction_date=val_date, transaction_subtype="MANAGEMENT"
|
|
430
|
-
)
|
|
423
|
+
fees_factory.create(product=product, fee_date=val_date_1, transaction_subtype="PERFORMANCE")
|
|
424
|
+
fees_factory.create(product=product, fee_date=val_date_1, transaction_subtype="MANAGEMENT")
|
|
425
|
+
perf_fees = fees_factory.create(product=product, fee_date=val_date, transaction_subtype="PERFORMANCE")
|
|
426
|
+
mngt_fees = fees_factory.create(product=product, fee_date=val_date, transaction_subtype="MANAGEMENT")
|
|
431
427
|
sub2 = customer_trade_factory.create(
|
|
432
428
|
underlying_instrument=product,
|
|
433
429
|
transaction_subtype=Trade.Type.SUBSCRIPTION,
|
|
@@ -482,10 +478,10 @@ class TestCommissionType:
|
|
|
482
478
|
res = dict()
|
|
483
479
|
for commission_type in CommissionType.objects.all():
|
|
484
480
|
for (
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
481
|
+
_,
|
|
482
|
+
_,
|
|
483
|
+
_,
|
|
484
|
+
_,
|
|
489
485
|
recipient,
|
|
490
486
|
recipient_fees,
|
|
491
487
|
_,
|
|
@@ -43,9 +43,9 @@ class TestRebateModel(AccountManagerFixture):
|
|
|
43
43
|
mock_fct.return_value = [
|
|
44
44
|
(
|
|
45
45
|
commission.account,
|
|
46
|
-
fees.
|
|
46
|
+
fees.fee_date,
|
|
47
47
|
commission,
|
|
48
|
-
fees.
|
|
48
|
+
fees.product,
|
|
49
49
|
commission.crm_recipient,
|
|
50
50
|
rebate_value,
|
|
51
51
|
dict(),
|
|
@@ -54,8 +54,8 @@ class TestRebateModel(AccountManagerFixture):
|
|
|
54
54
|
Rebate.manage_rebate(commission.account)
|
|
55
55
|
new_rebate = Rebate.objects.get(
|
|
56
56
|
commission=commission,
|
|
57
|
-
product=fees.
|
|
58
|
-
date=fees.
|
|
57
|
+
product=fees.product,
|
|
58
|
+
date=fees.fee_date,
|
|
59
59
|
recipient=commission.crm_recipient,
|
|
60
60
|
)
|
|
61
61
|
assert new_rebate.value == rebate_value
|
|
@@ -64,9 +64,9 @@ class TestRebateModel(AccountManagerFixture):
|
|
|
64
64
|
mock_fct.return_value = [
|
|
65
65
|
(
|
|
66
66
|
commission.account,
|
|
67
|
-
fees.
|
|
67
|
+
fees.fee_date,
|
|
68
68
|
commission,
|
|
69
|
-
fees.
|
|
69
|
+
fees.product,
|
|
70
70
|
commission.crm_recipient,
|
|
71
71
|
rebate_value * 2,
|
|
72
72
|
dict(),
|
|
@@ -81,9 +81,9 @@ class TestRebateModel(AccountManagerFixture):
|
|
|
81
81
|
mock_fct.return_value = [
|
|
82
82
|
(
|
|
83
83
|
commission.account,
|
|
84
|
-
fees.
|
|
84
|
+
fees.fee_date,
|
|
85
85
|
new_commission,
|
|
86
|
-
fees.
|
|
86
|
+
fees.product,
|
|
87
87
|
new_commission.crm_recipient,
|
|
88
88
|
rebate_value,
|
|
89
89
|
dict(),
|
|
@@ -95,8 +95,8 @@ class TestRebateModel(AccountManagerFixture):
|
|
|
95
95
|
assert (
|
|
96
96
|
Rebate.objects.get(
|
|
97
97
|
commission=new_commission,
|
|
98
|
-
product=fees.
|
|
99
|
-
date=fees.
|
|
98
|
+
product=fees.product,
|
|
99
|
+
date=fees.fee_date,
|
|
100
100
|
recipient=new_commission.crm_recipient,
|
|
101
101
|
).value
|
|
102
102
|
== rebate_value
|
|
@@ -6,16 +6,10 @@ class RebatePandasViewEndpointConfig(EndpointViewConfig):
|
|
|
6
6
|
def get_endpoint(self, **kwargs):
|
|
7
7
|
return None
|
|
8
8
|
|
|
9
|
-
def get_list_endpoint(self, **kwargs):
|
|
10
|
-
return reverse("wbcommission:rebatetable-list", request=self.request)
|
|
11
|
-
|
|
12
9
|
|
|
13
10
|
class RebateProductMarginalityEndpointConfig(EndpointViewConfig):
|
|
14
11
|
def get_endpoint(self, **kwargs):
|
|
15
12
|
return None
|
|
16
13
|
|
|
17
|
-
def get_list_endpoint(self, **kwargs):
|
|
18
|
-
return reverse("wbcommission:rebatemarginalitytable-list", request=self.request)
|
|
19
|
-
|
|
20
14
|
def get_instance_endpoint(self, **kwargs):
|
|
21
15
|
return reverse("wbportfolio:product-list", request=self.request)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wbcommission
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.58.1
|
|
4
4
|
Summary: A workbench module for managing human resources.
|
|
5
5
|
Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
|
|
6
6
|
Requires-Dist: reportlab==3.*
|
|
@@ -8,4 +8,7 @@ Requires-Dist: wbcompliance
|
|
|
8
8
|
Requires-Dist: wbcore
|
|
9
9
|
Requires-Dist: wbcrm
|
|
10
10
|
Requires-Dist: wbfdm
|
|
11
|
+
Requires-Dist: wbmailing
|
|
11
12
|
Requires-Dist: wbnews
|
|
13
|
+
Requires-Dist: wbportfolio
|
|
14
|
+
Requires-Dist: wbreport
|
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
wbcommission/__init__.py,sha256=J-j-u0itpEFT6irdmWmixQqYMadNl1X91TxUmoiLHMI,22
|
|
2
2
|
wbcommission/apps.py,sha256=3q9lAeEBfv83rCzud3P0-VZgbWUfG0S61G5h3zFk1Ds,97
|
|
3
3
|
wbcommission/dynamic_preferences_registry.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
|
-
wbcommission/permissions.py,sha256=
|
|
4
|
+
wbcommission/permissions.py,sha256=Iz_q9QHWCXTJVisRBab4R9oXNX8ca3xVT12vdyYRMXQ,221
|
|
5
5
|
wbcommission/urls.py,sha256=L4TKTeSxsHfoc091TVX2B2-w7kgNolaZ-xlgm5O51lQ,1102
|
|
6
6
|
wbcommission/admin/__init__.py,sha256=xEYZYO9IUSNExPsY7jsxFS-Jjkl92tXnb7eSfwGpkZg,151
|
|
7
7
|
wbcommission/admin/accounts.py,sha256=M43ovnEH9XYBmXLzA10LmbKkn4uq62HYNIauaoThno4,816
|
|
8
8
|
wbcommission/admin/commission.py,sha256=TBbiuV1inS365WlNyUQBJDO31YQZZwxad0KW0H-8mP4,2078
|
|
9
9
|
wbcommission/admin/rebate.py,sha256=XoDyGl1MoUAiUrm-GL5wlHvCzASgZqmGWvfMVOm2rJA,230
|
|
10
10
|
wbcommission/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
11
|
-
wbcommission/analytics/marginality.py,sha256=
|
|
11
|
+
wbcommission/analytics/marginality.py,sha256=EVmTe9IILzeyUEz6cJrC7UqshiueMKR7ecGhYw9mn7g,8908
|
|
12
12
|
wbcommission/factories/__init__.py,sha256=3EdqwSHMqJIa5C_yH15M75u_frkLEno151aFoxrOLN0,249
|
|
13
13
|
wbcommission/factories/commission.py,sha256=omIpgTsXAa4bmVZ1349luhAuTEOzeurSpL6IHpl2VgU,3021
|
|
14
14
|
wbcommission/factories/rebate.py,sha256=JzbHV7stofk1F3aaQPEV3rEBc_0uwphpG_hea144utc,683
|
|
15
15
|
wbcommission/filters/__init__.py,sha256=9XoFMsmHcdTqy7ujQFlxvAJFvZoc4hjZ1SR6pyY8-9k,156
|
|
16
|
-
wbcommission/filters/rebate.py,sha256=
|
|
16
|
+
wbcommission/filters/rebate.py,sha256=OOXw2pC2grsscoLs_jIlGMtlSUAHFUWPSnSXQW2Ffj8,8150
|
|
17
17
|
wbcommission/filters/signals.py,sha256=J-a9F3IwWhgl7HZE9I2Z6PA6H7fKDnMrhtSQZ4wqhGU,1583
|
|
18
18
|
wbcommission/generators/__init__.py,sha256=Pt8TjtYCmqhROvWNmf_dxuONKVcrj7SH14nJAcv7_1Q,47
|
|
19
19
|
wbcommission/generators/rebate_generator.py,sha256=O31NGIDUtwONGPOUD3YVCMywN3cSqa5vlmlYWjD7ItE,4155
|
|
20
|
+
wbcommission/locale/de/LC_MESSAGES/django.mo,sha256=FfQ5HV2xg7ZrJASidRJ4L-gCAbPNeQnFm940aRbb0js,378
|
|
21
|
+
wbcommission/locale/de/LC_MESSAGES/django.po,sha256=WLf1SHi-OOAXavXqZmMfc052wGb2iS7tJ5wavOG3HgQ,906
|
|
22
|
+
wbcommission/locale/en/LC_MESSAGES/django.mo,sha256=UXCQbz2AxBvh-IQ7bGgjoBnijo8h9DfE9107A-2Mgkk,337
|
|
23
|
+
wbcommission/locale/en/LC_MESSAGES/django.po,sha256=T9ZgGhBn_9zSaL2xwBzh8TnlSRtDy2o-qNtY8CH0T5Q,856
|
|
24
|
+
wbcommission/locale/fr/LC_MESSAGES/django.mo,sha256=t4lh3zX7kshbDAFzXa5HU_YGPXkPzKqODNXL2MeZ5KQ,429
|
|
25
|
+
wbcommission/locale/fr/LC_MESSAGES/django.po,sha256=8qmEQ9wJ2dS2Wt_7_LeSTpW3hAGj6EwmadwCe340KBE,957
|
|
20
26
|
wbcommission/migrations/0001_initial.py,sha256=mE-vL8OsbdVvpnAqOQm38ZHQj6MVlpsu78b5WvJaxl0,11816
|
|
21
27
|
wbcommission/migrations/0002_commissionrule_remove_accountcustomer_account_and_more.py,sha256=gAqysHE_jwEbNWkMTAbocBS6B5R9IDfV3fAn9wrPWyE,16384
|
|
22
28
|
wbcommission/migrations/0003_alter_commission_account.py,sha256=P0EciB1Rne8LsbJqgtBnzfSD6O6pVSmmfeB2Ue5zeUk,727
|
|
@@ -27,13 +33,13 @@ wbcommission/migrations/0007_remove_commission_unique_crm_recipient_account_and_
|
|
|
27
33
|
wbcommission/migrations/0008_alter_commission_options_alter_commission_order.py,sha256=iNwNF1QcmVoj5Eu2yPJEHfI7bIA3e4WZMILjCfBVEx0,830
|
|
28
34
|
wbcommission/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
29
35
|
wbcommission/models/__init__.py,sha256=BJyah0_zKssfU2ohvu4qcQSHAT1ovcZ_go2-sLEagyw,183
|
|
30
|
-
wbcommission/models/account_service.py,sha256=
|
|
31
|
-
wbcommission/models/commission.py,sha256=
|
|
36
|
+
wbcommission/models/account_service.py,sha256=7tUxB8DmqGBPxfu0wCHApSKj6AkmWnHc9JB1rUxe3kk,10660
|
|
37
|
+
wbcommission/models/commission.py,sha256=oSDS5P_5KB9N6fk_xYBBWO1lL3nf44fjVWaDjNN8nRw,29963
|
|
32
38
|
wbcommission/models/rebate.py,sha256=GtR3G5TqmDdlcefF678Z9D993glddAormoWnYzYzQLg,12795
|
|
33
|
-
wbcommission/models/signals.py,sha256=
|
|
39
|
+
wbcommission/models/signals.py,sha256=RplhwccwDlEYGfw-lpcXpHPxfmeyKohdz-rKGll-NtU,2240
|
|
34
40
|
wbcommission/reports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
35
41
|
wbcommission/reports/audit_report.py,sha256=uzzTqYbvfen3AgXHM3mF77R_vDU3o02AVrjNwFXXH0k,2178
|
|
36
|
-
wbcommission/reports/customer_report.py,sha256=
|
|
42
|
+
wbcommission/reports/customer_report.py,sha256=1RTF4H5tsbEQTEgM7wEmEC8HU10UKD8ZInwFsh0rI7w,14245
|
|
37
43
|
wbcommission/reports/utils.py,sha256=Twc1SOwRIkB-_RJHFO1-tJaQ3ocCjFz0GsUXZPMZ3i8,1078
|
|
38
44
|
wbcommission/serializers/__init__.py,sha256=t38bchJeNgOcogmedHLfLBQBtRXuR-_hj0US_55Fug4,196
|
|
39
45
|
wbcommission/serializers/commissions.py,sha256=584tQjU3JEhkANxfLBmTyKsSe64JObFFqsoF7bP8jXM,678
|
|
@@ -44,12 +50,12 @@ wbcommission/tests/conftest.py,sha256=bdCEr9KUYxraSgsqZLP_f6SEVF9V5QJi3BnXHxksPf
|
|
|
44
50
|
wbcommission/tests/signals.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
45
51
|
wbcommission/tests/test_permissions.py,sha256=A9OO88jky1F3x7tFaYkiC9CJioSM1t6if6K4Yjt37lQ,2538
|
|
46
52
|
wbcommission/tests/analytics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
-
wbcommission/tests/analytics/test_marginality.py,sha256=
|
|
53
|
+
wbcommission/tests/analytics/test_marginality.py,sha256=1a2b8PEV0kLlL8NSwPnDs0DEdxgzjI3wU1imTOloBVU,11702
|
|
48
54
|
wbcommission/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
49
55
|
wbcommission/tests/models/mixins.py,sha256=gnsd0GCCdWcR8EYSh9ff-gY1l6dLPeU-LQYynngj9nw,818
|
|
50
|
-
wbcommission/tests/models/test_account_service.py,sha256=
|
|
51
|
-
wbcommission/tests/models/test_commission.py,sha256=
|
|
52
|
-
wbcommission/tests/models/test_rebate.py,sha256=
|
|
56
|
+
wbcommission/tests/models/test_account_service.py,sha256=_S2qWSJQB2WyF7v1HWrpdMMHEBvuHJA5CHz3GZEto68,13247
|
|
57
|
+
wbcommission/tests/models/test_commission.py,sha256=EqgJtYVi51ue49l-F5bbIQanG_P2FRnAR-eAbY-EJE0,27920
|
|
58
|
+
wbcommission/tests/models/test_rebate.py,sha256=wnq4fJkcTj2PTrwW3He65kRqGE0F2C-vYwafcjVSqVg,5671
|
|
53
59
|
wbcommission/tests/viewsets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
54
60
|
wbcommission/tests/viewsets/test_rebate.py,sha256=TM_-E1PGFui8JBQpeFLdDdVPyqz5FSn-cnoPHq1JzEQ,3262
|
|
55
61
|
wbcommission/viewsets/__init__.py,sha256=iuWo3Y9t8XxPgRG5DIURBk0J8hDoK2oTmMhv9hiAUcU,232
|
|
@@ -64,13 +70,13 @@ wbcommission/viewsets/display/commissions.py,sha256=4ifC3j3-wE1t57Yy9x02RnT1VAYb
|
|
|
64
70
|
wbcommission/viewsets/display/rebate.py,sha256=T45d_FP3W6934BwWVBAiT58tb4Dr7BmIA9nPnAdoOEA,5287
|
|
65
71
|
wbcommission/viewsets/endpoints/__init__.py,sha256=ghffTV9z9LxVzxNS4divoQ54sVosYZiJCEuqeUJ5gmo,135
|
|
66
72
|
wbcommission/viewsets/endpoints/commissions.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
67
|
-
wbcommission/viewsets/endpoints/rebate.py,sha256=
|
|
73
|
+
wbcommission/viewsets/endpoints/rebate.py,sha256=zdqviWWB5h5eoaTibYvAX8BlnOCaQCzitZl3fl6IIec,473
|
|
68
74
|
wbcommission/viewsets/menu/__init__.py,sha256=i2Sn3h8e-KZefQHg72QS4ba5P34pTGFe3s-dobYW5WU,65
|
|
69
75
|
wbcommission/viewsets/menu/commissions.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
70
76
|
wbcommission/viewsets/menu/rebate.py,sha256=Qzhwr2xG3_j7frxs3eWLZuMoUzT2nCBrWmEYbZ8fKfU,484
|
|
71
77
|
wbcommission/viewsets/titles/__init__.py,sha256=Sg64aMWm_OD4-P57YoaN6Mqv6NRVU5m7ii_WvaWuTsY,85
|
|
72
78
|
wbcommission/viewsets/titles/commissions.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
73
79
|
wbcommission/viewsets/titles/rebate.py,sha256=VTSHJW3voqCMVhDZ_zVeVmZid_WY3P4X9k11VdJM_GQ,301
|
|
74
|
-
wbcommission-1.
|
|
75
|
-
wbcommission-1.
|
|
76
|
-
wbcommission-1.
|
|
80
|
+
wbcommission-1.58.1.dist-info/METADATA,sha256=WWnK3lJGCJQe6C2868uY2jDuilDei1mOfDn_nPCXYOE,399
|
|
81
|
+
wbcommission-1.58.1.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
82
|
+
wbcommission-1.58.1.dist-info/RECORD,,
|
|
File without changes
|