wbportfolio 1.54.13__py2.py3-none-any.whl → 1.54.14__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.

@@ -97,7 +97,7 @@ def get_returns(
97
97
  if df.empty:
98
98
  raise InvalidAnalyticPortfolio()
99
99
  df = (
100
- df.pivot_table(index="valuation_date", columns="instrument_id", values=["fx_rate", "close"])
100
+ df.pivot_table(index="valuation_date", columns="instrument_id", values=["fx_rate", "close"], dropna=False)
101
101
  .astype(float)
102
102
  .sort_index()
103
103
  )
@@ -695,7 +695,7 @@ class TradeProposal(CloneMixin, RiskCheckMixin, WBModel):
695
695
  **kwargs,
696
696
  )
697
697
  if replay and self.portfolio.is_manageable:
698
- replay_as_task.delay(self.id, user_id=by.id if by else None)
698
+ replay_as_task.delay(self.id, user_id=by.id if by else None, broadcast_changes_at_date=False)
699
699
  return warnings
700
700
 
701
701
  def can_approve(self):
@@ -845,9 +845,9 @@ def post_fail_trade_proposal(sender, instance: TradeProposal, created, raw, **kw
845
845
 
846
846
 
847
847
  @shared_task(queue="portfolio")
848
- def replay_as_task(trade_proposal_id, user_id: int | None = None):
848
+ def replay_as_task(trade_proposal_id, user_id: int | None = None, **kwargs):
849
849
  trade_proposal = TradeProposal.objects.get(id=trade_proposal_id)
850
- trade_proposal.replay()
850
+ trade_proposal.replay(**kwargs)
851
851
  if user_id:
852
852
  user = User.objects.get(id=user_id)
853
853
  send_notification(
@@ -35,7 +35,8 @@ class TradeProposalButtonConfig(ButtonViewConfig):
35
35
  icon=WBIcon.REGENERATE.icon,
36
36
  label="Reset Trades",
37
37
  description_fields="""
38
- <p>Delete and recreate initial trades to from its associated model portfolio</p>
38
+ <p><strong>Warning:</strong> This action will delete all current trades and recreate initial trades 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>
39
40
  """,
40
41
  action_label="Reset Trades",
41
42
  title="Reset Trades",
@@ -99,6 +99,7 @@ class TradeProposalModelViewSet(CloneMixin, RiskCheckViewSetMixin, InternalUserP
99
99
  def reset(self, request, pk=None):
100
100
  trade_proposal = get_object_or_404(TradeProposal, pk=pk)
101
101
  if trade_proposal.status == TradeProposal.Status.DRAFT:
102
+ trade_proposal.trades.all().update(weighting=0)
102
103
  trade_proposal.reset_trades()
103
104
  return Response({"send": True})
104
105
  return Response({"status": "Trade proposal is not Draft"}, status=status.HTTP_400_BAD_REQUEST)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wbportfolio
3
- Version: 1.54.13
3
+ Version: 1.54.14
4
4
  Author-email: Christopher Wittlinger <c.wittlinger@stainly.com>
5
5
  License-File: LICENSE
6
6
  Requires-Dist: cryptography==3.4.*
@@ -258,7 +258,7 @@ wbportfolio/models/asset.py,sha256=b0vPt4LwNrxcMiK7UmBKViYnbNNlZzPTagvU5vFuyrc,4
258
258
  wbportfolio/models/custodians.py,sha256=owTiS2Vm5CRKzh9M_P9GOVg-s-ndQ9UvRmw3yZP7cw0,3815
259
259
  wbportfolio/models/exceptions.py,sha256=3ix0tWUO-O6jpz8f07XIwycw2x3JFRoWzjwil8FVA2Q,52
260
260
  wbportfolio/models/indexes.py,sha256=gvW4K9U9Bj8BmVCqFYdWiXvDWhjHINRON8XhNsZUiQY,639
261
- wbportfolio/models/portfolio.py,sha256=5CddquPvVp-ImPlteNMqwDeY_mCFwdWMy7ynMRDDxak,58578
261
+ wbportfolio/models/portfolio.py,sha256=7obqQAd2_COwTABtkp43muMlDA77NX16bq4J0oib1AI,58592
262
262
  wbportfolio/models/portfolio_cash_flow.py,sha256=uElG7IJUBY8qvtrXftOoskX6EA-dKgEG1JJdvHeWV7g,7336
263
263
  wbportfolio/models/portfolio_cash_targets.py,sha256=WmgG-etPisZsh2yaFQpz7EkpvAudKBEzqPsO715w52U,1498
264
264
  wbportfolio/models/portfolio_relationship.py,sha256=ZGECiPZiLdlk4uSamOrEfuzO0hduK6OMKJLUSnh5_kc,5190
@@ -285,7 +285,7 @@ wbportfolio/models/transactions/claim.py,sha256=SF2FlwG6SRVmA_hT0NbXah5-fYejccWK
285
285
  wbportfolio/models/transactions/dividends.py,sha256=mmOdGWR35yndUMoCuG24Y6BdtxDhSk2gMQ-8LVguqzg,1890
286
286
  wbportfolio/models/transactions/fees.py,sha256=wJtlzbBCAq1UHvv0wqWTE2BEjCF5RMtoaSDS3kODFRo,7112
287
287
  wbportfolio/models/transactions/rebalancing.py,sha256=rwePcmTZOYgfSWnBQcBrZ3DQHRJ3w17hdO_hgrRbbhI,7696
288
- wbportfolio/models/transactions/trade_proposals.py,sha256=1xOxHVOUwgTKCcY7mN4u5SoFtdJrQkNg6xA3O2-f4Yw,38340
288
+ wbportfolio/models/transactions/trade_proposals.py,sha256=SniW7jU74FUuZQLsA6i6MGu6vM1qj4IPZvWFDpFOQc0,38391
289
289
  wbportfolio/models/transactions/trades.py,sha256=1gmAdavuWu1Iko90s9prMxsK_NuDKIUBIKMDuHiKzow,34176
290
290
  wbportfolio/models/transactions/transactions.py,sha256=XTcUeMUfkf5XTSZaR2UAyGqCVkOhQYk03_vzHLIgf8Q,3807
291
291
  wbportfolio/pms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -440,7 +440,7 @@ wbportfolio/viewsets/configs/buttons/products.py,sha256=bHOs2ftfaLbIbJ7E8yFqQqSu
440
440
  wbportfolio/viewsets/configs/buttons/reconciliations.py,sha256=lw4r22GHpqKPUF1MrB6P9dOkL-FHe5iiBJ0--f8D74E,3145
441
441
  wbportfolio/viewsets/configs/buttons/registers.py,sha256=aS89TsYHql83k-NHojOrLDqtBpnpsUUO8x63PiMfrXM,445
442
442
  wbportfolio/viewsets/configs/buttons/signals.py,sha256=6sKBQI_eDvZuZR5bUUwvur5R67A3oChAGxPfayWUelE,2739
443
- wbportfolio/viewsets/configs/buttons/trade_proposals.py,sha256=Os5jT-aL0jMNkdm2sJpGRZvY4OzreR6Ah7eHex_6zB4,3383
443
+ wbportfolio/viewsets/configs/buttons/trade_proposals.py,sha256=K9anDc6am0YOyr1zQo2DxVMbddFOjEJXUS6g8-aPZrc,3584
444
444
  wbportfolio/viewsets/configs/buttons/trades.py,sha256=bPOqqwdgadSUbU9l5aSirqr5UAMFe2AiFNsXLRsKwn8,2535
445
445
  wbportfolio/viewsets/configs/display/__init__.py,sha256=jJqSCCAfw_vjbcsIkzKr39LdAZA810LUBfSH1EA7MAI,2086
446
446
  wbportfolio/viewsets/configs/display/adjustments.py,sha256=jIOEc23OCYBguLaZRlZxC916kocYT35ZV9Jsiocs9nk,3334
@@ -521,9 +521,9 @@ wbportfolio/viewsets/transactions/claim.py,sha256=Pb1WftoO-w-ZSTbLRhmQubhy7hgd68
521
521
  wbportfolio/viewsets/transactions/fees.py,sha256=WT2bWWfgozz4_rpyTKX7dgBBTXD-gu0nlsd2Nk2Zh1Q,7028
522
522
  wbportfolio/viewsets/transactions/mixins.py,sha256=WipvJoi5hylkpD0y9VATe30WAcwIHUIroVkK10FYw7k,636
523
523
  wbportfolio/viewsets/transactions/rebalancing.py,sha256=6rIrdK0rtKL1afJ-tYfAGdQVTN2MH1kG_yCeVkmyK8k,1263
524
- wbportfolio/viewsets/transactions/trade_proposals.py,sha256=kQCojTNKBEyn2NcenL3a9auzBH4sIgLEx8rLAYCGLGg,6161
524
+ wbportfolio/viewsets/transactions/trade_proposals.py,sha256=7A_4JpwSYLj341_bv5TPBpIDri9sAfqhB7mVmJa9V7Q,6221
525
525
  wbportfolio/viewsets/transactions/trades.py,sha256=Y8v2cM0vpspHysaAvu8qqhzt86dNtb2Q3puo4HCJsTI,22629
526
- wbportfolio-1.54.13.dist-info/METADATA,sha256=_ndN0PmfKx6Ro3nobejfixoQ24CM1gUlhn8OkG_vsX4,703
527
- wbportfolio-1.54.13.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
528
- wbportfolio-1.54.13.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
529
- wbportfolio-1.54.13.dist-info/RECORD,,
526
+ wbportfolio-1.54.14.dist-info/METADATA,sha256=LioS7E1a2gSkTPYpGaxcjiRZVbaAnX1S8uvq-Gr4RFE,703
527
+ wbportfolio-1.54.14.dist-info/WHEEL,sha256=tkmg4JIqwd9H8mL30xA7crRmoStyCtGp0VWshokd1Jc,105
528
+ wbportfolio-1.54.14.dist-info/licenses/LICENSE,sha256=jvfVH0SY8_YMHlsJHKe_OajiscQDz4lpTlqT6x24sVw,172
529
+ wbportfolio-1.54.14.dist-info/RECORD,,