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,106 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
from wbportfolio.models.transactions.claim import Claim
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class ClaimEndpointConfig(EndpointViewConfig):
|
|
7
|
+
def get_instance_endpoint(self, **kwargs):
|
|
8
|
+
if self.request.user.has_perm("wbportfolio.change_claim"):
|
|
9
|
+
try:
|
|
10
|
+
obj = self.view.get_object()
|
|
11
|
+
if obj.status == Claim.Status.DRAFT:
|
|
12
|
+
return reverse("wbportfolio:claim-detail", args=[obj.id], request=self.request)
|
|
13
|
+
except AssertionError:
|
|
14
|
+
return reverse("wbportfolio:claim-list", request=self.request)
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
def get_delete_endpoint(self, **kwargs):
|
|
18
|
+
if self.request.user.has_perm("wbportfolio.change_claim"):
|
|
19
|
+
try:
|
|
20
|
+
obj = self.view.get_object()
|
|
21
|
+
if obj.status == Claim.Status.WITHDRAWN:
|
|
22
|
+
return reverse("wbportfolio:claim-detail", args=[obj.id], request=self.request)
|
|
23
|
+
except AssertionError:
|
|
24
|
+
pass
|
|
25
|
+
return None
|
|
26
|
+
|
|
27
|
+
def get_endpoint(self, **kwargs):
|
|
28
|
+
return reverse("wbportfolio:claim-list", request=self.request)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class ClaimProductEndpointConfig(ClaimEndpointConfig):
|
|
32
|
+
def get_endpoint(self, **kwargs):
|
|
33
|
+
return reverse(
|
|
34
|
+
"wbportfolio:product-claim-list",
|
|
35
|
+
args=[self.view.kwargs["product_id"]],
|
|
36
|
+
request=self.request,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class ClaimAccountEndpointConfig(ClaimEndpointConfig):
|
|
41
|
+
def get_endpoint(self, **kwargs):
|
|
42
|
+
return reverse(
|
|
43
|
+
"wbportfolio:account-claim-list",
|
|
44
|
+
args=[self.view.kwargs["account_id"]],
|
|
45
|
+
request=self.request,
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class ClaimEntryEndpointConfig(ClaimEndpointConfig):
|
|
50
|
+
def get_endpoint(self, **kwargs):
|
|
51
|
+
return reverse(
|
|
52
|
+
"wbportfolio:entry-claim-list",
|
|
53
|
+
args=[self.view.kwargs["entry_id"]],
|
|
54
|
+
request=self.request,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class ClaimTradeEndpointConfig(ClaimEndpointConfig):
|
|
59
|
+
def get_endpoint(self, **kwargs):
|
|
60
|
+
return reverse(
|
|
61
|
+
"wbportfolio:trade-claim-list",
|
|
62
|
+
args=[self.view.kwargs["trade_id"]],
|
|
63
|
+
request=self.request,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class ConsolidatedTradeSummaryEndpointConfig(EndpointViewConfig):
|
|
68
|
+
def get_endpoint(self, **kwargs):
|
|
69
|
+
return None
|
|
70
|
+
|
|
71
|
+
def get_list_endpoint(self, **kwargs):
|
|
72
|
+
return reverse("wbportfolio:aumtable-list", request=self.request)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
class ConsolidatedTradeSummaryDistributionChartEndpointConfig(EndpointViewConfig):
|
|
76
|
+
def get_endpoint(self, **kwargs):
|
|
77
|
+
return reverse("wbportfolio:consolidatedtradesummarydistributionchart-list", request=self.request)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class CumulativeNNMChartEndpointConfig(EndpointViewConfig):
|
|
81
|
+
def get_endpoint(self, **kwargs):
|
|
82
|
+
return reverse("wbportfolio:cumulativennmchart-list", request=self.request)
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class ProfitAndLossPandasEndpointConfig(EndpointViewConfig):
|
|
86
|
+
def get_endpoint(self, **kwargs):
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
def get_list_endpoint(self, **kwargs):
|
|
90
|
+
return reverse("wbportfolio:pnltable-list", request=self.request)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
class NegativeTermimalAccountPerProductEndpointConfig(EndpointViewConfig):
|
|
94
|
+
def get_endpoint(self, **kwargs):
|
|
95
|
+
return None
|
|
96
|
+
|
|
97
|
+
def get_instance_endpoint(self, **kwargs):
|
|
98
|
+
return None
|
|
99
|
+
|
|
100
|
+
def _get_instance_endpoint(self, **kwargs):
|
|
101
|
+
return (
|
|
102
|
+
reverse("wbportfolio:claim-list", request=self.request) + "?account={{account_id}}&product={{product_id}}"
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
def get_list_endpoint(self, **kwargs):
|
|
106
|
+
return reverse("wbportfolio:negativeaccountproduct-list", request=self.request)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ESGMetricAggregationPortfolioPandasEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_list_endpoint(self, **kwargs):
|
|
10
|
+
return reverse(
|
|
11
|
+
"wbportfolio:portfolio-esgaggregation-list",
|
|
12
|
+
args=[self.view.kwargs["portfolio_id"]],
|
|
13
|
+
request=self.request,
|
|
14
|
+
)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class FeeEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_list_endpoint(self, **kwargs):
|
|
10
|
+
return reverse("wbportfolio:fees-list", args=[], request=self.request)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class FeesPortfolioEndpointConfig(FeeEndpointConfig):
|
|
14
|
+
def get_list_endpoint(self, **kwargs):
|
|
15
|
+
return reverse(
|
|
16
|
+
"wbportfolio:portfolio-fees-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class FeesAggregatedPortfolioPandasEndpointConfig(EndpointViewConfig):
|
|
21
|
+
def get_list_endpoint(self, **kwargs):
|
|
22
|
+
return reverse(
|
|
23
|
+
"wbportfolio:portfolio-feesaggregated-list",
|
|
24
|
+
args=[self.view.kwargs["portfolio_id"]],
|
|
25
|
+
request=self.request,
|
|
26
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PortfolioInstrumentPreferredClassificationThroughEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return reverse(
|
|
8
|
+
"wbportfolio:portfolio-preferredclassification-list",
|
|
9
|
+
args=[self.view.kwargs["portfolio_id"]],
|
|
10
|
+
request=self.request,
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class InstrumentPortfolioThroughPortfolioModelEndpointConfig(EndpointViewConfig):
|
|
15
|
+
def get_endpoint(self, **kwargs):
|
|
16
|
+
return None
|
|
17
|
+
|
|
18
|
+
def get_list_endpoint(self, **kwargs):
|
|
19
|
+
return reverse(
|
|
20
|
+
"wbportfolio:portfolio-instrument-list",
|
|
21
|
+
args=[self.view.kwargs["portfolio_id"]],
|
|
22
|
+
request=self.request,
|
|
23
|
+
)
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PortfolioEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return super().get_endpoint()
|
|
8
|
+
|
|
9
|
+
def get_delete_endpoint(self, **kwargs):
|
|
10
|
+
if self.view.is_portfolio_manager:
|
|
11
|
+
return self.get_endpoint(**kwargs)
|
|
12
|
+
return None
|
|
13
|
+
|
|
14
|
+
def get_create_endpoint(self, **kwargs):
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class ModelPortfolioEndpointConfig(PortfolioEndpointConfig):
|
|
19
|
+
def get_endpoint(self, **kwargs):
|
|
20
|
+
return reverse("wbportfolio:modelportfolio-list", request=self.request)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class PortfolioPortfolioThroughModelEndpointConfig(EndpointViewConfig):
|
|
24
|
+
PK_FIELD = "dependency_portfolio"
|
|
25
|
+
|
|
26
|
+
def get_list_endpoint(self, **kwargs):
|
|
27
|
+
return reverse(
|
|
28
|
+
"wbportfolio:portfolio-dependencyportfolio-list",
|
|
29
|
+
args=[self.view.kwargs["portfolio_id"]],
|
|
30
|
+
request=self.request,
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
def get_instance_endpoint(self, **kwargs):
|
|
34
|
+
return reverse(
|
|
35
|
+
"wbportfolio:portfolio-list",
|
|
36
|
+
args=[],
|
|
37
|
+
request=self.request,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
def get_endpoint(self, **kwargs):
|
|
41
|
+
if self.request.user.is_superuser:
|
|
42
|
+
return self.get_list_endpoint(**kwargs)
|
|
43
|
+
return None
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class AssetPositionPandasEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_list_endpoint(self, **kwargs):
|
|
10
|
+
return reverse("wbportfolio:assetpositiongroupby-list", request=self.request)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class AggregatedAssetPositionLiquidityEndpointConfig(EndpointViewConfig):
|
|
14
|
+
def get_endpoint(self, **kwargs):
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
def get_list_endpoint(self, **kwargs):
|
|
18
|
+
return reverse("wbportfolio:aggregatedassetpositionliquidity-list", request=self.request)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ProductGroupEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return reverse(
|
|
8
|
+
"wbportfolio:product_group-list",
|
|
9
|
+
args=[],
|
|
10
|
+
request=self.request,
|
|
11
|
+
)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PerformancePandasEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_instance_endpoint(self, **kwargs):
|
|
10
|
+
return reverse("wbportfolio:product-list", request=self.request)
|
|
11
|
+
|
|
12
|
+
def get_list_endpoint(self, **kwargs):
|
|
13
|
+
return reverse("wbportfolio:productperformance-list", request=self.request)
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class PerformanceComparisonEndpointConfig(EndpointViewConfig):
|
|
17
|
+
def get_endpoint(self, **kwargs):
|
|
18
|
+
return None
|
|
19
|
+
|
|
20
|
+
def get_instance_endpoint(self, **kwargs):
|
|
21
|
+
return reverse("wbportfolio:product-list", request=self.request)
|
|
22
|
+
|
|
23
|
+
def get_list_endpoint(self, **kwargs):
|
|
24
|
+
return reverse("wbportfolio:productperformancecomparison-list", request=self.request)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class ProductPerformanceNetNewMoneyEndpointConfig(PerformancePandasEndpointConfig):
|
|
28
|
+
def get_list_endpoint(self, **kwargs):
|
|
29
|
+
return reverse("wbportfolio:productperformancennmlist-list", request=self.request)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class ProductCustomerEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return None
|
|
8
|
+
|
|
9
|
+
def get_list_endpoint(self, **kwargs):
|
|
10
|
+
return reverse("wbportfolio:productcustomer-list", request=self.request)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ProductPerformanceFeesEndpointConfig(EndpointViewConfig):
|
|
14
|
+
def get_endpoint(self, **kwargs):
|
|
15
|
+
return None
|
|
16
|
+
|
|
17
|
+
def get_instance_endpoint(self, **kwargs):
|
|
18
|
+
return reverse("wbportfolio:product-list", request=self.request)
|
|
19
|
+
|
|
20
|
+
def get_list_endpoint(self, **kwargs):
|
|
21
|
+
return reverse("wbportfolio:feesproductperformance-list", request=self.request)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
class InstrumentPriceAUMDataEndpointConfig(EndpointViewConfig):
|
|
25
|
+
def get_endpoint(self, **kwargs):
|
|
26
|
+
return reverse("wbportfolio:aumchart-list", request=self.request)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Product Portfolio Viewsets
|
|
30
|
+
class NominalProductEndpointConfig(EndpointViewConfig):
|
|
31
|
+
def get_endpoint(self, **kwargs):
|
|
32
|
+
return reverse("wbportfolio:product-nominalchart-list", [self.view.kwargs["product_id"]], request=self.request)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class AUMProductEndpointConfig(EndpointViewConfig):
|
|
36
|
+
def get_endpoint(self, **kwargs):
|
|
37
|
+
return reverse("wbportfolio:product-aumchart-list", [self.view.kwargs["product_id"]], request=self.request)
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
2
|
+
from wbportfolio.models.reconciliations.account_reconciliations import (
|
|
3
|
+
AccountReconciliation,
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class AccountReconciliationEndpointViewConfig(EndpointViewConfig):
|
|
8
|
+
def get_instance_endpoint(self, **kwargs):
|
|
9
|
+
if self.view.kwargs.get("pk"):
|
|
10
|
+
return None
|
|
11
|
+
return super().get_instance_endpoint(**kwargs)
|
|
12
|
+
|
|
13
|
+
def get_delete_endpoint(self, **kwargs):
|
|
14
|
+
return None
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class AccountReconciliationLineEndpointViewConfig(EndpointViewConfig):
|
|
18
|
+
def get_instance_endpoint(self, **kwargs):
|
|
19
|
+
return None
|
|
20
|
+
|
|
21
|
+
def get_delete_endpoint(self, **kwargs):
|
|
22
|
+
return None
|
|
23
|
+
|
|
24
|
+
def get_create_endpoint(self, **kwargs):
|
|
25
|
+
return None
|
|
26
|
+
|
|
27
|
+
def get_update_endpoint(self, **kwargs):
|
|
28
|
+
if accountreconciliation_id := self.view.kwargs.get("accountreconciliation_id"):
|
|
29
|
+
if AccountReconciliation.objects.filter(id=accountreconciliation_id, approved_dt__isnull=False).exists():
|
|
30
|
+
return None
|
|
31
|
+
return super().get_endpoint()
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class PortfolioRoleInstrumentEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_endpoint(self, **kwargs):
|
|
7
|
+
return reverse(
|
|
8
|
+
"wbportfolio:instrument-portfoliorole-list", args=[self.view.kwargs["instrument_id"]], request=self.request
|
|
9
|
+
)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
from wbportfolio.models import TradeProposal
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class TradeProposalPortfolioEndpointConfig(EndpointViewConfig):
|
|
7
|
+
def get_endpoint(self, **kwargs):
|
|
8
|
+
return reverse(
|
|
9
|
+
"wbportfolio:portfolio-tradeproposal-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
def get_delete_endpoint(self, **kwargs):
|
|
13
|
+
if trade_proposal_id := self.view.kwargs.get("pk", None):
|
|
14
|
+
trade_proposal = TradeProposal.objects.get(id=trade_proposal_id)
|
|
15
|
+
if trade_proposal.status == TradeProposal.Status.DRAFT:
|
|
16
|
+
return reverse("wbportfolio:tradeproposal-list", args=[], request=self.request)
|
|
17
|
+
return None
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from django.shortcuts import get_object_or_404
|
|
2
|
+
from rest_framework.reverse import reverse
|
|
3
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
4
|
+
from wbportfolio.models import TradeProposal
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class TradeEndpointConfig(EndpointViewConfig):
|
|
8
|
+
def get_endpoint(self, **kwargs):
|
|
9
|
+
return reverse("wbportfolio:trade-list", args=[], request=self.request)
|
|
10
|
+
|
|
11
|
+
# def get_instance_endpoint(self, **kwargs):
|
|
12
|
+
# try:
|
|
13
|
+
# if self.request.user.has_perm("wbportfolio.administrate_trade"):
|
|
14
|
+
# obj = self.view.get_object()
|
|
15
|
+
# return reverse("wbportfolio:trade-detail", args=[obj.id], request=self.request)
|
|
16
|
+
# except AssertionError:
|
|
17
|
+
# pass
|
|
18
|
+
# return reverse("wbportfolio:trade-list", request=self.request)
|
|
19
|
+
|
|
20
|
+
def get_create_endpoint(self, **kwargs):
|
|
21
|
+
return None
|
|
22
|
+
|
|
23
|
+
def get_delete_endpoint(self, **kwargs):
|
|
24
|
+
return None
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class TradeInstrumentEndpointConfig(TradeEndpointConfig):
|
|
28
|
+
def get_endpoint(self, **kwargs):
|
|
29
|
+
return reverse(
|
|
30
|
+
"wbportfolio:instrument-trade-list", args=[self.view.kwargs["instrument_id"]], request=self.request
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
class TradePortfolioEndpointConfig(TradeEndpointConfig):
|
|
35
|
+
def get_endpoint(self, **kwargs):
|
|
36
|
+
return reverse(
|
|
37
|
+
"wbportfolio:portfolio-trade-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
class CustodianDistributionInstrumentEndpointConfig(EndpointViewConfig):
|
|
42
|
+
def get_endpoint(self, **kwargs):
|
|
43
|
+
return reverse(
|
|
44
|
+
"wbportfolio:instrument-custodiandistribution-list",
|
|
45
|
+
args=[self.view.kwargs["instrument_id"]],
|
|
46
|
+
request=self.request,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
class TradeProposalEndpointConfig(EndpointViewConfig):
|
|
51
|
+
def get_delete_endpoint(self, **kwargs):
|
|
52
|
+
if pk := self.view.kwargs.get("pk", None):
|
|
53
|
+
trade_proposal = get_object_or_404(TradeProposal, pk=pk)
|
|
54
|
+
if trade_proposal.status == TradeProposal.Status.DRAFT:
|
|
55
|
+
return super().get_endpoint()
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
class TradeProposalPortfolioEndpointConfig(TradeProposalEndpointConfig):
|
|
60
|
+
def get_endpoint(self, **kwargs):
|
|
61
|
+
return reverse(
|
|
62
|
+
"wbportfolio:portfolio-tradeproposal-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class TradeTradeProposalEndpointConfig(EndpointViewConfig):
|
|
67
|
+
def get_list_endpoint(self, **kwargs):
|
|
68
|
+
return reverse(
|
|
69
|
+
"wbportfolio:tradeproposal-trade-list", args=[self.view.kwargs["trade_proposal_id"]], request=self.request
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
def get_endpoint(self, **kwargs):
|
|
73
|
+
if trade_proposal_id := self.view.kwargs.get("trade_proposal_id", None):
|
|
74
|
+
trade_proposal = TradeProposal.objects.get(id=trade_proposal_id)
|
|
75
|
+
if trade_proposal.status == TradeProposal.Status.DRAFT:
|
|
76
|
+
return self.get_list_endpoint()
|
|
77
|
+
return None
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class SubscriptionRedemptionEndpointConfig(TradeEndpointConfig):
|
|
81
|
+
def get_endpoint(self, **kwargs):
|
|
82
|
+
return reverse("wbportfolio:subscriptionredemption-list", args=[], request=self.request)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from rest_framework.reverse import reverse
|
|
2
|
+
from wbcore.metadata.configs.endpoints import EndpointViewConfig
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
class TransactionEndpointConfig(EndpointViewConfig):
|
|
6
|
+
def get_instance_endpoint(self, **kwargs):
|
|
7
|
+
model = "{{transaction_url_type}}"
|
|
8
|
+
return f"{self.request.scheme}://{self.request.get_host()}/api/portfolio/{model}/"
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class TransactionPortfolioEndpointConfig(TransactionEndpointConfig):
|
|
12
|
+
def get_list_endpoint(self, **kwargs):
|
|
13
|
+
return reverse(
|
|
14
|
+
"wbportfolio:portfolio-transaction-list",
|
|
15
|
+
args=[self.view.kwargs["portfolio_id"]],
|
|
16
|
+
request=self.request,
|
|
17
|
+
)
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from .adjustments import ADJUSTMENT_MENUITEM
|
|
2
|
+
from .assets import EQUITYCASHPOSITION_MENUITEM
|
|
3
|
+
from .claim import (
|
|
4
|
+
CONSOLIDATED_TRADE_SUMMARY_TABLE_MENUITEM,
|
|
5
|
+
CLAIM_MENUITEM,
|
|
6
|
+
NEGATIVEACCOUNTPRODUCT_MENUITEM,
|
|
7
|
+
PNL_MENUITEM,
|
|
8
|
+
AUM_NNM_PROGRESSION_MENUITEM,
|
|
9
|
+
)
|
|
10
|
+
from .custodians import CustodianMenuItem
|
|
11
|
+
from .fees import FEES_MENUITEM, GAIN_MENUITEM
|
|
12
|
+
from .instrument_prices import VALUATIONDATAAUM_MENUITEM
|
|
13
|
+
from .portfolios import ModelPortfolioMenuItem, PortfolioMenuItem
|
|
14
|
+
from .positions import (
|
|
15
|
+
AGGREGATED_ASSETPOSITION_LIQUIDITY_MENUITEM,
|
|
16
|
+
ASSETPOSITION_MENUITEM,
|
|
17
|
+
)
|
|
18
|
+
from .product_groups import PRODUCTGROUP_MENUITEM
|
|
19
|
+
from .product_performance import (
|
|
20
|
+
PRODUCTPERFORMANCECOMPARISONLIST_MENUITEM,
|
|
21
|
+
PRODUCTPERFORMANCELIST_MENUITEM,
|
|
22
|
+
PRODUCTPERFORMANCENNMLIST_MENUITEM,
|
|
23
|
+
)
|
|
24
|
+
from .products import PRODUCT_MENUITEM, PRODUCTCUSTOMER_MENUITEM
|
|
25
|
+
from .registers import REGISTER_MENUITEM
|
|
26
|
+
from .roles import PORTFOLIOROLE_MENUITEM
|
|
27
|
+
from .trades import SUBSCRIPTION_REDEMPTION_MENUITEM, TRADE_MENUITEM
|
|
28
|
+
from .transactions import TRANSACTION_MENUITEM
|
|
29
|
+
from .portfolio_cash_flow import PORTFOLIO_DAILY_CASH_FLOW
|
|
30
|
+
from .reconciliations import ACCOUNT_RECONCILIATION_MENU_ITEM
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_portfolio_manager
|
|
3
|
+
|
|
4
|
+
ADJUSTMENT_MENUITEM = MenuItem(
|
|
5
|
+
label="Adjustment",
|
|
6
|
+
endpoint="wbportfolio:adjustment-list",
|
|
7
|
+
permission=ItemPermission(permissions=["wbportfolio.view_adjustment"], method=is_portfolio_manager),
|
|
8
|
+
)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_portfolio_manager
|
|
3
|
+
|
|
4
|
+
EQUITYCASHPOSITION_MENUITEM = MenuItem(
|
|
5
|
+
label="Portfolio Cash Position",
|
|
6
|
+
endpoint="wbportfolio:productcashposition-list",
|
|
7
|
+
permission=ItemPermission(permissions=["wbfdm.view_instrument"], method=is_portfolio_manager),
|
|
8
|
+
)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
CONSOLIDATED_TRADE_SUMMARY_TABLE_MENUITEM = MenuItem(
|
|
5
|
+
label="Consolidated Trade Summary",
|
|
6
|
+
endpoint="wbportfolio:aumtable-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
permissions=["wbportfolio.view_claim"], method=lambda request: is_internal_user(request.user)
|
|
9
|
+
),
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
PNL_MENUITEM = MenuItem(
|
|
13
|
+
label="Profit & Loss",
|
|
14
|
+
endpoint="wbportfolio:pnltable-list",
|
|
15
|
+
permission=ItemPermission(
|
|
16
|
+
permissions=["wbportfolio.view_claim"], method=lambda request: is_internal_user(request.user)
|
|
17
|
+
),
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
CLAIM_MENUITEM = MenuItem(
|
|
21
|
+
label="Claims",
|
|
22
|
+
endpoint="wbportfolio:claim-list",
|
|
23
|
+
permission=ItemPermission(permissions=["wbportfolio.view_claim"]),
|
|
24
|
+
add=MenuItem(
|
|
25
|
+
label="Create Claim",
|
|
26
|
+
endpoint="wbportfolio:claim-list",
|
|
27
|
+
permission=ItemPermission(permissions=["wbportfolio.add_claim"]),
|
|
28
|
+
),
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
NEGATIVEACCOUNTPRODUCT_MENUITEM = MenuItem(
|
|
32
|
+
label="Negative Account per Product",
|
|
33
|
+
endpoint="wbportfolio:negativeaccountproduct-list",
|
|
34
|
+
permission=ItemPermission(method=lambda request: is_internal_user(request.user)),
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
AUM_NNM_PROGRESSION_MENUITEM = MenuItem(
|
|
38
|
+
label="AUM/NNM Progression",
|
|
39
|
+
endpoint="wbportfolio:assetandnetnewmoneyprogression-list",
|
|
40
|
+
permission=ItemPermission(method=lambda request: is_internal_user(request.user)),
|
|
41
|
+
)
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
CustodianMenuItem = MenuItem(
|
|
5
|
+
label="Custodian",
|
|
6
|
+
endpoint="wbportfolio:custodian-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
permissions=["wbportfolio.view_custodian"],
|
|
9
|
+
method=lambda request: is_internal_user(request.user),
|
|
10
|
+
),
|
|
11
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_manager
|
|
3
|
+
|
|
4
|
+
GAIN_MENUITEM = MenuItem(
|
|
5
|
+
label="Product Fees",
|
|
6
|
+
endpoint="wbportfolio:feesproductperformance-list",
|
|
7
|
+
permission=ItemPermission(permissions=["wbportfolio.view_product", "wbportfolio.view_fees"], method=is_manager),
|
|
8
|
+
)
|
|
9
|
+
FEES_MENUITEM = MenuItem(
|
|
10
|
+
label="Fees",
|
|
11
|
+
endpoint="wbportfolio:fees-list",
|
|
12
|
+
permission=ItemPermission(permissions=["wbportfolio.view_fees"], method=is_manager),
|
|
13
|
+
)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbcore.permissions.shortcuts import is_internal_user
|
|
3
|
+
|
|
4
|
+
VALUATIONDATAAUM_MENUITEM = MenuItem(
|
|
5
|
+
label="AuM Chart",
|
|
6
|
+
endpoint="wbportfolio:aumchart-list",
|
|
7
|
+
permission=ItemPermission(
|
|
8
|
+
method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_portfolio"]
|
|
9
|
+
),
|
|
10
|
+
)
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_portfolio_manager
|
|
3
|
+
|
|
4
|
+
PORTFOLIO_DAILY_CASH_FLOW = MenuItem(
|
|
5
|
+
label="Daily Portfolio Cash Flow",
|
|
6
|
+
endpoint="wbportfolio:portfoliocashflow-list",
|
|
7
|
+
permission=ItemPermission(permissions=["wbportfolio.view_portfolio"], method=is_portfolio_manager),
|
|
8
|
+
)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_portfolio_manager
|
|
3
|
+
|
|
4
|
+
PortfolioMenuItem = MenuItem(
|
|
5
|
+
label="Portfolios",
|
|
6
|
+
endpoint="wbportfolio:portfolio-list",
|
|
7
|
+
permission=ItemPermission(method=is_portfolio_manager, permissions=["wbportfolio.view_portfolio"]),
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
ModelPortfolioMenuItem = MenuItem(
|
|
12
|
+
label="Model Portfolios",
|
|
13
|
+
endpoint="wbportfolio:modelportfolio-list",
|
|
14
|
+
permission=ItemPermission(method=is_portfolio_manager, permissions=["wbportfolio.view_portfolio"]),
|
|
15
|
+
)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
from wbcore.menus import ItemPermission, MenuItem
|
|
2
|
+
from wbportfolio.permissions import is_analyst, is_portfolio_manager
|
|
3
|
+
|
|
4
|
+
ASSETPOSITION_MENUITEM = MenuItem(
|
|
5
|
+
label="Invested Asset Positions",
|
|
6
|
+
endpoint="wbportfolio:assetpositiongroupby-list",
|
|
7
|
+
permission=ItemPermission(permissions=["wbfdm.view_instrument"], method=is_analyst),
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
AGGREGATED_ASSETPOSITION_LIQUIDITY_MENUITEM = MenuItem(
|
|
11
|
+
label="Asset Positions Liquidity Table",
|
|
12
|
+
endpoint="wbportfolio:aggregatedassetpositionliquidity-list",
|
|
13
|
+
permission=ItemPermission(permissions=["wbfdm.view_instrument"], method=is_portfolio_manager),
|
|
14
|
+
)
|