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.
		
		
		
		
		
			
		
			
				
	
	
		
			622 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Dart
		
	
			
		
		
	
	
			622 lines
		
	
	
		
			27 KiB
		
	
	
	
		
			Dart
		
	
import 'dart:developer';
 | 
						|
 | 
						|
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
 | 
						|
import 'package:diplomaticquarterapp/core/enum/PayfortEnums.dart';
 | 
						|
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/Clinics/EROnlineCheckInPaymentDetailsResponse.dart';
 | 
						|
import 'package:diplomaticquarterapp/models/LiveCare/ApplePayInsertRequest.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/services/clinic_services/get_clinic_service.dart';
 | 
						|
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
 | 
						|
import 'package:diplomaticquarterapp/services/payfort_services/payfort_project_details_resp_model.dart';
 | 
						|
import 'package:diplomaticquarterapp/services/payfort_services/payfort_view_model.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/date_uitl.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/dragable_sheet.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 EROnlineCheckInPaymentDetails extends StatefulWidget {
 | 
						|
  int projectID = 0;
 | 
						|
  bool isERBookAppointment = false;
 | 
						|
  String projectName = "";
 | 
						|
 | 
						|
  EROnlineCheckInPaymentDetails({required this.projectID, required this.isERBookAppointment, required this.projectName});
 | 
						|
 | 
						|
  @override
 | 
						|
  State<EROnlineCheckInPaymentDetails> createState() => _EROnlineCheckInPaymentDetailsState();
 | 
						|
}
 | 
						|
 | 
						|
class _EROnlineCheckInPaymentDetailsState extends State<EROnlineCheckInPaymentDetails> with SingleTickerProviderStateMixin {
 | 
						|
  late ProjectViewModel projectViewModel;
 | 
						|
  EROnlineCheckInPaymentDetailsResponse? erOnlineCheckInPaymentDetailsResponse;
 | 
						|
  String? selectedPaymentMethod;
 | 
						|
  String? selectedInstallmentPlan;
 | 
						|
  String transID = "";
 | 
						|
  late MyInAppBrowser browser;
 | 
						|
 | 
						|
  @override
 | 
						|
  void initState() {
 | 
						|
    WidgetsBinding.instance.addPostFrameCallback((_) {
 | 
						|
      getEROnlineCheckInPaymentDetails();
 | 
						|
    });
 | 
						|
    super.initState();
 | 
						|
  }
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context) {
 | 
						|
    projectViewModel = Provider.of(context);
 | 
						|
    return AppScaffold(
 | 
						|
      isShowAppBar: true,
 | 
						|
      appBarTitle: TranslationBase.of(context).emergency + " ${TranslationBase.of(context).checkinOptions}",
 | 
						|
      isShowDecPage: false,
 | 
						|
      showNewAppBar: true,
 | 
						|
      showNewAppBarTitle: true,
 | 
						|
      backgroundColor: Color(0xffF8F8F8),
 | 
						|
      body: Padding(
 | 
						|
        padding: EdgeInsets.all(16),
 | 
						|
        child: Column(
 | 
						|
          crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
          children: [
 | 
						|
            Container(
 | 
						|
              width: double.infinity,
 | 
						|
              decoration: BoxDecoration(
 | 
						|
                color: Colors.white,
 | 
						|
                borderRadius: BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)),
 | 
						|
                boxShadow: [
 | 
						|
                  BoxShadow(
 | 
						|
                    color: Colors.grey.withOpacity(0.1),
 | 
						|
                    spreadRadius: 5,
 | 
						|
                    blurRadius: 7,
 | 
						|
                    offset: Offset(0, 3), // changes position of shadow
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
              child: Padding(
 | 
						|
                padding: EdgeInsets.all(16),
 | 
						|
                child: Column(
 | 
						|
                  crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                  children: [
 | 
						|
                    Text(
 | 
						|
                      TranslationBase.of(context).patientInfo,
 | 
						|
                      style: TextStyle(
 | 
						|
                          fontSize: 18, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
 | 
						|
                    ),
 | 
						|
                    mHeight(12),
 | 
						|
                    Row(
 | 
						|
                      children: [
 | 
						|
                        Text(
 | 
						|
                          TranslationBase.of(context).patientName + ":",
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 12,
 | 
						|
                            letterSpacing: -0.6,
 | 
						|
                            color: CustomColors.grey,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                        mWidth(3),
 | 
						|
                        Text(
 | 
						|
                          projectViewModel.user.firstName! + " " + projectViewModel.user.lastName!,
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 14,
 | 
						|
                            letterSpacing: -0.48,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                    Row(
 | 
						|
                      children: [
 | 
						|
                        Text(
 | 
						|
                          TranslationBase.of(context).mrn + ":",
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 12,
 | 
						|
                            letterSpacing: -0.6,
 | 
						|
                            color: CustomColors.grey,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                        mWidth(3),
 | 
						|
                        Text(
 | 
						|
                          projectViewModel.user.patientID.toString(),
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 14,
 | 
						|
                            letterSpacing: -0.48,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                  ],
 | 
						|
                ),
 | 
						|
              ),
 | 
						|
            ),
 | 
						|
            mHeight(24),
 | 
						|
            Container(
 | 
						|
              width: double.infinity,
 | 
						|
              decoration: BoxDecoration(
 | 
						|
                color: Colors.white,
 | 
						|
                borderRadius: BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)),
 | 
						|
                boxShadow: [
 | 
						|
                  BoxShadow(
 | 
						|
                    color: Colors.grey.withOpacity(0.1),
 | 
						|
                    spreadRadius: 5,
 | 
						|
                    blurRadius: 7,
 | 
						|
                    offset: Offset(0, 3), // changes position of shadow
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
              child: Padding(
 | 
						|
                padding: EdgeInsets.all(16),
 | 
						|
                child: Column(
 | 
						|
                  crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                  children: [
 | 
						|
                    Text(
 | 
						|
                      "ER Visit Details",
 | 
						|
                      style: TextStyle(
 | 
						|
                          fontSize: 18, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
 | 
						|
                    ),
 | 
						|
                    mHeight(12),
 | 
						|
                    Row(
 | 
						|
                      children: [
 | 
						|
                        Text(
 | 
						|
                          TranslationBase.of(context).hospital + ":",
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 12,
 | 
						|
                            letterSpacing: -0.6,
 | 
						|
                            color: CustomColors.grey,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                        mWidth(3),
 | 
						|
                        Text(
 | 
						|
                          widget.projectName,
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 14,
 | 
						|
                            letterSpacing: -0.48,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                    Row(
 | 
						|
                      children: [
 | 
						|
                        Text(
 | 
						|
                          TranslationBase.of(context).clinicName + ":",
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 12,
 | 
						|
                            letterSpacing: -0.6,
 | 
						|
                            color: CustomColors.grey,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                        mWidth(3),
 | 
						|
                        Text(
 | 
						|
                          "ER Clinic",
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 14,
 | 
						|
                            letterSpacing: -0.48,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                    Row(
 | 
						|
                      children: [
 | 
						|
                        Text(
 | 
						|
                          "Time Check-In" + ":",
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 12,
 | 
						|
                            letterSpacing: -0.6,
 | 
						|
                            color: CustomColors.grey,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                        mWidth(3),
 | 
						|
                        Text(
 | 
						|
                          DateUtil.getMonthDayYearDateFormatted(DateTime.now()),
 | 
						|
                          style: TextStyle(
 | 
						|
                            fontWeight: FontWeight.w600,
 | 
						|
                            fontSize: 14,
 | 
						|
                            letterSpacing: -0.48,
 | 
						|
                          ),
 | 
						|
                        ),
 | 
						|
                      ],
 | 
						|
                    ),
 | 
						|
                  ],
 | 
						|
                ),
 | 
						|
              ),
 | 
						|
            )
 | 
						|
          ],
 | 
						|
        ),
 | 
						|
      ),
 | 
						|
      bottomSheet: erOnlineCheckInPaymentDetailsResponse != null
 | 
						|
          ? Container(
 | 
						|
              decoration: BoxDecoration(
 | 
						|
                color: Colors.white,
 | 
						|
                borderRadius: BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)),
 | 
						|
                boxShadow: [
 | 
						|
                  BoxShadow(
 | 
						|
                    color: Colors.grey.withOpacity(0.5),
 | 
						|
                    spreadRadius: 5,
 | 
						|
                    blurRadius: 7,
 | 
						|
                    offset: Offset(0, 3), // changes position of shadow
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
              padding: EdgeInsets.only(left: 21, right: 21, top: 15, bottom: 15),
 | 
						|
              width: double.infinity,
 | 
						|
              // color: Colors.white,
 | 
						|
              child: Column(
 | 
						|
                crossAxisAlignment: CrossAxisAlignment.start,
 | 
						|
                mainAxisSize: MainAxisSize.min,
 | 
						|
                children: [
 | 
						|
                  SizedBox(height: 12),
 | 
						|
                  Text(
 | 
						|
                    TranslationBase.of(context).YouCanPayByTheFollowingOptions,
 | 
						|
                    style: TextStyle(
 | 
						|
                      fontSize: 16.0,
 | 
						|
                      fontWeight: FontWeight.w600,
 | 
						|
                      color: Color(0xff2B353E),
 | 
						|
                      letterSpacing: -0.64,
 | 
						|
                    ),
 | 
						|
                  ),
 | 
						|
                  SizedBox(
 | 
						|
                    width: MediaQuery.of(context).size.width * 0.75,
 | 
						|
                    child: getPaymentMethods(),
 | 
						|
                  ),
 | 
						|
                  _amountView(TranslationBase.of(context).patientShareTotalToDo, erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax.toString() + " " + TranslationBase.of(context).sar,
 | 
						|
                      isBold: true, isTotal: true),
 | 
						|
                  SizedBox(height: 12),
 | 
						|
                  DefaultButton(
 | 
						|
                    TranslationBase.of(context).payNow.toUpperCase(),
 | 
						|
                    () {
 | 
						|
                      makePayment();
 | 
						|
                    },
 | 
						|
                    color: CustomColors.green,
 | 
						|
                    disabledColor: CustomColors.grey2,
 | 
						|
                  ),
 | 
						|
                ],
 | 
						|
              ),
 | 
						|
            )
 | 
						|
          : Container(),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  makePayment() {
 | 
						|
    showDraggableDialog(
 | 
						|
      context,
 | 
						|
      PaymentMethod(
 | 
						|
        onSelectedMethod: (String method, [String? selectedInstallmentPlan]) {
 | 
						|
          selectedPaymentMethod = method;
 | 
						|
          this.selectedInstallmentPlan = selectedInstallmentPlan;
 | 
						|
          if (selectedPaymentMethod == "ApplePay") {
 | 
						|
            if (projectViewModel.havePrivilege(103)) {
 | 
						|
              startApplePay();
 | 
						|
            } else {
 | 
						|
              AppoitmentAllHistoryResultList appo = new AppoitmentAllHistoryResultList();
 | 
						|
              appo.projectID = widget.projectID;
 | 
						|
              openPayment(selectedPaymentMethod!, projectViewModel.user, erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax!, AppoitmentAllHistoryResultList());
 | 
						|
            }
 | 
						|
          } else {
 | 
						|
            openPayment(selectedPaymentMethod!, projectViewModel.user, erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax!, AppoitmentAllHistoryResultList());
 | 
						|
          }
 | 
						|
        },
 | 
						|
        patientShare: erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax,
 | 
						|
        isFromAdvancePayment: false,
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  openPayment(String paymentMethod, AuthenticatedUser authenticatedUser, num amount, AppoitmentAllHistoryResultList appo) {
 | 
						|
    transID = Utils.getAdvancePaymentTransID(widget.projectID, projectViewModel.user.patientID!);
 | 
						|
 | 
						|
    browser = new MyInAppBrowser(onExitCallback: onBrowserExit, appo: appo, onLoadStartCallback: onBrowserLoadStart);
 | 
						|
 | 
						|
    browser.openPaymentBrowser(amount, "ER Online Check-In Payment", transID, widget.projectID.toString(), authenticatedUser.emailAddress!, paymentMethod, authenticatedUser.patientType,
 | 
						|
        authenticatedUser.firstName!, authenticatedUser.patientID, authenticatedUser, browser, false, "3", "", context);
 | 
						|
  }
 | 
						|
 | 
						|
  onBrowserLoadStart(String url) {
 | 
						|
    print("onBrowserLoadStart");
 | 
						|
    print(url);
 | 
						|
 | 
						|
    MyInAppBrowser.successURLS.forEach((element) {
 | 
						|
      if (url.contains(element)) {
 | 
						|
        if (browser.isOpened()) browser.close();
 | 
						|
        MyInAppBrowser.isPaymentDone = true;
 | 
						|
        return;
 | 
						|
      }
 | 
						|
    });
 | 
						|
 | 
						|
    MyInAppBrowser.errorURLS.forEach((element) {
 | 
						|
      if (url.contains(element)) {
 | 
						|
        if (browser.isOpened()) browser.close();
 | 
						|
        MyInAppBrowser.isPaymentDone = false;
 | 
						|
        return;
 | 
						|
      }
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) {
 | 
						|
    print("onBrowserExit Called!!!!");
 | 
						|
    checkPaymentStatus(appo);
 | 
						|
  }
 | 
						|
 | 
						|
  void startApplePay() async {
 | 
						|
    transID = Utils.getAdvancePaymentTransID(widget.projectID, projectViewModel.user.patientID!);
 | 
						|
 | 
						|
    print("TransactionID: $transID");
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
 | 
						|
    LiveCareService service = new LiveCareService();
 | 
						|
    ApplePayInsertRequest applePayInsertRequest = new ApplePayInsertRequest();
 | 
						|
 | 
						|
    PayfortProjectDetailsRespModel? payfortProjectDetailsRespModel;
 | 
						|
    await context.read<PayfortViewModel>().getProjectDetailsForPayfort(projectId: widget.projectID, serviceId: ServiceTypeEnum.appointmentPayment.getIdFromServiceEnum()).then((value) {
 | 
						|
      payfortProjectDetailsRespModel = value!;
 | 
						|
    });
 | 
						|
 | 
						|
    applePayInsertRequest.clientRequestID = transID;
 | 
						|
    applePayInsertRequest.clinicID = 0;
 | 
						|
    applePayInsertRequest.currency = projectViewModel.user.outSA == 1 ? "AED" : "SAR";
 | 
						|
    // applePayInsertRequest.customerEmail = projectViewModel.authenticatedUserObject.user.emailAddress;
 | 
						|
    applePayInsertRequest.customerEmail = "CustID_${projectViewModel.user.patientID}@HMG.com";
 | 
						|
    applePayInsertRequest.customerID = projectViewModel.user.patientID;
 | 
						|
    applePayInsertRequest.customerName = projectViewModel.user.firstName! + " " + projectViewModel.user.lastName!;
 | 
						|
    applePayInsertRequest.deviceToken = await AppSharedPreferences().getString(PUSH_TOKEN);
 | 
						|
    applePayInsertRequest.voipToken = await AppSharedPreferences().getString(ONESIGNAL_APNS_TOKEN);
 | 
						|
    applePayInsertRequest.doctorID = 0;
 | 
						|
    applePayInsertRequest.projectID = widget.projectID.toString();
 | 
						|
    applePayInsertRequest.serviceID = ServiceTypeEnum.advancePayment.getIdFromServiceEnum().toString();
 | 
						|
    applePayInsertRequest.channelID = 3;
 | 
						|
    applePayInsertRequest.patientID = projectViewModel.user.patientID;
 | 
						|
    applePayInsertRequest.patientTypeID = projectViewModel.user.patientType;
 | 
						|
    applePayInsertRequest.patientOutSA = projectViewModel.user.outSA;
 | 
						|
    applePayInsertRequest.appointmentDate = null;
 | 
						|
    applePayInsertRequest.appointmentNo = 0;
 | 
						|
    applePayInsertRequest.orderDescription = "ER Online Check-In Payment";
 | 
						|
    applePayInsertRequest.liveServiceID = "0";
 | 
						|
    applePayInsertRequest.latitude = "0.0";
 | 
						|
    applePayInsertRequest.longitude = "0.0";
 | 
						|
    applePayInsertRequest.amount = erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax.toString();
 | 
						|
    applePayInsertRequest.isSchedule = "0";
 | 
						|
    applePayInsertRequest.language = projectViewModel.isArabic ? 'ar' : 'en';
 | 
						|
    applePayInsertRequest.languageID = projectViewModel.isArabic ? 1 : 2;
 | 
						|
    applePayInsertRequest.userName = projectViewModel.user.patientID;
 | 
						|
    applePayInsertRequest.responseContinueURL = "http://hmg.com/Documents/success.html";
 | 
						|
    applePayInsertRequest.backClickUrl = "http://hmg.com/Documents/success.html";
 | 
						|
    applePayInsertRequest.paymentOption = "ApplePay";
 | 
						|
 | 
						|
    applePayInsertRequest.isMobSDK = true;
 | 
						|
    applePayInsertRequest.merchantReference = transID;
 | 
						|
    applePayInsertRequest.merchantIdentifier = payfortProjectDetailsRespModel!.merchantIdentifier;
 | 
						|
    applePayInsertRequest.commandType = "PURCHASE";
 | 
						|
    applePayInsertRequest.signature = payfortProjectDetailsRespModel!.signature;
 | 
						|
    applePayInsertRequest.accessCode = payfortProjectDetailsRespModel!.accessCode;
 | 
						|
    applePayInsertRequest.shaRequestPhrase = payfortProjectDetailsRespModel!.shaRequest;
 | 
						|
    applePayInsertRequest.shaResponsePhrase = payfortProjectDetailsRespModel!.shaResponse;
 | 
						|
    applePayInsertRequest.returnURL = "";
 | 
						|
 | 
						|
    service.applePayInsertRequest(applePayInsertRequest, context).then((res) async {
 | 
						|
      if (res["MessageStatus"] == 1) {
 | 
						|
        await context.read<PayfortViewModel>().initiateApplePayWithPayfort(
 | 
						|
              customerName: projectViewModel.user.firstName! + " " + projectViewModel.user.lastName!,
 | 
						|
              // customerEmail: projectViewModel.authenticatedUserObject.user.emailAddress,
 | 
						|
              customerEmail: "CustID_${projectViewModel.user.patientID}@HMG.com",
 | 
						|
              orderDescription: "ER Online Check-In Payment",
 | 
						|
              orderAmount: erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax,
 | 
						|
              merchantReference: transID,
 | 
						|
              payfortProjectDetailsRespModel: payfortProjectDetailsRespModel,
 | 
						|
              currency: projectViewModel.user.outSA == 1 ? "AED" : "SAR",
 | 
						|
              onFailed: (failureResult) async {
 | 
						|
                log("failureResult: ${failureResult.toString()}");
 | 
						|
                AppToast.showErrorToast(message: failureResult.toString());
 | 
						|
              },
 | 
						|
              onSuccess: (successResult) async {
 | 
						|
                log("Payfort: ${successResult.responseMessage}");
 | 
						|
                await context.read<PayfortViewModel>().addPayfortApplePayResponse(projectViewModel.user.patientID!, result: successResult);
 | 
						|
                GifLoaderDialogUtils.hideDialog(context);
 | 
						|
                checkPaymentStatus(AppoitmentAllHistoryResultList());
 | 
						|
              },
 | 
						|
              projectId: widget.projectID,
 | 
						|
              serviceTypeEnum: ServiceTypeEnum.appointmentPayment,
 | 
						|
            );
 | 
						|
      } else {
 | 
						|
        GifLoaderDialogUtils.hideDialog(context);
 | 
						|
        AppToast.showErrorToast(message: "An error occurred while processing your request");
 | 
						|
      }
 | 
						|
    }).catchError((err) {
 | 
						|
      print(err);
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  checkPaymentStatus(AppoitmentAllHistoryResultList appo) {
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    DoctorsListService service = new DoctorsListService();
 | 
						|
    service.checkPaymentStatus(transID, false, context).then((res) {
 | 
						|
      String paymentInfo = res['Response_Message'];
 | 
						|
      if (paymentInfo == 'Success') {
 | 
						|
        GifLoaderDialogUtils.hideDialog(context);
 | 
						|
        if (widget.isERBookAppointment) {
 | 
						|
          // createAdvancePayment(res, appo);
 | 
						|
          ER_createAdvancePayment(res, appo);
 | 
						|
        } else {
 | 
						|
          autoGenerateInvoiceER(res);
 | 
						|
        }
 | 
						|
      } else {
 | 
						|
        GifLoaderDialogUtils.hideDialog(context);
 | 
						|
        AppToast.showErrorToast(message: res['Response_Message']);
 | 
						|
      }
 | 
						|
    }).catchError((err) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err);
 | 
						|
      print(err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  ER_createAdvancePayment(payment_res, AppoitmentAllHistoryResultList appo) {
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    DoctorsListService service = new DoctorsListService();
 | 
						|
    String paymentReference = payment_res['Fort_id'].toString();
 | 
						|
    service.ER_createAdvancePayment(appo, widget.projectID.toString(), payment_res['Amount'], payment_res['Fort_id'], payment_res['PaymentMethod'], context).then((res) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      addAdvancedNumberRequest(
 | 
						|
          // Utils.isVidaPlusProject(projectViewModel, widget.projectID)
 | 
						|
          //     ? res['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString()
 | 
						|
          //     : res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(),
 | 
						|
          res['ER_AdvancePaymentResponse']['AdvanceNumber'].toString(),
 | 
						|
          paymentReference,
 | 
						|
          0,
 | 
						|
          appo,
 | 
						|
          payment_res);
 | 
						|
    }).catchError((err) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err);
 | 
						|
      print(err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  createAdvancePayment(paymentRes, AppoitmentAllHistoryResultList appo) {
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    DoctorsListService service = new DoctorsListService();
 | 
						|
    String paymentReference = paymentRes['Fort_id'].toString();
 | 
						|
    service.HIS_createAdvancePayment(appo, widget.projectID.toString(), paymentRes['Amount'], paymentRes['Fort_id'], paymentRes['PaymentMethod'], projectViewModel.user.patientType,
 | 
						|
            projectViewModel.user.firstName! + " " + projectViewModel.user.lastName!, projectViewModel.user.patientID, context)
 | 
						|
        .then((res) {
 | 
						|
      addAdvancedNumberRequest(
 | 
						|
          Utils.isVidaPlusProject(projectViewModel, widget.projectID)
 | 
						|
              ? res['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString()
 | 
						|
              : res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(),
 | 
						|
          paymentReference,
 | 
						|
          0,
 | 
						|
          appo,
 | 
						|
          paymentRes);
 | 
						|
    }).catchError((err) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err);
 | 
						|
      print(err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  addAdvancedNumberRequest(String advanceNumber, String paymentReference, dynamic appointmentID, AppoitmentAllHistoryResultList appo, paymentRes) {
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    DoctorsListService service = new DoctorsListService();
 | 
						|
    service.addAdvancedNumberRequest(advanceNumber, paymentReference, appointmentID, context).then((res) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      if (widget.isERBookAppointment) {
 | 
						|
        AppToast.showSuccessToast(message: "Your appointment has been booked successfully. Please perform Check-In once you arrive at the hospital.");
 | 
						|
        // Navigator.pop(context);
 | 
						|
        // Navigator.pop(context);
 | 
						|
        // Navigator.pop(context);
 | 
						|
        Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
 | 
						|
      } else {
 | 
						|
        autoGenerateInvoiceER(paymentRes);
 | 
						|
      }
 | 
						|
    }).catchError((err) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err.toString());
 | 
						|
      print(err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  autoGenerateInvoiceER(res) {
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    DoctorsListService service = new DoctorsListService();
 | 
						|
    service.autoGenerateInvoiceERClinic(widget.projectID, 4, res['Fort_id'], res['Amount'], res['PaymentMethod'], res['CardNumber'], res['Merchant_Reference'], res['RRN'], false).then((res) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      _showMyDialog(TranslationBase.of(context).ERCheckInSuccess, context);
 | 
						|
    }).catchError((err) {
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      AppToast.showErrorToast(message: err);
 | 
						|
      print(err);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  Future<void> _showMyDialog(String message, BuildContext context) async {
 | 
						|
    return showDialog<void>(
 | 
						|
      context: context,
 | 
						|
      barrierDismissible: true, // user must tap button!
 | 
						|
      builder: (BuildContext context) {
 | 
						|
        return AlertDialog(
 | 
						|
          title: const Text('Alert'),
 | 
						|
          content: SingleChildScrollView(
 | 
						|
            child: ListBody(
 | 
						|
              children: <Widget>[
 | 
						|
                Text(message),
 | 
						|
              ],
 | 
						|
            ),
 | 
						|
          ),
 | 
						|
          actions: <Widget>[
 | 
						|
            TextButton(
 | 
						|
              child: const Text('OK'),
 | 
						|
              onPressed: () {
 | 
						|
                Navigator.of(context).pop();
 | 
						|
                Navigator.pushAndRemoveUntil(context, MaterialPageRoute(builder: (context) => LandingPage()), (Route<dynamic> r) => false);
 | 
						|
              },
 | 
						|
            ),
 | 
						|
          ],
 | 
						|
        );
 | 
						|
      },
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  getEROnlineCheckInPaymentDetails() {
 | 
						|
    GifLoaderDialogUtils.showMyDialog(context);
 | 
						|
    ClinicListService ancillaryOrdersService = new ClinicListService();
 | 
						|
    ancillaryOrdersService.getEROnlineCheckInPaymentDetails(widget.projectID, 10).then((response) {
 | 
						|
      erOnlineCheckInPaymentDetailsResponse = EROnlineCheckInPaymentDetailsResponse.fromJson(response["ResponsePatientShare"]);
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
      setState(() {});
 | 
						|
    }).catchError((err) {
 | 
						|
      AppToast.showErrorToast(message: err.toString());
 | 
						|
      GifLoaderDialogUtils.hideDialog(context);
 | 
						|
    });
 | 
						|
  }
 | 
						|
 | 
						|
  _amountView(String title, String value, {bool isBold = false, bool isTotal = false}) {
 | 
						|
    return Padding(
 | 
						|
      padding: const EdgeInsets.only(top: 10, bottom: 10),
 | 
						|
      child: Row(children: [
 | 
						|
        Expanded(
 | 
						|
          child: _getNormalText(title),
 | 
						|
        ),
 | 
						|
        Expanded(
 | 
						|
          child: _getNormalText(value, isBold: isBold, isTotal: isTotal),
 | 
						|
        ),
 | 
						|
      ]),
 | 
						|
    );
 | 
						|
  }
 | 
						|
 | 
						|
  _getNormalText(text, {bool isBold = false, bool isTotal = false}) {
 | 
						|
    return Text(
 | 
						|
      text,
 | 
						|
      style: TextStyle(
 | 
						|
        fontSize: isBold
 | 
						|
            ? isTotal
 | 
						|
                ? 16
 | 
						|
                : 12
 | 
						|
            : 11,
 | 
						|
        letterSpacing: -0.5,
 | 
						|
        color: isBold ? Color(0xff2E303A) : Color(0xff575757),
 | 
						|
        fontWeight: isTotal ? FontWeight.bold : FontWeight.w600,
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |