fx-shared-models 0.2.87__tar.gz → 0.2.99__tar.gz

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.
Files changed (374) hide show
  1. {fx_shared_models-0.2.87/fx_shared_models.egg-info → fx_shared_models-0.2.99}/PKG-INFO +1 -1
  2. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99/fx_shared_models.egg-info}/PKG-INFO +1 -1
  3. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/fx_shared_models.egg-info/SOURCES.txt +163 -1
  4. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/setup.py +1 -1
  5. fx_shared_models-0.2.99/shared_models/accounts/migrations/0008_accountrisksettings.py +33 -0
  6. fx_shared_models-0.2.99/shared_models/accounts/migrations/0009_account_archived_at.py +47 -0
  7. fx_shared_models-0.2.99/shared_models/accounts/models.py +188 -0
  8. fx_shared_models-0.2.99/shared_models/balances/__init__.py +1 -0
  9. fx_shared_models-0.2.99/shared_models/balances/apps.py +8 -0
  10. fx_shared_models-0.2.99/shared_models/balances/migrations/0001_initial.py +43 -0
  11. fx_shared_models-0.2.99/shared_models/balances/migrations/0002_add_balance_history_and_unique_account.py +54 -0
  12. fx_shared_models-0.2.99/shared_models/balances/models.py +99 -0
  13. fx_shared_models-0.2.99/shared_models/common/customer_settings.py +51 -0
  14. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/common/mixins.py +111 -17
  15. fx_shared_models-0.2.99/shared_models/company_ba/migrations/0003_companyba.py +24 -0
  16. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/constants.py +33 -1
  17. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/enums.py +5 -0
  18. fx_shared_models-0.2.99/shared_models/customers/migrations/0015_customer_is_fund_manager.py +18 -0
  19. fx_shared_models-0.2.99/shared_models/customers/migrations/0016_customer_risk_factors_customer_risk_level_and_more.py +38 -0
  20. fx_shared_models-0.2.99/shared_models/customers/migrations/0017_stagetransition.py +39 -0
  21. fx_shared_models-0.2.99/shared_models/customers/migrations/0018_backfill_stage_origins.py +85 -0
  22. fx_shared_models-0.2.99/shared_models/customers/migrations/0019_sales_stages.py +52 -0
  23. fx_shared_models-0.2.99/shared_models/customers/migrations/0020_seed_sales_stages.py +70 -0
  24. fx_shared_models-0.2.99/shared_models/customers/migrations/0021_sales_activity.py +55 -0
  25. fx_shared_models-0.2.99/shared_models/customers/migrations/0022_seed_sales_settings.py +33 -0
  26. fx_shared_models-0.2.99/shared_models/customers/migrations/0023_assignment_settings.py +28 -0
  27. fx_shared_models-0.2.99/shared_models/customers/migrations/0024_lead_score.py +28 -0
  28. fx_shared_models-0.2.99/shared_models/customers/migrations/0025_lead_score_shape.py +33 -0
  29. fx_shared_models-0.2.99/shared_models/customers/migrations/0026_assignment_team.py +18 -0
  30. fx_shared_models-0.2.99/shared_models/customers/migrations/0027_measure_definition.py +35 -0
  31. fx_shared_models-0.2.99/shared_models/customers/migrations/0028_sales_targets.py +87 -0
  32. fx_shared_models-0.2.99/shared_models/customers/migrations/0029_measure_evaluation_settings.py +33 -0
  33. fx_shared_models-0.2.99/shared_models/customers/migrations/0030_sales_control_surface.py +111 -0
  34. fx_shared_models-0.2.99/shared_models/customers/migrations/0031_customersettings_viewing_currency.py +15 -0
  35. fx_shared_models-0.2.99/shared_models/customers/models.py +1276 -0
  36. fx_shared_models-0.2.99/shared_models/customers/stage_history.py +86 -0
  37. fx_shared_models-0.2.99/shared_models/customers/stage_policy.py +113 -0
  38. fx_shared_models-0.2.99/shared_models/fund_tracking/__init__.py +8 -0
  39. fx_shared_models-0.2.99/shared_models/fund_tracking/apps.py +8 -0
  40. fx_shared_models-0.2.99/shared_models/fund_tracking/migrations/0001_initial.py +69 -0
  41. fx_shared_models-0.2.99/shared_models/fund_tracking/migrations/0002_wt3b_settings.py +77 -0
  42. fx_shared_models-0.2.99/shared_models/fund_tracking/migrations/0003_wt5_profit_classifier.py +119 -0
  43. fx_shared_models-0.2.99/shared_models/fund_tracking/migrations/0004_wt9_money_trail.py +46 -0
  44. fx_shared_models-0.2.99/shared_models/fund_tracking/migrations/0005_allow_untracked_withdrawal.py +16 -0
  45. fx_shared_models-0.2.99/shared_models/fund_tracking/migrations/0006_wt6_refusal_rules.py +51 -0
  46. fx_shared_models-0.2.99/shared_models/fund_tracking/models.py +330 -0
  47. fx_shared_models-0.2.99/shared_models/ib_commission/migrations/0014_clientibmapping_idx_client_mapping_path_c_and_more.py +22 -0
  48. fx_shared_models-0.2.99/shared_models/ib_commission/migrations/0015_wt7_rebate_destination.py +21 -0
  49. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/models.py +38 -1
  50. fx_shared_models-0.2.99/shared_models/onboarding/apps.py +12 -0
  51. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0001_initial.py +336 -0
  52. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0002_onboardingkycrule.py +51 -0
  53. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0003_alter_clientonboardingsubmission_options.py +17 -0
  54. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0004_alter_onboardingkycrule_options_and_more.py +139 -0
  55. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0005_remove_onboardingkycrule_uniq_onboarding_kyc_rule_gate_product_and_more.py +81 -0
  56. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0006_onboardingkycrule_payment_gateway_and_more.py +23 -0
  57. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0007_onboardingkycrule_unlock_on.py +18 -0
  58. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0008_onboardingkycrule_audiences.py +69 -0
  59. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0009_wt7_wallet_rail_choices.py +63 -0
  60. fx_shared_models-0.2.99/shared_models/onboarding/migrations/0010_r7_review_enforcement.py +18 -0
  61. fx_shared_models-0.2.99/shared_models/onboarding/model/__init__.py +29 -0
  62. fx_shared_models-0.2.99/shared_models/onboarding/model/acceptance.py +42 -0
  63. fx_shared_models-0.2.99/shared_models/onboarding/model/block.py +72 -0
  64. fx_shared_models-0.2.99/shared_models/onboarding/model/condition.py +77 -0
  65. fx_shared_models-0.2.99/shared_models/onboarding/model/declaration.py +49 -0
  66. fx_shared_models-0.2.99/shared_models/onboarding/model/document_requirement.py +58 -0
  67. fx_shared_models-0.2.99/shared_models/onboarding/model/draft.py +51 -0
  68. fx_shared_models-0.2.99/shared_models/onboarding/model/flow.py +65 -0
  69. fx_shared_models-0.2.99/shared_models/onboarding/model/kyc_rule.py +337 -0
  70. fx_shared_models-0.2.99/shared_models/onboarding/model/resolver.py +72 -0
  71. fx_shared_models-0.2.99/shared_models/onboarding/model/submission.py +89 -0
  72. fx_shared_models-0.2.99/shared_models/onboarding/model/version.py +54 -0
  73. fx_shared_models-0.2.99/shared_models/onboarding/models.py +34 -0
  74. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/orders/enums.py +15 -15
  75. fx_shared_models-0.2.99/shared_models/orders/migrations/0002_order_checkout_mode_order_sdk_url_and_more.py +28 -0
  76. fx_shared_models-0.2.99/shared_models/orders/migrations/0003_rename_order_to_paymentorder.py +25 -0
  77. fx_shared_models-0.2.99/shared_models/orders/migrations/0004_wt7_wallet_rails.py +53 -0
  78. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/orders/models.py +50 -11
  79. fx_shared_models-0.2.99/shared_models/positions/__init__.py +1 -0
  80. fx_shared_models-0.2.99/shared_models/positions/apps.py +8 -0
  81. fx_shared_models-0.2.99/shared_models/positions/migrations/0001_initial.py +49 -0
  82. fx_shared_models-0.2.99/shared_models/positions/models.py +47 -0
  83. fx_shared_models-0.2.99/shared_models/promotions/apps.py +8 -0
  84. fx_shared_models-0.2.99/shared_models/promotions/migrations/0001_initial.py +156 -0
  85. fx_shared_models-0.2.99/shared_models/promotions/migrations/0002_seed_settings.py +41 -0
  86. fx_shared_models-0.2.99/shared_models/promotions/migrations/0003_banners.py +59 -0
  87. fx_shared_models-0.2.99/shared_models/promotions/migrations/0004_banner_ip_cap.py +18 -0
  88. fx_shared_models-0.2.99/shared_models/promotions/migrations/0005_global_controls.py +30 -0
  89. fx_shared_models-0.2.99/shared_models/promotions/migrations/0006_scoped_settings.py +55 -0
  90. fx_shared_models-0.2.99/shared_models/promotions/migrations/0007_cp_offers.py +133 -0
  91. fx_shared_models-0.2.99/shared_models/promotions/migrations/0008_promo_code_redemptions.py +24 -0
  92. fx_shared_models-0.2.99/shared_models/promotions/migrations/0009_promotion_currency.py +17 -0
  93. fx_shared_models-0.2.99/shared_models/promotions/migrations/0010_promotion_settings_clawback_send_lease.py +16 -0
  94. fx_shared_models-0.2.99/shared_models/promotions/models.py +586 -0
  95. fx_shared_models-0.2.99/shared_models/promotions/tests/__init__.py +0 -0
  96. fx_shared_models-0.2.99/shared_models/promotions/tests/test_promotion_models.py +85 -0
  97. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/apps.py +0 -3
  98. fx_shared_models-0.2.99/shared_models/referrals/migrations/__init__.py +0 -0
  99. fx_shared_models-0.2.99/shared_models/scoping/__init__.py +1 -0
  100. fx_shared_models-0.2.99/shared_models/scoping/apps.py +8 -0
  101. fx_shared_models-0.2.99/shared_models/scoping/migrations/0001_initial.py +207 -0
  102. fx_shared_models-0.2.99/shared_models/scoping/migrations/0002_drop_scope_tables.py +21 -0
  103. fx_shared_models-0.2.99/shared_models/scoping/migrations/__init__.py +0 -0
  104. fx_shared_models-0.2.99/shared_models/scoping/models.py +1 -0
  105. fx_shared_models-0.2.99/shared_models/settings_core/__init__.py +8 -0
  106. fx_shared_models-0.2.99/shared_models/settings_core/apps.py +11 -0
  107. fx_shared_models-0.2.99/shared_models/settings_core/migrations/0001_initial.py +109 -0
  108. fx_shared_models-0.2.99/shared_models/settings_core/migrations/0002_drop_approval_queue.py +123 -0
  109. fx_shared_models-0.2.99/shared_models/settings_core/migrations/0003_compliance_operate_permission.py +32 -0
  110. fx_shared_models-0.2.99/shared_models/settings_core/migrations/__init__.py +0 -0
  111. fx_shared_models-0.2.99/shared_models/settings_core/models.py +46 -0
  112. fx_shared_models-0.2.99/shared_models/settings_core/signals.py +49 -0
  113. fx_shared_models-0.2.99/shared_models/symbols/__init__.py +1 -0
  114. fx_shared_models-0.2.99/shared_models/symbols/apps.py +8 -0
  115. fx_shared_models-0.2.99/shared_models/symbols/migrations/0001_initial.py +41 -0
  116. fx_shared_models-0.2.99/shared_models/symbols/migrations/__init__.py +0 -0
  117. fx_shared_models-0.2.99/shared_models/symbols/models.py +38 -0
  118. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0020_accounttype_pamm_choices.py +18 -0
  119. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0021_pammconfiguration.py +53 -0
  120. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0022_pammconfiguration_pamm_subscription_approval_mode.py +18 -0
  121. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0023_pammconfiguration_allow_force_unlock_and_more.py +49 -0
  122. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0024_remove_pammconfiguration_pamm_enabled.py +17 -0
  123. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0025_mt5_server_logins.py +87 -0
  124. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0026_drop_tradingplatformserver_username.py +47 -0
  125. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0027_brokerconfiguration_dashboard_default_mode_and_more.py +23 -0
  126. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0028_brokerconfiguration_onboarding_engine_default_and_more.py +23 -0
  127. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0029_brokerconfiguration_onboarding_email_verification_mode.py +18 -0
  128. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0030_brokerconfiguration_compliance_gate_enabled.py +18 -0
  129. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0031_brokerconfiguration_login_background_dark_url_and_more.py +23 -0
  130. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0032_brokerconfiguration_background_color_and_more.py +59 -0
  131. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0033_remove_brokerconfiguration_login_background_dark_url_and_more.py +41 -0
  132. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0034_remove_brokerconfiguration_background_color_and_more.py +257 -0
  133. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0035_brokerconfiguration_cp_risk_guardian_enabled_and_more.py +58 -0
  134. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0036_mt5processorconfiguration.py +33 -0
  135. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0037_mt5operationjournal.py +38 -0
  136. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0038_wt3b_fund_tracking_columns.py +28 -0
  137. fx_shared_models-0.2.99/shared_models/system_settings/migrations/0039_wt7_allowed_destinations.py +75 -0
  138. fx_shared_models-0.2.99/shared_models/system_settings/migrations/__init__.py +0 -0
  139. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/__init__.py +18 -1
  140. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/account_types.py +1 -1
  141. fx_shared_models-0.2.99/shared_models/system_settings/models/broker_config.py +399 -0
  142. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/email.py +9 -1
  143. fx_shared_models-0.2.99/shared_models/system_settings/models/mt5_login.py +127 -0
  144. fx_shared_models-0.2.99/shared_models/system_settings/models/mt5_operation_journal.py +38 -0
  145. fx_shared_models-0.2.99/shared_models/system_settings/models/mt5_processor_config.py +51 -0
  146. fx_shared_models-0.2.99/shared_models/system_settings/models/pamm_config.py +185 -0
  147. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/payment_methods.py +25 -0
  148. fx_shared_models-0.2.99/shared_models/system_settings/models/risk_guardian_config.py +83 -0
  149. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/trading_platform.py +10 -12
  150. fx_shared_models-0.2.99/shared_models/system_settings/tests/__init__.py +0 -0
  151. fx_shared_models-0.2.99/shared_models/system_settings/tests/test_mt5_login.py +118 -0
  152. fx_shared_models-0.2.99/shared_models/system_settings/tests/test_mt5_operation_journal.py +35 -0
  153. fx_shared_models-0.2.99/shared_models/trading/migrations/0006_wt5_deal_mirror_watermark.py +29 -0
  154. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/models.py +15 -1
  155. fx_shared_models-0.2.99/shared_models/transactions/__init__.py +0 -0
  156. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/enums.py +2 -0
  157. fx_shared_models-0.2.99/shared_models/transactions/migrations/0014_wt7_wallet_rails.py +86 -0
  158. fx_shared_models-0.2.99/shared_models/transactions/migrations/0015_fx_rates.py +94 -0
  159. fx_shared_models-0.2.99/shared_models/transactions/migrations/__init__.py +0 -0
  160. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/models.py +101 -2
  161. fx_shared_models-0.2.99/shared_models/ui_elements/migrations/__init__.py +0 -0
  162. fx_shared_models-0.2.99/shared_models/users/__init__.py +0 -0
  163. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/apps.py +0 -3
  164. fx_shared_models-0.2.99/shared_models/users/managers.py +37 -0
  165. fx_shared_models-0.2.99/shared_models/users/migrations/0016_usersettings_dashboard_mode.py +18 -0
  166. fx_shared_models-0.2.99/shared_models/users/migrations/0017_usersettings_viewing_currency.py +15 -0
  167. fx_shared_models-0.2.99/shared_models/users/migrations/__init__.py +0 -0
  168. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/models.py +9 -1
  169. fx_shared_models-0.2.99/shared_models/wallets/__init__.py +1 -0
  170. fx_shared_models-0.2.99/shared_models/wallets/apps.py +8 -0
  171. fx_shared_models-0.2.99/shared_models/wallets/countries.py +4 -0
  172. fx_shared_models-0.2.99/shared_models/wallets/migrations/0001_initial.py +202 -0
  173. fx_shared_models-0.2.99/shared_models/wallets/migrations/0002_wallettransfer.py +45 -0
  174. fx_shared_models-0.2.99/shared_models/wallets/migrations/0003_wt3b_control_surface.py +396 -0
  175. fx_shared_models-0.2.99/shared_models/wallets/migrations/0004_wt7_rails.py +90 -0
  176. fx_shared_models-0.2.99/shared_models/wallets/migrations/0005_wt12_sweep_transaction.py +24 -0
  177. fx_shared_models-0.2.99/shared_models/wallets/migrations/0006_wt17_transfer_decisions.py +112 -0
  178. fx_shared_models-0.2.99/shared_models/wallets/migrations/0007_wt14_balance_history.py +133 -0
  179. fx_shared_models-0.2.99/shared_models/wallets/migrations/0008_wt10_admin.py +217 -0
  180. fx_shared_models-0.2.99/shared_models/wallets/migrations/0009_wt18_discrepancy_runs.py +202 -0
  181. fx_shared_models-0.2.99/shared_models/wallets/migrations/0010_internal_transfer_auto_refund.py +16 -0
  182. fx_shared_models-0.2.99/shared_models/wallets/migrations/0011_wallettransfer_approval_note.py +16 -0
  183. fx_shared_models-0.2.99/shared_models/wallets/migrations/0012_scope_on_rules.py +177 -0
  184. fx_shared_models-0.2.99/shared_models/wallets/migrations/__init__.py +1 -0
  185. fx_shared_models-0.2.99/shared_models/wallets/models.py +831 -0
  186. fx_shared_models-0.2.99/shared_models/wallets/tests/__init__.py +1 -0
  187. fx_shared_models-0.2.99/shared_models/wallets/tests/test_wallet_models.py +156 -0
  188. fx_shared_models-0.2.87/shared_models/accounts/models.py +0 -80
  189. fx_shared_models-0.2.87/shared_models/customers/models.py +0 -441
  190. fx_shared_models-0.2.87/shared_models/system_settings/models/broker_config.py +0 -167
  191. fx_shared_models-0.2.87/shared_models/users/managers.py +0 -14
  192. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/LICENSE +0 -0
  193. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/MANIFEST.in +0 -0
  194. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/README.md +0 -0
  195. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/fx_shared_models.egg-info/dependency_links.txt +0 -0
  196. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/fx_shared_models.egg-info/requires.txt +0 -0
  197. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/fx_shared_models.egg-info/top_level.txt +0 -0
  198. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/setup.cfg +0 -0
  199. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/__init__.py +0 -0
  200. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/__init__.py +0 -0
  201. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/apps.py +0 -0
  202. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0001_initial.py +0 -0
  203. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0002_remove_account_group_type_account_has_bonus_and_more.py +0 -0
  204. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0003_account_is_archived_account_is_trading_enabled.py +0 -0
  205. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0004_alter_account_created_at_alter_account_created_by_and_more.py +0 -0
  206. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0005_account_currency.py +0 -0
  207. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0006_alter_account_options.py +0 -0
  208. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/0007_alter_account_options.py +0 -0
  209. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/accounts/migrations/__init__.py +0 -0
  210. {fx_shared_models-0.2.87/shared_models/company_ba → fx_shared_models-0.2.99/shared_models/balances/migrations}/__init__.py +0 -0
  211. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/common/base.py +0 -0
  212. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/common/utils.py +0 -0
  213. {fx_shared_models-0.2.87/shared_models/company_ba/migrations → fx_shared_models-0.2.99/shared_models/company_ba}/__init__.py +0 -0
  214. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/company_ba/apps.py +0 -0
  215. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/company_ba/migrations/0001_initial.py +0 -0
  216. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/company_ba/migrations/0002_alter_companybankaccount_options.py +0 -0
  217. {fx_shared_models-0.2.87/shared_models/customer_crypto_wallet → fx_shared_models-0.2.99/shared_models/company_ba}/migrations/__init__.py +0 -0
  218. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/company_ba/models.py +0 -0
  219. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/crypto_wallet/__init__.py +0 -0
  220. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/crypto_wallet/apps.py +0 -0
  221. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/crypto_wallet/migrations/0001_initial.py +0 -0
  222. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/crypto_wallet/migrations/0002_alter_companycryptowallet_options.py +0 -0
  223. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/crypto_wallet/migrations/__init__.py +0 -0
  224. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/crypto_wallet/models.py +0 -0
  225. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_crypto_wallet/__init__.py +0 -0
  226. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_crypto_wallet/apps.py +0 -0
  227. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_crypto_wallet/migrations/0001_initial.py +0 -0
  228. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_crypto_wallet/migrations/0002_alter_customercryptowallet_options.py +0 -0
  229. {fx_shared_models-0.2.87/shared_models/customer_upi → fx_shared_models-0.2.99/shared_models/customer_crypto_wallet}/migrations/__init__.py +0 -0
  230. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_crypto_wallet/models.py +0 -0
  231. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_upi/__init__.py +0 -0
  232. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_upi/apps.py +0 -0
  233. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_upi/migrations/0001_initial.py +0 -0
  234. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_upi/migrations/0002_alter_customerupi_options.py +0 -0
  235. {fx_shared_models-0.2.87/shared_models/customers → fx_shared_models-0.2.99/shared_models/customer_upi}/migrations/__init__.py +0 -0
  236. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customer_upi/models.py +0 -0
  237. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/__init__.py +0 -0
  238. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/apps.py +0 -0
  239. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0001_initial.py +0 -0
  240. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0002_alter_customer_email_alter_customer_first_name_and_more.py +0 -0
  241. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0004_customerauth_two_factor_backup_codes_and_more.py +0 -0
  242. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0005_customerauth_temp_webauthn_challenge.py +0 -0
  243. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0006_customerauth_webauthn_challenge.py +0 -0
  244. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0007_customerauth_blocked_customerauth_blocked_at_and_more.py +0 -0
  245. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0008_customer_email_hash.py +0 -0
  246. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0009_remove_customerauth_blocked_by_and_more.py +0 -0
  247. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0010_customerauth_blocked_by_customerauth_unblocked_by.py +0 -0
  248. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0011_customerauth_reset_token_and_more.py +0 -0
  249. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0012_alter_customer_email_alter_customer_first_name_and_more.py +0 -0
  250. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0013_alter_customerauth_blocked_by_and_more.py +0 -0
  251. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/customers/migrations/0014_alter_customer_options.py +0 -0
  252. {fx_shared_models-0.2.87/shared_models/email_campaigns → fx_shared_models-0.2.99/shared_models/customers/migrations}/__init__.py +0 -0
  253. {fx_shared_models-0.2.87/shared_models/email_campaigns/migrations → fx_shared_models-0.2.99/shared_models/email_campaigns}/__init__.py +0 -0
  254. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_campaigns/apps.py +0 -0
  255. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_campaigns/migrations/0001_initial.py +0 -0
  256. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_campaigns/migrations/0002_alter_emailcampaign_options_and_more.py +0 -0
  257. {fx_shared_models-0.2.87/shared_models/email_log → fx_shared_models-0.2.99/shared_models/email_campaigns/migrations}/__init__.py +0 -0
  258. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_campaigns/models.py +0 -0
  259. {fx_shared_models-0.2.87/shared_models/email_log/migrations → fx_shared_models-0.2.99/shared_models/email_log}/__init__.py +0 -0
  260. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_log/apps.py +0 -0
  261. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_log/migrations/0001_initial.py +0 -0
  262. {fx_shared_models-0.2.87/shared_models/ib_commission → fx_shared_models-0.2.99/shared_models/email_log/migrations}/__init__.py +0 -0
  263. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/email_log/models.py +0 -0
  264. {fx_shared_models-0.2.87/shared_models/ib_commission → fx_shared_models-0.2.99/shared_models/fund_tracking}/migrations/__init__.py +0 -0
  265. {fx_shared_models-0.2.87/shared_models/orders/migrations → fx_shared_models-0.2.99/shared_models/ib_commission}/__init__.py +0 -0
  266. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/apps.py +0 -0
  267. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0001_initial.py +0 -0
  268. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0002_alter_commissiondistribution_processed_time.py +0 -0
  269. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0003_clientibmapping_idx_client_mapping_lookup_and_more.py +0 -0
  270. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0004_ibonboardingstatus.py +0 -0
  271. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0005_ibonboardingstatus_ib_journey_form_submitted_and_more.py +0 -0
  272. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0006_ibonboardingstatus_creation_source.py +0 -0
  273. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0007_ibquestionnaire.py +0 -0
  274. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0008_ibcommissionrule_lot_size.py +0 -0
  275. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0009_ibcommissionrule_min_volume.py +0 -0
  276. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0010_alter_commissiondistribution_rule_and_more.py +0 -0
  277. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0011_alter_clientibmapping_agreement_and_more.py +0 -0
  278. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0012_clientibmapping_agreement_path_and_more.py +0 -0
  279. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/migrations/0013_populate_agreement_path_for_existing_ibs.py +0 -0
  280. {fx_shared_models-0.2.87/shared_models/referrals → fx_shared_models-0.2.99/shared_models/ib_commission}/migrations/__init__.py +0 -0
  281. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/model/ib_onboarding.py +0 -0
  282. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/model/ib_questionnaire.py +0 -0
  283. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/services/__init__.py +0 -0
  284. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/services/commission_cache_service.py +0 -0
  285. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ib_commission/services/commission_calculator_service.py +0 -0
  286. {fx_shared_models-0.2.87/shared_models/system_settings/migrations → fx_shared_models-0.2.99/shared_models/onboarding}/__init__.py +0 -0
  287. {fx_shared_models-0.2.87/shared_models/transactions → fx_shared_models-0.2.99/shared_models/onboarding/migrations}/__init__.py +0 -0
  288. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/orders/__init__.py +0 -0
  289. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/orders/apps.py +0 -0
  290. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/orders/migrations/0001_initial.py +0 -0
  291. {fx_shared_models-0.2.87/shared_models/transactions → fx_shared_models-0.2.99/shared_models/orders}/migrations/__init__.py +0 -0
  292. {fx_shared_models-0.2.87/shared_models/ui_elements → fx_shared_models-0.2.99/shared_models/positions}/migrations/__init__.py +0 -0
  293. {fx_shared_models-0.2.87/shared_models/users → fx_shared_models-0.2.99/shared_models/promotions}/__init__.py +0 -0
  294. {fx_shared_models-0.2.87/shared_models/users → fx_shared_models-0.2.99/shared_models/promotions}/migrations/__init__.py +0 -0
  295. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/__init__.py +0 -0
  296. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/migrations/0001_initial.py +0 -0
  297. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/migrations/0002_alter_referralreward_payment_gateway_and_more.py +0 -0
  298. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/migrations/0003_referralsource_agreement_path_referralsource_ib_path.py +0 -0
  299. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/migrations/0004_populate_ib_paths_for_referral_sources.py +0 -0
  300. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/referrals/models.py +0 -0
  301. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/services/group_resolver.py +0 -0
  302. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/apps.py +0 -0
  303. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0001_initial.py +0 -0
  304. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0002_rename_is_enabled_systemsetting_is_active.py +0 -0
  305. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0003_tradingplatformserver.py +0 -0
  306. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0004_tradingplatformserver_connection_timeout_and_more.py +0 -0
  307. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0005_accountsequence_accounttype.py +0 -0
  308. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0006_alter_accounttype_sequence.py +0 -0
  309. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0007_remove_accounttype_default_group_type_and_more.py +0 -0
  310. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0008_paymentgatewayconfig_paymentmethodconfig_and_more.py +0 -0
  311. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0009_alter_accountsequence_created_at_and_more.py +0 -0
  312. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0010_alter_paymentgatewayconfig_gateway_and_more.py +0 -0
  313. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0011_tradingplatformserverlog.py +0 -0
  314. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0012_alter_emailcontent_content_sections.py +0 -0
  315. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0013_kycrequirementrule.py +0 -0
  316. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0014_alter_paymentgatewayconfig_payment_method_and_more.py +0 -0
  317. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0015_alter_paymentgatewayconfig_payment_method_and_more.py +0 -0
  318. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0016_alter_emailconfiguration_options_and_more.py +0 -0
  319. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0017_brokerconfiguration.py +0 -0
  320. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0018_accounttype_demo_auto_deposit_amount.py +0 -0
  321. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/migrations/0019_paymentgatewayconfig_adapter_type_and_more.py +0 -0
  322. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/account_sequence.py +0 -0
  323. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/base.py +0 -0
  324. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/group_configurations.py +0 -0
  325. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/models/transaction_configs.py +0 -0
  326. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/system_settings/serializers.py +0 -0
  327. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/__init__.py +0 -0
  328. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/apps.py +0 -0
  329. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/migrations/0001_initial.py +0 -0
  330. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/migrations/0002_alter_deal_id.py +0 -0
  331. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/migrations/0003_alter_deal_id.py +0 -0
  332. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/migrations/0004_alter_deal_id.py +0 -0
  333. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/migrations/0005_deal_idx_deal_position_lookup_and_more.py +0 -0
  334. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/trading/migrations/__init__.py +0 -0
  335. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/apps.py +0 -0
  336. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/constants.py +0 -0
  337. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0001_initial.py +0 -0
  338. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0002_transaction_mt5_ticket.py +0 -0
  339. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0003_alter_transaction_options.py +0 -0
  340. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0004_alter_transaction_created_by.py +0 -0
  341. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0005_alter_transaction_status.py +0 -0
  342. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0006_transaction_approved_at.py +0 -0
  343. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0007_transaction_assigned_user_and_more.py +0 -0
  344. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0008_alter_transaction_payment_method.py +0 -0
  345. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0009_alter_transaction_approved_by_and_more.py +0 -0
  346. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0010_alter_transaction_payment_method.py +0 -0
  347. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0011_alter_transaction_options.py +0 -0
  348. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0012_transaction_transaction_custome_fb8ec8_idx.py +0 -0
  349. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/transactions/migrations/0013_transaction_order.py +0 -0
  350. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ui_elements/__init__.py +0 -0
  351. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ui_elements/apps.py +0 -0
  352. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ui_elements/migrations/0001_initial.py +0 -0
  353. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/ui_elements/models.py +0 -0
  354. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/upi_id/__init__.py +0 -0
  355. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/upi_id/apps.py +0 -0
  356. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/upi_id/migrations/0001_initial.py +0 -0
  357. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/upi_id/migrations/0002_alter_companyupiid_options.py +0 -0
  358. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/upi_id/migrations/__init__.py +0 -0
  359. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/upi_id/models.py +0 -0
  360. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0001_initial.py +0 -0
  361. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0002_alter_crmuser_managers.py +0 -0
  362. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0003_alter_crmuser_options_alter_crmuser_managers.py +0 -0
  363. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0004_alter_crmuser_options.py +0 -0
  364. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0005_remove_crmuser_is_2fa_enabled_and_more.py +0 -0
  365. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0006_rename_preferred_2fa_method_usersettings_default_2fa_method_and_more.py +0 -0
  366. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0007_alter_usersettings_options_alter_usersettings_table.py +0 -0
  367. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0008_usersettings_temp_webauthn_challenge.py +0 -0
  368. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0009_alter_userprofile_profile_picture.py +0 -0
  369. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0010_alter_crmuser_options.py +0 -0
  370. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0011_alter_crmuser_options.py +0 -0
  371. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0012_alter_crmuser_managers_usersettings_is_2fa_enabled_and_more.py +0 -0
  372. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0013_usersettings_is_2fa_enabled_and_more.py +0 -0
  373. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0014_alter_crmuser_groups_alter_crmuser_user_permissions_and_more.py +0 -0
  374. {fx_shared_models-0.2.87 → fx_shared_models-0.2.99}/shared_models/users/migrations/0015_alter_crmuser_options.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fx-shared-models
3
- Version: 0.2.87
3
+ Version: 0.2.99
4
4
  Summary: Shared models for FX Backend
5
5
  Home-page: https://github.com/fxbackend/fx-shared-models
6
6
  Author: FX Backend
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fx-shared-models
3
- Version: 0.2.87
3
+ Version: 0.2.99
4
4
  Summary: Shared models for FX Backend
5
5
  Home-page: https://github.com/fxbackend/fx-shared-models
6
6
  Author: FX Backend
@@ -19,8 +19,17 @@ shared_models/accounts/migrations/0004_alter_account_created_at_alter_account_cr
19
19
  shared_models/accounts/migrations/0005_account_currency.py
20
20
  shared_models/accounts/migrations/0006_alter_account_options.py
21
21
  shared_models/accounts/migrations/0007_alter_account_options.py
22
+ shared_models/accounts/migrations/0008_accountrisksettings.py
23
+ shared_models/accounts/migrations/0009_account_archived_at.py
22
24
  shared_models/accounts/migrations/__init__.py
25
+ shared_models/balances/__init__.py
26
+ shared_models/balances/apps.py
27
+ shared_models/balances/models.py
28
+ shared_models/balances/migrations/0001_initial.py
29
+ shared_models/balances/migrations/0002_add_balance_history_and_unique_account.py
30
+ shared_models/balances/migrations/__init__.py
23
31
  shared_models/common/base.py
32
+ shared_models/common/customer_settings.py
24
33
  shared_models/common/mixins.py
25
34
  shared_models/common/utils.py
26
35
  shared_models/company_ba/__init__.py
@@ -28,6 +37,7 @@ shared_models/company_ba/apps.py
28
37
  shared_models/company_ba/models.py
29
38
  shared_models/company_ba/migrations/0001_initial.py
30
39
  shared_models/company_ba/migrations/0002_alter_companybankaccount_options.py
40
+ shared_models/company_ba/migrations/0003_companyba.py
31
41
  shared_models/company_ba/migrations/__init__.py
32
42
  shared_models/crypto_wallet/__init__.py
33
43
  shared_models/crypto_wallet/apps.py
@@ -51,6 +61,8 @@ shared_models/customers/__init__.py
51
61
  shared_models/customers/apps.py
52
62
  shared_models/customers/enums.py
53
63
  shared_models/customers/models.py
64
+ shared_models/customers/stage_history.py
65
+ shared_models/customers/stage_policy.py
54
66
  shared_models/customers/migrations/0001_initial.py
55
67
  shared_models/customers/migrations/0002_alter_customer_email_alter_customer_first_name_and_more.py
56
68
  shared_models/customers/migrations/0004_customerauth_two_factor_backup_codes_and_more.py
@@ -64,6 +76,23 @@ shared_models/customers/migrations/0011_customerauth_reset_token_and_more.py
64
76
  shared_models/customers/migrations/0012_alter_customer_email_alter_customer_first_name_and_more.py
65
77
  shared_models/customers/migrations/0013_alter_customerauth_blocked_by_and_more.py
66
78
  shared_models/customers/migrations/0014_alter_customer_options.py
79
+ shared_models/customers/migrations/0015_customer_is_fund_manager.py
80
+ shared_models/customers/migrations/0016_customer_risk_factors_customer_risk_level_and_more.py
81
+ shared_models/customers/migrations/0017_stagetransition.py
82
+ shared_models/customers/migrations/0018_backfill_stage_origins.py
83
+ shared_models/customers/migrations/0019_sales_stages.py
84
+ shared_models/customers/migrations/0020_seed_sales_stages.py
85
+ shared_models/customers/migrations/0021_sales_activity.py
86
+ shared_models/customers/migrations/0022_seed_sales_settings.py
87
+ shared_models/customers/migrations/0023_assignment_settings.py
88
+ shared_models/customers/migrations/0024_lead_score.py
89
+ shared_models/customers/migrations/0025_lead_score_shape.py
90
+ shared_models/customers/migrations/0026_assignment_team.py
91
+ shared_models/customers/migrations/0027_measure_definition.py
92
+ shared_models/customers/migrations/0028_sales_targets.py
93
+ shared_models/customers/migrations/0029_measure_evaluation_settings.py
94
+ shared_models/customers/migrations/0030_sales_control_surface.py
95
+ shared_models/customers/migrations/0031_customersettings_viewing_currency.py
67
96
  shared_models/customers/migrations/__init__.py
68
97
  shared_models/email_campaigns/__init__.py
69
98
  shared_models/email_campaigns/apps.py
@@ -76,6 +105,16 @@ shared_models/email_log/apps.py
76
105
  shared_models/email_log/models.py
77
106
  shared_models/email_log/migrations/0001_initial.py
78
107
  shared_models/email_log/migrations/__init__.py
108
+ shared_models/fund_tracking/__init__.py
109
+ shared_models/fund_tracking/apps.py
110
+ shared_models/fund_tracking/models.py
111
+ shared_models/fund_tracking/migrations/0001_initial.py
112
+ shared_models/fund_tracking/migrations/0002_wt3b_settings.py
113
+ shared_models/fund_tracking/migrations/0003_wt5_profit_classifier.py
114
+ shared_models/fund_tracking/migrations/0004_wt9_money_trail.py
115
+ shared_models/fund_tracking/migrations/0005_allow_untracked_withdrawal.py
116
+ shared_models/fund_tracking/migrations/0006_wt6_refusal_rules.py
117
+ shared_models/fund_tracking/migrations/__init__.py
79
118
  shared_models/ib_commission/__init__.py
80
119
  shared_models/ib_commission/apps.py
81
120
  shared_models/ib_commission/models.py
@@ -92,18 +131,70 @@ shared_models/ib_commission/migrations/0010_alter_commissiondistribution_rule_an
92
131
  shared_models/ib_commission/migrations/0011_alter_clientibmapping_agreement_and_more.py
93
132
  shared_models/ib_commission/migrations/0012_clientibmapping_agreement_path_and_more.py
94
133
  shared_models/ib_commission/migrations/0013_populate_agreement_path_for_existing_ibs.py
134
+ shared_models/ib_commission/migrations/0014_clientibmapping_idx_client_mapping_path_c_and_more.py
135
+ shared_models/ib_commission/migrations/0015_wt7_rebate_destination.py
95
136
  shared_models/ib_commission/migrations/__init__.py
96
137
  shared_models/ib_commission/model/ib_onboarding.py
97
138
  shared_models/ib_commission/model/ib_questionnaire.py
98
139
  shared_models/ib_commission/services/__init__.py
99
140
  shared_models/ib_commission/services/commission_cache_service.py
100
141
  shared_models/ib_commission/services/commission_calculator_service.py
142
+ shared_models/onboarding/__init__.py
143
+ shared_models/onboarding/apps.py
144
+ shared_models/onboarding/models.py
145
+ shared_models/onboarding/migrations/0001_initial.py
146
+ shared_models/onboarding/migrations/0002_onboardingkycrule.py
147
+ shared_models/onboarding/migrations/0003_alter_clientonboardingsubmission_options.py
148
+ shared_models/onboarding/migrations/0004_alter_onboardingkycrule_options_and_more.py
149
+ shared_models/onboarding/migrations/0005_remove_onboardingkycrule_uniq_onboarding_kyc_rule_gate_product_and_more.py
150
+ shared_models/onboarding/migrations/0006_onboardingkycrule_payment_gateway_and_more.py
151
+ shared_models/onboarding/migrations/0007_onboardingkycrule_unlock_on.py
152
+ shared_models/onboarding/migrations/0008_onboardingkycrule_audiences.py
153
+ shared_models/onboarding/migrations/0009_wt7_wallet_rail_choices.py
154
+ shared_models/onboarding/migrations/0010_r7_review_enforcement.py
155
+ shared_models/onboarding/migrations/__init__.py
156
+ shared_models/onboarding/model/__init__.py
157
+ shared_models/onboarding/model/acceptance.py
158
+ shared_models/onboarding/model/block.py
159
+ shared_models/onboarding/model/condition.py
160
+ shared_models/onboarding/model/declaration.py
161
+ shared_models/onboarding/model/document_requirement.py
162
+ shared_models/onboarding/model/draft.py
163
+ shared_models/onboarding/model/flow.py
164
+ shared_models/onboarding/model/kyc_rule.py
165
+ shared_models/onboarding/model/resolver.py
166
+ shared_models/onboarding/model/submission.py
167
+ shared_models/onboarding/model/version.py
101
168
  shared_models/orders/__init__.py
102
169
  shared_models/orders/apps.py
103
170
  shared_models/orders/enums.py
104
171
  shared_models/orders/models.py
105
172
  shared_models/orders/migrations/0001_initial.py
173
+ shared_models/orders/migrations/0002_order_checkout_mode_order_sdk_url_and_more.py
174
+ shared_models/orders/migrations/0003_rename_order_to_paymentorder.py
175
+ shared_models/orders/migrations/0004_wt7_wallet_rails.py
106
176
  shared_models/orders/migrations/__init__.py
177
+ shared_models/positions/__init__.py
178
+ shared_models/positions/apps.py
179
+ shared_models/positions/models.py
180
+ shared_models/positions/migrations/0001_initial.py
181
+ shared_models/positions/migrations/__init__.py
182
+ shared_models/promotions/__init__.py
183
+ shared_models/promotions/apps.py
184
+ shared_models/promotions/models.py
185
+ shared_models/promotions/migrations/0001_initial.py
186
+ shared_models/promotions/migrations/0002_seed_settings.py
187
+ shared_models/promotions/migrations/0003_banners.py
188
+ shared_models/promotions/migrations/0004_banner_ip_cap.py
189
+ shared_models/promotions/migrations/0005_global_controls.py
190
+ shared_models/promotions/migrations/0006_scoped_settings.py
191
+ shared_models/promotions/migrations/0007_cp_offers.py
192
+ shared_models/promotions/migrations/0008_promo_code_redemptions.py
193
+ shared_models/promotions/migrations/0009_promotion_currency.py
194
+ shared_models/promotions/migrations/0010_promotion_settings_clawback_send_lease.py
195
+ shared_models/promotions/migrations/__init__.py
196
+ shared_models/promotions/tests/__init__.py
197
+ shared_models/promotions/tests/test_promotion_models.py
107
198
  shared_models/referrals/__init__.py
108
199
  shared_models/referrals/apps.py
109
200
  shared_models/referrals/models.py
@@ -112,7 +203,26 @@ shared_models/referrals/migrations/0002_alter_referralreward_payment_gateway_and
112
203
  shared_models/referrals/migrations/0003_referralsource_agreement_path_referralsource_ib_path.py
113
204
  shared_models/referrals/migrations/0004_populate_ib_paths_for_referral_sources.py
114
205
  shared_models/referrals/migrations/__init__.py
206
+ shared_models/scoping/__init__.py
207
+ shared_models/scoping/apps.py
208
+ shared_models/scoping/models.py
209
+ shared_models/scoping/migrations/0001_initial.py
210
+ shared_models/scoping/migrations/0002_drop_scope_tables.py
211
+ shared_models/scoping/migrations/__init__.py
115
212
  shared_models/services/group_resolver.py
213
+ shared_models/settings_core/__init__.py
214
+ shared_models/settings_core/apps.py
215
+ shared_models/settings_core/models.py
216
+ shared_models/settings_core/signals.py
217
+ shared_models/settings_core/migrations/0001_initial.py
218
+ shared_models/settings_core/migrations/0002_drop_approval_queue.py
219
+ shared_models/settings_core/migrations/0003_compliance_operate_permission.py
220
+ shared_models/settings_core/migrations/__init__.py
221
+ shared_models/symbols/__init__.py
222
+ shared_models/symbols/apps.py
223
+ shared_models/symbols/models.py
224
+ shared_models/symbols/migrations/0001_initial.py
225
+ shared_models/symbols/migrations/__init__.py
116
226
  shared_models/system_settings/apps.py
117
227
  shared_models/system_settings/serializers.py
118
228
  shared_models/system_settings/migrations/0001_initial.py
@@ -134,6 +244,26 @@ shared_models/system_settings/migrations/0016_alter_emailconfiguration_options_a
134
244
  shared_models/system_settings/migrations/0017_brokerconfiguration.py
135
245
  shared_models/system_settings/migrations/0018_accounttype_demo_auto_deposit_amount.py
136
246
  shared_models/system_settings/migrations/0019_paymentgatewayconfig_adapter_type_and_more.py
247
+ shared_models/system_settings/migrations/0020_accounttype_pamm_choices.py
248
+ shared_models/system_settings/migrations/0021_pammconfiguration.py
249
+ shared_models/system_settings/migrations/0022_pammconfiguration_pamm_subscription_approval_mode.py
250
+ shared_models/system_settings/migrations/0023_pammconfiguration_allow_force_unlock_and_more.py
251
+ shared_models/system_settings/migrations/0024_remove_pammconfiguration_pamm_enabled.py
252
+ shared_models/system_settings/migrations/0025_mt5_server_logins.py
253
+ shared_models/system_settings/migrations/0026_drop_tradingplatformserver_username.py
254
+ shared_models/system_settings/migrations/0027_brokerconfiguration_dashboard_default_mode_and_more.py
255
+ shared_models/system_settings/migrations/0028_brokerconfiguration_onboarding_engine_default_and_more.py
256
+ shared_models/system_settings/migrations/0029_brokerconfiguration_onboarding_email_verification_mode.py
257
+ shared_models/system_settings/migrations/0030_brokerconfiguration_compliance_gate_enabled.py
258
+ shared_models/system_settings/migrations/0031_brokerconfiguration_login_background_dark_url_and_more.py
259
+ shared_models/system_settings/migrations/0032_brokerconfiguration_background_color_and_more.py
260
+ shared_models/system_settings/migrations/0033_remove_brokerconfiguration_login_background_dark_url_and_more.py
261
+ shared_models/system_settings/migrations/0034_remove_brokerconfiguration_background_color_and_more.py
262
+ shared_models/system_settings/migrations/0035_brokerconfiguration_cp_risk_guardian_enabled_and_more.py
263
+ shared_models/system_settings/migrations/0036_mt5processorconfiguration.py
264
+ shared_models/system_settings/migrations/0037_mt5operationjournal.py
265
+ shared_models/system_settings/migrations/0038_wt3b_fund_tracking_columns.py
266
+ shared_models/system_settings/migrations/0039_wt7_allowed_destinations.py
137
267
  shared_models/system_settings/migrations/__init__.py
138
268
  shared_models/system_settings/models/__init__.py
139
269
  shared_models/system_settings/models/account_sequence.py
@@ -142,9 +272,17 @@ shared_models/system_settings/models/base.py
142
272
  shared_models/system_settings/models/broker_config.py
143
273
  shared_models/system_settings/models/email.py
144
274
  shared_models/system_settings/models/group_configurations.py
275
+ shared_models/system_settings/models/mt5_login.py
276
+ shared_models/system_settings/models/mt5_operation_journal.py
277
+ shared_models/system_settings/models/mt5_processor_config.py
278
+ shared_models/system_settings/models/pamm_config.py
145
279
  shared_models/system_settings/models/payment_methods.py
280
+ shared_models/system_settings/models/risk_guardian_config.py
146
281
  shared_models/system_settings/models/trading_platform.py
147
282
  shared_models/system_settings/models/transaction_configs.py
283
+ shared_models/system_settings/tests/__init__.py
284
+ shared_models/system_settings/tests/test_mt5_login.py
285
+ shared_models/system_settings/tests/test_mt5_operation_journal.py
148
286
  shared_models/trading/__init__.py
149
287
  shared_models/trading/apps.py
150
288
  shared_models/trading/models.py
@@ -153,6 +291,7 @@ shared_models/trading/migrations/0002_alter_deal_id.py
153
291
  shared_models/trading/migrations/0003_alter_deal_id.py
154
292
  shared_models/trading/migrations/0004_alter_deal_id.py
155
293
  shared_models/trading/migrations/0005_deal_idx_deal_position_lookup_and_more.py
294
+ shared_models/trading/migrations/0006_wt5_deal_mirror_watermark.py
156
295
  shared_models/trading/migrations/__init__.py
157
296
  shared_models/transactions/__init__.py
158
297
  shared_models/transactions/apps.py
@@ -172,6 +311,8 @@ shared_models/transactions/migrations/0010_alter_transaction_payment_method.py
172
311
  shared_models/transactions/migrations/0011_alter_transaction_options.py
173
312
  shared_models/transactions/migrations/0012_transaction_transaction_custome_fb8ec8_idx.py
174
313
  shared_models/transactions/migrations/0013_transaction_order.py
314
+ shared_models/transactions/migrations/0014_wt7_wallet_rails.py
315
+ shared_models/transactions/migrations/0015_fx_rates.py
175
316
  shared_models/transactions/migrations/__init__.py
176
317
  shared_models/ui_elements/__init__.py
177
318
  shared_models/ui_elements/apps.py
@@ -203,4 +344,25 @@ shared_models/users/migrations/0012_alter_crmuser_managers_usersettings_is_2fa_e
203
344
  shared_models/users/migrations/0013_usersettings_is_2fa_enabled_and_more.py
204
345
  shared_models/users/migrations/0014_alter_crmuser_groups_alter_crmuser_user_permissions_and_more.py
205
346
  shared_models/users/migrations/0015_alter_crmuser_options.py
206
- shared_models/users/migrations/__init__.py
347
+ shared_models/users/migrations/0016_usersettings_dashboard_mode.py
348
+ shared_models/users/migrations/0017_usersettings_viewing_currency.py
349
+ shared_models/users/migrations/__init__.py
350
+ shared_models/wallets/__init__.py
351
+ shared_models/wallets/apps.py
352
+ shared_models/wallets/countries.py
353
+ shared_models/wallets/models.py
354
+ shared_models/wallets/migrations/0001_initial.py
355
+ shared_models/wallets/migrations/0002_wallettransfer.py
356
+ shared_models/wallets/migrations/0003_wt3b_control_surface.py
357
+ shared_models/wallets/migrations/0004_wt7_rails.py
358
+ shared_models/wallets/migrations/0005_wt12_sweep_transaction.py
359
+ shared_models/wallets/migrations/0006_wt17_transfer_decisions.py
360
+ shared_models/wallets/migrations/0007_wt14_balance_history.py
361
+ shared_models/wallets/migrations/0008_wt10_admin.py
362
+ shared_models/wallets/migrations/0009_wt18_discrepancy_runs.py
363
+ shared_models/wallets/migrations/0010_internal_transfer_auto_refund.py
364
+ shared_models/wallets/migrations/0011_wallettransfer_approval_note.py
365
+ shared_models/wallets/migrations/0012_scope_on_rules.py
366
+ shared_models/wallets/migrations/__init__.py
367
+ shared_models/wallets/tests/__init__.py
368
+ shared_models/wallets/tests/test_wallet_models.py
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages # Import find_packages
2
2
 
3
3
  setup(
4
4
  name='fx-shared-models',
5
- version='0.2.87', # Incremented version after adding shared_models/__init__.py
5
+ version='0.2.99', # FX slice 3 — Promotion.currency; PromotionSettings.clawback_send_lease_seconds
6
6
  packages=find_packages(include=['shared_models', 'shared_models.*']), # Find packages under the shared_models directory
7
7
  install_requires=[
8
8
  'Django>=4.2', # Match the version from requirements.txt if possible
@@ -0,0 +1,33 @@
1
+ # Generated by Django 4.2.20 on 2026-07-21 10:00
2
+
3
+ import django.core.validators
4
+ from django.db import migrations, models
5
+ import django.db.models.deletion
6
+
7
+
8
+ class Migration(migrations.Migration):
9
+
10
+ dependencies = [
11
+ ('accounts', '0007_alter_account_options'),
12
+ ]
13
+
14
+ operations = [
15
+ migrations.CreateModel(
16
+ name='AccountRiskSettings',
17
+ fields=[
18
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
19
+ ('created_at', models.DateTimeField(auto_now_add=True)),
20
+ ('updated_at', models.DateTimeField(auto_now=True)),
21
+ ('created_by', models.CharField(blank=True, max_length=255, null=True)),
22
+ ('updated_by', models.CharField(blank=True, max_length=255, null=True)),
23
+ ('daily_loss_limit', models.DecimalField(blank=True, decimal_places=2, default=None, help_text='Account currency; null = not set.', max_digits=20, null=True, validators=[django.core.validators.MinValueValidator(0)])),
24
+ ('max_trades_per_day', models.IntegerField(blank=True, default=None, help_text='null = not set.', null=True, validators=[django.core.validators.MinValueValidator(1)])),
25
+ ('account', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='risk_settings', to='accounts.account')),
26
+ ],
27
+ options={
28
+ 'verbose_name': 'Account Risk Settings',
29
+ 'verbose_name_plural': 'Account Risk Settings',
30
+ 'db_table': 'account_risk_settings',
31
+ },
32
+ ),
33
+ ]
@@ -0,0 +1,47 @@
1
+ from django.db import migrations, models
2
+
3
+
4
+ class Migration(migrations.Migration):
5
+ """Add Account.archived_at.
6
+
7
+ Deliberately NOT backfilled. The only candidate source is updated_at, which
8
+ auto_now bumps on every later edit — an MT5 cache refresh, a trading-status
9
+ flip, a leverage change — so it is not the archive date and backfilling from
10
+ it would write an unfalsifiable wrong date into every historic row. An
11
+ AuditLog-derived backfill was rejected too: the customer deletion service
12
+ archives accounts in bulk without a per-account audit row, so it would fill
13
+ some rows and silently miss others, which is worse than a uniform NULL.
14
+
15
+ NULL therefore reads as "archived before this column existed", and reports
16
+ say so rather than pretending to know.
17
+ """
18
+
19
+ dependencies = [
20
+ ('accounts', '0008_accountrisksettings'),
21
+ ]
22
+
23
+ operations = [
24
+ migrations.AddField(
25
+ model_name='account',
26
+ name='archived_at',
27
+ field=models.DateTimeField(
28
+ blank=True,
29
+ null=True,
30
+ help_text=(
31
+ 'When this account was archived. NULL means either that '
32
+ 'the account is not archived, or that it was archived '
33
+ 'before this column existed. It is deliberately not '
34
+ 'backfilled: updated_at moves on every later edit, so '
35
+ 'backfilling from it would bake an unfalsifiable wrong '
36
+ 'date into the record.'
37
+ ),
38
+ ),
39
+ ),
40
+ migrations.AddIndex(
41
+ model_name='account',
42
+ index=models.Index(
43
+ fields=['archived_at'],
44
+ name='accounts_archived_at_idx',
45
+ ),
46
+ ),
47
+ ]
@@ -0,0 +1,188 @@
1
+ from django.core.validators import MinValueValidator
2
+ from django.db import models
3
+ from django.utils import timezone
4
+ from ..common.base import BaseModel
5
+ from ..services.group_resolver import MT5GroupResolverService
6
+
7
+ class Account(BaseModel):
8
+ """
9
+ Trading account model
10
+ """
11
+ id = models.AutoField(primary_key=True, editable=False)
12
+
13
+ # Relations
14
+ server = models.ForeignKey('system_settings.TradingPlatformServer',
15
+ on_delete=models.PROTECT,
16
+ related_name='accounts')
17
+ account_type = models.ForeignKey('system_settings.AccountType',
18
+ on_delete=models.PROTECT,
19
+ related_name='accounts')
20
+ customer = models.ForeignKey('customers.Customer',
21
+ on_delete=models.CASCADE,
22
+ related_name='accounts')
23
+
24
+ # Account Details
25
+ login = models.IntegerField()
26
+ is_active = models.BooleanField(default=True)
27
+ is_archived = models.BooleanField(default=False)
28
+ archived_at = models.DateTimeField(
29
+ null=True,
30
+ blank=True,
31
+ help_text=(
32
+ "When this account was archived. NULL means either that the "
33
+ "account is not archived, or that it was archived before this "
34
+ "column existed. It is deliberately not backfilled: updated_at "
35
+ "moves on every later edit, so backfilling from it would bake an "
36
+ "unfalsifiable wrong date into the record."
37
+ ),
38
+ )
39
+ is_trading_enabled = models.BooleanField(default=True)
40
+
41
+ # Group Configuration
42
+ is_swap_free = models.BooleanField(
43
+ default=False,
44
+ help_text="Whether this account uses Islamic (swap-free) groups"
45
+ )
46
+ has_bonus = models.BooleanField(
47
+ default=False,
48
+ help_text="Whether this account has bonus applied"
49
+ )
50
+ has_markup = models.BooleanField(
51
+ default=False,
52
+ help_text="Whether this account has markup applied"
53
+ )
54
+ currency = models.CharField(
55
+ max_length=3,
56
+ default='USD',
57
+ )
58
+
59
+ class Meta:
60
+ app_label = 'accounts'
61
+ db_table = 'accounts'
62
+ verbose_name = 'Account'
63
+ verbose_name_plural = 'Accounts'
64
+ unique_together = [['login', 'server']]
65
+ indexes = [
66
+ models.Index(fields=['login', 'server']),
67
+ models.Index(fields=['customer']),
68
+ models.Index(fields=['account_type']),
69
+ # The archived-accounts report windows on this column.
70
+ models.Index(fields=['archived_at'], name='accounts_archived_at_idx'),
71
+ ]
72
+ permissions = [
73
+ # Base CRUD permissions (auto-generated by Django)
74
+ # view_account, add_account, change_account, delete_account
75
+
76
+ # Account-specific action permissions
77
+ ("enable_account_trading", "Can enable/disable account trading"),
78
+ ("archive_account", "Can archive account"),
79
+ ("reset_account_password", "Can reset account password"),
80
+ ("change_account_leverage", "Can change account leverage"),
81
+ ("change_account_group", "Can change account group"),
82
+ ("manage_account_bonus", "Can manage account bonus settings"),
83
+ ("manage_account_markup", "Can manage account markup settings"),
84
+ ("change_account_swap_status", "Can change swap-free status"),
85
+ ("view_account_trading_activity", "Can view account trading activity (positions, orders, deals)"),
86
+ ("view_account_analytics", "Can view account analytics and charts"),
87
+ ]
88
+
89
+ @classmethod
90
+ def from_db(cls, db, field_names, values):
91
+ instance = super().from_db(db, field_names, values)
92
+ instance._snapshot_archive_state(field_names)
93
+ return instance
94
+
95
+ def refresh_from_db(self, using=None, fields=None, **kwargs):
96
+ super().refresh_from_db(using=using, fields=fields, **kwargs)
97
+ self._snapshot_archive_state(fields)
98
+
99
+ def _snapshot_archive_state(self, field_names=None):
100
+ """Remember the stored is_archived so save() can spot a transition.
101
+
102
+ A partial load that did not fetch the column leaves the snapshot alone
103
+ rather than recording an in-memory value as if it came from the row.
104
+ """
105
+ if field_names is None or 'is_archived' in field_names:
106
+ self._archived_snapshot = self.is_archived
107
+
108
+ def save(self, *args, **kwargs):
109
+ """Keep archived_at in step with is_archived.
110
+
111
+ The stamp lives here rather than at each call site because is_archived
112
+ has more writers than the archive action: it is also a writable field
113
+ on the CRM account serializer, so a plain PATCH flips it. A call-site
114
+ guard would police only the call sites it knew about, and the column
115
+ would silently go NULL for every other path.
116
+
117
+ It fires on the TRANSITION, not on the state. Stamping whenever the
118
+ flag is set and the date is missing would quietly backfill every row
119
+ archived before this column existed, giving it the date of whatever
120
+ unrelated edit happened to touch it next — the exact invented date the
121
+ migration refused to write. A row whose archive date is unknown stays
122
+ NULL until something actually re-archives it.
123
+
124
+ Queryset .update() bypasses save() entirely, so the one bulk writer
125
+ (the customer deletion service) still has to stamp explicitly.
126
+
127
+ An explicitly supplied archived_at is respected, so a backfill or a
128
+ test can set a past date without save() overwriting it.
129
+ """
130
+ was_archived = (
131
+ False if self._state.adding
132
+ else getattr(self, '_archived_snapshot', None)
133
+ )
134
+ if self.is_archived and was_archived is False:
135
+ if self.archived_at is None:
136
+ self.archived_at = timezone.now()
137
+ self._add_update_field(kwargs, 'archived_at')
138
+ elif not self.is_archived and was_archived is True:
139
+ if self.archived_at is not None:
140
+ self.archived_at = None
141
+ self._add_update_field(kwargs, 'archived_at')
142
+ super().save(*args, **kwargs)
143
+ self._archived_snapshot = self.is_archived
144
+
145
+ @staticmethod
146
+ def _add_update_field(kwargs, name):
147
+ """Include a field we just changed in an explicit update_fields list.
148
+
149
+ Without this, save(update_fields=['is_archived']) would flip the flag
150
+ and drop the timestamp on the floor.
151
+ """
152
+ update_fields = kwargs.get('update_fields')
153
+ if update_fields is not None and name not in update_fields:
154
+ kwargs['update_fields'] = list(update_fields) + [name]
155
+
156
+ def __str__(self):
157
+ return f"Account {self.login} ({self.customer.email})"
158
+
159
+ @property
160
+ def current_group(self):
161
+ """Get the current MT5 group path for this account"""
162
+ return MT5GroupResolverService.resolve_group(self)
163
+
164
+
165
+ class AccountRiskSettings(BaseModel):
166
+ """CP self-service per-account risk guardrails. One row per account; null = not set."""
167
+
168
+ account = models.OneToOneField(
169
+ Account,
170
+ on_delete=models.CASCADE,
171
+ related_name='risk_settings',
172
+ )
173
+ daily_loss_limit = models.DecimalField(
174
+ max_digits=20, decimal_places=2, null=True, blank=True, default=None,
175
+ validators=[MinValueValidator(0)],
176
+ help_text='Account currency; null = not set.',
177
+ )
178
+ max_trades_per_day = models.IntegerField(
179
+ null=True, blank=True, default=None,
180
+ validators=[MinValueValidator(1)],
181
+ help_text='null = not set.',
182
+ )
183
+
184
+ class Meta:
185
+ app_label = 'accounts'
186
+ db_table = 'account_risk_settings'
187
+ verbose_name = 'Account Risk Settings'
188
+ verbose_name_plural = 'Account Risk Settings'
@@ -0,0 +1 @@
1
+ default_app_config = 'shared_models.balances.apps.BalancesConfig'
@@ -0,0 +1,8 @@
1
+ from django.apps import AppConfig
2
+
3
+
4
+ class BalancesConfig(AppConfig):
5
+ default_auto_field = 'django.db.models.BigAutoField'
6
+ name = 'shared_models.balances'
7
+ label = 'balances'
8
+ verbose_name = 'Shared Balances'
@@ -0,0 +1,43 @@
1
+ from decimal import Decimal
2
+
3
+ from django.db import migrations, models
4
+ import django.db.models.deletion
5
+
6
+
7
+ class Migration(migrations.Migration):
8
+
9
+ initial = True
10
+
11
+ dependencies = [
12
+ ('accounts', '0001_initial'),
13
+ ]
14
+
15
+ operations = [
16
+ migrations.CreateModel(
17
+ name='Balance',
18
+ fields=[
19
+ ('id', models.BigAutoField(primary_key=True, serialize=False)),
20
+ ('balance', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
21
+ ('credit', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
22
+ ('equity', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
23
+ ('margin', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
24
+ ('margin_free', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
25
+ ('margin_level', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
26
+ ('profit', models.DecimalField(decimal_places=10, default=Decimal('0'), max_digits=20)),
27
+ ('timestamp', models.DateTimeField()),
28
+ ('created_at', models.DateTimeField(auto_now_add=True)),
29
+ ('updated_at', models.DateTimeField(auto_now=True)),
30
+ ('account', models.ForeignKey(
31
+ db_column='account_id',
32
+ on_delete=django.db.models.deletion.PROTECT,
33
+ related_name='balances',
34
+ to='accounts.account',
35
+ )),
36
+ ],
37
+ options={
38
+ 'verbose_name': 'Balance',
39
+ 'verbose_name_plural': 'Balances',
40
+ 'db_table': 'balances',
41
+ },
42
+ ),
43
+ ]