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.
360 lines
13 KiB
Dart
360 lines
13 KiB
Dart
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
|
|
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
|
|
import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart';
|
|
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
|
|
import 'package:diplomaticquarterapp/pages/BookAppointment/QRCode.dart';
|
|
import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart';
|
|
import 'package:diplomaticquarterapp/pages/landing/landing_page.dart';
|
|
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
|
|
import 'package:diplomaticquarterapp/theme/colors.dart';
|
|
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
|
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
|
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
|
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
|
import 'package:diplomaticquarterapp/uitl/utils.dart';
|
|
import 'package:diplomaticquarterapp/uitl/utils_new.dart';
|
|
import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
|
|
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
|
|
import 'package:diplomaticquarterapp/widgets/dragable_sheet.dart';
|
|
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
|
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
|
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/flutter_svg.dart';
|
|
import 'package:provider/provider.dart';
|
|
|
|
class CovidPaymentSummary extends StatefulWidget {
|
|
PatientShareResponse patientShareResponse;
|
|
|
|
String selectedPaymentMethod;
|
|
MyInAppBrowser browser;
|
|
AuthenticatedUser authenticatedUser;
|
|
AppSharedPreferences sharedPref = AppSharedPreferences();
|
|
String transID = "";
|
|
|
|
CovidPaymentSummary({@required this.patientShareResponse, this.selectedPaymentMethod});
|
|
|
|
@override
|
|
_CovidPaymentSummaryState createState() => _CovidPaymentSummaryState();
|
|
}
|
|
|
|
class _CovidPaymentSummaryState extends State<CovidPaymentSummary> {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
ProjectViewModel projectViewModel = Provider.of(context);
|
|
return AppScaffold(
|
|
appBarTitle: TranslationBase.of(context).covidTest,
|
|
isShowAppBar: true,
|
|
showNewAppBar: true,
|
|
showNewAppBarTitle: true,
|
|
backgroundColor: CustomColors.appBackgroudGrey2Color,
|
|
body: SingleChildScrollView(
|
|
physics: ScrollPhysics(),
|
|
child: Container(
|
|
margin: EdgeInsets.all(12),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
TranslationBase.of(context).confirmThePayment,
|
|
style: TextStyle(
|
|
fontSize: 19,
|
|
fontWeight: FontWeight.bold,
|
|
letterSpacing: -1.46,
|
|
),
|
|
),
|
|
SizedBox(
|
|
height: 12,
|
|
),
|
|
Row(
|
|
children: [
|
|
Text(
|
|
TranslationBase.of(context).totalBalance + ": ",
|
|
style: TextStyle(
|
|
fontSize: 12,
|
|
letterSpacing: -0.60,
|
|
),
|
|
),
|
|
Text(
|
|
'${widget.patientShareResponse.patientShareWithTax} ' + TranslationBase.of(context).sar,
|
|
style: TextStyle(
|
|
fontSize: 14,
|
|
fontWeight: FontWeight.bold,
|
|
letterSpacing: -0.60,
|
|
),
|
|
)
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 12,
|
|
),
|
|
Row(
|
|
children: [
|
|
Container(
|
|
width: 20,
|
|
height: 20,
|
|
decoration: containerColorRadiusBorderWidth(CustomColors.accentColor, 200, Colors.white, 4),
|
|
),
|
|
Container(
|
|
height: 100.0,
|
|
padding: EdgeInsets.all(7.0),
|
|
child: Image.asset(getImagePath(widget.selectedPaymentMethod), width: 100, height: 100),
|
|
),
|
|
mFlex(1),
|
|
InkWell(
|
|
onTap: () {
|
|
showDraggableDialog(context, PaymentMethod(
|
|
onSelectedMethod: (String metohd) {
|
|
widget.selectedPaymentMethod = metohd;
|
|
setState(() {});
|
|
},
|
|
));
|
|
},
|
|
child: Text(
|
|
TranslationBase.of(context).changePayment,
|
|
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 12, letterSpacing: -0.48, decoration: TextDecoration.underline, color: CustomColors.accentColor),
|
|
),
|
|
)
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 12,
|
|
),
|
|
Row(
|
|
children: [
|
|
Expanded(
|
|
flex: 1,
|
|
child: showDetail(
|
|
TranslationBase.of(context).fileNumber,
|
|
projectViewModel.user.patientID.toString(),
|
|
),
|
|
),
|
|
mWidth(6),
|
|
Expanded(
|
|
flex: 1,
|
|
child: showDetail(
|
|
TranslationBase.of(context).name,
|
|
projectViewModel.user.firstName.toString(),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
SizedBox(
|
|
height: 6,
|
|
),
|
|
showDetail(TranslationBase.of(context).mobileNumber, projectViewModel.user.mobileNumber),
|
|
SizedBox(
|
|
height: 6,
|
|
),
|
|
showDetail(
|
|
TranslationBase.of(context).depositorName,
|
|
projectViewModel.user.firstName + " " + projectViewModel.user.middleName + " " + projectViewModel.user.lastName,
|
|
)
|
|
],
|
|
),
|
|
),
|
|
),
|
|
bottomSheet: Container(
|
|
color: Theme.of(context).scaffoldBackgroundColor,
|
|
margin: EdgeInsets.only(bottom: 5.0),
|
|
width: double.infinity,
|
|
padding: EdgeInsets.all(12),
|
|
child: DefaultButton(
|
|
TranslationBase.of(context).confirm.toUpperCase(),
|
|
() {
|
|
startPaymentProcess(projectViewModel.user);
|
|
},
|
|
color: CustomColors.green,
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
Widget showDetail(String title, String value) {
|
|
return Container(
|
|
width: double.infinity,
|
|
child: Card(
|
|
shape: cardRadius(12),
|
|
margin: EdgeInsets.zero,
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(12.0),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
Text(
|
|
title,
|
|
style: TextStyle(fontSize: 11, fontWeight: FontWeight.w600, letterSpacing: -0.64),
|
|
),
|
|
Text(
|
|
value,
|
|
style: TextStyle(fontSize: 14, fontWeight: FontWeight.w600, letterSpacing: -0.64, color: Colors.grey),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
startPaymentProcess(AuthenticatedUser authenticatedUser) {
|
|
AppoitmentAllHistoryResultList appo = new AppoitmentAllHistoryResultList();
|
|
appo.projectID = widget.patientShareResponse.projectID;
|
|
appo.clinicID = widget.patientShareResponse.clinicID;
|
|
appo.appointmentNo = widget.patientShareResponse.appointmentNo;
|
|
|
|
openPayment(widget.selectedPaymentMethod, authenticatedUser, double.parse(widget.patientShareResponse.patientShareWithTax.toString()), widget.patientShareResponse, appo);
|
|
}
|
|
|
|
openPayment(String paymentMethod, AuthenticatedUser authenticatedUser, double amount, PatientShareResponse patientShareResponse, AppoitmentAllHistoryResultList appo) async {
|
|
widget.browser = new MyInAppBrowser(onExitCallback: onBrowserExit, appo: appo, onLoadStartCallback: onBrowserLoadStart, context: context);
|
|
|
|
widget.browser.openPaymentBrowser(
|
|
amount,
|
|
"Appointment check in",
|
|
Utils.getAppointmentTransID(appo.projectID, appo.clinicID, appo.appointmentNo),
|
|
appo.projectID.toString(),
|
|
authenticatedUser.emailAddress,
|
|
paymentMethod,
|
|
authenticatedUser.patientType,
|
|
authenticatedUser.firstName,
|
|
authenticatedUser.patientID,
|
|
authenticatedUser,
|
|
widget.browser,
|
|
widget.patientShareResponse.isLiveCareAppointment,
|
|
"2",
|
|
"",
|
|
widget.patientShareResponse.appointmentDate,
|
|
widget.patientShareResponse.appointmentNo,
|
|
widget.patientShareResponse.clinicID,
|
|
widget.patientShareResponse.doctorID);
|
|
}
|
|
|
|
onBrowserLoadStart(String url) {
|
|
print("onBrowserLoadStart");
|
|
print(url);
|
|
|
|
MyInAppBrowser.successURLS.forEach((element) {
|
|
if (url.contains(element)) {
|
|
if (widget.browser.isOpened()) widget.browser.close();
|
|
MyInAppBrowser.isPaymentDone = true;
|
|
return;
|
|
}
|
|
});
|
|
|
|
MyInAppBrowser.errorURLS.forEach((element) {
|
|
if (url.contains(element)) {
|
|
if (widget.browser.isOpened()) widget.browser.close();
|
|
MyInAppBrowser.isPaymentDone = false;
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
|
|
onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) {
|
|
print("onBrowserExit Called!!!!");
|
|
if (isPaymentMade) {
|
|
checkPaymentStatus(appo);
|
|
} else {
|
|
print("onBrowserExit Payment Not made");
|
|
Navigator.pushAndRemoveUntil(
|
|
context,
|
|
MaterialPageRoute(builder: (context) => LandingPage()),
|
|
(Route<dynamic> route) => false,
|
|
);
|
|
}
|
|
}
|
|
|
|
checkPaymentStatus(AppoitmentAllHistoryResultList appo) {
|
|
GifLoaderDialogUtils.showMyDialog(context);
|
|
DoctorsListService service = new DoctorsListService();
|
|
service.checkPaymentStatus(Utils.getAppointmentTransID(appo.projectID, appo.clinicID, appo.appointmentNo), context).then((res) {
|
|
print("Printing Payment Status Reponse!!!!");
|
|
print(res);
|
|
String paymentInfo = res['Response_Message'];
|
|
if (paymentInfo == 'Success') {
|
|
createAdvancePayment(res, appo);
|
|
} else {
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
AppToast.showErrorToast(message: res['Response_Message']);
|
|
}
|
|
}).catchError((err) {
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
AppToast.showErrorToast(message: err);
|
|
print(err);
|
|
});
|
|
}
|
|
|
|
createAdvancePayment(res, AppoitmentAllHistoryResultList appo) {
|
|
DoctorsListService service = new DoctorsListService();
|
|
String paymentReference = res['Fort_id'].toString();
|
|
service.createAdvancePayment(appo, appo.projectID.toString(), res['Amount'], res['Fort_id'], res['PaymentMethod'], context).then((res) {
|
|
print(res['OnlineCheckInAppointments'][0]['AdvanceNumber']);
|
|
addAdvancedNumberRequest(res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), paymentReference, appo.appointmentNo.toString());
|
|
}).catchError((err) {
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
AppToast.showErrorToast(message: err);
|
|
print(err);
|
|
});
|
|
}
|
|
|
|
addAdvancedNumberRequest(String advanceNumber, String paymentReference, String appointmentID) {
|
|
DoctorsListService service = new DoctorsListService();
|
|
service.addAdvancedNumberRequest(advanceNumber, paymentReference, appointmentID, context).then((res) {
|
|
print(res);
|
|
getAppoQR(context);
|
|
}).catchError((err) {
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
AppToast.showErrorToast(message: err);
|
|
print(err);
|
|
});
|
|
}
|
|
|
|
getAppoQR(context) {
|
|
DoctorsListService service = new DoctorsListService();
|
|
service.generateAppointmentQR(widget.patientShareResponse, context).then((res) {
|
|
print(res);
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
navigateToQR(context, res['AppointmentQR']);
|
|
}).catchError((err) {
|
|
GifLoaderDialogUtils.hideDialog(context);
|
|
AppToast.showErrorToast(message: err);
|
|
print(err);
|
|
});
|
|
}
|
|
|
|
Future navigateToQR(context, String appoQR) async {
|
|
Navigator.push(
|
|
context,
|
|
FadePage(
|
|
page: QRCode(
|
|
patientShareResponse: widget.patientShareResponse,
|
|
appoQR: appoQR,
|
|
)));
|
|
}
|
|
|
|
String getImagePath(String paymentMethod) {
|
|
switch (paymentMethod) {
|
|
case "MADA":
|
|
return 'assets/images/new/payment/Mada.png';
|
|
break;
|
|
// case "SADAD":
|
|
// return 'assets/images/new-design/sadad.png';
|
|
// break;
|
|
case "VISA":
|
|
return 'assets/images/new/payment/visa.png';
|
|
break;
|
|
case "MASTERCARD":
|
|
return 'assets/images/new/payment/Mastercard.png';
|
|
break;
|
|
case "Installment":
|
|
return 'assets/images/new/payment/installments.png';
|
|
break;
|
|
case "ApplePay":
|
|
return 'assets/images/new/payment/Apple_Pay.png';
|
|
break;
|
|
}
|
|
|
|
return 'assets/images/new/payment/Mada.png';
|
|
}
|
|
}
|