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.

Files changed (34) hide show
  1. wbportfolio/constants.py +1 -0
  2. wbportfolio/factories/orders/orders.py +10 -2
  3. wbportfolio/filters/assets.py +10 -2
  4. wbportfolio/import_export/handlers/orders.py +1 -1
  5. wbportfolio/import_export/parsers/vontobel/valuation_api.py +4 -1
  6. wbportfolio/migrations/0086_orderproposal_total_cash_weight.py +19 -0
  7. wbportfolio/models/asset.py +6 -20
  8. wbportfolio/models/builder.py +11 -11
  9. wbportfolio/models/orders/order_proposals.py +53 -20
  10. wbportfolio/models/orders/orders.py +4 -1
  11. wbportfolio/models/portfolio.py +16 -8
  12. wbportfolio/models/products.py +9 -0
  13. wbportfolio/pms/trading/handler.py +0 -1
  14. wbportfolio/serializers/orders/order_proposals.py +2 -18
  15. wbportfolio/tests/conftest.py +6 -2
  16. wbportfolio/tests/models/orders/test_order_proposals.py +61 -15
  17. wbportfolio/tests/models/test_products.py +11 -0
  18. wbportfolio/tests/signals.py +0 -10
  19. wbportfolio/tests/tests.py +2 -0
  20. wbportfolio/viewsets/__init__.py +7 -4
  21. wbportfolio/viewsets/assets.py +1 -215
  22. wbportfolio/viewsets/charts/__init__.py +6 -1
  23. wbportfolio/viewsets/charts/assets.py +337 -154
  24. wbportfolio/viewsets/configs/buttons/products.py +32 -2
  25. wbportfolio/viewsets/configs/display/assets.py +6 -19
  26. wbportfolio/viewsets/configs/display/products.py +1 -1
  27. wbportfolio/viewsets/orders/configs/buttons/order_proposals.py +12 -2
  28. wbportfolio/viewsets/orders/order_proposals.py +2 -1
  29. wbportfolio/viewsets/positions.py +3 -2
  30. {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/METADATA +3 -1
  31. {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/RECORD +33 -32
  32. wbportfolio/viewsets/signals.py +0 -43
  33. {wbportfolio-1.54.21.dist-info → wbportfolio-1.54.23.dist-info}/WHEEL +0 -0
  34. {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> This action will delete all current orders and recreate initial orders based on your last effective portfolio.</p>
39
- <p><strong>Note:</strong> All delta weights will be permanently removed. This operation cannot be undone.</p>
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, InstrumentType
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
- underlying_instrument__instrument_type=InstrumentType.EQUITY,
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.21
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=NvpkehJAke6mRM8tK8aPupROxaKxgVgChs9J0jg8hXw,619
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=Tbci0xXuFzs2wCSMauhc-LsnB5LdmxcPVFk3AavM5z8,18158
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=5EWm2ocqzc2PBzZRawGIMybkHH7ySjQyHDuGsGBqjIQ,3132
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=WLkZ5z-WqhFraNorWlOhIpSx1pQ2fnjdsLHwSTA7O2o,882
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=PwL16w2Rw_rJL73e0vCWMlRqsCxKW4zA9bf1EgTzD60,39574
271
- wbportfolio/models/builder.py,sha256=n4__dW8L3hiM8U2_xhUPmR3Gt67pDI0vv5fejzoqah8,11536
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=XIRR2r0yDgE1zdZ5WZUeaas0ZdRGOm0Ps6bvkgg7fQc,53046
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=CkI7SBKWXgMkIcaGijZ-ghc_pPq075YjNgH-LWk1XCc,22845
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=nKzeHPcSQav4KkaUXUBWJVxd8ku3GmG5KQKyQ3cvIUM,40467
296
- wbportfolio/models/orders/orders.py,sha256=8vYyAV1S2ATVD3Ve_Cjtms_mj564yu5pvfK6wtqQx3A,9664
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=o31jtevfnSSv0aSzAsnthz2luM7F-D5d061LaqfOHUw,8542
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=MmL8noS2qqyKKXiYLLPRS4_Cz1RhlfdFwkCKZiqRyxQ,4461
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=oHv7tM89iMgLOvv5VDNwz73RklhhKSqCVzhDw-zPL28,4341
389
- wbportfolio/tests/signals.py,sha256=Ewsjwisy2lP1zDzYVGv2pAUl4WSuDbK3y5kPOtjktPI,5941
390
- wbportfolio/tests/tests.py,sha256=LSitKCl87mPmHUtW75dVuttGeD_umLwyN_OP_GNqvUU,1033
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=IcBzw9hrGiWFMRwPBTMukCMWrhqnjOVA2hhb90xYOW8,9580
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=T0vo7D65E0Cyqhwq3QK_Fd6RlCzCJRZSbA0PSZft0k4,31316
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=1U1r0TNTUBsDyrZ8k9GbdG0SF0_O1RyORN9AaHJT71o,2436
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=Pk565r7FOuJw7YsGg9L5SAWJqlg1lQpcjWQjnMYeH4Q,25259
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=2rzFHB_SI09rXC_EYi58G_eqvzONbk8z61JDkkjt3Ew,13207
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/signals.py,sha256=URxNz-7tKNBgvaFIE3FItfao3Md0dKQN_eVFwxxiErk,2125
449
- wbportfolio/viewsets/charts/__init__.py,sha256=mNSpDrsqK-afRxGBfEsfgupUc20xU-JW08FpxIyudok,71
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=bHOs2ftfaLbIbJ7E8yFqQqSuXCIYD6w3f3peireAUyk,1839
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=SkWwzvrn4gOVbCThGJMV63V-iJh517qfUs4f4Wt3dBA,10573
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=WraPeMIS87Vd3wstA4Vt3zi41vgLUxK5eoqCIQLyr8k,10679
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=mw385zzU52nCq8p6xgionh43xLmOn5aX-2BPlCHnqlE,6214
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=Q_7LrsuLzjSXCIoscFQXMMHl8cuCporDNM5k735W7d8,3584
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.21.dist-info/METADATA,sha256=5NHNRB4-w5pyBzzP936g_zkFz86kNs3OXQBj7qBTNa8,703
558
- wbportfolio-1.54.21.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
559
- wbportfolio-1.54.21.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
560
- wbportfolio-1.54.21.dist-info/RECORD,,
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,,
@@ -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)