wbportfolio 2.2.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 wbportfolio might be problematic. Click here for more details.
- wbportfolio/__init__.py +1 -0
- wbportfolio/admin/__init__.py +12 -0
- wbportfolio/admin/asset.py +47 -0
- wbportfolio/admin/custodians.py +9 -0
- wbportfolio/admin/portfolio.py +127 -0
- wbportfolio/admin/portfolio_relationships.py +22 -0
- wbportfolio/admin/product_groups.py +42 -0
- wbportfolio/admin/products.py +80 -0
- wbportfolio/admin/reconciliations.py +14 -0
- wbportfolio/admin/registers.py +17 -0
- wbportfolio/admin/roles.py +19 -0
- wbportfolio/admin/synchronization/__init__.py +2 -0
- wbportfolio/admin/synchronization/admin.py +114 -0
- wbportfolio/admin/synchronization/portfolio_synchronization.py +18 -0
- wbportfolio/admin/synchronization/price_computation.py +21 -0
- wbportfolio/admin/transactions/__init__.py +5 -0
- wbportfolio/admin/transactions/claim.py +16 -0
- wbportfolio/admin/transactions/dividends.py +14 -0
- wbportfolio/admin/transactions/fees.py +35 -0
- wbportfolio/admin/transactions/trades.py +49 -0
- wbportfolio/admin/transactions/transactions.py +37 -0
- wbportfolio/analysis/__init__.py +0 -0
- wbportfolio/analysis/claims.py +235 -0
- wbportfolio/apps.py +5 -0
- wbportfolio/contrib/__init__.py +0 -0
- wbportfolio/contrib/company_portfolio/__init__.py +0 -0
- wbportfolio/contrib/company_portfolio/admin.py +28 -0
- wbportfolio/contrib/company_portfolio/apps.py +29 -0
- wbportfolio/contrib/company_portfolio/configs/__init__.py +3 -0
- wbportfolio/contrib/company_portfolio/configs/display.py +182 -0
- wbportfolio/contrib/company_portfolio/configs/endpoints.py +34 -0
- wbportfolio/contrib/company_portfolio/configs/previews.py +37 -0
- wbportfolio/contrib/company_portfolio/constants.py +1 -0
- wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py +87 -0
- wbportfolio/contrib/company_portfolio/factories.py +32 -0
- wbportfolio/contrib/company_portfolio/filters.py +127 -0
- wbportfolio/contrib/company_portfolio/management.py +19 -0
- wbportfolio/contrib/company_portfolio/migrations/0001_initial.py +214 -0
- wbportfolio/contrib/company_portfolio/migrations/__init__.py +0 -0
- wbportfolio/contrib/company_portfolio/models.py +334 -0
- wbportfolio/contrib/company_portfolio/scripts.py +76 -0
- wbportfolio/contrib/company_portfolio/serializers.py +303 -0
- wbportfolio/contrib/company_portfolio/tasks.py +19 -0
- wbportfolio/contrib/company_portfolio/tests/__init__.py +0 -0
- wbportfolio/contrib/company_portfolio/tests/conftest.py +161 -0
- wbportfolio/contrib/company_portfolio/tests/test_models.py +161 -0
- wbportfolio/contrib/company_portfolio/urls.py +29 -0
- wbportfolio/contrib/company_portfolio/viewsets.py +195 -0
- wbportfolio/defaults/__init__.py +0 -0
- wbportfolio/defaults/fees/__init__.py +0 -0
- wbportfolio/defaults/fees/default.py +92 -0
- wbportfolio/defaults/portfolio/__init__.py +0 -0
- wbportfolio/defaults/portfolio/default_rebalancing.py +45 -0
- wbportfolio/dynamic_preferences_registry.py +58 -0
- wbportfolio/factories/__init__.py +35 -0
- wbportfolio/factories/adjustments.py +17 -0
- wbportfolio/factories/assets.py +75 -0
- wbportfolio/factories/claim.py +39 -0
- wbportfolio/factories/custodians.py +11 -0
- wbportfolio/factories/dividends.py +14 -0
- wbportfolio/factories/fees.py +15 -0
- wbportfolio/factories/indexes.py +17 -0
- wbportfolio/factories/portfolio_cash_flow.py +20 -0
- wbportfolio/factories/portfolio_cash_targets.py +15 -0
- wbportfolio/factories/portfolio_swing_pricings.py +15 -0
- wbportfolio/factories/portfolios.py +59 -0
- wbportfolio/factories/product_groups.py +28 -0
- wbportfolio/factories/products.py +56 -0
- wbportfolio/factories/pytest_utils.py +121 -0
- wbportfolio/factories/reconciliations.py +23 -0
- wbportfolio/factories/roles.py +20 -0
- wbportfolio/factories/synchronization.py +40 -0
- wbportfolio/factories/trades.py +35 -0
- wbportfolio/factories/transactions.py +21 -0
- wbportfolio/fdm/__init__.py +0 -0
- wbportfolio/fdm/tasks.py +12 -0
- wbportfolio/filters/__init__.py +32 -0
- wbportfolio/filters/assets.py +485 -0
- wbportfolio/filters/assets_and_net_new_money_progression.py +42 -0
- wbportfolio/filters/custodians.py +10 -0
- wbportfolio/filters/esg.py +22 -0
- wbportfolio/filters/performances.py +171 -0
- wbportfolio/filters/portfolios.py +24 -0
- wbportfolio/filters/positions.py +178 -0
- wbportfolio/filters/products.py +157 -0
- wbportfolio/filters/roles.py +26 -0
- wbportfolio/filters/signals.py +92 -0
- wbportfolio/filters/transactions/__init__.py +20 -0
- wbportfolio/filters/transactions/claim.py +394 -0
- wbportfolio/filters/transactions/fees.py +66 -0
- wbportfolio/filters/transactions/trades.py +224 -0
- wbportfolio/filters/transactions/transactions.py +98 -0
- wbportfolio/import_export/__init__.py +0 -0
- wbportfolio/import_export/backends/__init__.py +2 -0
- wbportfolio/import_export/backends/ubs/__init__.py +3 -0
- wbportfolio/import_export/backends/ubs/asset_position.py +45 -0
- wbportfolio/import_export/backends/ubs/fees.py +63 -0
- wbportfolio/import_export/backends/ubs/instrument_price.py +44 -0
- wbportfolio/import_export/backends/ubs/mixin.py +15 -0
- wbportfolio/import_export/backends/utils.py +58 -0
- wbportfolio/import_export/backends/wbfdm/__init__.py +2 -0
- wbportfolio/import_export/backends/wbfdm/adjustment.py +50 -0
- wbportfolio/import_export/backends/wbfdm/dividend.py +16 -0
- wbportfolio/import_export/backends/wbfdm/mixin.py +15 -0
- wbportfolio/import_export/handlers/__init__.py +0 -0
- wbportfolio/import_export/handlers/adjustment.py +39 -0
- wbportfolio/import_export/handlers/asset_position.py +167 -0
- wbportfolio/import_export/handlers/dividend.py +80 -0
- wbportfolio/import_export/handlers/fees.py +58 -0
- wbportfolio/import_export/handlers/portfolio_cash_flow.py +57 -0
- wbportfolio/import_export/handlers/register.py +43 -0
- wbportfolio/import_export/handlers/trade.py +191 -0
- wbportfolio/import_export/parsers/__init__.py +0 -0
- wbportfolio/import_export/parsers/default_mapping.py +30 -0
- wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
- wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +63 -0
- wbportfolio/import_export/parsers/jpmorgan/fees.py +64 -0
- wbportfolio/import_export/parsers/jpmorgan/strategy.py +116 -0
- wbportfolio/import_export/parsers/jpmorgan/valuation.py +41 -0
- wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
- wbportfolio/import_export/parsers/leonteq/customer_trade.py +47 -0
- wbportfolio/import_export/parsers/leonteq/equity.py +81 -0
- wbportfolio/import_export/parsers/leonteq/fees.py +70 -0
- wbportfolio/import_export/parsers/leonteq/trade.py +94 -0
- wbportfolio/import_export/parsers/leonteq/valuation.py +39 -0
- wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
- wbportfolio/import_export/parsers/natixis/customer_trade.py +62 -0
- wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +66 -0
- wbportfolio/import_export/parsers/natixis/d1_equity.py +80 -0
- wbportfolio/import_export/parsers/natixis/d1_fees.py +58 -0
- wbportfolio/import_export/parsers/natixis/d1_trade.py +70 -0
- wbportfolio/import_export/parsers/natixis/d1_valuation.py +41 -0
- wbportfolio/import_export/parsers/natixis/dividend.py +53 -0
- wbportfolio/import_export/parsers/natixis/equity.py +60 -0
- wbportfolio/import_export/parsers/natixis/fees.py +53 -0
- wbportfolio/import_export/parsers/natixis/trade.py +63 -0
- wbportfolio/import_export/parsers/natixis/utils.py +76 -0
- wbportfolio/import_export/parsers/natixis/valuation.py +46 -0
- wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
- wbportfolio/import_export/parsers/refinitiv/adjustment.py +24 -0
- wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
- wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +70 -0
- wbportfolio/import_export/parsers/sg_lux/customer_trade.py +75 -0
- wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +140 -0
- wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +80 -0
- wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +57 -0
- wbportfolio/import_export/parsers/sg_lux/equity.py +137 -0
- wbportfolio/import_export/parsers/sg_lux/fees.py +56 -0
- wbportfolio/import_export/parsers/sg_lux/perf_fees.py +51 -0
- wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +29 -0
- wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +36 -0
- wbportfolio/import_export/parsers/sg_lux/registers.py +210 -0
- wbportfolio/import_export/parsers/sg_lux/sylk.py +248 -0
- wbportfolio/import_export/parsers/sg_lux/utils.py +36 -0
- wbportfolio/import_export/parsers/sg_lux/valuation.py +53 -0
- wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
- wbportfolio/import_export/parsers/societe_generale/customer_trade.py +54 -0
- wbportfolio/import_export/parsers/societe_generale/strategy.py +94 -0
- wbportfolio/import_export/parsers/societe_generale/valuation.py +37 -0
- wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
- wbportfolio/import_export/parsers/tellco/customer_trade.py +64 -0
- wbportfolio/import_export/parsers/tellco/equity.py +86 -0
- wbportfolio/import_export/parsers/tellco/valuation.py +52 -0
- wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
- wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
- wbportfolio/import_export/parsers/ubs/api/asset_position.py +106 -0
- wbportfolio/import_export/parsers/ubs/api/fees.py +31 -0
- wbportfolio/import_export/parsers/ubs/api/instrument_price.py +20 -0
- wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
- wbportfolio/import_export/parsers/ubs/customer_trade.py +60 -0
- wbportfolio/import_export/parsers/ubs/equity.py +97 -0
- wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +67 -0
- wbportfolio/import_export/parsers/ubs/valuation.py +52 -0
- wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
- wbportfolio/import_export/parsers/vontobel/asset_position.py +97 -0
- wbportfolio/import_export/parsers/vontobel/customer_trade.py +54 -0
- wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +40 -0
- wbportfolio/import_export/parsers/vontobel/instrument.py +34 -0
- wbportfolio/import_export/parsers/vontobel/management_fees.py +86 -0
- wbportfolio/import_export/parsers/vontobel/performance_fees.py +35 -0
- wbportfolio/import_export/parsers/vontobel/trade.py +38 -0
- wbportfolio/import_export/parsers/vontobel/utils.py +17 -0
- wbportfolio/import_export/parsers/vontobel/valuation.py +29 -0
- wbportfolio/import_export/resources/__init__.py +0 -0
- wbportfolio/import_export/resources/assets.py +68 -0
- wbportfolio/import_export/resources/trades.py +41 -0
- wbportfolio/import_export/utils.py +42 -0
- wbportfolio/metric/__init__.py +0 -0
- wbportfolio/metric/backends/__init__.py +2 -0
- wbportfolio/metric/backends/base.py +86 -0
- wbportfolio/metric/backends/constants.py +222 -0
- wbportfolio/metric/backends/portfolio_base.py +255 -0
- wbportfolio/metric/backends/portfolio_esg.py +66 -0
- wbportfolio/metric/tests/__init__.py +0 -0
- wbportfolio/metric/tests/conftest.py +4 -0
- wbportfolio/metric/tests/test_portfolio_base.py +135 -0
- wbportfolio/metric/tests/test_portfolio_esg.py +69 -0
- wbportfolio/migrations/0001_initial_squashed.py +13848 -0
- wbportfolio/migrations/0002_product_default_sub_account_squashed_0039_alter_assetallocation_company_and_more.py +3836 -0
- wbportfolio/migrations/0040_instrument_financial_instrument.py +26 -0
- wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +129 -0
- wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +71 -0
- wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +238 -0
- wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +35 -0
- wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +26 -0
- wbportfolio/migrations/0046_add_product_default_account.py +166 -0
- wbportfolio/migrations/0047_remove_product_default_sub_account.py +14 -0
- wbportfolio/migrations/0048_alter_trade_status.py +29 -0
- wbportfolio/migrations/0049_trade_claimed_shares.py +25 -0
- wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +44 -0
- wbportfolio/migrations/0051_delete_macroreview.py +11 -0
- wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +888 -0
- wbportfolio/migrations/0053_remove_product_group.py +132 -0
- wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +270 -0
- wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +139 -0
- wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +56 -0
- wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +36 -0
- wbportfolio/migrations/0058_pmsinstrument.py +23 -0
- wbportfolio/migrations/0059_fees_unique_fees.py +51 -0
- wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +21 -0
- wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +175 -0
- wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +20 -0
- wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +133 -0
- wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +40 -0
- wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +73 -0
- wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +108 -0
- wbportfolio/migrations/0067_assetposition_unique_asset_position.py +77 -0
- wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +59 -0
- wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +56 -0
- wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +82 -0
- wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +22 -0
- wbportfolio/migrations/__init__.py +0 -0
- wbportfolio/models/__init__.py +26 -0
- wbportfolio/models/adjustments.py +246 -0
- wbportfolio/models/asset.py +869 -0
- wbportfolio/models/custodians.py +101 -0
- wbportfolio/models/indexes.py +33 -0
- wbportfolio/models/mixins/__init__.py +0 -0
- wbportfolio/models/mixins/instruments.py +127 -0
- wbportfolio/models/mixins/liquidity_stress_test.py +1307 -0
- wbportfolio/models/portfolio.py +1039 -0
- wbportfolio/models/portfolio_cash_flow.py +167 -0
- wbportfolio/models/portfolio_cash_targets.py +46 -0
- wbportfolio/models/portfolio_relationship.py +135 -0
- wbportfolio/models/portfolio_swing_pricings.py +51 -0
- wbportfolio/models/product_groups.py +230 -0
- wbportfolio/models/products.py +569 -0
- wbportfolio/models/reconciliations/__init__.py +2 -0
- wbportfolio/models/reconciliations/account_reconciliation_lines.py +192 -0
- wbportfolio/models/reconciliations/account_reconciliations.py +102 -0
- wbportfolio/models/reconciliations/reconciliations.py +25 -0
- wbportfolio/models/registers.py +132 -0
- wbportfolio/models/roles.py +208 -0
- wbportfolio/models/synchronization/__init__.py +3 -0
- wbportfolio/models/synchronization/portfolio_synchronization.py +292 -0
- wbportfolio/models/synchronization/price_computation.py +200 -0
- wbportfolio/models/synchronization/synchronization.py +188 -0
- wbportfolio/models/transactions/__init__.py +7 -0
- wbportfolio/models/transactions/claim.py +634 -0
- wbportfolio/models/transactions/dividends.py +31 -0
- wbportfolio/models/transactions/expiry.py +7 -0
- wbportfolio/models/transactions/fees.py +153 -0
- wbportfolio/models/transactions/trade_proposals.py +502 -0
- wbportfolio/models/transactions/trades.py +704 -0
- wbportfolio/models/transactions/transactions.py +211 -0
- wbportfolio/models/utils.py +12 -0
- wbportfolio/permissions.py +13 -0
- wbportfolio/pms/__init__.py +0 -0
- wbportfolio/pms/statistics/__init__.py +0 -0
- wbportfolio/pms/trading/__init__.py +1 -0
- wbportfolio/pms/trading/handler.py +164 -0
- wbportfolio/pms/typing.py +194 -0
- wbportfolio/preferences.py +6 -0
- wbportfolio/reports/__init__.py +0 -0
- wbportfolio/reports/monthly_position_report.py +74 -0
- wbportfolio/risk_management/__init__.py +0 -0
- wbportfolio/risk_management/backends/__init__.py +11 -0
- wbportfolio/risk_management/backends/accounts.py +166 -0
- wbportfolio/risk_management/backends/controversy_portfolio.py +63 -0
- wbportfolio/risk_management/backends/exposure_portfolio.py +203 -0
- wbportfolio/risk_management/backends/instrument_list_portfolio.py +89 -0
- wbportfolio/risk_management/backends/liquidity_risk.py +86 -0
- wbportfolio/risk_management/backends/liquidity_stress_instrument.py +86 -0
- wbportfolio/risk_management/backends/mixins.py +220 -0
- wbportfolio/risk_management/backends/product_integrity.py +111 -0
- wbportfolio/risk_management/backends/stop_loss_instrument.py +24 -0
- wbportfolio/risk_management/backends/stop_loss_portfolio.py +36 -0
- wbportfolio/risk_management/backends/ucits_portfolio.py +63 -0
- wbportfolio/risk_management/tests/__init__.py +0 -0
- wbportfolio/risk_management/tests/conftest.py +15 -0
- wbportfolio/risk_management/tests/test_accounts.py +98 -0
- wbportfolio/risk_management/tests/test_controversy_portfolio.py +33 -0
- wbportfolio/risk_management/tests/test_exposure_portfolio.py +94 -0
- wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +60 -0
- wbportfolio/risk_management/tests/test_liquidity_risk.py +47 -0
- wbportfolio/risk_management/tests/test_product_integrity.py +55 -0
- wbportfolio/risk_management/tests/test_stop_loss_instrument.py +110 -0
- wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +119 -0
- wbportfolio/risk_management/tests/test_ucits_portfolio.py +39 -0
- wbportfolio/serializers/__init__.py +42 -0
- wbportfolio/serializers/adjustments.py +24 -0
- wbportfolio/serializers/assets.py +166 -0
- wbportfolio/serializers/custodians.py +26 -0
- wbportfolio/serializers/portfolio_cash_flow.py +48 -0
- wbportfolio/serializers/portfolio_cash_targets.py +20 -0
- wbportfolio/serializers/portfolio_relationship.py +53 -0
- wbportfolio/serializers/portfolio_swing_pricing.py +20 -0
- wbportfolio/serializers/portfolios.py +143 -0
- wbportfolio/serializers/positions.py +76 -0
- wbportfolio/serializers/product_group.py +88 -0
- wbportfolio/serializers/products.py +331 -0
- wbportfolio/serializers/reconciliations.py +171 -0
- wbportfolio/serializers/registers.py +72 -0
- wbportfolio/serializers/roles.py +60 -0
- wbportfolio/serializers/signals.py +157 -0
- wbportfolio/serializers/synchronization.py +18 -0
- wbportfolio/serializers/transactions/__init__.py +24 -0
- wbportfolio/serializers/transactions/claim.py +310 -0
- wbportfolio/serializers/transactions/dividends.py +18 -0
- wbportfolio/serializers/transactions/expiry.py +18 -0
- wbportfolio/serializers/transactions/fees.py +32 -0
- wbportfolio/serializers/transactions/trades.py +315 -0
- wbportfolio/serializers/transactions/transactions.py +84 -0
- wbportfolio/tasks.py +125 -0
- wbportfolio/tests/__init__.py +0 -0
- wbportfolio/tests/conftest.py +164 -0
- wbportfolio/tests/models/__init__.py +0 -0
- wbportfolio/tests/models/test_account_reconciliation.py +191 -0
- wbportfolio/tests/models/test_assets.py +193 -0
- wbportfolio/tests/models/test_custodians.py +12 -0
- wbportfolio/tests/models/test_customer_trades.py +113 -0
- wbportfolio/tests/models/test_dividends.py +7 -0
- wbportfolio/tests/models/test_imports.py +192 -0
- wbportfolio/tests/models/test_instrument_mixins.py +48 -0
- wbportfolio/tests/models/test_merge.py +133 -0
- wbportfolio/tests/models/test_portfolio_cash_flow.py +112 -0
- wbportfolio/tests/models/test_portfolio_cash_targets.py +27 -0
- wbportfolio/tests/models/test_portfolio_swing_pricings.py +42 -0
- wbportfolio/tests/models/test_portfolios.py +676 -0
- wbportfolio/tests/models/test_product_groups.py +80 -0
- wbportfolio/tests/models/test_products.py +187 -0
- wbportfolio/tests/models/test_roles.py +82 -0
- wbportfolio/tests/models/test_splits.py +233 -0
- wbportfolio/tests/models/test_synchronization.py +617 -0
- wbportfolio/tests/models/transactions/__init__.py +0 -0
- wbportfolio/tests/models/transactions/test_claim.py +129 -0
- wbportfolio/tests/models/transactions/test_fees.py +65 -0
- wbportfolio/tests/models/transactions/test_trades.py +204 -0
- wbportfolio/tests/models/utils.py +13 -0
- wbportfolio/tests/serializers/__init__.py +0 -0
- wbportfolio/tests/serializers/test_claims.py +21 -0
- wbportfolio/tests/signals.py +151 -0
- wbportfolio/tests/tests.py +31 -0
- wbportfolio/tests/viewsets/__init__.py +0 -0
- wbportfolio/tests/viewsets/test_assets.py +67 -0
- wbportfolio/tests/viewsets/test_performances.py +72 -0
- wbportfolio/tests/viewsets/test_products.py +92 -0
- wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
- wbportfolio/tests/viewsets/transactions/test_claims.py +146 -0
- wbportfolio/urls.py +247 -0
- wbportfolio/utils.py +30 -0
- wbportfolio/viewsets/__init__.py +57 -0
- wbportfolio/viewsets/adjustments.py +46 -0
- wbportfolio/viewsets/assets.py +562 -0
- wbportfolio/viewsets/assets_and_net_new_money_progression.py +117 -0
- wbportfolio/viewsets/charts/__init__.py +1 -0
- wbportfolio/viewsets/charts/assets.py +247 -0
- wbportfolio/viewsets/configs/__init__.py +6 -0
- wbportfolio/viewsets/configs/buttons/__init__.py +23 -0
- wbportfolio/viewsets/configs/buttons/adjustments.py +13 -0
- wbportfolio/viewsets/configs/buttons/assets.py +145 -0
- wbportfolio/viewsets/configs/buttons/claims.py +83 -0
- wbportfolio/viewsets/configs/buttons/custodians.py +76 -0
- wbportfolio/viewsets/configs/buttons/fees.py +14 -0
- wbportfolio/viewsets/configs/buttons/mixins.py +88 -0
- wbportfolio/viewsets/configs/buttons/portfolios.py +115 -0
- wbportfolio/viewsets/configs/buttons/products.py +41 -0
- wbportfolio/viewsets/configs/buttons/reconciliations.py +65 -0
- wbportfolio/viewsets/configs/buttons/registers.py +11 -0
- wbportfolio/viewsets/configs/buttons/signals.py +68 -0
- wbportfolio/viewsets/configs/buttons/trade_proposals.py +25 -0
- wbportfolio/viewsets/configs/buttons/trades.py +144 -0
- wbportfolio/viewsets/configs/display/__init__.py +61 -0
- wbportfolio/viewsets/configs/display/adjustments.py +81 -0
- wbportfolio/viewsets/configs/display/assets.py +265 -0
- wbportfolio/viewsets/configs/display/claim.py +299 -0
- wbportfolio/viewsets/configs/display/custodians.py +24 -0
- wbportfolio/viewsets/configs/display/esg.py +88 -0
- wbportfolio/viewsets/configs/display/fees.py +133 -0
- wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +103 -0
- wbportfolio/viewsets/configs/display/portfolio_relationship.py +38 -0
- wbportfolio/viewsets/configs/display/portfolios.py +125 -0
- wbportfolio/viewsets/configs/display/positions.py +75 -0
- wbportfolio/viewsets/configs/display/product_groups.py +54 -0
- wbportfolio/viewsets/configs/display/product_performance.py +241 -0
- wbportfolio/viewsets/configs/display/products.py +249 -0
- wbportfolio/viewsets/configs/display/reconciliations.py +151 -0
- wbportfolio/viewsets/configs/display/registers.py +71 -0
- wbportfolio/viewsets/configs/display/roles.py +49 -0
- wbportfolio/viewsets/configs/display/trade_proposals.py +97 -0
- wbportfolio/viewsets/configs/display/trades.py +359 -0
- wbportfolio/viewsets/configs/display/transactions.py +55 -0
- wbportfolio/viewsets/configs/endpoints/__init__.py +75 -0
- wbportfolio/viewsets/configs/endpoints/adjustments.py +17 -0
- wbportfolio/viewsets/configs/endpoints/assets.py +115 -0
- wbportfolio/viewsets/configs/endpoints/claim.py +106 -0
- wbportfolio/viewsets/configs/endpoints/custodians.py +6 -0
- wbportfolio/viewsets/configs/endpoints/esg.py +14 -0
- wbportfolio/viewsets/configs/endpoints/fees.py +26 -0
- wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +23 -0
- wbportfolio/viewsets/configs/endpoints/portfolios.py +43 -0
- wbportfolio/viewsets/configs/endpoints/positions.py +18 -0
- wbportfolio/viewsets/configs/endpoints/product_groups.py +11 -0
- wbportfolio/viewsets/configs/endpoints/product_performance.py +29 -0
- wbportfolio/viewsets/configs/endpoints/products.py +37 -0
- wbportfolio/viewsets/configs/endpoints/reconciliations.py +31 -0
- wbportfolio/viewsets/configs/endpoints/roles.py +9 -0
- wbportfolio/viewsets/configs/endpoints/trade_proposals.py +17 -0
- wbportfolio/viewsets/configs/endpoints/trades.py +82 -0
- wbportfolio/viewsets/configs/endpoints/transactions.py +17 -0
- wbportfolio/viewsets/configs/menu/__init__.py +30 -0
- wbportfolio/viewsets/configs/menu/adjustments.py +8 -0
- wbportfolio/viewsets/configs/menu/assets.py +8 -0
- wbportfolio/viewsets/configs/menu/claim.py +41 -0
- wbportfolio/viewsets/configs/menu/custodians.py +11 -0
- wbportfolio/viewsets/configs/menu/fees.py +13 -0
- wbportfolio/viewsets/configs/menu/instrument_prices.py +10 -0
- wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +8 -0
- wbportfolio/viewsets/configs/menu/portfolios.py +15 -0
- wbportfolio/viewsets/configs/menu/positions.py +14 -0
- wbportfolio/viewsets/configs/menu/product_groups.py +10 -0
- wbportfolio/viewsets/configs/menu/product_performance.py +25 -0
- wbportfolio/viewsets/configs/menu/products.py +15 -0
- wbportfolio/viewsets/configs/menu/reconciliations.py +7 -0
- wbportfolio/viewsets/configs/menu/registers.py +10 -0
- wbportfolio/viewsets/configs/menu/roles.py +16 -0
- wbportfolio/viewsets/configs/menu/trades.py +18 -0
- wbportfolio/viewsets/configs/menu/transactions.py +8 -0
- wbportfolio/viewsets/configs/previews/__init__.py +1 -0
- wbportfolio/viewsets/configs/previews/portfolios.py +21 -0
- wbportfolio/viewsets/configs/titles/__init__.py +65 -0
- wbportfolio/viewsets/configs/titles/adjustments.py +19 -0
- wbportfolio/viewsets/configs/titles/assets.py +57 -0
- wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +6 -0
- wbportfolio/viewsets/configs/titles/claim.py +81 -0
- wbportfolio/viewsets/configs/titles/custodians.py +12 -0
- wbportfolio/viewsets/configs/titles/esg.py +10 -0
- wbportfolio/viewsets/configs/titles/fees.py +25 -0
- wbportfolio/viewsets/configs/titles/instrument_prices.py +20 -0
- wbportfolio/viewsets/configs/titles/portfolios.py +32 -0
- wbportfolio/viewsets/configs/titles/positions.py +11 -0
- wbportfolio/viewsets/configs/titles/product_groups.py +12 -0
- wbportfolio/viewsets/configs/titles/product_performance.py +16 -0
- wbportfolio/viewsets/configs/titles/products.py +6 -0
- wbportfolio/viewsets/configs/titles/registers.py +12 -0
- wbportfolio/viewsets/configs/titles/roles.py +23 -0
- wbportfolio/viewsets/configs/titles/trades.py +51 -0
- wbportfolio/viewsets/configs/titles/transactions.py +8 -0
- wbportfolio/viewsets/custodians.py +66 -0
- wbportfolio/viewsets/esg.py +165 -0
- wbportfolio/viewsets/mixins.py +48 -0
- wbportfolio/viewsets/portfolio_cash_flow.py +31 -0
- wbportfolio/viewsets/portfolio_cash_targets.py +8 -0
- wbportfolio/viewsets/portfolio_relationship.py +46 -0
- wbportfolio/viewsets/portfolio_swing_pricing.py +8 -0
- wbportfolio/viewsets/portfolios.py +154 -0
- wbportfolio/viewsets/positions.py +292 -0
- wbportfolio/viewsets/product_groups.py +84 -0
- wbportfolio/viewsets/product_performance.py +646 -0
- wbportfolio/viewsets/products.py +529 -0
- wbportfolio/viewsets/reconciliations.py +160 -0
- wbportfolio/viewsets/registers.py +75 -0
- wbportfolio/viewsets/roles.py +44 -0
- wbportfolio/viewsets/signals.py +42 -0
- wbportfolio/viewsets/synchronization.py +25 -0
- wbportfolio/viewsets/transactions/__init__.py +40 -0
- wbportfolio/viewsets/transactions/claim.py +933 -0
- wbportfolio/viewsets/transactions/fees.py +190 -0
- wbportfolio/viewsets/transactions/mixins.py +19 -0
- wbportfolio/viewsets/transactions/trade_proposals.py +93 -0
- wbportfolio/viewsets/transactions/trades.py +395 -0
- wbportfolio/viewsets/transactions/transactions.py +123 -0
- wbportfolio-2.2.1.dist-info/METADATA +21 -0
- wbportfolio-2.2.1.dist-info/RECORD +486 -0
- wbportfolio-2.2.1.dist-info/WHEEL +5 -0
- wbportfolio-2.2.1.dist-info/licenses/LICENSE +4 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
PRODUCTGROUP_MENUITEM = MenuItem(
|
|
5
|
+
label="Product Groups",
|
|
6
|
+
endpoint="wbportfolio:product_group-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_productgroup"]
|
|
9
|
+
),
|
|
10
|
+
)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
PRODUCTPERFORMANCELIST_MENUITEM = MenuItem(
|
|
5
|
+
label="Performances",
|
|
6
|
+
endpoint="wbportfolio:productperformance-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_product"]
|
|
9
|
+
),
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
PRODUCTPERFORMANCECOMPARISONLIST_MENUITEM = MenuItem(
|
|
13
|
+
label="Performances Summary",
|
|
14
|
+
endpoint="wbportfolio:productperformancecomparison-list",
|
|
15
|
+
permission=ItemPermission(
|
|
16
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_product"]
|
|
17
|
+
),
|
|
18
|
+
)
|
|
19
|
+
PRODUCTPERFORMANCENNMLIST_MENUITEM = MenuItem(
|
|
20
|
+
label="Net new money",
|
|
21
|
+
endpoint="wbportfolio:productperformancennmlist-list",
|
|
22
|
+
permission=ItemPermission(
|
|
23
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_product"]
|
|
24
|
+
),
|
|
25
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
PRODUCTCUSTOMER_MENUITEM = MenuItem(
|
|
5
|
+
label="Product Lists",
|
|
6
|
+
endpoint="wbportfolio:productcustomer-list",
|
|
7
|
+
permission=ItemPermission(method=lambda request: not is_internal_user(request.user)),
|
|
8
|
+
)
|
|
9
|
+
PRODUCT_MENUITEM = MenuItem(
|
|
10
|
+
label="Products",
|
|
11
|
+
endpoint="wbportfolio:product-list",
|
|
12
|
+
permission=ItemPermission(
|
|
13
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_product"]
|
|
14
|
+
),
|
|
15
|
+
)
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
|
|
3
|
+
ACCOUNT_RECONCILIATION_MENU_ITEM = MenuItem(
|
|
4
|
+
label="Account Reconciliations",
|
|
5
|
+
endpoint="wbportfolio:accountreconciliation-list",
|
|
6
|
+
permission=ItemPermission(permissions=["wbportfolio.view_accountreconciliation"]),
|
|
7
|
+
)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
REGISTER_MENUITEM = MenuItem(
|
|
5
|
+
label="Registers",
|
|
6
|
+
endpoint="wbportfolio:register-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
permissions=["wbportfolio.view_register"], method=lambda request: is_internal_user(request.user)
|
|
9
|
+
),
|
|
10
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
from wbportfolio.permissions import is_manager
|
|
4
|
+
|
|
5
|
+
PORTFOLIOROLE_MENUITEM = MenuItem(
|
|
6
|
+
label="Portfolio Roles",
|
|
7
|
+
endpoint="wbportfolio:portfoliorole-list",
|
|
8
|
+
permission=ItemPermission(permissions=["wbportfolio.view_portfoliorole"], method=is_manager),
|
|
9
|
+
add=MenuItem(
|
|
10
|
+
label="Create Portfolio Role",
|
|
11
|
+
endpoint="wbportfolio:portfoliorole-list",
|
|
12
|
+
permission=ItemPermission(
|
|
13
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.add_portfoliorole"]
|
|
14
|
+
),
|
|
15
|
+
),
|
|
16
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
TRADE_MENUITEM = MenuItem(
|
|
5
|
+
label="Trades",
|
|
6
|
+
endpoint="wbportfolio:trade-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
permissions=["wbportfolio.view_trade"], method=lambda request: is_internal_user(request.user)
|
|
9
|
+
),
|
|
10
|
+
)
|
|
11
|
+
SUBSCRIPTION_REDEMPTION_MENUITEM = MenuItem(
|
|
12
|
+
label="Subscription/Redemption",
|
|
13
|
+
endpoint="wbportfolio:subscriptionredemption-list",
|
|
14
|
+
# endpoint_get_parameters={'is_customer_trade': True},
|
|
15
|
+
permission=ItemPermission(
|
|
16
|
+
permissions=["wbportfolio.view_trade"], method=lambda request: is_internal_user(request.user)
|
|
17
|
+
),
|
|
18
|
+
)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_manager
|
|
3
|
+
|
|
4
|
+
TRANSACTION_MENUITEM = MenuItem(
|
|
5
|
+
label="Transactions",
|
|
6
|
+
endpoint="wbportfolio:transaction-list",
|
|
7
|
+
permission=ItemPermission(method=is_manager, permissions=["wbportfolio.view_transaction"]),
|
|
8
|
+
)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .portfolios import PortfolioPreviewConfig
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from wbcore.metadata.configs.display.instance_display.shortcuts import (
|
|
2
|
+
Display,
|
|
3
|
+
create_simple_display,
|
|
4
|
+
)
|
|
5
|
+
from wbcore.metadata.configs.display.instance_display.utils import repeat_field
|
|
6
|
+
from wbcore.metadata.configs.preview import PreviewViewConfig
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PortfolioPreviewConfig(PreviewViewConfig):
|
|
10
|
+
def get_display(self) -> Display:
|
|
11
|
+
return create_simple_display(
|
|
12
|
+
[
|
|
13
|
+
[
|
|
14
|
+
"name",
|
|
15
|
+
"name",
|
|
16
|
+
"currency",
|
|
17
|
+
],
|
|
18
|
+
[repeat_field(2, "portfolio_synchronization"), "last_synchronization"],
|
|
19
|
+
[repeat_field(3, "depends_on")],
|
|
20
|
+
]
|
|
21
|
+
)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
from .adjustments import AdjustmentTitleConfig
|
|
2
|
+
from .assets import (
|
|
3
|
+
AssetPositionInstrumentTitleConfig,
|
|
4
|
+
AssetPositionPortfolioTitleConfig,
|
|
5
|
+
AssetPositionTitleConfig,
|
|
6
|
+
AssetPositionUnderlyingInstrumentChartTitleConfig,
|
|
7
|
+
CashPositionPortfolioTitleConfig,
|
|
8
|
+
CompositionModelPortfolioPandasTitleConfig,
|
|
9
|
+
ContributorPortfolioChartTitleConfig,
|
|
10
|
+
DistributionChartTitleConfig,
|
|
11
|
+
DistributionTableTitleConfig,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from .claim import (
|
|
15
|
+
ConsolidatedTradeSummaryTitleConfig,
|
|
16
|
+
ConsolidatedTradeSummaryDistributionChartTitleConfig,
|
|
17
|
+
CumulativeNNMChartTitleConfig,
|
|
18
|
+
ClaimAccountTitleConfig,
|
|
19
|
+
ClaimEntryTitleConfig,
|
|
20
|
+
ClaimProductTitleConfig,
|
|
21
|
+
ClaimTitleConfig,
|
|
22
|
+
ClaimTradeTitleConfig,
|
|
23
|
+
NegativeTermimalAccountPerProductTitleConfig,
|
|
24
|
+
ProfitAndLossPandasTitleConfig,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
from .custodians import CustodianTitleConfig
|
|
28
|
+
|
|
29
|
+
from .fees import (
|
|
30
|
+
FeesAggregatedPortfolioTitleConfig,
|
|
31
|
+
FeesPortfolioTitleConfig,
|
|
32
|
+
FeesTitleConfig,
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
from .instrument_prices import (
|
|
36
|
+
AUMProductTitleConfig,
|
|
37
|
+
InstrumentPriceAUMDataTitleConfig,
|
|
38
|
+
NominalProductTitleConfig,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
from .portfolios import ModelPortfolioTitleConfig, PortfolioTitleConfig, DailyPortfolioCashFlowTitleConfig
|
|
42
|
+
from .positions import (
|
|
43
|
+
AggregatedAssetPositionLiquidityTitleConfig,
|
|
44
|
+
AssetPositionPandasTitleConfig,
|
|
45
|
+
)
|
|
46
|
+
from .product_groups import ProductGroupTitleConfig
|
|
47
|
+
from .product_performance import (
|
|
48
|
+
PerformanceComparisonTitleConfig,
|
|
49
|
+
PerformancePandasTitleConfig,
|
|
50
|
+
ProductPerformanceNetNewMoneyTitleConfig,
|
|
51
|
+
)
|
|
52
|
+
from .products import ProductPerformanceFeesTitleConfig
|
|
53
|
+
from .registers import RegisterTitleConfig
|
|
54
|
+
from .roles import PortfolioRoleInstrumentTitleConfig, PortfolioRoleTitleConfig
|
|
55
|
+
from .trades import (
|
|
56
|
+
CustodianDistributionInstrumentTitleConfig,
|
|
57
|
+
CustomerDistributionInstrumentTitleConfig,
|
|
58
|
+
SubscriptionRedemptionTitleConfig,
|
|
59
|
+
TradeInstrumentTitleConfig,
|
|
60
|
+
TradePortfolioTitleConfig,
|
|
61
|
+
TradeTitleConfig,
|
|
62
|
+
)
|
|
63
|
+
from .transactions import TransactionPortfolioTitleConfig
|
|
64
|
+
from .esg import ESGMetricAggregationPortfolioPandasTitleConfig
|
|
65
|
+
from .assets_and_net_new_money_progression import AssetAndNetNewMoneyProgressionChartTitleConfig
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbfdm.models import Instrument
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AdjustmentTitleConfig(TitleViewConfig):
|
|
6
|
+
def get_list_title(self):
|
|
7
|
+
if instrument_id := self.view.kwargs.get("instrument_id", None):
|
|
8
|
+
return f"Adjustments of {str(Instrument.objects.get(id=instrument_id))}"
|
|
9
|
+
return "Adjustments"
|
|
10
|
+
|
|
11
|
+
def get_instance_title(self):
|
|
12
|
+
try:
|
|
13
|
+
obj = self.view.get_object()
|
|
14
|
+
return f"Adjustment: {str(obj)}"
|
|
15
|
+
except AssertionError:
|
|
16
|
+
return "Adjustment {{factor}} - {{date}} ({{_equity.computed_str}})"
|
|
17
|
+
|
|
18
|
+
def get_create_title(self):
|
|
19
|
+
return "New Adjustment"
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbfdm.models import Instrument
|
|
3
|
+
from wbportfolio.models import Portfolio
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class AssetPositionTitleConfig(TitleViewConfig):
|
|
7
|
+
def get_list_title(self):
|
|
8
|
+
return "Asset Position"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class AssetPositionPortfolioTitleConfig(TitleViewConfig):
|
|
12
|
+
def get_list_title(self):
|
|
13
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
14
|
+
return f"Asset Positions for Portfolio: {str(portfolio)}"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AssetPositionInstrumentTitleConfig(TitleViewConfig):
|
|
18
|
+
def get_list_title(self):
|
|
19
|
+
instrument = Instrument.objects.get(id=self.view.kwargs["instrument_id"])
|
|
20
|
+
return f"Implemented Portfolios for Instrument: {instrument.computed_str}"
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class ContributorPortfolioChartTitleConfig(TitleViewConfig):
|
|
24
|
+
def get_list_title(self):
|
|
25
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
26
|
+
return f"Contributors: {str(portfolio)}"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class AssetPositionUnderlyingInstrumentChartTitleConfig(TitleViewConfig):
|
|
30
|
+
def get_list_title(self):
|
|
31
|
+
return "Allocation charts"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class CashPositionPortfolioTitleConfig(TitleViewConfig):
|
|
35
|
+
def get_list_title(self):
|
|
36
|
+
return "Cash Positions per Portfolio"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class DistributionChartTitleConfig(TitleViewConfig):
|
|
40
|
+
def get_list_title(self):
|
|
41
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
42
|
+
return f"Distribution Chart - {str(portfolio)}"
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
class DistributionTableTitleConfig(TitleViewConfig):
|
|
46
|
+
def get_list_title(self):
|
|
47
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
48
|
+
return f"Distribution Table - {str(portfolio)}"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
class CompositionModelPortfolioPandasTitleConfig(TitleViewConfig):
|
|
52
|
+
def get_list_title(self):
|
|
53
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
54
|
+
if instrument_id := self.request.GET.get("portfolio_instrument"):
|
|
55
|
+
instrument = Instrument.objects.get(id=instrument_id)
|
|
56
|
+
return f"Composition between {str(portfolio)} and instrument portfolio {str(instrument)}"
|
|
57
|
+
return f"Composition between {str(portfolio)} and related portfolios"
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ClaimTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
return "Claims"
|
|
7
|
+
|
|
8
|
+
def get_instance_title(self):
|
|
9
|
+
return "{{_claimant.computed_str}}: {{shares}} of {{_product.name}} ({{bank}} - {{date}})"
|
|
10
|
+
|
|
11
|
+
def get_create_title(self):
|
|
12
|
+
return "New Claim"
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ClaimProductTitleConfig(TitleViewConfig):
|
|
16
|
+
def get_list_title(self):
|
|
17
|
+
return f"Claims for Product {self.view.product.computed_str}"
|
|
18
|
+
|
|
19
|
+
def get_instance_title(self):
|
|
20
|
+
return f"Claim for Product {self.view.product.computed_str}"
|
|
21
|
+
|
|
22
|
+
def get_create_title(self):
|
|
23
|
+
return f"New Claim for Product {self.view.product.computed_str}"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ClaimAccountTitleConfig(TitleViewConfig):
|
|
27
|
+
def get_list_title(self):
|
|
28
|
+
return f"Claims for Account {self.view.account.computed_str}"
|
|
29
|
+
|
|
30
|
+
def get_instance_title(self):
|
|
31
|
+
return f"Claim for Account {self.view.account.computed_str}"
|
|
32
|
+
|
|
33
|
+
def get_create_title(self):
|
|
34
|
+
return f"New Claim for Account {self.view.account.computed_str}"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class ClaimEntryTitleConfig(TitleViewConfig):
|
|
38
|
+
def get_list_title(self):
|
|
39
|
+
return f"Claims from {self.view.entry.computed_str}"
|
|
40
|
+
|
|
41
|
+
def get_instance_title(self):
|
|
42
|
+
return f"Claim from {self.view.entry.computed_str}"
|
|
43
|
+
|
|
44
|
+
def get_create_title(self):
|
|
45
|
+
return f"New Claim for {self.view.entry.computed_str}"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class ClaimTradeTitleConfig(TitleViewConfig):
|
|
49
|
+
def get_list_title(self):
|
|
50
|
+
return f"Claims for Customer Trade {str(self.view.trade)}"
|
|
51
|
+
|
|
52
|
+
def get_instance_title(self):
|
|
53
|
+
return f"Claim for Customer Trade {str(self.view.trade)}"
|
|
54
|
+
|
|
55
|
+
def get_create_title(self):
|
|
56
|
+
return f"New Claim for Customer Trade {str(self.view.trade)}"
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class ConsolidatedTradeSummaryTitleConfig(TitleViewConfig):
|
|
60
|
+
def get_list_title(self):
|
|
61
|
+
return "Consolidated Trade Summary"
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class CumulativeNNMChartTitleConfig(TitleViewConfig):
|
|
65
|
+
def get_list_title(self):
|
|
66
|
+
return "Cumulative NNM Chart"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
class ConsolidatedTradeSummaryDistributionChartTitleConfig(TitleViewConfig):
|
|
70
|
+
def get_list_title(self):
|
|
71
|
+
return "Consolidated Trade Summary Distribution Chart"
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class ProfitAndLossPandasTitleConfig(TitleViewConfig):
|
|
75
|
+
def get_list_title(self):
|
|
76
|
+
return "Profit & Loss - Averaging Method (Experimental)"
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
class NegativeTermimalAccountPerProductTitleConfig(TitleViewConfig):
|
|
80
|
+
def get_list_title(self):
|
|
81
|
+
return "Negative Sub-Accounts"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class CustodianTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
return "Custodians"
|
|
7
|
+
|
|
8
|
+
def get_instance_title(self):
|
|
9
|
+
return "Custodian"
|
|
10
|
+
|
|
11
|
+
def get_create_title(self):
|
|
12
|
+
return "New Custodian"
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ESGMetricAggregationPortfolioPandasTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
if esg_aggregation := self.view.esg_aggregation:
|
|
7
|
+
metric_label = f"{esg_aggregation.value} ({esg_aggregation.get_aggregation().value})"
|
|
8
|
+
else:
|
|
9
|
+
metric_label = "ESG metric"
|
|
10
|
+
return f"{self.view.portfolio}: {metric_label}"
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbportfolio.models import Portfolio
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FeesTitleConfig(TitleViewConfig):
|
|
6
|
+
def get_list_title(self):
|
|
7
|
+
return "Fees"
|
|
8
|
+
|
|
9
|
+
def get_instance_title(self):
|
|
10
|
+
return "Fees: {{_product.name}} {{date}}"
|
|
11
|
+
|
|
12
|
+
def get_create_title(self):
|
|
13
|
+
return "New Fees"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class FeesPortfolioTitleConfig(FeesTitleConfig):
|
|
17
|
+
def get_list_title(self):
|
|
18
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
19
|
+
return f"Fees: {portfolio.name}"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class FeesAggregatedPortfolioTitleConfig(TitleViewConfig):
|
|
23
|
+
def get_list_title(self):
|
|
24
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
25
|
+
return f"Aggregated Fees for {portfolio.name}"
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbportfolio.models import Product
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class InstrumentPriceAUMDataTitleConfig(TitleViewConfig):
|
|
6
|
+
def get_list_title(self):
|
|
7
|
+
return "Assets under Management"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# Product Portfolio Viewsets
|
|
11
|
+
class NominalProductTitleConfig(TitleViewConfig):
|
|
12
|
+
def get_list_title(self):
|
|
13
|
+
product = Product.objects.get(id=self.view.kwargs["product_id"])
|
|
14
|
+
return f"{str(product)}: Nominal Value"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AUMProductTitleConfig(TitleViewConfig):
|
|
18
|
+
def get_list_title(self):
|
|
19
|
+
product = Product.objects.get(id=self.view.kwargs["product_id"])
|
|
20
|
+
return f"{str(product)}: Assets under Management"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbportfolio.models.portfolio import Portfolio
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PortfolioTitleConfig(TitleViewConfig):
|
|
6
|
+
def get_list_title(self):
|
|
7
|
+
return "Portfolios"
|
|
8
|
+
|
|
9
|
+
def get_instance_title(self):
|
|
10
|
+
return "Portfolio {{name}}"
|
|
11
|
+
|
|
12
|
+
def get_create_title(self):
|
|
13
|
+
return "New Portfolio"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ModelPortfolioTitleConfig(TitleViewConfig):
|
|
17
|
+
def get_list_title(self):
|
|
18
|
+
return "Model Portfolios"
|
|
19
|
+
|
|
20
|
+
def get_instance_title(self):
|
|
21
|
+
return "Model Portfolio: {{ name }}"
|
|
22
|
+
|
|
23
|
+
def get_create_title(self):
|
|
24
|
+
return "New Model Portfolio"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class DailyPortfolioCashFlowTitleConfig(TitleViewConfig):
|
|
28
|
+
def get_list_title(self):
|
|
29
|
+
if portfolio_id := self.view.kwargs.get("portfolio_id", None):
|
|
30
|
+
portfolio = Portfolio.objects.get(id=portfolio_id)
|
|
31
|
+
return f"{portfolio}: Daily Portfolio Cash Flow"
|
|
32
|
+
return "Daily Portfolio Cash Flow"
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class AssetPositionPandasTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
return "Invested Asset Positions"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AggregatedAssetPositionLiquidityTitleConfig(TitleViewConfig):
|
|
10
|
+
def get_list_title(self):
|
|
11
|
+
return "Aggregated Asset Position Liquidity Table"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ProductGroupTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
return "Product Groups"
|
|
7
|
+
|
|
8
|
+
def get_instance_title(self):
|
|
9
|
+
return "Product Group: {{title}} {{umbrella}}"
|
|
10
|
+
|
|
11
|
+
def get_create_title(self):
|
|
12
|
+
return "New Product Group"
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class PerformancePandasTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
return "Product Performances & AuM"
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PerformanceComparisonTitleConfig(TitleViewConfig):
|
|
10
|
+
def get_list_title(self):
|
|
11
|
+
return "Product Performances Summary"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class ProductPerformanceNetNewMoneyTitleConfig(TitleViewConfig):
|
|
15
|
+
def get_list_title(self):
|
|
16
|
+
return "Product Performance New Money"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class RegisterTitleConfig(TitleViewConfig):
|
|
5
|
+
def get_list_title(self):
|
|
6
|
+
return "Registers"
|
|
7
|
+
|
|
8
|
+
def get_instance_title(self):
|
|
9
|
+
return "Register: {{register_reference}}"
|
|
10
|
+
|
|
11
|
+
def get_create_title(self):
|
|
12
|
+
return "New Register"
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbportfolio.models import Product
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PortfolioRoleTitleConfig(TitleViewConfig):
|
|
6
|
+
def get_list_title(self):
|
|
7
|
+
return "Portfolio Roles"
|
|
8
|
+
|
|
9
|
+
def get_instance_title(self):
|
|
10
|
+
return "Portfolio Role"
|
|
11
|
+
|
|
12
|
+
def get_create_title(self):
|
|
13
|
+
return "Create New Role"
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class PortfolioRoleInstrumentTitleConfig(PortfolioRoleTitleConfig):
|
|
17
|
+
def get_list_title(self):
|
|
18
|
+
product = Product.objects.get(id=self.view.kwargs["instrument_id"])
|
|
19
|
+
return f"Portfolio Role for {product.name}"
|
|
20
|
+
|
|
21
|
+
def get_create_title(self):
|
|
22
|
+
product = Product.objects.get(id=self.view.kwargs["instrument_id"])
|
|
23
|
+
return f"New Portfolio Role for {product.name}"
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbfdm.models import Instrument
|
|
3
|
+
from wbportfolio.models import Portfolio
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TradeTitleConfig(TitleViewConfig):
|
|
7
|
+
def get_list_title(self):
|
|
8
|
+
if self.request.GET.get("is_customer_trade", "False") == "True":
|
|
9
|
+
return "Subscription / Redemption"
|
|
10
|
+
return "Trade"
|
|
11
|
+
|
|
12
|
+
def get_instance_title(self):
|
|
13
|
+
return "Trade: {{shares}} {{bank}} - {{transaction_date}} ({{_product.name}})"
|
|
14
|
+
|
|
15
|
+
def get_create_title(self):
|
|
16
|
+
return "New Trade"
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class TradeInstrumentTitleConfig(TradeTitleConfig):
|
|
20
|
+
def get_list_title(self):
|
|
21
|
+
instrument = Instrument.objects.get(id=self.view.kwargs["instrument_id"])
|
|
22
|
+
return f"Trades of Instrument {instrument.name} ({instrument.isin})"
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class TradePortfolioTitleConfig(TradeTitleConfig):
|
|
26
|
+
def get_list_title(self):
|
|
27
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
28
|
+
return f"Trades within Portfolio {str(portfolio)})"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class CustodianDistributionInstrumentTitleConfig(TitleViewConfig):
|
|
32
|
+
def get_list_title(self):
|
|
33
|
+
instrument = Instrument.objects.get(id=self.view.kwargs["instrument_id"])
|
|
34
|
+
return f"Custodians Distribution {instrument.computed_str}"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class CustomerDistributionInstrumentTitleConfig(TitleViewConfig):
|
|
38
|
+
def get_list_title(self):
|
|
39
|
+
instrument = Instrument.objects.get(id=self.view.kwargs["instrument_id"])
|
|
40
|
+
return f"Customer Distribution {instrument.computed_str}"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class SubscriptionRedemptionTitleConfig(TitleViewConfig):
|
|
44
|
+
def get_list_title(self):
|
|
45
|
+
if instrument_id := self.view.kwargs.get("instrument_id", None):
|
|
46
|
+
instrument = Instrument.objects.get(id=instrument_id)
|
|
47
|
+
return f"Subscription / Redemption of {instrument.computed_str}"
|
|
48
|
+
return "Subscription / Redemption"
|
|
49
|
+
|
|
50
|
+
def get_instance_title(self):
|
|
51
|
+
return "Subscription / Redemption: {{shares}} {{bank}} - {{transaction_date}} ({{_product.name}})"
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from wbcore.metadata.configs.titles import TitleViewConfig
|
|
2
|
+
from wbportfolio.models import Portfolio
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TransactionPortfolioTitleConfig(TitleViewConfig):
|
|
6
|
+
def get_list_title(self):
|
|
7
|
+
portfolio = Portfolio.objects.get(id=self.view.kwargs["portfolio_id"])
|
|
8
|
+
return f"Transactions for Product {str(portfolio)}"
|