Compare commits
	
		
			12 Commits 
		
	
	
		
			dev_v3.13.
			...
			dev_3.13.6
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
								 | 
						adf00e101f | 1 year ago | 
| 
							
							
								
								 | 
						f6b89e1ae6 | 1 year ago | 
| 
							
							
								
								 | 
						4dc0a3f6c2 | 1 year ago | 
| 
							
							
								
								 | 
						84159656b6 | 1 year ago | 
| 
							
							
								
								 | 
						8f9882fc5c | 1 year ago | 
| 
							
							
								
								 | 
						88d79367ba | 1 year ago | 
| 
							
							
								
								 | 
						de5317ae55 | 1 year ago | 
| 
							
							
								
								 | 
						9a0a658083 | 1 year ago | 
| 
							
							
								
								 | 
						3a64858905 | 1 year ago | 
| 
							
							
								
								 | 
						f65fe26fd2 | 1 year ago | 
| 
							
							
								
								 | 
						f5df1b1d01 | 1 year ago | 
| 
							
							
								
								 | 
						704d691816 | 1 year ago | 
@ -0,0 +1,96 @@
 | 
				
			|||||||
 | 
					class EROnlineCheckInPaymentDetailsResponse {
 | 
				
			||||||
 | 
					  num? cashPrice;
 | 
				
			||||||
 | 
					  num? cashPriceTax;
 | 
				
			||||||
 | 
					  num? cashPriceWithTax;
 | 
				
			||||||
 | 
					  int? companyId;
 | 
				
			||||||
 | 
					  String? companyName;
 | 
				
			||||||
 | 
					  num? companyShareWithTax;
 | 
				
			||||||
 | 
					  dynamic errCode;
 | 
				
			||||||
 | 
					  int? groupID;
 | 
				
			||||||
 | 
					  String? insurancePolicyNo;
 | 
				
			||||||
 | 
					  String? message;
 | 
				
			||||||
 | 
					  String? patientCardID;
 | 
				
			||||||
 | 
					  num? patientShare;
 | 
				
			||||||
 | 
					  num? patientShareWithTax;
 | 
				
			||||||
 | 
					  num? patientTaxAmount;
 | 
				
			||||||
 | 
					  int? policyId;
 | 
				
			||||||
 | 
					  String? policyName;
 | 
				
			||||||
 | 
					  String? procedureId;
 | 
				
			||||||
 | 
					  String? procedureName;
 | 
				
			||||||
 | 
					  dynamic setupID;
 | 
				
			||||||
 | 
					  int? statusCode;
 | 
				
			||||||
 | 
					  String? subPolicyNo;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  EROnlineCheckInPaymentDetailsResponse(
 | 
				
			||||||
 | 
					      {this.cashPrice,
 | 
				
			||||||
 | 
					        this.cashPriceTax,
 | 
				
			||||||
 | 
					        this.cashPriceWithTax,
 | 
				
			||||||
 | 
					        this.companyId,
 | 
				
			||||||
 | 
					        this.companyName,
 | 
				
			||||||
 | 
					        this.companyShareWithTax,
 | 
				
			||||||
 | 
					        this.errCode,
 | 
				
			||||||
 | 
					        this.groupID,
 | 
				
			||||||
 | 
					        this.insurancePolicyNo,
 | 
				
			||||||
 | 
					        this.message,
 | 
				
			||||||
 | 
					        this.patientCardID,
 | 
				
			||||||
 | 
					        this.patientShare,
 | 
				
			||||||
 | 
					        this.patientShareWithTax,
 | 
				
			||||||
 | 
					        this.patientTaxAmount,
 | 
				
			||||||
 | 
					        this.policyId,
 | 
				
			||||||
 | 
					        this.policyName,
 | 
				
			||||||
 | 
					        this.procedureId,
 | 
				
			||||||
 | 
					        this.procedureName,
 | 
				
			||||||
 | 
					        this.setupID,
 | 
				
			||||||
 | 
					        this.statusCode,
 | 
				
			||||||
 | 
					        this.subPolicyNo});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  EROnlineCheckInPaymentDetailsResponse.fromJson(Map<String, dynamic> json) {
 | 
				
			||||||
 | 
					    cashPrice = json['CashPrice'];
 | 
				
			||||||
 | 
					    cashPriceTax = json['CashPriceTax'];
 | 
				
			||||||
 | 
					    cashPriceWithTax = json['CashPriceWithTax'];
 | 
				
			||||||
 | 
					    companyId = json['CompanyId'];
 | 
				
			||||||
 | 
					    companyName = json['CompanyName'];
 | 
				
			||||||
 | 
					    companyShareWithTax = json['CompanyShareWithTax'];
 | 
				
			||||||
 | 
					    errCode = json['ErrCode'];
 | 
				
			||||||
 | 
					    groupID = json['GroupID'];
 | 
				
			||||||
 | 
					    insurancePolicyNo = json['InsurancePolicyNo'];
 | 
				
			||||||
 | 
					    message = json['Message'];
 | 
				
			||||||
 | 
					    patientCardID = json['PatientCardID'];
 | 
				
			||||||
 | 
					    patientShare = json['PatientShare'];
 | 
				
			||||||
 | 
					    patientShareWithTax = json['PatientShareWithTax'];
 | 
				
			||||||
 | 
					    patientTaxAmount = json['PatientTaxAmount'];
 | 
				
			||||||
 | 
					    policyId = json['PolicyId'];
 | 
				
			||||||
 | 
					    policyName = json['PolicyName'];
 | 
				
			||||||
 | 
					    procedureId = json['ProcedureId'];
 | 
				
			||||||
 | 
					    procedureName = json['ProcedureName'];
 | 
				
			||||||
 | 
					    setupID = json['SetupID'];
 | 
				
			||||||
 | 
					    statusCode = json['StatusCode'];
 | 
				
			||||||
 | 
					    subPolicyNo = json['SubPolicyNo'];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Map<String, dynamic> toJson() {
 | 
				
			||||||
 | 
					    final Map<String, dynamic> data = new Map<String, dynamic>();
 | 
				
			||||||
 | 
					    data['CashPrice'] = this.cashPrice;
 | 
				
			||||||
 | 
					    data['CashPriceTax'] = this.cashPriceTax;
 | 
				
			||||||
 | 
					    data['CashPriceWithTax'] = this.cashPriceWithTax;
 | 
				
			||||||
 | 
					    data['CompanyId'] = this.companyId;
 | 
				
			||||||
 | 
					    data['CompanyName'] = this.companyName;
 | 
				
			||||||
 | 
					    data['CompanyShareWithTax'] = this.companyShareWithTax;
 | 
				
			||||||
 | 
					    data['ErrCode'] = this.errCode;
 | 
				
			||||||
 | 
					    data['GroupID'] = this.groupID;
 | 
				
			||||||
 | 
					    data['InsurancePolicyNo'] = this.insurancePolicyNo;
 | 
				
			||||||
 | 
					    data['Message'] = this.message;
 | 
				
			||||||
 | 
					    data['PatientCardID'] = this.patientCardID;
 | 
				
			||||||
 | 
					    data['PatientShare'] = this.patientShare;
 | 
				
			||||||
 | 
					    data['PatientShareWithTax'] = this.patientShareWithTax;
 | 
				
			||||||
 | 
					    data['PatientTaxAmount'] = this.patientTaxAmount;
 | 
				
			||||||
 | 
					    data['PolicyId'] = this.policyId;
 | 
				
			||||||
 | 
					    data['PolicyName'] = this.policyName;
 | 
				
			||||||
 | 
					    data['ProcedureId'] = this.procedureId;
 | 
				
			||||||
 | 
					    data['ProcedureName'] = this.procedureName;
 | 
				
			||||||
 | 
					    data['SetupID'] = this.setupID;
 | 
				
			||||||
 | 
					    data['StatusCode'] = this.statusCode;
 | 
				
			||||||
 | 
					    data['SubPolicyNo'] = this.subPolicyNo;
 | 
				
			||||||
 | 
					    return data;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,205 @@
 | 
				
			|||||||
 | 
					import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/pages/ErService/EROnlineCheckIn/EROnlineCheckInPaymentDetails.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/theme/colors.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_new.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.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:provider/provider.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EROnlineCheckInBookAppointment extends StatefulWidget {
 | 
				
			||||||
 | 
					  const EROnlineCheckInBookAppointment();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  State<EROnlineCheckInBookAppointment> createState() => _EROnlineCheckInBookAppointmentState();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _EROnlineCheckInBookAppointmentState extends State<EROnlineCheckInBookAppointment> with SingleTickerProviderStateMixin {
 | 
				
			||||||
 | 
					  late ProjectViewModel projectViewModel;
 | 
				
			||||||
 | 
					  List<HospitalsModel> projectsList = [];
 | 
				
			||||||
 | 
					  final GlobalKey projectDropdownKey = GlobalKey();
 | 
				
			||||||
 | 
					  HospitalsModel? selectedHospital;
 | 
				
			||||||
 | 
					  String projectDropdownValue = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void initState() {
 | 
				
			||||||
 | 
					    WidgetsBinding.instance.addPostFrameCallback((_) {
 | 
				
			||||||
 | 
					      getProjectsList();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    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: [
 | 
				
			||||||
 | 
					            InkWell(
 | 
				
			||||||
 | 
					              onTap: () {
 | 
				
			||||||
 | 
					                openDropdown(projectDropdownKey);
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              child: Container(
 | 
				
			||||||
 | 
					                width: double.infinity,
 | 
				
			||||||
 | 
					                decoration: containerRadius(Colors.white, 12),
 | 
				
			||||||
 | 
					                padding: EdgeInsets.only(left: 10, right: 10, top: 12, bottom: 12),
 | 
				
			||||||
 | 
					                child: Row(
 | 
				
			||||||
 | 
					                  children: [
 | 
				
			||||||
 | 
					                    Flexible(
 | 
				
			||||||
 | 
					                      child: Column(
 | 
				
			||||||
 | 
					                        crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					                        children: [
 | 
				
			||||||
 | 
					                          Text(
 | 
				
			||||||
 | 
					                            TranslationBase.of(context).selectHospital,
 | 
				
			||||||
 | 
					                            style: TextStyle(
 | 
				
			||||||
 | 
					                              fontSize: 11,
 | 
				
			||||||
 | 
					                              letterSpacing: -0.44,
 | 
				
			||||||
 | 
					                              fontWeight: FontWeight.w600,
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                          Container(
 | 
				
			||||||
 | 
					                            height: 18,
 | 
				
			||||||
 | 
					                            child: DropdownButtonHideUnderline(
 | 
				
			||||||
 | 
					                              child: DropdownButton<HospitalsModel>(
 | 
				
			||||||
 | 
					                                key: projectDropdownKey,
 | 
				
			||||||
 | 
					                                hint: new Text(TranslationBase.of(context).selectHospital),
 | 
				
			||||||
 | 
					                                value: selectedHospital,
 | 
				
			||||||
 | 
					                                iconSize: 0,
 | 
				
			||||||
 | 
					                                isExpanded: true,
 | 
				
			||||||
 | 
					                                style: TextStyle(fontSize: 14, letterSpacing: -0.56, color: Colors.black),
 | 
				
			||||||
 | 
					                                items: projectsList.map((item) {
 | 
				
			||||||
 | 
					                                  return new DropdownMenuItem<HospitalsModel>(
 | 
				
			||||||
 | 
					                                    value: item,
 | 
				
			||||||
 | 
					                                    child: new Text(item.name!),
 | 
				
			||||||
 | 
					                                  );
 | 
				
			||||||
 | 
					                                }).toList(),
 | 
				
			||||||
 | 
					                                onChanged: (newValue) async {
 | 
				
			||||||
 | 
					                                  setState(() {
 | 
				
			||||||
 | 
					                                    selectedHospital = newValue!;
 | 
				
			||||||
 | 
					                                    projectDropdownValue = newValue.mainProjectID.toString();
 | 
				
			||||||
 | 
					                                  });
 | 
				
			||||||
 | 
					                                },
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ],
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                    Icon(Icons.keyboard_arrow_down),
 | 
				
			||||||
 | 
					                  ],
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            mHeight(16),
 | 
				
			||||||
 | 
					            Container(
 | 
				
			||||||
 | 
					              width: double.infinity,
 | 
				
			||||||
 | 
					              decoration: containerRadius(Colors.white, 12),
 | 
				
			||||||
 | 
					              padding: EdgeInsets.only(left: 10, right: 10, top: 12, bottom: 12),
 | 
				
			||||||
 | 
					              child: Column(
 | 
				
			||||||
 | 
					                crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					                children: [
 | 
				
			||||||
 | 
					                  Text(
 | 
				
			||||||
 | 
					                    TranslationBase.of(context).clinicName,
 | 
				
			||||||
 | 
					                    style: TextStyle(
 | 
				
			||||||
 | 
					                      fontSize: 11,
 | 
				
			||||||
 | 
					                      letterSpacing: -0.44,
 | 
				
			||||||
 | 
					                      fontWeight: FontWeight.w600,
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                  Text(
 | 
				
			||||||
 | 
					                    "ER Clinic",
 | 
				
			||||||
 | 
					                    style: TextStyle(fontSize: 14, letterSpacing: -0.56, color: Colors.black),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          ],
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      bottomSheet: Container(
 | 
				
			||||||
 | 
					        height: 80,
 | 
				
			||||||
 | 
					        color: CustomColors.white,
 | 
				
			||||||
 | 
					        padding: EdgeInsets.fromLTRB(12.0, 12.0, 12.0, 25.0),
 | 
				
			||||||
 | 
					        child: DefaultButton(
 | 
				
			||||||
 | 
					          TranslationBase.of(context).bookAppo,
 | 
				
			||||||
 | 
					          () {
 | 
				
			||||||
 | 
					            if (projectDropdownValue == "" || selectedHospital == null) {
 | 
				
			||||||
 | 
					              AppToast.showErrorToast(message: TranslationBase.of(context).selectHospital);
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              Navigator.push(
 | 
				
			||||||
 | 
					                context,
 | 
				
			||||||
 | 
					                FadePage(
 | 
				
			||||||
 | 
					                  page: EROnlineCheckInPaymentDetails(
 | 
				
			||||||
 | 
					                    projectID: selectedHospital?.iD,
 | 
				
			||||||
 | 
					                    isERBookAppointment: true,
 | 
				
			||||||
 | 
					                    projectName: selectedHospital!.name!,
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              );
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          color: CustomColors.accentColor,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  getProjectsList() {
 | 
				
			||||||
 | 
					    int languageID = projectViewModel.isArabic ? 1 : 2;
 | 
				
			||||||
 | 
					    GifLoaderDialogUtils.showMyDialog(context);
 | 
				
			||||||
 | 
					    ClinicListService service = new ClinicListService();
 | 
				
			||||||
 | 
					    List<HospitalsModel> projectsListLocal = [];
 | 
				
			||||||
 | 
					    service.getProjectsList(languageID, context).then((res) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      if (res['MessageStatus'] == 1) {
 | 
				
			||||||
 | 
					        setState(() {
 | 
				
			||||||
 | 
					          res['ListProject'].forEach((v) {
 | 
				
			||||||
 | 
					            projectsListLocal.add(new HospitalsModel.fromJson(v));
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					          projectsList = projectsListLocal;
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      print(err);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool openDropdown(GlobalKey key) {
 | 
				
			||||||
 | 
					    GestureDetector? detector;
 | 
				
			||||||
 | 
					    bool returnValue = false;
 | 
				
			||||||
 | 
					    void searchForGestureDetector(BuildContext element) {
 | 
				
			||||||
 | 
					      element.visitChildElements((element) {
 | 
				
			||||||
 | 
					        if (element.widget != null && element.widget is GestureDetector) {
 | 
				
			||||||
 | 
					          detector = element.widget as GestureDetector?;
 | 
				
			||||||
 | 
					          returnValue = false;
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          searchForGestureDetector(element);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        returnValue = true;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    searchForGestureDetector(key.currentContext!);
 | 
				
			||||||
 | 
					    assert(detector != null);
 | 
				
			||||||
 | 
					    detector?.onTap!();
 | 
				
			||||||
 | 
					    return returnValue;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,453 @@
 | 
				
			|||||||
 | 
					import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/pages/ErService/EROnlineCheckIn/EROnlineCheckInBookAppointment.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/pages/ErService/EROnlineCheckIn/EROnlineCheckInPaymentDetails.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/theme/colors.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_new.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/widgets/buttons/defaultButton.dart';
 | 
				
			||||||
 | 
					import 'package:diplomaticquarterapp/widgets/nfc/nfc_reader_sheet.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_nfc_kit/flutter_nfc_kit.dart';
 | 
				
			||||||
 | 
					import 'package:flutter_svg/flutter_svg.dart';
 | 
				
			||||||
 | 
					import 'package:provider/provider.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EROnlineCheckInHomePage extends StatefulWidget {
 | 
				
			||||||
 | 
					  const EROnlineCheckInHomePage();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  State<EROnlineCheckInHomePage> createState() => _EROnlineCheckInHomePageState();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _EROnlineCheckInHomePageState extends State<EROnlineCheckInHomePage> with SingleTickerProviderStateMixin {
 | 
				
			||||||
 | 
					  late ProjectViewModel projectViewModel;
 | 
				
			||||||
 | 
					  bool _supportsNFC = false;
 | 
				
			||||||
 | 
					  bool isPatientArrived = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void initState() {
 | 
				
			||||||
 | 
					    WidgetsBinding.instance.addPostFrameCallback((_) {
 | 
				
			||||||
 | 
					      // checkIfPatientHasArrived();
 | 
				
			||||||
 | 
					      checkPatientERClinicBalanceAmount();
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    super.initState();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    projectViewModel = Provider.of(context);
 | 
				
			||||||
 | 
					    FlutterNfcKit.nfcAvailability.then((value) {
 | 
				
			||||||
 | 
					      _supportsNFC = (value == NFCAvailability.available);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					    return AppScaffold(
 | 
				
			||||||
 | 
					      isShowAppBar: true,
 | 
				
			||||||
 | 
					      appBarTitle: TranslationBase.of(context).emergency + " ${TranslationBase.of(context).checkinOptions}",
 | 
				
			||||||
 | 
					      isShowDecPage: false,
 | 
				
			||||||
 | 
					      showNewAppBar: true,
 | 
				
			||||||
 | 
					      showNewAppBarTitle: true,
 | 
				
			||||||
 | 
					      backgroundColor: Color(0xffF8F8F8),
 | 
				
			||||||
 | 
					      body: SingleChildScrollView(
 | 
				
			||||||
 | 
					        child: Padding(
 | 
				
			||||||
 | 
					          padding: EdgeInsets.all(16.0),
 | 
				
			||||||
 | 
					          child: Column(
 | 
				
			||||||
 | 
					            crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					            children: [
 | 
				
			||||||
 | 
					              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.1),
 | 
				
			||||||
 | 
					                      spreadRadius: 5,
 | 
				
			||||||
 | 
					                      blurRadius: 7,
 | 
				
			||||||
 | 
					                      offset: Offset(0, 3), // changes position of shadow
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ],
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					                child: Padding(
 | 
				
			||||||
 | 
					                  padding: const EdgeInsets.all(12.0),
 | 
				
			||||||
 | 
					                  child: Column(
 | 
				
			||||||
 | 
					                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					                    children: [
 | 
				
			||||||
 | 
					                      Icon(
 | 
				
			||||||
 | 
					                        Icons.check_circle,
 | 
				
			||||||
 | 
					                        size: 50,
 | 
				
			||||||
 | 
					                        color: CustomColors.green,
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      mHeight(6),
 | 
				
			||||||
 | 
					                      Text(
 | 
				
			||||||
 | 
					                        "What is Online Check-In?",
 | 
				
			||||||
 | 
					                        maxLines: 1,
 | 
				
			||||||
 | 
					                        style: TextStyle(
 | 
				
			||||||
 | 
					                            fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Text(
 | 
				
			||||||
 | 
					                        "online check-in lets patients fill out forms, share insurance details, and book appointments online, making their visit smoother and quicker.",
 | 
				
			||||||
 | 
					                        style: TextStyle(fontSize: 14, color: CustomColors.textDarkColor, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      mHeight(16),
 | 
				
			||||||
 | 
					                      Text(
 | 
				
			||||||
 | 
					                        "How can i use Online Check-In?",
 | 
				
			||||||
 | 
					                        maxLines: 1,
 | 
				
			||||||
 | 
					                        style: TextStyle(
 | 
				
			||||||
 | 
					                            fontSize: 20, fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), fontWeight: FontWeight.w700, color: Color(0xff2B353E), letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Text(
 | 
				
			||||||
 | 
					                        "online check-in lets patients fill out forms, share insurance details, and book appointments online, making their visit smoother and quicker.",
 | 
				
			||||||
 | 
					                        style: TextStyle(fontSize: 14, color: CustomColors.textDarkColor, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					              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: const EdgeInsets.all(12.0),
 | 
				
			||||||
 | 
					                  child: Column(
 | 
				
			||||||
 | 
					                    crossAxisAlignment: CrossAxisAlignment.start,
 | 
				
			||||||
 | 
					                    children: [
 | 
				
			||||||
 | 
					                      Row(
 | 
				
			||||||
 | 
					                        children: [
 | 
				
			||||||
 | 
					                          Container(
 | 
				
			||||||
 | 
					                            width: 35,
 | 
				
			||||||
 | 
					                            height: 35,
 | 
				
			||||||
 | 
					                            decoration: BoxDecoration(
 | 
				
			||||||
 | 
					                              color: CustomColors.green,
 | 
				
			||||||
 | 
					                              borderRadius: BorderRadius.circular(50),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                            child: Center(
 | 
				
			||||||
 | 
					                              child: Text(
 | 
				
			||||||
 | 
					                                "1",
 | 
				
			||||||
 | 
					                                style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700, color: CustomColors.white, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                          mWidth(12),
 | 
				
			||||||
 | 
					                          SvgPicture.asset(
 | 
				
			||||||
 | 
					                            "assets/images/new/tap.svg",
 | 
				
			||||||
 | 
					                            width: 35,
 | 
				
			||||||
 | 
					                            height: 35,
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ],
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Padding(
 | 
				
			||||||
 | 
					                        padding: const EdgeInsets.only(left: 50, right: 50),
 | 
				
			||||||
 | 
					                        child: Text(
 | 
				
			||||||
 | 
					                          "Tap On",
 | 
				
			||||||
 | 
					                          maxLines: 1,
 | 
				
			||||||
 | 
					                          style: TextStyle(
 | 
				
			||||||
 | 
					                              fontSize: 20,
 | 
				
			||||||
 | 
					                              fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'),
 | 
				
			||||||
 | 
					                              fontWeight: FontWeight.w700,
 | 
				
			||||||
 | 
					                              color: Color(0xff2B353E),
 | 
				
			||||||
 | 
					                              letterSpacing: -1.44,
 | 
				
			||||||
 | 
					                              height: 35 / 24),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Padding(
 | 
				
			||||||
 | 
					                        padding: const EdgeInsets.only(left: 50, right: 50),
 | 
				
			||||||
 | 
					                        child: Text(
 | 
				
			||||||
 | 
					                          "Tap on the check-in button within the app",
 | 
				
			||||||
 | 
					                          style: TextStyle(fontSize: 14, color: CustomColors.textDarkColor, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      mHeight(16),
 | 
				
			||||||
 | 
					                      Row(
 | 
				
			||||||
 | 
					                        children: [
 | 
				
			||||||
 | 
					                          Container(
 | 
				
			||||||
 | 
					                            width: 35,
 | 
				
			||||||
 | 
					                            height: 35,
 | 
				
			||||||
 | 
					                            decoration: BoxDecoration(
 | 
				
			||||||
 | 
					                              color: CustomColors.green,
 | 
				
			||||||
 | 
					                              borderRadius: BorderRadius.circular(50),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                            child: Center(
 | 
				
			||||||
 | 
					                              child: Text(
 | 
				
			||||||
 | 
					                                "2",
 | 
				
			||||||
 | 
					                                style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700, color: CustomColors.white, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                          mWidth(12),
 | 
				
			||||||
 | 
					                          SvgPicture.asset(
 | 
				
			||||||
 | 
					                            "assets/images/new/NFC_Hold.svg",
 | 
				
			||||||
 | 
					                            width: 35,
 | 
				
			||||||
 | 
					                            height: 35,
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ],
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Padding(
 | 
				
			||||||
 | 
					                        padding: const EdgeInsets.only(left: 50, right: 50),
 | 
				
			||||||
 | 
					                        child: Text(
 | 
				
			||||||
 | 
					                          "Hold your phone",
 | 
				
			||||||
 | 
					                          maxLines: 1,
 | 
				
			||||||
 | 
					                          style: TextStyle(
 | 
				
			||||||
 | 
					                              fontSize: 20,
 | 
				
			||||||
 | 
					                              fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'),
 | 
				
			||||||
 | 
					                              fontWeight: FontWeight.w700,
 | 
				
			||||||
 | 
					                              color: Color(0xff2B353E),
 | 
				
			||||||
 | 
					                              letterSpacing: -1.44,
 | 
				
			||||||
 | 
					                              height: 35 / 24),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Padding(
 | 
				
			||||||
 | 
					                        padding: const EdgeInsets.only(left: 50, right: 50),
 | 
				
			||||||
 | 
					                        child: Text(
 | 
				
			||||||
 | 
					                          "Hold the phone 1 to 2 cm from the NFC sign displayed on the board",
 | 
				
			||||||
 | 
					                          style: TextStyle(fontSize: 14, color: CustomColors.textDarkColor, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      mHeight(16),
 | 
				
			||||||
 | 
					                      Row(
 | 
				
			||||||
 | 
					                        children: [
 | 
				
			||||||
 | 
					                          Container(
 | 
				
			||||||
 | 
					                            width: 35,
 | 
				
			||||||
 | 
					                            height: 35,
 | 
				
			||||||
 | 
					                            decoration: BoxDecoration(
 | 
				
			||||||
 | 
					                              color: CustomColors.green,
 | 
				
			||||||
 | 
					                              borderRadius: BorderRadius.circular(50),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                            child: Center(
 | 
				
			||||||
 | 
					                              child: Text(
 | 
				
			||||||
 | 
					                                "3",
 | 
				
			||||||
 | 
					                                style: TextStyle(fontSize: 22, fontWeight: FontWeight.w700, color: CustomColors.white, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                              ),
 | 
				
			||||||
 | 
					                            ),
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                          mWidth(12),
 | 
				
			||||||
 | 
					                          SvgPicture.asset(
 | 
				
			||||||
 | 
					                            "assets/images/new/hourglass.svg",
 | 
				
			||||||
 | 
					                            width: 35,
 | 
				
			||||||
 | 
					                            height: 35,
 | 
				
			||||||
 | 
					                          ),
 | 
				
			||||||
 | 
					                        ],
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Padding(
 | 
				
			||||||
 | 
					                        padding: const EdgeInsets.only(left: 50, right: 50),
 | 
				
			||||||
 | 
					                        child: Text(
 | 
				
			||||||
 | 
					                          "Wait your turn",
 | 
				
			||||||
 | 
					                          maxLines: 1,
 | 
				
			||||||
 | 
					                          style: TextStyle(
 | 
				
			||||||
 | 
					                              fontSize: 20,
 | 
				
			||||||
 | 
					                              fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'),
 | 
				
			||||||
 | 
					                              fontWeight: FontWeight.w700,
 | 
				
			||||||
 | 
					                              color: Color(0xff2B353E),
 | 
				
			||||||
 | 
					                              letterSpacing: -1.44,
 | 
				
			||||||
 | 
					                              height: 35 / 24),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                      Padding(
 | 
				
			||||||
 | 
					                        padding: const EdgeInsets.only(left: 50, right: 50),
 | 
				
			||||||
 | 
					                        child: Text(
 | 
				
			||||||
 | 
					                          "Please wait in the waiting area until called by the nurse",
 | 
				
			||||||
 | 
					                          style: TextStyle(fontSize: 14, color: CustomColors.textDarkColor, letterSpacing: -1.44, height: 35 / 24),
 | 
				
			||||||
 | 
					                        ),
 | 
				
			||||||
 | 
					                      ),
 | 
				
			||||||
 | 
					                    ],
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      bottomSheet: Container(
 | 
				
			||||||
 | 
					        height: 80,
 | 
				
			||||||
 | 
					        color: CustomColors.white,
 | 
				
			||||||
 | 
					        padding: EdgeInsets.fromLTRB(12.0, 12.0, 12.0, 25.0),
 | 
				
			||||||
 | 
					        child: isPatientArrived
 | 
				
			||||||
 | 
					            ? Container(
 | 
				
			||||||
 | 
					                child: DefaultButton(
 | 
				
			||||||
 | 
					                  TranslationBase.of(context).arrived,
 | 
				
			||||||
 | 
					                  () {
 | 
				
			||||||
 | 
					                    if (_supportsNFC) {
 | 
				
			||||||
 | 
					                      Future.delayed(const Duration(milliseconds: 500), () {
 | 
				
			||||||
 | 
					                        showNfcReader(context, onNcfScan: (String nfcId) {
 | 
				
			||||||
 | 
					                          Future.delayed(const Duration(milliseconds: 100), () {
 | 
				
			||||||
 | 
					                            print(nfcId);
 | 
				
			||||||
 | 
					                            getProjectIDFromNFC(nfcId, true);
 | 
				
			||||||
 | 
					                            // Navigator.push(context, FadePage(page: EROnlineCheckInPaymentDetails()));
 | 
				
			||||||
 | 
					                          });
 | 
				
			||||||
 | 
					                        }, onCancel: () {
 | 
				
			||||||
 | 
					                          Navigator.of(context).pop();
 | 
				
			||||||
 | 
					                        });
 | 
				
			||||||
 | 
					                      });
 | 
				
			||||||
 | 
					                    } else {
 | 
				
			||||||
 | 
					                      //NFCNotSupported
 | 
				
			||||||
 | 
					                      AppToast.showErrorToast(message: TranslationBase.of(context).NFCNotSupported);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                  },
 | 
				
			||||||
 | 
					                  color: CustomColors.accentColor,
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					              )
 | 
				
			||||||
 | 
					            : Row(
 | 
				
			||||||
 | 
					                children: [
 | 
				
			||||||
 | 
					                  Expanded(
 | 
				
			||||||
 | 
					                    flex: 1,
 | 
				
			||||||
 | 
					                    child: DefaultButton(
 | 
				
			||||||
 | 
					                      TranslationBase.of(context).checkinOptions,
 | 
				
			||||||
 | 
					                      () {
 | 
				
			||||||
 | 
					                        if (_supportsNFC) {
 | 
				
			||||||
 | 
					                          Future.delayed(const Duration(milliseconds: 500), () {
 | 
				
			||||||
 | 
					                            showNfcReader(context, onNcfScan: (String nfcId) {
 | 
				
			||||||
 | 
					                              Future.delayed(const Duration(milliseconds: 100), () {
 | 
				
			||||||
 | 
					                                print(nfcId);
 | 
				
			||||||
 | 
					                                getProjectIDFromNFC(nfcId, false);
 | 
				
			||||||
 | 
					                              });
 | 
				
			||||||
 | 
					                            }, onCancel: () {
 | 
				
			||||||
 | 
					                              Navigator.of(context).pop();
 | 
				
			||||||
 | 
					                            });
 | 
				
			||||||
 | 
					                          });
 | 
				
			||||||
 | 
					                        } else {
 | 
				
			||||||
 | 
					                          //NFCNotSupported
 | 
				
			||||||
 | 
					                          AppToast.showErrorToast(message: TranslationBase.of(context).NFCNotSupported);
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                      },
 | 
				
			||||||
 | 
					                      color: CustomColors.green,
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                  mWidth(12),
 | 
				
			||||||
 | 
					                  Expanded(
 | 
				
			||||||
 | 
					                    flex: 1,
 | 
				
			||||||
 | 
					                    child: DefaultButton(
 | 
				
			||||||
 | 
					                      TranslationBase.of(context).bookAppo,
 | 
				
			||||||
 | 
					                      () {
 | 
				
			||||||
 | 
					                        Navigator.push(context, FadePage(page: EROnlineCheckInBookAppointment()));
 | 
				
			||||||
 | 
					                      },
 | 
				
			||||||
 | 
					                      color: CustomColors.accentColor,
 | 
				
			||||||
 | 
					                    ),
 | 
				
			||||||
 | 
					                  ),
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void getProjectIDFromNFC(String nfcID, bool isArrived) {
 | 
				
			||||||
 | 
					    GifLoaderDialogUtils.showMyDialog(context);
 | 
				
			||||||
 | 
					    ClinicListService ancillaryOrdersService = new ClinicListService();
 | 
				
			||||||
 | 
					    ancillaryOrdersService.getProjectIDFromNFC(nfcID).then((response) {
 | 
				
			||||||
 | 
					      if (response["GetProjectByNFC"].length != 0) {
 | 
				
			||||||
 | 
					        print(response["GetProjectByNFC"]);
 | 
				
			||||||
 | 
					        int projectID = response['GetProjectByNFC'][0]["ProjectID"];
 | 
				
			||||||
 | 
					        String projectName = response['GetProjectByNFC'][0]["ProjectName"];
 | 
				
			||||||
 | 
					        if (isArrived) {
 | 
				
			||||||
 | 
					          autoGenerateInvoiceER(projectID);
 | 
				
			||||||
 | 
					        } else {
 | 
				
			||||||
 | 
					          GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					          Navigator.push(
 | 
				
			||||||
 | 
					            context,
 | 
				
			||||||
 | 
					            FadePage(
 | 
				
			||||||
 | 
					              page: EROnlineCheckInPaymentDetails(
 | 
				
			||||||
 | 
					                projectID: projectID,
 | 
				
			||||||
 | 
					                isERBookAppointment: false,
 | 
				
			||||||
 | 
					                projectName: projectName,
 | 
				
			||||||
 | 
					              ),
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          );
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        AppToast.showErrorToast(message: "Invalid NFC Card Scanned.");
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      AppToast.showErrorToast(message: err.toString());
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void checkIfPatientHasArrived() {
 | 
				
			||||||
 | 
					    GifLoaderDialogUtils.showMyDialog(context);
 | 
				
			||||||
 | 
					    ClinicListService ancillaryOrdersService = new ClinicListService();
 | 
				
			||||||
 | 
					    ancillaryOrdersService.checkIfPatientHasArrived(15, 10).then((response) {
 | 
				
			||||||
 | 
					      print(response["IsPatientArrivedResponse"]);
 | 
				
			||||||
 | 
					      isPatientArrived = response['IsPatientArrivedResponse']["IsPatientArrived"];
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      // erOnlineCheckInPaymentDetailsResponse = EROnlineCheckInPaymentDetailsResponse.fromJson(response["ResponsePatientShare"]);
 | 
				
			||||||
 | 
					      setState(() {});
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      AppToast.showErrorToast(message: err.toString());
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  autoGenerateInvoiceER(int projectID) {
 | 
				
			||||||
 | 
					    DoctorsListService service = new DoctorsListService();
 | 
				
			||||||
 | 
					    service.autoGenerateInvoiceERClinicWithNoPaymentDetails(projectID, true).then((res) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      if(res["MessageStatus"] == 1) {
 | 
				
			||||||
 | 
					        _showMyDialog("Your online Check-In in the ER clinic has been done successfully.", context);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        AppToast.showErrorToast(message: res["InvoiceResponse"]["Message"]);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }).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);
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					          ],
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void checkPatientERClinicBalanceAmount() {
 | 
				
			||||||
 | 
					    GifLoaderDialogUtils.showMyDialog(context);
 | 
				
			||||||
 | 
					    ClinicListService ancillaryOrdersService = new ClinicListService();
 | 
				
			||||||
 | 
					    ancillaryOrdersService.checkPatientERClinicBalanceAmount(10).then((response) {
 | 
				
			||||||
 | 
					      print(response["BalanceAmount"]);
 | 
				
			||||||
 | 
					      isPatientArrived = response['BalanceAmount'] > 0;
 | 
				
			||||||
 | 
					      // isPatientArrived = false;
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      // erOnlineCheckInPaymentDetailsResponse = EROnlineCheckInPaymentDetailsResponse.fromJson(response["ResponsePatientShare"]);
 | 
				
			||||||
 | 
					      setState(() {});
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      AppToast.showErrorToast(message: err.toString());
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,612 @@
 | 
				
			|||||||
 | 
					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 = "";
 | 
				
			||||||
 | 
					  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;
 | 
				
			||||||
 | 
					          AppoitmentAllHistoryResultList appo = new AppoitmentAllHistoryResultList();
 | 
				
			||||||
 | 
					          appo.projectID = widget.projectID;
 | 
				
			||||||
 | 
					          if (selectedPaymentMethod == "ApplePay") {
 | 
				
			||||||
 | 
					            if (projectViewModel.havePrivilege(103)) {
 | 
				
			||||||
 | 
					              startApplePay();
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					              openPayment(selectedPaymentMethod!, projectViewModel.user, erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax!, appo);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            openPayment(selectedPaymentMethod!, projectViewModel.user, erOnlineCheckInPaymentDetailsResponse!.patientShareWithTax!, appo);
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        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);
 | 
				
			||||||
 | 
					        // createAdvancePayment(res, appo);
 | 
				
			||||||
 | 
					        ER_createAdvancePayment(res, appo);
 | 
				
			||||||
 | 
					      } else {
 | 
				
			||||||
 | 
					        GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					        AppToast.showErrorToast(message: res['Response_Message'], localContext: context);
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      AppToast.showErrorToast(message: err, localContext: context);
 | 
				
			||||||
 | 
					      print(err);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ER_createAdvancePayment(payment_res, AppoitmentAllHistoryResultList appo) {
 | 
				
			||||||
 | 
					    DoctorsListService service = new DoctorsListService();
 | 
				
			||||||
 | 
					    // GifLoaderDialogUtils.showMyDialog(context);
 | 
				
			||||||
 | 
					    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) {
 | 
				
			||||||
 | 
					      addAdvancedNumberRequest(
 | 
				
			||||||
 | 
					          Utils.isVidaPlusProject(projectViewModel, widget.projectID) ? res['ER_AdvancePaymentResponse']['AdvanceNumber_VP'].toString() : res['ER_AdvancePaymentResponse']['AdvanceNumber'].toString(),
 | 
				
			||||||
 | 
					          paymentReference,
 | 
				
			||||||
 | 
					          0,
 | 
				
			||||||
 | 
					          appo,
 | 
				
			||||||
 | 
					          payment_res);
 | 
				
			||||||
 | 
					      // GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      // ER_InsertEROnlinePaymentDetails(payment_res, appo);
 | 
				
			||||||
 | 
					    }).catchError((err) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      AppToast.showErrorToast(message: err.toString());
 | 
				
			||||||
 | 
					      print(err);
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  createAdvancePayment(paymentRes, AppoitmentAllHistoryResultList appo) {
 | 
				
			||||||
 | 
					    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) {
 | 
				
			||||||
 | 
					    DoctorsListService service = new DoctorsListService();
 | 
				
			||||||
 | 
					    service.addAdvancedNumberRequest(advanceNumber, paymentReference, appointmentID, context).then((res) {
 | 
				
			||||||
 | 
					      if (widget.isERBookAppointment) {
 | 
				
			||||||
 | 
					        GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					        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) {
 | 
				
			||||||
 | 
					    DoctorsListService service = new DoctorsListService();
 | 
				
			||||||
 | 
					    service.autoGenerateInvoiceERClinic(widget.projectID, 4, res['Fort_id'], res['Amount'], res['PaymentMethod'], res['CardNumber'], res['Merchant_Reference'], res['RRN'], true).then((res) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      _showMyDialog("Your online Check-In in the ER clinic has been done successfully.", 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) {
 | 
				
			||||||
 | 
					      GifLoaderDialogUtils.hideDialog(context);
 | 
				
			||||||
 | 
					      AppToast.showErrorToast(message: err.toString());
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  _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,
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
					Loading…
					
					
				
		Reference in New Issue