wbportfolio 1.43.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 +153 -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 +248 -0
- wbportfolio/filters/transactions/transactions.py +98 -0
- wbportfolio/fixtures/product_factsheets.yaml +1 -0
- wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
- wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
- wbportfolio/import_export/__init__.py +0 -0
- wbportfolio/import_export/backends/__init__.py +2 -0
- wbportfolio/import_export/backends/refinitiv/adjustment.py +40 -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 +161 -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/jinja2/wbportfolio/sql/aum_nnm.sql +119 -0
- wbportfolio/kpi_handlers/nnm.py +163 -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/llm/wbcrm/analyze_relationship.py +58 -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 +173 -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/static/wbportfolio/css/macro_review.css +17 -0
- wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +16 -0
- wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +25 -0
- wbportfolio/static/wbportfolio/markdown/documentation/company.md +78 -0
- wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +14 -0
- wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +94 -0
- wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +44 -0
- wbportfolio/static/wbportfolio/markdown/documentation/person.md +70 -0
- wbportfolio/tasks.py +125 -0
- wbportfolio/templates/portfolio/email/customer_report.html +6 -0
- wbportfolio/templates/portfolio/email/customer_trade_notification.html +26 -0
- wbportfolio/templates/portfolio/email/email_base_template.html +420 -0
- wbportfolio/templates/portfolio/email/rebalancing_report.html +34 -0
- wbportfolio/templates/portfolio/macro/macro_review.html +88 -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-1.43.1.dist-info/METADATA +22 -0
- wbportfolio-1.43.1.dist-info/RECORD +506 -0
- wbportfolio-1.43.1.dist-info/WHEEL +5 -0
- wbportfolio-1.43.1.dist-info/licenses/LICENSE +4 -0
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml"
|
|
3
|
+
xmlns:o="urn:schemas-microsoft-com:office:office">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="utf-8"> <!-- utf-8 works for most cases -->
|
|
7
|
+
<meta name="viewport" content="width=device-width"> <!-- Forcing initial-scale shouldn't be necessary -->
|
|
8
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- Use the latest (edge) version of IE rendering engine -->
|
|
9
|
+
<meta name="x-apple-disable-message-reformatting"> <!-- Disable auto-scale in iOS 10 Mail entirely -->
|
|
10
|
+
<meta http-equiv="Content-Type" content="text/html charset=UTF-8" />
|
|
11
|
+
<title>{{ email_title }}</title> <!-- The title tag shows in email notifications, like Android 4.4. -->
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
<style type="text/css">
|
|
15
|
+
table {
|
|
16
|
+
border-collapse: separate;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
a,
|
|
20
|
+
a:link,
|
|
21
|
+
a:visited {
|
|
22
|
+
text-decoration: none;
|
|
23
|
+
color: #00788a;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
a:hover {
|
|
27
|
+
text-decoration: underline;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
h2,
|
|
31
|
+
h2 a,
|
|
32
|
+
h2 a:visited,
|
|
33
|
+
h3,
|
|
34
|
+
h3 a,
|
|
35
|
+
h3 a:visited,
|
|
36
|
+
h4,
|
|
37
|
+
h5,
|
|
38
|
+
h6,
|
|
39
|
+
.t_cht {
|
|
40
|
+
color: #000 !important;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
.ExternalClass p,
|
|
44
|
+
.ExternalClass span,
|
|
45
|
+
.ExternalClass font,
|
|
46
|
+
.ExternalClass td {
|
|
47
|
+
line-height: 100%;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
.ExternalClass {
|
|
51
|
+
width: 100%;
|
|
52
|
+
}
|
|
53
|
+
</style>
|
|
54
|
+
</style>
|
|
55
|
+
<!-- CSS Reset : BEGIN -->
|
|
56
|
+
<style>
|
|
57
|
+
/* What it does: Remove spaces around the email design added by some email clients. */
|
|
58
|
+
/* Beware: It can remove the padding / margin and add a background color to the compose a reply window. */
|
|
59
|
+
html,
|
|
60
|
+
body {
|
|
61
|
+
margin: 0 auto !important;
|
|
62
|
+
padding: 0 !important;
|
|
63
|
+
height: 100% !important;
|
|
64
|
+
width: 100% !important;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/* What it does: Stops email clients resizing small text. */
|
|
68
|
+
* {
|
|
69
|
+
-ms-text-size-adjust: 100%;
|
|
70
|
+
-webkit-text-size-adjust: 100%;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* What it does: Centers email on Android 4.4 */
|
|
74
|
+
div[style*="margin: 16px 0"] {
|
|
75
|
+
margin: 0 !important;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* What it does: Stops Outlook from adding extra spacing to tables. */
|
|
79
|
+
table,
|
|
80
|
+
td {
|
|
81
|
+
mso-table-lspace: 0pt !important;
|
|
82
|
+
mso-table-rspace: 0pt !important;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/* What it does: Fixes webkit padding issue. Fix for Yahoo mail table alignment bug. Applies table-layout to the first 2 tables then removes for anything nested deeper. */
|
|
86
|
+
table {
|
|
87
|
+
border-spacing: 0 !important;
|
|
88
|
+
border-collapse: collapse !important;
|
|
89
|
+
table-layout: fixed !important;
|
|
90
|
+
margin: 0 auto !important;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
table table table {
|
|
94
|
+
table-layout: auto;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* What it does: Uses a better rendering method when resizing images in IE. */
|
|
98
|
+
img {
|
|
99
|
+
-ms-interpolation-mode: bicubic;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/* What it does: A work-around for email clients meddling in triggered links. */
|
|
103
|
+
*[x-apple-data-detectors],
|
|
104
|
+
/* iOS */
|
|
105
|
+
.x-gmail-data-detectors,
|
|
106
|
+
/* Gmail */
|
|
107
|
+
.x-gmail-data-detectors *,
|
|
108
|
+
.aBn {
|
|
109
|
+
border-bottom: 0 !important;
|
|
110
|
+
cursor: default !important;
|
|
111
|
+
color: inherit !important;
|
|
112
|
+
text-decoration: none !important;
|
|
113
|
+
font-size: inherit !important;
|
|
114
|
+
font-family: inherit !important;
|
|
115
|
+
font-weight: inherit !important;
|
|
116
|
+
line-height: inherit !important;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* What it does: Prevents Gmail from displaying an download button on large, non-linked images. */
|
|
120
|
+
.a6S {
|
|
121
|
+
display: none !important;
|
|
122
|
+
opacity: 0.01 !important;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/* If the above doesn't work, add a .g-img class to any image in question. */
|
|
126
|
+
img.g-img+div {
|
|
127
|
+
display: none !important;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
/* What it does: Prevents underlining the button text in Windows 10 */
|
|
131
|
+
.button-link {
|
|
132
|
+
text-decoration: none !important;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* What it does: Removes right gutter in Gmail iOS app: https://github.com/TedGoas/Cerberus/issues/89 */
|
|
136
|
+
/* Create one of these media queries for each additional viewport size you'd like to fix */
|
|
137
|
+
|
|
138
|
+
/* iPhone 4, 4S, 5, 5S, 5C, and 5SE */
|
|
139
|
+
@media only screen and (min-device-width: 320px) and (max-device-width: 374px) {
|
|
140
|
+
.email-container {
|
|
141
|
+
min-width: 320px !important;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* iPhone 6, 6S, 7, 8, and X */
|
|
146
|
+
@media only screen and (min-device-width: 375px) and (max-device-width: 413px) {
|
|
147
|
+
.email-container {
|
|
148
|
+
min-width: 375px !important;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/* iPhone 6+, 7+, and 8+ */
|
|
153
|
+
@media only screen and (min-device-width: 414px) {
|
|
154
|
+
.email-container {
|
|
155
|
+
min-width: 414px !important;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Google webfonts. Recommended to include the .woff version for cross-client compatibility.
|
|
161
|
+
*/
|
|
162
|
+
@media screen {
|
|
163
|
+
@font-face {
|
|
164
|
+
font-family: 'Source Sans Pro';
|
|
165
|
+
font-style: normal;
|
|
166
|
+
font-weight: 400;
|
|
167
|
+
src: local('Source Sans Pro Regular'), local('SourceSansPro-Regular'), url(https://fonts.gstatic.com/s/sourcesanspro/v10/ODelI1aHBYDBqgeIAH2zlBM0YzuT7MdOe03otPbuUS0.woff) format('woff');
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
@font-face {
|
|
171
|
+
font-family: 'Source Sans Pro';
|
|
172
|
+
font-style: normal;
|
|
173
|
+
font-weight: 700;
|
|
174
|
+
src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url(https://fonts.gstatic.com/s/sourcesanspro/v10/toadOcfmlt9b38dHJxOBGFkQc6VGVFSmCnC_l7QZG60.woff) format('woff');
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Avoid browser level font resizing.
|
|
180
|
+
* 1. Windows Mobile
|
|
181
|
+
* 2. iOS / OSX
|
|
182
|
+
*/
|
|
183
|
+
body,
|
|
184
|
+
table,
|
|
185
|
+
td,
|
|
186
|
+
a {
|
|
187
|
+
-ms-text-size-adjust: 100%;
|
|
188
|
+
/* 1 */
|
|
189
|
+
-webkit-text-size-adjust: 100%;
|
|
190
|
+
/* 2 */
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Remove extra space added to tables and cells in Outlook.
|
|
195
|
+
*/
|
|
196
|
+
table,
|
|
197
|
+
td {
|
|
198
|
+
mso-table-rspace: 0pt;
|
|
199
|
+
mso-table-lspace: 0pt;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Better fluid images in Internet Explorer.
|
|
204
|
+
*/
|
|
205
|
+
img {
|
|
206
|
+
-ms-interpolation-mode: bicubic;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Remove blue links for iOS devices.
|
|
211
|
+
*/
|
|
212
|
+
a[x-apple-data-detectors] {
|
|
213
|
+
font-family: inherit !important;
|
|
214
|
+
font-size: inherit !important;
|
|
215
|
+
font-weight: inherit !important;
|
|
216
|
+
line-height: inherit !important;
|
|
217
|
+
color: inherit !important;
|
|
218
|
+
text-decoration: none !important;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Fix centering issues in Android 4.4.
|
|
223
|
+
*/
|
|
224
|
+
div[style*="margin: 16px 0;"] {
|
|
225
|
+
margin: 0 !important;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
body {
|
|
229
|
+
width: 100% !important;
|
|
230
|
+
height: 100% !important;
|
|
231
|
+
padding: 0 !important;
|
|
232
|
+
margin: 0 !important;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Collapse table borders to avoid space between cells.
|
|
237
|
+
*/
|
|
238
|
+
table {
|
|
239
|
+
border-collapse: collapse !important;
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
a {
|
|
243
|
+
color: #1a82e2;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
img {
|
|
247
|
+
height: auto;
|
|
248
|
+
line-height: 100%;
|
|
249
|
+
text-decoration: none;
|
|
250
|
+
border: 0;
|
|
251
|
+
outline: none;
|
|
252
|
+
}
|
|
253
|
+
</style>
|
|
254
|
+
<!-- CSS Reset : END -->
|
|
255
|
+
|
|
256
|
+
<style>
|
|
257
|
+
.fluid {
|
|
258
|
+
width: 100%;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.fixed {
|
|
262
|
+
width: 800px;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
#body-table {
|
|
266
|
+
width: 100%;
|
|
267
|
+
margin: auto;
|
|
268
|
+
border-collapse: collapse;
|
|
269
|
+
table-layout: fixed;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
#body-table #white-row> .white-col{
|
|
273
|
+
height: 25px;
|
|
274
|
+
background-color: #eaf2ff;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
#body-table #first-row>.spacer-left,
|
|
278
|
+
#body-table #first-row>.spacer-right {
|
|
279
|
+
height: 44px;
|
|
280
|
+
background-color: white;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
#body-table #title-row>.spacer-left,
|
|
284
|
+
#body-table #title-row>.spacer-right {
|
|
285
|
+
height: 50px;
|
|
286
|
+
background-color: #eaf2ff;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
#body-table #title-logo {
|
|
290
|
+
position: relative;
|
|
291
|
+
height: 90px;
|
|
292
|
+
vertical-align: middle;
|
|
293
|
+
text-align: center;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
#body-table #content-row>.spacer-left,
|
|
297
|
+
#body-table #content-row>.spacer-right {
|
|
298
|
+
background-color: #eaf2ff;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
#body-table #content-row>#body-content {
|
|
302
|
+
position: relative;
|
|
303
|
+
background-color: #fff;
|
|
304
|
+
padding: 30px;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
#body-table #spacer-row>.spacer-left,
|
|
308
|
+
#body-table #spacer-row>.spacer-middle,
|
|
309
|
+
#body-table #spacer-row>.spacer-right {
|
|
310
|
+
height: 50px;
|
|
311
|
+
background-color: #eaf2ff;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
#body-table #footer-row {
|
|
315
|
+
border-top: 1px solid #ccdff3;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
#body-table #footer-row>.spacer-left,
|
|
319
|
+
#body-table #footer-row>#footer-content,
|
|
320
|
+
#body-table #footer-row>.spacer-right {
|
|
321
|
+
background-color: #eaf2ff;
|
|
322
|
+
padding-top: 15px;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
#body-table #footer-row>#footer-content {
|
|
326
|
+
padding-bottom: 40px !important;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
#footer-content>p {
|
|
330
|
+
font-size: 10px !important;
|
|
331
|
+
color: #a4b3cb !important;
|
|
332
|
+
margin-top: 0 !important;
|
|
333
|
+
}
|
|
334
|
+
</style>
|
|
335
|
+
|
|
336
|
+
</head>
|
|
337
|
+
|
|
338
|
+
<body width="100%" bgcolor="white" style="margin: 0; mso-line-height-rule: exactly;text-align: center;">
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
<!-- Visually Hidden Preheader Text : BEGIN -->
|
|
342
|
+
<div
|
|
343
|
+
style="display: none; font-size: 1px; line-height: 1px; max-height: 0px; max-width: 0px; opacity: 0; overflow: hidden; mso-hide: all; font-family: sans-serif;">
|
|
344
|
+
{% block email_hidden_header %}
|
|
345
|
+
{% endblock %}
|
|
346
|
+
</div>
|
|
347
|
+
<!-- Visually Hidden Preheader Text : END -->
|
|
348
|
+
|
|
349
|
+
<!-- Email Body : BEGIN -->
|
|
350
|
+
<table id="body-table" role="presentation" cellspacing="0" cellpadding="0" border="0" align="center"
|
|
351
|
+
class="email-container">
|
|
352
|
+
<colgroup>
|
|
353
|
+
<col class="fluid">
|
|
354
|
+
<col class="fixed">
|
|
355
|
+
<col class="fluid">
|
|
356
|
+
</colgroup>
|
|
357
|
+
<tr id="white-row">
|
|
358
|
+
<td class="white-col"></td>
|
|
359
|
+
<td class="white-col"></td>
|
|
360
|
+
<td class="white-col"></td>
|
|
361
|
+
</tr>
|
|
362
|
+
<tr id="first-row">
|
|
363
|
+
<td class="spacer-left"></td>
|
|
364
|
+
<td rowspan="2" id="title-logo" style="background-color: #3c4859;">
|
|
365
|
+
<img width="800px" alt="Atonra logo" border="0"
|
|
366
|
+
style="width: 800px; max-width: 800px; position: absolute; top: 0; left: 0;"
|
|
367
|
+
src="https://atonra.fra1.digitaloceanspaces.com/public/atonra_banderol.png" alt="Logo">
|
|
368
|
+
</td>
|
|
369
|
+
|
|
370
|
+
<td class="spacer-right"></td>
|
|
371
|
+
</tr>
|
|
372
|
+
<tr id="title-row">
|
|
373
|
+
<td class="spacer-left"></td>
|
|
374
|
+
<td class="spacer-right"></td>
|
|
375
|
+
</tr>
|
|
376
|
+
<tr id="content-row">
|
|
377
|
+
<td class="spacer-left"></td>
|
|
378
|
+
<td id="body-content">
|
|
379
|
+
{% block body %}
|
|
380
|
+
<p style="margin: 0;" style="font-size: 16px; color: #3c4859; text-align: center;"><b>{{salutation}}</b></p>
|
|
381
|
+
{{content|safe}}
|
|
382
|
+
{% endblock %}
|
|
383
|
+
</td>
|
|
384
|
+
<td class="spacer-right"></td>
|
|
385
|
+
</tr>
|
|
386
|
+
<tr id="spacer-row">
|
|
387
|
+
<td class="spacer-left"></td>
|
|
388
|
+
<td class="spacer-middle"></td>
|
|
389
|
+
<td class="spacer-right"></td>
|
|
390
|
+
</tr>
|
|
391
|
+
<tr id="footer-row" style="background-color: #ccdff3; border-top: 1px solid #ccdff3;">
|
|
392
|
+
<td class="spacer-left"></td>
|
|
393
|
+
<td id="footer-content">
|
|
394
|
+
<p style="margin: 0;" style="text-align: center">
|
|
395
|
+
<b>AtonRâ Partners SA</b><br />
|
|
396
|
+
7, rue de la Croix d’Or, 1204 Geneva, Switzerland<br />
|
|
397
|
+
T +41 22 906 16 16<br />
|
|
398
|
+
<a href="https://www.atonra.ch" target="">Website</a>
|
|
399
|
+
</p>
|
|
400
|
+
<p style="margin: 0;" style="text-align: center"><b>About AtonRâ Partners:</b> AtonRâ Partners is an asset management
|
|
401
|
+
company, founded in
|
|
402
|
+
2004 with head office in Geneva, incorporated under Swiss law, duly approved by the Swiss Financial
|
|
403
|
+
Market Supervisory Authority (FINMA) under the Swiss Collective Investment Schemes Act. AtonRâ
|
|
404
|
+
Partners is a conviction-driven asset manager combining industrial and scientific research with
|
|
405
|
+
financial analysis. AtonRâ Partners focuses on long-term trends powerful enough to be turned into
|
|
406
|
+
thematic equity portfolios.</p>
|
|
407
|
+
{% if unsubscribe %}
|
|
408
|
+
<p style="margin: 0;" style="text-align: center">If you receive this email because you are subscribed to our mailing list:
|
|
409
|
+
Please feel free to {{unsubscribe|safe}} </p>
|
|
410
|
+
{% endif %}
|
|
411
|
+
</td>
|
|
412
|
+
<td class="spacer-right"></td>
|
|
413
|
+
</tr>
|
|
414
|
+
|
|
415
|
+
</table>
|
|
416
|
+
<!-- Email Footer : END -->
|
|
417
|
+
|
|
418
|
+
</body>
|
|
419
|
+
|
|
420
|
+
</html>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{% load portfolio_tags %}
|
|
2
|
+
{% load mathfilters %}
|
|
3
|
+
<style>
|
|
4
|
+
.fixed {
|
|
5
|
+
width: 700px;
|
|
6
|
+
}
|
|
7
|
+
</style>
|
|
8
|
+
<p>Please find bellow the rebalancing summary that the system automatically detected</p>
|
|
9
|
+
</br>
|
|
10
|
+
<p>We detected {{map_rebalancing|length}} rebalanced equity that day.</p>
|
|
11
|
+
{% for equity_repr, report_dict in map_rebalancing.items %}
|
|
12
|
+
<p><b>{{ equity_repr }}</b></p>
|
|
13
|
+
<table style="width: 100%; border-collapse: collapse; table-layout: fixed;">
|
|
14
|
+
<colgroup>
|
|
15
|
+
<col span="1" style="width: 85%;text-align: left;">
|
|
16
|
+
<col span="1" style="width: 15%;">
|
|
17
|
+
</colgroup>
|
|
18
|
+
<tr>
|
|
19
|
+
<th style="text-align: left;">Product</th>
|
|
20
|
+
<th>Weight Δ</th>
|
|
21
|
+
</tr>
|
|
22
|
+
{% for product_repr, value in report_dict.items %}
|
|
23
|
+
<tr>
|
|
24
|
+
{% if value|abs <= rebalancing_threshold %}
|
|
25
|
+
<td style="background-color: rgb(241, 72, 50)">{{ product_repr }}</td>
|
|
26
|
+
<td style="background-color: rgb(241, 72, 50)">{{ value|percent_filter:3 }}</td>
|
|
27
|
+
{% else %}
|
|
28
|
+
<td style="background-color: rgb(110, 207, 20)">{{ product_repr }}</td>
|
|
29
|
+
<td style="background-color: rgb(110, 207, 20)">{{ value|percent_filter:3 }}</td>
|
|
30
|
+
{% endif %}
|
|
31
|
+
</tr>
|
|
32
|
+
{% endfor %}
|
|
33
|
+
</table>
|
|
34
|
+
{% endfor %}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
{% load static %}
|
|
2
|
+
|
|
3
|
+
<!DOCTYPE html>
|
|
4
|
+
<html lang="en">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="UTF-8" />
|
|
7
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
8
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
9
|
+
<title>Macro Review</title>
|
|
10
|
+
<link
|
|
11
|
+
rel="stylesheet"
|
|
12
|
+
href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.9.4/css/bulma.min.css"
|
|
13
|
+
/>
|
|
14
|
+
<link rel="stylesheet" href="{% static 'wbportfolio/css/macro_review.css' %}" />
|
|
15
|
+
<style>
|
|
16
|
+
ul{
|
|
17
|
+
list-style-type: disc;
|
|
18
|
+
}
|
|
19
|
+
h1 {
|
|
20
|
+
display: block;
|
|
21
|
+
font-size: 2em;
|
|
22
|
+
margin-top: 0.67em;
|
|
23
|
+
margin-bottom: 0.67em;
|
|
24
|
+
margin-left: 0;
|
|
25
|
+
margin-right: 0;
|
|
26
|
+
font-weight: bold;
|
|
27
|
+
}
|
|
28
|
+
h2 {
|
|
29
|
+
display: block;
|
|
30
|
+
font-size: 1.5em;
|
|
31
|
+
margin-top: 0.83em;
|
|
32
|
+
margin-bottom: 0.83em;
|
|
33
|
+
margin-left: 0;
|
|
34
|
+
margin-right: 0;
|
|
35
|
+
font-weight: bold;
|
|
36
|
+
}
|
|
37
|
+
h3 {
|
|
38
|
+
display: block;
|
|
39
|
+
font-size: 1.17em;
|
|
40
|
+
margin-top: 1em;
|
|
41
|
+
margin-bottom: 1em;
|
|
42
|
+
margin-left: 0;
|
|
43
|
+
margin-right: 0;
|
|
44
|
+
font-weight: bold;
|
|
45
|
+
}
|
|
46
|
+
h4 {
|
|
47
|
+
display: block;
|
|
48
|
+
margin-top: 1.33em;
|
|
49
|
+
margin-bottom: 1.33em;
|
|
50
|
+
margin-left: 0;
|
|
51
|
+
margin-right: 0;
|
|
52
|
+
font-weight: bold;
|
|
53
|
+
}
|
|
54
|
+
h5 {
|
|
55
|
+
display: block;
|
|
56
|
+
font-size: .83em;
|
|
57
|
+
margin-top: 1.67em;
|
|
58
|
+
margin-bottom: 1.67em;
|
|
59
|
+
margin-left: 0;
|
|
60
|
+
margin-right: 0;
|
|
61
|
+
font-weight: bold;
|
|
62
|
+
}
|
|
63
|
+
h6 {
|
|
64
|
+
display: block;
|
|
65
|
+
font-size: .67em;
|
|
66
|
+
margin-top: 2.33em;
|
|
67
|
+
margin-bottom: 2.33em;
|
|
68
|
+
margin-left: 0;
|
|
69
|
+
margin-right: 0;
|
|
70
|
+
font-weight: bold;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
</style>
|
|
74
|
+
</head>
|
|
75
|
+
<body>
|
|
76
|
+
<div class="box page-header">
|
|
77
|
+
<img class="page-logo" src="{{ logo.url }}" />
|
|
78
|
+
<div>
|
|
79
|
+
<strong>{{ review_title }} <br>Review from {{ start }} to {{ end }}.</strong>
|
|
80
|
+
</div>
|
|
81
|
+
</div>
|
|
82
|
+
<div class="box">
|
|
83
|
+
{% if comment %}
|
|
84
|
+
{{ comment|safe }}
|
|
85
|
+
{% endif %}
|
|
86
|
+
</div>
|
|
87
|
+
</body>
|
|
88
|
+
</html>
|
|
File without changes
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
from datetime import date
|
|
2
|
+
|
|
3
|
+
from faker import Faker
|
|
4
|
+
from pandas.tseries.offsets import BDay
|
|
5
|
+
from wbcompliance.factories.risk_management import (
|
|
6
|
+
RiskRuleFactory,
|
|
7
|
+
RuleBackendFactory,
|
|
8
|
+
RuleThresholdFactory,
|
|
9
|
+
)
|
|
10
|
+
from wbcore.contrib.authentication.factories import (
|
|
11
|
+
InternalUserFactory,
|
|
12
|
+
SuperUserFactory,
|
|
13
|
+
)
|
|
14
|
+
from wbcore.contrib.currency.factories import CurrencyFactory, CurrencyFXRatesFactory
|
|
15
|
+
from wbcore.contrib.directory.factories.entries import (
|
|
16
|
+
CompanyFactory,
|
|
17
|
+
CompanyTypeFactory,
|
|
18
|
+
CustomerStatusFactory,
|
|
19
|
+
EntryFactory,
|
|
20
|
+
PersonFactory,
|
|
21
|
+
)
|
|
22
|
+
from wbcore.contrib.geography.factories import CityFactory, CountryFactory, StateFactory
|
|
23
|
+
from wbcore.contrib.io.factories import (
|
|
24
|
+
DataBackendFactory,
|
|
25
|
+
ImportSourceFactory,
|
|
26
|
+
ParserHandlerFactory,
|
|
27
|
+
ProviderFactory,
|
|
28
|
+
SourceFactory,
|
|
29
|
+
)
|
|
30
|
+
from wbcrm.factories import AccountFactory, AccountRoleFactory, AccountWithOwnerFactory
|
|
31
|
+
from wbfdm.factories import (
|
|
32
|
+
CashFactory,
|
|
33
|
+
ClassificationFactory,
|
|
34
|
+
ClassificationGroupFactory,
|
|
35
|
+
EquityFactory,
|
|
36
|
+
ExchangeFactory,
|
|
37
|
+
InstrumentFactory,
|
|
38
|
+
InstrumentListFactory,
|
|
39
|
+
InstrumentPriceFactory,
|
|
40
|
+
InstrumentTypeFactory,
|
|
41
|
+
)
|
|
42
|
+
from wbportfolio.factories import (
|
|
43
|
+
AccountReconciliationFactory,
|
|
44
|
+
AccountReconciliationLineFactory,
|
|
45
|
+
AdjustmentFactory,
|
|
46
|
+
AssetPositionFactory,
|
|
47
|
+
ClaimFactory,
|
|
48
|
+
CustodianFactory,
|
|
49
|
+
CustomerTradeFactory,
|
|
50
|
+
DailyPortfolioCashFlowFactory,
|
|
51
|
+
DividendTransactionsFactory,
|
|
52
|
+
FeesFactory,
|
|
53
|
+
IndexFactory,
|
|
54
|
+
IndexProductFactory,
|
|
55
|
+
InstrumentPortfolioThroughModelFactory,
|
|
56
|
+
ManagerPortfolioRoleFactory,
|
|
57
|
+
ModelPortfolioFactory,
|
|
58
|
+
ModelPortfolioWithBaseProductFactory,
|
|
59
|
+
NegativeClaimFactory,
|
|
60
|
+
PortfolioCashTargetFactory,
|
|
61
|
+
PortfolioFactory,
|
|
62
|
+
PortfolioSwingPricingFactory,
|
|
63
|
+
ProductFactory,
|
|
64
|
+
ProductGroupFactory,
|
|
65
|
+
ProductGroupRepresentantFactory,
|
|
66
|
+
ProductPortfolioRoleFactory,
|
|
67
|
+
TradeFactory,
|
|
68
|
+
TradeProposalFactory,
|
|
69
|
+
WhiteLabelProductFactory,
|
|
70
|
+
)
|
|
71
|
+
from wbportfolio.factories.synchronization import (
|
|
72
|
+
CrontabScheduleFactory,
|
|
73
|
+
PeriodicTaskFactory,
|
|
74
|
+
PortfolioSynchronizationFactory,
|
|
75
|
+
PriceComputationFactory,
|
|
76
|
+
SynchronizationTaskFactory,
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
from wbcore.tests.conftest import * # isort:skip
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
fake = Faker()
|
|
83
|
+
|
|
84
|
+
register(AccountFactory)
|
|
85
|
+
register(AccountWithOwnerFactory)
|
|
86
|
+
register(AccountRoleFactory)
|
|
87
|
+
|
|
88
|
+
register(ImportSourceFactory)
|
|
89
|
+
register(DataBackendFactory)
|
|
90
|
+
register(ProviderFactory)
|
|
91
|
+
register(SourceFactory)
|
|
92
|
+
register(ParserHandlerFactory)
|
|
93
|
+
|
|
94
|
+
register(AssetPositionFactory)
|
|
95
|
+
register(ProductFactory)
|
|
96
|
+
register(ProductGroupFactory)
|
|
97
|
+
register(ProductGroupRepresentantFactory)
|
|
98
|
+
register(PortfolioFactory)
|
|
99
|
+
register(InstrumentPortfolioThroughModelFactory)
|
|
100
|
+
register(ModelPortfolioFactory)
|
|
101
|
+
register(ModelPortfolioWithBaseProductFactory, "model_portfolio_with_base_product")
|
|
102
|
+
register(TradeFactory)
|
|
103
|
+
register(CustomerTradeFactory)
|
|
104
|
+
register(TradeProposalFactory)
|
|
105
|
+
register(DividendTransactionsFactory)
|
|
106
|
+
register(FeesFactory)
|
|
107
|
+
register(WhiteLabelProductFactory, "white_label_product")
|
|
108
|
+
register(InstrumentPriceFactory)
|
|
109
|
+
register(IndexProductFactory, "index_product")
|
|
110
|
+
register(CurrencyFXRatesFactory)
|
|
111
|
+
register(ProductPortfolioRoleFactory, "product_portfolio_role")
|
|
112
|
+
register(ManagerPortfolioRoleFactory, "manager_portfolio_role")
|
|
113
|
+
|
|
114
|
+
register(CurrencyFactory)
|
|
115
|
+
register(CityFactory)
|
|
116
|
+
register(StateFactory)
|
|
117
|
+
register(CountryFactory)
|
|
118
|
+
register(ContinentFactory)
|
|
119
|
+
|
|
120
|
+
register(CompanyFactory)
|
|
121
|
+
register(PersonFactory)
|
|
122
|
+
register(InternalUserFactory)
|
|
123
|
+
register(EntryFactory)
|
|
124
|
+
register(CustomerStatusFactory)
|
|
125
|
+
register(CompanyTypeFactory)
|
|
126
|
+
|
|
127
|
+
register(UserFactory)
|
|
128
|
+
register(SuperUserFactory, "superuser")
|
|
129
|
+
register(CustodianFactory)
|
|
130
|
+
|
|
131
|
+
register(CrontabScheduleFactory)
|
|
132
|
+
register(PeriodicTaskFactory)
|
|
133
|
+
register(SynchronizationTaskFactory)
|
|
134
|
+
register(PortfolioSynchronizationFactory)
|
|
135
|
+
register(PriceComputationFactory)
|
|
136
|
+
register(AdjustmentFactory)
|
|
137
|
+
register(IndexFactory)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
register(RuleThresholdFactory)
|
|
141
|
+
register(RiskRuleFactory)
|
|
142
|
+
register(RuleBackendFactory)
|
|
143
|
+
|
|
144
|
+
register(ClaimFactory)
|
|
145
|
+
register(NegativeClaimFactory, "negative_claim")
|
|
146
|
+
|
|
147
|
+
register(InstrumentFactory)
|
|
148
|
+
register(InstrumentTypeFactory)
|
|
149
|
+
register(EquityFactory, "equity")
|
|
150
|
+
register(CashFactory, "cash")
|
|
151
|
+
register(InstrumentListFactory)
|
|
152
|
+
register(ExchangeFactory)
|
|
153
|
+
register(ClassificationFactory)
|
|
154
|
+
register(ClassificationGroupFactory)
|
|
155
|
+
register(PortfolioSwingPricingFactory)
|
|
156
|
+
register(PortfolioCashTargetFactory)
|
|
157
|
+
register(DailyPortfolioCashFlowFactory)
|
|
158
|
+
|
|
159
|
+
register(AccountReconciliationFactory)
|
|
160
|
+
register(AccountReconciliationLineFactory)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
pre_migrate.connect(app_pre_migration, sender=apps.get_app_config("wbportfolio"))
|
|
164
|
+
from .signals import * # noqa: F401
|