import 'dart:convert'; import 'package:SEFER/constant/colors.dart'; import 'package:SEFER/controller/firebase/firbase_messge.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/links.dart'; import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/main.dart'; class CaptainWalletController extends GetxController { bool isLoading = false; final formKeyTransfer = GlobalKey(); Map walletDate = {}; Map walletDateVisa = {}; Map walletDriverPointsDate = {}; final formKey = GlobalKey(); String totalAmount = '0'; String totalAmountVisa = '0'; String totalPoints = '0'; final amountFromBudgetController = TextEditingController(); final newDriverPhoneController = TextEditingController(); final phoneWallet = TextEditingController(); payFromBudget() async { if (formKey.currentState!.validate()) { var pointFromBudget = box.read(BoxName.countryCode) == 'Jordan' ? int.parse((amountFromBudgetController.text)) * 100 : int.parse((amountFromBudgetController.text)); await addDriverPayment('fromBudgetToPoints', int.parse((amountFromBudgetController.text)) * -1); Future.delayed(const Duration(seconds: 2)); await addDriverWallet('fromBudget', pointFromBudget.toString()); update(); Get.back(); getCaptainWalletFromRide(); getCaptainWalletFromBuyPoints(); checkAccountCaptainBank(); } } List amountToNewDriverMap = []; bool isNewTransfer = false; Future detectNewDriverFromMyBudget() async { if (formKeyTransfer.currentState!.validate()) { if (int.parse(amountFromBudgetController.text) < double.parse(totalAmountVisa) && int.parse(amountFromBudgetController.text) > 10) { //get new driver details isNewTransfer = true; update(); var res = await CRUD().get( link: AppLink.getDriverDetails, payload: {'driver_phone': '+2${newDriverPhoneController.text}'}); isNewTransfer = false; update(); if (res != 'failure') { var d = jsonDecode(res); amountToNewDriverMap = d['data']; // update(); } else { Get.snackbar( "This driver is not registered".tr, '', duration: const Duration(seconds: 3), backgroundColor: AppColor.redColor, snackPosition: SnackPosition.BOTTOM, ); } } else { Get.snackbar( 'Your Budget less than needed'.tr, '', duration: const Duration(seconds: 3), backgroundColor: AppColor.redColor, snackPosition: SnackPosition.BOTTOM, ); } } } Future getCaptainWalletFromRide() async { isLoading = true; update(); var res = await CRUD().get( link: AppLink.getAllPaymentFromRide, payload: {'driverID': box.read(BoxName.driverID)}, ); walletDate = jsonDecode(res); totalAmount = walletDate['message'][0]['total_amount'] ?? '0'; print(totalAmount); var res1 = await CRUD().get( link: AppLink.getAllPaymentVisa, payload: {'driverID': box.read(BoxName.driverID)}); walletDateVisa = jsonDecode(res1); totalAmountVisa = walletDateVisa['message'][0]['diff'] ?? '0'; print(totalAmountVisa); isLoading = false; update(); } Future getCaptainWalletFromBuyPoints() async { isLoading = true; update(); var res = await CRUD().get( link: AppLink.getDriverPaymentPoints, payload: {'driverID': box.read(BoxName.driverID)}, ); walletDriverPointsDate = jsonDecode(res); if (walletDriverPointsDate['message'][0]['driverID'].toString() == box.read(BoxName.driverID)) { double totalPointsDouble = double.parse( walletDriverPointsDate['message'][0]['total_amount'].toString()); totalPoints = totalPointsDouble.toStringAsFixed(0); } else { totalPoints = '0'; } isLoading = false; update(); } String paymentToken = ''; Future generateToken(String amount) async { var res = await CRUD().post(link: AppLink.addPaymentToken, payload: { 'driverID': box.read(BoxName.driverID).toString(), 'amount': amount.toString(), }); var d = jsonDecode(res); print('paymentToken ${d['message']}'); return d['message']; } late String paymentID; Future addDriverPayment(String paymentMethod, amount) async { // paymentToken = await generateToken(amount); var res = await CRUD().post(link: AppLink.addDriverPaymentPoints, payload: { 'driverID': box.read(BoxName.driverID).toString(), 'amount': amount.toString(), 'payment_method': paymentMethod.toString(), }); var d = jsonDecode(res); paymentID = d['message'].toString(); print('paymentID $paymentID'); return paymentID; } Future addDriverWallet(String paymentMethod, point) async { paymentToken = await generateToken(point); await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { 'driverID': box.read(BoxName.driverID).toString(), 'paymentID': paymentID.toString(), 'amount': point, 'token': paymentToken, 'paymentMethod': paymentMethod.toString(), }); } Future addtransferDriversWallet(String paymentMethod) async { paymentID = await addDriverPayment(paymentMethod, amountFromBudgetController.text); paymentToken = await generateToken(amountFromBudgetController.text); await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { 'driverID': box.read(BoxName.driverID).toString(), 'paymentID': paymentID.toString(), 'amount': (int.parse(amountFromBudgetController.text) * -1).toString(), 'token': paymentToken, 'paymentMethod': paymentMethod.toString(), }); paymentID = await addDriverPayment(paymentMethod, amountFromBudgetController.text); paymentToken = await generateToken(amountFromBudgetController.text); var res1 = await CRUD().post(link: AppLink.addDriversWalletPoints, payload: { 'driverID': amountToNewDriverMap[0]['id'].toString(), 'paymentID': paymentID.toString(), 'amount': (int.parse(amountFromBudgetController.text) - 5).toString(), 'token': paymentToken, 'paymentMethod': paymentMethod.toString(), }); if (res1 != 'failure') { FirebaseMessagesController().sendNotificationToDriverMAP( 'Transfer', '${'You have transfer to your wallet from'.tr}' '${box.read(BoxName.nameDriver)}', amountToNewDriverMap[0]['token'].toString(), [], ); } } //check if account bank is created or not Future checkAccountCaptainBank() async { isLoading = false; update(); if (box.read(BoxName.accountIdStripeConnect).toString().isEmpty) { var res = await CRUD().get(link: AppLink.getAccount, payload: { 'id': box.read(BoxName.driverID).toString(), }); var d = jsonDecode(res); if (d['status'] != 'failure') { box.write(BoxName.accountIdStripeConnect, d['message'][0]['accountBank'].toString()); } } isLoading = true; update(); } @override void onInit() { getCaptainWalletFromRide(); getCaptainWalletFromBuyPoints(); checkAccountCaptainBank(); super.onInit(); } }