wbportfolio 2.2.1__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of wbportfolio might be problematic. Click here for more details.

Files changed (486) 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 +157 -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 +224 -0
  92. wbportfolio/filters/transactions/transactions.py +98 -0
  93. wbportfolio/import_export/__init__.py +0 -0
  94. wbportfolio/import_export/backends/__init__.py +2 -0
  95. wbportfolio/import_export/backends/ubs/__init__.py +3 -0
  96. wbportfolio/import_export/backends/ubs/asset_position.py +45 -0
  97. wbportfolio/import_export/backends/ubs/fees.py +63 -0
  98. wbportfolio/import_export/backends/ubs/instrument_price.py +44 -0
  99. wbportfolio/import_export/backends/ubs/mixin.py +15 -0
  100. wbportfolio/import_export/backends/utils.py +58 -0
  101. wbportfolio/import_export/backends/wbfdm/__init__.py +2 -0
  102. wbportfolio/import_export/backends/wbfdm/adjustment.py +50 -0
  103. wbportfolio/import_export/backends/wbfdm/dividend.py +16 -0
  104. wbportfolio/import_export/backends/wbfdm/mixin.py +15 -0
  105. wbportfolio/import_export/handlers/__init__.py +0 -0
  106. wbportfolio/import_export/handlers/adjustment.py +39 -0
  107. wbportfolio/import_export/handlers/asset_position.py +167 -0
  108. wbportfolio/import_export/handlers/dividend.py +80 -0
  109. wbportfolio/import_export/handlers/fees.py +58 -0
  110. wbportfolio/import_export/handlers/portfolio_cash_flow.py +57 -0
  111. wbportfolio/import_export/handlers/register.py +43 -0
  112. wbportfolio/import_export/handlers/trade.py +191 -0
  113. wbportfolio/import_export/parsers/__init__.py +0 -0
  114. wbportfolio/import_export/parsers/default_mapping.py +30 -0
  115. wbportfolio/import_export/parsers/jpmorgan/__init__.py +0 -0
  116. wbportfolio/import_export/parsers/jpmorgan/customer_trade.py +63 -0
  117. wbportfolio/import_export/parsers/jpmorgan/fees.py +64 -0
  118. wbportfolio/import_export/parsers/jpmorgan/strategy.py +116 -0
  119. wbportfolio/import_export/parsers/jpmorgan/valuation.py +41 -0
  120. wbportfolio/import_export/parsers/leonteq/__init__.py +0 -0
  121. wbportfolio/import_export/parsers/leonteq/customer_trade.py +47 -0
  122. wbportfolio/import_export/parsers/leonteq/equity.py +81 -0
  123. wbportfolio/import_export/parsers/leonteq/fees.py +70 -0
  124. wbportfolio/import_export/parsers/leonteq/trade.py +94 -0
  125. wbportfolio/import_export/parsers/leonteq/valuation.py +39 -0
  126. wbportfolio/import_export/parsers/natixis/__init__.py +0 -0
  127. wbportfolio/import_export/parsers/natixis/customer_trade.py +62 -0
  128. wbportfolio/import_export/parsers/natixis/d1_customer_trade.py +66 -0
  129. wbportfolio/import_export/parsers/natixis/d1_equity.py +80 -0
  130. wbportfolio/import_export/parsers/natixis/d1_fees.py +58 -0
  131. wbportfolio/import_export/parsers/natixis/d1_trade.py +70 -0
  132. wbportfolio/import_export/parsers/natixis/d1_valuation.py +41 -0
  133. wbportfolio/import_export/parsers/natixis/dividend.py +53 -0
  134. wbportfolio/import_export/parsers/natixis/equity.py +60 -0
  135. wbportfolio/import_export/parsers/natixis/fees.py +53 -0
  136. wbportfolio/import_export/parsers/natixis/trade.py +63 -0
  137. wbportfolio/import_export/parsers/natixis/utils.py +76 -0
  138. wbportfolio/import_export/parsers/natixis/valuation.py +46 -0
  139. wbportfolio/import_export/parsers/refinitiv/__init__.py +0 -0
  140. wbportfolio/import_export/parsers/refinitiv/adjustment.py +24 -0
  141. wbportfolio/import_export/parsers/sg_lux/__init__.py +0 -0
  142. wbportfolio/import_export/parsers/sg_lux/custodian_positions.py +70 -0
  143. wbportfolio/import_export/parsers/sg_lux/customer_trade.py +75 -0
  144. wbportfolio/import_export/parsers/sg_lux/customer_trade_pending_slk.py +140 -0
  145. wbportfolio/import_export/parsers/sg_lux/customer_trade_slk.py +80 -0
  146. wbportfolio/import_export/parsers/sg_lux/customer_trade_without_pw.py +57 -0
  147. wbportfolio/import_export/parsers/sg_lux/equity.py +137 -0
  148. wbportfolio/import_export/parsers/sg_lux/fees.py +56 -0
  149. wbportfolio/import_export/parsers/sg_lux/perf_fees.py +51 -0
  150. wbportfolio/import_export/parsers/sg_lux/portfolio_cash_flow.py +29 -0
  151. wbportfolio/import_export/parsers/sg_lux/portfolio_future_cash_flow.py +36 -0
  152. wbportfolio/import_export/parsers/sg_lux/registers.py +210 -0
  153. wbportfolio/import_export/parsers/sg_lux/sylk.py +248 -0
  154. wbportfolio/import_export/parsers/sg_lux/utils.py +36 -0
  155. wbportfolio/import_export/parsers/sg_lux/valuation.py +53 -0
  156. wbportfolio/import_export/parsers/societe_generale/__init__.py +0 -0
  157. wbportfolio/import_export/parsers/societe_generale/customer_trade.py +54 -0
  158. wbportfolio/import_export/parsers/societe_generale/strategy.py +94 -0
  159. wbportfolio/import_export/parsers/societe_generale/valuation.py +37 -0
  160. wbportfolio/import_export/parsers/tellco/__init__.py +0 -0
  161. wbportfolio/import_export/parsers/tellco/customer_trade.py +64 -0
  162. wbportfolio/import_export/parsers/tellco/equity.py +86 -0
  163. wbportfolio/import_export/parsers/tellco/valuation.py +52 -0
  164. wbportfolio/import_export/parsers/ubs/__init__.py +0 -0
  165. wbportfolio/import_export/parsers/ubs/api/__init__.py +0 -0
  166. wbportfolio/import_export/parsers/ubs/api/asset_position.py +106 -0
  167. wbportfolio/import_export/parsers/ubs/api/fees.py +31 -0
  168. wbportfolio/import_export/parsers/ubs/api/instrument_price.py +20 -0
  169. wbportfolio/import_export/parsers/ubs/api/utils.py +0 -0
  170. wbportfolio/import_export/parsers/ubs/customer_trade.py +60 -0
  171. wbportfolio/import_export/parsers/ubs/equity.py +97 -0
  172. wbportfolio/import_export/parsers/ubs/historical_customer_trade.py +67 -0
  173. wbportfolio/import_export/parsers/ubs/valuation.py +52 -0
  174. wbportfolio/import_export/parsers/vontobel/__init__.py +0 -0
  175. wbportfolio/import_export/parsers/vontobel/asset_position.py +97 -0
  176. wbportfolio/import_export/parsers/vontobel/customer_trade.py +54 -0
  177. wbportfolio/import_export/parsers/vontobel/historical_customer_trade.py +40 -0
  178. wbportfolio/import_export/parsers/vontobel/instrument.py +34 -0
  179. wbportfolio/import_export/parsers/vontobel/management_fees.py +86 -0
  180. wbportfolio/import_export/parsers/vontobel/performance_fees.py +35 -0
  181. wbportfolio/import_export/parsers/vontobel/trade.py +38 -0
  182. wbportfolio/import_export/parsers/vontobel/utils.py +17 -0
  183. wbportfolio/import_export/parsers/vontobel/valuation.py +29 -0
  184. wbportfolio/import_export/resources/__init__.py +0 -0
  185. wbportfolio/import_export/resources/assets.py +68 -0
  186. wbportfolio/import_export/resources/trades.py +41 -0
  187. wbportfolio/import_export/utils.py +42 -0
  188. wbportfolio/metric/__init__.py +0 -0
  189. wbportfolio/metric/backends/__init__.py +2 -0
  190. wbportfolio/metric/backends/base.py +86 -0
  191. wbportfolio/metric/backends/constants.py +222 -0
  192. wbportfolio/metric/backends/portfolio_base.py +255 -0
  193. wbportfolio/metric/backends/portfolio_esg.py +66 -0
  194. wbportfolio/metric/tests/__init__.py +0 -0
  195. wbportfolio/metric/tests/conftest.py +4 -0
  196. wbportfolio/metric/tests/test_portfolio_base.py +135 -0
  197. wbportfolio/metric/tests/test_portfolio_esg.py +69 -0
  198. wbportfolio/migrations/0001_initial_squashed.py +13848 -0
  199. wbportfolio/migrations/0002_product_default_sub_account_squashed_0039_alter_assetallocation_company_and_more.py +3836 -0
  200. wbportfolio/migrations/0040_instrument_financial_instrument.py +26 -0
  201. wbportfolio/migrations/0041_remove_listresearch_research_ptr_and_more.py +129 -0
  202. wbportfolio/migrations/0042_instrumentlist_instrumentlistthroughmodel_and_more.py +71 -0
  203. wbportfolio/migrations/0043_alter_instrumentlistthroughmodel_options_and_more.py +238 -0
  204. wbportfolio/migrations/0044_alter_instrumentlist_identifier.py +35 -0
  205. wbportfolio/migrations/0045_alter_instrument_financial_instrument.py +26 -0
  206. wbportfolio/migrations/0046_add_product_default_account.py +166 -0
  207. wbportfolio/migrations/0047_remove_product_default_sub_account.py +14 -0
  208. wbportfolio/migrations/0048_alter_trade_status.py +29 -0
  209. wbportfolio/migrations/0049_trade_claimed_shares.py +25 -0
  210. wbportfolio/migrations/0050_fees_fee_date_fees_wbportfolio_transac_1f7a29_idx.py +44 -0
  211. wbportfolio/migrations/0051_delete_macroreview.py +11 -0
  212. wbportfolio/migrations/0052_remove_cash_instrument_ptr_and_more.py +888 -0
  213. wbportfolio/migrations/0053_remove_product_group.py +132 -0
  214. wbportfolio/migrations/0054_portfolioinstrumentpreferredclassificationthroughmodel_and_more.py +270 -0
  215. wbportfolio/migrations/0055_remove_product__custom_management_rebates_and_more.py +139 -0
  216. wbportfolio/migrations/0056_remove_companyportfoliodata_assets_under_management_currency_and_more.py +56 -0
  217. wbportfolio/migrations/0057_alter_portfolio_preferred_instrument_classifications_and_more.py +36 -0
  218. wbportfolio/migrations/0058_pmsinstrument.py +23 -0
  219. wbportfolio/migrations/0059_fees_unique_fees.py +51 -0
  220. wbportfolio/migrations/0060_alter_portfolioportfoliothroughmodel_type.py +21 -0
  221. wbportfolio/migrations/0061_portfolio_bank_accounts_product_bank_account_and_more.py +175 -0
  222. wbportfolio/migrations/0062_alter_dailyportfoliocashflow_options.py +20 -0
  223. wbportfolio/migrations/0063_accountreconciliation_accountreconciliationline_and_more.py +133 -0
  224. wbportfolio/migrations/0064_alter_portfolio_managers_portfolio_is_tracked_and_more.py +40 -0
  225. wbportfolio/migrations/0065_alter_portfolio_managers_claim_as_shares_and_more.py +73 -0
  226. wbportfolio/migrations/0066_assetposition_initial_shares_at_custodian_and_more.py +108 -0
  227. wbportfolio/migrations/0067_assetposition_unique_asset_position.py +77 -0
  228. wbportfolio/migrations/0068_trade_internal_trade_trade_marked_as_internal_and_more.py +59 -0
  229. wbportfolio/migrations/0069_remove_portfolio_is_invested_and_more.py +56 -0
  230. wbportfolio/migrations/0070_remove_assetposition_unique_asset_position_and_more.py +82 -0
  231. wbportfolio/migrations/0071_alter_trade_options_alter_trade_order.py +22 -0
  232. wbportfolio/migrations/__init__.py +0 -0
  233. wbportfolio/models/__init__.py +26 -0
  234. wbportfolio/models/adjustments.py +246 -0
  235. wbportfolio/models/asset.py +869 -0
  236. wbportfolio/models/custodians.py +101 -0
  237. wbportfolio/models/indexes.py +33 -0
  238. wbportfolio/models/mixins/__init__.py +0 -0
  239. wbportfolio/models/mixins/instruments.py +127 -0
  240. wbportfolio/models/mixins/liquidity_stress_test.py +1307 -0
  241. wbportfolio/models/portfolio.py +1039 -0
  242. wbportfolio/models/portfolio_cash_flow.py +167 -0
  243. wbportfolio/models/portfolio_cash_targets.py +46 -0
  244. wbportfolio/models/portfolio_relationship.py +135 -0
  245. wbportfolio/models/portfolio_swing_pricings.py +51 -0
  246. wbportfolio/models/product_groups.py +230 -0
  247. wbportfolio/models/products.py +569 -0
  248. wbportfolio/models/reconciliations/__init__.py +2 -0
  249. wbportfolio/models/reconciliations/account_reconciliation_lines.py +192 -0
  250. wbportfolio/models/reconciliations/account_reconciliations.py +102 -0
  251. wbportfolio/models/reconciliations/reconciliations.py +25 -0
  252. wbportfolio/models/registers.py +132 -0
  253. wbportfolio/models/roles.py +208 -0
  254. wbportfolio/models/synchronization/__init__.py +3 -0
  255. wbportfolio/models/synchronization/portfolio_synchronization.py +292 -0
  256. wbportfolio/models/synchronization/price_computation.py +200 -0
  257. wbportfolio/models/synchronization/synchronization.py +188 -0
  258. wbportfolio/models/transactions/__init__.py +7 -0
  259. wbportfolio/models/transactions/claim.py +634 -0
  260. wbportfolio/models/transactions/dividends.py +31 -0
  261. wbportfolio/models/transactions/expiry.py +7 -0
  262. wbportfolio/models/transactions/fees.py +153 -0
  263. wbportfolio/models/transactions/trade_proposals.py +502 -0
  264. wbportfolio/models/transactions/trades.py +704 -0
  265. wbportfolio/models/transactions/transactions.py +211 -0
  266. wbportfolio/models/utils.py +12 -0
  267. wbportfolio/permissions.py +13 -0
  268. wbportfolio/pms/__init__.py +0 -0
  269. wbportfolio/pms/statistics/__init__.py +0 -0
  270. wbportfolio/pms/trading/__init__.py +1 -0
  271. wbportfolio/pms/trading/handler.py +164 -0
  272. wbportfolio/pms/typing.py +194 -0
  273. wbportfolio/preferences.py +6 -0
  274. wbportfolio/reports/__init__.py +0 -0
  275. wbportfolio/reports/monthly_position_report.py +74 -0
  276. wbportfolio/risk_management/__init__.py +0 -0
  277. wbportfolio/risk_management/backends/__init__.py +11 -0
  278. wbportfolio/risk_management/backends/accounts.py +166 -0
  279. wbportfolio/risk_management/backends/controversy_portfolio.py +63 -0
  280. wbportfolio/risk_management/backends/exposure_portfolio.py +203 -0
  281. wbportfolio/risk_management/backends/instrument_list_portfolio.py +89 -0
  282. wbportfolio/risk_management/backends/liquidity_risk.py +86 -0
  283. wbportfolio/risk_management/backends/liquidity_stress_instrument.py +86 -0
  284. wbportfolio/risk_management/backends/mixins.py +220 -0
  285. wbportfolio/risk_management/backends/product_integrity.py +111 -0
  286. wbportfolio/risk_management/backends/stop_loss_instrument.py +24 -0
  287. wbportfolio/risk_management/backends/stop_loss_portfolio.py +36 -0
  288. wbportfolio/risk_management/backends/ucits_portfolio.py +63 -0
  289. wbportfolio/risk_management/tests/__init__.py +0 -0
  290. wbportfolio/risk_management/tests/conftest.py +15 -0
  291. wbportfolio/risk_management/tests/test_accounts.py +98 -0
  292. wbportfolio/risk_management/tests/test_controversy_portfolio.py +33 -0
  293. wbportfolio/risk_management/tests/test_exposure_portfolio.py +94 -0
  294. wbportfolio/risk_management/tests/test_instrument_list_portfolio.py +60 -0
  295. wbportfolio/risk_management/tests/test_liquidity_risk.py +47 -0
  296. wbportfolio/risk_management/tests/test_product_integrity.py +55 -0
  297. wbportfolio/risk_management/tests/test_stop_loss_instrument.py +110 -0
  298. wbportfolio/risk_management/tests/test_stop_loss_portfolio.py +119 -0
  299. wbportfolio/risk_management/tests/test_ucits_portfolio.py +39 -0
  300. wbportfolio/serializers/__init__.py +42 -0
  301. wbportfolio/serializers/adjustments.py +24 -0
  302. wbportfolio/serializers/assets.py +166 -0
  303. wbportfolio/serializers/custodians.py +26 -0
  304. wbportfolio/serializers/portfolio_cash_flow.py +48 -0
  305. wbportfolio/serializers/portfolio_cash_targets.py +20 -0
  306. wbportfolio/serializers/portfolio_relationship.py +53 -0
  307. wbportfolio/serializers/portfolio_swing_pricing.py +20 -0
  308. wbportfolio/serializers/portfolios.py +143 -0
  309. wbportfolio/serializers/positions.py +76 -0
  310. wbportfolio/serializers/product_group.py +88 -0
  311. wbportfolio/serializers/products.py +331 -0
  312. wbportfolio/serializers/reconciliations.py +171 -0
  313. wbportfolio/serializers/registers.py +72 -0
  314. wbportfolio/serializers/roles.py +60 -0
  315. wbportfolio/serializers/signals.py +157 -0
  316. wbportfolio/serializers/synchronization.py +18 -0
  317. wbportfolio/serializers/transactions/__init__.py +24 -0
  318. wbportfolio/serializers/transactions/claim.py +310 -0
  319. wbportfolio/serializers/transactions/dividends.py +18 -0
  320. wbportfolio/serializers/transactions/expiry.py +18 -0
  321. wbportfolio/serializers/transactions/fees.py +32 -0
  322. wbportfolio/serializers/transactions/trades.py +315 -0
  323. wbportfolio/serializers/transactions/transactions.py +84 -0
  324. wbportfolio/tasks.py +125 -0
  325. wbportfolio/tests/__init__.py +0 -0
  326. wbportfolio/tests/conftest.py +164 -0
  327. wbportfolio/tests/models/__init__.py +0 -0
  328. wbportfolio/tests/models/test_account_reconciliation.py +191 -0
  329. wbportfolio/tests/models/test_assets.py +193 -0
  330. wbportfolio/tests/models/test_custodians.py +12 -0
  331. wbportfolio/tests/models/test_customer_trades.py +113 -0
  332. wbportfolio/tests/models/test_dividends.py +7 -0
  333. wbportfolio/tests/models/test_imports.py +192 -0
  334. wbportfolio/tests/models/test_instrument_mixins.py +48 -0
  335. wbportfolio/tests/models/test_merge.py +133 -0
  336. wbportfolio/tests/models/test_portfolio_cash_flow.py +112 -0
  337. wbportfolio/tests/models/test_portfolio_cash_targets.py +27 -0
  338. wbportfolio/tests/models/test_portfolio_swing_pricings.py +42 -0
  339. wbportfolio/tests/models/test_portfolios.py +676 -0
  340. wbportfolio/tests/models/test_product_groups.py +80 -0
  341. wbportfolio/tests/models/test_products.py +187 -0
  342. wbportfolio/tests/models/test_roles.py +82 -0
  343. wbportfolio/tests/models/test_splits.py +233 -0
  344. wbportfolio/tests/models/test_synchronization.py +617 -0
  345. wbportfolio/tests/models/transactions/__init__.py +0 -0
  346. wbportfolio/tests/models/transactions/test_claim.py +129 -0
  347. wbportfolio/tests/models/transactions/test_fees.py +65 -0
  348. wbportfolio/tests/models/transactions/test_trades.py +204 -0
  349. wbportfolio/tests/models/utils.py +13 -0
  350. wbportfolio/tests/serializers/__init__.py +0 -0
  351. wbportfolio/tests/serializers/test_claims.py +21 -0
  352. wbportfolio/tests/signals.py +151 -0
  353. wbportfolio/tests/tests.py +31 -0
  354. wbportfolio/tests/viewsets/__init__.py +0 -0
  355. wbportfolio/tests/viewsets/test_assets.py +67 -0
  356. wbportfolio/tests/viewsets/test_performances.py +72 -0
  357. wbportfolio/tests/viewsets/test_products.py +92 -0
  358. wbportfolio/tests/viewsets/transactions/__init__.py +0 -0
  359. wbportfolio/tests/viewsets/transactions/test_claims.py +146 -0
  360. wbportfolio/urls.py +247 -0
  361. wbportfolio/utils.py +30 -0
  362. wbportfolio/viewsets/__init__.py +57 -0
  363. wbportfolio/viewsets/adjustments.py +46 -0
  364. wbportfolio/viewsets/assets.py +562 -0
  365. wbportfolio/viewsets/assets_and_net_new_money_progression.py +117 -0
  366. wbportfolio/viewsets/charts/__init__.py +1 -0
  367. wbportfolio/viewsets/charts/assets.py +247 -0
  368. wbportfolio/viewsets/configs/__init__.py +6 -0
  369. wbportfolio/viewsets/configs/buttons/__init__.py +23 -0
  370. wbportfolio/viewsets/configs/buttons/adjustments.py +13 -0
  371. wbportfolio/viewsets/configs/buttons/assets.py +145 -0
  372. wbportfolio/viewsets/configs/buttons/claims.py +83 -0
  373. wbportfolio/viewsets/configs/buttons/custodians.py +76 -0
  374. wbportfolio/viewsets/configs/buttons/fees.py +14 -0
  375. wbportfolio/viewsets/configs/buttons/mixins.py +88 -0
  376. wbportfolio/viewsets/configs/buttons/portfolios.py +115 -0
  377. wbportfolio/viewsets/configs/buttons/products.py +41 -0
  378. wbportfolio/viewsets/configs/buttons/reconciliations.py +65 -0
  379. wbportfolio/viewsets/configs/buttons/registers.py +11 -0
  380. wbportfolio/viewsets/configs/buttons/signals.py +68 -0
  381. wbportfolio/viewsets/configs/buttons/trade_proposals.py +25 -0
  382. wbportfolio/viewsets/configs/buttons/trades.py +144 -0
  383. wbportfolio/viewsets/configs/display/__init__.py +61 -0
  384. wbportfolio/viewsets/configs/display/adjustments.py +81 -0
  385. wbportfolio/viewsets/configs/display/assets.py +265 -0
  386. wbportfolio/viewsets/configs/display/claim.py +299 -0
  387. wbportfolio/viewsets/configs/display/custodians.py +24 -0
  388. wbportfolio/viewsets/configs/display/esg.py +88 -0
  389. wbportfolio/viewsets/configs/display/fees.py +133 -0
  390. wbportfolio/viewsets/configs/display/portfolio_cash_flow.py +103 -0
  391. wbportfolio/viewsets/configs/display/portfolio_relationship.py +38 -0
  392. wbportfolio/viewsets/configs/display/portfolios.py +125 -0
  393. wbportfolio/viewsets/configs/display/positions.py +75 -0
  394. wbportfolio/viewsets/configs/display/product_groups.py +54 -0
  395. wbportfolio/viewsets/configs/display/product_performance.py +241 -0
  396. wbportfolio/viewsets/configs/display/products.py +249 -0
  397. wbportfolio/viewsets/configs/display/reconciliations.py +151 -0
  398. wbportfolio/viewsets/configs/display/registers.py +71 -0
  399. wbportfolio/viewsets/configs/display/roles.py +49 -0
  400. wbportfolio/viewsets/configs/display/trade_proposals.py +97 -0
  401. wbportfolio/viewsets/configs/display/trades.py +359 -0
  402. wbportfolio/viewsets/configs/display/transactions.py +55 -0
  403. wbportfolio/viewsets/configs/endpoints/__init__.py +75 -0
  404. wbportfolio/viewsets/configs/endpoints/adjustments.py +17 -0
  405. wbportfolio/viewsets/configs/endpoints/assets.py +115 -0
  406. wbportfolio/viewsets/configs/endpoints/claim.py +106 -0
  407. wbportfolio/viewsets/configs/endpoints/custodians.py +6 -0
  408. wbportfolio/viewsets/configs/endpoints/esg.py +14 -0
  409. wbportfolio/viewsets/configs/endpoints/fees.py +26 -0
  410. wbportfolio/viewsets/configs/endpoints/portfolio_relationship.py +23 -0
  411. wbportfolio/viewsets/configs/endpoints/portfolios.py +43 -0
  412. wbportfolio/viewsets/configs/endpoints/positions.py +18 -0
  413. wbportfolio/viewsets/configs/endpoints/product_groups.py +11 -0
  414. wbportfolio/viewsets/configs/endpoints/product_performance.py +29 -0
  415. wbportfolio/viewsets/configs/endpoints/products.py +37 -0
  416. wbportfolio/viewsets/configs/endpoints/reconciliations.py +31 -0
  417. wbportfolio/viewsets/configs/endpoints/roles.py +9 -0
  418. wbportfolio/viewsets/configs/endpoints/trade_proposals.py +17 -0
  419. wbportfolio/viewsets/configs/endpoints/trades.py +82 -0
  420. wbportfolio/viewsets/configs/endpoints/transactions.py +17 -0
  421. wbportfolio/viewsets/configs/menu/__init__.py +30 -0
  422. wbportfolio/viewsets/configs/menu/adjustments.py +8 -0
  423. wbportfolio/viewsets/configs/menu/assets.py +8 -0
  424. wbportfolio/viewsets/configs/menu/claim.py +41 -0
  425. wbportfolio/viewsets/configs/menu/custodians.py +11 -0
  426. wbportfolio/viewsets/configs/menu/fees.py +13 -0
  427. wbportfolio/viewsets/configs/menu/instrument_prices.py +10 -0
  428. wbportfolio/viewsets/configs/menu/portfolio_cash_flow.py +8 -0
  429. wbportfolio/viewsets/configs/menu/portfolios.py +15 -0
  430. wbportfolio/viewsets/configs/menu/positions.py +14 -0
  431. wbportfolio/viewsets/configs/menu/product_groups.py +10 -0
  432. wbportfolio/viewsets/configs/menu/product_performance.py +25 -0
  433. wbportfolio/viewsets/configs/menu/products.py +15 -0
  434. wbportfolio/viewsets/configs/menu/reconciliations.py +7 -0
  435. wbportfolio/viewsets/configs/menu/registers.py +10 -0
  436. wbportfolio/viewsets/configs/menu/roles.py +16 -0
  437. wbportfolio/viewsets/configs/menu/trades.py +18 -0
  438. wbportfolio/viewsets/configs/menu/transactions.py +8 -0
  439. wbportfolio/viewsets/configs/previews/__init__.py +1 -0
  440. wbportfolio/viewsets/configs/previews/portfolios.py +21 -0
  441. wbportfolio/viewsets/configs/titles/__init__.py +65 -0
  442. wbportfolio/viewsets/configs/titles/adjustments.py +19 -0
  443. wbportfolio/viewsets/configs/titles/assets.py +57 -0
  444. wbportfolio/viewsets/configs/titles/assets_and_net_new_money_progression.py +6 -0
  445. wbportfolio/viewsets/configs/titles/claim.py +81 -0
  446. wbportfolio/viewsets/configs/titles/custodians.py +12 -0
  447. wbportfolio/viewsets/configs/titles/esg.py +10 -0
  448. wbportfolio/viewsets/configs/titles/fees.py +25 -0
  449. wbportfolio/viewsets/configs/titles/instrument_prices.py +20 -0
  450. wbportfolio/viewsets/configs/titles/portfolios.py +32 -0
  451. wbportfolio/viewsets/configs/titles/positions.py +11 -0
  452. wbportfolio/viewsets/configs/titles/product_groups.py +12 -0
  453. wbportfolio/viewsets/configs/titles/product_performance.py +16 -0
  454. wbportfolio/viewsets/configs/titles/products.py +6 -0
  455. wbportfolio/viewsets/configs/titles/registers.py +12 -0
  456. wbportfolio/viewsets/configs/titles/roles.py +23 -0
  457. wbportfolio/viewsets/configs/titles/trades.py +51 -0
  458. wbportfolio/viewsets/configs/titles/transactions.py +8 -0
  459. wbportfolio/viewsets/custodians.py +66 -0
  460. wbportfolio/viewsets/esg.py +165 -0
  461. wbportfolio/viewsets/mixins.py +48 -0
  462. wbportfolio/viewsets/portfolio_cash_flow.py +31 -0
  463. wbportfolio/viewsets/portfolio_cash_targets.py +8 -0
  464. wbportfolio/viewsets/portfolio_relationship.py +46 -0
  465. wbportfolio/viewsets/portfolio_swing_pricing.py +8 -0
  466. wbportfolio/viewsets/portfolios.py +154 -0
  467. wbportfolio/viewsets/positions.py +292 -0
  468. wbportfolio/viewsets/product_groups.py +84 -0
  469. wbportfolio/viewsets/product_performance.py +646 -0
  470. wbportfolio/viewsets/products.py +529 -0
  471. wbportfolio/viewsets/reconciliations.py +160 -0
  472. wbportfolio/viewsets/registers.py +75 -0
  473. wbportfolio/viewsets/roles.py +44 -0
  474. wbportfolio/viewsets/signals.py +42 -0
  475. wbportfolio/viewsets/synchronization.py +25 -0
  476. wbportfolio/viewsets/transactions/__init__.py +40 -0
  477. wbportfolio/viewsets/transactions/claim.py +933 -0
  478. wbportfolio/viewsets/transactions/fees.py +190 -0
  479. wbportfolio/viewsets/transactions/mixins.py +19 -0
  480. wbportfolio/viewsets/transactions/trade_proposals.py +93 -0
  481. wbportfolio/viewsets/transactions/trades.py +395 -0
  482. wbportfolio/viewsets/transactions/transactions.py +123 -0
  483. wbportfolio-2.2.1.dist-info/METADATA +21 -0
  484. wbportfolio-2.2.1.dist-info/RECORD +486 -0
  485. wbportfolio-2.2.1.dist-info/WHEEL +5 -0
  486. wbportfolio-2.2.1.dist-info/licenses/LICENSE +4 -0
@@ -0,0 +1,106 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+ from wbportfolio.models.transactions.claim import Claim
4
+
5
+
6
+ class ClaimEndpointConfig(EndpointViewConfig):
7
+ def get_instance_endpoint(self, **kwargs):
8
+ if self.request.user.has_perm("wbportfolio.change_claim"):
9
+ try:
10
+ obj = self.view.get_object()
11
+ if obj.status == Claim.Status.DRAFT:
12
+ return reverse("wbportfolio:claim-detail", args=[obj.id], request=self.request)
13
+ except AssertionError:
14
+ return reverse("wbportfolio:claim-list", request=self.request)
15
+ return None
16
+
17
+ def get_delete_endpoint(self, **kwargs):
18
+ if self.request.user.has_perm("wbportfolio.change_claim"):
19
+ try:
20
+ obj = self.view.get_object()
21
+ if obj.status == Claim.Status.WITHDRAWN:
22
+ return reverse("wbportfolio:claim-detail", args=[obj.id], request=self.request)
23
+ except AssertionError:
24
+ pass
25
+ return None
26
+
27
+ def get_endpoint(self, **kwargs):
28
+ return reverse("wbportfolio:claim-list", request=self.request)
29
+
30
+
31
+ class ClaimProductEndpointConfig(ClaimEndpointConfig):
32
+ def get_endpoint(self, **kwargs):
33
+ return reverse(
34
+ "wbportfolio:product-claim-list",
35
+ args=[self.view.kwargs["product_id"]],
36
+ request=self.request,
37
+ )
38
+
39
+
40
+ class ClaimAccountEndpointConfig(ClaimEndpointConfig):
41
+ def get_endpoint(self, **kwargs):
42
+ return reverse(
43
+ "wbportfolio:account-claim-list",
44
+ args=[self.view.kwargs["account_id"]],
45
+ request=self.request,
46
+ )
47
+
48
+
49
+ class ClaimEntryEndpointConfig(ClaimEndpointConfig):
50
+ def get_endpoint(self, **kwargs):
51
+ return reverse(
52
+ "wbportfolio:entry-claim-list",
53
+ args=[self.view.kwargs["entry_id"]],
54
+ request=self.request,
55
+ )
56
+
57
+
58
+ class ClaimTradeEndpointConfig(ClaimEndpointConfig):
59
+ def get_endpoint(self, **kwargs):
60
+ return reverse(
61
+ "wbportfolio:trade-claim-list",
62
+ args=[self.view.kwargs["trade_id"]],
63
+ request=self.request,
64
+ )
65
+
66
+
67
+ class ConsolidatedTradeSummaryEndpointConfig(EndpointViewConfig):
68
+ def get_endpoint(self, **kwargs):
69
+ return None
70
+
71
+ def get_list_endpoint(self, **kwargs):
72
+ return reverse("wbportfolio:aumtable-list", request=self.request)
73
+
74
+
75
+ class ConsolidatedTradeSummaryDistributionChartEndpointConfig(EndpointViewConfig):
76
+ def get_endpoint(self, **kwargs):
77
+ return reverse("wbportfolio:consolidatedtradesummarydistributionchart-list", request=self.request)
78
+
79
+
80
+ class CumulativeNNMChartEndpointConfig(EndpointViewConfig):
81
+ def get_endpoint(self, **kwargs):
82
+ return reverse("wbportfolio:cumulativennmchart-list", request=self.request)
83
+
84
+
85
+ class ProfitAndLossPandasEndpointConfig(EndpointViewConfig):
86
+ def get_endpoint(self, **kwargs):
87
+ return None
88
+
89
+ def get_list_endpoint(self, **kwargs):
90
+ return reverse("wbportfolio:pnltable-list", request=self.request)
91
+
92
+
93
+ class NegativeTermimalAccountPerProductEndpointConfig(EndpointViewConfig):
94
+ def get_endpoint(self, **kwargs):
95
+ return None
96
+
97
+ def get_instance_endpoint(self, **kwargs):
98
+ return None
99
+
100
+ def _get_instance_endpoint(self, **kwargs):
101
+ return (
102
+ reverse("wbportfolio:claim-list", request=self.request) + "?account={{account_id}}&product={{product_id}}"
103
+ )
104
+
105
+ def get_list_endpoint(self, **kwargs):
106
+ return reverse("wbportfolio:negativeaccountproduct-list", request=self.request)
@@ -0,0 +1,6 @@
1
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
2
+
3
+
4
+ class CustodianEndpointConfig(EndpointViewConfig):
5
+ def get_endpoint(self, **kwargs):
6
+ return super().get_endpoint()
@@ -0,0 +1,14 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class ESGMetricAggregationPortfolioPandasEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return None
8
+
9
+ def get_list_endpoint(self, **kwargs):
10
+ return reverse(
11
+ "wbportfolio:portfolio-esgaggregation-list",
12
+ args=[self.view.kwargs["portfolio_id"]],
13
+ request=self.request,
14
+ )
@@ -0,0 +1,26 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class FeeEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return None
8
+
9
+ def get_list_endpoint(self, **kwargs):
10
+ return reverse("wbportfolio:fees-list", args=[], request=self.request)
11
+
12
+
13
+ class FeesPortfolioEndpointConfig(FeeEndpointConfig):
14
+ def get_list_endpoint(self, **kwargs):
15
+ return reverse(
16
+ "wbportfolio:portfolio-fees-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
17
+ )
18
+
19
+
20
+ class FeesAggregatedPortfolioPandasEndpointConfig(EndpointViewConfig):
21
+ def get_list_endpoint(self, **kwargs):
22
+ return reverse(
23
+ "wbportfolio:portfolio-feesaggregated-list",
24
+ args=[self.view.kwargs["portfolio_id"]],
25
+ request=self.request,
26
+ )
@@ -0,0 +1,23 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class PortfolioInstrumentPreferredClassificationThroughEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return reverse(
8
+ "wbportfolio:portfolio-preferredclassification-list",
9
+ args=[self.view.kwargs["portfolio_id"]],
10
+ request=self.request,
11
+ )
12
+
13
+
14
+ class InstrumentPortfolioThroughPortfolioModelEndpointConfig(EndpointViewConfig):
15
+ def get_endpoint(self, **kwargs):
16
+ return None
17
+
18
+ def get_list_endpoint(self, **kwargs):
19
+ return reverse(
20
+ "wbportfolio:portfolio-instrument-list",
21
+ args=[self.view.kwargs["portfolio_id"]],
22
+ request=self.request,
23
+ )
@@ -0,0 +1,43 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class PortfolioEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return super().get_endpoint()
8
+
9
+ def get_delete_endpoint(self, **kwargs):
10
+ if self.view.is_portfolio_manager:
11
+ return self.get_endpoint(**kwargs)
12
+ return None
13
+
14
+ def get_create_endpoint(self, **kwargs):
15
+ return None
16
+
17
+
18
+ class ModelPortfolioEndpointConfig(PortfolioEndpointConfig):
19
+ def get_endpoint(self, **kwargs):
20
+ return reverse("wbportfolio:modelportfolio-list", request=self.request)
21
+
22
+
23
+ class PortfolioPortfolioThroughModelEndpointConfig(EndpointViewConfig):
24
+ PK_FIELD = "dependency_portfolio"
25
+
26
+ def get_list_endpoint(self, **kwargs):
27
+ return reverse(
28
+ "wbportfolio:portfolio-dependencyportfolio-list",
29
+ args=[self.view.kwargs["portfolio_id"]],
30
+ request=self.request,
31
+ )
32
+
33
+ def get_instance_endpoint(self, **kwargs):
34
+ return reverse(
35
+ "wbportfolio:portfolio-list",
36
+ args=[],
37
+ request=self.request,
38
+ )
39
+
40
+ def get_endpoint(self, **kwargs):
41
+ if self.request.user.is_superuser:
42
+ return self.get_list_endpoint(**kwargs)
43
+ return None
@@ -0,0 +1,18 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class AssetPositionPandasEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return None
8
+
9
+ def get_list_endpoint(self, **kwargs):
10
+ return reverse("wbportfolio:assetpositiongroupby-list", request=self.request)
11
+
12
+
13
+ class AggregatedAssetPositionLiquidityEndpointConfig(EndpointViewConfig):
14
+ def get_endpoint(self, **kwargs):
15
+ return None
16
+
17
+ def get_list_endpoint(self, **kwargs):
18
+ return reverse("wbportfolio:aggregatedassetpositionliquidity-list", request=self.request)
@@ -0,0 +1,11 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class ProductGroupEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return reverse(
8
+ "wbportfolio:product_group-list",
9
+ args=[],
10
+ request=self.request,
11
+ )
@@ -0,0 +1,29 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class PerformancePandasEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return None
8
+
9
+ def get_instance_endpoint(self, **kwargs):
10
+ return reverse("wbportfolio:product-list", request=self.request)
11
+
12
+ def get_list_endpoint(self, **kwargs):
13
+ return reverse("wbportfolio:productperformance-list", request=self.request)
14
+
15
+
16
+ class PerformanceComparisonEndpointConfig(EndpointViewConfig):
17
+ def get_endpoint(self, **kwargs):
18
+ return None
19
+
20
+ def get_instance_endpoint(self, **kwargs):
21
+ return reverse("wbportfolio:product-list", request=self.request)
22
+
23
+ def get_list_endpoint(self, **kwargs):
24
+ return reverse("wbportfolio:productperformancecomparison-list", request=self.request)
25
+
26
+
27
+ class ProductPerformanceNetNewMoneyEndpointConfig(PerformancePandasEndpointConfig):
28
+ def get_list_endpoint(self, **kwargs):
29
+ return reverse("wbportfolio:productperformancennmlist-list", request=self.request)
@@ -0,0 +1,37 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class ProductCustomerEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return None
8
+
9
+ def get_list_endpoint(self, **kwargs):
10
+ return reverse("wbportfolio:productcustomer-list", request=self.request)
11
+
12
+
13
+ class ProductPerformanceFeesEndpointConfig(EndpointViewConfig):
14
+ def get_endpoint(self, **kwargs):
15
+ return None
16
+
17
+ def get_instance_endpoint(self, **kwargs):
18
+ return reverse("wbportfolio:product-list", request=self.request)
19
+
20
+ def get_list_endpoint(self, **kwargs):
21
+ return reverse("wbportfolio:feesproductperformance-list", request=self.request)
22
+
23
+
24
+ class InstrumentPriceAUMDataEndpointConfig(EndpointViewConfig):
25
+ def get_endpoint(self, **kwargs):
26
+ return reverse("wbportfolio:aumchart-list", request=self.request)
27
+
28
+
29
+ # Product Portfolio Viewsets
30
+ class NominalProductEndpointConfig(EndpointViewConfig):
31
+ def get_endpoint(self, **kwargs):
32
+ return reverse("wbportfolio:product-nominalchart-list", [self.view.kwargs["product_id"]], request=self.request)
33
+
34
+
35
+ class AUMProductEndpointConfig(EndpointViewConfig):
36
+ def get_endpoint(self, **kwargs):
37
+ return reverse("wbportfolio:product-aumchart-list", [self.view.kwargs["product_id"]], request=self.request)
@@ -0,0 +1,31 @@
1
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
2
+ from wbportfolio.models.reconciliations.account_reconciliations import (
3
+ AccountReconciliation,
4
+ )
5
+
6
+
7
+ class AccountReconciliationEndpointViewConfig(EndpointViewConfig):
8
+ def get_instance_endpoint(self, **kwargs):
9
+ if self.view.kwargs.get("pk"):
10
+ return None
11
+ return super().get_instance_endpoint(**kwargs)
12
+
13
+ def get_delete_endpoint(self, **kwargs):
14
+ return None
15
+
16
+
17
+ class AccountReconciliationLineEndpointViewConfig(EndpointViewConfig):
18
+ def get_instance_endpoint(self, **kwargs):
19
+ return None
20
+
21
+ def get_delete_endpoint(self, **kwargs):
22
+ return None
23
+
24
+ def get_create_endpoint(self, **kwargs):
25
+ return None
26
+
27
+ def get_update_endpoint(self, **kwargs):
28
+ if accountreconciliation_id := self.view.kwargs.get("accountreconciliation_id"):
29
+ if AccountReconciliation.objects.filter(id=accountreconciliation_id, approved_dt__isnull=False).exists():
30
+ return None
31
+ return super().get_endpoint()
@@ -0,0 +1,9 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class PortfolioRoleInstrumentEndpointConfig(EndpointViewConfig):
6
+ def get_endpoint(self, **kwargs):
7
+ return reverse(
8
+ "wbportfolio:instrument-portfoliorole-list", args=[self.view.kwargs["instrument_id"]], request=self.request
9
+ )
@@ -0,0 +1,17 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+ from wbportfolio.models import TradeProposal
4
+
5
+
6
+ class TradeProposalPortfolioEndpointConfig(EndpointViewConfig):
7
+ def get_endpoint(self, **kwargs):
8
+ return reverse(
9
+ "wbportfolio:portfolio-tradeproposal-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
10
+ )
11
+
12
+ def get_delete_endpoint(self, **kwargs):
13
+ if trade_proposal_id := self.view.kwargs.get("pk", None):
14
+ trade_proposal = TradeProposal.objects.get(id=trade_proposal_id)
15
+ if trade_proposal.status == TradeProposal.Status.DRAFT:
16
+ return reverse("wbportfolio:tradeproposal-list", args=[], request=self.request)
17
+ return None
@@ -0,0 +1,82 @@
1
+ from django.shortcuts import get_object_or_404
2
+ from rest_framework.reverse import reverse
3
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
4
+ from wbportfolio.models import TradeProposal
5
+
6
+
7
+ class TradeEndpointConfig(EndpointViewConfig):
8
+ def get_endpoint(self, **kwargs):
9
+ return reverse("wbportfolio:trade-list", args=[], request=self.request)
10
+
11
+ # def get_instance_endpoint(self, **kwargs):
12
+ # try:
13
+ # if self.request.user.has_perm("wbportfolio.administrate_trade"):
14
+ # obj = self.view.get_object()
15
+ # return reverse("wbportfolio:trade-detail", args=[obj.id], request=self.request)
16
+ # except AssertionError:
17
+ # pass
18
+ # return reverse("wbportfolio:trade-list", request=self.request)
19
+
20
+ def get_create_endpoint(self, **kwargs):
21
+ return None
22
+
23
+ def get_delete_endpoint(self, **kwargs):
24
+ return None
25
+
26
+
27
+ class TradeInstrumentEndpointConfig(TradeEndpointConfig):
28
+ def get_endpoint(self, **kwargs):
29
+ return reverse(
30
+ "wbportfolio:instrument-trade-list", args=[self.view.kwargs["instrument_id"]], request=self.request
31
+ )
32
+
33
+
34
+ class TradePortfolioEndpointConfig(TradeEndpointConfig):
35
+ def get_endpoint(self, **kwargs):
36
+ return reverse(
37
+ "wbportfolio:portfolio-trade-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
38
+ )
39
+
40
+
41
+ class CustodianDistributionInstrumentEndpointConfig(EndpointViewConfig):
42
+ def get_endpoint(self, **kwargs):
43
+ return reverse(
44
+ "wbportfolio:instrument-custodiandistribution-list",
45
+ args=[self.view.kwargs["instrument_id"]],
46
+ request=self.request,
47
+ )
48
+
49
+
50
+ class TradeProposalEndpointConfig(EndpointViewConfig):
51
+ def get_delete_endpoint(self, **kwargs):
52
+ if pk := self.view.kwargs.get("pk", None):
53
+ trade_proposal = get_object_or_404(TradeProposal, pk=pk)
54
+ if trade_proposal.status == TradeProposal.Status.DRAFT:
55
+ return super().get_endpoint()
56
+ return None
57
+
58
+
59
+ class TradeProposalPortfolioEndpointConfig(TradeProposalEndpointConfig):
60
+ def get_endpoint(self, **kwargs):
61
+ return reverse(
62
+ "wbportfolio:portfolio-tradeproposal-list", args=[self.view.kwargs["portfolio_id"]], request=self.request
63
+ )
64
+
65
+
66
+ class TradeTradeProposalEndpointConfig(EndpointViewConfig):
67
+ def get_list_endpoint(self, **kwargs):
68
+ return reverse(
69
+ "wbportfolio:tradeproposal-trade-list", args=[self.view.kwargs["trade_proposal_id"]], request=self.request
70
+ )
71
+
72
+ def get_endpoint(self, **kwargs):
73
+ if trade_proposal_id := self.view.kwargs.get("trade_proposal_id", None):
74
+ trade_proposal = TradeProposal.objects.get(id=trade_proposal_id)
75
+ if trade_proposal.status == TradeProposal.Status.DRAFT:
76
+ return self.get_list_endpoint()
77
+ return None
78
+
79
+
80
+ class SubscriptionRedemptionEndpointConfig(TradeEndpointConfig):
81
+ def get_endpoint(self, **kwargs):
82
+ return reverse("wbportfolio:subscriptionredemption-list", args=[], request=self.request)
@@ -0,0 +1,17 @@
1
+ from rest_framework.reverse import reverse
2
+ from wbcore.metadata.configs.endpoints import EndpointViewConfig
3
+
4
+
5
+ class TransactionEndpointConfig(EndpointViewConfig):
6
+ def get_instance_endpoint(self, **kwargs):
7
+ model = "{{transaction_url_type}}"
8
+ return f"{self.request.scheme}://{self.request.get_host()}/api/portfolio/{model}/"
9
+
10
+
11
+ class TransactionPortfolioEndpointConfig(TransactionEndpointConfig):
12
+ def get_list_endpoint(self, **kwargs):
13
+ return reverse(
14
+ "wbportfolio:portfolio-transaction-list",
15
+ args=[self.view.kwargs["portfolio_id"]],
16
+ request=self.request,
17
+ )
@@ -0,0 +1,30 @@
1
+ from .adjustments import ADJUSTMENT_MENUITEM
2
+ from .assets import EQUITYCASHPOSITION_MENUITEM
3
+ from .claim import (
4
+ CONSOLIDATED_TRADE_SUMMARY_TABLE_MENUITEM,
5
+ CLAIM_MENUITEM,
6
+ NEGATIVEACCOUNTPRODUCT_MENUITEM,
7
+ PNL_MENUITEM,
8
+ AUM_NNM_PROGRESSION_MENUITEM,
9
+ )
10
+ from .custodians import CustodianMenuItem
11
+ from .fees import FEES_MENUITEM, GAIN_MENUITEM
12
+ from .instrument_prices import VALUATIONDATAAUM_MENUITEM
13
+ from .portfolios import ModelPortfolioMenuItem, PortfolioMenuItem
14
+ from .positions import (
15
+ AGGREGATED_ASSETPOSITION_LIQUIDITY_MENUITEM,
16
+ ASSETPOSITION_MENUITEM,
17
+ )
18
+ from .product_groups import PRODUCTGROUP_MENUITEM
19
+ from .product_performance import (
20
+ PRODUCTPERFORMANCECOMPARISONLIST_MENUITEM,
21
+ PRODUCTPERFORMANCELIST_MENUITEM,
22
+ PRODUCTPERFORMANCENNMLIST_MENUITEM,
23
+ )
24
+ from .products import PRODUCT_MENUITEM, PRODUCTCUSTOMER_MENUITEM
25
+ from .registers import REGISTER_MENUITEM
26
+ from .roles import PORTFOLIOROLE_MENUITEM
27
+ from .trades import SUBSCRIPTION_REDEMPTION_MENUITEM, TRADE_MENUITEM
28
+ from .transactions import TRANSACTION_MENUITEM
29
+ from .portfolio_cash_flow import PORTFOLIO_DAILY_CASH_FLOW
30
+ from .reconciliations import ACCOUNT_RECONCILIATION_MENU_ITEM
@@ -0,0 +1,8 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbportfolio.permissions import is_portfolio_manager
3
+
4
+ ADJUSTMENT_MENUITEM = MenuItem(
5
+ label="Adjustment",
6
+ endpoint="wbportfolio:adjustment-list",
7
+ permission=ItemPermission(permissions=["wbportfolio.view_adjustment"], method=is_portfolio_manager),
8
+ )
@@ -0,0 +1,8 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbportfolio.permissions import is_portfolio_manager
3
+
4
+ EQUITYCASHPOSITION_MENUITEM = MenuItem(
5
+ label="Portfolio Cash Position",
6
+ endpoint="wbportfolio:productcashposition-list",
7
+ permission=ItemPermission(permissions=["wbfdm.view_instrument"], method=is_portfolio_manager),
8
+ )
@@ -0,0 +1,41 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbcore.permissions.shortcuts import is_internal_user
3
+
4
+ CONSOLIDATED_TRADE_SUMMARY_TABLE_MENUITEM = MenuItem(
5
+ label="Consolidated Trade Summary",
6
+ endpoint="wbportfolio:aumtable-list",
7
+ permission=ItemPermission(
8
+ permissions=["wbportfolio.view_claim"], method=lambda request: is_internal_user(request.user)
9
+ ),
10
+ )
11
+
12
+ PNL_MENUITEM = MenuItem(
13
+ label="Profit & Loss",
14
+ endpoint="wbportfolio:pnltable-list",
15
+ permission=ItemPermission(
16
+ permissions=["wbportfolio.view_claim"], method=lambda request: is_internal_user(request.user)
17
+ ),
18
+ )
19
+
20
+ CLAIM_MENUITEM = MenuItem(
21
+ label="Claims",
22
+ endpoint="wbportfolio:claim-list",
23
+ permission=ItemPermission(permissions=["wbportfolio.view_claim"]),
24
+ add=MenuItem(
25
+ label="Create Claim",
26
+ endpoint="wbportfolio:claim-list",
27
+ permission=ItemPermission(permissions=["wbportfolio.add_claim"]),
28
+ ),
29
+ )
30
+
31
+ NEGATIVEACCOUNTPRODUCT_MENUITEM = MenuItem(
32
+ label="Negative Account per Product",
33
+ endpoint="wbportfolio:negativeaccountproduct-list",
34
+ permission=ItemPermission(method=lambda request: is_internal_user(request.user)),
35
+ )
36
+
37
+ AUM_NNM_PROGRESSION_MENUITEM = MenuItem(
38
+ label="AUM/NNM Progression",
39
+ endpoint="wbportfolio:assetandnetnewmoneyprogression-list",
40
+ permission=ItemPermission(method=lambda request: is_internal_user(request.user)),
41
+ )
@@ -0,0 +1,11 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbcore.permissions.shortcuts import is_internal_user
3
+
4
+ CustodianMenuItem = MenuItem(
5
+ label="Custodian",
6
+ endpoint="wbportfolio:custodian-list",
7
+ permission=ItemPermission(
8
+ permissions=["wbportfolio.view_custodian"],
9
+ method=lambda request: is_internal_user(request.user),
10
+ ),
11
+ )
@@ -0,0 +1,13 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbportfolio.permissions import is_manager
3
+
4
+ GAIN_MENUITEM = MenuItem(
5
+ label="Product Fees",
6
+ endpoint="wbportfolio:feesproductperformance-list",
7
+ permission=ItemPermission(permissions=["wbportfolio.view_product", "wbportfolio.view_fees"], method=is_manager),
8
+ )
9
+ FEES_MENUITEM = MenuItem(
10
+ label="Fees",
11
+ endpoint="wbportfolio:fees-list",
12
+ permission=ItemPermission(permissions=["wbportfolio.view_fees"], method=is_manager),
13
+ )
@@ -0,0 +1,10 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbcore.permissions.shortcuts import is_internal_user
3
+
4
+ VALUATIONDATAAUM_MENUITEM = MenuItem(
5
+ label="AuM Chart",
6
+ endpoint="wbportfolio:aumchart-list",
7
+ permission=ItemPermission(
8
+ method=lambda request: is_internal_user(request.user), permissions=["wbportfolio.view_portfolio"]
9
+ ),
10
+ )
@@ -0,0 +1,8 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbportfolio.permissions import is_portfolio_manager
3
+
4
+ PORTFOLIO_DAILY_CASH_FLOW = MenuItem(
5
+ label="Daily Portfolio Cash Flow",
6
+ endpoint="wbportfolio:portfoliocashflow-list",
7
+ permission=ItemPermission(permissions=["wbportfolio.view_portfolio"], method=is_portfolio_manager),
8
+ )
@@ -0,0 +1,15 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbportfolio.permissions import is_portfolio_manager
3
+
4
+ PortfolioMenuItem = MenuItem(
5
+ label="Portfolios",
6
+ endpoint="wbportfolio:portfolio-list",
7
+ permission=ItemPermission(method=is_portfolio_manager, permissions=["wbportfolio.view_portfolio"]),
8
+ )
9
+
10
+
11
+ ModelPortfolioMenuItem = MenuItem(
12
+ label="Model Portfolios",
13
+ endpoint="wbportfolio:modelportfolio-list",
14
+ permission=ItemPermission(method=is_portfolio_manager, permissions=["wbportfolio.view_portfolio"]),
15
+ )
@@ -0,0 +1,14 @@
1
+ from wbcore.menus import ItemPermission, MenuItem
2
+ from wbportfolio.permissions import is_analyst, is_portfolio_manager
3
+
4
+ ASSETPOSITION_MENUITEM = MenuItem(
5
+ label="Invested Asset Positions",
6
+ endpoint="wbportfolio:assetpositiongroupby-list",
7
+ permission=ItemPermission(permissions=["wbfdm.view_instrument"], method=is_analyst),
8
+ )
9
+
10
+ AGGREGATED_ASSETPOSITION_LIQUIDITY_MENUITEM = MenuItem(
11
+ label="Asset Positions Liquidity Table",
12
+ endpoint="wbportfolio:aggregatedassetpositionliquidity-list",
13
+ permission=ItemPermission(permissions=["wbfdm.view_instrument"], method=is_portfolio_manager),
14
+ )