fx-shared-models 0.2.76__tar.gz → 0.2.78__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 (196) hide show
  1. {fx_shared_models-0.2.76/fx_shared_models.egg-info → fx_shared_models-0.2.78}/PKG-INFO +1 -1
  2. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78/fx_shared_models.egg-info}/PKG-INFO +1 -1
  3. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/setup.py +1 -1
  4. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/models.py +14 -0
  5. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/services/commission_cache_service.py +2 -0
  6. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/services/commission_calculator_service.py +42 -11
  7. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/referrals/models.py +12 -0
  8. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/LICENSE +0 -0
  9. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/MANIFEST.in +0 -0
  10. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/README.md +0 -0
  11. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/fx_shared_models.egg-info/SOURCES.txt +0 -0
  12. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/fx_shared_models.egg-info/dependency_links.txt +0 -0
  13. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/fx_shared_models.egg-info/requires.txt +0 -0
  14. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/fx_shared_models.egg-info/top_level.txt +0 -0
  15. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/setup.cfg +0 -0
  16. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/__init__.py +0 -0
  17. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/__init__.py +0 -0
  18. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/apps.py +0 -0
  19. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0001_initial.py +0 -0
  20. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0002_remove_account_group_type_account_has_bonus_and_more.py +0 -0
  21. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0003_account_is_archived_account_is_trading_enabled.py +0 -0
  22. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0004_alter_account_created_at_alter_account_created_by_and_more.py +0 -0
  23. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0005_account_currency.py +0 -0
  24. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0006_alter_account_options.py +0 -0
  25. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/0007_alter_account_options.py +0 -0
  26. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/migrations/__init__.py +0 -0
  27. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/accounts/models.py +0 -0
  28. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/common/base.py +0 -0
  29. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/common/mixins.py +0 -0
  30. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/common/utils.py +0 -0
  31. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/company_ba/__init__.py +0 -0
  32. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/company_ba/apps.py +0 -0
  33. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/company_ba/migrations/0001_initial.py +0 -0
  34. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/company_ba/migrations/0002_alter_companybankaccount_options.py +0 -0
  35. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/company_ba/migrations/__init__.py +0 -0
  36. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/company_ba/models.py +0 -0
  37. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/constants.py +0 -0
  38. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/crypto_wallet/__init__.py +0 -0
  39. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/crypto_wallet/apps.py +0 -0
  40. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/crypto_wallet/migrations/0001_initial.py +0 -0
  41. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/crypto_wallet/migrations/0002_alter_companycryptowallet_options.py +0 -0
  42. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/crypto_wallet/migrations/__init__.py +0 -0
  43. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/crypto_wallet/models.py +0 -0
  44. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_crypto_wallet/__init__.py +0 -0
  45. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_crypto_wallet/apps.py +0 -0
  46. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_crypto_wallet/migrations/0001_initial.py +0 -0
  47. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_crypto_wallet/migrations/0002_alter_customercryptowallet_options.py +0 -0
  48. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_crypto_wallet/migrations/__init__.py +0 -0
  49. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_crypto_wallet/models.py +0 -0
  50. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_upi/__init__.py +0 -0
  51. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_upi/apps.py +0 -0
  52. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_upi/migrations/0001_initial.py +0 -0
  53. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_upi/migrations/0002_alter_customerupi_options.py +0 -0
  54. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_upi/migrations/__init__.py +0 -0
  55. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customer_upi/models.py +0 -0
  56. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/__init__.py +0 -0
  57. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/apps.py +0 -0
  58. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/enums.py +0 -0
  59. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0001_initial.py +0 -0
  60. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0002_alter_customer_email_alter_customer_first_name_and_more.py +0 -0
  61. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0004_customerauth_two_factor_backup_codes_and_more.py +0 -0
  62. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0005_customerauth_temp_webauthn_challenge.py +0 -0
  63. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0006_customerauth_webauthn_challenge.py +0 -0
  64. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0007_customerauth_blocked_customerauth_blocked_at_and_more.py +0 -0
  65. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0008_customer_email_hash.py +0 -0
  66. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0009_remove_customerauth_blocked_by_and_more.py +0 -0
  67. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0010_customerauth_blocked_by_customerauth_unblocked_by.py +0 -0
  68. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0011_customerauth_reset_token_and_more.py +0 -0
  69. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0012_alter_customer_email_alter_customer_first_name_and_more.py +0 -0
  70. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0013_alter_customerauth_blocked_by_and_more.py +0 -0
  71. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/0014_alter_customer_options.py +0 -0
  72. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/migrations/__init__.py +0 -0
  73. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/customers/models.py +0 -0
  74. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_campaigns/__init__.py +0 -0
  75. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_campaigns/apps.py +0 -0
  76. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_campaigns/migrations/0001_initial.py +0 -0
  77. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_campaigns/migrations/0002_alter_emailcampaign_options_and_more.py +0 -0
  78. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_campaigns/migrations/__init__.py +0 -0
  79. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_campaigns/models.py +0 -0
  80. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_log/__init__.py +0 -0
  81. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_log/apps.py +0 -0
  82. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_log/migrations/0001_initial.py +0 -0
  83. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_log/migrations/__init__.py +0 -0
  84. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/email_log/models.py +0 -0
  85. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/__init__.py +0 -0
  86. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/apps.py +0 -0
  87. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0001_initial.py +0 -0
  88. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0002_alter_commissiondistribution_processed_time.py +0 -0
  89. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0003_clientibmapping_idx_client_mapping_lookup_and_more.py +0 -0
  90. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0004_ibonboardingstatus.py +0 -0
  91. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0005_ibonboardingstatus_ib_journey_form_submitted_and_more.py +0 -0
  92. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0006_ibonboardingstatus_creation_source.py +0 -0
  93. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0007_ibquestionnaire.py +0 -0
  94. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0008_ibcommissionrule_lot_size.py +0 -0
  95. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0009_ibcommissionrule_min_volume.py +0 -0
  96. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0010_alter_commissiondistribution_rule_and_more.py +0 -0
  97. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/0011_alter_clientibmapping_agreement_and_more.py +0 -0
  98. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/migrations/__init__.py +0 -0
  99. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/model/ib_onboarding.py +0 -0
  100. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/model/ib_questionnaire.py +0 -0
  101. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ib_commission/services/__init__.py +0 -0
  102. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/referrals/__init__.py +0 -0
  103. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/referrals/apps.py +0 -0
  104. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/referrals/migrations/0001_initial.py +0 -0
  105. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/referrals/migrations/0002_alter_referralreward_payment_gateway_and_more.py +0 -0
  106. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/referrals/migrations/__init__.py +0 -0
  107. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/services/group_resolver.py +0 -0
  108. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/apps.py +0 -0
  109. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0001_initial.py +0 -0
  110. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0002_rename_is_enabled_systemsetting_is_active.py +0 -0
  111. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0003_tradingplatformserver.py +0 -0
  112. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0004_tradingplatformserver_connection_timeout_and_more.py +0 -0
  113. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0005_accountsequence_accounttype.py +0 -0
  114. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0006_alter_accounttype_sequence.py +0 -0
  115. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0007_remove_accounttype_default_group_type_and_more.py +0 -0
  116. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0008_paymentgatewayconfig_paymentmethodconfig_and_more.py +0 -0
  117. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0009_alter_accountsequence_created_at_and_more.py +0 -0
  118. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0010_alter_paymentgatewayconfig_gateway_and_more.py +0 -0
  119. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0011_tradingplatformserverlog.py +0 -0
  120. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0012_alter_emailcontent_content_sections.py +0 -0
  121. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0013_kycrequirementrule.py +0 -0
  122. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0014_alter_paymentgatewayconfig_payment_method_and_more.py +0 -0
  123. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0015_alter_paymentgatewayconfig_payment_method_and_more.py +0 -0
  124. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0016_alter_emailconfiguration_options_and_more.py +0 -0
  125. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0017_brokerconfiguration.py +0 -0
  126. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/0018_accounttype_demo_auto_deposit_amount.py +0 -0
  127. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/migrations/__init__.py +0 -0
  128. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/__init__.py +0 -0
  129. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/account_sequence.py +0 -0
  130. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/account_types.py +0 -0
  131. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/base.py +0 -0
  132. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/broker_config.py +0 -0
  133. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/email.py +0 -0
  134. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/group_configurations.py +0 -0
  135. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/payment_methods.py +0 -0
  136. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/trading_platform.py +0 -0
  137. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/models/transaction_configs.py +0 -0
  138. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/system_settings/serializers.py +0 -0
  139. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/__init__.py +0 -0
  140. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/apps.py +0 -0
  141. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/migrations/0001_initial.py +0 -0
  142. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/migrations/0002_alter_deal_id.py +0 -0
  143. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/migrations/0003_alter_deal_id.py +0 -0
  144. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/migrations/0004_alter_deal_id.py +0 -0
  145. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/migrations/0005_deal_idx_deal_position_lookup_and_more.py +0 -0
  146. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/migrations/__init__.py +0 -0
  147. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/trading/models.py +0 -0
  148. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/__init__.py +0 -0
  149. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/apps.py +0 -0
  150. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/constants.py +0 -0
  151. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/enums.py +0 -0
  152. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0001_initial.py +0 -0
  153. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0002_transaction_mt5_ticket.py +0 -0
  154. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0003_alter_transaction_options.py +0 -0
  155. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0004_alter_transaction_created_by.py +0 -0
  156. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0005_alter_transaction_status.py +0 -0
  157. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0006_transaction_approved_at.py +0 -0
  158. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0007_transaction_assigned_user_and_more.py +0 -0
  159. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0008_alter_transaction_payment_method.py +0 -0
  160. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0009_alter_transaction_approved_by_and_more.py +0 -0
  161. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0010_alter_transaction_payment_method.py +0 -0
  162. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0011_alter_transaction_options.py +0 -0
  163. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/0012_transaction_transaction_custome_fb8ec8_idx.py +0 -0
  164. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/migrations/__init__.py +0 -0
  165. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/transactions/models.py +0 -0
  166. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ui_elements/__init__.py +0 -0
  167. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ui_elements/apps.py +0 -0
  168. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ui_elements/migrations/0001_initial.py +0 -0
  169. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ui_elements/migrations/__init__.py +0 -0
  170. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/ui_elements/models.py +0 -0
  171. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/upi_id/__init__.py +0 -0
  172. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/upi_id/apps.py +0 -0
  173. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/upi_id/migrations/0001_initial.py +0 -0
  174. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/upi_id/migrations/0002_alter_companyupiid_options.py +0 -0
  175. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/upi_id/migrations/__init__.py +0 -0
  176. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/upi_id/models.py +0 -0
  177. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/__init__.py +0 -0
  178. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/apps.py +0 -0
  179. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/managers.py +0 -0
  180. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0001_initial.py +0 -0
  181. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0002_alter_crmuser_managers.py +0 -0
  182. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0003_alter_crmuser_options_alter_crmuser_managers.py +0 -0
  183. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0004_alter_crmuser_options.py +0 -0
  184. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0005_remove_crmuser_is_2fa_enabled_and_more.py +0 -0
  185. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0006_rename_preferred_2fa_method_usersettings_default_2fa_method_and_more.py +0 -0
  186. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0007_alter_usersettings_options_alter_usersettings_table.py +0 -0
  187. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0008_usersettings_temp_webauthn_challenge.py +0 -0
  188. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0009_alter_userprofile_profile_picture.py +0 -0
  189. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0010_alter_crmuser_options.py +0 -0
  190. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0011_alter_crmuser_options.py +0 -0
  191. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0012_alter_crmuser_managers_usersettings_is_2fa_enabled_and_more.py +0 -0
  192. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0013_usersettings_is_2fa_enabled_and_more.py +0 -0
  193. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0014_alter_crmuser_groups_alter_crmuser_user_permissions_and_more.py +0 -0
  194. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/0015_alter_crmuser_options.py +0 -0
  195. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/migrations/__init__.py +0 -0
  196. {fx_shared_models-0.2.76 → fx_shared_models-0.2.78}/shared_models/users/models.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fx-shared-models
3
- Version: 0.2.76
3
+ Version: 0.2.78
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.76
3
+ Version: 0.2.78
4
4
  Summary: Shared models for FX Backend
5
5
  Home-page: https://github.com/fxbackend/fx-shared-models
6
6
  Author: FX Backend
@@ -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.76', # Incremented version after adding shared_models/__init__.py
5
+ version='0.2.78', # Incremented version after adding shared_models/__init__.py
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
@@ -33,6 +33,15 @@ class IBHierarchy(BaseModel):
33
33
  help_text='IB account that receives commissions')
34
34
  mt5_login = models.IntegerField(help_text='MT5 login for deal processing')
35
35
 
36
+ default_agreement = models.ForeignKey(
37
+ 'IBAgreement',
38
+ null=True,
39
+ blank=True,
40
+ on_delete=models.SET_NULL,
41
+ related_name='default_for_hierarchies',
42
+ help_text='Default agreement when not specified in client mapping'
43
+ )
44
+
36
45
  is_active = models.BooleanField(default=True)
37
46
 
38
47
  def save(self, *args, **kwargs):
@@ -95,6 +104,11 @@ class ClientIBMapping(BaseModel):
95
104
  help_text='Default agreement for this client-IB relationship')
96
105
  ib_path = models.TextField(help_text='Full path of IBs using customer ids')
97
106
  mt5_login = models.IntegerField(help_text="Client's MT5 login", null=True, blank=True)
107
+ agreement_path = models.TextField(
108
+ null=True,
109
+ blank=True,
110
+ help_text='Agreement IDs for each IB level in hierarchy (dot-separated). Empty positions use IB default.'
111
+ )
98
112
 
99
113
  class Meta:
100
114
  app_label = 'ib_commission'
@@ -350,6 +350,7 @@ class CommissionCacheService:
350
350
  'level': hierarchy.level,
351
351
  'mt5_login': hierarchy.mt5_login,
352
352
  'is_active': hierarchy.is_active,
353
+ 'default_agreement_id': hierarchy.default_agreement_id if hasattr(hierarchy, 'default_agreement_id') else None,
353
354
  }
354
355
 
355
356
  # Add ib_account data if exists
@@ -432,6 +433,7 @@ class CommissionCacheService:
432
433
  'direct_ib_customer_id': mapping.direct_ib_customer_id,
433
434
  'master_ib_customer_id': mapping.master_ib_customer_id,
434
435
  'agreement_id': mapping.agreement_id,
436
+ 'agreement_path': mapping.agreement_path if hasattr(mapping, 'agreement_path') else None,
435
437
  'ib_path': mapping.ib_path,
436
438
  'mt5_login': mapping.mt5_login,
437
439
  }
@@ -69,6 +69,16 @@ class CommissionCalculatorService:
69
69
  logger.debug(f"[CalcDist Return Check] Returning type {type(return_value)}: {return_value}")
70
70
  return return_value
71
71
 
72
+ # Check if this is a close by deal with zero profit
73
+ if entry == cls.ENTRY_OUT_BY and profit is not None:
74
+ # Convert to string with 2 decimal places to check if it starts with 0.00
75
+ profit_str = f"{profit:.2f}"
76
+ if profit_str.startswith('0.00') or profit_str.startswith('-0.00'):
77
+ logger.info(f"Deal ({deal_ticket}) is a close by and profit is 0 ({profit}), skipping")
78
+ return_value = {'distributions': [], 'client_deduction': 0, 'client_server_id': None, 'is_processed': True} # Indicate skip
79
+ logger.debug(f"[CalcDist Return Check] Returning type {type(return_value)}: {return_value}")
80
+ return return_value
81
+
72
82
  # Check if commission already processed (excluding DELAYED)
73
83
  # This check prevents reprocessing successful or skipped/failed deals but allows retrying delayed ones.
74
84
  if CommissionDistribution.objects.filter(
@@ -293,6 +303,15 @@ class CommissionCalculatorService:
293
303
  # Get all ancestor IB IDs from the path
294
304
  path_parts = ib_hierarchy.path.split('.') # Includes the direct IB's ID
295
305
 
306
+ # Parse agreement_path if available (with backward compatibility check)
307
+ agreement_ids = []
308
+ if hasattr(client_mapping, 'agreement_path') and client_mapping.agreement_path:
309
+ agreement_ids = client_mapping.agreement_path.split('.')
310
+
311
+ # Validate agreement_path structure matches ib_path
312
+ if len(agreement_ids) != len(path_parts):
313
+ logger.warning(f"Agreement path length ({len(agreement_ids)}) doesn't match IB path length ({len(path_parts)}) for client {client_mapping.customer_id}")
314
+
296
315
  # Get all relevant IB agreements (cache this if possible)
297
316
  ib_agreements = {}
298
317
 
@@ -312,18 +331,30 @@ class CommissionCalculatorService:
312
331
  )
313
332
  )
314
333
 
315
- for member in agreement_members:
316
- member_customer_id_str = str(member.customer_id)
317
-
318
- # For the direct IB, only use the client mapping agreement
319
- if member_customer_id_str == str(client_mapping.direct_ib_customer_id):
320
- # Only add if it matches the client mapping agreement
321
- if client_mapping.agreement_id and member.agreement_id == client_mapping.agreement_id:
322
- ib_agreements[member_customer_id_str] = member.agreement
323
- # Skip other agreements for the direct IB
334
+ # Build ib_agreements respecting agreement_path
335
+ for i, ib_id in enumerate(path_parts):
336
+ if i < len(agreement_ids) and agreement_ids[i]:
337
+ # Use specified agreement from agreement_path
338
+ member = next((m for m in agreement_members
339
+ if str(m.customer_id) == ib_id
340
+ and str(m.agreement_id) == agreement_ids[i]), None)
341
+ if member:
342
+ ib_agreements[ib_id] = member.agreement
343
+ else:
344
+ logger.warning(f"Agreement {agreement_ids[i]} not found for IB {ib_id}, skipping this IB")
324
345
  else:
325
- # For parent IBs in the hierarchy, use their agreements (current behavior)
326
- ib_agreements[member_customer_id_str] = member.agreement
346
+ # Try to use default agreement from IBHierarchy
347
+ hierarchy = IBHierarchy.objects.filter(
348
+ customer_id=ib_id, is_active=True
349
+ ).first()
350
+ if hierarchy and hasattr(hierarchy, 'default_agreement') and hierarchy.default_agreement:
351
+ ib_agreements[ib_id] = hierarchy.default_agreement
352
+ else:
353
+ # Fallback: use any agreement for this IB (current behavior)
354
+ member = next((m for m in agreement_members
355
+ if str(m.customer_id) == ib_id), None)
356
+ if member:
357
+ ib_agreements[ib_id] = member.agreement
327
358
 
328
359
  # Calculate rule-based distribution for the hierarchy
329
360
  distributions = cls._calculate_rule_based_distribution(
@@ -94,6 +94,18 @@ class ReferralSource(BaseModel):
94
94
  help_text="Optional: Specific account to receive rewards generated by this code."
95
95
  )
96
96
 
97
+ # IB hierarchy tracking for agreement path
98
+ ib_path = models.TextField(
99
+ null=True,
100
+ blank=True,
101
+ help_text='Full IB hierarchy path (dot-separated customer IDs) at time of code generation'
102
+ )
103
+ agreement_path = models.TextField(
104
+ null=True,
105
+ blank=True,
106
+ help_text='Agreement IDs for each IB level (dot-separated) at time of code generation'
107
+ )
108
+
97
109
  # Status & Stats
98
110
  is_active = models.BooleanField(default=True)
99
111
  created_at = models.DateTimeField(auto_now_add=True)