Bug: Add `is_connector_agnostic_mit_enabled` in the business profile APIs



`is_connector_agnostic_mit_enabled` this filed is used to make connector agnostic MIT payments. If set to `true` the recurring payments (MIT) can be routed to any other connector which supports network transaction id flow. If it `false` the subsequent MITs needs to be routed trough the same connector as CIT.

Hence adding support create and update the filed in business profile create, update and in business profile response.
diff --git a/crates/api_models/src/admin.rs b/crates/api_models/src/admin.rs
index 58cb6fbf3e2..bd569b1febb 100644
--- a/crates/api_models/src/admin.rs
+++ b/crates/api_models/src/admin.rs
@@ -938,6 +938,12 @@ pub struct BusinessProfileCreate {
 
     /// A boolean value to indicate if customer shipping details needs to be sent for wallets payments
     pub collect_shipping_details_from_wallet_connector: Option<bool>,
+
+    /// Indicates if the MIT (merchant initiated transaction) payments can be made connector
+    /// agnostic, i.e., MITs may be processed through different connector than CIT (customer
+    /// initiated transaction) based on the routing rules.
+    /// If set to `false`, MIT will go through the same connector as the CIT.
+    pub is_connector_agnostic_mit_enabled: Option<bool>,
 }
 
 #[derive(Clone, Debug, ToSchema, Serialize)]
@@ -1016,6 +1022,12 @@ pub struct BusinessProfileResponse {
 
     /// A boolean value to indicate if customer shipping details needs to be sent for wallets payments
     pub collect_shipping_details_from_wallet_connector: Option<bool>,
+
+    /// Indicates if the MIT (merchant initiated transaction) payments can be made connector
+    /// agnostic, i.e., MITs may be processed through different connector than CIT (customer
+    /// initiated transaction) based on the routing rules.
+    /// If set to `false`, MIT will go through the same connector as the CIT.
+    pub is_connector_agnostic_mit_enabled: Option<bool>,
 }
 
 #[derive(Clone, Debug, Deserialize, ToSchema, Serialize)]
@@ -1086,6 +1098,12 @@ pub struct BusinessProfileUpdate {
 
     /// A boolean value to indicate if customer shipping details needs to be sent for wallets payments
     pub collect_shipping_details_from_wallet_connector: Option<bool>,
+
+    /// Indicates if the MIT (merchant initiated transaction) payments can be made connector
+    /// agnostic, i.e., MITs may be processed through different connector than CIT (customer
+    /// initiated transaction) based on the routing rules.
+    /// If set to `false`, MIT will go through the same connector as the CIT.
+    pub is_connector_agnostic_mit_enabled: Option<bool>,
 }
 
 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize, PartialEq, ToSchema)]
diff --git a/crates/diesel_models/src/business_profile.rs b/crates/diesel_models/src/business_profile.rs
index fb1b62e5436..872bb0c09d6 100644
--- a/crates/diesel_models/src/business_profile.rs
+++ b/crates/diesel_models/src/business_profile.rs
@@ -124,6 +124,7 @@ pub enum BusinessProfileUpdate {
         extended_card_info_config: Option<pii::SecretSerdeValue>,
         use_billing_as_payment_method_billing: Option<bool>,
         collect_shipping_details_from_wallet_connector: Option<bool>,
+        is_connector_agnostic_mit_enabled: Option<bool>,
     },
     ExtendedCardInfoUpdate {
         is_extended_card_info_enabled: Option<bool>,
@@ -157,6 +158,7 @@ impl From<BusinessProfileUpdate> for BusinessProfileUpdateInternal {
                 extended_card_info_config,
                 use_billing_as_payment_method_billing,
                 collect_shipping_details_from_wallet_connector,
+                is_connector_agnostic_mit_enabled,
             } => Self {
                 profile_name,
                 modified_at,
@@ -178,6 +180,7 @@ impl From<BusinessProfileUpdate> for BusinessProfileUpdateInternal {
                 extended_card_info_config,
                 use_billing_as_payment_method_billing,
                 collect_shipping_details_from_wallet_connector,
+                is_connector_agnostic_mit_enabled,
                 ..Default::default()
             },
             BusinessProfileUpdate::ExtendedCardInfoUpdate {
diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs
index f9da9908d95..bd1b122f57c 100644
--- a/crates/router/src/core/admin.rs
+++ b/crates/router/src/core/admin.rs
@@ -442,6 +442,7 @@ pub async fn update_business_profile_cascade(
             extended_card_info_config: None,
             use_billing_as_payment_method_billing: None,
             collect_shipping_details_from_wallet_connector: None,
+            is_connector_agnostic_mit_enabled: None,
         };
 
         let update_futures = business_profiles.iter().map(|business_profile| async {
@@ -1728,6 +1729,7 @@ pub async fn update_business_profile(
         use_billing_as_payment_method_billing: request.use_billing_as_payment_method_billing,
         collect_shipping_details_from_wallet_connector: request
             .collect_shipping_details_from_wallet_connector,
+        is_connector_agnostic_mit_enabled: request.is_connector_agnostic_mit_enabled,
     };
 
     let updated_business_profile = db
diff --git a/crates/router/src/core/routing/helpers.rs b/crates/router/src/core/routing/helpers.rs
index 2e1032e8e4c..c77802a1503 100644
--- a/crates/router/src/core/routing/helpers.rs
+++ b/crates/router/src/core/routing/helpers.rs
@@ -277,6 +277,7 @@ pub async fn update_business_profile_active_algorithm_ref(
         extended_card_info_config: None,
         use_billing_as_payment_method_billing: None,
         collect_shipping_details_from_wallet_connector: None,
+        is_connector_agnostic_mit_enabled: None,
     };
 
     db.update_business_profile_by_profile_id(current_business_profile, business_profile_update)
diff --git a/crates/router/src/types/api/admin.rs b/crates/router/src/types/api/admin.rs
index b79819ed634..09c362c1164 100644
--- a/crates/router/src/types/api/admin.rs
+++ b/crates/router/src/types/api/admin.rs
@@ -87,6 +87,7 @@ impl ForeignTryFrom<storage::business_profile::BusinessProfile> for BusinessProf
                 .transpose()?,
             collect_shipping_details_from_wallet_connector: item
                 .collect_shipping_details_from_wallet_connector,
+            is_connector_agnostic_mit_enabled: item.is_connector_agnostic_mit_enabled,
         })
     }
 }
@@ -183,7 +184,7 @@ impl ForeignTryFrom<(domain::MerchantAccount, BusinessProfileCreate)>
                 .change_context(errors::ApiErrorResponse::InvalidDataValue {
                     field_name: "authentication_connector_details",
                 })?,
-            is_connector_agnostic_mit_enabled: None,
+            is_connector_agnostic_mit_enabled: request.is_connector_agnostic_mit_enabled,
             is_extended_card_info_enabled: None,
             extended_card_info_config: None,
             use_billing_as_payment_method_billing: request

## Type of Change
<!-- Put an `x` in the boxes that apply -->

- [ ] Bugfix
- [ ] New feature
- [ ] Enhancement
- [x] Refactoring
- [ ] Dependency updates
- [ ] Documentation
- [ ] CI/CD

## Description
<!-- Describe your changes in detail -->
`is_connector_agnostic_mit_enabled` this field is used to make connector agnostic MIT payments. If set to `true` the recurring payments (MIT) can be routed to any other connector which supports network transaction id flow. If it `false` the subsequent MITs needs to be routed trough the same connector as CIT.

Hence adding support create and update the filed in business profile create, update and in business profile response.

### Additional Changes

- [ ] This PR modifies the API contract
- [ ] This PR modifies the database schema
- [ ] This PR modifies application configuration/environment variables

<!--
Provide links to the files with corresponding changes.

Following are the paths where you can find config files:
1. `config`
2. `crates/router/src/configs`
3. `loadtest/config`
-->


## Motivation and Context
<!--
Why is this change required? What problem does it solve?
If it fixes an open issue, please link to the issue here.

If you don't have an issue, we'd recommend starting with one first so the PR
can focus on the implementation (unless it is an obvious bug or documentation fix
that will have little conversation).
-->


## How did you test it?
<!--
Did you write an integration/unit/API test to verify the code changes?
Or did you test this change manually (provide relevant screenshots)?
-->
-> Create a merchant account
-> Create a business profile under the above merchant account
```
curl --location 'http://localhost:8080/account/merchant_1718004259/business_profile' \
--header 'Content-Type: application/json' \
--header 'api-key: test_admin' \
--data '{
    "profile_name": "Pg_agnostic_mit",
    "collect_shipping_details_from_wallet_connector": true,
    "is_connector_agnostic_mit_enabled": true
}'
```
Business profile create response
<img width="926" alt="image" src="https://github.com/juspay/hyperswitch/assets/83439957/42dbde60-18da-4d41-8fff-84fb2a19aa6e">
Field update in the db
![image](https://github.com/juspay/hyperswitch/assets/83439957/fcc8d6de-8704-4eae-8d2a-48d4104ae535)

-> Update business profile
```
curl --location 'http://localhost:8080/account/merchant_1718004259/business_profile/pro_xmsxiQK2NBWahvXgWbmv' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: test_admin' \
--data '{
    "is_connector_agnostic_mit_enabled": false
}'
```
Update business profile response
<img width="574" alt="image" src="https://github.com/juspay/hyperswitch/assets/83439957/275778c6-085a-4b6f-be0c-4eadfc66ba38">
Field updated in the db
![image](https://github.com/juspay/hyperswitch/assets/83439957/91ee9711-bea9-426a-9595-ee177975c48f)


## Checklist
<!-- Put an `x` in the boxes that apply -->

- [x] I formatted the code `cargo +nightly fmt --all`
- [x] I addressed lints thrown by `cargo clippy`
- [x] I reviewed the submitted code
- [ ] I added unit tests for my changes where possible
