BASE: Update Icons & Name Of The App.
This commit is contained in:
@@ -39,7 +39,7 @@ import 'package:easy_localization/easy_localization.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_paypal/flutter_paypal.dart';
|
||||
import 'package:flutter_stripe/flutter_stripe.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:get/get.dart' hide Trans;
|
||||
import 'package:http/http.dart' as http;
|
||||
import 'package:razorpay_flutter/razorpay_flutter.dart';
|
||||
import 'package:uuid/uuid.dart';
|
||||
@@ -84,13 +84,17 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
Future<void> fetchDriverDetails() async {
|
||||
if (order.value.driverId != null) {
|
||||
await FireStoreUtils.getUserProfile(order.value.driverId ?? '').then((value) {
|
||||
await FireStoreUtils.getUserProfile(order.value.driverId ?? '').then((
|
||||
value,
|
||||
) {
|
||||
if (value != null) {
|
||||
driverUser.value = value;
|
||||
}
|
||||
});
|
||||
|
||||
await FireStoreUtils.getReviewsbyID(order.value.id.toString()).then((value) {
|
||||
await FireStoreUtils.getReviewsbyID(order.value.id.toString()).then((
|
||||
value,
|
||||
) {
|
||||
if (value != null) {
|
||||
ratingModel.value = value;
|
||||
}
|
||||
@@ -100,9 +104,15 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
String getExtraKm() {
|
||||
try {
|
||||
final double start = double.tryParse(order.value.startKitoMetersReading ?? '0') ?? 0.0;
|
||||
final double end = double.tryParse(order.value.endKitoMetersReading ?? '0') ?? 0.0;
|
||||
final double included = double.tryParse(order.value.rentalPackageModel?.includedDistance?.toString() ?? '0') ?? 0.0;
|
||||
final double start =
|
||||
double.tryParse(order.value.startKitoMetersReading ?? '0') ?? 0.0;
|
||||
final double end =
|
||||
double.tryParse(order.value.endKitoMetersReading ?? '0') ?? 0.0;
|
||||
final double included =
|
||||
double.tryParse(
|
||||
order.value.rentalPackageModel?.includedDistance?.toString() ?? '0',
|
||||
) ??
|
||||
0.0;
|
||||
|
||||
// Calculate extra km safely
|
||||
final double extra = (end - start - included);
|
||||
@@ -117,8 +127,10 @@ class RentalOrderDetailsController extends GetxController {
|
||||
///Safe calculation after order is loaded
|
||||
void calculateTotalAmount() {
|
||||
try {
|
||||
subTotal.value = double.tryParse(order.value.subTotal?.toString() ?? "0") ?? 0.0;
|
||||
discount.value = double.tryParse(order.value.discount?.toString() ?? "0") ?? 0.0;
|
||||
subTotal.value =
|
||||
double.tryParse(order.value.subTotal?.toString() ?? "0") ?? 0.0;
|
||||
discount.value =
|
||||
double.tryParse(order.value.discount?.toString() ?? "0") ?? 0.0;
|
||||
taxAmount.value = 0.0;
|
||||
|
||||
if (order.value.endTime != null) {
|
||||
@@ -128,12 +140,23 @@ class RentalOrderDetailsController extends GetxController {
|
||||
// Total rented minutes
|
||||
int totalMinutes = end.difference(start).inMinutes;
|
||||
|
||||
int includedMinutes = (int.tryParse(order.value.rentalPackageModel?.includedHours.toString() ?? "0") ?? 0) * 60;
|
||||
int includedMinutes =
|
||||
(int.tryParse(
|
||||
order.value.rentalPackageModel?.includedHours.toString() ??
|
||||
"0",
|
||||
) ??
|
||||
0) *
|
||||
60;
|
||||
|
||||
if (totalMinutes > includedMinutes) {
|
||||
int extraMinutes = totalMinutes - includedMinutes;
|
||||
|
||||
double minuteFare = double.tryParse(order.value.rentalPackageModel?.extraMinuteFare?.toString() ?? "0") ?? 0.0;
|
||||
double minuteFare =
|
||||
double.tryParse(
|
||||
order.value.rentalPackageModel?.extraMinuteFare?.toString() ??
|
||||
"0",
|
||||
) ??
|
||||
0.0;
|
||||
|
||||
extraMinutesCharge.value = extraMinutes * minuteFare;
|
||||
} else {
|
||||
@@ -141,24 +164,47 @@ class RentalOrderDetailsController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
if (order.value.startKitoMetersReading != null && order.value.endKitoMetersReading != null) {
|
||||
double startKm = double.tryParse(order.value.startKitoMetersReading?.toString() ?? "0") ?? 0.0;
|
||||
double endKm = double.tryParse(order.value.endKitoMetersReading?.toString() ?? "0") ?? 0.0;
|
||||
if (order.value.startKitoMetersReading != null &&
|
||||
order.value.endKitoMetersReading != null) {
|
||||
double startKm =
|
||||
double.tryParse(
|
||||
order.value.startKitoMetersReading?.toString() ?? "0",
|
||||
) ??
|
||||
0.0;
|
||||
double endKm =
|
||||
double.tryParse(
|
||||
order.value.endKitoMetersReading?.toString() ?? "0",
|
||||
) ??
|
||||
0.0;
|
||||
if (endKm > startKm) {
|
||||
double totalKm = endKm - startKm;
|
||||
if (totalKm > double.parse(order.value.rentalPackageModel!.includedDistance!)) {
|
||||
totalKm = totalKm - double.parse(order.value.rentalPackageModel!.includedDistance!);
|
||||
double extraKmRate = double.tryParse(order.value.rentalPackageModel?.extraKmFare?.toString() ?? "0") ?? 0.0;
|
||||
if (totalKm >
|
||||
double.parse(order.value.rentalPackageModel!.includedDistance!)) {
|
||||
totalKm =
|
||||
totalKm -
|
||||
double.parse(order.value.rentalPackageModel!.includedDistance!);
|
||||
double extraKmRate =
|
||||
double.tryParse(
|
||||
order.value.rentalPackageModel?.extraKmFare?.toString() ??
|
||||
"0",
|
||||
) ??
|
||||
0.0;
|
||||
extraKilometerCharge.value = totalKm * extraKmRate;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
subTotal.value = subTotal.value + extraKilometerCharge.value + extraMinutesCharge.value;
|
||||
subTotal.value =
|
||||
subTotal.value +
|
||||
extraKilometerCharge.value +
|
||||
extraMinutesCharge.value;
|
||||
|
||||
if (order.value.taxSetting != null) {
|
||||
for (var element in order.value.taxSetting!) {
|
||||
taxAmount.value += Constant.calculateTax(amount: (subTotal.value - discount.value).toString(), taxModel: element);
|
||||
taxAmount.value += Constant.calculateTax(
|
||||
amount: (subTotal.value - discount.value).toString(),
|
||||
taxModel: element,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -194,9 +240,14 @@ class RentalOrderDetailsController extends GetxController {
|
||||
serviceType: Constant.parcelServiceType,
|
||||
);
|
||||
|
||||
await FireStoreUtils.setWalletTransaction(transactionModel).then((value) async {
|
||||
await FireStoreUtils.setWalletTransaction(transactionModel).then((
|
||||
value,
|
||||
) async {
|
||||
if (value == true) {
|
||||
await FireStoreUtils.updateUserWallet(amount: "-${totalAmount.toString()}", userId: FireStoreUtils.getCurrentUid());
|
||||
await FireStoreUtils.updateUserWallet(
|
||||
amount: "-${totalAmount.toString()}",
|
||||
userId: FireStoreUtils.getCurrentUid(),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -209,7 +260,10 @@ class RentalOrderDetailsController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> cancelRentalRequest(RentalOrderModel order, {List<TaxModel>? taxList}) async {
|
||||
Future<void> cancelRentalRequest(
|
||||
RentalOrderModel order, {
|
||||
List<TaxModel>? taxList,
|
||||
}) async {
|
||||
try {
|
||||
isLoading.value = true;
|
||||
|
||||
@@ -221,11 +275,19 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
if (taxList != null) {
|
||||
for (var element in taxList) {
|
||||
totalTax += Constant.calculateTax(amount: (double.parse(order.subTotal.toString()) - double.parse(order.discount.toString())).toString(), taxModel: element);
|
||||
totalTax += Constant.calculateTax(
|
||||
amount:
|
||||
(double.parse(order.subTotal.toString()) -
|
||||
double.parse(order.discount.toString()))
|
||||
.toString(),
|
||||
taxModel: element,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
double subTotal = double.parse(order.subTotal.toString()) - double.parse(order.discount.toString());
|
||||
double subTotal =
|
||||
double.parse(order.subTotal.toString()) -
|
||||
double.parse(order.discount.toString());
|
||||
double refundAmount = subTotal + totalTax;
|
||||
|
||||
WalletTransactionModel walletTransaction = WalletTransactionModel(
|
||||
@@ -244,7 +306,10 @@ class RentalOrderDetailsController extends GetxController {
|
||||
);
|
||||
|
||||
await FireStoreUtils.setWalletTransaction(walletTransaction);
|
||||
await FireStoreUtils.updateUserWallet(amount: refundAmount.toString(), userId: FireStoreUtils.getCurrentUid());
|
||||
await FireStoreUtils.updateUserWallet(
|
||||
amount: refundAmount.toString(),
|
||||
userId: FireStoreUtils.getCurrentUid(),
|
||||
);
|
||||
}
|
||||
ShowToastDialog.showToast("Booking cancelled successfully".tr());
|
||||
Get.back();
|
||||
@@ -272,19 +337,45 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
Future<void> getPaymentSettings() async {
|
||||
await FireStoreUtils.getPaymentSettingsData().then((value) {
|
||||
stripeModel.value = StripeModel.fromJson(jsonDecode(Preferences.getString(Preferences.stripeSettings)));
|
||||
payPalModel.value = PayPalModel.fromJson(jsonDecode(Preferences.getString(Preferences.paypalSettings)));
|
||||
payStackModel.value = PayStackModel.fromJson(jsonDecode(Preferences.getString(Preferences.payStack)));
|
||||
mercadoPagoModel.value = MercadoPagoModel.fromJson(jsonDecode(Preferences.getString(Preferences.mercadoPago)));
|
||||
flutterWaveModel.value = FlutterWaveModel.fromJson(jsonDecode(Preferences.getString(Preferences.flutterWave)));
|
||||
paytmModel.value = PaytmModel.fromJson(jsonDecode(Preferences.getString(Preferences.paytmSettings)));
|
||||
payFastModel.value = PayFastModel.fromJson(jsonDecode(Preferences.getString(Preferences.payFastSettings)));
|
||||
razorPayModel.value = RazorPayModel.fromJson(jsonDecode(Preferences.getString(Preferences.razorpaySettings)));
|
||||
midTransModel.value = MidTrans.fromJson(jsonDecode(Preferences.getString(Preferences.midTransSettings)));
|
||||
orangeMoneyModel.value = OrangeMoney.fromJson(jsonDecode(Preferences.getString(Preferences.orangeMoneySettings)));
|
||||
xenditModel.value = Xendit.fromJson(jsonDecode(Preferences.getString(Preferences.xenditSettings)));
|
||||
walletSettingModel.value = WalletSettingModel.fromJson(jsonDecode(Preferences.getString(Preferences.walletSettings)));
|
||||
cashOnDeliverySettingModel.value = CodSettingModel.fromJson(jsonDecode(Preferences.getString(Preferences.codSettings)));
|
||||
stripeModel.value = StripeModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.stripeSettings)),
|
||||
);
|
||||
payPalModel.value = PayPalModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.paypalSettings)),
|
||||
);
|
||||
payStackModel.value = PayStackModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.payStack)),
|
||||
);
|
||||
mercadoPagoModel.value = MercadoPagoModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.mercadoPago)),
|
||||
);
|
||||
flutterWaveModel.value = FlutterWaveModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.flutterWave)),
|
||||
);
|
||||
paytmModel.value = PaytmModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.paytmSettings)),
|
||||
);
|
||||
payFastModel.value = PayFastModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.payFastSettings)),
|
||||
);
|
||||
razorPayModel.value = RazorPayModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.razorpaySettings)),
|
||||
);
|
||||
midTransModel.value = MidTrans.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.midTransSettings)),
|
||||
);
|
||||
orangeMoneyModel.value = OrangeMoney.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.orangeMoneySettings)),
|
||||
);
|
||||
xenditModel.value = Xendit.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.xenditSettings)),
|
||||
);
|
||||
walletSettingModel.value = WalletSettingModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.walletSettings)),
|
||||
);
|
||||
cashOnDeliverySettingModel.value = CodSettingModel.fromJson(
|
||||
jsonDecode(Preferences.getString(Preferences.codSettings)),
|
||||
);
|
||||
|
||||
if (walletSettingModel.value.isEnabled == true) {
|
||||
selectedPaymentMethod.value = PaymentGateway.wallet.name;
|
||||
@@ -326,20 +417,32 @@ class RentalOrderDetailsController extends GetxController {
|
||||
Future<void> stripeMakePayment({required String amount}) async {
|
||||
log(double.parse(amount).toStringAsFixed(0));
|
||||
try {
|
||||
Map<String, dynamic>? paymentIntentData = await createStripeIntent(amount: amount);
|
||||
Map<String, dynamic>? paymentIntentData = await createStripeIntent(
|
||||
amount: amount,
|
||||
);
|
||||
log("stripe Responce====>$paymentIntentData");
|
||||
if (paymentIntentData!.containsKey("error")) {
|
||||
Get.back();
|
||||
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
|
||||
ShowToastDialog.showToast(
|
||||
"Something went wrong, please contact admin.".tr(),
|
||||
);
|
||||
} else {
|
||||
await Stripe.instance.initPaymentSheet(
|
||||
paymentSheetParameters: SetupPaymentSheetParameters(
|
||||
paymentIntentClientSecret: paymentIntentData['client_secret'],
|
||||
allowsDelayedPaymentMethods: false,
|
||||
googlePay: const PaymentSheetGooglePay(merchantCountryCode: 'US', testEnv: true, currencyCode: "USD"),
|
||||
googlePay: const PaymentSheetGooglePay(
|
||||
merchantCountryCode: 'US',
|
||||
testEnv: true,
|
||||
currencyCode: "USD",
|
||||
),
|
||||
customFlow: true,
|
||||
style: ThemeMode.system,
|
||||
appearance: PaymentSheetAppearance(colors: PaymentSheetAppearanceColors(primary: AppThemeData.primary300)),
|
||||
appearance: PaymentSheetAppearance(
|
||||
colors: PaymentSheetAppearanceColors(
|
||||
primary: AppThemeData.primary300,
|
||||
),
|
||||
),
|
||||
merchantDisplayName: 'GoRide',
|
||||
),
|
||||
);
|
||||
@@ -385,7 +488,10 @@ class RentalOrderDetailsController extends GetxController {
|
||||
var response = await http.post(
|
||||
Uri.parse('https://api.stripe.com/v1/payment_intents'),
|
||||
body: body,
|
||||
headers: {'Authorization': 'Bearer $stripeSecret', 'Content-Type': 'application/x-www-form-urlencoded'},
|
||||
headers: {
|
||||
'Authorization': 'Bearer $stripeSecret',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
);
|
||||
|
||||
return jsonDecode(response.body);
|
||||
@@ -395,8 +501,14 @@ class RentalOrderDetailsController extends GetxController {
|
||||
}
|
||||
|
||||
//mercadoo
|
||||
Future<Null> mercadoPagoMakePayment({required BuildContext context, required String amount}) async {
|
||||
final headers = {'Authorization': 'Bearer ${mercadoPagoModel.value.accessToken}', 'Content-Type': 'application/json'};
|
||||
Future<Null> mercadoPagoMakePayment({
|
||||
required BuildContext context,
|
||||
required String amount,
|
||||
}) async {
|
||||
final headers = {
|
||||
'Authorization': 'Bearer ${mercadoPagoModel.value.accessToken}',
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
final body = jsonEncode({
|
||||
"items": [
|
||||
@@ -409,12 +521,20 @@ class RentalOrderDetailsController extends GetxController {
|
||||
},
|
||||
],
|
||||
"payer": {"email": Constant.userModel!.email},
|
||||
"back_urls": {"failure": "${Constant.globalUrl}payment/failure", "pending": "${Constant.globalUrl}payment/pending", "success": "${Constant.globalUrl}payment/success"},
|
||||
"back_urls": {
|
||||
"failure": "${Constant.globalUrl}payment/failure",
|
||||
"pending": "${Constant.globalUrl}payment/pending",
|
||||
"success": "${Constant.globalUrl}payment/success",
|
||||
},
|
||||
"auto_return": "approved",
|
||||
// Automatically return after payment is approved
|
||||
});
|
||||
|
||||
final response = await http.post(Uri.parse("https://api.mercadopago.com/checkout/preferences"), headers: headers, body: body);
|
||||
final response = await http.post(
|
||||
Uri.parse("https://api.mercadopago.com/checkout/preferences"),
|
||||
headers: headers,
|
||||
body: body,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200 || response.statusCode == 201) {
|
||||
final data = jsonDecode(response.body);
|
||||
@@ -497,15 +617,23 @@ class RentalOrderDetailsController extends GetxController {
|
||||
}
|
||||
});
|
||||
} else {
|
||||
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
|
||||
ShowToastDialog.showToast(
|
||||
"Something went wrong, please contact admin.".tr(),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//flutter wave Payment Method
|
||||
Future<Null> flutterWaveInitiatePayment({required BuildContext context, required String amount}) async {
|
||||
Future<Null> flutterWaveInitiatePayment({
|
||||
required BuildContext context,
|
||||
required String amount,
|
||||
}) async {
|
||||
final url = Uri.parse('https://api.flutterwave.com/v3/payments');
|
||||
final headers = {'Authorization': 'Bearer ${flutterWaveModel.value.secretKey}', 'Content-Type': 'application/json'};
|
||||
final headers = {
|
||||
'Authorization': 'Bearer ${flutterWaveModel.value.secretKey}',
|
||||
'Content-Type': 'application/json',
|
||||
};
|
||||
|
||||
final body = jsonEncode({
|
||||
"tx_ref": _ref,
|
||||
@@ -515,17 +643,23 @@ class RentalOrderDetailsController extends GetxController {
|
||||
"payment_options": "ussd, card, barter, payattitude",
|
||||
"customer": {
|
||||
"email": Constant.userModel!.email.toString(),
|
||||
"phonenumber": Constant.userModel!.phoneNumber, // Add a real phone number
|
||||
"phonenumber":
|
||||
Constant.userModel!.phoneNumber, // Add a real phone number
|
||||
"name": Constant.userModel!.fullName(), // Add a real customer name
|
||||
},
|
||||
"customizations": {"title": "Payment for Services", "description": "Payment for XYZ services"},
|
||||
"customizations": {
|
||||
"title": "Payment for Services",
|
||||
"description": "Payment for XYZ services",
|
||||
},
|
||||
});
|
||||
|
||||
final response = await http.post(url, headers: headers, body: body);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = jsonDecode(response.body);
|
||||
Get.to(MercadoPagoScreen(initialURl: data['data']['link']))!.then((value) {
|
||||
Get.to(MercadoPagoScreen(initialURl: data['data']['link']))!.then((
|
||||
value,
|
||||
) {
|
||||
if (value) {
|
||||
ShowToastDialog.showToast("Payment Successful!!".tr());
|
||||
completeOrder();
|
||||
@@ -554,8 +688,14 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
// payFast
|
||||
void payFastPayment({required BuildContext context, required String amount}) {
|
||||
PayStackURLGen.getPayHTML(payFastSettingData: payFastModel.value, amount: amount.toString(), userModel: Constant.userModel!).then((String? value) async {
|
||||
bool isDone = await Get.to(PayFastScreen(htmlData: value!, payFastSettingData: payFastModel.value));
|
||||
PayStackURLGen.getPayHTML(
|
||||
payFastSettingData: payFastModel.value,
|
||||
amount: amount.toString(),
|
||||
userModel: Constant.userModel!,
|
||||
).then((String? value) async {
|
||||
bool isDone = await Get.to(
|
||||
PayFastScreen(htmlData: value!, payFastSettingData: payFastModel.value),
|
||||
);
|
||||
if (isDone) {
|
||||
Get.back();
|
||||
ShowToastDialog.showToast("Payment successfully".tr());
|
||||
@@ -594,7 +734,14 @@ class RentalOrderDetailsController extends GetxController {
|
||||
// });
|
||||
}
|
||||
|
||||
Future<void> startTransaction(context, {required String txnTokenBy, required orderId, required double amount, required callBackURL, required isStaging}) async {
|
||||
Future<void> startTransaction(
|
||||
context, {
|
||||
required String txnTokenBy,
|
||||
required orderId,
|
||||
required double amount,
|
||||
required callBackURL,
|
||||
required isStaging,
|
||||
}) async {
|
||||
// try {
|
||||
// var response = AllInOneSdk.startTransaction(
|
||||
// paytmModel.value.paytmMID.toString(),
|
||||
@@ -630,24 +777,38 @@ class RentalOrderDetailsController extends GetxController {
|
||||
// }
|
||||
}
|
||||
|
||||
Future verifyCheckSum({required String checkSum, required double amount, required orderId}) async {
|
||||
Future verifyCheckSum({
|
||||
required String checkSum,
|
||||
required double amount,
|
||||
required orderId,
|
||||
}) async {
|
||||
String getChecksum = "${Constant.globalUrl}payments/validatechecksum";
|
||||
final response = await http.post(
|
||||
Uri.parse(getChecksum),
|
||||
headers: {},
|
||||
body: {"mid": paytmModel.value.paytmMID.toString(), "order_id": orderId, "key_secret": paytmModel.value.pAYTMMERCHANTKEY.toString(), "checksum_value": checkSum},
|
||||
body: {
|
||||
"mid": paytmModel.value.paytmMID.toString(),
|
||||
"order_id": orderId,
|
||||
"key_secret": paytmModel.value.pAYTMMERCHANTKEY.toString(),
|
||||
"checksum_value": checkSum,
|
||||
},
|
||||
);
|
||||
final data = jsonDecode(response.body);
|
||||
return data['status'];
|
||||
}
|
||||
|
||||
Future<GetPaymentTxtTokenModel> initiatePayment({required double amount, required orderId}) async {
|
||||
Future<GetPaymentTxtTokenModel> initiatePayment({
|
||||
required double amount,
|
||||
required orderId,
|
||||
}) async {
|
||||
String initiateURL = "${Constant.globalUrl}payments/initiatepaytmpayment";
|
||||
String callback = "";
|
||||
if (paytmModel.value.isSandboxEnabled == true) {
|
||||
callback = "${callback}https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
|
||||
callback =
|
||||
"${callback}https://securegw-stage.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
|
||||
} else {
|
||||
callback = "${callback}https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
|
||||
callback =
|
||||
"${callback}https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=$orderId";
|
||||
}
|
||||
final response = await http.post(
|
||||
Uri.parse(initiateURL),
|
||||
@@ -665,9 +826,12 @@ class RentalOrderDetailsController extends GetxController {
|
||||
);
|
||||
log(response.body);
|
||||
final data = jsonDecode(response.body);
|
||||
if (data["body"]["txnToken"] == null || data["body"]["txnToken"].toString().isEmpty) {
|
||||
if (data["body"]["txnToken"] == null ||
|
||||
data["body"]["txnToken"].toString().isEmpty) {
|
||||
Get.back();
|
||||
ShowToastDialog.showToast("something went wrong, please contact admin.".tr());
|
||||
ShowToastDialog.showToast(
|
||||
"something went wrong, please contact admin.".tr(),
|
||||
);
|
||||
}
|
||||
return GetPaymentTxtTokenModel.fromJson(data);
|
||||
}
|
||||
@@ -685,7 +849,10 @@ class RentalOrderDetailsController extends GetxController {
|
||||
'description': 'wallet Topup',
|
||||
'retry': {'enabled': true, 'max_count': 1},
|
||||
'send_sms_hash': true,
|
||||
'prefill': {'contact': Constant.userModel!.phoneNumber, 'email': Constant.userModel!.email},
|
||||
'prefill': {
|
||||
'contact': Constant.userModel!.phoneNumber,
|
||||
'email': Constant.userModel!.email,
|
||||
},
|
||||
'external': {
|
||||
'wallets': ['paytm'],
|
||||
},
|
||||
@@ -720,7 +887,10 @@ class RentalOrderDetailsController extends GetxController {
|
||||
}
|
||||
|
||||
//Midtrans payment
|
||||
Future<void> midtransMakePayment({required String amount, required BuildContext context}) async {
|
||||
Future<void> midtransMakePayment({
|
||||
required String amount,
|
||||
required BuildContext context,
|
||||
}) async {
|
||||
await createPaymentLink(amount: amount).then((url) {
|
||||
ShowToastDialog.closeLoader();
|
||||
if (url != '') {
|
||||
@@ -738,15 +908,30 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
Future<String> createPaymentLink({required var amount}) async {
|
||||
var ordersId = const Uuid().v1();
|
||||
final url = Uri.parse(midTransModel.value.isSandbox! ? 'https://api.sandbox.midtrans.com/v1/payment-links' : 'https://api.midtrans.com/v1/payment-links');
|
||||
final url = Uri.parse(
|
||||
midTransModel.value.isSandbox!
|
||||
? 'https://api.sandbox.midtrans.com/v1/payment-links'
|
||||
: 'https://api.midtrans.com/v1/payment-links',
|
||||
);
|
||||
|
||||
final response = await http.post(
|
||||
url,
|
||||
headers: {'Accept': 'application/json', 'Content-Type': 'application/json', 'Authorization': generateBasicAuthHeader(midTransModel.value.serverKey!)},
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': generateBasicAuthHeader(
|
||||
midTransModel.value.serverKey!,
|
||||
),
|
||||
},
|
||||
body: jsonEncode({
|
||||
'transaction_details': {'order_id': ordersId, 'gross_amount': double.parse(amount.toString()).toInt()},
|
||||
'transaction_details': {
|
||||
'order_id': ordersId,
|
||||
'gross_amount': double.parse(amount.toString()).toInt(),
|
||||
},
|
||||
'usage_limit': 2,
|
||||
"callbacks": {"finish": "https://www.google.com?merchant_order_id=$ordersId"},
|
||||
"callbacks": {
|
||||
"finish": "https://www.google.com?merchant_order_id=$ordersId",
|
||||
},
|
||||
}),
|
||||
);
|
||||
|
||||
@@ -754,7 +939,9 @@ class RentalOrderDetailsController extends GetxController {
|
||||
final responseData = jsonDecode(response.body);
|
||||
return responseData['payment_url'];
|
||||
} else {
|
||||
ShowToastDialog.showToast("something went wrong, please contact admin.".tr());
|
||||
ShowToastDialog.showToast(
|
||||
"something went wrong, please contact admin.".tr(),
|
||||
);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -771,13 +958,30 @@ class RentalOrderDetailsController extends GetxController {
|
||||
static String orderId = '';
|
||||
static String amount = '';
|
||||
|
||||
Future<void> orangeMakePayment({required String amount, required BuildContext context}) async {
|
||||
Future<void> orangeMakePayment({
|
||||
required String amount,
|
||||
required BuildContext context,
|
||||
}) async {
|
||||
reset();
|
||||
var id = const Uuid().v4();
|
||||
var paymentURL = await fetchToken(context: context, orderId: id, amount: amount, currency: 'USD');
|
||||
var paymentURL = await fetchToken(
|
||||
context: context,
|
||||
orderId: id,
|
||||
amount: amount,
|
||||
currency: 'USD',
|
||||
);
|
||||
ShowToastDialog.closeLoader();
|
||||
if (paymentURL.toString() != '') {
|
||||
Get.to(() => OrangeMoneyScreen(initialURl: paymentURL, accessToken: accessToken, amount: amount, orangePay: orangeMoneyModel.value, orderId: orderId, payToken: payToken))!.then((value) {
|
||||
Get.to(
|
||||
() => OrangeMoneyScreen(
|
||||
initialURl: paymentURL,
|
||||
accessToken: accessToken,
|
||||
amount: amount,
|
||||
orangePay: orangeMoneyModel.value,
|
||||
orderId: orderId,
|
||||
payToken: payToken,
|
||||
),
|
||||
)!.then((value) {
|
||||
if (value == true) {
|
||||
ShowToastDialog.showToast("Payment Successful!!".tr());
|
||||
completeOrder();
|
||||
@@ -789,13 +993,22 @@ class RentalOrderDetailsController extends GetxController {
|
||||
}
|
||||
}
|
||||
|
||||
Future fetchToken({required String orderId, required String currency, required BuildContext context, required String amount}) async {
|
||||
Future fetchToken({
|
||||
required String orderId,
|
||||
required String currency,
|
||||
required BuildContext context,
|
||||
required String amount,
|
||||
}) async {
|
||||
String apiUrl = 'https://api.orange.com/oauth/v3/token';
|
||||
Map<String, String> requestBody = {'grant_type': 'client_credentials'};
|
||||
|
||||
var response = await http.post(
|
||||
Uri.parse(apiUrl),
|
||||
headers: <String, String>{'Authorization': "Basic ${orangeMoneyModel.value.auth!}", 'Content-Type': 'application/x-www-form-urlencoded', 'Accept': 'application/json'},
|
||||
headers: <String, String>{
|
||||
'Authorization': "Basic ${orangeMoneyModel.value.auth!}",
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
body: requestBody,
|
||||
);
|
||||
|
||||
@@ -806,17 +1019,32 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
accessToken = responseData['access_token'];
|
||||
// ignore: use_build_context_synchronously
|
||||
return await webpayment(context: context, amountData: amount, currency: currency, orderIdData: orderId);
|
||||
return await webpayment(
|
||||
context: context,
|
||||
amountData: amount,
|
||||
currency: currency,
|
||||
orderIdData: orderId,
|
||||
);
|
||||
} else {
|
||||
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
|
||||
ShowToastDialog.showToast(
|
||||
"Something went wrong, please contact admin.".tr(),
|
||||
);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
Future webpayment({required String orderIdData, required BuildContext context, required String currency, required String amountData}) async {
|
||||
Future webpayment({
|
||||
required String orderIdData,
|
||||
required BuildContext context,
|
||||
required String currency,
|
||||
required String amountData,
|
||||
}) async {
|
||||
orderId = orderIdData;
|
||||
amount = amountData;
|
||||
String apiUrl = orangeMoneyModel.value.isSandbox! == true ? 'https://api.orange.com/orange-money-webpay/dev/v1/webpayment' : 'https://api.orange.com/orange-money-webpay/cm/v1/webpayment';
|
||||
String apiUrl =
|
||||
orangeMoneyModel.value.isSandbox! == true
|
||||
? 'https://api.orange.com/orange-money-webpay/dev/v1/webpayment'
|
||||
: 'https://api.orange.com/orange-money-webpay/cm/v1/webpayment';
|
||||
Map<String, String> requestBody = {
|
||||
"merchant_key": orangeMoneyModel.value.merchantKey ?? '',
|
||||
"currency": orangeMoneyModel.value.isSandbox == true ? "OUV" : currency,
|
||||
@@ -831,7 +1059,11 @@ class RentalOrderDetailsController extends GetxController {
|
||||
|
||||
var response = await http.post(
|
||||
Uri.parse(apiUrl),
|
||||
headers: <String, String>{'Authorization': 'Bearer $accessToken', 'Content-Type': 'application/json', 'Accept': 'application/json'},
|
||||
headers: <String, String>{
|
||||
'Authorization': 'Bearer $accessToken',
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json',
|
||||
},
|
||||
body: json.encode(requestBody),
|
||||
);
|
||||
|
||||
@@ -845,7 +1077,9 @@ class RentalOrderDetailsController extends GetxController {
|
||||
return '';
|
||||
}
|
||||
} else {
|
||||
ShowToastDialog.showToast("Something went wrong, please contact admin.".tr());
|
||||
ShowToastDialog.showToast(
|
||||
"Something went wrong, please contact admin.".tr(),
|
||||
);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
@@ -861,7 +1095,13 @@ class RentalOrderDetailsController extends GetxController {
|
||||
await createXenditInvoice(amount: amount).then((model) {
|
||||
ShowToastDialog.closeLoader();
|
||||
if (model.id != null) {
|
||||
Get.to(() => XenditScreen(initialURl: model.invoiceUrl ?? '', transId: model.id ?? '', apiKey: xenditModel.value.apiKey!.toString()))!.then((value) {
|
||||
Get.to(
|
||||
() => XenditScreen(
|
||||
initialURl: model.invoiceUrl ?? '',
|
||||
transId: model.id ?? '',
|
||||
apiKey: xenditModel.value.apiKey!.toString(),
|
||||
),
|
||||
)!.then((value) {
|
||||
if (value == true) {
|
||||
ShowToastDialog.showToast("Payment Successful!!".tr());
|
||||
completeOrder();
|
||||
@@ -877,7 +1117,9 @@ class RentalOrderDetailsController extends GetxController {
|
||||
const url = 'https://api.xendit.co/v2/invoices';
|
||||
var headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': generateBasicAuthHeader(xenditModel.value.apiKey!.toString()),
|
||||
'Authorization': generateBasicAuthHeader(
|
||||
xenditModel.value.apiKey!.toString(),
|
||||
),
|
||||
// 'Cookie': '__cf_bm=yERkrx3xDITyFGiou0bbKY1bi7xEwovHNwxV1vCNbVc-1724155511-1.0.1.1-jekyYQmPCwY6vIJ524K0V6_CEw6O.dAwOmQnHtwmaXO_MfTrdnmZMka0KZvjukQgXu5B.K_6FJm47SGOPeWviQ',
|
||||
};
|
||||
|
||||
@@ -890,7 +1132,11 @@ class RentalOrderDetailsController extends GetxController {
|
||||
});
|
||||
|
||||
try {
|
||||
final response = await http.post(Uri.parse(url), headers: headers, body: body);
|
||||
final response = await http.post(
|
||||
Uri.parse(url),
|
||||
headers: headers,
|
||||
body: body,
|
||||
);
|
||||
|
||||
if (response.statusCode == 200 || response.statusCode == 201) {
|
||||
XenditModel model = XenditModel.fromJson(jsonDecode(response.body));
|
||||
|
||||
Reference in New Issue
Block a user