fx-shared-models 0.2.78__tar.gz → 0.2.80__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.
- {fx_shared_models-0.2.78/fx_shared_models.egg-info → fx_shared_models-0.2.80}/PKG-INFO +1 -1
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80/fx_shared_models.egg-info}/PKG-INFO +1 -1
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/fx_shared_models.egg-info/SOURCES.txt +2 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/setup.py +1 -1
- fx_shared_models-0.2.80/shared_models/ib_commission/migrations/0012_clientibmapping_agreement_path_and_more.py +24 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/services/commission_cache_service.py +112 -82
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/services/commission_calculator_service.py +3 -3
- fx_shared_models-0.2.80/shared_models/referrals/migrations/0003_referralsource_agreement_path_referralsource_ib_path.py +23 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/LICENSE +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/MANIFEST.in +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/README.md +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/fx_shared_models.egg-info/dependency_links.txt +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/fx_shared_models.egg-info/requires.txt +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/fx_shared_models.egg-info/top_level.txt +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/setup.cfg +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0002_remove_account_group_type_account_has_bonus_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0003_account_is_archived_account_is_trading_enabled.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0004_alter_account_created_at_alter_account_created_by_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0005_account_currency.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0006_alter_account_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/0007_alter_account_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/common/base.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/common/mixins.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/common/utils.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/migrations/0002_alter_companybankaccount_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/constants.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/crypto_wallet/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/crypto_wallet/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/crypto_wallet/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/crypto_wallet/migrations/0002_alter_companycryptowallet_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/crypto_wallet/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/crypto_wallet/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/migrations/0002_alter_customercryptowallet_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_upi/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_upi/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_upi/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_upi/migrations/0002_alter_customerupi_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_upi/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_upi/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/enums.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0002_alter_customer_email_alter_customer_first_name_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0004_customerauth_two_factor_backup_codes_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0005_customerauth_temp_webauthn_challenge.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0006_customerauth_webauthn_challenge.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0007_customerauth_blocked_customerauth_blocked_at_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0008_customer_email_hash.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0009_remove_customerauth_blocked_by_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0010_customerauth_blocked_by_customerauth_unblocked_by.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0011_customerauth_reset_token_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0012_alter_customer_email_alter_customer_first_name_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0013_alter_customerauth_blocked_by_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/0014_alter_customer_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/migrations/0002_alter_emailcampaign_options_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_log/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_log/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_log/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_log/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_log/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0002_alter_commissiondistribution_processed_time.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0003_clientibmapping_idx_client_mapping_lookup_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0004_ibonboardingstatus.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0005_ibonboardingstatus_ib_journey_form_submitted_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0006_ibonboardingstatus_creation_source.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0007_ibquestionnaire.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0008_ibcommissionrule_lot_size.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0009_ibcommissionrule_min_volume.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0010_alter_commissiondistribution_rule_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/0011_alter_clientibmapping_agreement_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/model/ib_onboarding.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/model/ib_questionnaire.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ib_commission/services/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/referrals/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/referrals/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/referrals/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/referrals/migrations/0002_alter_referralreward_payment_gateway_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/referrals/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/referrals/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/services/group_resolver.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0002_rename_is_enabled_systemsetting_is_active.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0003_tradingplatformserver.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0004_tradingplatformserver_connection_timeout_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0005_accountsequence_accounttype.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0006_alter_accounttype_sequence.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0007_remove_accounttype_default_group_type_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0008_paymentgatewayconfig_paymentmethodconfig_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0009_alter_accountsequence_created_at_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0010_alter_paymentgatewayconfig_gateway_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0011_tradingplatformserverlog.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0012_alter_emailcontent_content_sections.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0013_kycrequirementrule.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0014_alter_paymentgatewayconfig_payment_method_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0015_alter_paymentgatewayconfig_payment_method_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0016_alter_emailconfiguration_options_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0017_brokerconfiguration.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/0018_accounttype_demo_auto_deposit_amount.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/account_sequence.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/account_types.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/base.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/broker_config.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/email.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/group_configurations.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/payment_methods.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/trading_platform.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/models/transaction_configs.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/system_settings/serializers.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/migrations/0002_alter_deal_id.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/migrations/0003_alter_deal_id.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/migrations/0004_alter_deal_id.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/migrations/0005_deal_idx_deal_position_lookup_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/trading/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/constants.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/enums.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0002_transaction_mt5_ticket.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0003_alter_transaction_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0004_alter_transaction_created_by.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0005_alter_transaction_status.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0006_transaction_approved_at.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0007_transaction_assigned_user_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0008_alter_transaction_payment_method.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0009_alter_transaction_approved_by_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0010_alter_transaction_payment_method.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0011_alter_transaction_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/0012_transaction_transaction_custome_fb8ec8_idx.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/transactions/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ui_elements/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ui_elements/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ui_elements/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ui_elements/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/ui_elements/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/upi_id/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/upi_id/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/upi_id/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/upi_id/migrations/0002_alter_companyupiid_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/upi_id/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/upi_id/models.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/apps.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/managers.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0001_initial.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0002_alter_crmuser_managers.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0003_alter_crmuser_options_alter_crmuser_managers.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0004_alter_crmuser_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0005_remove_crmuser_is_2fa_enabled_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0006_rename_preferred_2fa_method_usersettings_default_2fa_method_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0007_alter_usersettings_options_alter_usersettings_table.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0008_usersettings_temp_webauthn_challenge.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0009_alter_userprofile_profile_picture.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0010_alter_crmuser_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0011_alter_crmuser_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0012_alter_crmuser_managers_usersettings_is_2fa_enabled_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0013_usersettings_is_2fa_enabled_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0014_alter_crmuser_groups_alter_crmuser_user_permissions_and_more.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/0015_alter_crmuser_options.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/migrations/__init__.py +0 -0
- {fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/users/models.py +0 -0
|
@@ -90,6 +90,7 @@ shared_models/ib_commission/migrations/0008_ibcommissionrule_lot_size.py
|
|
|
90
90
|
shared_models/ib_commission/migrations/0009_ibcommissionrule_min_volume.py
|
|
91
91
|
shared_models/ib_commission/migrations/0010_alter_commissiondistribution_rule_and_more.py
|
|
92
92
|
shared_models/ib_commission/migrations/0011_alter_clientibmapping_agreement_and_more.py
|
|
93
|
+
shared_models/ib_commission/migrations/0012_clientibmapping_agreement_path_and_more.py
|
|
93
94
|
shared_models/ib_commission/migrations/__init__.py
|
|
94
95
|
shared_models/ib_commission/model/ib_onboarding.py
|
|
95
96
|
shared_models/ib_commission/model/ib_questionnaire.py
|
|
@@ -101,6 +102,7 @@ shared_models/referrals/apps.py
|
|
|
101
102
|
shared_models/referrals/models.py
|
|
102
103
|
shared_models/referrals/migrations/0001_initial.py
|
|
103
104
|
shared_models/referrals/migrations/0002_alter_referralreward_payment_gateway_and_more.py
|
|
105
|
+
shared_models/referrals/migrations/0003_referralsource_agreement_path_referralsource_ib_path.py
|
|
104
106
|
shared_models/referrals/migrations/__init__.py
|
|
105
107
|
shared_models/services/group_resolver.py
|
|
106
108
|
shared_models/system_settings/apps.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.
|
|
5
|
+
version='0.2.80', # 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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Generated by Django 4.2.20 on 2025-08-14 12:32
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
import django.db.models.deletion
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class Migration(migrations.Migration):
|
|
8
|
+
|
|
9
|
+
dependencies = [
|
|
10
|
+
('ib_commission', '0011_alter_clientibmapping_agreement_and_more'),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
operations = [
|
|
14
|
+
migrations.AddField(
|
|
15
|
+
model_name='clientibmapping',
|
|
16
|
+
name='agreement_path',
|
|
17
|
+
field=models.TextField(blank=True, help_text='Agreement IDs for each IB level in hierarchy (dot-separated). Empty positions use IB default.', null=True),
|
|
18
|
+
),
|
|
19
|
+
migrations.AddField(
|
|
20
|
+
model_name='ibhierarchy',
|
|
21
|
+
name='default_agreement',
|
|
22
|
+
field=models.ForeignKey(blank=True, help_text='Default agreement when not specified in client mapping', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='default_for_hierarchies', to='ib_commission.ibagreement'),
|
|
23
|
+
),
|
|
24
|
+
]
|
|
@@ -30,7 +30,8 @@ class CommissionCacheService:
|
|
|
30
30
|
"""Service for caching commission-related data using Django's cache framework"""
|
|
31
31
|
|
|
32
32
|
# Cache key patterns (use consistent patterns across projects)
|
|
33
|
-
|
|
33
|
+
# NOTE: Symbol not included in key to support comma-separated symbols
|
|
34
|
+
RULE_CACHE_KEY = "commission_rule:{agreement_id}:{commission_type}"
|
|
34
35
|
AGREEMENT_CACHE_KEY = "ib_agreement:{customer_id}"
|
|
35
36
|
HIERARCHY_CACHE_KEY = "ib_hierarchy:{customer_id}"
|
|
36
37
|
CLIENT_MAPPING_CACHE_KEY = "client_mapping:{mt5_login}:{customer_id}"
|
|
@@ -166,38 +167,57 @@ class CommissionCacheService:
|
|
|
166
167
|
logger.info("Cache disabled, fetching from database")
|
|
167
168
|
return cls._get_commission_rules_from_db(agreement_id, symbol, commission_type, account_type_id)
|
|
168
169
|
|
|
170
|
+
# Build cache key without symbol to support comma-separated symbols
|
|
169
171
|
cache_key = cls.RULE_CACHE_KEY.format(
|
|
170
172
|
agreement_id=agreement_id,
|
|
171
|
-
symbol=symbol if symbol is not None else "none",
|
|
172
173
|
commission_type=commission_type
|
|
173
174
|
)
|
|
174
175
|
|
|
175
|
-
|
|
176
|
-
if account_type_id:
|
|
177
|
-
cache_key += f":at{account_type_id}"
|
|
178
|
-
|
|
179
|
-
logger.info(f"Looking for cache key: {cache_key}")
|
|
176
|
+
logger.info(f"Looking for cache key: {cache_key} (will filter for symbol: {symbol})")
|
|
180
177
|
|
|
181
178
|
# Try to get from cache first
|
|
182
179
|
cached_rules = get_cache().get(cache_key)
|
|
183
180
|
if cached_rules is not None:
|
|
184
181
|
logger.info(f"Cache hit for {cache_key}")
|
|
185
|
-
# Convert dicts back to objects that support attribute access
|
|
182
|
+
# Convert dicts back to objects that support attribute access and filter
|
|
186
183
|
rules = []
|
|
187
184
|
for rule_dict in cached_rules:
|
|
188
185
|
# Create a simple object with attributes
|
|
189
186
|
rule_obj = type('CachedRule', (), rule_dict)()
|
|
190
|
-
|
|
187
|
+
|
|
188
|
+
# Filter by account type if specified
|
|
189
|
+
if account_type_id:
|
|
190
|
+
# Include rules with matching account type or no account type (wildcard)
|
|
191
|
+
if rule_obj.account_type_id and rule_obj.account_type_id != account_type_id:
|
|
192
|
+
continue
|
|
193
|
+
|
|
194
|
+
# Filter by symbol
|
|
195
|
+
if symbol and symbol != '*':
|
|
196
|
+
if not rule_obj.symbol or rule_obj.symbol == '*':
|
|
197
|
+
# Wildcard rules always match
|
|
198
|
+
rules.append(rule_obj)
|
|
199
|
+
elif ',' in rule_obj.symbol:
|
|
200
|
+
# Check if our symbol is in the comma-separated list
|
|
201
|
+
rule_symbols = [s.strip().upper() for s in rule_obj.symbol.split(',')]
|
|
202
|
+
if symbol.upper() in rule_symbols:
|
|
203
|
+
rules.append(rule_obj)
|
|
204
|
+
elif rule_obj.symbol.upper() == symbol.upper():
|
|
205
|
+
# Exact match
|
|
206
|
+
rules.append(rule_obj)
|
|
207
|
+
else:
|
|
208
|
+
# No symbol filter or wildcard requested
|
|
209
|
+
rules.append(rule_obj)
|
|
210
|
+
|
|
191
211
|
return rules
|
|
192
212
|
|
|
193
213
|
logger.info(f"Cache miss for {cache_key}")
|
|
194
214
|
|
|
195
|
-
# If not in cache, get from database
|
|
196
|
-
|
|
215
|
+
# If not in cache, get ALL rules for this agreement/commission_type from database
|
|
216
|
+
all_rules = cls._get_all_commission_rules_from_db(agreement_id, commission_type)
|
|
197
217
|
|
|
198
|
-
# Convert rules to serializable format for caching
|
|
218
|
+
# Convert ALL rules to serializable format for caching
|
|
199
219
|
serialized_rules = []
|
|
200
|
-
for rule in
|
|
220
|
+
for rule in all_rules:
|
|
201
221
|
rule_dict = model_to_dict(rule)
|
|
202
222
|
# Add account_type_id explicitly since model_to_dict uses 'account_type' for FK
|
|
203
223
|
rule_dict['account_type_id'] = rule.account_type_id
|
|
@@ -206,10 +226,52 @@ class CommissionCacheService:
|
|
|
206
226
|
rule_dict['account_type_name'] = rule.account_type.name
|
|
207
227
|
serialized_rules.append(rule_dict)
|
|
208
228
|
|
|
209
|
-
# Store in cache
|
|
210
|
-
logger.info(f"Storing in cache: {cache_key}")
|
|
229
|
+
# Store ALL rules in cache
|
|
230
|
+
logger.info(f"Storing {len(serialized_rules)} rules in cache: {cache_key}")
|
|
211
231
|
get_cache().set(cache_key, serialized_rules, cls.RULE_CACHE_EXPIRY)
|
|
212
232
|
|
|
233
|
+
# Now filter the rules based on the requested criteria
|
|
234
|
+
filtered_rules = []
|
|
235
|
+
for rule in all_rules:
|
|
236
|
+
# Filter by account type if specified
|
|
237
|
+
if account_type_id:
|
|
238
|
+
# Include rules with matching account type or no account type (wildcard)
|
|
239
|
+
if rule.account_type_id and rule.account_type_id != account_type_id:
|
|
240
|
+
continue
|
|
241
|
+
|
|
242
|
+
# Filter by symbol
|
|
243
|
+
if symbol and symbol != '*':
|
|
244
|
+
if not rule.symbol or rule.symbol == '*':
|
|
245
|
+
# Wildcard rules always match
|
|
246
|
+
filtered_rules.append(rule)
|
|
247
|
+
elif ',' in rule.symbol:
|
|
248
|
+
# Check if our symbol is in the comma-separated list
|
|
249
|
+
rule_symbols = [s.strip().upper() for s in rule.symbol.split(',')]
|
|
250
|
+
if symbol.upper() in rule_symbols:
|
|
251
|
+
filtered_rules.append(rule)
|
|
252
|
+
elif rule.symbol.upper() == symbol.upper():
|
|
253
|
+
# Exact match
|
|
254
|
+
filtered_rules.append(rule)
|
|
255
|
+
else:
|
|
256
|
+
# No symbol filter or wildcard requested
|
|
257
|
+
filtered_rules.append(rule)
|
|
258
|
+
|
|
259
|
+
return filtered_rules
|
|
260
|
+
|
|
261
|
+
@classmethod
|
|
262
|
+
def _get_all_commission_rules_from_db(cls, agreement_id, commission_type):
|
|
263
|
+
"""Get ALL commission rules for an agreement from database (no filtering)"""
|
|
264
|
+
from shared_models.ib_commission.models import IBCommissionRule
|
|
265
|
+
|
|
266
|
+
logger.info(f"Fetching ALL rules from DB for agreement_id={agreement_id}, commission_type={commission_type}")
|
|
267
|
+
|
|
268
|
+
rules = IBCommissionRule.objects.filter(
|
|
269
|
+
agreement_id=agreement_id,
|
|
270
|
+
commission_type=commission_type
|
|
271
|
+
).select_related('account_type').order_by('priority')
|
|
272
|
+
|
|
273
|
+
rules = list(rules)
|
|
274
|
+
logger.info(f"Found {len(rules)} total rules in database")
|
|
213
275
|
return rules
|
|
214
276
|
|
|
215
277
|
@classmethod
|
|
@@ -227,9 +289,15 @@ class CommissionCacheService:
|
|
|
227
289
|
|
|
228
290
|
# Smart filtering based on symbol
|
|
229
291
|
if symbol and symbol != '*':
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
292
|
+
# Build Q object for symbol matching (including comma-separated symbols)
|
|
293
|
+
symbol_q = models.Q(symbol__iexact=symbol)
|
|
294
|
+
# Also check if the symbol is contained in comma-separated lists
|
|
295
|
+
symbol_q |= models.Q(symbol__icontains=f"{symbol},") # Symbol at start or middle
|
|
296
|
+
symbol_q |= models.Q(symbol__icontains=f",{symbol}") # Symbol at end or middle
|
|
297
|
+
# Also include wildcards
|
|
298
|
+
symbol_q |= models.Q(symbol='*') | models.Q(symbol__isnull=True)
|
|
299
|
+
|
|
300
|
+
rules_query = rules_query.filter(symbol_q)
|
|
233
301
|
|
|
234
302
|
# Filter by account type if provided
|
|
235
303
|
if account_type_id:
|
|
@@ -239,6 +307,23 @@ class CommissionCacheService:
|
|
|
239
307
|
|
|
240
308
|
rules = list(rules_query.select_related('account_type').order_by('priority'))
|
|
241
309
|
|
|
310
|
+
# Post-process to ensure exact symbol matches for comma-separated values
|
|
311
|
+
if symbol and symbol != '*':
|
|
312
|
+
filtered_rules = []
|
|
313
|
+
for rule in rules:
|
|
314
|
+
if not rule.symbol or rule.symbol == '*':
|
|
315
|
+
# Wildcard rules always match
|
|
316
|
+
filtered_rules.append(rule)
|
|
317
|
+
elif ',' in rule.symbol:
|
|
318
|
+
# Check if our symbol is in the comma-separated list (case-insensitive)
|
|
319
|
+
rule_symbols = [s.strip().upper() for s in rule.symbol.split(',')]
|
|
320
|
+
if symbol.upper() in rule_symbols:
|
|
321
|
+
filtered_rules.append(rule)
|
|
322
|
+
elif rule.symbol.upper() == symbol.upper():
|
|
323
|
+
# Exact match for non-comma-separated symbols
|
|
324
|
+
filtered_rules.append(rule)
|
|
325
|
+
rules = filtered_rules
|
|
326
|
+
|
|
242
327
|
logger.info(f"Found {len(rules)} rules in database")
|
|
243
328
|
return rules
|
|
244
329
|
|
|
@@ -322,8 +407,6 @@ class CommissionCacheService:
|
|
|
322
407
|
logger.info("Cache disabled, fetching from database")
|
|
323
408
|
return cls._get_ib_hierarchy_from_db(customer_id)
|
|
324
409
|
|
|
325
|
-
from shared_models.ib_commission.models import IBHierarchy
|
|
326
|
-
|
|
327
410
|
cache_key = cls.HIERARCHY_CACHE_KEY.format(customer_id=customer_id)
|
|
328
411
|
|
|
329
412
|
logger.info(f"Looking for cache key: {cache_key}")
|
|
@@ -498,70 +581,17 @@ class CommissionCacheService:
|
|
|
498
581
|
return
|
|
499
582
|
|
|
500
583
|
if agreement_id:
|
|
501
|
-
#
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
# Get all rules for this agreement
|
|
505
|
-
rules = IBCommissionRule.objects.filter(
|
|
506
|
-
agreement_id=agreement_id
|
|
507
|
-
).values('symbol', 'account_type_id').distinct()
|
|
508
|
-
|
|
509
|
-
# Build list of unique symbol/account_type combinations
|
|
510
|
-
symbol_account_combos = []
|
|
511
|
-
unique_symbols = set()
|
|
512
|
-
|
|
513
|
-
for rule in rules:
|
|
514
|
-
symbol = rule['symbol']
|
|
515
|
-
account_type_id = rule['account_type_id']
|
|
516
|
-
|
|
517
|
-
# Handle comma-separated symbols
|
|
518
|
-
if symbol and ',' in symbol:
|
|
519
|
-
# Split comma-separated symbols and add each individually
|
|
520
|
-
for s in symbol.split(','):
|
|
521
|
-
s = s.strip()
|
|
522
|
-
if s:
|
|
523
|
-
unique_symbols.add(s)
|
|
524
|
-
symbol_account_combos.append((s, account_type_id))
|
|
525
|
-
else:
|
|
526
|
-
unique_symbols.add(symbol)
|
|
527
|
-
symbol_account_combos.append((symbol, account_type_id))
|
|
528
|
-
|
|
529
|
-
# Also add None symbol if not present (for wildcard rules)
|
|
530
|
-
if None not in unique_symbols:
|
|
531
|
-
unique_symbols.add(None)
|
|
532
|
-
# Add combinations for None symbol with all account types
|
|
533
|
-
account_types = set(r['account_type_id'] for r in rules if r['account_type_id'])
|
|
534
|
-
for at_id in account_types:
|
|
535
|
-
symbol_account_combos.append((None, at_id))
|
|
536
|
-
# Also add None/None combo
|
|
537
|
-
symbol_account_combos.append((None, None))
|
|
538
|
-
|
|
539
|
-
# Invalidate all commission types, symbols, and account types for this agreement
|
|
584
|
+
# With the new caching strategy, we only need to invalidate 2 keys per agreement
|
|
585
|
+
# (one for COMMISSION and one for REBATE)
|
|
540
586
|
invalidated_count = 0
|
|
541
587
|
for commission_type in ['COMMISSION', 'REBATE']:
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
logger.debug(f"Invalidating cache key: {cache_key}")
|
|
550
|
-
get_cache().delete(cache_key)
|
|
551
|
-
invalidated_count += 1
|
|
552
|
-
|
|
553
|
-
# Then invalidate keys with account types
|
|
554
|
-
for symbol, account_type_id in symbol_account_combos:
|
|
555
|
-
cache_key = cls.RULE_CACHE_KEY.format(
|
|
556
|
-
agreement_id=agreement_id,
|
|
557
|
-
symbol=symbol if symbol is not None else "none",
|
|
558
|
-
commission_type=commission_type
|
|
559
|
-
)
|
|
560
|
-
if account_type_id:
|
|
561
|
-
cache_key += f":at{account_type_id}"
|
|
562
|
-
logger.debug(f"Invalidating cache key: {cache_key}")
|
|
563
|
-
get_cache().delete(cache_key)
|
|
564
|
-
invalidated_count += 1
|
|
588
|
+
cache_key = cls.RULE_CACHE_KEY.format(
|
|
589
|
+
agreement_id=agreement_id,
|
|
590
|
+
commission_type=commission_type
|
|
591
|
+
)
|
|
592
|
+
logger.debug(f"Invalidating cache key: {cache_key}")
|
|
593
|
+
get_cache().delete(cache_key)
|
|
594
|
+
invalidated_count += 1
|
|
565
595
|
|
|
566
596
|
logger.info(f"Invalidated {invalidated_count} cache keys for agreement {agreement_id}")
|
|
567
597
|
else:
|
|
@@ -957,7 +957,7 @@ class CommissionCalculatorService:
|
|
|
957
957
|
if account_type_id:
|
|
958
958
|
exact_symbol_account_type_rules = [
|
|
959
959
|
rule for rule in all_rules
|
|
960
|
-
if rule.symbol and rule.symbol
|
|
960
|
+
if rule.symbol and cls._symbol_matches(rule.symbol, symbol)
|
|
961
961
|
and rule.account_type_id == account_type_id
|
|
962
962
|
]
|
|
963
963
|
|
|
@@ -1209,7 +1209,7 @@ class CommissionCalculatorService:
|
|
|
1209
1209
|
# 2. Exact symbol match (any account type)
|
|
1210
1210
|
exact_symbol_rules = [
|
|
1211
1211
|
rule for rule in all_rules
|
|
1212
|
-
if rule.symbol and rule.symbol
|
|
1212
|
+
if rule.symbol and cls._symbol_matches(rule.symbol, symbol)
|
|
1213
1213
|
and (rule.account_type_id is None)
|
|
1214
1214
|
]
|
|
1215
1215
|
|
|
@@ -1393,7 +1393,7 @@ class CommissionCalculatorService:
|
|
|
1393
1393
|
# 2. Exact symbol match (any account type)
|
|
1394
1394
|
exact_symbol_rules = [
|
|
1395
1395
|
rule for rule in all_rules
|
|
1396
|
-
if rule.symbol and rule.symbol
|
|
1396
|
+
if rule.symbol and cls._symbol_matches(rule.symbol, symbol)
|
|
1397
1397
|
and (rule.account_type_id is None)
|
|
1398
1398
|
]
|
|
1399
1399
|
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# Generated by Django 4.2.20 on 2025-08-14 12:32
|
|
2
|
+
|
|
3
|
+
from django.db import migrations, models
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class Migration(migrations.Migration):
|
|
7
|
+
|
|
8
|
+
dependencies = [
|
|
9
|
+
('referrals', '0002_alter_referralreward_payment_gateway_and_more'),
|
|
10
|
+
]
|
|
11
|
+
|
|
12
|
+
operations = [
|
|
13
|
+
migrations.AddField(
|
|
14
|
+
model_name='referralsource',
|
|
15
|
+
name='agreement_path',
|
|
16
|
+
field=models.TextField(blank=True, help_text='Agreement IDs for each IB level (dot-separated) at time of code generation', null=True),
|
|
17
|
+
),
|
|
18
|
+
migrations.AddField(
|
|
19
|
+
model_name='referralsource',
|
|
20
|
+
name='ib_path',
|
|
21
|
+
field=models.TextField(blank=True, help_text='Full IB hierarchy path (dot-separated customer IDs) at time of code generation', null=True),
|
|
22
|
+
),
|
|
23
|
+
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/fx_shared_models.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/accounts/migrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/company_ba/migrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/__init__.py
RENAMED
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/apps.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customer_crypto_wallet/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/customers/migrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_campaigns/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{fx_shared_models-0.2.78 → fx_shared_models-0.2.80}/shared_models/email_log/migrations/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|