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.

Files changed (506) hide show
  1. wbportfolio/__init__.py +1 -0
  2. wbportfolio/admin/__init__.py +12 -0
  3. wbportfolio/admin/asset.py +47 -0
  4. wbportfolio/admin/custodians.py +9 -0
  5. wbportfolio/admin/portfolio.py +127 -0
  6. wbportfolio/admin/portfolio_relationships.py +22 -0
  7. wbportfolio/admin/product_groups.py +42 -0
  8. wbportfolio/admin/products.py +80 -0
  9. wbportfolio/admin/reconciliations.py +14 -0
  10. wbportfolio/admin/registers.py +17 -0
  11. wbportfolio/admin/roles.py +19 -0
  12. wbportfolio/admin/synchronization/__init__.py +2 -0
  13. wbportfolio/admin/synchronization/admin.py +114 -0
  14. wbportfolio/admin/synchronization/portfolio_synchronization.py +18 -0
  15. wbportfolio/admin/synchronization/price_computation.py +21 -0
  16. wbportfolio/admin/transactions/__init__.py +5 -0
  17. wbportfolio/admin/transactions/claim.py +16 -0
  18. wbportfolio/admin/transactions/dividends.py +14 -0
  19. wbportfolio/admin/transactions/fees.py +35 -0
  20. wbportfolio/admin/transactions/trades.py +49 -0
  21. wbportfolio/admin/transactions/transactions.py +37 -0
  22. wbportfolio/analysis/__init__.py +0 -0
  23. wbportfolio/analysis/claims.py +235 -0
  24. wbportfolio/apps.py +5 -0
  25. wbportfolio/contrib/__init__.py +0 -0
  26. wbportfolio/contrib/company_portfolio/__init__.py +0 -0
  27. wbportfolio/contrib/company_portfolio/admin.py +28 -0
  28. wbportfolio/contrib/company_portfolio/apps.py +29 -0
  29. wbportfolio/contrib/company_portfolio/configs/__init__.py +3 -0
  30. wbportfolio/contrib/company_portfolio/configs/display.py +182 -0
  31. wbportfolio/contrib/company_portfolio/configs/endpoints.py +34 -0
  32. wbportfolio/contrib/company_portfolio/configs/previews.py +37 -0
  33. wbportfolio/contrib/company_portfolio/constants.py +1 -0
  34. wbportfolio/contrib/company_portfolio/dynamic_preferences_registry.py +87 -0
  35. wbportfolio/contrib/company_portfolio/factories.py +32 -0
  36. wbportfolio/contrib/company_portfolio/filters.py +127 -0
  37. wbportfolio/contrib/company_portfolio/management.py +19 -0
  38. wbportfolio/contrib/company_portfolio/migrations/0001_initial.py +214 -0
  39. wbportfolio/contrib/company_portfolio/migrations/__init__.py +0 -0
  40. wbportfolio/contrib/company_portfolio/models.py +334 -0
  41. wbportfolio/contrib/company_portfolio/scripts.py +76 -0
  42. wbportfolio/contrib/company_portfolio/serializers.py +303 -0
  43. wbportfolio/contrib/company_portfolio/tasks.py +19 -0
  44. wbportfolio/contrib/company_portfolio/tests/__init__.py +0 -0
  45. wbportfolio/contrib/company_portfolio/tests/conftest.py +161 -0
  46. wbportfolio/contrib/company_portfolio/tests/test_models.py +161 -0
  47. wbportfolio/contrib/company_portfolio/urls.py +29 -0
  48. wbportfolio/contrib/company_portfolio/viewsets.py +195 -0
  49. wbportfolio/defaults/__init__.py +0 -0
  50. wbportfolio/defaults/fees/__init__.py +0 -0
  51. wbportfolio/defaults/fees/default.py +92 -0
  52. wbportfolio/defaults/portfolio/__init__.py +0 -0
  53. wbportfolio/defaults/portfolio/default_rebalancing.py +45 -0
  54. wbportfolio/dynamic_preferences_registry.py +58 -0
  55. wbportfolio/factories/__init__.py +35 -0
  56. wbportfolio/factories/adjustments.py +17 -0
  57. wbportfolio/factories/assets.py +75 -0
  58. wbportfolio/factories/claim.py +39 -0
  59. wbportfolio/factories/custodians.py +11 -0
  60. wbportfolio/factories/dividends.py +14 -0
  61. wbportfolio/factories/fees.py +15 -0
  62. wbportfolio/factories/indexes.py +17 -0
  63. wbportfolio/factories/portfolio_cash_flow.py +20 -0
  64. wbportfolio/factories/portfolio_cash_targets.py +15 -0
  65. wbportfolio/factories/portfolio_swing_pricings.py +15 -0
  66. wbportfolio/factories/portfolios.py +59 -0
  67. wbportfolio/factories/product_groups.py +28 -0
  68. wbportfolio/factories/products.py +56 -0
  69. wbportfolio/factories/pytest_utils.py +121 -0
  70. wbportfolio/factories/reconciliations.py +23 -0
  71. wbportfolio/factories/roles.py +20 -0
  72. wbportfolio/factories/synchronization.py +40 -0
  73. wbportfolio/factories/trades.py +35 -0
  74. wbportfolio/factories/transactions.py +21 -0
  75. wbportfolio/fdm/__init__.py +0 -0
  76. wbportfolio/fdm/tasks.py +12 -0
  77. wbportfolio/filters/__init__.py +32 -0
  78. wbportfolio/filters/assets.py +485 -0
  79. wbportfolio/filters/assets_and_net_new_money_progression.py +42 -0
  80. wbportfolio/filters/custodians.py +10 -0
  81. wbportfolio/filters/esg.py +22 -0
  82. wbportfolio/filters/performances.py +171 -0
  83. wbportfolio/filters/portfolios.py +24 -0
  84. wbportfolio/filters/positions.py +178 -0
  85. wbportfolio/filters/products.py +153 -0
  86. wbportfolio/filters/roles.py +26 -0
  87. wbportfolio/filters/signals.py +92 -0
  88. wbportfolio/filters/transactions/__init__.py +20 -0
  89. wbportfolio/filters/transactions/claim.py +394 -0
  90. wbportfolio/filters/transactions/fees.py +66 -0
  91. wbportfolio/filters/transactions/trades.py +248 -0
  92. wbportfolio/filters/transactions/transactions.py +98 -0
  93. wbportfolio/fixtures/product_factsheets.yaml +1 -0
  94. wbportfolio/fixtures/wbportfolio.yaml.gz +0 -0
  95. wbportfolio/fixtures/wbrisk_management.yaml.gz +0 -0
  96. wbportfolio/import_export/__init__.py +0 -0
  97. wbportfolio/import_export/backends/__init__.py +2 -0
  98. wbportfolio/import_export/backends/refinitiv/adjustment.py +40 -0
  99. wbportfolio/import_export/backends/ubs/__init__.py +3 -0
  100. wbportfolio/import_export/backends/ubs/asset_position.py +45 -0
  101. wbportfolio/import_export/backends/ubs/fees.py +63 -0
  102. wbportfolio/import_export/backends/ubs/instrument_price.py +44 -0
  103. wbportfolio/import_export/backends/ubs/mixin.py +15 -0
  104. wbportfolio/import_export/backends/utils.py +58 -0
  105. wbportfolio/import_export/backends/wbfdm/__init__.py +2 -0
  106. wbportfolio/import_export/backends/wbfdm/adjustment.py +50 -0
  107. wbportfolio/import_export/backends/wbfdm/dividend.py +16 -0
  108. wbportfolio/import_export/backends/wbfdm/mixin.py +15 -0
  109. wbportfolio/import_export/handlers/__init__.py +0 -0
  110. wbportfolio/import_export/handlers/adjustment.py +39 -0
  111. wbportfolio/import_export/handlers/asset_position.py +167 -0
  112. wbportfolio/import_export/handlers/dividend.py +80 -0
  113. wbportfolio/import_export/handlers/fees.py +58 -0
  114. wbportfolio/import_export/handlers/portfolio_cash_flow.py +57 -0
  115. wbportfolio/import_export/handlers/register.py +43 -0
  116. wbportfolio/import_export/handlers/trade.py +191 -0
  117. wbportfolio/import_export/parsers/__init__.py +0 -0
  118. wbportfolio/import_export/parsers/default_mapping.py +30 -0
  119. wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
  120. wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +63 -0
  121. wbportfolio/import_export/parsers/jpmorgan/fees.py +64 -0
  122. wbportfolio/import_export/parsers/jpmorgan/strategy.py +116 -0
  123. wbportfolio/import_export/parsers/jpmorgan/valuation.py +41 -0
  124. wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
  125. wbportfolio/import_export/parsers/leonteq/customer_trade.py +47 -0
  126. wbportfolio/import_export/parsers/leonteq/equity.py +81 -0
  127. wbportfolio/import_export/parsers/leonteq/fees.py +70 -0
  128. wbportfolio/import_export/parsers/leonteq/trade.py +94 -0
  129. wbportfolio/import_export/parsers/leonteq/valuation.py +39 -0
  130. wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
  131. wbportfolio/import_export/parsers/natixis/customer_trade.py +62 -0
  132. wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +66 -0
  133. wbportfolio/import_export/parsers/natixis/d1_equity.py +80 -0
  134. wbportfolio/import_export/parsers/natixis/d1_fees.py +58 -0
  135. wbportfolio/import_export/parsers/natixis/d1_trade.py +70 -0
  136. wbportfolio/import_export/parsers/natixis/d1_valuation.py +41 -0
  137. wbportfolio/import_export/parsers/natixis/dividend.py +53 -0
  138. wbportfolio/import_export/parsers/natixis/equity.py +60 -0
  139. wbportfolio/import_export/parsers/natixis/fees.py +53 -0
  140. wbportfolio/import_export/parsers/natixis/trade.py +63 -0
  141. wbportfolio/import_export/parsers/natixis/utils.py +76 -0
  142. wbportfolio/import_export/parsers/natixis/valuation.py +46 -0
  143. wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
  144. wbportfolio/import_export/parsers/refinitiv/adjustment.py +24 -0
  145. wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
  146. wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +70 -0
  147. wbportfolio/import_export/parsers/sg_lux/customer_trade.py +75 -0
  148. wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +140 -0
  149. wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +80 -0
  150. wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +57 -0
  151. wbportfolio/import_export/parsers/sg_lux/equity.py +161 -0
  152. wbportfolio/import_export/parsers/sg_lux/fees.py +56 -0
  153. wbportfolio/import_export/parsers/sg_lux/perf_fees.py +51 -0
  154. wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +29 -0
  155. wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +36 -0
  156. wbportfolio/import_export/parsers/sg_lux/registers.py +210 -0
  157. wbportfolio/import_export/parsers/sg_lux/sylk.py +248 -0
  158. wbportfolio/import_export/parsers/sg_lux/utils.py +36 -0
  159. wbportfolio/import_export/parsers/sg_lux/valuation.py +53 -0
  160. wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
  161. wbportfolio/import_export/parsers/societe_generale/customer_trade.py +54 -0
  162. wbportfolio/import_export/parsers/societe_generale/strategy.py +94 -0
  163. wbportfolio/import_export/parsers/societe_generale/valuation.py +37 -0
  164. wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
  165. wbportfolio/import_export/parsers/tellco/customer_trade.py +64 -0
  166. wbportfolio/import_export/parsers/tellco/equity.py +86 -0
  167. wbportfolio/import_export/parsers/tellco/valuation.py +52 -0
  168. wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
  169. wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
  170. wbportfolio/import_export/parsers/ubs/api/asset_position.py +106 -0
  171. wbportfolio/import_export/parsers/ubs/api/fees.py +31 -0
  172. wbportfolio/import_export/parsers/ubs/api/instrument_price.py +20 -0
  173. wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
  174. wbportfolio/import_export/parsers/ubs/customer_trade.py +60 -0
  175. wbportfolio/import_export/parsers/ubs/equity.py +97 -0
  176. wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +67 -0
  177. wbportfolio/import_export/parsers/ubs/valuation.py +52 -0
  178. wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
  179. wbportfolio/import_export/parsers/vontobel/asset_position.py +97 -0
  180. wbportfolio/import_export/parsers/vontobel/customer_trade.py +54 -0
  181. wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +40 -0
  182. wbportfolio/import_export/parsers/vontobel/instrument.py +34 -0
  183. wbportfolio/import_export/parsers/vontobel/management_fees.py +86 -0
  184. wbportfolio/import_export/parsers/vontobel/performance_fees.py +35 -0
  185. wbportfolio/import_export/parsers/vontobel/trade.py +38 -0
  186. wbportfolio/import_export/parsers/vontobel/utils.py +17 -0
  187. wbportfolio/import_export/parsers/vontobel/valuation.py +29 -0
  188. wbportfolio/import_export/resources/__init__.py +0 -0
  189. wbportfolio/import_export/resources/assets.py +68 -0
  190. wbportfolio/import_export/resources/trades.py +41 -0
  191. wbportfolio/import_export/utils.py +42 -0
  192. wbportfolio/jinja2/wbportfolio/sql/aum_nnm.sql +119 -0
  193. wbportfolio/kpi_handlers/nnm.py +163 -0
  194. wbportfolio/metric/__init__.py +0 -0
  195. wbportfolio/metric/backends/__init__.py +2 -0
  196. wbportfolio/metric/backends/base.py +86 -0
  197. wbportfolio/metric/backends/constants.py +222 -0
  198. wbportfolio/metric/backends/portfolio_base.py +255 -0
  199. wbportfolio/metric/backends/portfolio_esg.py +66 -0
  200. wbportfolio/metric/tests/__init__.py +0 -0
  201. wbportfolio/metric/tests/conftest.py +4 -0
  202. wbportfolio/metric/tests/test_portfolio_base.py +135 -0
  203. wbportfolio/metric/tests/test_portfolio_esg.py +69 -0
  204. wbportfolio/migrations/0001_initial_squashed.py +13848 -0
  205. wbportfolio/migrations/0002_product_default_sub_account_squashed_0039_alter_assetallocation_company_and_more.py +3836 -0
  206. wbportfolio/migrations/0040_instrument_financial_instrument.py +26 -0
  207. wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +129 -0
  208. wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +71 -0
  209. wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +238 -0
  210. wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +35 -0
  211. wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +26 -0
  212. wbportfolio/migrations/0046_add_product_default_account.py +166 -0
  213. wbportfolio/migrations/0047_remove_product_default_sub_account.py +14 -0
  214. wbportfolio/migrations/0048_alter_trade_status.py +29 -0
  215. wbportfolio/migrations/0049_trade_claimed_shares.py +25 -0
  216. wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +44 -0
  217. wbportfolio/migrations/0051_delete_macroreview.py +11 -0
  218. wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +888 -0
  219. wbportfolio/migrations/0053_remove_product_group.py +132 -0
  220. wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +270 -0
  221. wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +139 -0
  222. wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +56 -0
  223. wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +36 -0
  224. wbportfolio/migrations/0058_pmsinstrument.py +23 -0
  225. wbportfolio/migrations/0059_fees_unique_fees.py +51 -0
  226. wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +21 -0
  227. wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +175 -0
  228. wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +20 -0
  229. wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +133 -0
  230. wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +40 -0
  231. wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +73 -0
  232. wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +108 -0
  233. wbportfolio/migrations/0067_assetposition_unique_asset_position.py +77 -0
  234. wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +59 -0
  235. wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +56 -0
  236. wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +82 -0
  237. wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +22 -0
  238. wbportfolio/migrations/__init__.py +0 -0
  239. wbportfolio/models/__init__.py +26 -0
  240. wbportfolio/models/adjustments.py +246 -0
  241. wbportfolio/models/asset.py +869 -0
  242. wbportfolio/models/custodians.py +101 -0
  243. wbportfolio/models/indexes.py +33 -0
  244. wbportfolio/models/llm/wbcrm/analyze_relationship.py +58 -0
  245. wbportfolio/models/mixins/__init__.py +0 -0
  246. wbportfolio/models/mixins/instruments.py +127 -0
  247. wbportfolio/models/mixins/liquidity_stress_test.py +1307 -0
  248. wbportfolio/models/portfolio.py +1039 -0
  249. wbportfolio/models/portfolio_cash_flow.py +167 -0
  250. wbportfolio/models/portfolio_cash_targets.py +46 -0
  251. wbportfolio/models/portfolio_relationship.py +135 -0
  252. wbportfolio/models/portfolio_swing_pricings.py +51 -0
  253. wbportfolio/models/product_groups.py +230 -0
  254. wbportfolio/models/products.py +569 -0
  255. wbportfolio/models/reconciliations/__init__.py +2 -0
  256. wbportfolio/models/reconciliations/account_reconciliation_lines.py +192 -0
  257. wbportfolio/models/reconciliations/account_reconciliations.py +102 -0
  258. wbportfolio/models/reconciliations/reconciliations.py +25 -0
  259. wbportfolio/models/registers.py +132 -0
  260. wbportfolio/models/roles.py +208 -0
  261. wbportfolio/models/synchronization/__init__.py +3 -0
  262. wbportfolio/models/synchronization/portfolio_synchronization.py +292 -0
  263. wbportfolio/models/synchronization/price_computation.py +200 -0
  264. wbportfolio/models/synchronization/synchronization.py +188 -0
  265. wbportfolio/models/transactions/__init__.py +7 -0
  266. wbportfolio/models/transactions/claim.py +634 -0
  267. wbportfolio/models/transactions/dividends.py +31 -0
  268. wbportfolio/models/transactions/expiry.py +7 -0
  269. wbportfolio/models/transactions/fees.py +153 -0
  270. wbportfolio/models/transactions/trade_proposals.py +502 -0
  271. wbportfolio/models/transactions/trades.py +704 -0
  272. wbportfolio/models/transactions/transactions.py +211 -0
  273. wbportfolio/models/utils.py +12 -0
  274. wbportfolio/permissions.py +13 -0
  275. wbportfolio/pms/__init__.py +0 -0
  276. wbportfolio/pms/statistics/__init__.py +0 -0
  277. wbportfolio/pms/trading/__init__.py +1 -0
  278. wbportfolio/pms/trading/handler.py +164 -0
  279. wbportfolio/pms/typing.py +194 -0
  280. wbportfolio/preferences.py +6 -0
  281. wbportfolio/reports/__init__.py +0 -0
  282. wbportfolio/reports/monthly_position_report.py +74 -0
  283. wbportfolio/risk_management/__init__.py +0 -0
  284. wbportfolio/risk_management/backends/__init__.py +11 -0
  285. wbportfolio/risk_management/backends/accounts.py +166 -0
  286. wbportfolio/risk_management/backends/controversy_portfolio.py +63 -0
  287. wbportfolio/risk_management/backends/exposure_portfolio.py +203 -0
  288. wbportfolio/risk_management/backends/instrument_list_portfolio.py +89 -0
  289. wbportfolio/risk_management/backends/liquidity_risk.py +86 -0
  290. wbportfolio/risk_management/backends/liquidity_stress_instrument.py +86 -0
  291. wbportfolio/risk_management/backends/mixins.py +220 -0
  292. wbportfolio/risk_management/backends/product_integrity.py +111 -0
  293. wbportfolio/risk_management/backends/stop_loss_instrument.py +24 -0
  294. wbportfolio/risk_management/backends/stop_loss_portfolio.py +36 -0
  295. wbportfolio/risk_management/backends/ucits_portfolio.py +63 -0
  296. wbportfolio/risk_management/tests/__init__.py +0 -0
  297. wbportfolio/risk_management/tests/conftest.py +15 -0
  298. wbportfolio/risk_management/tests/test_accounts.py +98 -0
  299. wbportfolio/risk_management/tests/test_controversy_portfolio.py +33 -0
  300. wbportfolio/risk_management/tests/test_exposure_portfolio.py +94 -0
  301. wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +60 -0
  302. wbportfolio/risk_management/tests/test_liquidity_risk.py +47 -0
  303. wbportfolio/risk_management/tests/test_product_integrity.py +55 -0
  304. wbportfolio/risk_management/tests/test_stop_loss_instrument.py +110 -0
  305. wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +119 -0
  306. wbportfolio/risk_management/tests/test_ucits_portfolio.py +39 -0
  307. wbportfolio/serializers/__init__.py +42 -0
  308. wbportfolio/serializers/adjustments.py +24 -0
  309. wbportfolio/serializers/assets.py +166 -0
  310. wbportfolio/serializers/custodians.py +26 -0
  311. wbportfolio/serializers/portfolio_cash_flow.py +48 -0
  312. wbportfolio/serializers/portfolio_cash_targets.py +20 -0
  313. wbportfolio/serializers/portfolio_relationship.py +53 -0
  314. wbportfolio/serializers/portfolio_swing_pricing.py +20 -0
  315. wbportfolio/serializers/portfolios.py +143 -0
  316. wbportfolio/serializers/positions.py +76 -0
  317. wbportfolio/serializers/product_group.py +88 -0
  318. wbportfolio/serializers/products.py +331 -0
  319. wbportfolio/serializers/reconciliations.py +173 -0
  320. wbportfolio/serializers/registers.py +72 -0
  321. wbportfolio/serializers/roles.py +60 -0
  322. wbportfolio/serializers/signals.py +157 -0
  323. wbportfolio/serializers/synchronization.py +18 -0
  324. wbportfolio/serializers/transactions/__init__.py +24 -0
  325. wbportfolio/serializers/transactions/claim.py +310 -0
  326. wbportfolio/serializers/transactions/dividends.py +18 -0
  327. wbportfolio/serializers/transactions/expiry.py +18 -0
  328. wbportfolio/serializers/transactions/fees.py +32 -0
  329. wbportfolio/serializers/transactions/trades.py +315 -0
  330. wbportfolio/serializers/transactions/transactions.py +84 -0
  331. wbportfolio/static/wbportfolio/css/macro_review.css +17 -0
  332. wbportfolio/static/wbportfolio/markdown/documentation/account_holding_reconciliation.md +16 -0
  333. wbportfolio/static/wbportfolio/markdown/documentation/aggregate_asset_position_liquidity.md +25 -0
  334. wbportfolio/static/wbportfolio/markdown/documentation/company.md +78 -0
  335. wbportfolio/static/wbportfolio/markdown/documentation/earnings_instrument.md +14 -0
  336. wbportfolio/static/wbportfolio/markdown/documentation/financial_analysis_instrument_ratios.md +94 -0
  337. wbportfolio/static/wbportfolio/markdown/documentation/financial_statistics.md +44 -0
  338. wbportfolio/static/wbportfolio/markdown/documentation/person.md +70 -0
  339. wbportfolio/tasks.py +125 -0
  340. wbportfolio/templates/portfolio/email/customer_report.html +6 -0
  341. wbportfolio/templates/portfolio/email/customer_trade_notification.html +26 -0
  342. wbportfolio/templates/portfolio/email/email_base_template.html +420 -0
  343. wbportfolio/templates/portfolio/email/rebalancing_report.html +34 -0
  344. wbportfolio/templates/portfolio/macro/macro_review.html +88 -0
  345. wbportfolio/tests/__init__.py +0 -0
  346. wbportfolio/tests/conftest.py +164 -0
  347. wbportfolio/tests/models/__init__.py +0 -0
  348. wbportfolio/tests/models/test_account_reconciliation.py +191 -0
  349. wbportfolio/tests/models/test_assets.py +193 -0
  350. wbportfolio/tests/models/test_custodians.py +12 -0
  351. wbportfolio/tests/models/test_customer_trades.py +113 -0
  352. wbportfolio/tests/models/test_dividends.py +7 -0
  353. wbportfolio/tests/models/test_imports.py +192 -0
  354. wbportfolio/tests/models/test_instrument_mixins.py +48 -0
  355. wbportfolio/tests/models/test_merge.py +133 -0
  356. wbportfolio/tests/models/test_portfolio_cash_flow.py +112 -0
  357. wbportfolio/tests/models/test_portfolio_cash_targets.py +27 -0
  358. wbportfolio/tests/models/test_portfolio_swing_pricings.py +42 -0
  359. wbportfolio/tests/models/test_portfolios.py +676 -0
  360. wbportfolio/tests/models/test_product_groups.py +80 -0
  361. wbportfolio/tests/models/test_products.py +187 -0
  362. wbportfolio/tests/models/test_roles.py +82 -0
  363. wbportfolio/tests/models/test_splits.py +233 -0
  364. wbportfolio/tests/models/test_synchronization.py +617 -0
  365. wbportfolio/tests/models/transactions/__init__.py +0 -0
  366. wbportfolio/tests/models/transactions/test_claim.py +129 -0
  367. wbportfolio/tests/models/transactions/test_fees.py +65 -0
  368. wbportfolio/tests/models/transactions/test_trades.py +204 -0
  369. wbportfolio/tests/models/utils.py +13 -0
  370. wbportfolio/tests/serializers/__init__.py +0 -0
  371. wbportfolio/tests/serializers/test_claims.py +21 -0
  372. wbportfolio/tests/signals.py +151 -0
  373. wbportfolio/tests/tests.py +31 -0
  374. wbportfolio/tests/viewsets/__init__.py +0 -0
  375. wbportfolio/tests/viewsets/test_assets.py +67 -0
  376. wbportfolio/tests/viewsets/test_performances.py +72 -0
  377. wbportfolio/tests/viewsets/test_products.py +92 -0
  378. wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
  379. wbportfolio/tests/viewsets/transactions/test_claims.py +146 -0
  380. wbportfolio/urls.py +247 -0
  381. wbportfolio/utils.py +30 -0
  382. wbportfolio/viewsets/__init__.py +57 -0
  383. wbportfolio/viewsets/adjustments.py +46 -0
  384. wbportfolio/viewsets/assets.py +562 -0
  385. wbportfolio/viewsets/assets_and_net_new_money_progression.py +117 -0
  386. wbportfolio/viewsets/charts/__init__.py +1 -0
  387. wbportfolio/viewsets/charts/assets.py +247 -0
  388. wbportfolio/viewsets/configs/__init__.py +6 -0
  389. wbportfolio/viewsets/configs/buttons/__init__.py +23 -0
  390. wbportfolio/viewsets/configs/buttons/adjustments.py +13 -0
  391. wbportfolio/viewsets/configs/buttons/assets.py +145 -0
  392. wbportfolio/viewsets/configs/buttons/claims.py +83 -0
  393. wbportfolio/viewsets/configs/buttons/custodians.py +76 -0
  394. wbportfolio/viewsets/configs/buttons/fees.py +14 -0
  395. wbportfolio/viewsets/configs/buttons/mixins.py +88 -0
  396. wbportfolio/viewsets/configs/buttons/portfolios.py +115 -0
  397. wbportfolio/viewsets/configs/buttons/products.py +41 -0
  398. wbportfolio/viewsets/configs/buttons/reconciliations.py +65 -0
  399. wbportfolio/viewsets/configs/buttons/registers.py +11 -0
  400. wbportfolio/viewsets/configs/buttons/signals.py +68 -0
  401. wbportfolio/viewsets/configs/buttons/trade_proposals.py +25 -0
  402. wbportfolio/viewsets/configs/buttons/trades.py +144 -0
  403. wbportfolio/viewsets/configs/display/__init__.py +61 -0
  404. wbportfolio/viewsets/configs/display/adjustments.py +81 -0
  405. wbportfolio/viewsets/configs/display/assets.py +265 -0
  406. wbportfolio/viewsets/configs/display/claim.py +299 -0
  407. wbportfolio/viewsets/configs/display/custodians.py +24 -0
  408. wbportfolio/viewsets/configs/display/esg.py +88 -0
  409. wbportfolio/viewsets/configs/display/fees.py +133 -0
  410. wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +103 -0
  411. wbportfolio/viewsets/configs/display/portfolio_relationship.py +38 -0
  412. wbportfolio/viewsets/configs/display/portfolios.py +125 -0
  413. wbportfolio/viewsets/configs/display/positions.py +75 -0
  414. wbportfolio/viewsets/configs/display/product_groups.py +54 -0
  415. wbportfolio/viewsets/configs/display/product_performance.py +241 -0
  416. wbportfolio/viewsets/configs/display/products.py +249 -0
  417. wbportfolio/viewsets/configs/display/reconciliations.py +151 -0
  418. wbportfolio/viewsets/configs/display/registers.py +71 -0
  419. wbportfolio/viewsets/configs/display/roles.py +49 -0
  420. wbportfolio/viewsets/configs/display/trade_proposals.py +97 -0
  421. wbportfolio/viewsets/configs/display/trades.py +359 -0
  422. wbportfolio/viewsets/configs/display/transactions.py +55 -0
  423. wbportfolio/viewsets/configs/endpoints/__init__.py +75 -0
  424. wbportfolio/viewsets/configs/endpoints/adjustments.py +17 -0
  425. wbportfolio/viewsets/configs/endpoints/assets.py +115 -0
  426. wbportfolio/viewsets/configs/endpoints/claim.py +106 -0
  427. wbportfolio/viewsets/configs/endpoints/custodians.py +6 -0
  428. wbportfolio/viewsets/configs/endpoints/esg.py +14 -0
  429. wbportfolio/viewsets/configs/endpoints/fees.py +26 -0
  430. wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +23 -0
  431. wbportfolio/viewsets/configs/endpoints/portfolios.py +43 -0
  432. wbportfolio/viewsets/configs/endpoints/positions.py +18 -0
  433. wbportfolio/viewsets/configs/endpoints/product_groups.py +11 -0
  434. wbportfolio/viewsets/configs/endpoints/product_performance.py +29 -0
  435. wbportfolio/viewsets/configs/endpoints/products.py +37 -0
  436. wbportfolio/viewsets/configs/endpoints/reconciliations.py +31 -0
  437. wbportfolio/viewsets/configs/endpoints/roles.py +9 -0
  438. wbportfolio/viewsets/configs/endpoints/trade_proposals.py +17 -0
  439. wbportfolio/viewsets/configs/endpoints/trades.py +82 -0
  440. wbportfolio/viewsets/configs/endpoints/transactions.py +17 -0
  441. wbportfolio/viewsets/configs/menu/__init__.py +30 -0
  442. wbportfolio/viewsets/configs/menu/adjustments.py +8 -0
  443. wbportfolio/viewsets/configs/menu/assets.py +8 -0
  444. wbportfolio/viewsets/configs/menu/claim.py +41 -0
  445. wbportfolio/viewsets/configs/menu/custodians.py +11 -0
  446. wbportfolio/viewsets/configs/menu/fees.py +13 -0
  447. wbportfolio/viewsets/configs/menu/instrument_prices.py +10 -0
  448. wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +8 -0
  449. wbportfolio/viewsets/configs/menu/portfolios.py +15 -0
  450. wbportfolio/viewsets/configs/menu/positions.py +14 -0
  451. wbportfolio/viewsets/configs/menu/product_groups.py +10 -0
  452. wbportfolio/viewsets/configs/menu/product_performance.py +25 -0
  453. wbportfolio/viewsets/configs/menu/products.py +15 -0
  454. wbportfolio/viewsets/configs/menu/reconciliations.py +7 -0
  455. wbportfolio/viewsets/configs/menu/registers.py +10 -0
  456. wbportfolio/viewsets/configs/menu/roles.py +16 -0
  457. wbportfolio/viewsets/configs/menu/trades.py +18 -0
  458. wbportfolio/viewsets/configs/menu/transactions.py +8 -0
  459. wbportfolio/viewsets/configs/previews/__init__.py +1 -0
  460. wbportfolio/viewsets/configs/previews/portfolios.py +21 -0
  461. wbportfolio/viewsets/configs/titles/__init__.py +65 -0
  462. wbportfolio/viewsets/configs/titles/adjustments.py +19 -0
  463. wbportfolio/viewsets/configs/titles/assets.py +57 -0
  464. wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +6 -0
  465. wbportfolio/viewsets/configs/titles/claim.py +81 -0
  466. wbportfolio/viewsets/configs/titles/custodians.py +12 -0
  467. wbportfolio/viewsets/configs/titles/esg.py +10 -0
  468. wbportfolio/viewsets/configs/titles/fees.py +25 -0
  469. wbportfolio/viewsets/configs/titles/instrument_prices.py +20 -0
  470. wbportfolio/viewsets/configs/titles/portfolios.py +32 -0
  471. wbportfolio/viewsets/configs/titles/positions.py +11 -0
  472. wbportfolio/viewsets/configs/titles/product_groups.py +12 -0
  473. wbportfolio/viewsets/configs/titles/product_performance.py +16 -0
  474. wbportfolio/viewsets/configs/titles/products.py +6 -0
  475. wbportfolio/viewsets/configs/titles/registers.py +12 -0
  476. wbportfolio/viewsets/configs/titles/roles.py +23 -0
  477. wbportfolio/viewsets/configs/titles/trades.py +51 -0
  478. wbportfolio/viewsets/configs/titles/transactions.py +8 -0
  479. wbportfolio/viewsets/custodians.py +66 -0
  480. wbportfolio/viewsets/esg.py +165 -0
  481. wbportfolio/viewsets/mixins.py +48 -0
  482. wbportfolio/viewsets/portfolio_cash_flow.py +31 -0
  483. wbportfolio/viewsets/portfolio_cash_targets.py +8 -0
  484. wbportfolio/viewsets/portfolio_relationship.py +46 -0
  485. wbportfolio/viewsets/portfolio_swing_pricing.py +8 -0
  486. wbportfolio/viewsets/portfolios.py +154 -0
  487. wbportfolio/viewsets/positions.py +292 -0
  488. wbportfolio/viewsets/product_groups.py +84 -0
  489. wbportfolio/viewsets/product_performance.py +646 -0
  490. wbportfolio/viewsets/products.py +529 -0
  491. wbportfolio/viewsets/reconciliations.py +160 -0
  492. wbportfolio/viewsets/registers.py +75 -0
  493. wbportfolio/viewsets/roles.py +44 -0
  494. wbportfolio/viewsets/signals.py +42 -0
  495. wbportfolio/viewsets/synchronization.py +25 -0
  496. wbportfolio/viewsets/transactions/__init__.py +40 -0
  497. wbportfolio/viewsets/transactions/claim.py +933 -0
  498. wbportfolio/viewsets/transactions/fees.py +190 -0
  499. wbportfolio/viewsets/transactions/mixins.py +19 -0
  500. wbportfolio/viewsets/transactions/trade_proposals.py +93 -0
  501. wbportfolio/viewsets/transactions/trades.py +395 -0
  502. wbportfolio/viewsets/transactions/transactions.py +123 -0
  503. wbportfolio-1.43.1.dist-info/METADATA +22 -0
  504. wbportfolio-1.43.1.dist-info/RECORD +506 -0
  505. wbportfolio-1.43.1.dist-info/WHEEL +5 -0
  506. 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