Covid Drive-Thru implemented
parent
ba10014b46
commit
5e8e3806d6
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"client":{
|
||||||
|
"appType":"1",
|
||||||
|
"cp_id":"2640966000002322881",
|
||||||
|
"product_id":"736430079244816576",
|
||||||
|
"client_id":"563737844552565952",
|
||||||
|
"client_secret":"9C9A2C272576B8AE6E886C78AF944E8354B91F0AF3381129BB8369FB35E41C47",
|
||||||
|
"project_id":"736430079244816576",
|
||||||
|
"app_id":"103856487",
|
||||||
|
"api_key":"CgB6e3x90XxBrOCMun809w+DOzcFEettcBDUF3fqaLry1ViqTeJqoPwpfaOq/uGw//x0oYwucu9aWazs+Rdj0GUF",
|
||||||
|
"package_name":"com.cloud.diplomaticquarterapp"
|
||||||
|
},
|
||||||
|
"configuration_version":"1.0"
|
||||||
|
}
|
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"client":{
|
||||||
|
"appType":"1",
|
||||||
|
"cp_id":"2640966000002322881",
|
||||||
|
"product_id":"736430079244816567",
|
||||||
|
"client_id":"563735388191982656",
|
||||||
|
"client_secret":"650C7C799812AFFD53A10C7756CF05FB9F215A7E49032ABA8EBF3E14B77535CF",
|
||||||
|
"project_id":"736430079244816567",
|
||||||
|
"app_id":"102857389",
|
||||||
|
"api_key":"CgB6e3x9DJzMgRCmnT6dyUEkp6UsIfddb6l3w0ZEXzeiRMHEFi3400Z5fJ5qaHneU0OrAI/JRpk+DMGVs3QpUxlI",
|
||||||
|
"package_name":"com.ejada.hmg"
|
||||||
|
},
|
||||||
|
"configuration_version":"1.0"
|
||||||
|
}
|
@ -0,0 +1,331 @@
|
|||||||
|
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/Blood/new_text_Field.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/BookAppointment/QRCode.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.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/widgets/buttons/secondary_button.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
class CovidPaymentSummary extends StatefulWidget {
|
||||||
|
PatientShareResponse patientShareResponse;
|
||||||
|
|
||||||
|
final 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,
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
physics: ScrollPhysics(),
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.all(12),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Texts(
|
||||||
|
TranslationBase.of(context).confirmThePayment,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
fontSize: 24,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: [
|
||||||
|
Container(
|
||||||
|
height: 100.0,
|
||||||
|
padding: EdgeInsets.all(7.0),
|
||||||
|
width: MediaQuery.of(context).size.width * 0.45,
|
||||||
|
child:
|
||||||
|
Image.asset(getImagePath(widget.selectedPaymentMethod)),
|
||||||
|
),
|
||||||
|
Texts(
|
||||||
|
'${widget.patientShareResponse.patientShareWithTax} ' + TranslationBase.of(context).sar,
|
||||||
|
fontSize: 26,
|
||||||
|
bold: true,
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.all(3),
|
||||||
|
child: NewTextFields(
|
||||||
|
hintText: TranslationBase.of(context).fileNumber,
|
||||||
|
initialValue:
|
||||||
|
projectViewModel.user.patientID.toString(),
|
||||||
|
isEnabled: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
margin: EdgeInsets.all(3),
|
||||||
|
child: NewTextFields(
|
||||||
|
hintText: TranslationBase.of(context).name,
|
||||||
|
initialValue: projectViewModel.user.firstName,
|
||||||
|
isEnabled: false,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
NewTextFields(
|
||||||
|
hintText: TranslationBase.of(context).mobileNumber,
|
||||||
|
initialValue: projectViewModel.user.mobileNumber,
|
||||||
|
isEnabled: false,
|
||||||
|
),
|
||||||
|
SizedBox(
|
||||||
|
height: 12,
|
||||||
|
),
|
||||||
|
NewTextFields(
|
||||||
|
hintText: TranslationBase.of(context).depositorName,
|
||||||
|
initialValue: projectViewModel.user.firstName +
|
||||||
|
" " +
|
||||||
|
projectViewModel.user.middleName +
|
||||||
|
" " +
|
||||||
|
projectViewModel.user.lastName,
|
||||||
|
isEnabled: false,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomSheet: Container(
|
||||||
|
height: MediaQuery.of(context).size.height * 0.1,
|
||||||
|
width: double.infinity,
|
||||||
|
padding: EdgeInsets.all(12),
|
||||||
|
child: SecondaryButton(
|
||||||
|
textColor: Colors.white,
|
||||||
|
color: Theme.of(context).primaryColor,
|
||||||
|
label: TranslationBase.of(context).confirm.toUpperCase(),
|
||||||
|
onTap: () {
|
||||||
|
startPaymentProcess(projectViewModel.user);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 {
|
||||||
|
if (paymentMethod == "ApplePay") {
|
||||||
|
// await widget.chromeBrowser.open(
|
||||||
|
// url: "https://applepay-datatrans-sample.herokuapp.com/",
|
||||||
|
// options: ChromeSafariBrowserClassOptions(
|
||||||
|
// android: AndroidChromeCustomTabsOptions(
|
||||||
|
// addDefaultShareMenuItem: false),
|
||||||
|
// ios: IOSSafariOptions(barCollapsingEnabled: true)));
|
||||||
|
} else {
|
||||||
|
widget.browser = new MyInAppBrowser(
|
||||||
|
onExitCallback: onBrowserExit,
|
||||||
|
appo: appo,
|
||||||
|
onLoadStartCallback: onBrowserLoadStart);
|
||||||
|
|
||||||
|
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,
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
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,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => QRCode(
|
||||||
|
patientShareResponse: widget.patientShareResponse,
|
||||||
|
appoQR: appoQR,
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
String getImagePath(String paymentMethod) {
|
||||||
|
switch (paymentMethod) {
|
||||||
|
case "MADA":
|
||||||
|
return 'assets/images/new-design/mada.png';
|
||||||
|
break;
|
||||||
|
case "SADAD":
|
||||||
|
return 'assets/images/new-design/sadad.png';
|
||||||
|
break;
|
||||||
|
case "VISA":
|
||||||
|
return 'assets/images/new-design/visa.png';
|
||||||
|
break;
|
||||||
|
case "MASTERCARD":
|
||||||
|
return 'assets/images/new-design/mastercard.png';
|
||||||
|
break;
|
||||||
|
case "Installment":
|
||||||
|
return 'assets/images/new-design/installment.png';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'assets/images/new-design/mada.png';
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue