Bug: set `requires_cvv` to false when either `connector_mandate_details` or `network_transaction_id` is present during MITs



`requires_cvv` should be false the `recurring_enabled` should be true in the list customer payment method if the `is_connector_agnostic_mit_enabled` is enabled and `network_transaction_id` is present for that payment method.
diff --git a/crates/router/src/core/payment_methods/cards.rs b/crates/router/src/core/payment_methods/cards.rs
index db95b5c838c..24cc9583d90 100644
--- a/crates/router/src/core/payment_methods/cards.rs
+++ b/crates/router/src/core/payment_methods/cards.rs
@@ -3744,6 +3744,11 @@ pub async fn list_customer_payment_method(
     )
     .await?;
 
+    let is_connector_agnostic_mit_enabled = business_profile
+        .as_ref()
+        .and_then(|business_profile| business_profile.is_connector_agnostic_mit_enabled)
+        .unwrap_or(false);
+
     for pm in resp.into_iter() {
         let parent_payment_method_token = generate_id(consts::ID_LENGTH, "token");
 
@@ -3861,9 +3866,20 @@ pub async fn list_customer_payment_method(
             state,
             &key_store,
             &merchant_account.merchant_id,
+            is_connector_agnostic_mit_enabled,
             connector_mandate_details,
+            pm.network_transaction_id.as_ref(),
         )
         .await?;
+
+        let requires_cvv = if is_connector_agnostic_mit_enabled {
+            requires_cvv
+                && !(off_session_payment_flag
+                    && (pm.connector_mandate_details.is_some()
+                        || pm.network_transaction_id.is_some()))
+        } else {
+            requires_cvv && !(off_session_payment_flag && pm.connector_mandate_details.is_some())
+        };
         // Need validation for enabled payment method ,querying MCA
         let pma = api::CustomerPaymentMethod {
             payment_token: parent_payment_method_token.to_owned(),
@@ -3883,8 +3899,7 @@ pub async fn list_customer_payment_method(
             bank_transfer: payment_method_retrieval_context.bank_transfer_details,
             bank: bank_details,
             surcharge_details: None,
-            requires_cvv: requires_cvv
-                && !(off_session_payment_flag && pm.connector_mandate_details.is_some()),
+            requires_cvv,
             last_used_at: Some(pm.last_used_at),
             default_payment_method_set: customer.default_payment_method_id.is_some()
                 && customer.default_payment_method_id == Some(pm.payment_method_id),
@@ -3982,8 +3997,13 @@ pub async fn get_mca_status(
     state: &routes::SessionState,
     key_store: &domain::MerchantKeyStore,
     merchant_id: &str,
+    is_connector_agnostic_mit_enabled: bool,
     connector_mandate_details: Option<storage::PaymentsMandateReference>,
+    network_transaction_id: Option<&String>,
 ) -> errors::RouterResult<bool> {
+    if is_connector_agnostic_mit_enabled && network_transaction_id.is_some() {
+        return Ok(true);
+    }
     if let Some(connector_mandate_details) = connector_mandate_details {
         let mcas = state
             .store
diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs
index ccca6eaed60..acfebf93046 100644
--- a/crates/router/src/core/payments.rs
+++ b/crates/router/src/core/payments.rs
@@ -3503,7 +3503,8 @@ pub async fn decide_multiplex_connector_for_normal_or_recurring_payment<F: Clone
                 let merchant_connector_id = connector_data
                     .merchant_connector_id
                     .as_ref()
-                    .ok_or(errors::ApiErrorResponse::InternalServerError)?;
+                    .ok_or(errors::ApiErrorResponse::InternalServerError)
+                    .attach_printable("Failed to find the merchant connector id")?;
 
                 if is_network_transaction_id_flow(
                     state,

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

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

## Description
<!-- Describe your changes in detail -->
`requires_cvv` should be false the `recurring_enabled` should be true in the list customer payment method if the `is_connector_agnostic_mit_enabled` is enabled and `network_transaction_id` is present for that payment method.

### 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 connector account for cybersource
-> Create a payment with `setup_future_usage: "off_session"`
```
{
    "amount": 100,
    "payment_type": "setup_mandate",
    "currency": "USD",
    "confirm": true,
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "customer_id": "cu_{{$timestamp}}",
    "email": "guest@example.com",
    "name": "John Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payment request",
    "authentication_type": "no_three_ds",
    "return_url": "https://google.com",
    "payment_method": "card",
    "payment_method_type": "credit",
    "payment_method_data": {
        "card": {
            "card_number": "4111111111111111",
            "card_exp_month": "03",
            "card_exp_year": "2030",
            "card_holder_name": "name name",
            "card_cvc": "737"
        }
    },
    "setup_future_usage": "off_session",
    "customer_acceptance": {
        "acceptance_type": "offline",
        "accepted_at": "1963-05-03T04:07:52.723Z",
        "online": {
            "ip_address": "in sit",
            "user_agent": "amet irure esse"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "PiX",
            "last_name": "ss"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "California",
            "zip": "94122",
            "country": "US",
            "first_name": "John",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "browser_info": {
        "user_agent": "Mozilla\/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/70.0.3538.110 Safari\/537.36",
        "accept_header": "text\/html,application\/xhtml+xml,application\/xml;q=0.9,image\/webp,image\/apng,*\/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "125.0.0.1"
    },
    "statement_descriptor_name": "joseph",
    "statement_descriptor_suffix": "JS",
    "metadata": {},
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 0,
            "account_name": "transaction_processing"
        }
    ]
}
```
![image](https://github.com/user-attachments/assets/74c0dab4-afaf-4cd6-9b80-ae50cc5782c3)
![image](https://github.com/user-attachments/assets/ef84475f-5089-4a58-8634-18b8c6580925)

-> List payment methods for the customer
```
curl --location 'http://localhost:8080/payments' \
--header 'Accept: application/json' \
--header 'api-key: dev_YpbM0gAEHbx1Uv958uygtKRken4LZJL9bMFOZlgv7Obp7D4902gbF5eA5LdtGcLc' \
--header 'Content-Type: application/json' \
--data '{
    "amount": 10000,
    "currency": "USD",
    "capture_method": "automatic",
    "authentication_type": "no_three_ds",
    "confirm": false,
    "setup_future_usage": "off_session",
    "customer_id": "cu_1721110963"
}'
```
```
curl --location 'http://localhost:8080/customers/payment_methods?client_secret=pay_dubtnVf7IHNAA3NWLZsV_secret_GfGNmNO6SeHAu1h9TqxQ' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_d982e9105d8f415b99f0b30654afac74'
```
![image](https://github.com/user-attachments/assets/68459f44-135e-42b6-b359-6ff74ac51467)

-> Migrate a customer using the below endpoint
```
curl --location 'http://localhost:8080/payment_methods/migrate' \
--header 'api-key: test_admin' \
--header 'Content-Type: application/json' \
--data '{
    "payment_method": "card",
    "merchant_id": "merchant_1721063272",
    "card": {
        "card_number": "4242424242424242",
        "card_exp_month": "10",
        "card_exp_year": "27",
        "nick_name": "Joh"
    },
    "customer_id": "cu_1721111588",
    "network_transaction_id": "016153570198200"
}
'
```
![image](https://github.com/user-attachments/assets/980404a8-d6c9-4126-ae3c-beea8b28b9af)
![image](https://github.com/user-attachments/assets/1944c172-fa99-4891-bd08-a9bb9e05671b)

-> List payment method for the above customer
```
curl --location 'http://localhost:8080/payments' \
--header 'Accept: application/json' \
--header 'api-key: dev_YpbM0gAEHbx1Uv958uygtKRken4LZJL9bMFOZlgv7Obp7D4902gbF5eA5LdtGcLc' \
--header 'Content-Type: application/json' \
--data '{
    "amount": 10000,
    "currency": "USD",
    "capture_method": "automatic",
    "authentication_type": "no_three_ds",
    "confirm": false,
    "setup_future_usage": "off_session",
    "customer_id": "cu_1721111588"
}'
```
```
curl --location 'http://localhost:8080/customers/payment_methods?client_secret=pay_EqZ9ohNIlrvelLKSA34d_secret_5kqWdqrNqexFGP8NYO2c' \
--header 'Accept: application/json' \
--header 'api-key: pk_dev_d982e9105d8f415b99f0b30654afac74'
```
![image](https://github.com/user-attachments/assets/7ac7f46c-72e0-4d0d-b4c6-e0b7153e0705)

-> Payment method entry where the connector_mandate_details is null and network transaction is present
<img width="1199" alt="image" src="https://github.com/user-attachments/assets/1330d33d-3f74-485c-a366-af4d968778c5">
```
curl --location 'http://localhost:8080/payments' \
--header 'Accept: application/json' \
--header 'api-key: dev_YpbM0gAEHbx1Uv958uygtKRken4LZJL9bMFOZlgv7Obp7D4902gbF5eA5LdtGcLc' \
--header 'Content-Type: application/json' \
--data '{
    "amount": 10000,
    "currency": "USD",
    "capture_method": "automatic",
    "authentication_type": "no_three_ds",
    "confirm": false,
    "setup_future_usage": "off_session",
    "customer_id": "cu_1721111588"
}'
```
<img width="964" alt="image" src="https://github.com/user-attachments/assets/6a35ac45-e8f8-4e92-a645-02a2096eaee2">


## 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
