You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
7.2 KiB
Dart
137 lines
7.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_paytabs_bridge/BaseBillingShippingInfo.dart';
|
|
import 'package:flutter_paytabs_bridge/IOSThemeConfiguration.dart';
|
|
import 'package:flutter_paytabs_bridge/PaymentSdkConfigurationDetails.dart';
|
|
import 'package:flutter_paytabs_bridge/PaymentSdkLocale.dart';
|
|
import 'package:flutter_paytabs_bridge/PaymentSdkTokeniseType.dart';
|
|
import 'package:flutter_paytabs_bridge/PaymentSdkTransactionType.dart';
|
|
import 'package:flutter_paytabs_bridge/flutter_paytabs_bridge.dart';
|
|
import 'package:hmg_patient_app_new/core/api_consts.dart';
|
|
import 'package:hmg_patient_app_new/core/app_state.dart';
|
|
import 'package:hmg_patient_app_new/core/enums.dart';
|
|
import 'package:hmg_patient_app_new/core/paytabs_config.dart';
|
|
import 'package:hmg_patient_app_new/features/paytabs/models/paytabs_transaction_response_model.dart';
|
|
import 'package:hmg_patient_app_new/theme/colors.dart';
|
|
|
|
class PayTabsViewModel extends ChangeNotifier {
|
|
late PaymentSdkConfigurationDetails paymentConfiguration;
|
|
final AppState appState;
|
|
late PaytabsTransactionResponseModel paytabsTransactionResponseModel;
|
|
|
|
PayTabsViewModel({
|
|
required this.appState,
|
|
});
|
|
|
|
setPaymentConfiguration(String paymentDescription, num amount) {
|
|
String cartID = DateTime.now().millisecondsSinceEpoch.toString();
|
|
paymentConfiguration = PaymentSdkConfigurationDetails(
|
|
profileId: PaymentSdkDefaultConfig.profileID,
|
|
serverKey: PaymentSdkDefaultConfig.serverKey,
|
|
clientKey: PaymentSdkDefaultConfig.clientKey,
|
|
transactionType: PaymentSdkTransactionType.SALE,
|
|
cartId: cartID.substring((cartID.length - 5), cartID.length),
|
|
cartDescription: paymentDescription,
|
|
merchantName: PaymentSdkDefaultConfig.defaultMerchantName,
|
|
locale: appState.isArabic() ? PaymentSdkLocale.AR : PaymentSdkLocale.EN,
|
|
merchantApplePayIndentifier:
|
|
ApiConsts.appEnvironmentType == AppEnvironmentTypeEnum.uat ? PaymentSdkDefaultConfig.defaultMerchantAppleBundleIDUAT : PaymentSdkDefaultConfig.defaultMerchantAppleBundleID,
|
|
// merchantApplePayIndentifier: PaymentSdkDefaultConfig.defaultMerchantAppleBundleIDUAT,
|
|
screentTitle: paymentDescription,
|
|
amount: amount.toDouble(),
|
|
showBillingInfo: false,
|
|
forceShippingInfo: false,
|
|
currencyCode: PaymentSdkDefaultConfig.defaultCurrency,
|
|
merchantCountryCode: PaymentSdkDefaultConfig.defaultMerchantCountryCode,
|
|
billingDetails: BillingDetails(
|
|
"${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}" ?? "HMG Patient", "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com",
|
|
appState.getAuthenticatedUser()!.mobileNumber ?? "0000000000", "Riyadh", "SA", "Riyadh", "Riyadh", "12626"),
|
|
shippingDetails: ShippingDetails("${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}" ?? "HMG Patient", "CustID_${appState.getAuthenticatedUser()!.patientId.toString()}@HMG.com",
|
|
appState.getAuthenticatedUser()!.mobileNumber ?? "0000000000", "Riyadh", "SA", "Riyadh", "Riyadh", "12626"),
|
|
alternativePaymentMethods: [],
|
|
linkBillingNameWithCardHolderName: true,
|
|
simplifyApplePayValidation: true);
|
|
|
|
paymentConfiguration.iOSThemeConfigurations = IOSThemeConfigurations(
|
|
// logoImage: "assets/images/png/hmg_logo.png",
|
|
backgroundColor: "ffffff",
|
|
backgroundColorDark: "ffffff",
|
|
secondaryColor: "191919",
|
|
secondaryColorDark: "191919",
|
|
primaryColor: "ffffff",
|
|
primaryColorDark: "ffffff",
|
|
// primaryFont: "Poppins",
|
|
titleFontColor: "2E3039",
|
|
titleFontColorDark: "2E3039",
|
|
// titleFont: "Poppins",
|
|
primaryFontColor: "2E3039",
|
|
primaryFontColorDark: "2E3039",
|
|
inputFieldBackgroundColor: "ffffff",
|
|
inputFieldBackgroundColorDark: "ffffff",
|
|
placeholderColor: "2E3039",
|
|
placeholderColorDark: "2E3039",
|
|
buttonColor: "ED1C2B",
|
|
buttonColorDark: "ED1C2B",
|
|
// buttonFont: "Poppins",
|
|
);
|
|
paymentConfiguration.tokeniseType = PaymentSdkTokeniseType.MERCHANT_MANDATORY;
|
|
|
|
notifyListeners();
|
|
}
|
|
|
|
startApplePayPayment({Function(PaytabsTransactionResponseModel)? onSuccess, Function(String)? onError}) {
|
|
FlutterPaytabsBridge.startApplePayPayment(paymentConfiguration, (event) {
|
|
final transactionDetails = event["data"] as Map<Object?, Object?>?;
|
|
if (event["status"] == "success") {
|
|
// Cast Map<Object?, Object?> to Map<String, dynamic>
|
|
final data = Map<String, dynamic>.from(event["data"] as Map);
|
|
paytabsTransactionResponseModel = PaytabsTransactionResponseModel.fromJson(data);
|
|
if (paytabsTransactionResponseModel.isSuccess!) {
|
|
onSuccess!(paytabsTransactionResponseModel);
|
|
} else {
|
|
// Transaction was processed but failed
|
|
final reason = transactionDetails?["payResponseReturn"] ?? transactionDetails?["responseMessage"] ?? transactionDetails?["message"] ?? "Unknown error";
|
|
final responseCode = transactionDetails?["responseCode"] ?? "";
|
|
final errorMessage = responseCode.toString().isNotEmpty ? "Transaction failed (Code: $responseCode): $reason" : "Transaction failed: $reason";
|
|
onError!(errorMessage);
|
|
}
|
|
} else if (event["status"] == "error") {
|
|
final errorMessage = event["message"] ?? "An error occurred";
|
|
debugPrint("Error occurred in transaction: $errorMessage");
|
|
debugPrint("Full error event: $event");
|
|
onError!(errorMessage);
|
|
} else if (event["status"] == "event") {
|
|
final eventMessage = event["message"] ?? "Event occurred";
|
|
debugPrint("Event occurred: $eventMessage");
|
|
}
|
|
});
|
|
}
|
|
|
|
startCardPayment({Function(PaytabsTransactionResponseModel)? onSuccess, Function(String)? onError}) {
|
|
FlutterPaytabsBridge.startCardPayment(paymentConfiguration, (event) {
|
|
final transactionDetails = event["data"] as Map<Object?, Object?>?;
|
|
if (event["status"] == "success") {
|
|
// Cast Map<Object?, Object?> to Map<String, dynamic>
|
|
final data = Map<String, dynamic>.from(event["data"] as Map);
|
|
paytabsTransactionResponseModel = PaytabsTransactionResponseModel.fromJson(data);
|
|
if (paytabsTransactionResponseModel.isSuccess!) {
|
|
onSuccess!(paytabsTransactionResponseModel);
|
|
} else {
|
|
// Transaction was processed but failed
|
|
final reason = transactionDetails?["payResponseReturn"] ?? transactionDetails?["responseMessage"] ?? transactionDetails?["message"] ?? "Unknown error";
|
|
final responseCode = transactionDetails?["responseCode"] ?? "";
|
|
final errorMessage = responseCode.toString().isNotEmpty ? "Transaction failed (Code: $responseCode): $reason" : "Transaction failed: $reason";
|
|
onError!(errorMessage);
|
|
}
|
|
} else if (event["status"] == "error") {
|
|
final errorMessage = event["message"] ?? "An error occurred";
|
|
debugPrint("Error occurred in transaction: $errorMessage");
|
|
debugPrint("Full error event: $event");
|
|
onError!(errorMessage);
|
|
} else if (event["status"] == "event") {
|
|
final eventMessage = event["message"] ?? "Event occurred";
|
|
debugPrint("Event occurred: $eventMessage");
|
|
}
|
|
});
|
|
}
|
|
}
|