wbportfolio 1.54.21__py2.py3-none-any.whl → 1.54.23__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 wbportfolio might be problematic. Click here for more details.
- wbportfolio/constants.py +1 -0
- wbportfolio/factories/orders/orders.py +10 -2
- wbportfolio/filters/assets.py +10 -2
- wbportfolio/import_export/handlers/orders.py +1 -1
- wbportfolio/import_export/parsers/vontobel/valuation_api.py +4 -1
- wbportfolio/migrations/0086_orderproposal_total_cash_weight.py +19 -0
- wbportfolio/models/asset.py +6 -20
- wbportfolio/models/builder.py +11 -11
- wbportfolio/models/orders/order_proposals.py +53 -20
- wbportfolio/models/orders/orders.py +4 -1
- wbportfolio/models/portfolio.py +16 -8
- wbportfolio/models/products.py +9 -0
- wbportfolio/pms/trading/handler.py +0 -1
- wbportfolio/serializers/orders/order_proposals.py +2 -18
- wbportfolio/tests/conftest.py +6 -2
- wbportfolio/tests/models/orders/test_order_proposals.py +61 -15
- wbportfolio/tests/models/test_products.py +11 -0
- wbportfolio/tests/signals.py +0 -10
- wbportfolio/tests/tests.py +2 -0
- wbportfolio/viewsets/__init__.py +7 -4
- wbportfolio/viewsets/assets.py +1 -215
- wbportfolio/viewsets/charts/__init__.py +6 -1
- wbportfolio/viewsets/charts/assets.py +337 -154
- wbportfolio/viewsets/configs/buttons/products.py +32 -2
- wbportfolio/viewsets/configs/display/assets.py +6 -19
- wbportfolio/viewsets/configs/display/products.py +1 -1
- wbportfolio/viewsets/orders/configs/buttons/order_proposals.py +12 -2
- wbportfolio/viewsets/orders/order_proposals.py +2 -1
- wbportfolio/viewsets/positions.py +3 -2
- {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/METADATA +3 -1
- {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/RECORD +33 -32
- wbportfolio/viewsets/signals.py +0 -43
- {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/WHEEL +0 -0
- {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/licenses/LICENSE +0 -0
|
@@ -10,6 +10,14 @@ class NormalizeSerializer(wb_serializers.Serializer):
|
|
|
10
10
|
total_cash_weight = wb_serializers.FloatField(default=0, precision=4, percent=True)
|
|
11
11
|
|
|
12
12
|
|
|
13
|
+
class ResetSerializer(wb_serializers.Serializer):
|
|
14
|
+
use_desired_target_weight = wb_serializers.BooleanField(
|
|
15
|
+
default=False,
|
|
16
|
+
label="Use initial target weight",
|
|
17
|
+
help_text="If True, the target weight used will be the value at the time the order proposal was submitted (as it may have changed due to previous modifications). If False, the delta weight will be set to 0 instead.",
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
13
21
|
class OrderProposalButtonConfig(ButtonViewConfig):
|
|
14
22
|
def get_custom_list_instance_buttons(self):
|
|
15
23
|
return {
|
|
@@ -35,11 +43,13 @@ class OrderProposalButtonConfig(ButtonViewConfig):
|
|
|
35
43
|
icon=WBIcon.REGENERATE.icon,
|
|
36
44
|
label="Reset Orders",
|
|
37
45
|
description_fields="""
|
|
38
|
-
<p><strong>Warning:</strong>
|
|
39
|
-
<p><strong>Note:</strong>
|
|
46
|
+
<p><strong>Warning:</strong>This action will reset the order delta weight to either 0 or the difference between the previous weight and the locked target weight, depending on the user’s choice.</p>
|
|
47
|
+
<p><strong>Note:</strong>This operation will change the current delta weights and cannot be undone</p>
|
|
40
48
|
""",
|
|
41
49
|
action_label="Reset Orders",
|
|
42
50
|
title="Reset Orders",
|
|
51
|
+
serializer=ResetSerializer,
|
|
52
|
+
instance_display=create_simple_display([["use_desired_target_weight"]]),
|
|
43
53
|
),
|
|
44
54
|
bt.ActionButton(
|
|
45
55
|
method=RequestType.PATCH,
|
|
@@ -98,9 +98,10 @@ class OrderProposalModelViewSet(CloneMixin, RiskCheckViewSetMixin, InternalUserP
|
|
|
98
98
|
@action(detail=True, methods=["PATCH"])
|
|
99
99
|
def reset(self, request, pk=None):
|
|
100
100
|
order_proposal = get_object_or_404(OrderProposal, pk=pk)
|
|
101
|
+
use_desired_target_weight = request.GET.get("use_desired_target_weight") == "true"
|
|
101
102
|
if order_proposal.status == OrderProposal.Status.DRAFT:
|
|
102
103
|
order_proposal.orders.all().update(weighting=0)
|
|
103
|
-
order_proposal.reset_orders()
|
|
104
|
+
order_proposal.reset_orders(use_desired_target_weight=use_desired_target_weight)
|
|
104
105
|
return Response({"send": True})
|
|
105
106
|
return Response({"status": "Order Proposal is not Draft"}, status=status.HTTP_400_BAD_REQUEST)
|
|
106
107
|
|
|
@@ -10,7 +10,7 @@ from wbcore.pandas import fields as pf
|
|
|
10
10
|
from wbcore.permissions.permissions import InternalUserPermissionMixin
|
|
11
11
|
from wbcore.serializers import decorator
|
|
12
12
|
from wbcore.utils.strings import format_number
|
|
13
|
-
from wbfdm.models import Classification, ClassificationGroup, Instrument
|
|
13
|
+
from wbfdm.models import Classification, ClassificationGroup, Instrument
|
|
14
14
|
|
|
15
15
|
from wbportfolio.filters import (
|
|
16
16
|
AggregatedAssetPositionLiquidityFilter,
|
|
@@ -19,6 +19,7 @@ from wbportfolio.filters import (
|
|
|
19
19
|
from wbportfolio.filters.positions import GroupbyChoice
|
|
20
20
|
from wbportfolio.models import AssetPosition, Portfolio
|
|
21
21
|
|
|
22
|
+
from ..constants import EQUITY_TYPE_KEYS
|
|
22
23
|
from .configs import (
|
|
23
24
|
AggregatedAssetPositionLiquidityDisplayConfig,
|
|
24
25
|
AggregatedAssetPositionLiquidityEndpointConfig,
|
|
@@ -212,7 +213,7 @@ class AggregatedAssetPositionLiquidityPandasView(InternalUserPermissionMixin, Ex
|
|
|
212
213
|
|
|
213
214
|
# Take the liquidity query for the two dates.
|
|
214
215
|
qs_assets = queryset.filter(
|
|
215
|
-
|
|
216
|
+
underlying_instrument__instrument_type__key__in=EQUITY_TYPE_KEYS,
|
|
216
217
|
date__in=[historic_date, compared_date],
|
|
217
218
|
).values(
|
|
218
219
|
"date",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wbportfolio
|
|
3
|
-
Version: 1.54.
|
|
3
|
+
Version: 1.54.23
|
|
4
4
|
Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Requires-Dist: cryptography==3.4.*
|
|
@@ -19,6 +19,8 @@ Requires-Dist: wbcompliance
|
|
|
19
19
|
Requires-Dist: wbcore
|
|
20
20
|
Requires-Dist: wbcrm
|
|
21
21
|
Requires-Dist: wbfdm
|
|
22
|
+
Requires-Dist: wbmailing
|
|
22
23
|
Requires-Dist: wbnews
|
|
24
|
+
Requires-Dist: wbreport
|
|
23
25
|
Requires-Dist: xlrd==2.*
|
|
24
26
|
Requires-Dist: xlsxwriter==3.*
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
wbportfolio/__init__.py,sha256=J-j-u0itpEFT6irdmWmixQqYMadNl1X91TxUmoiLHMI,22
|
|
2
2
|
wbportfolio/apps.py,sha256=tybcoLFiw5tLdGHYV68X96n6jNZqx4BYx7Ao8mPflH8,749
|
|
3
|
+
wbportfolio/constants.py,sha256=86bfJ-xAyJQGv8DDxhVP_BM7Jr_lxQMhe4SkrxpfN_c,119
|
|
3
4
|
wbportfolio/dynamic_preferences_registry.py,sha256=SV-4JWBZBYhXt5cNMglx-yRJhxpejP_jo157ghjq2q0,2294
|
|
4
5
|
wbportfolio/permissions.py,sha256=F147DXfitbw6IdMQGEFfymCJkiG5YGkWKsLdVVliPyw,320
|
|
5
6
|
wbportfolio/preferences.py,sha256=JpowIFTrnjfomogJNrYmmfv7V35bRZNNGL_zooKzEhc,465
|
|
@@ -75,11 +76,11 @@ wbportfolio/factories/roles.py,sha256=tot54YX70sNqZrAg5zGJTHd7_PFjZed_mny4lGlnwE
|
|
|
75
76
|
wbportfolio/factories/trades.py,sha256=ZHfj20KjeTu57sNaZzfSw2JqCoI9q4BjfPp5qRMVsro,1387
|
|
76
77
|
wbportfolio/factories/orders/__init__.py,sha256=QG7on_F9GiuJgvGbM0BNDVdfGwwBz_WGbmCFNbKPZzc,83
|
|
77
78
|
wbportfolio/factories/orders/order_proposals.py,sha256=JR7oABGv6uGQgNRNCWcgmTHOlyaugsKDnEZo-yfk-P0,549
|
|
78
|
-
wbportfolio/factories/orders/orders.py,sha256=
|
|
79
|
+
wbportfolio/factories/orders/orders.py,sha256=tTw2U-xvUsFpG4zad3KCHZPQx1FVg-zPjwEN73XEOjg,907
|
|
79
80
|
wbportfolio/fdm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
80
81
|
wbportfolio/fdm/tasks.py,sha256=59hXt3TOJaM8KpUaKdBNAGsO7NFMHaAlNA0T3FTUau0,533
|
|
81
82
|
wbportfolio/filters/__init__.py,sha256=m44CdyYMtku8rMGyiX8KSmMdvyqaElKW4UMkEqOC1VM,1374
|
|
82
|
-
wbportfolio/filters/assets.py,sha256=
|
|
83
|
+
wbportfolio/filters/assets.py,sha256=jQoWmK2teQPBpEUNLC3NWl6fhrndl1Tt0sPdQxiPPM4,18538
|
|
83
84
|
wbportfolio/filters/assets_and_net_new_money_progression.py,sha256=IYl_qMFO9QKhXhCTtz2JrOjlAKdEkykNlu4DO_H7HkQ,1403
|
|
84
85
|
wbportfolio/filters/custodians.py,sha256=pStQgPQPhPpnt57_V7BuXbFXmRiZBEAiEeMFuQmt2NE,287
|
|
85
86
|
wbportfolio/filters/esg.py,sha256=ZEUQh3IQxLSshVrgtPqHC_ToirrllkCXR_KzUlCUtkA,688
|
|
@@ -119,7 +120,7 @@ wbportfolio/import_export/handlers/adjustment.py,sha256=6bdTIYFmc8_HFxcdwtnYwglM
|
|
|
119
120
|
wbportfolio/import_export/handlers/asset_position.py,sha256=UZBDlEK5mxtGu9cZvwiQS6J8GNkMJqDZb7KZ3uwex0g,8698
|
|
120
121
|
wbportfolio/import_export/handlers/dividend.py,sha256=F0oLfNt2B_QQAjHBCRpxa5HSkfkAYdal_NjLJGtVckY,4408
|
|
121
122
|
wbportfolio/import_export/handlers/fees.py,sha256=BOFHAvSTlvVLaxnm6KD_fcza1TlPc02HOR9J0_jjswI,2495
|
|
122
|
-
wbportfolio/import_export/handlers/orders.py,sha256=
|
|
123
|
+
wbportfolio/import_export/handlers/orders.py,sha256=GU3_tIy-tAw9aU-ifsnmMZPBB9sqfkFC_S1d9VziTwg,3136
|
|
123
124
|
wbportfolio/import_export/handlers/portfolio_cash_flow.py,sha256=W7QPNqEvvsq0RS016EAFBp1ezvc6G9Rk-hviRZh8o6Y,2737
|
|
124
125
|
wbportfolio/import_export/handlers/register.py,sha256=sYyXkE8b1DPZ5monxylZn0kjxLVdNYYZR-p61dwEoDM,2271
|
|
125
126
|
wbportfolio/import_export/handlers/trade.py,sha256=g2jAYYeuhZv_DuvM6zlROcq6rUlSbGaQ3tO4u6wkSRU,11140
|
|
@@ -194,7 +195,7 @@ wbportfolio/import_export/parsers/vontobel/performance_fees.py,sha256=K-E7bRs7Lx
|
|
|
194
195
|
wbportfolio/import_export/parsers/vontobel/trade.py,sha256=Xc0ttSkdLm-ZIHtXOyHxHr3FuR89T87I9hXqiTMU1Hk,1566
|
|
195
196
|
wbportfolio/import_export/parsers/vontobel/utils.py,sha256=3-g2Jep9SxvqqQff8_3FjIeiPxSJCEfXBiBHIk0TiXQ,225
|
|
196
197
|
wbportfolio/import_export/parsers/vontobel/valuation.py,sha256=iav8_xYpTJchmTa7KOPmFr1gi9xxLwq3e-VcZ9MDiRk,1220
|
|
197
|
-
wbportfolio/import_export/parsers/vontobel/valuation_api.py,sha256=
|
|
198
|
+
wbportfolio/import_export/parsers/vontobel/valuation_api.py,sha256=z9b5zKS-Dz907Mrbg7rJjFVJocSutEiS6oo2ICTjpUI,980
|
|
198
199
|
wbportfolio/import_export/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
199
200
|
wbportfolio/import_export/resources/assets.py,sha256=zjgHlQWpud41jHrKdRyqGUt1KUJQm9Z7pt0uVh4qBWQ,2234
|
|
200
201
|
wbportfolio/import_export/resources/trades.py,sha256=-HJPVYNuMRmCu4XpD00fYlRYu3N-Ys_JpyxE0HIU5bM,1723
|
|
@@ -264,21 +265,22 @@ wbportfolio/migrations/0082_remove_tradeproposal_creator_and_more.py,sha256=DZBK
|
|
|
264
265
|
wbportfolio/migrations/0083_order_alter_trade_options_and_more.py,sha256=oFYG2cVf2CFKFJX84eUSmGJdK1BHY_QcVm_hmAIbVNg,9952
|
|
265
266
|
wbportfolio/migrations/0084_orderproposal_min_order_value.py,sha256=bJPpPX7PQmlWAIyLzZ6ca6K0paGTRbzS8AkyOHDoGMc,925
|
|
266
267
|
wbportfolio/migrations/0085_order_desired_target_weight.py,sha256=L8p5t4PqjWIwqwiqt-ofdfGkBhm-7dtbg52cIkxNnDs,803
|
|
268
|
+
wbportfolio/migrations/0086_orderproposal_total_cash_weight.py,sha256=IE65OYYBOSQjj6znl9jmsMalxDmKdnHV1DbVz_ZX_M4,689
|
|
267
269
|
wbportfolio/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
268
270
|
wbportfolio/models/__init__.py,sha256=qU4e7HKyh8NL_0Mg92PcbHTewCv7Ya2gei1DMGe1LWE,980
|
|
269
271
|
wbportfolio/models/adjustments.py,sha256=osXWkJZOiansPWYPyHtl7Z121zDWi7u1YMtrBQtbHVo,10272
|
|
270
|
-
wbportfolio/models/asset.py,sha256=
|
|
271
|
-
wbportfolio/models/builder.py,sha256=
|
|
272
|
+
wbportfolio/models/asset.py,sha256=K0cvK-g1dUmQLjVAboUm3zDb4YGW_Wu9eRMdhfEMSck,39123
|
|
273
|
+
wbportfolio/models/builder.py,sha256=SoyJ7Ri3g5rGhZVq5rqJynW34Q8GYfUJg7QcbBTnOa8,11522
|
|
272
274
|
wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
|
|
273
275
|
wbportfolio/models/exceptions.py,sha256=3ix0tWUO-O6jpz8f07XIwycw2x3JFRoWzjwil8FVA2Q,52
|
|
274
276
|
wbportfolio/models/indexes.py,sha256=gvW4K9U9Bj8BmVCqFYdWiXvDWhjHINRON8XhNsZUiQY,639
|
|
275
|
-
wbportfolio/models/portfolio.py,sha256=
|
|
277
|
+
wbportfolio/models/portfolio.py,sha256=gBgukGpEPkBt_eQv8FvGwku0yyvleRqVV6moTk5sSLY,53317
|
|
276
278
|
wbportfolio/models/portfolio_cash_flow.py,sha256=uElG7IJUBY8qvtrXftOoskX6EA-dKgEG1JJdvHeWV7g,7336
|
|
277
279
|
wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
|
|
278
280
|
wbportfolio/models/portfolio_relationship.py,sha256=ZGECiPZiLdlk4uSamOrEfuzO0hduK6OMKJLUSnh5_kc,5190
|
|
279
281
|
wbportfolio/models/portfolio_swing_pricings.py,sha256=_LqYC1VRjnnFFmVqFPRdnbgYsVxocMVpClTk2dnooig,1778
|
|
280
282
|
wbportfolio/models/product_groups.py,sha256=qoT8qv6tRdD6zmNDxsHO6dtnWw1-TRnyS5NqOq_gwhI,7901
|
|
281
|
-
wbportfolio/models/products.py,sha256=
|
|
283
|
+
wbportfolio/models/products.py,sha256=8XXx6sN3cUCls_TlwAc8-vL1bNn0JQRAxeCeyLJlmG8,23177
|
|
282
284
|
wbportfolio/models/rebalancing.py,sha256=6KURFl0j121ccd4ksuXJqKQF1aPaA7W0DkHFIlBFGow,7690
|
|
283
285
|
wbportfolio/models/registers.py,sha256=qA6T33t4gxFYnabQFBMd90WGIr6wxxirDLKDFqjOfok,4667
|
|
284
286
|
wbportfolio/models/roles.py,sha256=wF5Atp0xsJxDrYjmFw9XHgEOe_4C-lm4pppeYdymOrA,7343
|
|
@@ -292,8 +294,8 @@ wbportfolio/models/mixins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
|
|
|
292
294
|
wbportfolio/models/mixins/instruments.py,sha256=SgBreTpa_X3uyCWo7t8B0VaTtl49IjmBMe4Pab6TjAM,6796
|
|
293
295
|
wbportfolio/models/mixins/liquidity_stress_test.py,sha256=iQVzT3QM7VtHnqfj9gT6KUIe4wC4MJXery-AXJHUYns,58820
|
|
294
296
|
wbportfolio/models/orders/__init__.py,sha256=EH9UacGR3npBMje5FGTeLOh1xqFBh9kc24WbGmBIA3g,69
|
|
295
|
-
wbportfolio/models/orders/order_proposals.py,sha256=
|
|
296
|
-
wbportfolio/models/orders/orders.py,sha256
|
|
297
|
+
wbportfolio/models/orders/order_proposals.py,sha256=6aKeBYax3aGsDLmPYI94Pa8nnANUP7SGWAJudSmZjxA,41820
|
|
298
|
+
wbportfolio/models/orders/orders.py,sha256=-L-cKATF8gdgSReQL_SobfD207kzQoKy24pF1nPLVEM,9713
|
|
297
299
|
wbportfolio/models/reconciliations/__init__.py,sha256=MXH5fZIPGDRBgJkO6wVu_NLRs8fkP1im7G6d-h36lQY,127
|
|
298
300
|
wbportfolio/models/reconciliations/account_reconciliation_lines.py,sha256=QP6M7hMcyFbuXBa55Y-azui6Dl_WgbzMntEqWzQkbfM,7394
|
|
299
301
|
wbportfolio/models/reconciliations/account_reconciliations.py,sha256=rofSxetFfEJov6mPyoTvGxELA16HILyJZtQvm_kwYU0,4405
|
|
@@ -311,7 +313,7 @@ wbportfolio/pms/analytics/portfolio.py,sha256=u_S-e6HUQwAyq90gweDmxyTHWrIc5nd84s
|
|
|
311
313
|
wbportfolio/pms/analytics/utils.py,sha256=EfhKdo9B2ABaUPppb8DgZSqpNkSze8Rjej1xDjv-XcQ,282
|
|
312
314
|
wbportfolio/pms/statistics/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
313
315
|
wbportfolio/pms/trading/__init__.py,sha256=R_yLKc54sCak8A1cW0O1Aszrcv5KV8mC_3h17Hr20e4,36
|
|
314
|
-
wbportfolio/pms/trading/handler.py,sha256=
|
|
316
|
+
wbportfolio/pms/trading/handler.py,sha256=D903Hn0PpI1_9lFGPX847aaKp1nlKeWulxH_prCdWzw,8492
|
|
315
317
|
wbportfolio/rebalancing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
316
318
|
wbportfolio/rebalancing/base.py,sha256=wpeoxdkLz5osxm5mRjkOoML7YkYvwuAlqSLLtHBbWp8,984
|
|
317
319
|
wbportfolio/rebalancing/decorators.py,sha256=162ZmXV2YQGI830LWvEnJ95RexMzHvaCGfcVOnXTOXM,502
|
|
@@ -364,7 +366,7 @@ wbportfolio/serializers/registers.py,sha256=zhdKH_mHEBE0VOhm6xpY54bTMtcSaY5BskEa
|
|
|
364
366
|
wbportfolio/serializers/roles.py,sha256=T-9NqTldpvaEMFy-Bib5MB6MeboygEOqcMP61mzzD3Q,2146
|
|
365
367
|
wbportfolio/serializers/signals.py,sha256=hD6R4oFtwhvnsJPteytPKy2JwEelmxrapdfoLSnluaE,7053
|
|
366
368
|
wbportfolio/serializers/orders/__init__.py,sha256=PKJRksA1pWsh8nVfGASoB0m3LyUzVRnq1m9VPp90J7k,271
|
|
367
|
-
wbportfolio/serializers/orders/order_proposals.py,sha256=
|
|
369
|
+
wbportfolio/serializers/orders/order_proposals.py,sha256=6w1XKiAdQLDd_d2DMniv_zx--8uom-yT6OLya2uDA2Y,3878
|
|
368
370
|
wbportfolio/serializers/orders/orders.py,sha256=pAKjJLRANOo1iMlcv18twuQ0aAVDVKYt-pPx6avnWRQ,7464
|
|
369
371
|
wbportfolio/serializers/transactions/__init__.py,sha256=-7Pan4n7YI3iDvGXff6okzk4ycEURRxp5n_SHCY_g_I,493
|
|
370
372
|
wbportfolio/serializers/transactions/claim.py,sha256=kC4E2RZRrpd9i8tGfoiV-gpWDk3ikR5F1Wf0v_IGIvw,11599
|
|
@@ -385,9 +387,9 @@ wbportfolio/templates/portfolio/email/email_base_template.html,sha256=n6DN3QV92t
|
|
|
385
387
|
wbportfolio/templates/portfolio/email/rebalancing_report.html,sha256=Go7joPYXwF_1Q72mblOtJSw4-TbH3NqW7ww_xGBP95k,1206
|
|
386
388
|
wbportfolio/templates/portfolio/macro/macro_review.html,sha256=OxliFeX9pVNKeTVTaPnfNPHmM5YxVMr77PeKC-6y0jY,2273
|
|
387
389
|
wbportfolio/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
388
|
-
wbportfolio/tests/conftest.py,sha256=
|
|
389
|
-
wbportfolio/tests/signals.py,sha256=
|
|
390
|
-
wbportfolio/tests/tests.py,sha256=
|
|
390
|
+
wbportfolio/tests/conftest.py,sha256=007ydJK59J1guakXWYrZ-waDZNgXAXwMYSJ-BTDFVhA,4614
|
|
391
|
+
wbportfolio/tests/signals.py,sha256=aUu4nDWmVAAWyokcWJDj2RsajeIa070qXsZeNq6ynqY,5545
|
|
392
|
+
wbportfolio/tests/tests.py,sha256=3NdpJQlksLclF-7lVP07WJXaEzquhneoDX1lIA_tyXU,1121
|
|
391
393
|
wbportfolio/tests/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
392
394
|
wbportfolio/tests/models/test_account_reconciliation.py,sha256=7IDZh6qbG7-3czbNf5aDRaEDnMBw2Qiqk_h425dFu9w,8569
|
|
393
395
|
wbportfolio/tests/models/test_assets.py,sha256=N8OP2ZTPdq0lGonFRB0q_ruwF8QYpOGLkPWoucr8u_E,10428
|
|
@@ -402,12 +404,12 @@ wbportfolio/tests/models/test_portfolio_cash_targets.py,sha256=q8QWAwt-kKRkLC0E0
|
|
|
402
404
|
wbportfolio/tests/models/test_portfolio_swing_pricings.py,sha256=kr2AOcQkyg2pX3ULjU-o9ye-NVpjMrrfoe-DVbYCbjs,1656
|
|
403
405
|
wbportfolio/tests/models/test_portfolios.py,sha256=VdfkblwSow1w-HLFto8wssuBTjSqaCBpE1_Tf6wb0R0,51878
|
|
404
406
|
wbportfolio/tests/models/test_product_groups.py,sha256=AcdxhurV-n_bBuUsfD1GqVtwLFcs7VI2CRrwzsIUWbU,3337
|
|
405
|
-
wbportfolio/tests/models/test_products.py,sha256=
|
|
407
|
+
wbportfolio/tests/models/test_products.py,sha256=zB3xDGk7k7omI61hU9cnU96oBc3ICiMaYtFC9pidars,9965
|
|
406
408
|
wbportfolio/tests/models/test_roles.py,sha256=4Cn7WyrA2ztJNeWLk5cy9kYo5XLWMbFSvo1O-9JYxeA,3323
|
|
407
409
|
wbportfolio/tests/models/test_splits.py,sha256=ytKcHsI_90kj1L4s8It-KEcc24rkDcElxwQ8q0QxEvk,9689
|
|
408
410
|
wbportfolio/tests/models/utils.py,sha256=ORNJq6NMo1Za22jGZXfTfKeNEnTRlfEt_8SJ6xLaQWg,325
|
|
409
411
|
wbportfolio/tests/models/orders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
410
|
-
wbportfolio/tests/models/orders/test_order_proposals.py,sha256=
|
|
412
|
+
wbportfolio/tests/models/orders/test_order_proposals.py,sha256=Cdv-tESJSyHyXzA6ABHMNGSG51NDIagH1LGw8wYo7lo,33309
|
|
411
413
|
wbportfolio/tests/models/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
412
414
|
wbportfolio/tests/models/transactions/test_claim.py,sha256=NG3BKB-FVcIDgHSJHCjImxgMM3ISVUMl24xUPmEcPec,5570
|
|
413
415
|
wbportfolio/tests/models/transactions/test_fees.py,sha256=tAp18x2wCNQr11LUnLtHNbBDbbX0v1DZnmW7i-cEi5Q,2423
|
|
@@ -425,9 +427,9 @@ wbportfolio/tests/viewsets/test_performances.py,sha256=Cx5FqPO4K8G7F6-rqiiSDmFNY
|
|
|
425
427
|
wbportfolio/tests/viewsets/test_products.py,sha256=VsLW5iazAGch8yxH0jTgcc2fn4L7iZ2gPw7PmqQL60g,4270
|
|
426
428
|
wbportfolio/tests/viewsets/transactions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
427
429
|
wbportfolio/tests/viewsets/transactions/test_claims.py,sha256=QEZfMAW07dyoZ63t2umSwGOqvaTULfYfbN_F4ZoSAcw,6368
|
|
428
|
-
wbportfolio/viewsets/__init__.py,sha256=
|
|
430
|
+
wbportfolio/viewsets/__init__.py,sha256=nmWLARDxraY09h4-dpfbOWlx1OylZz3_DpGk_gvJv-o,2475
|
|
429
431
|
wbportfolio/viewsets/adjustments.py,sha256=ugbX4aFRCaD4Yj1hxL-VIPaNI7GF_wt0FrkN6mq1YjU,1524
|
|
430
|
-
wbportfolio/viewsets/assets.py,sha256=
|
|
432
|
+
wbportfolio/viewsets/assets.py,sha256=v0GvRb3Hoj26H4NmLB_d3iqdG1c1e9SsZrvzkzg9Jvg,16404
|
|
431
433
|
wbportfolio/viewsets/assets_and_net_new_money_progression.py,sha256=Jl4vEQP4N2OFL5IGBXoKcj-0qaPviU0I8npvQLw4Io0,4464
|
|
432
434
|
wbportfolio/viewsets/custodians.py,sha256=CTFqkqVP1R3AV7lhdvcdICxB5DfwDYCyikNSI5kbYEo,2322
|
|
433
435
|
wbportfolio/viewsets/esg.py,sha256=27MxxdXQH3Cq_1UEYmcrF7htUOg6i81fUpbVQXAAKJI,6985
|
|
@@ -437,7 +439,7 @@ wbportfolio/viewsets/portfolio_cash_targets.py,sha256=CvHlrDE8qnnnfRpTYnFu-Uu15M
|
|
|
437
439
|
wbportfolio/viewsets/portfolio_relationship.py,sha256=RGyvxd8NfFEs8YdqEvVD3VbrISvAO5UtCTlocSIuWQw,2109
|
|
438
440
|
wbportfolio/viewsets/portfolio_swing_pricing.py,sha256=-57l3WLQZRslIV67OT0ucHE5JXTtTtLvd3t7MppdVn8,357
|
|
439
441
|
wbportfolio/viewsets/portfolios.py,sha256=6aF2Uh0EAdHdX1mMTQrFBlXZ5kmlaCPz49iDvT2CnYM,14438
|
|
440
|
-
wbportfolio/viewsets/positions.py,sha256=
|
|
442
|
+
wbportfolio/viewsets/positions.py,sha256=fYmkcYwNybeEZejMZVvel8yFdr7ob_jG8t6ar7snD58,13236
|
|
441
443
|
wbportfolio/viewsets/product_groups.py,sha256=YvmuXPPy98K1J_rz6YPsx9gNK-tCS2P-wc1uRYgfyo0,2399
|
|
442
444
|
wbportfolio/viewsets/product_performance.py,sha256=dRfRgifjGS1RgZSu9uJRM0SmB7eLnNUkPuqARMO4gyo,28371
|
|
443
445
|
wbportfolio/viewsets/products.py,sha256=V8UFtfqxzs67XaU1JZcJJms1WzeNPeXtNBrQuz4B5mk,20414
|
|
@@ -445,9 +447,8 @@ wbportfolio/viewsets/rebalancing.py,sha256=ACmlRJGeSO7eUq5ckaXbHEINH6TA5nQYWHLbI
|
|
|
445
447
|
wbportfolio/viewsets/reconciliations.py,sha256=tRS7UBDtMn-07uA9QqYvnCtp_mZGVeULF2OJMfHJPZk,7357
|
|
446
448
|
wbportfolio/viewsets/registers.py,sha256=eOuEhW2McHsOapCKue7M4eazrJnVpCBVxImpFccq0z0,2401
|
|
447
449
|
wbportfolio/viewsets/roles.py,sha256=vnzS1mlJMZS3GObrss6SfXOr3KRb-OHB1s4Msvtn7xQ,1556
|
|
448
|
-
wbportfolio/viewsets/
|
|
449
|
-
wbportfolio/viewsets/charts/
|
|
450
|
-
wbportfolio/viewsets/charts/assets.py,sha256=rZM4Ul0ZXVr7uz3SU44J5IYU7-FivjDgR1it_4ewk2o,10547
|
|
450
|
+
wbportfolio/viewsets/charts/__init__.py,sha256=zE3bxS0V-nM_yZ610M7qsaToNOJXvTjwFLhH1it3h4M,169
|
|
451
|
+
wbportfolio/viewsets/charts/assets.py,sha256=2ZyEFz9g9ZZzUcZVOVs0jBefrQkOxy-O1fFrvnwo5oY,17813
|
|
451
452
|
wbportfolio/viewsets/configs/__init__.py,sha256=K5opfVQvgGwSyw3XwDGkv3lo5i9jBxOJXYhLqyCdfeQ,137
|
|
452
453
|
wbportfolio/viewsets/configs/buttons/__init__.py,sha256=hyvpxwh9ss8Q0xcE006qsTLuSsJeWt9saHRcU4g96tA,791
|
|
453
454
|
wbportfolio/viewsets/configs/buttons/adjustments.py,sha256=sUY_3vxqP0kuqs8i5hklfboZI6QiAOrmu30eb29Xupo,492
|
|
@@ -457,14 +458,14 @@ wbportfolio/viewsets/configs/buttons/custodians.py,sha256=AE-VFahGreSlg5nejqQVvO
|
|
|
457
458
|
wbportfolio/viewsets/configs/buttons/fees.py,sha256=8z-qo5krw4x_9ujp0s8iR8iY8_5m-wusPNaQkjMxFSA,443
|
|
458
459
|
wbportfolio/viewsets/configs/buttons/mixins.py,sha256=d2W3IOgmi3icTMeoO_ckec2oCXA_kiG6nOriMG7YHTI,3169
|
|
459
460
|
wbportfolio/viewsets/configs/buttons/portfolios.py,sha256=y1sqYJwhQG9M0AgUEY8yEE3VTdhhVxoup3YBc2IRm-U,5267
|
|
460
|
-
wbportfolio/viewsets/configs/buttons/products.py,sha256=
|
|
461
|
+
wbportfolio/viewsets/configs/buttons/products.py,sha256=4xH19uYTDL55hKrV24eeeOFrmO1vV5MAwPw5IxNKosQ,3301
|
|
461
462
|
wbportfolio/viewsets/configs/buttons/reconciliations.py,sha256=lw4r22GHpqKPUF1MrB6P9dOkL-FHe5iiBJ0--f8D74E,3145
|
|
462
463
|
wbportfolio/viewsets/configs/buttons/registers.py,sha256=aS89TsYHql83k-NHojOrLDqtBpnpsUUO8x63PiMfrXM,445
|
|
463
464
|
wbportfolio/viewsets/configs/buttons/signals.py,sha256=6sKBQI_eDvZuZR5bUUwvur5R67A3oChAGxPfayWUelE,2739
|
|
464
465
|
wbportfolio/viewsets/configs/buttons/trades.py,sha256=X2B1l0iEIdHb3ZMf9rLVoiX_H8lSyLD12wopgumOIX4,2318
|
|
465
466
|
wbportfolio/viewsets/configs/display/__init__.py,sha256=JoroVU97TvjTC1qtrduw5iD1ON1qXtH9j-Suzs-Psco,1993
|
|
466
467
|
wbportfolio/viewsets/configs/display/adjustments.py,sha256=jIOEc23OCYBguLaZRlZxC916kocYT35ZV9Jsiocs9nk,3334
|
|
467
|
-
wbportfolio/viewsets/configs/display/assets.py,sha256=
|
|
468
|
+
wbportfolio/viewsets/configs/display/assets.py,sha256=TU5QP-6mucMkO8FUWJ-ATbWmiBK5x3o8N8pRufT4X-0,10063
|
|
468
469
|
wbportfolio/viewsets/configs/display/claim.py,sha256=MRtEdxWjsDjt1k6O-ltM-SpPmHWBk85sCycsRgzd9jI,12041
|
|
469
470
|
wbportfolio/viewsets/configs/display/custodians.py,sha256=R-tnktfY48K-8Zz-Fg_M6IXKHv42J1ZeSpom7lvYVS8,801
|
|
470
471
|
wbportfolio/viewsets/configs/display/esg.py,sha256=W8uetCPN2TjHtU2kvQjKOmkq7uoaYvzX2iLN6Nz78Pk,3111
|
|
@@ -475,7 +476,7 @@ wbportfolio/viewsets/configs/display/portfolios.py,sha256=DuhnFIlBFvmDrxrd0IBbvX
|
|
|
475
476
|
wbportfolio/viewsets/configs/display/positions.py,sha256=yolWLxzGPIpSQSiVhVQChURqbomPt5kSjkYrmXT1Mik,3123
|
|
476
477
|
wbportfolio/viewsets/configs/display/product_groups.py,sha256=PwI-A0_ofShT2pub9-C1HqreiqpHxKMHd51JYwEzvbM,2500
|
|
477
478
|
wbportfolio/viewsets/configs/display/product_performance.py,sha256=6Mme48JBn_okwClR44dBK2OK26ejvdasDvBa5DI33_0,10070
|
|
478
|
-
wbportfolio/viewsets/configs/display/products.py,sha256=
|
|
479
|
+
wbportfolio/viewsets/configs/display/products.py,sha256=8Ssmb4IjqXwTX81aKmLVbmWZcD_8uHa08vieO6cgjoM,10686
|
|
479
480
|
wbportfolio/viewsets/configs/display/rebalancing.py,sha256=8B4OG9SYQGc_sVL0BjxfHGVM7QS7-hNHcnYxYvTq5TI,1112
|
|
480
481
|
wbportfolio/viewsets/configs/display/reconciliations.py,sha256=YvMAuwmpX0HExvGsuf5UvcRQxe4eMo1iyNJX68GGC_k,6021
|
|
481
482
|
wbportfolio/viewsets/configs/display/registers.py,sha256=1np75exIk5rfct6UkVN_RnfJ9ozvIkcWJgFV4_4rJns,3182
|
|
@@ -535,11 +536,11 @@ wbportfolio/viewsets/configs/titles/registers.py,sha256=-C-YeGBhGva48oER6EIQ8CxW
|
|
|
535
536
|
wbportfolio/viewsets/configs/titles/roles.py,sha256=9LoJa3jgenXJ5UWRlIErTzdbjpSWMKsyJZtv-eDRTK4,739
|
|
536
537
|
wbportfolio/viewsets/configs/titles/trades.py,sha256=29XCLxvY0Xe3a2tjCno3tN2rRXCr9RWpbWnzurJfnYI,1986
|
|
537
538
|
wbportfolio/viewsets/orders/__init__.py,sha256=N8v9jdEXryOzrLlc7ML3iBCO2lmNXph9_TWoQ7PTvi4,195
|
|
538
|
-
wbportfolio/viewsets/orders/order_proposals.py,sha256=
|
|
539
|
+
wbportfolio/viewsets/orders/order_proposals.py,sha256=RTxOT9gH8_5Dcm4DGrnrk86ExqNoEHHo8tgh38OtIoo,6356
|
|
539
540
|
wbportfolio/viewsets/orders/orders.py,sha256=u3tRqio-oCnmqhC5jmn_EDKoNrF1xXMgOu2c2BfqNS8,10851
|
|
540
541
|
wbportfolio/viewsets/orders/configs/__init__.py,sha256=5MU57JXiKi32_PicHtiNr7YHmMN020FrlF5NFJf_Wds,94
|
|
541
542
|
wbportfolio/viewsets/orders/configs/buttons/__init__.py,sha256=EHzNmAfa0UQFITEF-wxj_s4wn3Y5DE3DCbEUmmvCTIs,106
|
|
542
|
-
wbportfolio/viewsets/orders/configs/buttons/order_proposals.py,sha256=
|
|
543
|
+
wbportfolio/viewsets/orders/configs/buttons/order_proposals.py,sha256=loDbYz5_7FACheiooghIAQLSqascLxdF2bTVxPvRVmE,4192
|
|
543
544
|
wbportfolio/viewsets/orders/configs/buttons/orders.py,sha256=GDO4Y33wkjhDxzpf7B1d_rKzAixegLv5rHam1DV3WkM,290
|
|
544
545
|
wbportfolio/viewsets/orders/configs/displays/__init__.py,sha256=__YJBbz_ZnKpE8WMMDR2PC9Nng-EVlRpGTEQucdrhRA,108
|
|
545
546
|
wbportfolio/viewsets/orders/configs/displays/order_proposals.py,sha256=Iy195FwD2KGxxNWYspAj7CKQ0assL_wtQx0hN7KMz9o,4985
|
|
@@ -554,7 +555,7 @@ wbportfolio/viewsets/transactions/claim.py,sha256=Pb1WftoO-w-ZSTbLRhmQubhy7hgd68
|
|
|
554
555
|
wbportfolio/viewsets/transactions/fees.py,sha256=WT2bWWfgozz4_rpyTKX7dgBBTXD-gu0nlsd2Nk2Zh1Q,7028
|
|
555
556
|
wbportfolio/viewsets/transactions/mixins.py,sha256=WipvJoi5hylkpD0y9VATe30WAcwIHUIroVkK10FYw7k,636
|
|
556
557
|
wbportfolio/viewsets/transactions/trades.py,sha256=xBgOGaJ8aEg-2RxEJ4FDaBs4SGwuLasun3nhpis0WQY,12363
|
|
557
|
-
wbportfolio-1.54.
|
|
558
|
-
wbportfolio-1.54.
|
|
559
|
-
wbportfolio-1.54.
|
|
560
|
-
wbportfolio-1.54.
|
|
558
|
+
wbportfolio-1.54.23.dist-info/METADATA,sha256=T5JCRTfsyGdh4UnE0qS0YtJHigKneYf8D7-5mT_ixLw,752
|
|
559
|
+
wbportfolio-1.54.23.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
|
|
560
|
+
wbportfolio-1.54.23.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
|
|
561
|
+
wbportfolio-1.54.23.dist-info/RECORD,,
|
wbportfolio/viewsets/signals.py
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
from django.apps import apps
|
|
2
|
-
from django.contrib.contenttypes.models import ContentType
|
|
3
|
-
from django.db.models import Q
|
|
4
|
-
from django.dispatch import receiver
|
|
5
|
-
from rest_framework.reverse import reverse
|
|
6
|
-
from wbcore.contrib.icons import WBIcon
|
|
7
|
-
from wbcore.metadata.configs import buttons as bt
|
|
8
|
-
from wbcore.signals.instance_buttons import add_instance_button
|
|
9
|
-
|
|
10
|
-
from wbportfolio.viewsets.products import ProductModelViewSet
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
@receiver(add_instance_button, sender=ProductModelViewSet)
|
|
14
|
-
def add_report_buttons(sender, many, *args, request=None, **kwargs):
|
|
15
|
-
report_buttons = []
|
|
16
|
-
try:
|
|
17
|
-
if instrument_id := kwargs.get("pk", None):
|
|
18
|
-
content_type_product = ContentType.objects.get(app_label="wbportfolio", model="product")
|
|
19
|
-
content_type_instrument = ContentType.objects.get(app_label="wbfdm", model="instrument")
|
|
20
|
-
Report = apps.get_model("wbreport", "Report")
|
|
21
|
-
for report in Report.objects.filter(object_id=instrument_id, is_active=True).filter(
|
|
22
|
-
Q(content_type=content_type_product) | Q(content_type=content_type_instrument)
|
|
23
|
-
):
|
|
24
|
-
if primary_version := report.primary_version:
|
|
25
|
-
report_buttons.append(
|
|
26
|
-
bt.HyperlinkButton(
|
|
27
|
-
label=f"{report.title} Report",
|
|
28
|
-
endpoint=reverse(
|
|
29
|
-
"public_report:report_version", args=[primary_version.lookup], request=request
|
|
30
|
-
),
|
|
31
|
-
),
|
|
32
|
-
)
|
|
33
|
-
if request.user.profile.is_internal or request.user.is_superuser:
|
|
34
|
-
report_buttons.append(
|
|
35
|
-
bt.HyperlinkButton(
|
|
36
|
-
label=f"{report.title} Widget",
|
|
37
|
-
endpoint=reverse("wbreport:report-detail", args=[report.id], request=request),
|
|
38
|
-
),
|
|
39
|
-
)
|
|
40
|
-
except LookupError:
|
|
41
|
-
pass
|
|
42
|
-
if report_buttons:
|
|
43
|
-
return bt.DropDownButton(label="Reports", buttons=tuple(report_buttons), icon=WBIcon.NOTEBOOK.icon)
|
|
File without changes
|
|
File without changes
|