submitOnlyForCouponOrPayAtStore method

dynamic submitOnlyForCouponOrPayAtStore(
  1. BuildContext context,
  2. String id,
  3. String cartId,
  4. String amount,
  5. String localCurrencyAmount, {
  6. bool isCashOnDelivery = false,
})

Implementation

submitOnlyForCouponOrPayAtStore(
  BuildContext context,
  String id,
  String cartId,
  String amount,
  String localCurrencyAmount, {
  bool isCashOnDelivery = false,
}) async {
  if (cacheCartId.isNotEmpty) {
    ConditionalLogs().customLog("cacheCartId ($cacheCartId) is not empty");
    return;
  } else {
    ConditionalLogs().customLog("cacheCartId ($cacheCartId) is empty");
    cacheCartId.value = cartId;
  }
  Helper.progressDialog(context, "Please wait..");
  String requestTime = DateTime.now().toString();
  try {
    var data = null;
    // Only process for pickup orders
    if (selectedDeliveryName.value == "pickup") {
      // Handle "Pay at Store" scenario
      if (isPaymentSelectName.value == "Pay at Store") {
        data = {
          "modeList": [
            {
              "id": "13",
              "collection": [
                [
                  {
                    "id": "8",
                    "value": amount,
                    "amount": true,
                    "formatAmount": true,
                    "label": "pos.common.payment.mode.amount",
                    "fieldMappingKey": "amount",
                    "fieldType": "INPUT"
                  }
                ]
              ]
            }
          ],
          "currency": "USD",
          "isUpFrontOrderCreation": "false"
        };
      }
      // Handle wallet-only scenario (no payment method selected but wallet is selected)
      else if (isPaymentSelected.value == false &&
          isWalletSelected.value == true) {
        data = {
          "modeList": [
            {
              "id": "7",
              "collection": [
                [
                  {
                    "id": "8",
                    "value": amount,
                    "amount": true,
                    "formatAmount": true,
                    "label": "pos.common.payment.mode.wallet.amount",
                    "fieldMappingKey": "amount",
                    "fieldType": "INPUT"
                  }
                ]
              ]
            }
          ],
          "currency": "USD",
          "isUpFrontOrderCreation": "false"
        };
      } else {
        // Neither condition met
        print("Conditions not met for submitOnlyForCouponOrPayAtStore");
        Helper.close();
        cacheCartId.value = "";
        return;
      }
    } else {
      if (isPaymentSelected.value == false &&
          isWalletSelected.value == true) {
        // Handle the case where payment is NOT selected but wallet is selected
        data = {
          "modeList": [
            {
              "id": "7",
              "collection": [
                [
                  {
                    "id": "8",
                    "value": amount,
                    "amount": true,
                    "formatAmount": true,
                    "label": "pos.common.payment.mode.wallet.amount",
                    "fieldMappingKey": "amount",
                    "fieldType": "INPUT"
                  }
                ]
              ]
            }
          ],
          "currency": "USD",
          "isUpFrontOrderCreation": "false"
        };
      } else {
        // Not a pickup order
        print("Not a pickup order");
        Helper.close();
        cacheCartId.value = "";
        return;
      }
    }

    var data_ = json.encode(
      {
        "paymentCollectionRequest": data,
        "submitStockRequest": {
          "paymentTransactionId": "",
          "partnerId": partnerId,
          "partnerType": storage.read("LEVEL_NAME"),
          "distributeId": partnerId,
          "distributeType": storage.read("LEVEL_NAME"),
          "billingOrShippingAddressId": "",
          "transactionRemarks": noteController.text.trim(),
          "purchaseOrderReferenceNumber": ""
        },
        "relatedParty": [
          {"name": cart_id.value, "role": "cartId"},
        ],
      },
    );

    dio
        .post(
      '${ApiConstant.posBaseUrl}pos-purchase-order-service-svc/transaction/SELL_IN/submit',
      data: data_,
      options: Options(
        headers: {
          'X-User-Id': SecureStorageService.readSecureData(
            SecureStorageService.xUserId,
          ),
          'X-User-Name': SecureStorageService.readSecureData(
            SecureStorageService.xUserName,
          ),
          'Accept-Language': storage.read("selected_language") ?? "en",
          "Authorization": "Bearer ${SecureStorageService.readSecureData(
            SecureStorageService.accessToken,
          )}",
          'x-request-txn-id': UDID.uDID,
          'x-trace-id': UDID.uDIDTraceId,
        },
      ),
    )
        .then((response) {
      Helper.logEvent(
        "RESPONSE_EVENT",
        success: true,
        endPoint: 'pos-purchase-order-service-svc/transaction/SELL_IN/submit',
        responseDate: DateTime.now().toString(),
        screenName: "stockOrder",
        requestDate: requestTime,
      );
      if (response.data != null) {
        ConditionalLogs().customLog('submitStockOrder${response.data}');
        SubmitStockOrderModel model = SubmitStockOrderModel();
        Map<String, dynamic> creditData = response.data;
        model = SubmitStockOrderModel.fromJson(creditData);
        if (model.status == 'POS200') {
          Helper.close();
          if (model.data?.saleOrderId != null) {
            paymentmodestatus = 0;
            Get.to(
              () =>
                  SellInSuccessScreen(orderId: model.data?.saleOrderId ?? ""),
            );
          }
        } else {
          Helper.close();
          cacheCartId.value = "";
          ConditionalLogs()
              .customLog("cacheCartId ($cacheCartId) is removed");
          MainController mainController = Get.put(MainController());
          mainController.showErrorPopup();
        }
      } else {
        Helper.close();
        cacheCartId.value = "";
        ConditionalLogs().customLog("cacheCartId ($cacheCartId) is removed");
        MainController mainController = Get.put(MainController());
        mainController.showErrorPopup();
      }
    }).catchError((err) {
      ConditionalLogs().customLog("$err");
      cacheCartId.value = "";
      ConditionalLogs().customLog("cacheCartId ($cacheCartId) is removed");
      if (err is DioException) {
        UDID.setTraceId(
          err.response?.headers.map[Constants.traceIdKey]?[0] ?? "",
        );
        Helper.logEvent(
          "ERROR_EVENT",
          failure: true,
          requestDate: requestTime,
          endPoint:
              'pos-purchase-order-service-svc/transaction/SELL_IN/submit',
          responseDate: DateTime.now().toString(),
          screenName: "stockOrder",
          error: err,
          transactionId: cartId,
        );
      }
      Helper.close();
      MainController mainController = Get.put(MainController());
      mainController.showErrorPopup();
    });
  } catch (err, stacktrace) {
    cacheCartId.value = "";
    ConditionalLogs().customLog("cacheCartId ($cacheCartId) is removed");
    ConditionalLogs().customLog("$stacktrace");
    if (err is DioException) {
      UDID.setTraceId(
        err.response?.headers.map[Constants.traceIdKey]?[0] ?? "",
      );
      Helper.logEvent(
        "ERROR_EVENT",
        failure: true,
        requestDate: requestTime,
        endPoint: 'pos-purchase-order-service-svc/transaction/SELL_IN/submit',
        responseDate: DateTime.now().toString(),
        screenName: "stockOrder",
        error: err,
        transactionId: cartId,
      );
    }
    Helper.close();
    MainController mainController = Get.put(MainController());
    mainController.showErrorPopup();
  }
}