From f9bfc131a8d344ee7b9aebb11c0d496ca07ad5a7 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Mon, 22 Sep 2025 09:55:38 +0300 Subject: [PATCH 01/19] family screen & widgets --- lib/core/api_consts.dart | 3 ++ lib/core/utils/request_utils.dart | 11 ++++ .../authentication/authentication_repo.dart | 21 +++++--- .../authentication_view_model.dart | 39 +++++++++++--- lib/presentation/my_family/my_Family.dart | 54 ++++++------------- lib/services/dialog_service.dart | 5 +- lib/widgets/common_bottom_sheet.dart | 3 ++ 7 files changed, 81 insertions(+), 55 deletions(-) diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 5886dfa..9b013a5 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -808,6 +808,9 @@ class ApiConsts { static final String registerUser = 'Services/Authentication.svc/REST/PatientRegistration'; static final String addFamilyFile = 'Services/Patients.svc/REST/ShareFamilyFileService'; + static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile'; + static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile'; + // static values for Api static final double appVersionID = 18.7; diff --git a/lib/core/utils/request_utils.dart b/lib/core/utils/request_utils.dart index 8b993f1..87f88f5 100644 --- a/lib/core/utils/request_utils.dart +++ b/lib/core/utils/request_utils.dart @@ -125,6 +125,8 @@ class RequestUtils { required bool isForRegister, required bool isFileNo, dynamic payload, + required bool isExcludedUser, + int? responseID, }) { AppState _appState = getIt.get(); var request = SendActivationRequest(); @@ -156,6 +158,15 @@ class RequestUtils { request.isRegister = false; } request.deviceTypeID = request.searchType; + + if (isExcludedUser) { + //INFO: Only for Excluded User Family Member Addition + request.isPatientExcluded = isExcludedUser; + request.responseID = responseID; + request.status = 2; + request.familyRegionID = zipCode == CountryEnum.saudiArabia.countryCode ? 1 : 2; + } + return request; } diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 2eaeb80..89a9404 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -17,12 +17,9 @@ abstract class AuthenticationRepo { Future>> checkPatientAuthentication({required dynamic checkPatientAuthenticationReq}); - Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false}); + Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isExcludedUser = false}); - Future>> checkActivationCodeRepo( - {required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq - required String? activationCode, - required bool isRegister}); + Future>> checkActivationCodeRepo({required dynamic newRequest, required String? activationCode, required bool isRegister, bool isExcludedUser = false}); Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}); @@ -134,6 +131,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, + bool isExcludedUser = false, }) async { int isOutKsa = (sendActivationCodeReq.zipCode == '966' || sendActivationCodeReq.zipCode == '+966') ? 0 : 1; sendActivationCodeReq.patientOutSA = isOutKsa; @@ -144,7 +142,11 @@ class AuthenticationRepoImp implements AuthenticationRepo { Failure? failure; await apiClient.post( - isRegister ? ApiConsts.sendActivationCodeRegister : ApiConsts.sendActivationCode, + isExcludedUser + ? ApiConsts.sendFamilyFileActivation + : isRegister + ? ApiConsts.sendActivationCodeRegister + : ApiConsts.sendActivationCode, body: sendActivationCodeReq.toJson(), onFailure: (error, statusCode, {messageStatus, failureType}) { failure = failureType; @@ -176,6 +178,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq required String? activationCode, required bool isRegister, + bool isExcludedUser = false, }) async { if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; @@ -189,7 +192,11 @@ class AuthenticationRepoImp implements AuthenticationRepo { newRequest.isRegister = false; } - final endpoint = isRegister ? ApiConsts.checkActivationCodeRegister : ApiConsts.checkActivationCode; + final endpoint = isExcludedUser + ? ApiConsts.checkActivationCodeForFamily + : isRegister + ? ApiConsts.checkActivationCodeRegister + : ApiConsts.checkActivationCode; try { GenericApiModel? apiResponse; diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 11374b7..4590a59 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -344,7 +344,14 @@ class AuthenticationViewModel extends ChangeNotifier { } Future sendActivationCode( - {required OTPTypeEnum otpTypeEnum, required String nationalIdOrFileNumber, required String phoneNumber, required bool isForRegister, dynamic payload, bool isComingFromResendOTP = false}) async { + {required OTPTypeEnum otpTypeEnum, + required String nationalIdOrFileNumber, + required String phoneNumber, + required bool isForRegister, + dynamic payload, + bool isComingFromResendOTP = false, + bool isExcludedUser = false, + int? responseID}) async { var request = RequestUtils.getCommonRequestSendActivationCode( otpTypeEnum: otpTypeEnum, mobileNumber: phoneNumber, @@ -360,6 +367,8 @@ class AuthenticationViewModel extends ChangeNotifier { ? false : true, payload: payload, + isExcludedUser: isExcludedUser, + responseID: responseID, ); // TODO: GET APP SMS SIGNATURE HERE @@ -369,7 +378,8 @@ class AuthenticationViewModel extends ChangeNotifier { _appState.setUserRegistrationPayload = RegistrationDataModelPayload.fromJson(payload); } - final resultEither = await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er'); + final resultEither = + await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er', isExcludedUser: isExcludedUser); resultEither.fold( (failure) async => await _errorHandlerService.handleError(failure: failure), @@ -384,7 +394,9 @@ class AuthenticationViewModel extends ChangeNotifier { } else { if (apiResponse.data != null && apiResponse.data['isSMSSent'] == true) { LoaderBottomSheet.hideLoader(); - if (!isComingFromResendOTP) navigateToOTPScreen(otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber, isComingFromRegister: checkIsUserComingForRegister(request: payload), payload: payload); + if (!isComingFromResendOTP) + navigateToOTPScreen( + otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber, isComingFromRegister: checkIsUserComingForRegister(request: payload), payload: payload, isExcludedUser: isExcludedUser); } else { // TODO: Handle isSMSSent false // navigateToOTPScreen(otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber); @@ -403,7 +415,13 @@ class AuthenticationViewModel extends ChangeNotifier { } Future checkActivationCode( - {required String? activationCode, required OTPTypeEnum otpTypeEnum, required Function(String? message) onWrongActivationCode, Function()? onResendActivation}) async { + {required String? activationCode, + required OTPTypeEnum otpTypeEnum, + required Function(String? message) onWrongActivationCode, + Function()? onResendActivation, + bool isExcludedUser = false, + dynamic requestID, + dynamic responseID}) async { bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1); final request = RequestUtils.getCommonRequestWelcome( @@ -429,6 +447,13 @@ class AuthenticationViewModel extends ChangeNotifier { //TODO: Error Here IN Zip Code. loginType: loginTypeEnum.toInt) .toJson(); + + if (isExcludedUser) { + request['PatientShareRequestID'] = requestID; + request['ResponseID'] = responseID; + request['Status'] = 3; + } + LoaderBottomSheet.showLoader(); if (isForRegister) { if (_appState.getUserRegistrationPayload.patientOutSa == 0) request['DOB'] = _appState.getUserRegistrationPayload.dob; @@ -464,7 +489,8 @@ class AuthenticationViewModel extends ChangeNotifier { } }); } else { - final resultEither = await _authenticationRepo.checkActivationCodeRepo(newRequest: CheckActivationCodeRegisterReq.fromJson(request), activationCode: activationCode, isRegister: false); + final resultEither = await _authenticationRepo.checkActivationCodeRepo( + newRequest: CheckActivationCodeRegisterReq.fromJson(request), activationCode: activationCode, isRegister: false, isExcludedUser: isExcludedUser); resultEither.fold( (failure) async => await _errorHandlerService.handleError( @@ -573,12 +599,13 @@ class AuthenticationViewModel extends ChangeNotifier { _navigationService.pushAndReplace(AppRoutes.landingScreen); } - Future navigateToOTPScreen({required OTPTypeEnum otpTypeEnum, required String phoneNumber, required bool isComingFromRegister, dynamic payload}) async { + Future navigateToOTPScreen({required OTPTypeEnum otpTypeEnum, required String phoneNumber, required bool isComingFromRegister, dynamic payload, bool isExcludedUser = false}) async { _navigationService.pushToOtpScreen( phoneNumber: phoneNumber, checkActivationCode: (int activationCode) async { await checkActivationCode( activationCode: activationCode.toString(), + isExcludedUser: isExcludedUser, otpTypeEnum: otpTypeEnum, onWrongActivationCode: (String? value) { onWrongActivationCode(message: value); diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index 6e4ef91..888f364 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -89,9 +89,11 @@ class _FamilyMedicalScreenState extends State { AuthenticationViewModel authVm = getIt.get(); return showCommonBottomSheetWithoutHeight(context, title: "Add Family Member", + useSafeArea: true, child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.min, children: [ "Please fill the below field to add a new family member to your profile".toText16(color: AppColors.textColor, weight: FontWeight.w500), SizedBox(height: 20.h), @@ -104,10 +106,7 @@ class _FamilyMedicalScreenState extends State { countryList: CountryEnum.values, onCountryChange: authVm.onCountryChange, ).paddingOnly(top: 8.h, bottom: 16.h), - Divider( - height: 1.h, - color: AppColors.spacerLineColor, - ), + Divider(height: 1.h, color: AppColors.spacerLineColor), TextInputWidget( labelText: LocaleKeys.nationalIdNumber.tr(), hintText: "xxxxxxxxx", @@ -123,13 +122,10 @@ class _FamilyMedicalScreenState extends State { padding: EdgeInsets.symmetric(vertical: 8.h), leadingIcon: AppAssets.student_card, ).paddingOnly(top: 8.h, bottom: 8.h), - Divider( - height: 1.h, - color: AppColors.spacerLineColor, - ), + Divider(height: 1.h, color: AppColors.spacerLineColor), TextInputWidget( labelText: LocaleKeys.phoneNumber.tr(), - hintText: "574345434", + hintText: "", controller: authVm.phoneNumberController, isEnable: true, prefix: authVm.selectedCountrySignup.countryCode, @@ -140,35 +136,7 @@ class _FamilyMedicalScreenState extends State { keyboardType: TextInputType.number, padding: EdgeInsets.symmetric(vertical: 8.h), leadingIcon: AppAssets.smart_phone, - ).paddingOnly(top: 8.h, bottom: 4), - - //TextInputWidget( - // labelText: widget.isForEmail ? LocaleKeys.email.tr() : LocaleKeys.phoneNumber.tr(), - // hintText: widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx", - // controller: widget.textController!, - // focusNode: _textFieldFocusNode, - // autoFocus: widget.autoFocus, - // padding: EdgeInsets.all(8.h), - // keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number, - // onChange: (value) { - // if (widget.onChange != null) { - // widget.onChange!(value); - // } - // }, - // onCountryChange: (value) { - // if (widget.onCountryChange != null) { - // widget.onCountryChange!(value); - // } - // }, - // isEnable: true, - // isReadOnly: widget.isFromSavedLogin, - // prefix: widget.isForEmail ? null : widget.countryCode, - // isBorderAllowed: false, - // isAllowLeadingIcon: true, - // fontSize: 13.h, - // isCountryDropDown: widget.isEnableCountryDropdown, - // leadingIcon: widget.isForEmail ? AppAssets.email : AppAssets.smart_phone, - // ) + ).paddingOnly(top: 8.h, bottom: 4.h), ], ), ), @@ -184,7 +152,15 @@ class _FamilyMedicalScreenState extends State { onOkPress: () { Navigator.of(context).pop(); }, - )) {} + )) { + authVm.sendActivationCode( + otpTypeEnum: OTPTypeEnum.sms, + nationalIdOrFileNumber: authVm.nationalIdController.text, + phoneNumber: authVm.phoneNumberController.text, + isForRegister: false, + isExcludedUser: true, + responseID: 123); + } }, icon: AppAssets.add_icon, height: 56.h, diff --git a/lib/services/dialog_service.dart b/lib/services/dialog_service.dart index 29aee3d..474a0ec 100644 --- a/lib/services/dialog_service.dart +++ b/lib/services/dialog_service.dart @@ -73,9 +73,8 @@ class DialogServiceImp implements DialogService { Future showCommonBottomSheetWithoutH({String? label, required String message, required Function() onOkPressed, Function()? onCancelPressed}) async { final context = navigationService.navigatorKey.currentContext; if (context == null) return; - showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: exceptionBottomSheetWidget(context: context, message: message, onOkPressed: onOkPressed, onCancelPressed: onCancelPressed), - callBackFunc: () { - }); + showCommonBottomSheetWithoutHeight(context, + title: label ?? "", child: exceptionBottomSheetWidget(context: context, message: message, onOkPressed: onOkPressed, onCancelPressed: onCancelPressed), callBackFunc: () {}); } @override diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart index c50ffad..286386d 100644 --- a/lib/widgets/common_bottom_sheet.dart +++ b/lib/widgets/common_bottom_sheet.dart @@ -113,6 +113,8 @@ void showCommonBottomSheetWithoutHeight( bool isFullScreen = true, bool isDismissible = true, Widget? titleWidget, + bool useSafeArea = false, + }) { showModalBottomSheet( sheetAnimationStyle: AnimationStyle( @@ -124,6 +126,7 @@ void showCommonBottomSheetWithoutHeight( showDragHandle: false, isDismissible: isDismissible, backgroundColor: AppColors.bottomSheetBgColor, + useSafeArea: useSafeArea, builder: (BuildContext context) { return SafeArea( top: false, From 1125437a569d99d7d9e3fef26ffce5ea6ff9193d Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Mon, 22 Sep 2025 14:48:39 +0300 Subject: [PATCH 02/19] family screen & widgets --- lib/core/api_consts.dart | 2 +- lib/core/utils/request_utils.dart | 12 +- .../authentication_view_model.dart | 2 + .../medical_file/medical_file_view_model.dart | 16 +- lib/presentation/my_family/my_Family.dart | 17 +- lib/widgets/common_bottom_sheet.dart | 175 +++++++++++++----- 6 files changed, 163 insertions(+), 61 deletions(-) diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 9b013a5..3640cdd 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -727,7 +727,7 @@ const FAMILY_FILES= 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatu class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT diff --git a/lib/core/utils/request_utils.dart b/lib/core/utils/request_utils.dart index 87f88f5..4f66819 100644 --- a/lib/core/utils/request_utils.dart +++ b/lib/core/utils/request_utils.dart @@ -258,8 +258,16 @@ class RequestUtils { }; } - static dynamic getAddFamilyRequest({required String nationalIDorFile, required String mobileNo, required String countryCode, required int loginType}) { + static dynamic getAddFamilyRequest({required String nationalIDorFile, required String mobileNo, required String countryCode}) { var request = {}; + int? loginType = 0; // Default to National ID + + if (countryCode == CountryEnum.saudiArabia.countryCode || countryCode == '+966') { + loginType = (nationalIDorFile.length == 10) ? 1 : 2; + } else if (countryCode == CountryEnum.unitedArabEmirates.countryCode || countryCode == '+971') { + loginType = (nationalIDorFile.length == 15) ? 1 : 2; + } + if (loginType == 1) { request["sharedPatientID"] = 0; request["sharedPatientIdentificationID"] = nationalIDorFile; @@ -272,5 +280,7 @@ class RequestUtils { request["zipCode"] = countryCode; request["isRegister"] = false; request["patientStatus"] = 2; + request["isDentalAllowedBackend"] = false; + return request; } } diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 4590a59..f6c2ec5 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/core/common_models/privilege/HMCProjectListM import 'package:hmg_patient_app_new/core/common_models/privilege/PrivilegeModel.dart'; import 'package:hmg_patient_app_new/core/common_models/privilege/ProjectDetailListModel.dart'; import 'package:hmg_patient_app_new/core/common_models/privilege/VidaPlusProjectListModel.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/loading_utils.dart'; import 'package:hmg_patient_app_new/core/utils/request_utils.dart'; @@ -26,6 +27,7 @@ import 'package:hmg_patient_app_new/features/authentication/models/request_model import 'package:hmg_patient_app_new/features/authentication/models/resp_models/check_activation_code_resp_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/check_user_staus_nhic_response_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/select_device_by_imei.dart'; +import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/authentication/login.dart'; import 'package:hmg_patient_app_new/presentation/authentication/saved_login_screen.dart'; diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 2e528de..a724a10 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -1,7 +1,10 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/request_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; @@ -293,9 +296,14 @@ class MedicalFileViewModel extends ChangeNotifier { ); } - Future addFamilyFile() async { - final resultEither = await medicalFileRepo.addFamilyFile(request: {}); - resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async {}); - } + Future addFamilyFile({required OTPTypeEnum otpTypeEnum, required bool isExcludedUser}) async { + AuthenticationViewModel authVM = getIt.get(); + final request = + await RequestUtils.getAddFamilyRequest(nationalIDorFile: authVM.nationalIdController.text, mobileNo: authVM.phoneNumberController.text, countryCode: authVM.selectedCountrySignup.countryCode); + final resultEither = await medicalFileRepo.addFamilyFile(request: request); + resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async { + print(apiResponse); + }); + } } diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index 888f364..4eefe7a 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -10,6 +10,7 @@ import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; @@ -38,6 +39,13 @@ class FamilyMedicalScreen extends StatefulWidget { class _FamilyMedicalScreenState extends State { List tabs = [CustomTabBarModel("", LocaleKeys.medicalFile.tr()), CustomTabBarModel("", LocaleKeys.request.tr())]; + MedicalFileViewModel? medicalVM; + + @override + void initState() { + super.initState(); + medicalVM = getIt.get(); + } @override Widget build(BuildContext context) { @@ -153,13 +161,8 @@ class _FamilyMedicalScreenState extends State { Navigator.of(context).pop(); }, )) { - authVm.sendActivationCode( - otpTypeEnum: OTPTypeEnum.sms, - nationalIdOrFileNumber: authVm.nationalIdController.text, - phoneNumber: authVm.phoneNumberController.text, - isForRegister: false, - isExcludedUser: true, - responseID: 123); + // authVm.addFamilyMember(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); + medicalVM?.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); } }, icon: AppAssets.add_icon, diff --git a/lib/widgets/common_bottom_sheet.dart b/lib/widgets/common_bottom_sheet.dart index 286386d..c6db474 100644 --- a/lib/widgets/common_bottom_sheet.dart +++ b/lib/widgets/common_bottom_sheet.dart @@ -105,57 +105,136 @@ class ButtonSheetContent extends StatelessWidget { } void showCommonBottomSheetWithoutHeight( - BuildContext context, { - required Widget child, - required VoidCallback callBackFunc, - String title = "", - bool isCloseButtonVisible = true, - bool isFullScreen = true, - bool isDismissible = true, - Widget? titleWidget, - bool useSafeArea = false, - -}) { + BuildContext context, { + required Widget child, + required VoidCallback callBackFunc, + String title = "", + bool isCloseButtonVisible = true, + bool isFullScreen = true, + bool isDismissible = true, + Widget? titleWidget, + bool useSafeArea = false, + }) { showModalBottomSheet( - sheetAnimationStyle: AnimationStyle( - duration: Duration(milliseconds: 500), // Custom animation duration - reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration - ), - context: context, - isScrollControlled: true, - showDragHandle: false, - isDismissible: isDismissible, - backgroundColor: AppColors.bottomSheetBgColor, - useSafeArea: useSafeArea, - builder: (BuildContext context) { - return SafeArea( - top: false, - left: false, - right: false, - child: isCloseButtonVisible - ? Container( - padding: EdgeInsets.only(left: 24, top: 24, right: 24, bottom: 12), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.bottomSheetBgColor, borderRadius: 24.h), - child: Column( - mainAxisSize: MainAxisSize.min, - spacing: 16.h, + sheetAnimationStyle: AnimationStyle( + duration: Duration(milliseconds: 500), + reverseDuration: Duration(milliseconds: 300), + ), + context: context, + isScrollControlled: true, + showDragHandle: false, + isDismissible: isDismissible, + backgroundColor: AppColors.bottomSheetBgColor, + useSafeArea: useSafeArea, + builder: (BuildContext context) { + return SafeArea( + top: false, + left: false, + right: false, + child: Padding( + padding: EdgeInsets.only( + bottom: MediaQuery.of(context).viewInsets.bottom, + ), + child: SingleChildScrollView( + physics: ClampingScrollPhysics(), + child: isCloseButtonVisible + ? Container( + padding: EdgeInsets.only( + left: 24, + top: 24, + right: 24, + bottom: 12, + ), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.bottomSheetBgColor, + borderRadius: 24.h, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - titleWidget ?? Expanded(child: title.toText20(weight: FontWeight.w600)), - Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, iconColor: Color(0xff2B353E)).onPress(() { - Navigator.of(context).pop(); - }), - ], - ), - child, + titleWidget ?? + Expanded( + child: title.toText20(weight: FontWeight.w600), + ), + Utils.buildSvgWithAssets( + icon: AppAssets.close_bottom_sheet_icon, + iconColor: Color(0xff2B353E), + ).onPress(() { + Navigator.of(context).pop(); + }), ], - )) - : child, - ); - }).then((value) { + ), + SizedBox(height: 16.h), + child, + ], + ), + ) + : child, + ), + ), + ); + }, + ).then((value) { callBackFunc(); }); } + +// void showCommonBottomSheetWithoutHeight( +// BuildContext context, { +// required Widget child, +// required VoidCallback callBackFunc, +// String title = "", +// bool isCloseButtonVisible = true, +// bool isFullScreen = true, +// bool isDismissible = true, +// Widget? titleWidget, +// bool useSafeArea = false, +// +// }) { +// showModalBottomSheet( +// sheetAnimationStyle: AnimationStyle( +// duration: Duration(milliseconds: 500), // Custom animation duration +// reverseDuration: Duration(milliseconds: 300), // Custom reverse animation duration +// ), +// context: context, +// isScrollControlled: true, +// showDragHandle: false, +// isDismissible: isDismissible, +// backgroundColor: AppColors.bottomSheetBgColor, +// useSafeArea: useSafeArea, +// builder: (BuildContext context) { +// return SafeArea( +// top: false, +// left: false, +// right: false, +// child: isCloseButtonVisible +// ? Container( +// padding: EdgeInsets.only(left: 24, top: 24, right: 24, bottom: 12), +// decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.bottomSheetBgColor, borderRadius: 24.h), +// child: Column( +// mainAxisSize: MainAxisSize.min, +// spacing: 16.h, +// children: [ +// Row( +// mainAxisAlignment: MainAxisAlignment.spaceBetween, +// crossAxisAlignment: CrossAxisAlignment.center, +// children: [ +// titleWidget ?? Expanded(child: title.toText20(weight: FontWeight.w600)), +// Utils.buildSvgWithAssets(icon: AppAssets.close_bottom_sheet_icon, iconColor: Color(0xff2B353E)).onPress(() { +// Navigator.of(context).pop(); +// }), +// ], +// ), +// child, +// ], +// )) +// : child, +// ); +// }).then((value) { +// callBackFunc(); +// }); +// } From 192d617350216d240506b98284e62751ebf473e2 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Wed, 24 Sep 2025 09:33:33 +0300 Subject: [PATCH 03/19] family screen & widgets --- lib/core/api_consts.dart | 2 +- lib/core/utils/request_utils.dart | 28 ++-- .../authentication/authentication_repo.dart | 6 +- .../authentication_view_model.dart | 40 +++--- .../common/models/family_file_request.dart | 57 ++++++++ .../medical_file/medical_file_repo.dart | 23 ++-- .../medical_file/medical_file_view_model.dart | 32 ++++- .../medical_file/medical_file_page.dart | 7 + lib/presentation/my_family/my_Family.dart | 4 +- lib/widgets/chip/app_custom_chip_widget.dart | 129 +++++++++--------- 10 files changed, 211 insertions(+), 117 deletions(-) create mode 100644 lib/features/common/models/family_file_request.dart diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 3640cdd..9b013a5 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -727,7 +727,7 @@ const FAMILY_FILES= 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatu class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT diff --git a/lib/core/utils/request_utils.dart b/lib/core/utils/request_utils.dart index 4f66819..cd813ed 100644 --- a/lib/core/utils/request_utils.dart +++ b/lib/core/utils/request_utils.dart @@ -9,6 +9,7 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/models/request_models/registration_payload_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/request_models/send_activation_request_model.dart'; import 'package:hmg_patient_app_new/features/common/models/commong_authanticated_req_model.dart'; +import 'package:hmg_patient_app_new/features/common/models/family_file_request.dart'; class RequestUtils { static dynamic getPatientAuthenticationRequest({ @@ -126,6 +127,7 @@ class RequestUtils { required bool isFileNo, dynamic payload, required bool isExcludedUser, + required bool isFormFamilyFile, int? responseID, }) { AppState _appState = getIt.get(); @@ -159,7 +161,7 @@ class RequestUtils { } request.deviceTypeID = request.searchType; - if (isExcludedUser) { + if (isFormFamilyFile) { //INFO: Only for Excluded User Family Member Addition request.isPatientExcluded = isExcludedUser; request.responseID = responseID; @@ -258,8 +260,8 @@ class RequestUtils { }; } - static dynamic getAddFamilyRequest({required String nationalIDorFile, required String mobileNo, required String countryCode}) { - var request = {}; + static Future getAddFamilyRequest({required String nationalIDorFile, required String mobileNo, required String countryCode}) async { + FamilyFileRequest request = FamilyFileRequest(); int? loginType = 0; // Default to National ID if (countryCode == CountryEnum.saudiArabia.countryCode || countryCode == '+966') { @@ -269,18 +271,18 @@ class RequestUtils { } if (loginType == 1) { - request["sharedPatientID"] = 0; - request["sharedPatientIdentificationID"] = nationalIDorFile; + request.sharedPatientId = 0; + request.sharedPatientIdentificationId = nationalIDorFile; } else if (loginType == 2) { - request["sharedPatientID"] = int.parse(nationalIDorFile); - request["sharedPatientIdentificationID"] = ''; + request.sharedPatientId = int.parse(nationalIDorFile); + request.sharedPatientIdentificationId = ''; } - request["searchType"] = loginType; - request["sharedPatientMobileNumber"] = mobileNo; - request["zipCode"] = countryCode; - request["isRegister"] = false; - request["patientStatus"] = 2; - request["isDentalAllowedBackend"] = false; + request.searchType = loginType; + request.sharedPatientMobileNumber = mobileNo; + request.zipCode = countryCode; + request.isRegister = false; + request.patientStatus = 2; + request.isDentalAllowedBackend = false; return request; } } diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 89a9404..8038c43 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -17,7 +17,7 @@ abstract class AuthenticationRepo { Future>> checkPatientAuthentication({required dynamic checkPatientAuthenticationReq}); - Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isExcludedUser = false}); + Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isFormFamilyFile = false}); Future>> checkActivationCodeRepo({required dynamic newRequest, required String? activationCode, required bool isRegister, bool isExcludedUser = false}); @@ -131,7 +131,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, - bool isExcludedUser = false, + bool isFormFamilyFile = false, }) async { int isOutKsa = (sendActivationCodeReq.zipCode == '966' || sendActivationCodeReq.zipCode == '+966') ? 0 : 1; sendActivationCodeReq.patientOutSA = isOutKsa; @@ -142,7 +142,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { Failure? failure; await apiClient.post( - isExcludedUser + isFormFamilyFile ? ApiConsts.sendFamilyFileActivation : isRegister ? ApiConsts.sendActivationCodeRegister diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 7c1252c..558f02d 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -354,25 +354,26 @@ class AuthenticationViewModel extends ChangeNotifier { dynamic payload, bool isComingFromResendOTP = false, bool isExcludedUser = false, + bool isFormFamilyFile = false, int? responseID}) async { var request = RequestUtils.getCommonRequestSendActivationCode( - otpTypeEnum: otpTypeEnum, - mobileNumber: phoneNumber, - selectedLoginType: otpTypeEnum.toInt(), - zipCode: selectedCountrySignup.countryCode, - nationalId: int.parse(nationalIdOrFileNumber), - isFileNo: isForRegister ? isPatientHasFile(request: payload) : false, - patientId: 0, - isForRegister: isForRegister, - patientOutSA: isForRegister - ? isPatientOutsideSA(request: payload) - : selectedCountrySignup.countryCode == CountryEnum.saudiArabia - ? false - : true, - payload: payload, - isExcludedUser: isExcludedUser, - responseID: responseID, - ); + otpTypeEnum: otpTypeEnum, + mobileNumber: phoneNumber, + selectedLoginType: otpTypeEnum.toInt(), + zipCode: selectedCountrySignup.countryCode, + nationalId: int.parse(nationalIdOrFileNumber), + isFileNo: isForRegister ? isPatientHasFile(request: payload) : false, + patientId: 0, + isForRegister: isForRegister, + patientOutSA: isForRegister + ? isPatientOutsideSA(request: payload) + : selectedCountrySignup.countryCode == CountryEnum.saudiArabia + ? false + : true, + payload: payload, + isExcludedUser: isExcludedUser, + isFormFamilyFile: isFormFamilyFile, + responseID: responseID); // TODO: GET APP SMS SIGNATURE HERE request.sMSSignature = await getSignature(); @@ -382,7 +383,7 @@ class AuthenticationViewModel extends ChangeNotifier { } final resultEither = - await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er', isExcludedUser: isExcludedUser); + await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er', isFormFamilyFile: isFormFamilyFile); resultEither.fold( (failure) async => await _errorHandlerService.handleError(failure: failure), @@ -397,9 +398,10 @@ class AuthenticationViewModel extends ChangeNotifier { } else { if (apiResponse.data != null && apiResponse.data['isSMSSent'] == true) { LoaderBottomSheet.hideLoader(); - if (!isComingFromResendOTP) + if (!isComingFromResendOTP) { navigateToOTPScreen( otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber, isComingFromRegister: checkIsUserComingForRegister(request: payload), payload: payload, isExcludedUser: isExcludedUser); + } } else { // TODO: Handle isSMSSent false // navigateToOTPScreen(otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber); diff --git a/lib/features/common/models/family_file_request.dart b/lib/features/common/models/family_file_request.dart new file mode 100644 index 0000000..047b9af --- /dev/null +++ b/lib/features/common/models/family_file_request.dart @@ -0,0 +1,57 @@ +import 'dart:convert'; + +class FamilyFileRequest { + int? sharedPatientId; + String? sharedPatientIdentificationId; + int? searchType; + String? sharedPatientMobileNumber; + String? zipCode; + bool? isRegister; + int? patientStatus; + bool? isDentalAllowedBackend; + bool? isPatientExcluded; + int? responseID; + + FamilyFileRequest({ + this.sharedPatientId, + this.sharedPatientIdentificationId, + this.searchType, + this.sharedPatientMobileNumber, + this.zipCode, + this.isRegister, + this.patientStatus, + this.isDentalAllowedBackend, + this.isPatientExcluded, + this.responseID, + }); + + factory FamilyFileRequest.fromRawJson(String str) => FamilyFileRequest.fromJson(json.decode(str)); + + String toRawJson() => json.encode(toJson()); + + factory FamilyFileRequest.fromJson(Map json) => FamilyFileRequest( + sharedPatientId: json["sharedPatientID"], + sharedPatientIdentificationId: json["sharedPatientIdentificationID"], + searchType: json["searchType"], + sharedPatientMobileNumber: json["sharedPatientMobileNumber"], + zipCode: json["zipCode"], + isRegister: json["isRegister"], + patientStatus: json["patientStatus"], + isDentalAllowedBackend: json["isDentalAllowedBackend"], + isPatientExcluded: json["IsPatientExcluded"], + responseID: json["ReponseID"], + ); + + Map toJson() => { + "SharedPatientID": sharedPatientId, + "SharedPatientIdentificationID": sharedPatientIdentificationId, + "SearchType": searchType, + "SharedPatientMobileNumber": sharedPatientMobileNumber, + "zipCode": zipCode, + "isRegister": isRegister, + "PatientStatus": patientStatus, + "isDentalAllowedBackend": isDentalAllowedBackend, + "IsPatientExcluded": isPatientExcluded, + "ReponseID": responseID, + }; +} diff --git a/lib/features/medical_file/medical_file_repo.dart b/lib/features/medical_file/medical_file_repo.dart index 6b83f33..3042aba 100644 --- a/lib/features/medical_file/medical_file_repo.dart +++ b/lib/features/medical_file/medical_file_repo.dart @@ -26,7 +26,7 @@ abstract class MedicalFileRepo { Future>>> getPatientFamilyFiles(); - Future>>> addFamilyFile({required dynamic request}); + Future>> addFamilyFile({required dynamic request}); } class MedicalFileRepoImp implements MedicalFileRepo { @@ -313,9 +313,9 @@ class MedicalFileRepoImp implements MedicalFileRepo { } @override - Future>>> addFamilyFile({dynamic request}) async { + Future>> addFamilyFile({dynamic request}) async { try { - GenericApiModel>? apiResponse; + GenericApiModel? apiResponse; Failure? failure; await apiClient.post( ApiConsts.addFamilyFile, @@ -325,17 +325,12 @@ class MedicalFileRepoImp implements MedicalFileRepo { }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { - print(response); - // final list = response['GetAllSharedRecordsByStatusList']; - // - // final familyLists = list.map((item) => FamilyFileResponseModelLists.fromJson(item as Map)).toList().cast(); - // - // apiResponse = GenericApiModel>( - // messageStatus: messageStatus, - // statusCode: statusCode, - // errorMessage: null, - // data: familyLists, - // ); + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: response["ShareFamilyFileObj"] ?? null, + ); } catch (e) { failure = DataParsingFailure(e.toString()); } diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index a724a10..1c3d353 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; @@ -6,6 +8,7 @@ import 'package:hmg_patient_app_new/core/utils/request_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/authenticated_user_resp_model.dart'; +import 'package:hmg_patient_app_new/features/common/models/family_file_request.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/patient_medical_response_model.dart'; @@ -13,6 +16,7 @@ import 'package:hmg_patient_app_new/features/medical_file/models/patient_sicklea import 'package:hmg_patient_app_new/features/medical_file/models/patient_vaccine_response_model.dart'; import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; class MedicalFileViewModel extends ChangeNotifier { int selectedTabIndex = 0; @@ -298,12 +302,34 @@ class MedicalFileViewModel extends ChangeNotifier { Future addFamilyFile({required OTPTypeEnum otpTypeEnum, required bool isExcludedUser}) async { AuthenticationViewModel authVM = getIt.get(); - final request = + NavigationService navigationService = getIt.get(); + FamilyFileRequest request = await RequestUtils.getAddFamilyRequest(nationalIDorFile: authVM.nationalIdController.text, mobileNo: authVM.phoneNumberController.text, countryCode: authVM.selectedCountrySignup.countryCode); - final resultEither = await medicalFileRepo.addFamilyFile(request: request); + final resultEither = await medicalFileRepo.addFamilyFile(request: request.toJson()); resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async { - print(apiResponse); + if (apiResponse != null && apiResponse.data != null) { + request.isPatientExcluded = apiResponse.data["IsPatientExcluded"]; + request.responseID = apiResponse.data["ReponseID"]; + _dialogService.showExceptionBottomSheet( + message: apiResponse.data['Message'], + onOkPressed: () { + print("=================== On Press Ok =================="); + authVM.sendActivationCode( + otpTypeEnum: otpTypeEnum, + nationalIdOrFileNumber: request.sharedPatientIdentificationId!, + phoneNumber: request.sharedPatientMobileNumber!, + isForRegister: false, + isExcludedUser: apiResponse.data['IsPatientExcluded'], + responseID: apiResponse.data["ReponseID"], + isFormFamilyFile: true); + + // insertFamilyData(payload: apiResponse.data![0]['ShareFamilyFileObj'], isExcludedPatient: apiResponse.data![0]['ShareFamilyFileObj']['IsPatientExcluded']); + }, + onCancelPressed: () { + navigationService.pop(); + }); + } }); } } diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index 9776e5b..3786382 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -143,6 +143,13 @@ class _MedicalFilePageState extends State { AppCustomChipWidget( icon: AppAssets.file_icon, labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}", + onChipTap: () { + navigationService.pushPage( + page: FamilyMedicalScreen( + profiles: medicalFileViewModel.patientFamilyFiles, + onSelect: (FamilyFileResponseModelLists p1) {}, + )); + }, ), AppCustomChipWidget( icon: AppAssets.checkmark_icon, diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index 4eefe7a..7ebd069 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -28,10 +28,10 @@ class FamilyMedicalScreen extends StatefulWidget { final Function(FamilyFileResponseModelLists) onSelect; const FamilyMedicalScreen({ - Key? key, + super.key, required this.profiles, required this.onSelect, - }) : super(key: key); + }); @override State createState() => _FamilyMedicalScreenState(); diff --git a/lib/widgets/chip/app_custom_chip_widget.dart b/lib/widgets/chip/app_custom_chip_widget.dart index b29f6e6..099062e 100644 --- a/lib/widgets/chip/app_custom_chip_widget.dart +++ b/lib/widgets/chip/app_custom_chip_widget.dart @@ -24,6 +24,7 @@ class AppCustomChipWidget extends StatelessWidget { this.deleteIconColor = AppColors.textColor, this.deleteIconHasColor = false, this.padding = EdgeInsets.zero, + this.onChipTap }); final String? labelText; @@ -40,74 +41,78 @@ class AppCustomChipWidget extends StatelessWidget { final bool deleteIconHasColor; final OutlinedBorder? shape; final EdgeInsets? padding; + final void Function()? onChipTap; @override Widget build(BuildContext context) { - return ChipTheme( - data: ChipThemeData( - padding: EdgeInsets.all(0.0), - shape: SmoothRectangleBorder( - side: BorderSide( - width: 0.0, - color: Colors.transparent, // Crucially, set color to transparent - style: BorderStyle.none, + return GestureDetector( + onTap: onChipTap, + child: ChipTheme( + data: ChipThemeData( + padding: EdgeInsets.all(0.0), + shape: SmoothRectangleBorder( + side: BorderSide( + width: 0.0, + color: Colors.transparent, // Crucially, set color to transparent + style: BorderStyle.none, + ), + borderRadius: BorderRadius.circular(10.0), // Apply a border radius of 16.0 ), - borderRadius: BorderRadius.circular(10.0), // Apply a border radius of 16.0 ), + child: icon.isNotEmpty + ? Chip( + avatar: icon.isNotEmpty + ? Utils.buildSvgWithAssets( + icon: icon, + width: iconSize.h, + height: iconSize.h, + iconColor: iconHasColor ? iconColor : null) + : SizedBox.shrink(), + label: richText ?? + labelText!.toText10( + weight: FontWeight.w500, + letterSpacing: -0.64, + color: textColor), + // padding: EdgeInsets.all(0.0), + padding: padding, + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + labelPadding: EdgeInsets.only( + left: -4.h, + right: deleteIcon?.isNotEmpty == true ? 2.h : 8.h), + backgroundColor: backgroundColor, + shape: shape, + deleteIcon: deleteIcon?.isNotEmpty == true + ? Utils.buildSvgWithAssets( + icon: deleteIcon!, + width: deleteIconSize!.width!.h, + height: deleteIconSize!.height.h, + iconColor: deleteIconHasColor ? deleteIconColor : null) + : null, + onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, + ) + : Chip( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + label: richText ?? + labelText!.toText10( + weight: FontWeight.w500, + letterSpacing: -0.64, + color: textColor), + padding: EdgeInsets.all(0.0), + backgroundColor: backgroundColor, + shape: shape, + labelPadding: EdgeInsets.only( + left: 8.h, + right: deleteIcon?.isNotEmpty == true ? -2.h : 8.h), + deleteIcon: deleteIcon?.isNotEmpty == true + ? Utils.buildSvgWithAssets( + icon: deleteIcon!, + width: deleteIconSize!.width.h, + height: deleteIconSize!.height.h, + iconColor: deleteIconHasColor ? deleteIconColor : null) + : null, + onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, + ), ), - child: icon.isNotEmpty - ? Chip( - avatar: icon.isNotEmpty - ? Utils.buildSvgWithAssets( - icon: icon, - width: iconSize.h, - height: iconSize.h, - iconColor: iconHasColor ? iconColor : null) - : SizedBox.shrink(), - label: richText ?? - labelText!.toText10( - weight: FontWeight.w500, - letterSpacing: -0.64, - color: textColor), - // padding: EdgeInsets.all(0.0), - padding: padding, - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - labelPadding: EdgeInsets.only( - left: -4.h, - right: deleteIcon?.isNotEmpty == true ? 2.h : 8.h), - backgroundColor: backgroundColor, - shape: shape, - deleteIcon: deleteIcon?.isNotEmpty == true - ? Utils.buildSvgWithAssets( - icon: deleteIcon!, - width: deleteIconSize!.width!.h, - height: deleteIconSize!.height.h, - iconColor: deleteIconHasColor ? deleteIconColor : null) - : null, - onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, - ) - : Chip( - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - label: richText ?? - labelText!.toText10( - weight: FontWeight.w500, - letterSpacing: -0.64, - color: textColor), - padding: EdgeInsets.all(0.0), - backgroundColor: backgroundColor, - shape: shape, - labelPadding: EdgeInsets.only( - left: 8.h, - right: deleteIcon?.isNotEmpty == true ? -2.h : 8.h), - deleteIcon: deleteIcon?.isNotEmpty == true - ? Utils.buildSvgWithAssets( - icon: deleteIcon!, - width: deleteIconSize!.width.h, - height: deleteIconSize!.height.h, - iconColor: deleteIconHasColor ? deleteIconColor : null) - : null, - onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, - ), ); } } From 47ce5022d3f54eae135a280953d43e466a221ce8 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Wed, 24 Sep 2025 14:43:10 +0300 Subject: [PATCH 04/19] family screen & widgets --- .../authentication/authentication_repo.dart | 24 +++++- .../authentication_view_model.dart | 74 +++++++++++++------ .../widgets/otp_verification_screen.dart | 10 +-- .../medical_file/medical_file_view_model.dart | 5 +- lib/services/navigation_service.dart | 4 +- 5 files changed, 82 insertions(+), 35 deletions(-) diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 8038c43..a02ef70 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:dartz/dartz.dart'; import 'package:hmg_patient_app_new/core/api/api_client.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/common_models/privilege/PrivilegeModel.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; @@ -19,7 +20,8 @@ abstract class AuthenticationRepo { Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isFormFamilyFile = false}); - Future>> checkActivationCodeRepo({required dynamic newRequest, required String? activationCode, required bool isRegister, bool isExcludedUser = false}); + Future>> checkActivationCodeRepo( + {required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID}); Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}); @@ -178,7 +180,9 @@ class AuthenticationRepoImp implements AuthenticationRepo { required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq required String? activationCode, required bool isRegister, - bool isExcludedUser = false, + bool isFormFamilyFile = false, + int? patientShareRequestID, + int? responseID, }) async { if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; @@ -191,8 +195,16 @@ class AuthenticationRepoImp implements AuthenticationRepo { newRequest.forRegisteration = newRequest.isRegister ?? false; newRequest.isRegister = false; } + Map familyRequest = {}; + if (isFormFamilyFile) { + familyRequest = newRequest.toJson(); + familyRequest['PatientShareRequestID'] = patientShareRequestID; + familyRequest['ResponseID'] = responseID; + familyRequest['Status'] = 3; + familyRequest["PatientID"] = newRequest["PatientID"]; + } - final endpoint = isExcludedUser + final endpoint = isFormFamilyFile ? ApiConsts.checkActivationCodeForFamily : isRegister ? ApiConsts.checkActivationCodeRegister @@ -204,7 +216,11 @@ class AuthenticationRepoImp implements AuthenticationRepo { await apiClient.post( endpoint, - body: isRegister ? newRequest : newRequest.toJson(), + body: isFormFamilyFile + ? familyRequest + : isRegister + ? newRequest + : newRequest.toJson(), onFailure: (error, statusCode, {messageStatus, failureType}) { failure = failureType; }, diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 558f02d..a108835 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -382,12 +382,16 @@ class AuthenticationViewModel extends ChangeNotifier { _appState.setUserRegistrationPayload = RegistrationDataModelPayload.fromJson(payload); } - final resultEither = - await _authenticationRepo.sendActivationCodeRepo(sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er', isFormFamilyFile: isFormFamilyFile); + final resultEither = await _authenticationRepo.sendActivationCodeRepo( + sendActivationCodeReq: request, isRegister: checkIsUserComingForRegister(request: payload), languageID: 'er', isFormFamilyFile: isFormFamilyFile); resultEither.fold( (failure) async => await _errorHandlerService.handleError(failure: failure), (apiResponse) async { + int? patientShareRequestID = 0; + if (isFormFamilyFile) { + patientShareRequestID = apiResponse.data['PatientShareRequestID']; + } if (apiResponse.messageStatus == 2) { LoaderBottomSheet.hideLoader(); await _dialogService.showCommonBottomSheetWithoutH( @@ -400,7 +404,15 @@ class AuthenticationViewModel extends ChangeNotifier { LoaderBottomSheet.hideLoader(); if (!isComingFromResendOTP) { navigateToOTPScreen( - otpTypeEnum: otpTypeEnum, phoneNumber: phoneNumber, isComingFromRegister: checkIsUserComingForRegister(request: payload), payload: payload, isExcludedUser: isExcludedUser); + otpTypeEnum: otpTypeEnum, + phoneNumber: phoneNumber, + isComingFromRegister: checkIsUserComingForRegister(request: payload), + payload: payload, + isFormFamilyFile: isFormFamilyFile, + isExcludedUser: isExcludedUser, + responseID: responseID, + patientShareRequestID: patientShareRequestID, + ); } } else { // TODO: Handle isSMSSent false @@ -424,8 +436,8 @@ class AuthenticationViewModel extends ChangeNotifier { required OTPTypeEnum otpTypeEnum, required Function(String? message) onWrongActivationCode, Function()? onResendActivation, - bool isExcludedUser = false, - dynamic requestID, + bool isFormFamilyFile = false, + dynamic patientShareRequestID, dynamic responseID}) async { bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1); @@ -453,12 +465,6 @@ class AuthenticationViewModel extends ChangeNotifier { loginType: loginTypeEnum.toInt) .toJson(); - if (isExcludedUser) { - request['PatientShareRequestID'] = requestID; - request['ResponseID'] = responseID; - request['Status'] = 3; - } - LoaderBottomSheet.showLoader(); if (isForRegister) { if (_appState.getUserRegistrationPayload.patientOutSa == 0) request['DOB'] = _appState.getUserRegistrationPayload.dob; @@ -468,7 +474,11 @@ class AuthenticationViewModel extends ChangeNotifier { request["ForRegisteration"] = _appState.getUserRegistrationPayload.isRegister; request["isRegister"] = false; - final resultEither = await _authenticationRepo.checkActivationCodeRepo(newRequest: request, activationCode: activationCode.toString(), isRegister: true); + final resultEither = await _authenticationRepo.checkActivationCodeRepo( + newRequest: request, + activationCode: activationCode.toString(), + isRegister: true, + ); LoaderBottomSheet.hideLoader(); @@ -495,7 +505,12 @@ class AuthenticationViewModel extends ChangeNotifier { }); } else { final resultEither = await _authenticationRepo.checkActivationCodeRepo( - newRequest: CheckActivationCodeRegisterReq.fromJson(request), activationCode: activationCode, isRegister: false, isExcludedUser: isExcludedUser); + newRequest: CheckActivationCodeRegisterReq.fromJson(request), + activationCode: activationCode, + isRegister: false, + isFormFamilyFile: isFormFamilyFile, + patientShareRequestID: patientShareRequestID, + responseID: responseID); resultEither.fold( (failure) async => await _errorHandlerService.handleError( @@ -509,6 +524,8 @@ class AuthenticationViewModel extends ChangeNotifier { LoaderBottomSheet.hideLoader(); await _dialogService.showCommonBottomSheetWithoutH(message: failure.message, label: LocaleKeys.notice.tr(), onOkPressed: () {}); }), (apiResponse) async { + print("API Response Data: ${apiResponse.data}"); + final activation = CheckActivationCode.fromJson(apiResponse.data as Map); if (activation.errorCode == '699') { @@ -605,14 +622,25 @@ class AuthenticationViewModel extends ChangeNotifier { _navigationService.pushAndReplace(AppRoutes.landingScreen); } - Future navigateToOTPScreen({required OTPTypeEnum otpTypeEnum, required String phoneNumber, required bool isComingFromRegister, dynamic payload, bool isExcludedUser = false}) async { + Future navigateToOTPScreen( + {required OTPTypeEnum otpTypeEnum, + required String phoneNumber, + required bool isComingFromRegister, + dynamic payload, + bool isFormFamilyFile = false, + bool isExcludedUser = false, + int? responseID, + int? patientShareRequestID}) async { _navigationService.pushToOtpScreen( phoneNumber: phoneNumber, + isFormFamilyFile: isFormFamilyFile, checkActivationCode: (int activationCode) async { await checkActivationCode( activationCode: activationCode.toString(), - isExcludedUser: isExcludedUser, + isFormFamilyFile: isFormFamilyFile, otpTypeEnum: otpTypeEnum, + responseID: responseID, + patientShareRequestID: patientShareRequestID, onWrongActivationCode: (String? value) { onWrongActivationCode(message: value); }, @@ -620,12 +648,16 @@ class AuthenticationViewModel extends ChangeNotifier { }, onResendOTPPressed: (String phoneNumber) async { await sendActivationCode( - otpTypeEnum: otpTypeEnum, - phoneNumber: phoneNumberController.text, - nationalIdOrFileNumber: nationalIdController.text, - isForRegister: isComingFromRegister, - isComingFromResendOTP: true, - payload: payload); + otpTypeEnum: otpTypeEnum, + phoneNumber: phoneNumberController.text, + nationalIdOrFileNumber: nationalIdController.text, + isForRegister: isComingFromRegister, + isComingFromResendOTP: true, + payload: payload, + isFormFamilyFile: isFormFamilyFile, + isExcludedUser: isExcludedUser, + responseID: responseID, + ); }, ); } diff --git a/lib/features/authentication/widgets/otp_verification_screen.dart b/lib/features/authentication/widgets/otp_verification_screen.dart index e7f8d72..10e34cd 100644 --- a/lib/features/authentication/widgets/otp_verification_screen.dart +++ b/lib/features/authentication/widgets/otp_verification_screen.dart @@ -428,13 +428,9 @@ class OTPVerificationScreen extends StatefulWidget { final String phoneNumber; final Function(int code) checkActivationCode; final Function(String phoneNumber) onResendOTPPressed; + final bool isFormFamilyFile; - const OTPVerificationScreen({ - super.key, - required this.phoneNumber, - required this.checkActivationCode, - required this.onResendOTPPressed, - }); + const OTPVerificationScreen({super.key, required this.phoneNumber, required this.checkActivationCode, required this.onResendOTPPressed, required this.isFormFamilyFile}); @override State createState() => _OTPVerificationScreenState(); @@ -559,7 +555,7 @@ class _OTPVerificationScreenState extends State { LocaleKeys.weHaveSendOTP.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4), _getMaskedPhoneNumber().toText15(color: AppColors.inputLabelTextColor, isBold: true), LocaleKeys.via.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4), - authVM.loginTypeEnum.displayName.toText15(color: AppColors.inputLabelTextColor, isBold: true, letterSpacing: -0.4), + (widget.isFormFamilyFile ? LoginTypeEnum.sms.displayName : authVM.loginTypeEnum.displayName).toText15(color: AppColors.inputLabelTextColor, isBold: true, letterSpacing: -0.4), appState.getUserRegistrationPayload.isRegister != null && appState.getUserRegistrationPayload.isRegister == true ? LocaleKeys.forRegistrationVerification.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4) : LocaleKeys.forLoginVerification.tr().toText15(color: AppColors.inputLabelTextColor, letterSpacing: -0.4), diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 1c3d353..b3b1db1 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -17,6 +17,7 @@ import 'package:hmg_patient_app_new/features/medical_file/models/patient_vaccine import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; +import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; class MedicalFileViewModel extends ChangeNotifier { int selectedTabIndex = 0; @@ -301,6 +302,7 @@ class MedicalFileViewModel extends ChangeNotifier { } Future addFamilyFile({required OTPTypeEnum otpTypeEnum, required bool isExcludedUser}) async { + LoaderBottomSheet.showLoader(); AuthenticationViewModel authVM = getIt.get(); NavigationService navigationService = getIt.get(); FamilyFileRequest request = @@ -311,9 +313,11 @@ class MedicalFileViewModel extends ChangeNotifier { if (apiResponse != null && apiResponse.data != null) { request.isPatientExcluded = apiResponse.data["IsPatientExcluded"]; request.responseID = apiResponse.data["ReponseID"]; + LoaderBottomSheet.hideLoader(); _dialogService.showExceptionBottomSheet( message: apiResponse.data['Message'], onOkPressed: () { + LoaderBottomSheet.showLoader(); print("=================== On Press Ok =================="); authVM.sendActivationCode( otpTypeEnum: otpTypeEnum, @@ -324,7 +328,6 @@ class MedicalFileViewModel extends ChangeNotifier { responseID: apiResponse.data["ReponseID"], isFormFamilyFile: true); - // insertFamilyData(payload: apiResponse.data![0]['ShareFamilyFileObj'], isExcludedPatient: apiResponse.data![0]['ShareFamilyFileObj']['IsPatientExcluded']); }, onCancelPressed: () { navigationService.pop(); diff --git a/lib/services/navigation_service.dart b/lib/services/navigation_service.dart index 420c4cf..0c2a901 100644 --- a/lib/services/navigation_service.dart +++ b/lib/services/navigation_service.dart @@ -22,9 +22,9 @@ class NavigationService { navigatorKey.currentState?.pushReplacementNamed(routeName); } - Future pushToOtpScreen({required String phoneNumber, required Function(int code) checkActivationCode, required Function(String phoneNumber) onResendOTPPressed}) { + Future pushToOtpScreen({required String phoneNumber, required Function(int code) checkActivationCode, required Function(String phoneNumber) onResendOTPPressed, bool isFormFamilyFile = false}) { return navigatorKey.currentState!.push( - MaterialPageRoute(builder: (_) => OTPVerificationScreen(phoneNumber: phoneNumber, checkActivationCode: checkActivationCode, onResendOTPPressed: onResendOTPPressed)), + MaterialPageRoute(builder: (_) => OTPVerificationScreen(phoneNumber: phoneNumber, checkActivationCode: checkActivationCode, onResendOTPPressed: onResendOTPPressed, isFormFamilyFile : isFormFamilyFile)), ); } From 3acd549de7ba1c42a37332914a5448e6cb4a055d Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Wed, 24 Sep 2025 15:07:36 +0300 Subject: [PATCH 05/19] no message --- .../medical_file/medical_file_view_model.dart | 40 ++++--------------- lib/presentation/my_family/my_Family.dart | 5 ++- 2 files changed, 11 insertions(+), 34 deletions(-) diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 1c3d353..cb21b90 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -45,7 +45,7 @@ class MedicalFileViewModel extends ChangeNotifier { int selectedMedicalReportsTabIndex = 0; static final DialogService _dialogService = getIt.get(); AppState _appState = getIt(); - + AuthenticationViewModel authVM = getIt.get(); MedicalFileViewModel({required this.medicalFileRepo, required this.errorHandlerService}); initMedicalFileProvider() { @@ -267,41 +267,15 @@ class MedicalFileViewModel extends ChangeNotifier { ); } - Future switchFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async { - final result = await medicalFileRepo.getPatientFamilyFiles(); + Future switchFamilyFiles( {Function(dynamic)? onSuccess,int? responseID,int? patientID, String? phoneNumber, Function(String)? onError}) async { + authVM.phoneNumberController.text = phoneNumber!; + + await authVM.checkActivationCode(activationCode: '0000', otpTypeEnum: OTPTypeEnum.sms, onWrongActivationCode: (String? str) {}, responseID: responseID, requestID: patientID, isExcludedUser: true); - result.fold( - (failure) async => await errorHandlerService.handleError( - failure: failure, - onOkPressed: () { - onError!(failure.message); - }, - ), - (apiResponse) { - if (apiResponse.messageStatus == 2) { - _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); - } else if (apiResponse.messageStatus == 1) { - patientFamilyFiles = apiResponse.data!; - patientFamilyFiles.insert( - 0, - FamilyFileResponseModelLists( - patientId: _appState.getAuthenticatedUser()!.patientId, - patientName: '${_appState.getAuthenticatedUser()!.firstName!} ${_appState.getAuthenticatedUser()!.lastName!}', - isActive: true, - gender: _appState.getAuthenticatedUser()!.gender!, - responseId: _appState.getAuthenticatedUser()!.patientId), - ); - notifyListeners(); - if (onSuccess != null) { - onSuccess(apiResponse); - } - } - }, - ); - } + } Future addFamilyFile({required OTPTypeEnum otpTypeEnum, required bool isExcludedUser}) async { - AuthenticationViewModel authVM = getIt.get(); + NavigationService navigationService = getIt.get(); FamilyFileRequest request = await RequestUtils.getAddFamilyRequest(nationalIDorFile: authVM.nationalIdController.text, mobileNo: authVM.phoneNumberController.text, countryCode: authVM.selectedCountrySignup.countryCode); diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index 7ebd069..25fe55c 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -70,7 +70,10 @@ class _FamilyMedicalScreenState extends State { onTabChange: (int index) {}, ), SizedBox(height: 25.h), - FamilyCards(profiles: widget.profiles, onSelect: widget.onSelect, isShowDetails: true), + FamilyCards(profiles: widget.profiles, onSelect: (FamilyFileResponseModelLists profile){ + medicalVM?.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + + }, isShowDetails: true), SizedBox(height: 20.h), ], ), From 9e8011c34c58100f82657328d9502f8621a3c210 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Wed, 24 Sep 2025 15:26:15 +0300 Subject: [PATCH 06/19] family screen & widgets --- lib/extensions/string_extensions.dart | 5 ++- .../authentication/authentication_repo.dart | 23 +++++----- .../authentication_view_model.dart | 43 +++++++++++++------ lib/routes/app_routes.dart | 3 ++ 4 files changed, 51 insertions(+), 23 deletions(-) diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 5465ce3..4432737 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -1,4 +1,6 @@ import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:auto_size_text/auto_size_text.dart'; @@ -365,7 +367,8 @@ extension DynamicTextStyleExtension on BuildContext { TextBaseline? textBaseline, FontStyle? fontStyle, bool isLanguageSwitcher = false}) { - final family = FontUtils.getFontFamilyForLanguage(true); + AppState appState = getIt.get(); + final family = appState.getLanguageCode() == "ar" ? 'GESSTwo' : 'Poppins'; return TextStyle( fontFamily: family, fontSize: fontSize, diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index a02ef70..c2a49bf 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -6,6 +6,7 @@ import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/common_models/privilege/PrivilegeModel.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; import 'package:hmg_patient_app_new/features/authentication/models/request_models/check_activation_code_register_request_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/select_device_by_imei.dart'; @@ -21,7 +22,7 @@ abstract class AuthenticationRepo { Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isFormFamilyFile = false}); Future>> checkActivationCodeRepo( - {required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID}); + {required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID, String? familyFileTokenID}); Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}); @@ -176,14 +177,14 @@ class AuthenticationRepoImp implements AuthenticationRepo { } @override - Future>> checkActivationCodeRepo({ - required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq - required String? activationCode, - required bool isRegister, - bool isFormFamilyFile = false, - int? patientShareRequestID, - int? responseID, - }) async { + Future>> checkActivationCodeRepo( + {required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq + required String? activationCode, + required bool isRegister, + bool isFormFamilyFile = false, + int? patientShareRequestID, + int? responseID, + String? familyFileTokenID}) async { if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; newRequest["isSilentLogin"] = activationCode != null ? false : true; @@ -197,11 +198,13 @@ class AuthenticationRepoImp implements AuthenticationRepo { } Map familyRequest = {}; if (isFormFamilyFile) { + AppState appState = getIt.get(); familyRequest = newRequest.toJson(); familyRequest['PatientShareRequestID'] = patientShareRequestID; familyRequest['ResponseID'] = responseID; familyRequest['Status'] = 3; - familyRequest["PatientID"] = newRequest["PatientID"]; + familyRequest["PatientID"] = appState.getAuthenticatedUser()!.patientId ?? 0; + familyRequest["LogInTokenID"] = familyFileTokenID; } final endpoint = isFormFamilyFile diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index a108835..8db44ab 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -29,6 +29,7 @@ import 'package:hmg_patient_app_new/features/authentication/models/resp_models/c import 'package:hmg_patient_app_new/features/authentication/models/resp_models/check_user_staus_nhic_response_model.dart'; import 'package:hmg_patient_app_new/features/authentication/models/resp_models/select_device_by_imei.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart'; +import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/authentication/login.dart'; import 'package:hmg_patient_app_new/presentation/authentication/saved_login_screen.dart'; @@ -389,8 +390,10 @@ class AuthenticationViewModel extends ChangeNotifier { (failure) async => await _errorHandlerService.handleError(failure: failure), (apiResponse) async { int? patientShareRequestID = 0; + String? familyFileTokenID; if (isFormFamilyFile) { patientShareRequestID = apiResponse.data['PatientShareRequestID']; + familyFileTokenID = apiResponse.data['LogInTokenID']; } if (apiResponse.messageStatus == 2) { LoaderBottomSheet.hideLoader(); @@ -404,15 +407,15 @@ class AuthenticationViewModel extends ChangeNotifier { LoaderBottomSheet.hideLoader(); if (!isComingFromResendOTP) { navigateToOTPScreen( - otpTypeEnum: otpTypeEnum, - phoneNumber: phoneNumber, - isComingFromRegister: checkIsUserComingForRegister(request: payload), - payload: payload, - isFormFamilyFile: isFormFamilyFile, - isExcludedUser: isExcludedUser, - responseID: responseID, - patientShareRequestID: patientShareRequestID, - ); + otpTypeEnum: otpTypeEnum, + phoneNumber: phoneNumber, + isComingFromRegister: checkIsUserComingForRegister(request: payload), + payload: payload, + isFormFamilyFile: isFormFamilyFile, + isExcludedUser: isExcludedUser, + responseID: responseID, + patientShareRequestID: patientShareRequestID, + familyFileTokenID: familyFileTokenID); } } else { // TODO: Handle isSMSSent false @@ -438,7 +441,8 @@ class AuthenticationViewModel extends ChangeNotifier { Function()? onResendActivation, bool isFormFamilyFile = false, dynamic patientShareRequestID, - dynamic responseID}) async { + dynamic responseID, + String? familyFileTokenID}) async { bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1); final request = RequestUtils.getCommonRequestWelcome( @@ -510,7 +514,8 @@ class AuthenticationViewModel extends ChangeNotifier { isRegister: false, isFormFamilyFile: isFormFamilyFile, patientShareRequestID: patientShareRequestID, - responseID: responseID); + responseID: responseID, + familyFileTokenID: familyFileTokenID); resultEither.fold( (failure) async => await _errorHandlerService.handleError( @@ -543,6 +548,18 @@ class AuthenticationViewModel extends ChangeNotifier { // Navigator.popUntil(context, (route) => Utils.route(route, equalsTo: RegisterNew)); return; } else { + if (isFormFamilyFile) { + _dialogService.showCommonBottomSheetWithoutH( + message: "Family File Added Successfully", + onOkPressed: () { + LoaderBottomSheet.showLoader(); + MedicalFileViewModel medicalFileVM = GetIt.instance(); + medicalFileVM.getFamilyFiles(); + LoaderBottomSheet.hideLoader(); + _navigationService.popUntilNamed(AppRoutes.medicalFilePage); + }); + } + if (activation.list != null && activation.list!.isNotEmpty) { _appState.setAuthenticatedUser(activation.list!.first); _appState.setPrivilegeModelList(activation.list!.first.listPrivilege!); @@ -630,7 +647,8 @@ class AuthenticationViewModel extends ChangeNotifier { bool isFormFamilyFile = false, bool isExcludedUser = false, int? responseID, - int? patientShareRequestID}) async { + int? patientShareRequestID, + String? familyFileTokenID}) async { _navigationService.pushToOtpScreen( phoneNumber: phoneNumber, isFormFamilyFile: isFormFamilyFile, @@ -641,6 +659,7 @@ class AuthenticationViewModel extends ChangeNotifier { otpTypeEnum: otpTypeEnum, responseID: responseID, patientShareRequestID: patientShareRequestID, + familyFileTokenID: familyFileTokenID, onWrongActivationCode: (String? value) { onWrongActivationCode(message: value); }, diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart index 67bf208..5a93216 100644 --- a/lib/routes/app_routes.dart +++ b/lib/routes/app_routes.dart @@ -4,6 +4,7 @@ import 'package:hmg_patient_app_new/presentation/authentication/register.dart'; import 'package:hmg_patient_app_new/presentation/authentication/register_step2.dart'; import 'package:hmg_patient_app_new/presentation/home/landing_page.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; +import 'package:hmg_patient_app_new/presentation/medical_file/medical_file_page.dart'; import 'package:hmg_patient_app_new/splashPage.dart'; class AppRoutes { @@ -12,6 +13,7 @@ class AppRoutes { static const String register = '/register'; static const String registerStepTwo = '/registerStepTwo'; static const String landingScreen = '/landingScreen'; + static const String medicalFilePage = '/medicalFilePage'; static Map get routes => { initialRoute: (context) => SplashPage(), @@ -19,5 +21,6 @@ class AppRoutes { landingScreen: (context) => LandingNavigation(), register: (context) => RegisterNew(), registerStepTwo: (context) => RegisterNewStep2(), + medicalFilePage: (context) => MedicalFilePage(), }; } From e2188b5a6931b38961d1aa1aeff89ae76c588e1f Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Thu, 25 Sep 2025 15:24:15 +0300 Subject: [PATCH 07/19] switch family member with super user --- .../authentication/authentication_repo.dart | 16 +++++++++++++--- .../authentication_view_model.dart | 8 +++++--- .../medical_file/medical_file_view_model.dart | 4 +++- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 7fe9297..2ed43d8 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -28,7 +28,9 @@ abstract class AuthenticationRepo { int? patientShareRequestID, int? responseID, bool isSwitchUser = false, - int? patientID}); + int? patientID, + int? loginType + }); Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}); @@ -192,6 +194,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { int? responseID, bool isSwitchUser = false, int? patientID, + int? loginType }) async { if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; @@ -215,12 +218,19 @@ class AuthenticationRepoImp implements AuthenticationRepo { Map switchRequest = {}; if (isSwitchUser) { switchRequest = newRequest.toJson(); - switchRequest['SuperUser'] = patientID; + switchRequest['PatientID'] = responseID; switchRequest['IsSilentLogin'] = true; switchRequest['LogInTokenID'] = null; - switchRequest['DeviceToken'] = null; switchRequest['SearchType'] = 2; + if(loginType != 0) { + switchRequest['SuperUser'] = patientID; + switchRequest['DeviceToken'] = null; + }else{ + switchRequest['LoginType'] = 2; + } + + } final endpoint = isFormFamilyFile diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index d42c8cf..8cb5eed 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -247,7 +247,7 @@ class AuthenticationViewModel extends ChangeNotifier { await selectDeviceImei(onSuccess: (dynamic respData) async { try { if (respData != null) { - dynamic data = SelectDeviceByImeiRespModelElement.fromJson(respData.toJson()); + dynamic data = await SelectDeviceByImeiRespModelElement.fromJson(respData.toJson()); _appState.setSelectDeviceByImeiRespModelElement(data); LoaderBottomSheet.hideLoader(); @@ -440,7 +440,8 @@ class AuthenticationViewModel extends ChangeNotifier { dynamic patientShareRequestID, dynamic responseID, bool isSwitchUser =false, - int? patientID + int? patientID, + }) async { bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1); @@ -515,7 +516,8 @@ class AuthenticationViewModel extends ChangeNotifier { patientShareRequestID: patientShareRequestID, responseID: responseID, isSwitchUser: isSwitchUser, - patientID: patientID + patientID: patientID, + loginType: _appState.superUserID != null ? 0 : 2, ); resultEither.fold( diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 51836a6..aa77700 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -275,7 +275,9 @@ class MedicalFileViewModel extends ChangeNotifier { ? phoneNumber.replaceFirst("0", "") : phoneNumber; - await authVM.checkActivationCode(activationCode: '0000', otpTypeEnum: OTPTypeEnum.sms, onWrongActivationCode: (String? str) {}, responseID: responseID, isFormFamilyFile:false, isSwitchUser: true, patientID: patientID); + + + await authVM.checkActivationCode(activationCode: '0000', otpTypeEnum: OTPTypeEnum.sms, onWrongActivationCode: (String? str) {}, responseID: responseID, isFormFamilyFile:false, isSwitchUser: true, patientID: patientID, ); } From 02433e1bef3e67bd92c0978d0358034302370f88 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Sun, 28 Sep 2025 09:31:49 +0300 Subject: [PATCH 08/19] family screen & widgets --- lib/core/api_consts.dart | 1 + lib/core/app_state.dart | 10 ++ .../authentication/authentication_repo.dart | 36 ++++- .../authentication_view_model.dart | 135 +++++++++--------- .../medical_file/medical_file_repo.dart | 42 ++++++ .../medical_file/medical_file_view_model.dart | 25 +++- lib/presentation/my_family/my_Family.dart | 2 +- 7 files changed, 173 insertions(+), 78 deletions(-) diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 9b013a5..e11de15 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -810,6 +810,7 @@ class ApiConsts { static final String addFamilyFile = 'Services/Patients.svc/REST/ShareFamilyFileService'; static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile'; static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile'; + static final String getAllPendingRecordsByResponseId = 'Services/Authentication.svc/REST/GetAllPendingRecordsByResponseId'; // static values for Api diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart index c906374..3e0bbc1 100644 --- a/lib/core/app_state.dart +++ b/lib/core/app_state.dart @@ -97,6 +97,16 @@ class AppState { set setDeviceTypeID(v) => deviceTypeID = v; + + + String _familyFileTokenID = ""; + + String get getFamilyFileTokenID => _familyFileTokenID; + + set setFamilyFileTokenID(String value) { + _familyFileTokenID = value; + } + List vidaPlusProjectList = []; List privilegeModelList = []; List hMCProjectListModel = []; diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index c2a49bf..3ed05c6 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -22,7 +22,7 @@ abstract class AuthenticationRepo { Future>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isFormFamilyFile = false}); Future>> checkActivationCodeRepo( - {required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID, String? familyFileTokenID}); + {required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID}); Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}); @@ -139,6 +139,16 @@ class AuthenticationRepoImp implements AuthenticationRepo { int isOutKsa = (sendActivationCodeReq.zipCode == '966' || sendActivationCodeReq.zipCode == '+966') ? 0 : 1; sendActivationCodeReq.patientOutSA = isOutKsa; sendActivationCodeReq.isDentalAllowedBackend = false; + final payload = sendActivationCodeReq.toJson(); + if (isFormFamilyFile) { + payload.remove("MobileNo"); + payload.remove("NationalID"); + payload.remove("SMSSignature"); + payload.remove("ResponseID"); + print("=================== Final Payload ==================="); + print(payload); + print("====================================================="); + } try { GenericApiModel? apiResponse; @@ -150,7 +160,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { : isRegister ? ApiConsts.sendActivationCodeRegister : ApiConsts.sendActivationCode, - body: sendActivationCodeReq.toJson(), + body: isFormFamilyFile ? payload : sendActivationCodeReq.toJson(), onFailure: (error, statusCode, {messageStatus, failureType}) { failure = failureType; }, @@ -183,8 +193,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, - int? responseID, - String? familyFileTokenID}) async { + int? responseID}) async { if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; newRequest["isSilentLogin"] = activationCode != null ? false : true; @@ -199,12 +208,27 @@ class AuthenticationRepoImp implements AuthenticationRepo { Map familyRequest = {}; if (isFormFamilyFile) { AppState appState = getIt.get(); - familyRequest = newRequest.toJson(); + familyRequest = {}; familyRequest['PatientShareRequestID'] = patientShareRequestID; familyRequest['ResponseID'] = responseID; familyRequest['Status'] = 3; familyRequest["PatientID"] = appState.getAuthenticatedUser()!.patientId ?? 0; - familyRequest["LogInTokenID"] = familyFileTokenID; + familyRequest["LogInTokenID"] = appState.getFamilyFileTokenID; + + // // Remove unnecessary keys from familyRequest + // familyRequest.remove("MobileNo"); + // familyRequest.remove("DeviceToken"); + // familyRequest.remove("ProjectOutSA"); + // familyRequest.remove("LoginType"); + // familyRequest.remove("ZipCode"); + // familyRequest.remove("isRegister"); + // familyRequest.remove("SearchType"); + // familyRequest.remove("NationalID"); + // familyRequest.remove("IsSilentLogin"); + // familyRequest.remove("isDentalAllowedBackend"); + // familyRequest.remove("ForRegisteration"); + + } final endpoint = isFormFamilyFile diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 8db44ab..f314cc4 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -376,6 +376,9 @@ class AuthenticationViewModel extends ChangeNotifier { isFormFamilyFile: isFormFamilyFile, responseID: responseID); + + + // TODO: GET APP SMS SIGNATURE HERE request.sMSSignature = await getSignature(); @@ -390,10 +393,9 @@ class AuthenticationViewModel extends ChangeNotifier { (failure) async => await _errorHandlerService.handleError(failure: failure), (apiResponse) async { int? patientShareRequestID = 0; - String? familyFileTokenID; if (isFormFamilyFile) { patientShareRequestID = apiResponse.data['PatientShareRequestID']; - familyFileTokenID = apiResponse.data['LogInTokenID']; + _appState.setFamilyFileTokenID = apiResponse.data['LogInTokenID']; } if (apiResponse.messageStatus == 2) { LoaderBottomSheet.hideLoader(); @@ -407,15 +409,15 @@ class AuthenticationViewModel extends ChangeNotifier { LoaderBottomSheet.hideLoader(); if (!isComingFromResendOTP) { navigateToOTPScreen( - otpTypeEnum: otpTypeEnum, - phoneNumber: phoneNumber, - isComingFromRegister: checkIsUserComingForRegister(request: payload), - payload: payload, - isFormFamilyFile: isFormFamilyFile, - isExcludedUser: isExcludedUser, - responseID: responseID, - patientShareRequestID: patientShareRequestID, - familyFileTokenID: familyFileTokenID); + otpTypeEnum: otpTypeEnum, + phoneNumber: phoneNumber, + isComingFromRegister: checkIsUserComingForRegister(request: payload), + payload: payload, + isFormFamilyFile: isFormFamilyFile, + isExcludedUser: isExcludedUser, + responseID: responseID, + patientShareRequestID: patientShareRequestID, + ); } } else { // TODO: Handle isSMSSent false @@ -441,8 +443,7 @@ class AuthenticationViewModel extends ChangeNotifier { Function()? onResendActivation, bool isFormFamilyFile = false, dynamic patientShareRequestID, - dynamic responseID, - String? familyFileTokenID}) async { + dynamic responseID}) async { bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1); final request = RequestUtils.getCommonRequestWelcome( @@ -478,11 +479,7 @@ class AuthenticationViewModel extends ChangeNotifier { request["ForRegisteration"] = _appState.getUserRegistrationPayload.isRegister; request["isRegister"] = false; - final resultEither = await _authenticationRepo.checkActivationCodeRepo( - newRequest: request, - activationCode: activationCode.toString(), - isRegister: true, - ); + final resultEither = await _authenticationRepo.checkActivationCodeRepo(newRequest: request, activationCode: activationCode.toString(), isRegister: true); LoaderBottomSheet.hideLoader(); @@ -514,8 +511,7 @@ class AuthenticationViewModel extends ChangeNotifier { isRegister: false, isFormFamilyFile: isFormFamilyFile, patientShareRequestID: patientShareRequestID, - responseID: responseID, - familyFileTokenID: familyFileTokenID); + responseID: responseID); resultEither.fold( (failure) async => await _errorHandlerService.handleError( @@ -549,59 +545,62 @@ class AuthenticationViewModel extends ChangeNotifier { return; } else { if (isFormFamilyFile) { - _dialogService.showCommonBottomSheetWithoutH( - message: "Family File Added Successfully", - onOkPressed: () { - LoaderBottomSheet.showLoader(); - MedicalFileViewModel medicalFileVM = GetIt.instance(); - medicalFileVM.getFamilyFiles(); - LoaderBottomSheet.hideLoader(); - _navigationService.popUntilNamed(AppRoutes.medicalFilePage); - }); - } - - if (activation.list != null && activation.list!.isNotEmpty) { - _appState.setAuthenticatedUser(activation.list!.first); - _appState.setPrivilegeModelList(activation.list!.first.listPrivilege!); - } - _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); - _appState.setAppAuthToken = activation.authenticationTokenId; - final request = RequestUtils.getAuthanticatedCommonRequest().toJson(); - bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request); - - //updating the last login type in app state to show the fingerprint/face id option on home screen - if (_appState.getSelectDeviceByImeiRespModelElement != null) { - _appState.getSelectDeviceByImeiRespModelElement!.logInType = loginTypeEnum.toInt; - } - LoaderBottomSheet.hideLoader(); - insertPatientIMEIData(loginTypeEnum.toInt); - await clearDefaultInputValues(); - if (isUserAgreedBefore) { - navigateToHomeScreen(); + await navigateToFamilyFilePage(); + // _dialogService.showCommonBottomSheetWithoutH( + // message: "Family File Added Successfully", + // onOkPressed: () async { + // print("navigating to family file page"); + // + // }); } else { - navigateToHomeScreen(); - //Agreement page not designed yet so we are navigating to home screen directly - // getUserAgreementContent(request: request); + if (activation.list != null && activation.list!.isNotEmpty) { + _appState.setAuthenticatedUser(activation.list!.first); + _appState.setPrivilegeModelList(activation.list!.first.listPrivilege!); + } + _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); + _appState.setAppAuthToken = activation.authenticationTokenId; + final request = RequestUtils.getAuthanticatedCommonRequest().toJson(); + bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request); + + //updating the last login type in app state to show the fingerprint/face id option on home screen + if (_appState.getSelectDeviceByImeiRespModelElement != null) { + _appState.getSelectDeviceByImeiRespModelElement!.logInType = loginTypeEnum.toInt; + } + LoaderBottomSheet.hideLoader(); + insertPatientIMEIData(loginTypeEnum.toInt); + await clearDefaultInputValues(); + if (isUserAgreedBefore) { + navigateToHomeScreen(); + } else { + navigateToHomeScreen(); + //Agreement page not designed yet so we are navigating to home screen directly + // getUserAgreementContent(request: request); + } + // TODO: setPreferences and stuff + // sharedPref.remove(FAMILY_FILE); + // activation.list!.isFamily = false; + // userData = activation.list; + // sharedPref.setString(BLOOD_TYPE, activation.patientBloodType ?? ""); + // authenticatedUserObject.user = activation.list!; + // projectViewModel.setPrivilege(privilegeList: res); + // await sharedPref.setObject(MAIN_USER, activation.list); + // await sharedPref.setObject(USER_PROFILE, activation.list); + // loginTokenID = activation.logInTokenID; + // await sharedPref.setObject(LOGIN_TOKEN_ID, activation.logInTokenID); + // await sharedPref.setString(TOKEN, activation.authenticationTokenID!); + + // projectViewModel.analytics.loginRegistration.login_successful(); } - // TODO: setPreferences and stuff - // sharedPref.remove(FAMILY_FILE); - // activation.list!.isFamily = false; - // userData = activation.list; - // sharedPref.setString(BLOOD_TYPE, activation.patientBloodType ?? ""); - // authenticatedUserObject.user = activation.list!; - // projectViewModel.setPrivilege(privilegeList: res); - // await sharedPref.setObject(MAIN_USER, activation.list); - // await sharedPref.setObject(USER_PROFILE, activation.list); - // loginTokenID = activation.logInTokenID; - // await sharedPref.setObject(LOGIN_TOKEN_ID, activation.logInTokenID); - // await sharedPref.setString(TOKEN, activation.authenticationTokenID!); - - // projectViewModel.analytics.loginRegistration.login_successful(); } }); } } + Future navigateToFamilyFilePage() async { + MedicalFileViewModel medicalFileVM = GetIt.instance(); + medicalFileVM.handleFamilyFileRequestOTPVerification(); + } + Future checkIfUserAgreedBefore({required dynamic request}) async { bool isAgreed = false; if (havePrivilege(109)) { @@ -647,8 +646,7 @@ class AuthenticationViewModel extends ChangeNotifier { bool isFormFamilyFile = false, bool isExcludedUser = false, int? responseID, - int? patientShareRequestID, - String? familyFileTokenID}) async { + int? patientShareRequestID}) async { _navigationService.pushToOtpScreen( phoneNumber: phoneNumber, isFormFamilyFile: isFormFamilyFile, @@ -659,7 +657,6 @@ class AuthenticationViewModel extends ChangeNotifier { otpTypeEnum: otpTypeEnum, responseID: responseID, patientShareRequestID: patientShareRequestID, - familyFileTokenID: familyFileTokenID, onWrongActivationCode: (String? value) { onWrongActivationCode(message: value); }, diff --git a/lib/features/medical_file/medical_file_repo.dart b/lib/features/medical_file/medical_file_repo.dart index 3042aba..0997cbc 100644 --- a/lib/features/medical_file/medical_file_repo.dart +++ b/lib/features/medical_file/medical_file_repo.dart @@ -26,6 +26,8 @@ abstract class MedicalFileRepo { Future>>> getPatientFamilyFiles(); + Future>>> getAllPendingRecordsByResponseId({required Map request}); + Future>> addFamilyFile({required dynamic request}); } @@ -312,6 +314,45 @@ class MedicalFileRepoImp implements MedicalFileRepo { } } + @override + Future>>> getAllPendingRecordsByResponseId({required Map request}) async { + try { + GenericApiModel>? apiResponse; + Failure? failure; + await apiClient.post( + ApiConsts.getAllPendingRecordsByResponseId, + body: request, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + final list = response['GetAllSharedRecordsByStatusList']; + // if (list == null || list.isEmpty) { + // throw Exception("lab list is empty"); + // } + + final familyLists = list.map((item) => FamilyFileResponseModelLists.fromJson(item as Map)).toList().cast(); + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: familyLists, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } + @override Future>> addFamilyFile({dynamic request}) async { try { @@ -325,6 +366,7 @@ class MedicalFileRepoImp implements MedicalFileRepo { }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { + apiResponse = GenericApiModel( messageStatus: messageStatus, statusCode: statusCode, diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index b3b1db1..59363ba 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -268,6 +268,22 @@ class MedicalFileViewModel extends ChangeNotifier { ); } + Future getAllPendingRecordsByResponseId() async { + AppState appState = getIt(); + final result = await medicalFileRepo.getAllPendingRecordsByResponseId(request: {'ResponseID': appState.getAuthenticatedUser()!.patientId ?? "0", "Status": 2}); + + result.fold( + (failure) async => await errorHandlerService.handleError(failure: failure), + (apiResponse) { + if (apiResponse.messageStatus == 2) { + _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); + } else if (apiResponse.messageStatus == 1) { + print("======= Pending Records Response: ${jsonEncode(apiResponse.data)}"); + } + }, + ); + } + Future switchFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async { final result = await medicalFileRepo.getPatientFamilyFiles(); @@ -318,7 +334,6 @@ class MedicalFileViewModel extends ChangeNotifier { message: apiResponse.data['Message'], onOkPressed: () { LoaderBottomSheet.showLoader(); - print("=================== On Press Ok =================="); authVM.sendActivationCode( otpTypeEnum: otpTypeEnum, nationalIdOrFileNumber: request.sharedPatientIdentificationId!, @@ -327,7 +342,6 @@ class MedicalFileViewModel extends ChangeNotifier { isExcludedUser: apiResponse.data['IsPatientExcluded'], responseID: apiResponse.data["ReponseID"], isFormFamilyFile: true); - }, onCancelPressed: () { navigationService.pop(); @@ -335,4 +349,11 @@ class MedicalFileViewModel extends ChangeNotifier { } }); } + + Future handleFamilyFileRequestOTPVerification() async { + LoaderBottomSheet.showLoader(); + await getFamilyFiles(); + await getAllPendingRecordsByResponseId(); + LoaderBottomSheet.hideLoader(); + } } diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index 7ebd069..a4be2bf 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -38,7 +38,7 @@ class FamilyMedicalScreen extends StatefulWidget { } class _FamilyMedicalScreenState extends State { - List tabs = [CustomTabBarModel("", LocaleKeys.medicalFile.tr()), CustomTabBarModel("", LocaleKeys.request.tr())]; + List tabs = [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())]; MedicalFileViewModel? medicalVM; @override From 288a0018ce424ec726c9fa73070287c1c80a2317 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Mon, 29 Sep 2025 09:46:45 +0300 Subject: [PATCH 09/19] family screen & widgets --- assets/images/png/dummy_user.png | Bin 0 -> 73018 bytes lib/core/api_consts.dart | 1 + lib/core/app_assets.dart | 1 + lib/core/enums.dart | 53 ++++ .../authentication/authentication_repo.dart | 42 ++-- .../medical_file/medical_file_repo.dart | 11 +- .../medical_file/medical_file_view_model.dart | 226 +++++++++++++----- .../medical_file/medical_file_page.dart | 5 +- lib/presentation/my_family/my_Family.dart | 34 ++- .../my_family/widget/family_cards.dart | 28 ++- 10 files changed, 298 insertions(+), 103 deletions(-) create mode 100644 assets/images/png/dummy_user.png diff --git a/assets/images/png/dummy_user.png b/assets/images/png/dummy_user.png new file mode 100644 index 0000000000000000000000000000000000000000..b4bace408fe0553e11eccc275651b680afa66675 GIT binary patch literal 73018 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 literal 0 HcmV?d00001 diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index e11de15..206809d 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -811,6 +811,7 @@ class ApiConsts { static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile'; static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile'; static final String getAllPendingRecordsByResponseId = 'Services/Authentication.svc/REST/GetAllPendingRecordsByResponseId'; + static final String getAllSharedRecordsByStatus = 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatus'; // static values for Api diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index 83fb842..be651b7 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -158,6 +158,7 @@ class AppAssets { static const String tamara_en = '$pngBasePath/tamara_en.png'; static const String visa = '$pngBasePath/visa.png'; static const String lockIcon = '$pngBasePath/lock-icon.png'; + static const String dummy_user = '$pngBasePath/dummy_user.png'; } class AppAnimations { diff --git a/lib/core/enums.dart b/lib/core/enums.dart index bb6c6fe..e94b3e2 100644 --- a/lib/core/enums.dart +++ b/lib/core/enums.dart @@ -30,6 +30,8 @@ enum LoginTypeEnum { sms, whatsapp, face, fingerprint } enum AppEnvironmentTypeEnum { dev, uat, preProd, qa, staging, prod } +enum FamilyFileEnum { active, inactive, blocked, deleted, pending } + extension CalenderExtension on CalenderEnum { int get toInt { switch (this) { @@ -138,6 +140,57 @@ extension OTPTypeEnumExtension on OTPTypeEnum { } } +extension FamilyFileEnumExtenshion on FamilyFileEnum { + int get toInt { + switch (this) { + case FamilyFileEnum.active: + return 3; + case FamilyFileEnum.blocked: + return 1; + case FamilyFileEnum.deleted: + return 0; + case FamilyFileEnum.pending: + return 2; + case FamilyFileEnum.inactive: + return 4; + } + } + + String get displayName { + AppState appState = getIt.get(); + bool isArabic = appState.getLanguageID() == 1 ? true : false; + switch (this) { + case FamilyFileEnum.active: + return isArabic ? 'نشط' : 'Active'; + case FamilyFileEnum.inactive: + return isArabic ? 'غير نشط' : 'Inactive'; + case FamilyFileEnum.blocked: + return isArabic ? 'محظور' : 'Blocked'; + case FamilyFileEnum.deleted: + return isArabic ? 'محذوف' : 'Deleted'; + case FamilyFileEnum.pending: + return isArabic ? 'قيد الانتظار' : 'Pending'; + } + } + + static FamilyFileEnum? fromValue(int value) { + switch (value) { + case 0: + return FamilyFileEnum.pending; + case 2: + return FamilyFileEnum.blocked; + case 1: + return FamilyFileEnum.deleted; + case 3: + return FamilyFileEnum.active; + case 4: + return FamilyFileEnum.inactive; + default: + return null; + } + } +} + enum ServiceTypeEnum { advancePayment, //3 ancillaryOrder, //3 diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 8d1af92..9244e4a 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -30,8 +30,7 @@ abstract class AuthenticationRepo { int? responseID, bool isSwitchUser = false, int? patientID, - int? loginType - }); + int? loginType}); Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}); @@ -196,17 +195,16 @@ class AuthenticationRepoImp implements AuthenticationRepo { } @override - Future>> checkActivationCodeRepo({ - required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq - required String? activationCode, - required bool isRegister, - bool isFormFamilyFile = false, - int? patientShareRequestID, - int? responseID, - bool isSwitchUser = false, - int? patientID, - int? loginType - }) async { + Future>> checkActivationCodeRepo( + {required dynamic newRequest, // could be CheckActivationCodeReq or CheckActivationCodeRegisterReq + required String? activationCode, + required bool isRegister, + bool isFormFamilyFile = false, + int? patientShareRequestID, + int? responseID, + bool isSwitchUser = false, + int? patientID, + int? loginType}) async { if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; newRequest["isSilentLogin"] = activationCode != null ? false : true; @@ -227,7 +225,9 @@ class AuthenticationRepoImp implements AuthenticationRepo { familyRequest['Status'] = 3; familyRequest["PatientID"] = appState.getAuthenticatedUser()!.patientId ?? 0; familyRequest["LogInTokenID"] = appState.getFamilyFileTokenID; - + familyRequest["activationCode"] = activationCode ?? "0000"; + familyRequest["PatientMobileNumber"] = newRequest.patientMobileNumber; + familyRequest["PatientIdentificationID"] = newRequest.patientIdentificationID; } Map switchRequest = {}; if (isSwitchUser) { @@ -237,14 +237,12 @@ class AuthenticationRepoImp implements AuthenticationRepo { switchRequest['IsSilentLogin'] = true; switchRequest['LogInTokenID'] = null; switchRequest['SearchType'] = 2; - if(loginType != 0) { - switchRequest['SuperUser'] = patientID; - switchRequest['DeviceToken'] = null; - }else{ - switchRequest['LoginType'] = 2; - } - - + if (loginType != 0) { + switchRequest['SuperUser'] = patientID; + switchRequest['DeviceToken'] = null; + } else { + switchRequest['LoginType'] = 2; + } } final endpoint = isFormFamilyFile diff --git a/lib/features/medical_file/medical_file_repo.dart b/lib/features/medical_file/medical_file_repo.dart index b90e7fb..9c18696 100644 --- a/lib/features/medical_file/medical_file_repo.dart +++ b/lib/features/medical_file/medical_file_repo.dart @@ -24,7 +24,7 @@ abstract class MedicalFileRepo { Future>> getPatientMedicalReportPDF(PatientMedicalReportResponseModel patientMedicalReportResponseModel, AuthenticatedUser authenticatedUser); - Future>>> getPatientFamilyFiles(int status, int patientId); + Future>>> getPatientFamilyFiles(int? status, int patientId); Future>>> getAllPendingRecordsByResponseId({required Map request}); @@ -276,13 +276,13 @@ class MedicalFileRepoImp implements MedicalFileRepo { } @override - Future>>> getPatientFamilyFiles(int status, int patientID) async { + Future>>> getPatientFamilyFiles(int? status, int patientID) async { try { GenericApiModel>? apiResponse; Failure? failure; await apiClient.post( - FAMILY_FILES, - body: {"Status": status, "PatientID":patientID}, + ApiConsts.getAllSharedRecordsByStatus, + body: {if (status != null) "Status": status, "PatientID": patientID}, onFailure: (error, statusCode, {messageStatus, failureType}) { failure = failureType; }, @@ -327,7 +327,7 @@ class MedicalFileRepoImp implements MedicalFileRepo { }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { - final list = response['GetAllSharedRecordsByStatusList']; + final list = response['GetAllPendingRecordsList']; // if (list == null || list.isEmpty) { // throw Exception("lab list is empty"); // } @@ -366,7 +366,6 @@ class MedicalFileRepoImp implements MedicalFileRepo { }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { - apiResponse = GenericApiModel( messageStatus: messageStatus, statusCode: statusCode, diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 746e592..153828c 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -39,14 +39,27 @@ class MedicalFileViewModel extends ChangeNotifier { List patientMedicalReportCancelledList = []; List patientFamilyFiles = []; + List pendingFamilyFiles = []; String patientSickLeavePDFBase64 = ""; String patientMedicalReportPDFBase64 = ""; int selectedMedicalReportsTabIndex = 0; + int _selectedFamilyFileTabIndex = 0; + + int get getSelectedFamilyFileTabIndex => _selectedFamilyFileTabIndex; + + set setSelectedFamilyFileTabIndex(int value) { + if (_selectedFamilyFileTabIndex != value) { + _selectedFamilyFileTabIndex = value; + notifyListeners(); + } + } + static final DialogService _dialogService = getIt.get(); - AppState _appState = getIt(); + final AppState _appState = getIt(); AuthenticationViewModel authVM = getIt.get(); + MedicalFileViewModel({required this.medicalFileRepo, required this.errorHandlerService}); initMedicalFileProvider() { @@ -67,6 +80,14 @@ class MedicalFileViewModel extends ChangeNotifier { notifyListeners(); } + void onFamilyFileTabChange(int index) { + setSelectedFamilyFileTabIndex = index; + if (index == 1) { + getAllPendingRecordsByResponseId(); + } + notifyListeners(); + } + setIsPatientVaccineListLoading(bool isLoading) { isPatientVaccineListLoading = isLoading; notifyListeners(); @@ -235,8 +256,8 @@ class MedicalFileViewModel extends ChangeNotifier { ); } - Future getFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async { - final result = await medicalFileRepo.getPatientFamilyFiles(); + Future getFamilyFiles({int? status, Function(dynamic)? onSuccess, Function(String)? onError}) async { + final result = await medicalFileRepo.getPatientFamilyFiles(status, _appState.superUserID != null ? _appState.superUserID! : _appState.getAuthenticatedUser()!.patientId!); result.fold( (failure) async => await errorHandlerService.handleError( @@ -250,15 +271,80 @@ class MedicalFileViewModel extends ChangeNotifier { _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); } else if (apiResponse.messageStatus == 1) { patientFamilyFiles = apiResponse.data!; - patientFamilyFiles.insert( - 0, - FamilyFileResponseModelLists( + if (apiResponse.data != null) { + patientFamilyFiles.insert( + 0, + FamilyFileResponseModelLists( patientId: _appState.getAuthenticatedUser()!.patientId, patientName: '${_appState.getAuthenticatedUser()!.firstName!} ${_appState.getAuthenticatedUser()!.lastName!}', isActive: true, gender: _appState.getAuthenticatedUser()!.gender!, - responseId: _appState.getAuthenticatedUser()!.patientId), - ); + responseId: _appState.getAuthenticatedUser()!.patientId, + age: _appState.getAuthenticatedUser()!.age, + mobileNumber: _appState.getAuthenticatedUser()!.mobileNumber, + patientIdenficationNumber: _appState.getAuthenticatedUser()!.patientIdentificationNo, + emaiLAddress: _appState.getAuthenticatedUser()!.emailAddress, + genderDescription: _appState.getAuthenticatedUser()!.genderDescription, + ), + ); + + final List activeFamilyFiles = []; + final List tempPendingFamilyFiles = []; + for (var element in apiResponse.data!) { + if (element.status != null && element.status == FamilyFileEnum.active.toInt) { + activeFamilyFiles.add(FamilyFileResponseModelLists( + patientId: element.patientId, + patientName: element.patientName!, + isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + gender: element.gender!, + responseId: element.patientId, + mobileNumber: element.mobileNumber, + age: element.age, + patientIdenficationNumber: element.patientIdenficationNumber, + relationship: element.relationship, + relationshipId: element.relationshipId, + relationshipN: element.relationshipN, + status: element.status, + statusDescription: element.statusDescription, + createdOn: element.createdOn, + editedOn: element.editedOn, + patientDataVerified: element.patientDataVerified, + regionId: element.regionId, + familyRegionId: element.familyRegionId, + genderDescription: element.genderDescription, + genderImage: element.genderImage, + emaiLAddress: element.emaiLAddress)); + } + + if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { + tempPendingFamilyFiles.add(FamilyFileResponseModelLists( + patientId: element.patientId, + patientName: element.patientName!, + isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + gender: element.gender!, + responseId: element.patientId, + mobileNumber: element.mobileNumber, + age: element.age, + patientIdenficationNumber: element.patientIdenficationNumber, + relationship: element.relationship, + relationshipId: element.relationshipId, + relationshipN: element.relationshipN, + status: element.status, + statusDescription: element.statusDescription, + createdOn: element.createdOn, + editedOn: element.editedOn, + patientDataVerified: element.patientDataVerified, + regionId: element.regionId, + familyRegionId: element.familyRegionId, + genderDescription: element.genderDescription, + genderImage: element.genderImage, + emaiLAddress: element.emaiLAddress)); + } + } + patientFamilyFiles.addAll(activeFamilyFiles.where((element) => !patientFamilyFiles.any((e) => e.patientId == element.patientId))); + pendingFamilyFiles.addAll(tempPendingFamilyFiles); + } + notifyListeners(); if (onSuccess != null) { onSuccess(apiResponse); @@ -278,61 +364,93 @@ class MedicalFileViewModel extends ChangeNotifier { if (apiResponse.messageStatus == 2) { _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); } else if (apiResponse.messageStatus == 1) { - print("======= Pending Records Response: ${jsonEncode(apiResponse.data)}"); + if (apiResponse.data != null) { + final List tempPendingFamilyFiles = []; + for (var element in apiResponse.data!) { + if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { + tempPendingFamilyFiles.add(FamilyFileResponseModelLists( + patientId: element.patientId, + patientName: element.patientName!, + isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + gender: element.gender, + responseId: element.patientId, + mobileNumber: element.mobileNumber, + age: element.age, + patientIdenficationNumber: element.patientIdenficationNumber, + relationship: element.relationship, + relationshipId: element.relationshipId, + relationshipN: element.relationshipN, + status: element.status, + statusDescription: element.statusDescription, + createdOn: element.createdOn, + editedOn: element.editedOn, + patientDataVerified: element.patientDataVerified, + regionId: element.regionId, + familyRegionId: element.familyRegionId, + genderDescription: element.genderDescription, + genderImage: element.genderImage, + emaiLAddress: element.emaiLAddress)); + } + } + pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => !pendingFamilyFiles.any((e) => e.patientId == element.patientId))); + } + notifyListeners(); } }, ); } - Future switchFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async { - // final result = await medicalFileRepo.getPatientFamilyFiles(); - final result = await medicalFileRepo.getPatientFamilyFiles(3,_appState.superUserID !=null ? _appState.superUserID! : _appState.getAuthenticatedUser()!.patientId!); - - result.fold( - (failure) async => await errorHandlerService.handleError( - failure: failure, - onOkPressed: () { - onError!(failure.message); - }, - ), - (apiResponse) { - if (apiResponse.messageStatus == 2) { - _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); - } else if (apiResponse.messageStatus == 1) { - patientFamilyFiles = apiResponse.data!; - patientFamilyFiles.insert( - 0, - FamilyFileResponseModelLists( - patientId: _appState.getAuthenticatedUser()!.patientId, - patientName: '${_appState.getAuthenticatedUser()!.firstName!} ${_appState.getAuthenticatedUser()!.lastName!}', - isActive: true, - gender: _appState.getAuthenticatedUser()!.gender!, - age: _appState.getAuthenticatedUser()!.age, - mobileNumber: _appState.getAuthenticatedUser()!.mobileNumber, - responseId: _appState.getAuthenticatedUser()!.patientId), - ); - notifyListeners(); - if (onSuccess != null) { - onSuccess(apiResponse); - } - } - }, + // Future switchFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async { + // // final result = await medicalFileRepo.getPatientFamilyFiles(); + // final result = await medicalFileRepo.getPatientFamilyFiles(3, _appState.superUserID != null ? _appState.superUserID! : _appState.getAuthenticatedUser()!.patientId!); + // + // result.fold( + // (failure) async => await errorHandlerService.handleError( + // failure: failure, + // onOkPressed: () { + // onError!(failure.message); + // }, + // ), + // (apiResponse) { + // if (apiResponse.messageStatus == 2) { + // _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); + // } else if (apiResponse.messageStatus == 1) { + // patientFamilyFiles = apiResponse.data!; + // patientFamilyFiles.insert( + // 0, + // FamilyFileResponseModelLists( + // patientId: _appState.getAuthenticatedUser()!.patientId, + // patientName: '${_appState.getAuthenticatedUser()!.firstName!} ${_appState.getAuthenticatedUser()!.lastName!}', + // isActive: true, + // gender: _appState.getAuthenticatedUser()!.gender!, + // age: _appState.getAuthenticatedUser()!.age, + // mobileNumber: _appState.getAuthenticatedUser()!.mobileNumber, + // responseId: _appState.getAuthenticatedUser()!.patientId), + // ); + // notifyListeners(); + // if (onSuccess != null) { + // onSuccess(apiResponse); + // } + // } + // }, + // ); + // } + + Future switchFamilyFiles({Function(dynamic)? onSuccess, int? responseID, int? patientID, String? phoneNumber, Function(String)? onError}) async { + authVM.phoneNumberController.text = phoneNumber!.startsWith("0") ? phoneNumber.replaceFirst("0", "") : phoneNumber; + + await authVM.checkActivationCode( + activationCode: '0000', + otpTypeEnum: OTPTypeEnum.sms, + onWrongActivationCode: (String? str) {}, + responseID: responseID, + isFormFamilyFile: false, + isSwitchUser: true, + patientID: patientID, ); } - Future switchFamilyFiles( {Function(dynamic)? onSuccess,int? responseID,int? patientID, String? phoneNumber, Function(String)? onError}) async { - authVM.phoneNumberController.text =phoneNumber!.startsWith("0") - ? phoneNumber.replaceFirst("0", "") - : phoneNumber; - - - - await authVM.checkActivationCode(activationCode: '0000', otpTypeEnum: OTPTypeEnum.sms, onWrongActivationCode: (String? str) {}, responseID: responseID, isFormFamilyFile:false, isSwitchUser: true, patientID: patientID, ); - - - } Future addFamilyFile({required OTPTypeEnum otpTypeEnum, required bool isExcludedUser}) async { - LoaderBottomSheet.showLoader(); AuthenticationViewModel authVM = getIt.get(); NavigationService navigationService = getIt.get(); diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index ea0b86b..afea4e6 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -78,7 +78,9 @@ class _MedicalFilePageState extends State { insuranceViewModel.initInsuranceProvider(); medicalFileViewModel.setIsPatientSickLeaveListLoading(true); medicalFileViewModel.getPatientSickLeaveList(); - medicalFileViewModel.getFamilyFiles(); + medicalFileViewModel.getFamilyFiles(); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan + medicalFileViewModel.getAllPendingRecordsByResponseId(); //TODO: Added By Aamir + medicalFileViewModel.onTabChanged(0); } }); @@ -198,7 +200,6 @@ class _MedicalFilePageState extends State { CustomTabBarModel(AppAssets.more, "More".needTranslation), ], onTabChange: (index) { - print(index); medicalFileVM.onTabChanged(index); }, ).paddingSymmetrical(24.h, 0.0), diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index cb49933..1944704 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -22,6 +22,7 @@ import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/country_dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:provider/provider.dart'; class FamilyMedicalScreen extends StatefulWidget { final List profiles; @@ -44,7 +45,7 @@ class _FamilyMedicalScreenState extends State { @override void initState() { super.initState(); - medicalVM = getIt.get(); + medicalVM = context.read(); } @override @@ -67,13 +68,12 @@ class _FamilyMedicalScreenState extends State { SizedBox(height: 25.h), CustomTabBar( tabs: tabs, - onTabChange: (int index) {}, + onTabChange: (index) { + medicalVM!.onFamilyFileTabChange(index); + }, ), SizedBox(height: 25.h), - FamilyCards(profiles: widget.profiles, onSelect: (FamilyFileResponseModelLists profile){ - medicalVM?.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); - - }, isShowDetails: true), + Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), SizedBox(height: 20.h), ], ), @@ -96,6 +96,28 @@ class _FamilyMedicalScreenState extends State { ); } + Widget getFamilyTabs({required int index}) { + switch (index) { + case 0: + return FamilyCards( + profiles: medicalVM!.patientFamilyFiles, + onSelect: (FamilyFileResponseModelLists profile) { + medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + }, + isShowDetails: true, + ); + case 1: + return FamilyCards( + profiles: medicalVM!.pendingFamilyFiles, + onSelect: (FamilyFileResponseModelLists profile) { + // medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + }, + isShowDetails: true, + ); default: + return SizedBox.shrink(); + } + } + void showModelSheet() { AuthenticationViewModel authVm = getIt.get(); return showCommonBottomSheetWithoutHeight(context, diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart index 480f91f..40a2d8c 100644 --- a/lib/presentation/my_family/widget/family_cards.dart +++ b/lib/presentation/my_family/widget/family_cards.dart @@ -43,20 +43,22 @@ class _FamilyCardsState extends State { ), itemBuilder: (context, index) { final profile = widget.profiles[index]; - final isActive = (profile.responseId == appState - .getAuthenticatedUser() - ?.patientId); + final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId); return Container( padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), child: Opacity( - opacity: isActive ? 0.4 : 1.0, // Fade all content if active + opacity: isActive || profile.status == FamilyFileEnum.pending.toInt ? 0.4 : 1.0, // Fade all content if active child: Column( mainAxisSize: MainAxisSize.min, children: [ SizedBox(height: 5.h), Utils.buildImgWithAssets( - icon: profile.gender == 1 ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.male_img) : (profile.age! < 7 ? AppAssets.babyGirlImg : AppAssets.femaleImg), + icon: profile.gender == null + ? AppAssets.dummy_user + : profile.gender == 1 + ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.male_img) + : (profile.age! < 7 ? AppAssets.babyGirlImg : AppAssets.femaleImg), width: 80.h, height: 78.h), SizedBox(height: 8.h), @@ -73,13 +75,13 @@ class _FamilyCardsState extends State { widget.isShowDetails ? SizedBox(height: 4.h) : SizedBox(), widget.isShowDetails ? CustomChipWidget( - chipType: ChipTypeEnum.alert, - backgroundColor: AppColors.lightGrayBGColor, - chipText: "Age: ${profile.age ?? "N/A"} Years", - isShowBorder: false, - borderRadius: 8.h, - textColor: AppColors.textColor, - ) + chipType: ChipTypeEnum.alert, + backgroundColor: AppColors.lightGrayBGColor, + chipText: "Age: ${profile.age ?? "N/A"} Years", + isShowBorder: false, + borderRadius: 8.h, + textColor: AppColors.textColor, + ) : SizedBox(), widget.isShowDetails ? SizedBox(height: 8.h) : SizedBox(), Spacer(), @@ -102,7 +104,7 @@ class _FamilyCardsState extends State { borderColor: AppColors.secondaryLightRedColor, textColor: AppColors.primaryRedColor, fontSize: 13.h, - icon: widget.isBottomSheet ? null : AppAssets.heart, + icon: widget.isBottomSheet ? null : AppAssets.heart, iconColor: AppColors.primaryRedColor, padding: EdgeInsets.symmetric(vertical: 0, horizontal: 0), ).paddingOnly(top: 0, bottom: 0), From 1335d3a7c8a010c7fb0a00e7087fe4d7fee02c04 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Mon, 29 Sep 2025 16:20:51 +0300 Subject: [PATCH 10/19] family screen & widgets --- assets/images/svg/switch_user.svg | 8 + lib/core/app_assets.dart | 1 + lib/core/app_state.dart | 2 +- .../authentication/authentication_repo.dart | 11 + .../authentication_view_model.dart | 2 +- .../medical_file/medical_file_view_model.dart | 198 +++++++++++++----- .../medical_file/medical_file_page.dart | 8 +- lib/presentation/my_family/my_Family.dart | 107 ++++++---- .../my_family/widget/family_cards.dart | 7 +- 9 files changed, 249 insertions(+), 95 deletions(-) create mode 100644 assets/images/svg/switch_user.svg diff --git a/assets/images/svg/switch_user.svg b/assets/images/svg/switch_user.svg new file mode 100644 index 0000000..fa8e47e --- /dev/null +++ b/assets/images/svg/switch_user.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index dd4bce4..424b90c 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -141,6 +141,7 @@ class AppAssets { static const String ic_normal_result = '$svgBasePath/normal_result.svg'; static const String ic_low_result = '$svgBasePath/low_result.svg'; static const String ic_critical_low_result = '$svgBasePath/critical_low_result.svg'; + static const String switch_user = '$svgBasePath/switch_user.svg'; //bottom navigation// static const String homeBottom = '$svgBasePath/home_bottom.svg'; diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart index 206adc1..030cc36 100644 --- a/lib/core/app_state.dart +++ b/lib/core/app_state.dart @@ -57,7 +57,7 @@ class AppState { } } - int? get superUserID => _superUserID; + int? get getSuperUserID => _superUserID; set setSuperUserID(int? value) => _superUserID = value; diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 9244e4a..96bdc0b 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -205,6 +205,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { bool isSwitchUser = false, int? patientID, int? loginType}) async { + AppState appState = getIt.get(); if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; newRequest["isSilentLogin"] = activationCode != null ? false : true; @@ -243,6 +244,16 @@ class AuthenticationRepoImp implements AuthenticationRepo { } else { switchRequest['LoginType'] = 2; } + + if (appState.getSuperUserID == responseID) { + switchRequest['LoginType'] = 3; + switchRequest['PatientIdentificationID'] = ""; + // switchRequest['ProjectOutSA'] = newRequest.zipCode == '966' ? false : true; + switchRequest.remove('NationalID'); + switchRequest.remove('isDentalAllowedBackend'); + switchRequest.remove('ProjectOutSA'); + switchRequest.remove('ForRegisteration'); + } } final endpoint = isFormFamilyFile diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 1bdc09e..0a11eda 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -518,7 +518,7 @@ class AuthenticationViewModel extends ChangeNotifier { responseID: responseID, isSwitchUser: isSwitchUser, patientID: patientID, - loginType: _appState.superUserID != null ? 0 : 2, + loginType: _appState.getSuperUserID != null ? 0 : 2, ); resultEither.fold( diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 153828c..64075b4 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -257,7 +257,7 @@ class MedicalFileViewModel extends ChangeNotifier { } Future getFamilyFiles({int? status, Function(dynamic)? onSuccess, Function(String)? onError}) async { - final result = await medicalFileRepo.getPatientFamilyFiles(status, _appState.superUserID != null ? _appState.superUserID! : _appState.getAuthenticatedUser()!.patientId!); + final result = await medicalFileRepo.getPatientFamilyFiles(status, _appState.getSuperUserID != null ? _appState.getSuperUserID! : _appState.getAuthenticatedUser()!.patientId!); result.fold( (failure) async => await errorHandlerService.handleError( @@ -288,61 +288,157 @@ class MedicalFileViewModel extends ChangeNotifier { ), ); + // final List activeFamilyFiles = []; + // final List tempPendingFamilyFiles = []; + // for (var element in apiResponse.data!) { + // if (element.status != null && element.status == FamilyFileEnum.active.toInt) { + // activeFamilyFiles.add(FamilyFileResponseModelLists( + // patientId: element.patientId, + // patientName: element.patientName!, + // isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + // gender: element.gender!, + // responseId: element.patientId, + // mobileNumber: element.mobileNumber, + // age: element.age, + // patientIdenficationNumber: element.patientIdenficationNumber, + // relationship: element.relationship, + // relationshipId: element.relationshipId, + // relationshipN: element.relationshipN, + // status: element.status, + // statusDescription: element.statusDescription, + // createdOn: element.createdOn, + // editedOn: element.editedOn, + // patientDataVerified: element.patientDataVerified, + // regionId: element.regionId, + // familyRegionId: element.familyRegionId, + // genderDescription: element.genderDescription, + // genderImage: element.genderImage, + // emaiLAddress: element.emaiLAddress)); + // } + // + // if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { + // tempPendingFamilyFiles.add(FamilyFileResponseModelLists( + // patientId: element.patientId, + // patientName: element.patientName!, + // isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + // gender: element.gender!, + // responseId: element.patientId, + // mobileNumber: element.mobileNumber, + // age: element.age, + // patientIdenficationNumber: element.patientIdenficationNumber, + // relationship: element.relationship, + // relationshipId: element.relationshipId, + // relationshipN: element.relationshipN, + // status: element.status, + // statusDescription: element.statusDescription, + // createdOn: element.createdOn, + // editedOn: element.editedOn, + // patientDataVerified: element.patientDataVerified, + // regionId: element.regionId, + // familyRegionId: element.familyRegionId, + // genderDescription: element.genderDescription, + // genderImage: element.genderImage, + // emaiLAddress: element.emaiLAddress)); + // } + // } + // patientFamilyFiles.addAll(activeFamilyFiles.where((element) => !patientFamilyFiles.any((e) => e.patientId == element.patientId))); + // pendingFamilyFiles.addAll(tempPendingFamilyFiles); + final List activeFamilyFiles = []; final List tempPendingFamilyFiles = []; - for (var element in apiResponse.data!) { - if (element.status != null && element.status == FamilyFileEnum.active.toInt) { - activeFamilyFiles.add(FamilyFileResponseModelLists( - patientId: element.patientId, - patientName: element.patientName!, - isActive: element.status == FamilyFileEnum.active.toInt ? true : false, - gender: element.gender!, - responseId: element.patientId, - mobileNumber: element.mobileNumber, - age: element.age, - patientIdenficationNumber: element.patientIdenficationNumber, - relationship: element.relationship, - relationshipId: element.relationshipId, - relationshipN: element.relationshipN, - status: element.status, - statusDescription: element.statusDescription, - createdOn: element.createdOn, - editedOn: element.editedOn, - patientDataVerified: element.patientDataVerified, - regionId: element.regionId, - familyRegionId: element.familyRegionId, - genderDescription: element.genderDescription, - genderImage: element.genderImage, - emaiLAddress: element.emaiLAddress)); - } + // final Set pendingIds = {}; + + // for (var element in apiResponse.data!) { + // if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { + // tempPendingFamilyFiles.add(FamilyFileResponseModelLists( + // patientId: element.patientId, + // patientName: element.patientName!, + // isActive: false, + // gender: element.gender!, + // responseId: element.patientId, + // mobileNumber: element.mobileNumber, + // age: element.age, + // patientIdenficationNumber: element.patientIdenficationNumber, + // relationship: element.relationship, + // relationshipId: element.relationshipId, + // relationshipN: element.relationshipN, + // status: element.status, + // statusDescription: element.statusDescription, + // createdOn: element.createdOn, + // editedOn: element.editedOn, + // patientDataVerified: element.patientDataVerified, + // regionId: element.regionId, + // familyRegionId: element.familyRegionId, + // genderDescription: element.genderDescription, + // genderImage: element.genderImage, + // emaiLAddress: element.emaiLAddress)); + // } else if (element.status != null && element.status == FamilyFileEnum.active.toInt) { + // activeFamilyFiles.add(FamilyFileResponseModelLists( + // patientId: element.patientId, + // patientName: element.patientName!, + // isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + // gender: element.gender!, + // responseId: element.patientId, + // mobileNumber: element.mobileNumber, + // age: element.age, + // patientIdenficationNumber: element.patientIdenficationNumber, + // relationship: element.relationship, + // relationshipId: element.relationshipId, + // relationshipN: element.relationshipN, + // status: element.status, + // statusDescription: element.statusDescription, + // createdOn: element.createdOn, + // editedOn: element.editedOn, + // patientDataVerified: element.patientDataVerified, + // regionId: element.regionId, + // familyRegionId: element.familyRegionId, + // genderDescription: element.genderDescription, + // genderImage: element.genderImage, + // emaiLAddress: element.emaiLAddress)); + // } + // } - if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { - tempPendingFamilyFiles.add(FamilyFileResponseModelLists( - patientId: element.patientId, - patientName: element.patientName!, - isActive: element.status == FamilyFileEnum.active.toInt ? true : false, - gender: element.gender!, - responseId: element.patientId, - mobileNumber: element.mobileNumber, - age: element.age, - patientIdenficationNumber: element.patientIdenficationNumber, - relationship: element.relationship, - relationshipId: element.relationshipId, - relationshipN: element.relationshipN, - status: element.status, - statusDescription: element.statusDescription, - createdOn: element.createdOn, - editedOn: element.editedOn, - patientDataVerified: element.patientDataVerified, - regionId: element.regionId, - familyRegionId: element.familyRegionId, - genderDescription: element.genderDescription, - genderImage: element.genderImage, - emaiLAddress: element.emaiLAddress)); + for (var element in apiResponse.data!) { + if (element.status == null) continue; + + final isPending = element.status == FamilyFileEnum.pending.toInt; + final isActive = element.status == FamilyFileEnum.active.toInt; + + if (!isPending && !isActive) continue; + + final familyFile = FamilyFileResponseModelLists( + patientId: element.patientId, + patientName: element.patientName!, + isActive: isActive, + gender: element.gender!, + responseId: element.patientId, + mobileNumber: element.mobileNumber, + age: element.age, + patientIdenficationNumber: element.patientIdenficationNumber, + relationship: element.relationship, + relationshipId: element.relationshipId, + relationshipN: element.relationshipN, + status: element.status, + statusDescription: element.statusDescription, + createdOn: element.createdOn, + editedOn: element.editedOn, + patientDataVerified: element.patientDataVerified, + regionId: element.regionId, + familyRegionId: element.familyRegionId, + genderDescription: element.genderDescription, + genderImage: element.genderImage, + emaiLAddress: element.emaiLAddress, + ); + + if (isPending) { + tempPendingFamilyFiles.add(familyFile); + } else if (isActive) { + activeFamilyFiles.add(familyFile); } } - patientFamilyFiles.addAll(activeFamilyFiles.where((element) => !patientFamilyFiles.any((e) => e.patientId == element.patientId))); - pendingFamilyFiles.addAll(tempPendingFamilyFiles); + + patientFamilyFiles.addAll(activeFamilyFiles.where((element) => patientFamilyFiles.every((e) => e.patientId != element.patientId || e.status != FamilyFileEnum.active.toInt))); + pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => pendingFamilyFiles.every((e) => e.patientId != element.patientId))); } notifyListeners(); diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index afea4e6..dcd83c6 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -73,13 +73,16 @@ class _MedicalFilePageState extends State { @override void initState() { + appState = getIt.get(); scheduleMicrotask(() { if (appState.isAuthenticated) { insuranceViewModel.initInsuranceProvider(); medicalFileViewModel.setIsPatientSickLeaveListLoading(true); medicalFileViewModel.getPatientSickLeaveList(); - medicalFileViewModel.getFamilyFiles(); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan - medicalFileViewModel.getAllPendingRecordsByResponseId(); //TODO: Added By Aamir + if (appState.getSuperUserID == null) { + medicalFileViewModel.getFamilyFiles(status: 3); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan + medicalFileViewModel.getAllPendingRecordsByResponseId(); //TODO: Added By Aamir + } medicalFileViewModel.onTabChanged(0); } @@ -93,7 +96,6 @@ class _MedicalFilePageState extends State { myAppointmentsViewModel = Provider.of(context, listen: false); medicalFileViewModel = Provider.of(context, listen: false); bookAppointmentsViewModel = Provider.of(context, listen: false); - appState = getIt.get(); NavigationService navigationService = getIt.get(); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, diff --git a/lib/presentation/my_family/my_Family.dart b/lib/presentation/my_family/my_Family.dart index 1944704..c0d85c0 100644 --- a/lib/presentation/my_family/my_Family.dart +++ b/lib/presentation/my_family/my_Family.dart @@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/features/authentication/authentication_view_ import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; @@ -51,33 +52,23 @@ class _FamilyMedicalScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: AppColors.scaffoldBgColor, - appBar: CustomAppBar( - onBackPressed: () { - Navigator.of(context).pop(); - }, - onLanguageChanged: (lang) {}, - hideLogoAndLang: true, - ), - body: SingleChildScrollView( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - LocaleKeys.myMedicalFile.tr().toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2), - SizedBox(height: 25.h), - CustomTabBar( - tabs: tabs, - onTabChange: (index) { - medicalVM!.onFamilyFileTabChange(index); - }, - ), - SizedBox(height: 25.h), - Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), - SizedBox(height: 20.h), - ], - ), - ).paddingSymmetrical(20, 0), + body: CollapsingListView( + title: "My Medical File".needTranslation, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CustomTabBar( + tabs: tabs, + onTabChange: (index) { + medicalVM!.onFamilyFileTabChange(index); + }, + ), + SizedBox(height: 25.h), + Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), + SizedBox(height: 20.h), + ], + ).paddingSymmetrical(20, 0)), bottomSheet: Container( decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, @@ -85,15 +76,58 @@ class _FamilyMedicalScreenState extends State { ), padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h), child: CustomButton( - text: "Add a new family member", - onPressed: () { - showModelSheet(); - }, - icon: AppAssets.add_icon, - height: 56.h, - fontWeight: FontWeight.w600, - )), + text: "Add a new family member", + onPressed: () { + showModelSheet(); + }, + icon: AppAssets.add_icon, + height: 56.h, + fontWeight: FontWeight.w600)), ); + // return Scaffold( + // backgroundColor: AppColors.scaffoldBgColor, + // appBar: CustomAppBar( + // onBackPressed: () { + // Navigator.of(context).pop(); + // }, + // onLanguageChanged: (lang) {}, + // hideLogoAndLang: true, + // ), + // body: SingleChildScrollView( + // child: Column( + // mainAxisSize: MainAxisSize.min, + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // LocaleKeys.myMedicalFile.tr().toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2), + // SizedBox(height: 25.h), + // CustomTabBar( + // tabs: tabs, + // onTabChange: (index) { + // medicalVM!.onFamilyFileTabChange(index); + // }, + // ), + // SizedBox(height: 25.h), + // Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), + // SizedBox(height: 20.h), + // ], + // ).paddingSymmetrical(20, 0), + // ), + // bottomSheet: Container( + // decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + // color: AppColors.whiteColor, + // customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)), + // ), + // padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h), + // child: CustomButton( + // text: "Add a new family member", + // onPressed: () { + // showModelSheet(); + // }, + // icon: AppAssets.add_icon, + // height: 56.h, + // fontWeight: FontWeight.w600, + // )), + // ); } Widget getFamilyTabs({required int index}) { @@ -113,7 +147,8 @@ class _FamilyMedicalScreenState extends State { // medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); }, isShowDetails: true, - ); default: + ); + default: return SizedBox.shrink(); } } diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart index 40a2d8c..3916756 100644 --- a/lib/presentation/my_family/widget/family_cards.dart +++ b/lib/presentation/my_family/widget/family_cards.dart @@ -33,7 +33,7 @@ class _FamilyCardsState extends State { Widget build(BuildContext context) { return GridView.builder( shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), + physics: NeverScrollableScrollPhysics(), itemCount: widget.profiles.length, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( crossAxisCount: 2, @@ -41,6 +41,7 @@ class _FamilyCardsState extends State { mainAxisSpacing: 10.h, childAspectRatio: widget.isShowDetails ? 0.56.h : 0.74.h, ), + padding: EdgeInsets.only(bottom: 80.h), itemBuilder: (context, index) { final profile = widget.profiles[index]; final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId); @@ -99,12 +100,12 @@ class _FamilyCardsState extends State { CustomButton( height: 40.h, onPressed: () => widget.onSelect(profile), - text: LocaleKeys.select.tr(), + text: LocaleKeys.switchAccount.tr(), backgroundColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor, textColor: AppColors.primaryRedColor, fontSize: 13.h, - icon: widget.isBottomSheet ? null : AppAssets.heart, + icon: widget.isBottomSheet ? null : AppAssets.switch_user, iconColor: AppColors.primaryRedColor, padding: EdgeInsets.symmetric(vertical: 0, horizontal: 0), ).paddingOnly(top: 0, bottom: 0), From 30eb8bf5dea3f8a9a51195c9ce0b3e41c12c362e Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 6 Oct 2025 12:34:18 +0300 Subject: [PATCH 11/19] dental booking flow implemented --- lib/core/api/api_client.dart | 4 +- lib/core/api_consts.dart | 2 +- .../book_appointments_repo.dart | 99 +++++++ .../book_appointments_view_model.dart | 68 +++++ ...ental_chief_complaints_response_model.dart | 24 ++ .../facility_selection_item.dart | 2 +- .../region_bottomsheet/region_list_item.dart | 2 +- .../dental_chief_complaints_page.dart | 95 +++++++ .../book_appointment/select_clinic_page.dart | 263 ++++++++++-------- .../book_appointment/select_doctor_page.dart | 8 +- .../widgets/chief_complaint_card.dart | 38 +++ .../book_appointment/widgets/clinic_card.dart | 5 +- 12 files changed, 481 insertions(+), 129 deletions(-) create mode 100644 lib/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart create mode 100644 lib/presentation/book_appointment/dental_chief_complaints_page.dart create mode 100644 lib/presentation/book_appointment/widgets/chief_complaint_card.dart diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart index cd7b673..9140a13 100644 --- a/lib/core/api/api_client.dart +++ b/lib/core/api/api_client.dart @@ -173,8 +173,8 @@ class ApiClientImp implements ApiClient { body[_appState.isAuthenticated ? 'TokenID' : 'LogInTokenID'] = _appState.appAuthToken; } - body['TokenID'] = "@dm!n"; - body['PatientID'] = 4767884; + // body['TokenID'] = "@dm!n"; + // body['PatientID'] = 4767884; // body['PatientTypeID'] = 1; // // body['PatientOutSA'] = 0; diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 511cb37..177a541 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -727,7 +727,7 @@ const FAMILY_FILES= 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatu class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT diff --git a/lib/features/book_appointments/book_appointments_repo.dart b/lib/features/book_appointments/book_appointments_repo.dart index 82ca921..437d2c8 100644 --- a/lib/features/book_appointments/book_appointments_repo.dart +++ b/lib/features/book_appointments/book_appointments_repo.dart @@ -6,6 +6,7 @@ import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; import 'package:hmg_patient_app_new/core/utils/date_util.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctor_profile_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart'; @@ -72,6 +73,12 @@ abstract class BookAppointmentsRepo { Future>>> getPatientDentalEstimation( {required int projectID, Function(dynamic)? onSuccess, Function(String)? onError}); + + Future>>> getDentalChiefComplaintsList( + {required int projectID, required int clinicID, required int patientID, Function(dynamic)? onSuccess, Function(String)? onError}); + + Future>>> getDentalChiefComplaintDoctorsList(int projectID, int chiefComplaintID, + {Function(dynamic)? onSuccess, Function(String)? onError}); } class BookAppointmentsRepoImp implements BookAppointmentsRepo { @@ -701,4 +708,96 @@ class BookAppointmentsRepoImp implements BookAppointmentsRepo { return Left(UnknownFailure(e.toString())); } } + + @override + Future>>> getDentalChiefComplaintsList( + {required int projectID, required int clinicID, required int patientID, Function(dynamic)? onSuccess, Function(String)? onError}) async { + Map mapDevice = { + "PatientID": patientID, + "ClinicID": clinicID, + "ProjectID": projectID, + "isDentalAllowedBackend": true, + "ContinueDentalPlan": false, + "IsSearchAppointmnetByClinicID": false, + }; + + try { + GenericApiModel>? apiResponse; + Failure? failure; + await apiClient.post( + GET_DOCTORS_LIST_URL, + body: mapDevice, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + onError!(error); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + final list = response['List_DentalChiefComplain']; + + final chiefComplaintsList = list.map((item) => DentalChiefComplaintsListResponseModel.fromJson(item as Map)).toList().cast(); + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: chiefComplaintsList, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } + + @override + Future>>> getDentalChiefComplaintDoctorsList(int projectID, int chiefComplaintID, + {Function(dynamic)? onSuccess, Function(String)? onError}) async { + Map mapDevice = { + "ProjectID": projectID, + "ChiefComplaintID": chiefComplaintID, + "isDentalAllowedBackend": true, + "IsPublicRequest": true, + }; + + try { + GenericApiModel>? apiResponse; + Failure? failure; + await apiClient.post( + GET_DENTAL_DOCTORS_LIST_URL, + body: mapDevice, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + onError!(error); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + final list = response['List_DentalDoctorChiefComplaintMapping']; + + final doctorsList = list.map((item) => DoctorsListResponseModel.fromJson(item as Map)).toList().cast(); + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: doctorsList, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart index a6c741f..26bfe4f 100644 --- a/lib/features/book_appointments/book_appointments_view_model.dart +++ b/lib/features/book_appointments/book_appointments_view_model.dart @@ -12,6 +12,7 @@ import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/free_slot.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctor_profile_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart'; @@ -57,8 +58,11 @@ class BookAppointmentsViewModel extends ChangeNotifier { List liveCareDoctorsList = []; List patientDentalPlanEstimationList = []; + List dentalChiefComplaintsList = []; int totalTimeNeededForDentalProcedure = 0; bool isContinueDentalPlan = false; + bool isChiefComplaintsListLoading = false; + int selectedChiefComplaintID = 0; GetClinicsListResponseModel selectedClinic = GetClinicsListResponseModel(); DoctorsListResponseModel selectedDoctor = DoctorsListResponseModel(); @@ -134,7 +138,9 @@ class BookAppointmentsViewModel extends ChangeNotifier { doctorsList.clear(); liveCareClinicsList.clear(); patientDentalPlanEstimationList.clear(); + dentalChiefComplaintsList.clear(); isContinueDentalPlan = false; + isChiefComplaintsListLoading = true; // getLocation(); notifyListeners(); } @@ -201,6 +207,16 @@ class BookAppointmentsViewModel extends ChangeNotifier { notifyListeners(); } + setIsChiefComplaintsListLoading(bool value) { + isChiefComplaintsListLoading = value; + notifyListeners(); + } + + setSelectedChiefComplaintID(int id) { + selectedChiefComplaintID = id; + notifyListeners(); + } + void onTabChanged(int index) { selectedTabIndex = index; notifyListeners(); @@ -949,4 +965,56 @@ class BookAppointmentsViewModel extends ChangeNotifier { }, ); } + + Future getDentalChiefComplaintsList({Function(dynamic)? onSuccess, Function(String)? onError}) async { + dentalChiefComplaintsList.clear(); + notifyListeners(); + int patientID = _appState.isAuthenticated ? _appState.getAuthenticatedUser()!.patientId ?? -1 : -1; + final result = await bookAppointmentsRepo.getDentalChiefComplaintsList(patientID: patientID, projectID: int.parse(currentlySelectedHospitalFromRegionFlow ?? "0"), clinicID: 17); + + result.fold( + (failure) async => await errorHandlerService.handleError(failure: failure), + (apiResponse) { + if (apiResponse.messageStatus == 2) { + onError!(apiResponse.errorMessage!); + // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); + } else if (apiResponse.messageStatus == 1) { + dentalChiefComplaintsList = apiResponse.data!; + isChiefComplaintsListLoading = false; + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } + }, + ); + } + + Future getDentalChiefComplaintDoctorsList({int projectID = 0, Function(dynamic)? onSuccess, Function(String)? onError}) async { + doctorsList.clear(); + projectID = currentlySelectedHospitalFromRegionFlow != null ? int.parse(currentlySelectedHospitalFromRegionFlow!) : projectID; + final result = await bookAppointmentsRepo.getDentalChiefComplaintDoctorsList(projectID, selectedChiefComplaintID); + + result.fold( + (failure) async { + onError!("No doctors found for the search criteria...".needTranslation); + }, + (apiResponse) { + if (apiResponse.messageStatus == 2) { + // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); + } else if (apiResponse.messageStatus == 1) { + doctorsList = apiResponse.data!; + filteredDoctorList = doctorsList; + isDoctorsListLoading = false; + // initializeFilteredList(); + // clearSearchFilters(); + // getFiltersFromDoctorList(); + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } + }, + ); + } } diff --git a/lib/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart b/lib/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart new file mode 100644 index 0000000..99d5cd7 --- /dev/null +++ b/lib/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart @@ -0,0 +1,24 @@ +class DentalChiefComplaintsListResponseModel { + int? projectID; + int? iD; + String? name; + dynamic nameN; + + DentalChiefComplaintsListResponseModel({this.projectID, this.iD, this.name, this.nameN}); + + DentalChiefComplaintsListResponseModel.fromJson(Map json) { + projectID = json['ProjectID']; + iD = json['ID']; + name = json['Name']; + nameN = json['NameN']; + } + + Map toJson() { + final Map data = new Map(); + data['ProjectID'] = this.projectID; + data['ID'] = this.iD; + data['Name'] = this.name; + data['NameN'] = this.nameN; + return data; + } +} diff --git a/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart b/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart index b267ee4..16dfb1e 100644 --- a/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart +++ b/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart @@ -48,7 +48,7 @@ class FacilitySelectionItem extends StatelessWidget { Transform.flip( flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, + icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, width: 18, height: 13, diff --git a/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart b/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart index ab9cd9b..688580c 100644 --- a/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart +++ b/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart @@ -45,7 +45,7 @@ class RegionListItem extends StatelessWidget { Transform.flip( flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, + icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, width: 18, height: 13, diff --git a/lib/presentation/book_appointment/dental_chief_complaints_page.dart b/lib/presentation/book_appointment/dental_chief_complaints_page.dart new file mode 100644 index 0000000..4dc3881 --- /dev/null +++ b/lib/presentation/book_appointment/dental_chief_complaints_page.dart @@ -0,0 +1,95 @@ +import 'dart:async'; + +import 'package:flutter/material.dart'; +import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/chief_complaint_card.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; +import 'package:provider/provider.dart'; + +class DentalChiefComplaintsPage extends StatefulWidget { + const DentalChiefComplaintsPage({super.key}); + + @override + State createState() => _DentalChiefComplaintsPageState(); +} + +class _DentalChiefComplaintsPageState extends State { + late AppState appState; + late BookAppointmentsViewModel bookAppointmentsViewModel; + + @override + void initState() { + scheduleMicrotask(() { + bookAppointmentsViewModel.getDentalChiefComplaintsList(); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + bookAppointmentsViewModel = Provider.of(context, listen: false); + appState = getIt.get(); + return CollapsingListView( + title: "Dental Chief Complaints".needTranslation, + child: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 24.h), + child: Consumer(builder: (context, bookAppointmentsVM, child) { + return ListView.separated( + padding: EdgeInsets.only(top: 24.h), + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: bookAppointmentsVM.isChiefComplaintsListLoading ? 5 : bookAppointmentsVM.dentalChiefComplaintsList.length, + itemBuilder: (context, index) { + return bookAppointmentsVM.isChiefComplaintsListLoading + ? ChiefComplaintCard( + bookAppointmentsVM: bookAppointmentsVM, + dentalChiefComplaintsListResponseModel: DentalChiefComplaintsListResponseModel(), + isLoading: bookAppointmentsVM.isChiefComplaintsListLoading, + ) + : AnimationConfiguration.staggeredList( + position: index, + duration: const Duration(milliseconds: 500), + child: SlideAnimation( + verticalOffset: 100.0, + child: FadeInAnimation( + child: AnimatedContainer( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOut, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true), + child: ChiefComplaintCard( + bookAppointmentsVM: bookAppointmentsVM, + dentalChiefComplaintsListResponseModel: bookAppointmentsVM.dentalChiefComplaintsList[index], + isLoading: bookAppointmentsVM.isChiefComplaintsListLoading, + ).onPress(() { + bookAppointmentsVM.setSelectedChiefComplaintID(bookAppointmentsVM.dentalChiefComplaintsList[index].iD!); + bookAppointmentsViewModel.setIsDoctorsListLoading(true); + Navigator.of(context).push( + CustomPageRoute( + page: SelectDoctorPage(), + ), + ); + }), + ), + ), + ), + ); + }, + separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h), + ); + }), + ), + ), + ); + } +} diff --git a/lib/presentation/book_appointment/select_clinic_page.dart b/lib/presentation/book_appointment/select_clinic_page.dart index 1c33dd6..ada4809 100644 --- a/lib/presentation/book_appointment/select_clinic_page.dart +++ b/lib/presentation/book_appointment/select_clinic_page.dart @@ -18,6 +18,7 @@ import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/faculity_selection/facility_type_selection_widget.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/dental_chief_complaints_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_livecare_clinic_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/clinic_card.dart'; @@ -222,124 +223,13 @@ class _SelectClinicPageState extends State { void handleDoctorScreen(GetClinicsListResponseModel clinic) async { if (widget.isFromRegionFlow) { //Dental Clinic Flow - if (clinic.clinicID == 17) { - LoaderBottomSheet.showLoader(loadingText: "Checking for an existing dental plan, Please wait...".needTranslation); - await bookAppointmentsViewModel.getPatientDentalEstimation(projectID: int.parse(bookAppointmentsViewModel.currentlySelectedHospitalFromRegionFlow ?? "0")).then((value) { - LoaderBottomSheet.hideLoader(); - if (bookAppointmentsViewModel.patientDentalPlanEstimationList.isNotEmpty) { - showCommonBottomSheetWithoutHeight( - // title: LocaleKeys.notice.tr(context: context), - title: "Dental treatment plan".needTranslation, - context, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "You have an existing treatment plan: ".needTranslation.toText14(weight: FontWeight.w500), - SizedBox(height: 8.h), - Container( - width: double.infinity, - padding: EdgeInsets.all(16.h), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - borderRadius: 20.h, - hasShadow: true, - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ListView.separated( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - itemCount: bookAppointmentsViewModel.patientDentalPlanEstimationList.length, - separatorBuilder: (_, __) { - return Column( - children: [ - SizedBox(height: 8.h), - Divider(height: 1, color: AppColors.greyColor), - SizedBox(height: 8.h), - ], - ); - }, - itemBuilder: (context, index) { - return Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - bookAppointmentsViewModel.patientDentalPlanEstimationList[index].procedureName!.toText12(isBold: true), - AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "${bookAppointmentsViewModel.totalTimeNeededForDentalProcedure} Mins".needTranslation), - ], - ); - }, - ), - SizedBox( - height: 16.h, - ), - Divider(height: 1, color: AppColors.greyColor), - SizedBox( - height: 8.h, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - "Total time required".needTranslation.toText14(isBold: true), - AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "30 Mins".needTranslation), - ], - ) - ], - ), - ), - SizedBox(height: 16.h), - "Would you like to continue it?".needTranslation.toText14(weight: FontWeight.w500), - SizedBox(height: 16.h), - Row( - children: [ - Expanded( - child: CustomButton( - text: LocaleKeys.cancel.tr(), - onPressed: () { - bookAppointmentsViewModel.setIsContinueDentalPlan(false); - Navigator.of(context).pop(); - }, - backgroundColor: AppColors.primaryRedColor, - borderColor: AppColors.primaryRedColor, - textColor: AppColors.whiteColor, - icon: AppAssets.cancel, - iconColor: AppColors.whiteColor, - ), - ), - SizedBox(width: 8.h), - Expanded( - child: CustomButton( - text: LocaleKeys.confirm.tr(), - onPressed: () async { - bookAppointmentsViewModel.setIsContinueDentalPlan(true); - Navigator.of(context).push( - CustomPageRoute( - page: SelectDoctorPage(), - ), - ); - }, - backgroundColor: AppColors.bgGreenColor, - borderColor: AppColors.bgGreenColor, - textColor: Colors.white, - icon: AppAssets.confirm, - ), - ), - ], - ) - ], - ), - callBackFunc: () {}, - isFullScreen: false, - isCloseButtonVisible: true, - ); - } else { - // Navigate to Chief Complaint Screen - } - }); + if (clinic.clinicID == 17 && appState.isAuthenticated) { + initDentalAppointmentBookingFlow(int.parse(bookAppointmentsViewModel.currentlySelectedHospitalFromRegionFlow ?? "0")); } else { + bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); Navigator.of(context).push( CustomPageRoute( - page: SelectDoctorPage(), + page: DentalChiefComplaintsPage(), ), ); } @@ -361,7 +251,18 @@ class _SelectClinicPageState extends State { showCommonBottomSheetWithoutHeight(context, title: "", titleWidget: Consumer(builder: (_, data, __) => getTitle(data)), isDismissible: false, child: Consumer(builder: (_, data, __) { return getRegionalSelectionWidget(data); - }), callBackFunc: () {}); + }), callBackFunc: () { + if (type == RegionBottomSheetType.REGION_FOR_DENTAL_AND_LASER && appState.isAuthenticated) { + initDentalAppointmentBookingFlow(regionalViewModel.selectedHospital?.hospitalList.first.iD); + } else { + bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); + Navigator.of(context).push( + CustomPageRoute( + page: DentalChiefComplaintsPage(), + ), + ); + } + }); } Widget getRegionalSelectionWidget(AppointmentViaRegionViewmodel data) { @@ -378,12 +279,12 @@ class _SelectClinicPageState extends State { return HospitalBottomSheetBody(); } if (data.bottomSheetState == AppointmentViaRegionState.DOCTOR_SELECTION) { - //if the region screen is opened for the dental clinic thenthe project id will be in the hospital list as the list is formed form the get project api + //if the region screen is opened for the dental clinic then the project id will be in the hospital list as the list is formed form the get project api var id = ""; if (data.regionBottomSheetType == RegionBottomSheetType.REGION_FOR_DENTAL_AND_LASER) { - id = regionalViewModel.selectedHospital?.hospitalList?.first?.iD?.toString() ?? ""; + id = regionalViewModel.selectedHospital?.hospitalList.first.iD?.toString() ?? ""; } else { - id = regionalViewModel.selectedHospital?.patientDoctorAppointmentList?.first?.projectID?.toString() ?? ""; + id = regionalViewModel.selectedHospital?.patientDoctorAppointmentList?.first.projectID?.toString() ?? ""; } bookAppointmentsViewModel.setProjectID(id); return SizedBox.shrink(); @@ -410,4 +311,128 @@ class _SelectClinicPageState extends State { }); } } + + void initDentalAppointmentBookingFlow(int projectID) async { + bookAppointmentsViewModel.setProjectID(projectID.toString()); + LoaderBottomSheet.showLoader(loadingText: "Checking for an existing dental plan, Please wait...".needTranslation); + await bookAppointmentsViewModel.getPatientDentalEstimation(projectID: projectID).then((value) { + LoaderBottomSheet.hideLoader(); + if (bookAppointmentsViewModel.patientDentalPlanEstimationList.isNotEmpty) { + showCommonBottomSheetWithoutHeight( + // title: LocaleKeys.notice.tr(context: context), + title: "Dental treatment plan".needTranslation, + context, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "You have an existing treatment plan: ".needTranslation.toText14(weight: FontWeight.w500), + SizedBox(height: 8.h), + Container( + width: double.infinity, + padding: EdgeInsets.all(16.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: true, + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListView.separated( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: bookAppointmentsViewModel.patientDentalPlanEstimationList.length, + separatorBuilder: (_, __) { + return Column( + children: [ + SizedBox(height: 8.h), + Divider(height: 1, color: AppColors.greyColor), + SizedBox(height: 8.h), + ], + ); + }, + itemBuilder: (context, index) { + return Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + bookAppointmentsViewModel.patientDentalPlanEstimationList[index].procedureName!.toText12(isBold: true), + AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "${bookAppointmentsViewModel.totalTimeNeededForDentalProcedure} Mins".needTranslation), + ], + ); + }, + ), + SizedBox( + height: 16.h, + ), + Divider(height: 1, color: AppColors.greyColor), + SizedBox( + height: 8.h, + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "Total time required".needTranslation.toText14(isBold: true), + AppCustomChipWidget(icon: AppAssets.appointment_time_icon, labelText: "30 Mins".needTranslation), + ], + ) + ], + ), + ), + SizedBox(height: 16.h), + "Would you like to continue it?".needTranslation.toText14(weight: FontWeight.w500), + SizedBox(height: 16.h), + Row( + children: [ + Expanded( + child: CustomButton( + text: LocaleKeys.cancel.tr(), + onPressed: () { + bookAppointmentsViewModel.setIsContinueDentalPlan(false); + bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); + Navigator.of(context).pop(); + Navigator.of(context).push( + CustomPageRoute( + page: DentalChiefComplaintsPage(), + ), + ); + }, + backgroundColor: AppColors.primaryRedColor, + borderColor: AppColors.primaryRedColor, + textColor: AppColors.whiteColor, + icon: AppAssets.cancel, + iconColor: AppColors.whiteColor, + ), + ), + SizedBox(width: 8.h), + Expanded( + child: CustomButton( + text: LocaleKeys.confirm.tr(), + onPressed: () async { + bookAppointmentsViewModel.setIsContinueDentalPlan(true); + Navigator.of(context).pop(); + Navigator.of(context).push( + CustomPageRoute( + page: SelectDoctorPage(), + ), + ); + }, + backgroundColor: AppColors.bgGreenColor, + borderColor: AppColors.bgGreenColor, + textColor: Colors.white, + icon: AppAssets.confirm, + ), + ), + ], + ) + ], + ), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } else { + // Navigate to Chief Complaint Screen + } + }); + } } diff --git a/lib/presentation/book_appointment/select_doctor_page.dart b/lib/presentation/book_appointment/select_doctor_page.dart index 8d24b43..b0b2a45 100644 --- a/lib/presentation/book_appointment/select_doctor_page.dart +++ b/lib/presentation/book_appointment/select_doctor_page.dart @@ -21,7 +21,6 @@ import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; -import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:provider/provider.dart'; class SelectDoctorPage extends StatefulWidget { @@ -45,7 +44,11 @@ class _SelectDoctorPageState extends State { if (bookAppointmentsViewModel.isLiveCareSchedule) { bookAppointmentsViewModel.getLiveCareDoctorsList(); } else { - bookAppointmentsViewModel.getDoctorsList(); + if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) { + bookAppointmentsViewModel.getDentalChiefComplaintDoctorsList(); + } else { + bookAppointmentsViewModel.getDoctorsList(); + } } }); super.initState(); @@ -66,7 +69,6 @@ class _SelectDoctorPageState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // TODO: Implement doctor filter functionality SizedBox(height: 16.h), Row( spacing: 8.h, diff --git a/lib/presentation/book_appointment/widgets/chief_complaint_card.dart b/lib/presentation/book_appointment/widgets/chief_complaint_card.dart new file mode 100644 index 0000000..e80596c --- /dev/null +++ b/lib/presentation/book_appointment/widgets/chief_complaint_card.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class ChiefComplaintCard extends StatelessWidget { + ChiefComplaintCard({super.key, required this.isLoading, required this.bookAppointmentsVM, required this.dentalChiefComplaintsListResponseModel}); + + bool isLoading; + BookAppointmentsViewModel bookAppointmentsVM; + DentalChiefComplaintsListResponseModel dentalChiefComplaintsListResponseModel; + + @override + Widget build(BuildContext context) { + AppState appState = getIt.get(); + return Container( + padding: EdgeInsets.all(16.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24.h, + hasShadow: false, + ), + child: Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ + Expanded(child: (isLoading ? "Cardiology" : dentalChiefComplaintsListResponseModel.name)!.toText16(isBold: true).toShimmer2(isShow: isLoading)), + Transform.flip( + flipX: appState.isArabic(), + child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, width: 40.h, height: 40.h, fit: BoxFit.contain, iconColor: AppColors.textColor).toShimmer2(isShow: isLoading)), + ]), + ); + } +} diff --git a/lib/presentation/book_appointment/widgets/clinic_card.dart b/lib/presentation/book_appointment/widgets/clinic_card.dart index c157d05..cab3b1a 100644 --- a/lib/presentation/book_appointment/widgets/clinic_card.dart +++ b/lib/presentation/book_appointment/widgets/clinic_card.dart @@ -36,7 +36,8 @@ class ClinicCard extends StatelessWidget { (clinicsListResponseModel.isLiveCareClinicAndOnline ?? true) ? Utils.buildSvgWithAssets(icon: AppAssets.livecare_clinic_icon, width: 32.h, height: 32.h, fit: BoxFit.contain).toShimmer2(isShow: isLoading) : SizedBox.shrink(), - ]), + ], + ), SizedBox(height: 16.h), Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( @@ -44,7 +45,7 @@ class ClinicCard extends StatelessWidget { .toText16(isBold: true) .toShimmer2(isShow: isLoading)), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, width: 40.h, height: 40.h, fit: BoxFit.contain, iconColor: AppColors.textColor).toShimmer2(isShow: isLoading)), ]), ], From d220be72831685cb30c41c464a08550c2c31ddc3 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 6 Oct 2025 14:24:32 +0300 Subject: [PATCH 12/19] Tamara payment flow done --- lib/core/api_consts.dart | 9 +- lib/features/payfort/payfort_repo.dart | 103 +++++++ lib/features/payfort/payfort_view_model.dart | 50 ++++ .../appointment_payment_page.dart | 258 +++++++++++------- .../appointment_checkin_bottom_sheet.dart | 2 +- .../immediate_livecare_payment_page.dart | 128 ++++++--- 6 files changed, 410 insertions(+), 140 deletions(-) diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 177a541..98c7ec0 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -727,7 +727,7 @@ const FAMILY_FILES= 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatu class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT @@ -745,6 +745,7 @@ class ApiConsts { static String TAMARA_URL = "https://mdlaboratories.com/tamaralive/Home/Checkout"; static String GET_TAMARA_INSTALLMENTS_URL = "https://mdlaboratories.com/tamaralive/Home/GetInstallments"; + static String GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid='; // static String GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments"; @@ -760,6 +761,7 @@ class ApiConsts { SERVICE_URL = "https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx"; TAMARA_URL = "https://mdlaboratories.com/tamaralive/Home/Checkout"; GET_TAMARA_INSTALLMENTS_URL = "https://mdlaboratories.com/tamaralive/Home/GetInstallments"; + GET_TAMARA_PAYMENT_STATUS = 'https://mdlaboratories.com/tamaralive/api/OnlineTamara/order_status?orderid='; break; case AppEnvironmentTypeEnum.dev: baseUrl = "https://uat.hmgwebservices.com/"; @@ -768,6 +770,7 @@ class ApiConsts { SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout"; GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments"; + GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid='; break; case AppEnvironmentTypeEnum.uat: baseUrl = "https://uat.hmgwebservices.com/"; @@ -776,6 +779,7 @@ class ApiConsts { SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout"; GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments"; + GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid='; break; case AppEnvironmentTypeEnum.preProd: @@ -785,6 +789,7 @@ class ApiConsts { SERVICE_URL = "https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx"; TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout"; GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments"; + GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid='; break; case AppEnvironmentTypeEnum.qa: baseUrl = "https://uat.hmgwebservices.com/"; @@ -793,6 +798,7 @@ class ApiConsts { SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout"; GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments"; + GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid='; break; case AppEnvironmentTypeEnum.staging: baseUrl = "https://uat.hmgwebservices.com/"; @@ -801,6 +807,7 @@ class ApiConsts { SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; TAMARA_URL = "https://epharmacy.hmg.com/tamara/Home/Checkout"; GET_TAMARA_INSTALLMENTS_URL = "https://epharmacy.hmg.com/tamara/Home/getinstallments"; + GET_TAMARA_PAYMENT_STATUS = 'https://epharmacy.hmg.com/tamara/api/OnlineTamara/order_status?orderid='; break; } } diff --git a/lib/features/payfort/payfort_repo.dart b/lib/features/payfort/payfort_repo.dart index 9f836d1..74a323a 100644 --- a/lib/features/payfort/payfort_repo.dart +++ b/lib/features/payfort/payfort_repo.dart @@ -18,6 +18,13 @@ abstract class PayfortRepo { Future>> generateSdkSignatureFromAPI({required SdkTokenRequest tokenRequest}); Future>> checkPaymentStatus({required String transactionID}); + + Future>> checkTamaraPaymentStatus({required String transactionID}); + + Future>> markAppointmentAsTamaraPaid({required int projectID, required int appointmentNo}); + + Future>> updateTamaraRequestStatus( + {required String responseMessage, required String status, required String clientRequestID, required String tamaraOrderID}); } class PayfortRepoImp implements PayfortRepo { @@ -147,4 +154,100 @@ class PayfortRepoImp implements PayfortRepo { return Left(UnknownFailure(e.toString())); } } + + @override + Future> checkTamaraPaymentStatus({required String transactionID}) async { + try { + GenericApiModel? apiResponse; + Failure? failure; + await apiClient.get( + '${ApiConsts.GET_TAMARA_PAYMENT_STATUS}$transactionID', + isExternal: true, + isAllowAny: true, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: response, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } + + @override + Future> updateTamaraRequestStatus({required String responseMessage, required String status, required String clientRequestID, required String tamaraOrderID}) async { + Map body = { + "Response_Message": responseMessage, + "ClientRequestID": clientRequestID, + "Status": status, + "FortID": tamaraOrderID, // Tamara order ID + "LanguageID": 1, + "Installments_Number": 3, + }; + try { + GenericApiModel? apiResponse; + Failure? failure; + await apiClient.post(UPDATE_TAMARA_STATUS, body: body, onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: response, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, isAllowAny: true, isPaymentServices: true); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } + + @override + Future> markAppointmentAsTamaraPaid({required int projectID, required int appointmentNo}) async { + Map body = {"ProjectID": projectID, "AppointmentNo": appointmentNo, "LanguageID": 1}; + try { + GenericApiModel? apiResponse; + Failure? failure; + await apiClient.post(MARK_APPOINTMENT_TAMARA_STATUS, body: body, onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: response, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, isAllowAny: true, isPaymentServices: true); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/payfort/payfort_view_model.dart b/lib/features/payfort/payfort_view_model.dart index 6b67ce9..89effcd 100644 --- a/lib/features/payfort/payfort_view_model.dart +++ b/lib/features/payfort/payfort_view_model.dart @@ -94,6 +94,40 @@ class PayfortViewModel extends ChangeNotifier { ); } + Future checkTamaraPaymentStatus({required String transactionID, Function(dynamic)? onSuccess, Function(String)? onError}) async { + final result = await payfortRepo.checkTamaraPaymentStatus(transactionID: transactionID); + + result.fold( + (failure) async { + onError!(failure.message); + }, + (apiResponse) { + print(apiResponse.data); + if (onSuccess != null) { + onSuccess(apiResponse); + } + // } + }, + ); + } + + Future updateTamaraRequestStatus( + {required String responseMessage, required String status, required String clientRequestID, required String tamaraOrderID, Function(dynamic)? onSuccess, Function(String)? onError}) async { + final result = await payfortRepo.updateTamaraRequestStatus(responseMessage: responseMessage, status: status, clientRequestID: clientRequestID, tamaraOrderID: tamaraOrderID); + + result.fold( + (failure) async { + onError!(failure.message); + }, + (apiResponse) { + print(apiResponse.data); + if (onSuccess != null) { + onSuccess(apiResponse); + } + }, + ); + } + Future _generateSdkResponse({ String? applePayAccessCode, String? merchantIdentifier, @@ -199,4 +233,20 @@ class PayfortViewModel extends ChangeNotifier { onFailed!(e.toString() as PayFortFailureResult); } } + + Future markAppointmentAsTamaraPaid({required int projectID, required int appointmentNo, Function(dynamic)? onSuccess, Function(String)? onError}) async { + final result = await payfortRepo.markAppointmentAsTamaraPaid(projectID: projectID, appointmentNo: appointmentNo); + + result.fold( + (failure) async { + onError!(failure.message); + }, + (apiResponse) { + print(apiResponse.data); + if (onSuccess != null) { + onSuccess(apiResponse); + } + }, + ); + } } diff --git a/lib/presentation/appointments/appointment_payment_page.dart b/lib/presentation/appointments/appointment_payment_page.dart index ee50ab4..3c475c1 100644 --- a/lib/presentation/appointments/appointment_payment_page.dart +++ b/lib/presentation/appointments/appointment_payment_page.dart @@ -52,6 +52,8 @@ class _AppointmentPaymentPageState extends State { String transID = ""; bool isShowTamara = false; + String tamaraPaymentStatus = ""; + String tamaraOrderID = ""; @override void initState() { @@ -117,7 +119,7 @@ class _AppointmentPaymentPageState extends State { Transform.flip( flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, + icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, width: 18.h, height: 13.h, @@ -159,7 +161,7 @@ class _AppointmentPaymentPageState extends State { Transform.flip( flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, + icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, width: 18.h, height: 13.h, @@ -196,18 +198,18 @@ class _AppointmentPaymentPageState extends State { Transform.flip( flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, - iconColor: AppColors.blackColor, - width: 18.h, - height: 13.h, - fit: BoxFit.contain, - ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), - ), - ], - ).paddingSymmetrical(16.h, 16.h), - ).paddingSymmetrical(24.h, 0.h).onPress(() { - selectedPaymentMethod = "TAMARA"; - openPaymentURL("tamara"); + icon: AppAssets.forward_arrow_icon_small, + iconColor: AppColors.blackColor, + width: 18.h, + height: 13.h, + fit: BoxFit.contain, + ).toShimmer2(isShow: myAppointmentsVM.isAppointmentPatientShareLoading), + ), + ], + ).paddingSymmetrical(16.h, 16.h), + ).paddingSymmetrical(24.h, 0.h).onPress(() { + selectedPaymentMethod = "TAMARA"; + openPaymentURL("tamara"); }) : SizedBox.shrink(), ], @@ -328,12 +330,12 @@ class _AppointmentPaymentPageState extends State { if (selectedPaymentMethod == "tamara") { if (Platform.isAndroid) { Uri uri = new Uri.dataFromString(url); - // tamaraPaymentStatus = uri.queryParameters['status']!; - // tamaraOrderID = uri.queryParameters['AuthorizePaymentId']!; + tamaraPaymentStatus = uri.queryParameters['status']!; + tamaraOrderID = uri.queryParameters['AuthorizePaymentId']!; } else { Uri uri = new Uri.dataFromString(url); - // tamaraPaymentStatus = uri.queryParameters['paymentStatus']!; - // tamaraOrderID = uri.queryParameters['orderId']!; + tamaraPaymentStatus = uri.queryParameters['paymentStatus']!; + tamaraOrderID = uri.queryParameters['orderId']!; } } @@ -359,95 +361,155 @@ class _AppointmentPaymentPageState extends State { } onBrowserExit(bool isPaymentMade) async { - print("onBrowserExit Called!!!!"); - if (selectedPaymentMethod == "TAMARA") { - // checkTamaraPaymentStatus(transID!, appo); - // if (tamaraPaymentStatus != null && tamaraPaymentStatus.toLowerCase() == "approved") { - // updateTamaraRequestStatus("success", "14", Utils.getAppointmentTransID(appo.projectID, appo.clinicID, appo.appointmentNo), tamaraOrderID, num.parse(selectedInstallments), appo); - // } else { - // updateTamaraRequestStatus("Failed", "00", Utils.getAppointmentTransID(appo.projectID, appo.clinicID, appo.appointmentNo), tamaraOrderID, num.parse(selectedInstallments), appo); - // } - } else { - checkPaymentStatus(); - // checkPaymentStatus(appo); - } + checkPaymentStatus(); } void checkPaymentStatus() async { - LoaderBottomSheet.showLoader(); - await payfortViewModel.checkPaymentStatus( - transactionID: transID, - onSuccess: (apiResponse) async { - print(apiResponse.data); - if (payfortViewModel.payfortCheckPaymentStatusResponseModel!.responseMessage!.toLowerCase() == "success") { - await myAppointmentsViewModel.createAdvancePayment( - paymentMethodName: selectedPaymentMethod, - projectID: widget.patientAppointmentHistoryResponseModel.projectID, - clinicID: widget.patientAppointmentHistoryResponseModel.clinicID, - appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), - payedAmount: payfortViewModel.payfortCheckPaymentStatusResponseModel!.amount!, - paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!, - patientID: appState.getAuthenticatedUser()!.patientId.toString(), - patientType: appState.getAuthenticatedUser()!.patientType!, - onSuccess: (value) async { - print(value); - await myAppointmentsViewModel.addAdvanceNumberRequest( - advanceNumber: Utils.isVidaPlusProject(widget.patientAppointmentHistoryResponseModel.projectID) - ? value.data['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString() - : value.data['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), - paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!, - appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), - onSuccess: (value) async { - if (widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment!) { - //TODO: Implement LiveCare Check-In API Call - await myAppointmentsViewModel.insertLiveCareVIDARequest( - clientRequestID: transID, - patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, - onSuccess: (apiResponse) { - Future.delayed(Duration(milliseconds: 500), () { - LoaderBottomSheet.hideLoader(); - Navigator.pushAndRemoveUntil( - context, - CustomPageRoute( - page: LandingNavigation(), - ), - (r) => false); - }); - }, - onError: (error) {}); - } else { - await myAppointmentsViewModel.generateAppointmentQR( - clinicID: widget.patientAppointmentHistoryResponseModel.clinicID, - projectID: widget.patientAppointmentHistoryResponseModel.projectID, - appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), - isFollowUp: myAppointmentsViewModel.patientAppointmentShareResponseModel!.isFollowup!, - onSuccess: (apiResponse) { - Future.delayed(Duration(milliseconds: 500), () { - LoaderBottomSheet.hideLoader(); - Navigator.pushAndRemoveUntil( - context, - CustomPageRoute( - page: LandingNavigation(), - ), - (r) => false); - // Navigator.of(context).push( - // CustomPageRoute(page: MyAppointmentsPage()), - // ); - }); - }); - } - }); - }); - } else { + LoaderBottomSheet.showLoader(loadingText: "Checking payment status, Please wait...".needTranslation); + if (selectedPaymentMethod == "TAMARA") { + await payfortViewModel.checkTamaraPaymentStatus( + transactionID: transID, + onSuccess: (apiResponse) async { + if (apiResponse.data["status"].toString().toLowerCase() == "success") { + tamaraOrderID = apiResponse.data["tamara_order_id"].toString(); + await payfortViewModel.updateTamaraRequestStatus(responseMessage: "success", status: "14", clientRequestID: transID, tamaraOrderID: tamaraOrderID); + await payfortViewModel.markAppointmentAsTamaraPaid( + projectID: widget.patientAppointmentHistoryResponseModel.projectID, appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo); + await myAppointmentsViewModel.addAdvanceNumberRequest( + advanceNumber: "Tamara-Advance-0000", + paymentReference: tamaraOrderID, + appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), + onSuccess: (value) async { + if (widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment!) { + //TODO: Implement LiveCare Check-In API Call + await myAppointmentsViewModel.insertLiveCareVIDARequest( + clientRequestID: tamaraOrderID, + patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, + onSuccess: (apiResponse) { + Future.delayed(Duration(milliseconds: 500), () { + LoaderBottomSheet.hideLoader(); + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }); + }, + onError: (error) {}); + } else { + await myAppointmentsViewModel.generateAppointmentQR( + clinicID: widget.patientAppointmentHistoryResponseModel.clinicID, + projectID: widget.patientAppointmentHistoryResponseModel.projectID, + appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), + isFollowUp: myAppointmentsViewModel.patientAppointmentShareResponseModel!.isFollowup!, + onSuccess: (apiResponse) { + Future.delayed(Duration(milliseconds: 500), () { + LoaderBottomSheet.hideLoader(); + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }); + }); + } + }); + } else { + await payfortViewModel.updateTamaraRequestStatus(responseMessage: "Failed", status: "00", clientRequestID: transID, tamaraOrderID: tamaraOrderID); + LoaderBottomSheet.hideLoader(); + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + }, + onError: (err) { + LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + child: Utils.getErrorWidget(loadingText: err), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, ); - } - }); + }); + } else { + await payfortViewModel.checkPaymentStatus( + transactionID: transID, + onSuccess: (apiResponse) async { + print(apiResponse.data); + if (payfortViewModel.payfortCheckPaymentStatusResponseModel!.responseMessage!.toLowerCase() == "success") { + await myAppointmentsViewModel.createAdvancePayment( + paymentMethodName: selectedPaymentMethod, + projectID: widget.patientAppointmentHistoryResponseModel.projectID, + clinicID: widget.patientAppointmentHistoryResponseModel.clinicID, + appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), + payedAmount: payfortViewModel.payfortCheckPaymentStatusResponseModel!.amount!, + paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!, + patientID: appState.getAuthenticatedUser()!.patientId.toString(), + patientType: appState.getAuthenticatedUser()!.patientType!, + onSuccess: (value) async { + print(value); + await myAppointmentsViewModel.addAdvanceNumberRequest( + advanceNumber: Utils.isVidaPlusProject(widget.patientAppointmentHistoryResponseModel.projectID) + ? value.data['OnlineCheckInAppointments'][0]['AdvanceNumber_VP'].toString() + : value.data['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), + paymentReference: payfortViewModel.payfortCheckPaymentStatusResponseModel!.fortId!, + appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), + onSuccess: (value) async { + if (widget.patientAppointmentHistoryResponseModel.isLiveCareAppointment!) { + //TODO: Implement LiveCare Check-In API Call + await myAppointmentsViewModel.insertLiveCareVIDARequest( + clientRequestID: transID, + patientAppointmentHistoryResponseModel: widget.patientAppointmentHistoryResponseModel, + onSuccess: (apiResponse) { + Future.delayed(Duration(milliseconds: 500), () { + LoaderBottomSheet.hideLoader(); + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }); + }, + onError: (error) {}); + } else { + await myAppointmentsViewModel.generateAppointmentQR( + clinicID: widget.patientAppointmentHistoryResponseModel.clinicID, + projectID: widget.patientAppointmentHistoryResponseModel.projectID, + appointmentNo: widget.patientAppointmentHistoryResponseModel.appointmentNo.toString(), + isFollowUp: myAppointmentsViewModel.patientAppointmentShareResponseModel!.isFollowup!, + onSuccess: (apiResponse) { + Future.delayed(Duration(milliseconds: 500), () { + LoaderBottomSheet.hideLoader(); + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + }); + }); + } + }); + }); + } else { + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + }); + } } openPaymentURL(String paymentMethod) { diff --git a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart index e79f26f..93f2bda 100644 --- a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart +++ b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart @@ -124,7 +124,7 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { Transform.flip( flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, + icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, width: 18.h, height: 13.h, diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart index 5437945..95d6302 100644 --- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart +++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart @@ -57,6 +57,8 @@ class _ImmediateLiveCarePaymentPageState extends State false); + Navigator.of(context).push( CustomPageRoute( - page: LandingNavigation(), + page: ImmediateLiveCarePendingRequestPage(), ), - (r) => false); - Navigator.of(context).push( - CustomPageRoute( - page: ImmediateLiveCarePendingRequestPage(), - ), - ); + ); + } else { + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: "Unknown error occurred...".needTranslation), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } } else { + await payfortViewModel.updateTamaraRequestStatus(responseMessage: "Failed", status: "00", clientRequestID: transID, tamaraOrderID: tamaraOrderID); + LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "Unknown error occurred...".needTranslation), + child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, ); } - } else { + }, + onError: (err) { + LoaderBottomSheet.hideLoader(); showCommonBottomSheetWithoutHeight( context, - child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + child: Utils.getErrorWidget(loadingText: err), callBackFunc: () {}, isFullScreen: false, isCloseButtonVisible: true, ); - } - }); + }); + } else { + await payfortViewModel.checkPaymentStatus( + transactionID: transID, + onSuccess: (apiResponse) async { + debugPrint(apiResponse.data.toString()); + if (payfortViewModel.payfortCheckPaymentStatusResponseModel!.responseMessage!.toLowerCase() == "success") { + await immediateLiveCareViewModel.addNewCallRequestForImmediateLiveCare(transID); + await immediateLiveCareViewModel.getPatientLiveCareHistory(); + LoaderBottomSheet.hideLoader(); + if (immediateLiveCareViewModel.patientHasPendingLiveCareRequest) { + Navigator.pushAndRemoveUntil( + context, + CustomPageRoute( + page: LandingNavigation(), + ), + (r) => false); + Navigator.of(context).push( + CustomPageRoute( + page: ImmediateLiveCarePendingRequestPage(), + ), + ); + } else { + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: "Unknown error occurred...".needTranslation), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + } else { + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: "Payment Failed! Please try again.".needTranslation), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + } + }); + } } openPaymentURL(String paymentMethod) { From 61007302c9dd4fc0fd180bf51844f3250a0026e9 Mon Sep 17 00:00:00 2001 From: tahaalam Date: Mon, 6 Oct 2025 16:21:05 +0300 Subject: [PATCH 13/19] appointment date filter handled --- lib/core/utils/date_util.dart | 8 ++++++++ .../my_appointments/my_appointments_view_model.dart | 8 +++++--- .../viewmodel/date_range_view_model.dart | 3 ++- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/lib/core/utils/date_util.dart b/lib/core/utils/date_util.dart index 1eb3d9f..2fbbd09 100644 --- a/lib/core/utils/date_util.dart +++ b/lib/core/utils/date_util.dart @@ -485,3 +485,11 @@ class DateUtil { return ""; } } + + +extension OnlyDate on DateTime{ + + DateTime provideDateOnly(){ + return DateTime(this.year, month, day); + } +} \ No newline at end of file diff --git a/lib/features/my_appointments/my_appointments_view_model.dart b/lib/features/my_appointments/my_appointments_view_model.dart index 916327c..f278558 100644 --- a/lib/features/my_appointments/my_appointments_view_model.dart +++ b/lib/features/my_appointments/my_appointments_view_model.dart @@ -50,6 +50,8 @@ class MyAppointmentsViewModel extends ChangeNotifier { void onTabChange(int index) { previouslySelectedTab = selectedTabIndex; selectedTabIndex = index; + start = null; + end = null; notifyListeners(); } @@ -451,12 +453,12 @@ class MyAppointmentsViewModel extends ChangeNotifier { filteredAppointmentList.add(element); } }); - filteredAppointmentList.addAll(sourceList); } else { filteredAppointmentList.clear(); sourceList.forEach((element) { try { - var dateTime = DateUtil.convertStringToDate(element.appointmentDate); + var dateTime = DateUtil.convertStringToDate(element.appointmentDate).provideDateOnly(); + if (start != null && end == null) { if (dateTime.isAtSameMomentAs(start)) { if (isUnderFilter(element)) { @@ -464,7 +466,7 @@ class MyAppointmentsViewModel extends ChangeNotifier { } } } else if (start != null && end != null) { - if ((dateTime.isAfter(start)) && (dateTime.isBefore(end))) { + if ((dateTime.isAfter(start)) && ((dateTime.isBefore(end))||((dateTime.isAtSameMomentAs(end))))) { if (isUnderFilter(element)) { filteredAppointmentList.add(element); } diff --git a/lib/widgets/date_range_selector/viewmodel/date_range_view_model.dart b/lib/widgets/date_range_selector/viewmodel/date_range_view_model.dart index 42f222b..7bdb658 100644 --- a/lib/widgets/date_range_selector/viewmodel/date_range_view_model.dart +++ b/lib/widgets/date_range_selector/viewmodel/date_range_view_model.dart @@ -1,5 +1,6 @@ import 'package:dartz/dartz.dart'; import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; import 'package:hmg_patient_app_new/features/lab/models/Range.dart'; class DateRangeSelectorRangeViewModel extends ChangeNotifier { @@ -50,7 +51,7 @@ class DateRangeSelectorRangeViewModel extends ChangeNotifier { get getCurrentYear => DateTime.now().year; calculateDatesFromRange() { - _toDate = DateTime.now(); + _toDate = DateTime.now().provideDateOnly(); switch (_currentlySelectedRange) { case Range.WEEKLY: _fromDate = _toDate!.subtract(Duration(days: 7)); From f1a60a9dfb4ccff7840be4d771e698cfe558ff3d Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 6 Oct 2025 16:35:10 +0300 Subject: [PATCH 14/19] updates --- lib/core/utils/size_utils.dart | 8 +- lib/core/utils/utils.dart | 1 + .../my_appointments_view_model.dart | 1 + lib/main.dart | 81 +++++-------------- .../appointments/my_appointments_page.dart | 1 + lib/presentation/lab/lab_orders_page.dart | 2 +- 6 files changed, 28 insertions(+), 66 deletions(-) diff --git a/lib/core/utils/size_utils.dart b/lib/core/utils/size_utils.dart index 6ad1835..e569021 100644 --- a/lib/core/utils/size_utils.dart +++ b/lib/core/utils/size_utils.dart @@ -1,8 +1,8 @@ import 'package:flutter/material.dart'; // These are the Viewport values of your Figma Design. // These are used in the code as a reference to create your UI Responsively. -const num FIGMA_DESIGN_WIDTH = 375; -const num FIGMA_DESIGN_HEIGHT = 667; +final num FIGMA_DESIGN_WIDTH = SizeUtils.width; +final num FIGMA_DESIGN_HEIGHT = SizeUtils.height; const num FIGMA_DESIGN_STATUS_BAR = 0; extension ResponsiveExtension on num { @@ -70,10 +70,10 @@ class SizeUtils { static late DeviceType deviceType; /// Device's Height - static late double height; + static double height = 667; /// Device's Width - static late double width; + static double width = 375; static void setScreenSize( BoxConstraints constraints, diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart index 2bff2ac..c9eef9d 100644 --- a/lib/core/utils/utils.dart +++ b/lib/core/utils/utils.dart @@ -757,4 +757,5 @@ class Utils { } return isHavePrivilege; } + } diff --git a/lib/features/my_appointments/my_appointments_view_model.dart b/lib/features/my_appointments/my_appointments_view_model.dart index 916327c..0c9509a 100644 --- a/lib/features/my_appointments/my_appointments_view_model.dart +++ b/lib/features/my_appointments/my_appointments_view_model.dart @@ -153,6 +153,7 @@ class MyAppointmentsViewModel extends ChangeNotifier { patientAppointmentsHistoryList.addAll(patientUpcomingAppointmentsHistoryList); patientAppointmentsHistoryList.addAll(patientArrivedAppointmentsHistoryList); filteredAppointmentList.addAll(patientAppointmentsHistoryList); + print('Upcoming Appointments: ${patientUpcomingAppointmentsHistoryList.length}'); print('Arrived Appointments: ${patientArrivedAppointmentsHistoryList.length}'); print('All Appointments: ${patientAppointmentsHistoryList.length}'); diff --git a/lib/main.dart b/lib/main.dart index ac11f8f..20507d0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -79,94 +79,53 @@ void main() async { fallbackLocale: Locale('en', 'US'), child: MultiProvider(providers: [ ChangeNotifierProvider( - create: (_) => LabViewModel( - labRepo: getIt(), - errorHandlerService: getIt(), - navigationService: getIt()), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => RadiologyViewModel( - radiologyRepo: getIt(), - errorHandlerService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => PrescriptionsViewModel( - prescriptionsRepo: getIt(), - errorHandlerService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => InsuranceViewModel( - insuranceRepo: getIt(), - errorHandlerService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => MedicalFileViewModel( - medicalFileRepo: getIt(), - errorHandlerService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => ProfileSettingsViewModel(), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => MyAppointmentsViewModel( - myAppointmentsRepo: getIt(), - errorHandlerService: getIt(), - appState: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => PayfortViewModel( - payfortRepo: getIt(), - errorHandlerService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => HabibWalletViewModel( - habibWalletRepo: getIt(), - errorHandlerService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => BookAppointmentsViewModel( - bookAppointmentsRepo: getIt(), - errorHandlerService: getIt(), - navigationService: getIt(), - myAppointmentsViewModel: getIt(), - locationUtils: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => ImmediateLiveCareViewModel( - immediateLiveCareRepo: getIt(), - errorHandlerService: getIt(), - navigationService: getIt(), - myAppointmentsViewModel: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => AuthenticationViewModel( - authenticationRepo: getIt(), - appState: getIt(), - dialogService: getIt(), - errorHandlerService: getIt(), - navigationService: getIt(), - cacheService: getIt(), - localAuthService: getIt(), - ), + create: (_) => getIt.get(), ), ChangeNotifierProvider( - create: (_) => AppointmentViaRegionViewmodel( - navigationService: getIt(), appState: getIt())), + create: (_) => getIt.get(), + ), ChangeNotifierProvider( - create: (_) => LabHistoryViewModel()), + create: (_) => getIt.get(), + ), ChangeNotifierProvider( - create: (_) => DateRangeSelectorRangeViewModel()) , + create: (_) => getIt.get(), + ), ChangeNotifierProvider( - create: (_) => DoctorFilterViewModel()) + create: (_) => getIt.get(), + ) ], child: MyApp()), ), ); diff --git a/lib/presentation/appointments/my_appointments_page.dart b/lib/presentation/appointments/my_appointments_page.dart index c939234..150f0bf 100644 --- a/lib/presentation/appointments/my_appointments_page.dart +++ b/lib/presentation/appointments/my_appointments_page.dart @@ -177,6 +177,7 @@ class _MyAppointmentsPageState extends State { separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h), ), + SizedBox(height: 24.h), ], ); } diff --git a/lib/presentation/lab/lab_orders_page.dart b/lib/presentation/lab/lab_orders_page.dart index 4d7066f..882c737 100644 --- a/lib/presentation/lab/lab_orders_page.dart +++ b/lib/presentation/lab/lab_orders_page.dart @@ -1 +1 @@ -import 'dart:async'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/LabResultByHospital.dart'; import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; import '../../widgets/appbar/collapsing_list_view.dart'; class LabOrdersPage extends StatefulWidget { const LabOrdersPage({super.key}); @override State createState() => _LabOrdersPageState(); } class _LabOrdersPageState extends State { late LabViewModel labProvider; late DateRangeSelectorRangeViewModel rangeViewModel; late AppState _appState; List?> labSuggestions = []; int? expandedIndex; String? selectedFilterText = ''; int activeIndex = 0; @override void initState() { scheduleMicrotask(() { labProvider.initLabProvider(); }); super.initState(); } @override Widget build(BuildContext context) { labProvider = Provider.of(context); rangeViewModel = Provider.of(context); _appState = getIt(); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( title: LocaleKeys.labResults.tr(), search: () async { final lavVM = Provider.of(context, listen: false); if (lavVM.isLabOrdersLoading) { return; } else { String? value = await Navigator.of(context).push( CustomPageRoute( page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions), fullScreenDialog: true, direction: AxisDirection.down, ), ); if (value != null) { selectedFilterText = value; lavVM.filterLabReports(value); } } }, child: SingleChildScrollView( padding: EdgeInsets.all(24.h), physics: NeverScrollableScrollPhysics(), child: Consumer( builder: (context, model, child) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.h), CustomTabBar( activeTextColor: Color(0xffED1C2B), activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), tabs: [ CustomTabBarModel(null, "By Visit".needTranslation), CustomTabBarModel(null, "By Test".needTranslation), // CustomTabBarModel(null, "Completed".needTranslation), ], onTabChange: (index) { activeIndex = index; setState(() {}); }, ), SizedBox(height: 16.h), selectedFilterText!.isNotEmpty ? CustomChipWidget( chipText: selectedFilterText!, chipType: ChipTypeEnum.alert, isSelected: true, ) : SizedBox(), activeIndex == 0 ? ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), padding: EdgeInsets.zero, itemCount: model.isLabOrdersLoading ? 5 : model.patientLabOrders.isNotEmpty ? model.patientLabOrders.length : 1, itemBuilder: (context, index) { final isExpanded = expandedIndex == index; return model.isLabOrdersLoading ? LabResultItemView( onTap: () {}, labOrder: null, index: index, isLoading: true, ) : model.patientLabOrders.isNotEmpty ? AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 500), child: SlideAnimation( verticalOffset: 100.0, child: FadeInAnimation( child: LabResultItemView( onTap: () { model.currentlySelectedPatientOrder = model.patientLabOrders[ index]; labProvider.getPatientLabResultByHospital(model.patientLabOrders[ index]); labProvider .getPatientSpecialResult( model.patientLabOrders[ index]); Navigator.push( context, CustomPageRoute( page: LabResultByHospitals(), )); }, labOrder: model.patientLabOrders[index], index: index, isExpanded: isExpanded), ), ), ) : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation); }, ) : ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), padding: EdgeInsets.zero, itemCount: model.isLabOrdersLoading ? 5 : model.uniqueTests.toList().isNotEmpty ? model.uniqueTests.toList().length : 1, itemBuilder: (context, index) { final isExpanded = expandedIndex == index; return model.isLabOrdersLoading ? LabResultItemView( onTap: () {}, labOrder: null, index: index, isLoading: true, ) : model.uniqueTests.toList().isNotEmpty ? AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 500), child: SlideAnimation( verticalOffset: 100.0, child: FadeInAnimation( child: LabOrderByTest( appState: _appState, onTap: () { if (model.uniqueTests.toList()[index].model != null) { rangeViewModel.flush(); model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!, (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!)); } }, tests: model.uniqueTests.toList()[index], index: index, isExpanded: isExpanded)), ), ) : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation); }, ) ], ); }, ), ), )); } Color getLabOrderStatusColor(num status) { switch (status) { case 44: return AppColors.warningColorYellow; case 45: return AppColors.warningColorYellow; case 16: return AppColors.successColor; case 17: return AppColors.successColor; default: return AppColors.greyColor; } } String getLabOrderStatusText(num status) { switch (status) { case 44: return LocaleKeys.resultsPending.tr(context: context); case 45: return LocaleKeys.resultsPending.tr(context: context); case 16: return LocaleKeys.resultsAvailable.tr(context: context); case 17: return LocaleKeys.resultsAvailable.tr(context: context); default: return ""; } } getLabSuggestions(LabViewModel model) { if (model.patientLabOrders.isEmpty) { return []; } return model.patientLabOrders.map((m) => m.testDetails).toList(); } } \ No newline at end of file +import 'dart:async'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/lab/models/resp_models/patient_lab_orders_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_order_by_test.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_result_via_hospital/LabResultByHospital.dart'; import 'package:hmg_patient_app_new/presentation/lab/search_lab_report.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:provider/provider.dart'; import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; import '../../widgets/appbar/collapsing_list_view.dart'; class LabOrdersPage extends StatefulWidget { const LabOrdersPage({super.key}); @override State createState() => _LabOrdersPageState(); } class _LabOrdersPageState extends State { late LabViewModel labProvider; late DateRangeSelectorRangeViewModel rangeViewModel; late AppState _appState; List?> labSuggestions = []; int? expandedIndex; String? selectedFilterText = ''; int activeIndex = 0; @override void initState() { scheduleMicrotask(() { labProvider.initLabProvider(); }); super.initState(); } @override Widget build(BuildContext context) { labProvider = Provider.of(context, listen: false); rangeViewModel = Provider.of(context); _appState = getIt(); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( title: LocaleKeys.labResults.tr(), search: () async { final lavVM = Provider.of(context, listen: false); if (lavVM.isLabOrdersLoading) { return; } else { String? value = await Navigator.of(context).push( CustomPageRoute( page: SearchLabResultsContent(labSuggestionsList: lavVM.labSuggestions), fullScreenDialog: true, direction: AxisDirection.down, ), ); if (value != null) { selectedFilterText = value; lavVM.filterLabReports(value); } } }, child: SingleChildScrollView( padding: EdgeInsets.all(24.h), physics: NeverScrollableScrollPhysics(), child: Consumer( builder: (context, model, child) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 16.h), CustomTabBar( activeTextColor: Color(0xffED1C2B), activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), tabs: [ CustomTabBarModel(null, "By Visit".needTranslation), CustomTabBarModel(null, "By Test".needTranslation), // CustomTabBarModel(null, "Completed".needTranslation), ], onTabChange: (index) { activeIndex = index; setState(() {}); }, ), SizedBox(height: 16.h), selectedFilterText!.isNotEmpty ? CustomChipWidget( chipText: selectedFilterText!, chipType: ChipTypeEnum.alert, isSelected: true, ) : SizedBox(), activeIndex == 0 ? ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), padding: EdgeInsets.zero, itemCount: model.isLabOrdersLoading ? 5 : model.patientLabOrders.isNotEmpty ? model.patientLabOrders.length : 1, itemBuilder: (context, index) { final isExpanded = expandedIndex == index; return model.isLabOrdersLoading ? LabResultItemView( onTap: () {}, labOrder: null, index: index, isLoading: true, ) : model.patientLabOrders.isNotEmpty ? AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 500), child: SlideAnimation( verticalOffset: 100.0, child: FadeInAnimation( child: LabResultItemView( onTap: () { model.currentlySelectedPatientOrder = model.patientLabOrders[ index]; labProvider.getPatientLabResultByHospital(model.patientLabOrders[ index]); labProvider .getPatientSpecialResult( model.patientLabOrders[ index]); Navigator.push( context, CustomPageRoute( page: LabResultByHospitals(), )); }, labOrder: model.patientLabOrders[index], index: index, isExpanded: isExpanded), ), ), ) : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation); }, ) : ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), padding: EdgeInsets.zero, itemCount: model.isLabOrdersLoading ? 5 : model.uniqueTests.toList().isNotEmpty ? model.uniqueTests.toList().length : 1, itemBuilder: (context, index) { final isExpanded = expandedIndex == index; return model.isLabOrdersLoading ? LabResultItemView( onTap: () {}, labOrder: null, index: index, isLoading: true, ) : model.uniqueTests.toList().isNotEmpty ? AnimationConfiguration.staggeredList( position: index, duration: const Duration(milliseconds: 500), child: SlideAnimation( verticalOffset: 100.0, child: FadeInAnimation( child: LabOrderByTest( appState: _appState, onTap: () { if (model.uniqueTests.toList()[index].model != null) { rangeViewModel.flush(); model.getPatientLabResult(model.uniqueTests.toList()[index].model!, model.uniqueTests.toList()[index].description!, (_appState.isArabic() ? model.uniqueTests.toList()[index].testDescriptionAr! : model.uniqueTests.toList()[index].testDescriptionEn!)); } }, tests: model.uniqueTests.toList()[index], index: index, isExpanded: isExpanded)), ), ) : Utils.getNoDataWidget(context, noDataText: "You don't have any lab results yet.".needTranslation); }, ) ], ); }, ), ), )); } Color getLabOrderStatusColor(num status) { switch (status) { case 44: return AppColors.warningColorYellow; case 45: return AppColors.warningColorYellow; case 16: return AppColors.successColor; case 17: return AppColors.successColor; default: return AppColors.greyColor; } } String getLabOrderStatusText(num status) { switch (status) { case 44: return LocaleKeys.resultsPending.tr(context: context); case 45: return LocaleKeys.resultsPending.tr(context: context); case 16: return LocaleKeys.resultsAvailable.tr(context: context); case 17: return LocaleKeys.resultsAvailable.tr(context: context); default: return ""; } } getLabSuggestions(LabViewModel model) { if (model.patientLabOrders.isEmpty) { return []; } return model.patientLabOrders.map((m) => m.testDetails).toList(); } } \ No newline at end of file From 8ff5566f0be5274f66b93071310579e6ab6fc608 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Mon, 6 Oct 2025 17:16:24 +0300 Subject: [PATCH 15/19] dependencies update --- lib/core/dependencies.dart | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index f2f6183..638d80f 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -8,6 +8,7 @@ import 'package:hmg_patient_app_new/features/authentication/authentication_view_ import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/common/common_repo.dart'; +import 'package:hmg_patient_app_new/features/doctor_filter/doctor_filter_view_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_repo.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_repo.dart'; @@ -34,6 +35,7 @@ import 'package:hmg_patient_app_new/services/firebase_service.dart'; import 'package:hmg_patient_app_new/services/localauth_service.dart'; import 'package:hmg_patient_app_new/services/logger_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; +import 'package:hmg_patient_app_new/widgets/date_range_selector/viewmodel/date_range_view_model.dart'; import 'package:local_auth/local_auth.dart'; import 'package:logger/web.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -171,6 +173,14 @@ class AppDependencies { authenticationRepo: getIt(), cacheService: getIt(), navigationService: getIt(), dialogService: getIt(), appState: getIt(), errorHandlerService: getIt(), localAuthService: getIt()), ); + getIt.registerLazySingleton( + () => DateRangeSelectorRangeViewModel(), + ); + + getIt.registerLazySingleton( + () => DoctorFilterViewModel(), + ); + // Screen-specific VMs → Factory // getIt.registerFactory( // () => BookAppointmentsViewModel( From d918b6e4645be019499913d1203b2115aee20bdd Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Tue, 7 Oct 2025 08:28:14 +0300 Subject: [PATCH 16/19] family screen & widgets --- assets/images/svg/active-check.svg | 3 + assets/images/svg/alert-square.svg | 3 + assets/images/svg/arrow-right.svg | 3 + assets/images/svg/delete_icon.svg | 3 + lib/core/api/api_client.dart | 62 +-- lib/core/api_consts.dart | 4 +- lib/core/app_assets.dart | 4 + lib/core/app_state.dart | 13 +- lib/core/dependencies.dart | 6 +- lib/core/enums.dart | 6 +- lib/core/utils/request_utils.dart | 2 +- lib/core/utils/utils.dart | 11 +- .../authentication/authentication_repo.dart | 98 +++-- .../authentication_view_model.dart | 85 ++-- .../authenticated_user_resp_model.dart | 307 +++++++------- .../medical_file/medical_file_repo.dart | 78 +++- .../medical_file/medical_file_view_model.dart | 329 +++++++-------- .../models/family_file_response_model.dart | 147 +++---- lib/presentation/home/landing_page.dart | 2 + .../medical_file/medical_file_page.dart | 283 +++++++------ lib/presentation/my_family/my_family.dart | 213 +++------- .../my_family/widget/family_cards.dart | 391 ++++++++++++++---- .../my_family/widget/my_family_sheet.dart | 3 +- .../profile_settings/profile_settings.dart | 142 ++++++- lib/services/dialog_service.dart | 47 +++ lib/widgets/appbar/collapsing_list_view.dart | 6 +- lib/widgets/buttons/custom_button.dart | 65 ++- lib/widgets/chip/custom_chip_widget.dart | 3 + .../family_files/family_file_add_widget.dart | 105 +++++ 29 files changed, 1480 insertions(+), 944 deletions(-) create mode 100644 assets/images/svg/active-check.svg create mode 100644 assets/images/svg/alert-square.svg create mode 100644 assets/images/svg/arrow-right.svg create mode 100644 assets/images/svg/delete_icon.svg create mode 100644 lib/widgets/family_files/family_file_add_widget.dart diff --git a/assets/images/svg/active-check.svg b/assets/images/svg/active-check.svg new file mode 100644 index 0000000..c94a3a0 --- /dev/null +++ b/assets/images/svg/active-check.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/alert-square.svg b/assets/images/svg/alert-square.svg new file mode 100644 index 0000000..87b52e3 --- /dev/null +++ b/assets/images/svg/alert-square.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/arrow-right.svg b/assets/images/svg/arrow-right.svg new file mode 100644 index 0000000..8818d72 --- /dev/null +++ b/assets/images/svg/arrow-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/delete_icon.svg b/assets/images/svg/delete_icon.svg new file mode 100644 index 0000000..2e37d0d --- /dev/null +++ b/assets/images/svg/delete_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart index dc8b576..b1d1d87 100644 --- a/lib/core/api/api_client.dart +++ b/lib/core/api/api_client.dart @@ -18,25 +18,25 @@ abstract class ApiClient { static final NavigationService _navigationService = getIt.get(); Future post( - String endPoint, { - required Map body, - required Function(dynamic response, int statusCode, {int? messageStatus, String? errorMessage}) onSuccess, - required Function(String error, int statusCode, {int? messageStatus, Failure? failureType}) onFailure, - bool isAllowAny, - bool isExternal, - bool isRCService, - bool isPaymentServices, - bool bypassConnectionCheck, - }); + String endPoint, { + required Map body, + required Function(dynamic response, int statusCode, {int? messageStatus, String? errorMessage}) onSuccess, + required Function(String error, int statusCode, {int? messageStatus, Failure? failureType}) onFailure, + bool isAllowAny, + bool isExternal, + bool isRCService, + bool isPaymentServices, + bool bypassConnectionCheck, + }); Future get( - String endPoint, { - required Function(dynamic response, int statusCode) onSuccess, - required Function(String error, int statusCode) onFailure, - Map? queryParams, - bool isExternal, - bool isRCService, - }); + String endPoint, { + required Function(dynamic response, int statusCode) onSuccess, + required Function(String error, int statusCode) onFailure, + Map? queryParams, + bool isExternal, + bool isRCService, + }); String getSessionId(String id); @@ -87,16 +87,16 @@ class ApiClientImp implements ApiClient { @override post( - String endPoint, { - required Map body, - required Function(dynamic response, int statusCode, {int? messageStatus, String? errorMessage}) onSuccess, - required Function(String error, int statusCode, {int? messageStatus, Failure? failureType}) onFailure, - bool isAllowAny = false, - bool isExternal = false, - bool isRCService = false, - bool isPaymentServices = false, - bool bypassConnectionCheck = false, - }) async { + String endPoint, { + required Map body, + required Function(dynamic response, int statusCode, {int? messageStatus, String? errorMessage}) onSuccess, + required Function(String error, int statusCode, {int? messageStatus, Failure? failureType}) onFailure, + bool isAllowAny = false, + bool isExternal = false, + bool isRCService = false, + bool isPaymentServices = false, + bool bypassConnectionCheck = false, + }) async { String url; if (isExternal) { url = endPoint; @@ -322,10 +322,10 @@ class ApiClientImp implements ApiClient { @override get(String endPoint, {required Function(dynamic response, int statusCode) onSuccess, - required Function(String error, int statusCode) onFailure, - Map? queryParams, - bool isExternal = false, - bool isRCService = false}) async { + required Function(String error, int statusCode) onFailure, + Map? queryParams, + bool isExternal = false, + bool isRCService = false}) async { String url; if (isExternal) { url = endPoint; diff --git a/lib/core/api_consts.dart b/lib/core/api_consts.dart index 9f5abce..fd61480 100644 --- a/lib/core/api_consts.dart +++ b/lib/core/api_consts.dart @@ -727,7 +727,7 @@ const FAMILY_FILES= 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatu class ApiConsts { static const maxSmallScreen = 660; - static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.uat; + static AppEnvironmentTypeEnum appEnvironmentType = AppEnvironmentTypeEnum.prod; // static String baseUrl = 'https://uat.hmgwebservices.com/'; // HIS API URL UAT @@ -812,6 +812,8 @@ class ApiConsts { static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile'; static final String getAllPendingRecordsByResponseId = 'Services/Authentication.svc/REST/GetAllPendingRecordsByResponseId'; static final String getAllSharedRecordsByStatus = 'Services/Authentication.svc/REST/GetAllSharedRecordsByStatus'; + static final String removeFileFromFamilyMembers = 'Services/Authentication.svc/REST/ActiveDeactive_PatientFile'; + static final String acceptAndRejectFamilyFile = 'Services/Authentication.svc/REST/Update_FileStatus'; // static values for Api diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index 513a52a..89f2e82 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -146,6 +146,8 @@ class AppAssets { static const String ic_low_result = '$svgBasePath/low_result.svg'; static const String ic_critical_low_result = '$svgBasePath/critical_low_result.svg'; static const String switch_user = '$svgBasePath/switch_user.svg'; + static const String activeCheck = '$svgBasePath/active-check.svg'; + static const String deleteIcon = '$svgBasePath/delete_icon.svg'; //bottom navigation// static const String homeBottom = '$svgBasePath/home_bottom.svg'; @@ -157,6 +159,8 @@ class AppAssets { static const String feedback = '$svgBasePath/feedback.svg'; static const String news = '$svgBasePath/news.svg'; static const String heart = '$svgBasePath/heart.svg'; + static const String alertSquare = '$svgBasePath/alert-square.svg'; + static const String arrowRight = '$svgBasePath/arrow-right.svg'; // PNGS // static const String hmg_logo = '$pngBasePath/hmg_logo.png'; diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart index 030cc36..404e22b 100644 --- a/lib/core/app_state.dart +++ b/lib/core/app_state.dart @@ -38,15 +38,15 @@ class AppState { AuthenticatedUser? _authenticatedChildUser; int? _superUserID; + bool isChildLoggedIn = false; - void setAuthenticatedUser(AuthenticatedUser authenticatedUser, {bool isFamily = false}) { + void setAuthenticatedUser(AuthenticatedUser? authenticatedUser, {bool isFamily = false}) { if (isFamily) { _authenticatedChildUser = authenticatedUser; } else { setIsAuthenticated = true; _authenticatedRootUser = authenticatedUser; } - } AuthenticatedUser? getAuthenticatedUser({bool isFamily = false}) { @@ -59,8 +59,12 @@ class AppState { int? get getSuperUserID => _superUserID; + bool get getIsChildLoggedIn => isChildLoggedIn; + set setSuperUserID(int? value) => _superUserID = value; + set setIsChildLoggedIn(bool value) => isChildLoggedIn = value; + String _userBloodGroup = ""; String get getUserBloodGroup => _userBloodGroup; @@ -103,8 +107,6 @@ class AppState { set setDeviceTypeID(v) => deviceTypeID = v; - - String _familyFileTokenID = ""; String get getFamilyFileTokenID => _familyFileTokenID; @@ -151,9 +153,8 @@ class AppState { } ///this will be called if there is any problem in getting the user location - void resetLocation(){ + void resetLocation() { userLong = 0.0; userLong = 0.0; } - } diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index 1fe2317..a3bb4c7 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -97,11 +97,7 @@ class AppDependencies { // Global/shared VMs → LazySingleton getIt.registerLazySingleton( - () => LabViewModel( - labRepo: getIt(), - errorHandlerService: getIt(), - navigationService: getIt() - ), + () => LabViewModel(labRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt()), ); getIt.registerLazySingleton( diff --git a/lib/core/enums.dart b/lib/core/enums.dart index e94b3e2..4151bed 100644 --- a/lib/core/enums.dart +++ b/lib/core/enums.dart @@ -30,7 +30,7 @@ enum LoginTypeEnum { sms, whatsapp, face, fingerprint } enum AppEnvironmentTypeEnum { dev, uat, preProd, qa, staging, prod } -enum FamilyFileEnum { active, inactive, blocked, deleted, pending } +enum FamilyFileEnum { active, inactive, blocked, deleted, pending, rejected } extension CalenderExtension on CalenderEnum { int get toInt { @@ -152,6 +152,8 @@ extension FamilyFileEnumExtenshion on FamilyFileEnum { case FamilyFileEnum.pending: return 2; case FamilyFileEnum.inactive: + return 6; + case FamilyFileEnum.rejected: return 4; } } @@ -170,6 +172,8 @@ extension FamilyFileEnumExtenshion on FamilyFileEnum { return isArabic ? 'محذوف' : 'Deleted'; case FamilyFileEnum.pending: return isArabic ? 'قيد الانتظار' : 'Pending'; + case FamilyFileEnum.rejected: + return isArabic ? 'مرفوض' : 'Rejected'; } } diff --git a/lib/core/utils/request_utils.dart b/lib/core/utils/request_utils.dart index cd813ed..a4ea936 100644 --- a/lib/core/utils/request_utils.dart +++ b/lib/core/utils/request_utils.dart @@ -262,7 +262,7 @@ class RequestUtils { static Future getAddFamilyRequest({required String nationalIDorFile, required String mobileNo, required String countryCode}) async { FamilyFileRequest request = FamilyFileRequest(); - int? loginType = 0; // Default to National ID + int? loginType = 0; if (countryCode == CountryEnum.saudiArabia.countryCode || countryCode == '+966') { loginType = (nationalIDorFile.length == 10) ? 1 : 2; diff --git a/lib/core/utils/utils.dart b/lib/core/utils/utils.dart index efa01d0..bac2470 100644 --- a/lib/core/utils/utils.dart +++ b/lib/core/utils/utils.dart @@ -627,8 +627,17 @@ class Utils { double width = 24, double height = 24, BoxFit fit = BoxFit.cover, + double? border, + double? borderRadius, }) { - return Image.asset(icon, width: width, height: height, fit: fit); + return Container( + decoration: BoxDecoration( + border: border != null ? Border.all(color: AppColors.whiteColor, width: border) : null, + borderRadius: border != null ? BorderRadius.circular(borderRadius ?? 0) : null, + ), + child: Image.asset(icon, width: width, height: height, fit: fit), + ); + // return Image.asset(icon, width: width, height: height, fit: fit, ); } /// Widget to build an SVG from network diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index 96bdc0b..c034a69 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -206,38 +206,93 @@ class AuthenticationRepoImp implements AuthenticationRepo { int? patientID, int? loginType}) async { AppState appState = getIt.get(); + // if (isRegister) { + // newRequest["activationCode"] = activationCode ?? "0000"; + // newRequest["isSilentLogin"] = activationCode != null ? false : true; + // } else { + // newRequest.activationCode = activationCode ?? "0000"; + // newRequest.isSilentLogin = activationCode != null ? false : true; + // newRequest.projectOutSA = newRequest.zipCode == '966' ? false : true; + // newRequest.isDentalAllowedBackend = false; + // newRequest.forRegisteration = newRequest.isRegister ?? false; + // newRequest.isRegister = false; + // } + // Map familyRequest = {}; + // if (isFormFamilyFile) { + // AppState appState = getIt.get(); + // familyRequest = {}; + // familyRequest['PatientShareRequestID'] = patientShareRequestID; + // familyRequest['ResponseID'] = responseID; + // familyRequest['Status'] = 3; + // familyRequest["PatientID"] = appState.getAuthenticatedUser()!.patientId ?? 0; + // familyRequest["LogInTokenID"] = appState.getFamilyFileTokenID; + // familyRequest["activationCode"] = activationCode ?? "0000"; + // familyRequest["PatientMobileNumber"] = newRequest.patientMobileNumber; + // familyRequest["PatientIdentificationID"] = newRequest.patientIdentificationID; + // } + // Map switchRequest = {}; + // if (isSwitchUser) { + // switchRequest = newRequest.toJson(); + // + // switchRequest['PatientID'] = responseID; + // switchRequest['IsSilentLogin'] = true; + // switchRequest['LogInTokenID'] = null; + // switchRequest['SearchType'] = 2; + // if (loginType != 0) { + // switchRequest['SuperUser'] = patientID; + // switchRequest['DeviceToken'] = null; + // } else { + // switchRequest["LoginType"] = 2; + // } + // + // if (appState.getSuperUserID == responseID) { + // // switchRequest['LoginType'] = 3; + // switchRequest['PatientIdentificationID'] = ""; + // // switchRequest['ProjectOutSA'] = newRequest.zipCode == '966' ? false : true; + // switchRequest.remove('NationalID'); + // switchRequest.remove('isDentalAllowedBackend'); + // switchRequest.remove('ProjectOutSA'); + // switchRequest.remove('ForRegisteration'); + // appState.setSuperUserID = null; + // } + // } + if (isRegister) { newRequest["activationCode"] = activationCode ?? "0000"; - newRequest["isSilentLogin"] = activationCode != null ? false : true; + newRequest["isSilentLogin"] = activationCode == null; } else { newRequest.activationCode = activationCode ?? "0000"; - newRequest.isSilentLogin = activationCode != null ? false : true; - newRequest.projectOutSA = newRequest.zipCode == '966' ? false : true; + newRequest.isSilentLogin = activationCode == null; + newRequest.projectOutSA = newRequest.zipCode != '966'; newRequest.isDentalAllowedBackend = false; newRequest.forRegisteration = newRequest.isRegister ?? false; newRequest.isRegister = false; } + Map familyRequest = {}; if (isFormFamilyFile) { - AppState appState = getIt.get(); - familyRequest = {}; - familyRequest['PatientShareRequestID'] = patientShareRequestID; - familyRequest['ResponseID'] = responseID; - familyRequest['Status'] = 3; - familyRequest["PatientID"] = appState.getAuthenticatedUser()!.patientId ?? 0; - familyRequest["LogInTokenID"] = appState.getFamilyFileTokenID; - familyRequest["activationCode"] = activationCode ?? "0000"; - familyRequest["PatientMobileNumber"] = newRequest.patientMobileNumber; - familyRequest["PatientIdentificationID"] = newRequest.patientIdentificationID; + familyRequest = { + 'PatientShareRequestID': patientShareRequestID, + 'ResponseID': responseID, + 'Status': 3, + 'PatientID': appState.getAuthenticatedUser()?.patientId ?? 0, + 'LogInTokenID': appState.getFamilyFileTokenID, + 'activationCode': activationCode ?? "0000", + 'PatientMobileNumber': newRequest.patientMobileNumber, + 'PatientIdentificationID': newRequest.patientIdentificationID, + }; } + Map switchRequest = {}; if (isSwitchUser) { switchRequest = newRequest.toJson(); + switchRequest.addAll({ + 'PatientID': responseID, + 'IsSilentLogin': true, + 'LogInTokenID': null, + 'SearchType': 2, + }); - switchRequest['PatientID'] = responseID; - switchRequest['IsSilentLogin'] = true; - switchRequest['LogInTokenID'] = null; - switchRequest['SearchType'] = 2; if (loginType != 0) { switchRequest['SuperUser'] = patientID; switchRequest['DeviceToken'] = null; @@ -246,13 +301,8 @@ class AuthenticationRepoImp implements AuthenticationRepo { } if (appState.getSuperUserID == responseID) { - switchRequest['LoginType'] = 3; switchRequest['PatientIdentificationID'] = ""; - // switchRequest['ProjectOutSA'] = newRequest.zipCode == '966' ? false : true; - switchRequest.remove('NationalID'); - switchRequest.remove('isDentalAllowedBackend'); - switchRequest.remove('ProjectOutSA'); - switchRequest.remove('ForRegisteration'); + switchRequest.removeWhere((key, value) => ['NationalID', 'isDentalAllowedBackend', 'ProjectOutSA', 'ForRegisteration'].contains(key)); } } @@ -303,7 +353,6 @@ class AuthenticationRepoImp implements AuthenticationRepo { @override Future>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest}) async { commonAuthanticatedRequest['Region'] = 1; - print("dsfsdd"); try { GenericApiModel? apiResponse; Failure? failure; @@ -338,7 +387,6 @@ class AuthenticationRepoImp implements AuthenticationRepo { @override Future>> getUserAgreementContent({required dynamic commonAuthanticatedRequest}) async { commonAuthanticatedRequest['Region'] = 1; - print("dsfsdd"); try { GenericApiModel? apiResponse; Failure? failure; diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index b3f9617..467a476 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -366,7 +366,7 @@ class AuthenticationViewModel extends ChangeNotifier { isForRegister: isForRegister, patientOutSA: isForRegister ? isPatientOutsideSA(request: payload) - : selectedCountrySignup.countryCode == CountryEnum.saudiArabia + : selectedCountrySignup.countryCode == CountryEnum.saudiArabia.countryCode ? false : true, payload: payload, @@ -374,9 +374,6 @@ class AuthenticationViewModel extends ChangeNotifier { isFormFamilyFile: isFormFamilyFile, responseID: responseID); - - - // TODO: GET APP SMS SIGNATURE HERE request.sMSSignature = await getSignature(); @@ -434,18 +431,17 @@ class AuthenticationViewModel extends ChangeNotifier { return isUserComingForRegister; } - Future checkActivationCode( - {required String? activationCode, - required OTPTypeEnum otpTypeEnum, - required Function(String? message) onWrongActivationCode, - Function()? onResendActivation, - bool isFormFamilyFile = false, - dynamic patientShareRequestID, - dynamic responseID, - bool isSwitchUser =false, - int? patientID, - - }) async { + Future checkActivationCode({ + required String? activationCode, + required OTPTypeEnum otpTypeEnum, + required Function(String? message) onWrongActivationCode, + Function()? onResendActivation, + bool isFormFamilyFile = false, + dynamic patientShareRequestID, + dynamic responseID, + bool isSwitchUser = false, + int? patientID, + }) async { bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1); final request = RequestUtils.getCommonRequestWelcome( @@ -508,15 +504,15 @@ class AuthenticationViewModel extends ChangeNotifier { }); } else { final resultEither = await _authenticationRepo.checkActivationCodeRepo( - newRequest: CheckActivationCodeRegisterReq.fromJson(request), - activationCode: activationCode, - isRegister: false, - isFormFamilyFile: isFormFamilyFile, - patientShareRequestID: patientShareRequestID, - responseID: responseID, - isSwitchUser: isSwitchUser, - patientID: patientID, - loginType: _appState.getSuperUserID != null ? 0 : 2, + newRequest: CheckActivationCodeRegisterReq.fromJson(request), + activationCode: activationCode, + isRegister: false, + isFormFamilyFile: isFormFamilyFile, + patientShareRequestID: patientShareRequestID, + responseID: responseID, + isSwitchUser: isSwitchUser, + patientID: patientID, + loginType: _appState.getSuperUserID != null ? 0 : 2, ); resultEither.fold( @@ -531,8 +527,6 @@ class AuthenticationViewModel extends ChangeNotifier { LoaderBottomSheet.hideLoader(); await _dialogService.showCommonBottomSheetWithoutH(message: failure.message, label: LocaleKeys.notice.tr(), onOkPressed: () {}); }), (apiResponse) async { - print("API Response Data: ${apiResponse.data}"); - final activation = CheckActivationCode.fromJson(apiResponse.data as Map); if (activation.errorCode == '699') { @@ -551,17 +545,27 @@ class AuthenticationViewModel extends ChangeNotifier { return; } else { if (isFormFamilyFile) { - await navigateToFamilyFilePage(); - // _dialogService.showCommonBottomSheetWithoutH( - // message: "Family File Added Successfully", - // onOkPressed: () async { - // print("navigating to family file page"); - // - // }); + // await navigateToFamilyFilePage(); + MedicalFileViewModel medicalVm = getIt(); + if (!_appState.getIsChildLoggedIn) { + await medicalVm.getFamilyFiles(status: 0); + await medicalVm.getAllPendingRecordsByResponseId(); + _navigationService.popUntilNamed(AppRoutes.medicalFilePage); + } } else { if (activation.list != null && activation.list!.isNotEmpty) { - if(isSwitchUser){ - _appState.setSuperUserID = _appState.getAuthenticatedUser()?.patientId; + if (isSwitchUser) { + if (_appState.getIsChildLoggedIn) { + _appState.setSuperUserID = null; + _appState.setIsChildLoggedIn = false; + activation.list!.first.isParentUser = true; + } else { + _appState.setSuperUserID = _appState.getAuthenticatedUser()?.patientId; + _appState.setIsChildLoggedIn = true; + activation.list!.first.isParentUser = false; + } + } else { + activation.list!.first.isParentUser = true; } _appState.setAuthenticatedUser(activation.list!.first); _appState.setPrivilegeModelList(activation.list!.first.listPrivilege!); @@ -576,7 +580,14 @@ class AuthenticationViewModel extends ChangeNotifier { _appState.getSelectDeviceByImeiRespModelElement!.logInType = loginTypeEnum.toInt; } LoaderBottomSheet.hideLoader(); - insertPatientIMEIData(loginTypeEnum.toInt); +// + if (!isSwitchUser && !_appState.getIsChildLoggedIn) { + MedicalFileViewModel medicalVm = getIt(); + insertPatientIMEIData(loginTypeEnum.toInt); + await medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan + // medicalVm.getAllPendingRecordsByResponseId(); + } + await clearDefaultInputValues(); if (isUserAgreedBefore) { navigateToHomeScreen(); diff --git a/lib/features/authentication/models/resp_models/authenticated_user_resp_model.dart b/lib/features/authentication/models/resp_models/authenticated_user_resp_model.dart index e6a8e17..8209a0f 100644 --- a/lib/features/authentication/models/resp_models/authenticated_user_resp_model.dart +++ b/lib/features/authentication/models/resp_models/authenticated_user_resp_model.dart @@ -70,6 +70,8 @@ class AuthenticatedUser { dynamic authenticatedUserPatientType; dynamic authenticatedUserStatus; int? superUser; + bool? isParentUser; + AuthenticatedUser({ this.setupId, this.patientType, @@ -139,7 +141,8 @@ class AuthenticatedUser { this.authenticatedUserPatientPayType, this.authenticatedUserPatientType, this.authenticatedUserStatus, - this.superUser + this.superUser, + this.isParentUser, }); factory AuthenticatedUser.fromRawJson(String str) => AuthenticatedUser.fromJson(json.decode(str)); @@ -147,148 +150,150 @@ class AuthenticatedUser { String toRawJson() => json.encode(toJson()); factory AuthenticatedUser.fromJson(Map json) => AuthenticatedUser( - setupId: json["SetupID"], - patientType: json["PatientType"], - patientId: json["PatientID"], - firstName: json["FirstName"], - middleName: json["MiddleName"], - lastName: json["LastName"], - firstNameN: json["FirstNameN"], - middleNameN: json["MiddleNameN"], - lastNameN: json["LastNameN"], - relationshipId: json["RelationshipID"], - gender: json["Gender"], - dateofBirth: json["DateofBirth"], - dateofBirthN: json["DateofBirthN"], - nationalityId: json["NationalityID"], - phoneResi: json["PhoneResi"], - phoneOffice: json["PhoneOffice"], - mobileNumber: json["MobileNumber"], - faxNumber: json["FaxNumber"], - emailAddress: json["EmailAddress"], - bloodGroup: json["BloodGroup"], - rhFactor: json["RHFactor"], - isEmailAlertRequired: json["IsEmailAlertRequired"], - isSmsAlertRequired: json["IsSMSAlertRequired"], - preferredLanguage: json["PreferredLanguage"], - isPrivilegedMember: json["IsPrivilegedMember"], - memberId: json["MemberID"], - expiryDate: json["ExpiryDate"], - isHmgEmployee: json["IsHmgEmployee"], - employeeId: json["EmployeeID"], - emergencyContactName: json["EmergencyContactName"], - emergencyContactNo: json["EmergencyContactNo"], - patientPayType: json["PatientPayType"], - dhccPatientRefId: json["DHCCPatientRefID"], - isPatientDummy: json["IsPatientDummy"], - status: json["Status"], - isStatusCleared: json["IsStatusCleared"], - patientIdentificationType: json["PatientIdentificationType"], - patientIdentificationNo: json["PatientIdentificationNo"], - projectId: json["ProjectID"], - infoSourceId: json["InfoSourceID"], - address: json["Address"], - age: json["Age"], - ageDesc: json["AgeDesc"], - areaId: json["AreaID"], - crsVerificationStatus: json["CRSVerificationStatus"], - crsVerificationStatusDesc: json["CRSVerificationStatusDesc"], - crsVerificationStatusDescN: json["CRSVerificationStatusDescN"], - createdBy: json["CreatedBy"], - genderDescription: json["GenderDescription"], - healthIdFromNhicViaVida: json["HealthIDFromNHICViaVida"], - ir: json["IR"], - isoCityId: json["ISOCityID"], - isoCountryId: json["ISOCountryID"], - isVerfiedFromNhic: json["IsVerfiedFromNHIC"], - listPrivilege: json["ListPrivilege"] == null ? [] : List.from(json["ListPrivilege"]!.map((x) => ListPrivilege.fromJson(x))), - marital: json["Marital"], - occupationId: json["OccupationID"], - outSa: json["OutSA"], - poBox: json["POBox"], - receiveHealthSummaryReport: json["ReceiveHealthSummaryReport"], - sourceType: json["SourceType"], - strDateofBirth: json["StrDateofBirth"], - tempAddress: json["TempAddress"], - zipCode: json["ZipCode"], - eHealthIdField: json["eHealthIDField"], - authenticatedUserPatientPayType: json["patientPayType"], - authenticatedUserPatientType: json["patientType"], - authenticatedUserStatus: json["status"], - superUser: json["superUser"], - ); + setupId: json["SetupID"], + patientType: json["PatientType"], + patientId: json["PatientID"], + firstName: json["FirstName"], + middleName: json["MiddleName"], + lastName: json["LastName"], + firstNameN: json["FirstNameN"], + middleNameN: json["MiddleNameN"], + lastNameN: json["LastNameN"], + relationshipId: json["RelationshipID"], + gender: json["Gender"], + dateofBirth: json["DateofBirth"], + dateofBirthN: json["DateofBirthN"], + nationalityId: json["NationalityID"], + phoneResi: json["PhoneResi"], + phoneOffice: json["PhoneOffice"], + mobileNumber: json["MobileNumber"], + faxNumber: json["FaxNumber"], + emailAddress: json["EmailAddress"], + bloodGroup: json["BloodGroup"], + rhFactor: json["RHFactor"], + isEmailAlertRequired: json["IsEmailAlertRequired"], + isSmsAlertRequired: json["IsSMSAlertRequired"], + preferredLanguage: json["PreferredLanguage"], + isPrivilegedMember: json["IsPrivilegedMember"], + memberId: json["MemberID"], + expiryDate: json["ExpiryDate"], + isHmgEmployee: json["IsHmgEmployee"], + employeeId: json["EmployeeID"], + emergencyContactName: json["EmergencyContactName"], + emergencyContactNo: json["EmergencyContactNo"], + patientPayType: json["PatientPayType"], + dhccPatientRefId: json["DHCCPatientRefID"], + isPatientDummy: json["IsPatientDummy"], + status: json["Status"], + isStatusCleared: json["IsStatusCleared"], + patientIdentificationType: json["PatientIdentificationType"], + patientIdentificationNo: json["PatientIdentificationNo"], + projectId: json["ProjectID"], + infoSourceId: json["InfoSourceID"], + address: json["Address"], + age: json["Age"], + ageDesc: json["AgeDesc"], + areaId: json["AreaID"], + crsVerificationStatus: json["CRSVerificationStatus"], + crsVerificationStatusDesc: json["CRSVerificationStatusDesc"], + crsVerificationStatusDescN: json["CRSVerificationStatusDescN"], + createdBy: json["CreatedBy"], + genderDescription: json["GenderDescription"], + healthIdFromNhicViaVida: json["HealthIDFromNHICViaVida"], + ir: json["IR"], + isoCityId: json["ISOCityID"], + isoCountryId: json["ISOCountryID"], + isVerfiedFromNhic: json["IsVerfiedFromNHIC"], + listPrivilege: json["ListPrivilege"] == null ? [] : List.from(json["ListPrivilege"]!.map((x) => ListPrivilege.fromJson(x))), + marital: json["Marital"], + occupationId: json["OccupationID"], + outSa: json["OutSA"], + poBox: json["POBox"], + receiveHealthSummaryReport: json["ReceiveHealthSummaryReport"], + sourceType: json["SourceType"], + strDateofBirth: json["StrDateofBirth"], + tempAddress: json["TempAddress"], + zipCode: json["ZipCode"], + eHealthIdField: json["eHealthIDField"], + authenticatedUserPatientPayType: json["patientPayType"], + authenticatedUserPatientType: json["patientType"], + authenticatedUserStatus: json["status"], + superUser: json["superUser"], + isParentUser: json["isParentUser"] ?? false, + ); Map toJson() => { - "SetupID": setupId, - "PatientType": patientType, - "PatientID": patientId, - "FirstName": firstName, - "MiddleName": middleName, - "LastName": lastName, - "FirstNameN": firstNameN, - "MiddleNameN": middleNameN, - "LastNameN": lastNameN, - "RelationshipID": relationshipId, - "Gender": gender, - "DateofBirth": dateofBirth, - "DateofBirthN": dateofBirthN, - "NationalityID": nationalityId, - "PhoneResi": phoneResi, - "PhoneOffice": phoneOffice, - "MobileNumber": mobileNumber, - "FaxNumber": faxNumber, - "EmailAddress": emailAddress, - "BloodGroup": bloodGroup, - "RHFactor": rhFactor, - "IsEmailAlertRequired": isEmailAlertRequired, - "IsSMSAlertRequired": isSmsAlertRequired, - "PreferredLanguage": preferredLanguage, - "IsPrivilegedMember": isPrivilegedMember, - "MemberID": memberId, - "ExpiryDate": expiryDate, - "IsHmgEmployee": isHmgEmployee, - "EmployeeID": employeeId, - "EmergencyContactName": emergencyContactName, - "EmergencyContactNo": emergencyContactNo, - "PatientPayType": patientPayType, - "DHCCPatientRefID": dhccPatientRefId, - "IsPatientDummy": isPatientDummy, - "Status": status, - "IsStatusCleared": isStatusCleared, - "PatientIdentificationType": patientIdentificationType, - "PatientIdentificationNo": patientIdentificationNo, - "ProjectID": projectId, - "InfoSourceID": infoSourceId, - "Address": address, - "Age": age, - "AgeDesc": ageDesc, - "AreaID": areaId, - "CRSVerificationStatus": crsVerificationStatus, - "CRSVerificationStatusDesc": crsVerificationStatusDesc, - "CRSVerificationStatusDescN": crsVerificationStatusDescN, - "CreatedBy": createdBy, - "GenderDescription": genderDescription, - "HealthIDFromNHICViaVida": healthIdFromNhicViaVida, - "IR": ir, - "ISOCityID": isoCityId, - "ISOCountryID": isoCountryId, - "IsVerfiedFromNHIC": isVerfiedFromNhic, - "ListPrivilege": listPrivilege == null ? [] : List.from(listPrivilege!.map((x) => x.toJson())), - "Marital": marital, - "OccupationID": occupationId, - "OutSA": outSa, - "POBox": poBox, - "ReceiveHealthSummaryReport": receiveHealthSummaryReport, - "SourceType": sourceType, - "StrDateofBirth": strDateofBirth, - "TempAddress": tempAddress, - "ZipCode": zipCode, - "eHealthIDField": eHealthIdField, - "patientPayType": authenticatedUserPatientPayType, - "patientType": authenticatedUserPatientType, - "status": authenticatedUserStatus, - "superUser": superUser, - }; + "SetupID": setupId, + "PatientType": patientType, + "PatientID": patientId, + "FirstName": firstName, + "MiddleName": middleName, + "LastName": lastName, + "FirstNameN": firstNameN, + "MiddleNameN": middleNameN, + "LastNameN": lastNameN, + "RelationshipID": relationshipId, + "Gender": gender, + "DateofBirth": dateofBirth, + "DateofBirthN": dateofBirthN, + "NationalityID": nationalityId, + "PhoneResi": phoneResi, + "PhoneOffice": phoneOffice, + "MobileNumber": mobileNumber, + "FaxNumber": faxNumber, + "EmailAddress": emailAddress, + "BloodGroup": bloodGroup, + "RHFactor": rhFactor, + "IsEmailAlertRequired": isEmailAlertRequired, + "IsSMSAlertRequired": isSmsAlertRequired, + "PreferredLanguage": preferredLanguage, + "IsPrivilegedMember": isPrivilegedMember, + "MemberID": memberId, + "ExpiryDate": expiryDate, + "IsHmgEmployee": isHmgEmployee, + "EmployeeID": employeeId, + "EmergencyContactName": emergencyContactName, + "EmergencyContactNo": emergencyContactNo, + "PatientPayType": patientPayType, + "DHCCPatientRefID": dhccPatientRefId, + "IsPatientDummy": isPatientDummy, + "Status": status, + "IsStatusCleared": isStatusCleared, + "PatientIdentificationType": patientIdentificationType, + "PatientIdentificationNo": patientIdentificationNo, + "ProjectID": projectId, + "InfoSourceID": infoSourceId, + "Address": address, + "Age": age, + "AgeDesc": ageDesc, + "AreaID": areaId, + "CRSVerificationStatus": crsVerificationStatus, + "CRSVerificationStatusDesc": crsVerificationStatusDesc, + "CRSVerificationStatusDescN": crsVerificationStatusDescN, + "CreatedBy": createdBy, + "GenderDescription": genderDescription, + "HealthIDFromNHICViaVida": healthIdFromNhicViaVida, + "IR": ir, + "ISOCityID": isoCityId, + "ISOCountryID": isoCountryId, + "IsVerfiedFromNHIC": isVerfiedFromNhic, + "ListPrivilege": listPrivilege == null ? [] : List.from(listPrivilege!.map((x) => x.toJson())), + "Marital": marital, + "OccupationID": occupationId, + "OutSA": outSa, + "POBox": poBox, + "ReceiveHealthSummaryReport": receiveHealthSummaryReport, + "SourceType": sourceType, + "StrDateofBirth": strDateofBirth, + "TempAddress": tempAddress, + "ZipCode": zipCode, + "eHealthIDField": eHealthIdField, + "patientPayType": authenticatedUserPatientPayType, + "patientType": authenticatedUserPatientType, + "status": authenticatedUserStatus, + "superUser": superUser, + "isParentUser": isParentUser, + }; } class ListPrivilege { @@ -309,16 +314,16 @@ class ListPrivilege { String toRawJson() => json.encode(toJson()); factory ListPrivilege.fromJson(Map json) => ListPrivilege( - id: json["ID"], - serviceName: json["ServiceName"], - previlege: json["Previlege"], - region: json["Region"], - ); + id: json["ID"], + serviceName: json["ServiceName"], + previlege: json["Previlege"], + region: json["Region"], + ); Map toJson() => { - "ID": id, - "ServiceName": serviceName, - "Previlege": previlege, - "Region": region, - }; + "ID": id, + "ServiceName": serviceName, + "Previlege": previlege, + "Region": region, + }; } diff --git a/lib/features/medical_file/medical_file_repo.dart b/lib/features/medical_file/medical_file_repo.dart index 9c18696..994f9f9 100644 --- a/lib/features/medical_file/medical_file_repo.dart +++ b/lib/features/medical_file/medical_file_repo.dart @@ -29,6 +29,10 @@ abstract class MedicalFileRepo { Future>>> getAllPendingRecordsByResponseId({required Map request}); Future>> addFamilyFile({required dynamic request}); + + Future>> removeFamilyFile({required int? id}); + + Future>> acceptRejectFamilyFile({required int? id, required int? status}); } class MedicalFileRepoImp implements MedicalFileRepo { @@ -328,10 +332,6 @@ class MedicalFileRepoImp implements MedicalFileRepo { onSuccess: (response, statusCode, {messageStatus, errorMessage}) { try { final list = response['GetAllPendingRecordsList']; - // if (list == null || list.isEmpty) { - // throw Exception("lab list is empty"); - // } - final familyLists = list.map((item) => FamilyFileResponseModelLists.fromJson(item as Map)).toList().cast(); apiResponse = GenericApiModel>( @@ -384,4 +384,74 @@ class MedicalFileRepoImp implements MedicalFileRepo { return Left(UnknownFailure(e.toString())); } } + + @override + Future>> removeFamilyFile({required int? id}) async { + Map request = {}; + request["ID"] = id; + request['IsActive'] = false; + try { + GenericApiModel? apiResponse; + Failure? failure; + await apiClient.post( + ApiConsts.removeFileFromFamilyMembers, + body: request, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: response, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } + + @override + Future>> acceptRejectFamilyFile({required int? id, required int? status}) async { + Map request = {}; + request["ID"] = id; + request['Status'] = status; + try { + GenericApiModel? apiResponse; + Failure? failure; + await apiClient.post( + ApiConsts.acceptAndRejectFamilyFile, + body: request, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + apiResponse = GenericApiModel( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: errorMessage, + data: response, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 64075b4..df8027f 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; @@ -83,7 +84,7 @@ class MedicalFileViewModel extends ChangeNotifier { void onFamilyFileTabChange(int index) { setSelectedFamilyFileTabIndex = index; if (index == 1) { - getAllPendingRecordsByResponseId(); + // getAllPendingRecordsByResponseId(); } notifyListeners(); } @@ -270,148 +271,50 @@ class MedicalFileViewModel extends ChangeNotifier { if (apiResponse.messageStatus == 2) { _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); } else if (apiResponse.messageStatus == 1) { - patientFamilyFiles = apiResponse.data!; if (apiResponse.data != null) { - patientFamilyFiles.insert( - 0, - FamilyFileResponseModelLists( - patientId: _appState.getAuthenticatedUser()!.patientId, - patientName: '${_appState.getAuthenticatedUser()!.firstName!} ${_appState.getAuthenticatedUser()!.lastName!}', - isActive: true, - gender: _appState.getAuthenticatedUser()!.gender!, - responseId: _appState.getAuthenticatedUser()!.patientId, - age: _appState.getAuthenticatedUser()!.age, - mobileNumber: _appState.getAuthenticatedUser()!.mobileNumber, - patientIdenficationNumber: _appState.getAuthenticatedUser()!.patientIdentificationNo, - emaiLAddress: _appState.getAuthenticatedUser()!.emailAddress, - genderDescription: _appState.getAuthenticatedUser()!.genderDescription, - ), + // Add current user as the first active family file + final currentUser = _appState.getAuthenticatedUser()!; + final currentUserFamilyFile = FamilyFileResponseModelLists( + patientId: currentUser.patientId, + patientName: '${currentUser.firstName!} ${currentUser.lastName!}', + isActive: true, + gender: currentUser.gender!, + responseId: currentUser.patientId, + age: currentUser.age, + mobileNumber: currentUser.mobileNumber, + patientIdenficationNumber: currentUser.patientIdentificationNo, + emaiLAddress: currentUser.emailAddress, + genderDescription: currentUser.genderDescription, ); - // final List activeFamilyFiles = []; - // final List tempPendingFamilyFiles = []; - // for (var element in apiResponse.data!) { - // if (element.status != null && element.status == FamilyFileEnum.active.toInt) { - // activeFamilyFiles.add(FamilyFileResponseModelLists( - // patientId: element.patientId, - // patientName: element.patientName!, - // isActive: element.status == FamilyFileEnum.active.toInt ? true : false, - // gender: element.gender!, - // responseId: element.patientId, - // mobileNumber: element.mobileNumber, - // age: element.age, - // patientIdenficationNumber: element.patientIdenficationNumber, - // relationship: element.relationship, - // relationshipId: element.relationshipId, - // relationshipN: element.relationshipN, - // status: element.status, - // statusDescription: element.statusDescription, - // createdOn: element.createdOn, - // editedOn: element.editedOn, - // patientDataVerified: element.patientDataVerified, - // regionId: element.regionId, - // familyRegionId: element.familyRegionId, - // genderDescription: element.genderDescription, - // genderImage: element.genderImage, - // emaiLAddress: element.emaiLAddress)); - // } - // - // if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { - // tempPendingFamilyFiles.add(FamilyFileResponseModelLists( - // patientId: element.patientId, - // patientName: element.patientName!, - // isActive: element.status == FamilyFileEnum.active.toInt ? true : false, - // gender: element.gender!, - // responseId: element.patientId, - // mobileNumber: element.mobileNumber, - // age: element.age, - // patientIdenficationNumber: element.patientIdenficationNumber, - // relationship: element.relationship, - // relationshipId: element.relationshipId, - // relationshipN: element.relationshipN, - // status: element.status, - // statusDescription: element.statusDescription, - // createdOn: element.createdOn, - // editedOn: element.editedOn, - // patientDataVerified: element.patientDataVerified, - // regionId: element.regionId, - // familyRegionId: element.familyRegionId, - // genderDescription: element.genderDescription, - // genderImage: element.genderImage, - // emaiLAddress: element.emaiLAddress)); - // } - // } - // patientFamilyFiles.addAll(activeFamilyFiles.where((element) => !patientFamilyFiles.any((e) => e.patientId == element.patientId))); - // pendingFamilyFiles.addAll(tempPendingFamilyFiles); + // Clear and start fresh with current user + patientFamilyFiles.clear(); + patientFamilyFiles.add(currentUserFamilyFile); final List activeFamilyFiles = []; - final List tempPendingFamilyFiles = []; - // final Set pendingIds = {}; - - // for (var element in apiResponse.data!) { - // if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { - // tempPendingFamilyFiles.add(FamilyFileResponseModelLists( - // patientId: element.patientId, - // patientName: element.patientName!, - // isActive: false, - // gender: element.gender!, - // responseId: element.patientId, - // mobileNumber: element.mobileNumber, - // age: element.age, - // patientIdenficationNumber: element.patientIdenficationNumber, - // relationship: element.relationship, - // relationshipId: element.relationshipId, - // relationshipN: element.relationshipN, - // status: element.status, - // statusDescription: element.statusDescription, - // createdOn: element.createdOn, - // editedOn: element.editedOn, - // patientDataVerified: element.patientDataVerified, - // regionId: element.regionId, - // familyRegionId: element.familyRegionId, - // genderDescription: element.genderDescription, - // genderImage: element.genderImage, - // emaiLAddress: element.emaiLAddress)); - // } else if (element.status != null && element.status == FamilyFileEnum.active.toInt) { - // activeFamilyFiles.add(FamilyFileResponseModelLists( - // patientId: element.patientId, - // patientName: element.patientName!, - // isActive: element.status == FamilyFileEnum.active.toInt ? true : false, - // gender: element.gender!, - // responseId: element.patientId, - // mobileNumber: element.mobileNumber, - // age: element.age, - // patientIdenficationNumber: element.patientIdenficationNumber, - // relationship: element.relationship, - // relationshipId: element.relationshipId, - // relationshipN: element.relationshipN, - // status: element.status, - // statusDescription: element.statusDescription, - // createdOn: element.createdOn, - // editedOn: element.editedOn, - // patientDataVerified: element.patientDataVerified, - // regionId: element.regionId, - // familyRegionId: element.familyRegionId, - // genderDescription: element.genderDescription, - // genderImage: element.genderImage, - // emaiLAddress: element.emaiLAddress)); - // } - // } + final List pendingFamilyFiles = []; for (var element in apiResponse.data!) { - if (element.status == null) continue; + if (element.status == null) { + continue; + } - final isPending = element.status == FamilyFileEnum.pending.toInt; + final isPending = element.status == FamilyFileEnum.pending.toInt || element.status == FamilyFileEnum.rejected.toInt; final isActive = element.status == FamilyFileEnum.active.toInt; - if (!isPending && !isActive) continue; + print("====== Element Status: ${element.status}, isPending: $isPending, isActive: $isActive ============"); + + if (!isPending && !isActive) { + continue; + } final familyFile = FamilyFileResponseModelLists( + id: element.id, patientId: element.patientId, patientName: element.patientName!, - isActive: isActive, + isActive: element.isActive, gender: element.gender!, - responseId: element.patientId, + responseId: element.responseId, mobileNumber: element.mobileNumber, age: element.age, patientIdenficationNumber: element.patientIdenficationNumber, @@ -431,14 +334,22 @@ class MedicalFileViewModel extends ChangeNotifier { ); if (isPending) { - tempPendingFamilyFiles.add(familyFile); - } else if (isActive) { + familyFile.isRequestFromMySide = true; + pendingFamilyFiles.add(familyFile); + } + if (isActive) { activeFamilyFiles.add(familyFile); } } - patientFamilyFiles.addAll(activeFamilyFiles.where((element) => patientFamilyFiles.every((e) => e.patientId != element.patientId || e.status != FamilyFileEnum.active.toInt))); - pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => pendingFamilyFiles.every((e) => e.patientId != element.patientId))); + for (var activeFile in activeFamilyFiles) { + if (!patientFamilyFiles.any((e) => e.responseId == activeFile.responseId)) { + patientFamilyFiles.add(activeFile); + } + } + + this.pendingFamilyFiles.clear(); + this.pendingFamilyFiles.addAll(pendingFamilyFiles); } notifyListeners(); @@ -463,11 +374,12 @@ class MedicalFileViewModel extends ChangeNotifier { if (apiResponse.data != null) { final List tempPendingFamilyFiles = []; for (var element in apiResponse.data!) { - if (element.status != null && element.status == FamilyFileEnum.pending.toInt) { + if (element.status != null && element.status == FamilyFileEnum.pending.toInt || element.status == FamilyFileEnum.active.toInt) { tempPendingFamilyFiles.add(FamilyFileResponseModelLists( + id: element.id, patientId: element.patientId, patientName: element.patientName!, - isActive: element.status == FamilyFileEnum.active.toInt ? true : false, + isActive: element.status, gender: element.gender, responseId: element.patientId, mobileNumber: element.mobileNumber, @@ -488,7 +400,11 @@ class MedicalFileViewModel extends ChangeNotifier { emaiLAddress: element.emaiLAddress)); } } + // pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => !pendingFamilyFiles.any((e) => e.responseId == element.responseId))); pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => !pendingFamilyFiles.any((e) => e.patientId == element.patientId))); + + print("====== Pending Family Length: ${pendingFamilyFiles.length} ============"); + print("====== Pending Family Files: ${jsonEncode(pendingFamilyFiles)} ============"); } notifyListeners(); } @@ -496,42 +412,6 @@ class MedicalFileViewModel extends ChangeNotifier { ); } - // Future switchFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async { - // // final result = await medicalFileRepo.getPatientFamilyFiles(); - // final result = await medicalFileRepo.getPatientFamilyFiles(3, _appState.superUserID != null ? _appState.superUserID! : _appState.getAuthenticatedUser()!.patientId!); - // - // result.fold( - // (failure) async => await errorHandlerService.handleError( - // failure: failure, - // onOkPressed: () { - // onError!(failure.message); - // }, - // ), - // (apiResponse) { - // if (apiResponse.messageStatus == 2) { - // _dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {}); - // } else if (apiResponse.messageStatus == 1) { - // patientFamilyFiles = apiResponse.data!; - // patientFamilyFiles.insert( - // 0, - // FamilyFileResponseModelLists( - // patientId: _appState.getAuthenticatedUser()!.patientId, - // patientName: '${_appState.getAuthenticatedUser()!.firstName!} ${_appState.getAuthenticatedUser()!.lastName!}', - // isActive: true, - // gender: _appState.getAuthenticatedUser()!.gender!, - // age: _appState.getAuthenticatedUser()!.age, - // mobileNumber: _appState.getAuthenticatedUser()!.mobileNumber, - // responseId: _appState.getAuthenticatedUser()!.patientId), - // ); - // notifyListeners(); - // if (onSuccess != null) { - // onSuccess(apiResponse); - // } - // } - // }, - // ); - // } - Future switchFamilyFiles({Function(dynamic)? onSuccess, int? responseID, int? patientID, String? phoneNumber, Function(String)? onError}) async { authVM.phoneNumberController.text = phoneNumber!.startsWith("0") ? phoneNumber.replaceFirst("0", "") : phoneNumber; @@ -555,34 +435,107 @@ class MedicalFileViewModel extends ChangeNotifier { final resultEither = await medicalFileRepo.addFamilyFile(request: request.toJson()); resultEither.fold((failure) async => await errorHandlerService.handleError(failure: failure), (apiResponse) async { - if (apiResponse != null && apiResponse.data != null) { - request.isPatientExcluded = apiResponse.data["IsPatientExcluded"]; - request.responseID = apiResponse.data["ReponseID"]; + if (apiResponse.messageStatus == 2) { LoaderBottomSheet.hideLoader(); - _dialogService.showExceptionBottomSheet( - message: apiResponse.data['Message'], + _dialogService.showErrorBottomSheet( + message: apiResponse.errorMessage!, onOkPressed: () { - LoaderBottomSheet.showLoader(); - authVM.sendActivationCode( - otpTypeEnum: otpTypeEnum, - nationalIdOrFileNumber: request.sharedPatientIdentificationId!, - phoneNumber: request.sharedPatientMobileNumber!, - isForRegister: false, - isExcludedUser: apiResponse.data['IsPatientExcluded'], - responseID: apiResponse.data["ReponseID"], - isFormFamilyFile: true); - }, - onCancelPressed: () { navigationService.pop(); }); + } else if (apiResponse.messageStatus == 1) { + if (apiResponse.data != null) { + request.isPatientExcluded = apiResponse.data["IsPatientExcluded"]; + request.responseID = apiResponse.data["ReponseID"]; + LoaderBottomSheet.hideLoader(); + _dialogService.showExceptionBottomSheet( + message: apiResponse.data["Message"], + onOkPressed: () { + LoaderBottomSheet.showLoader(); + authVM.sendActivationCode( + otpTypeEnum: otpTypeEnum, + nationalIdOrFileNumber: request.sharedPatientIdentificationId!, + phoneNumber: request.sharedPatientMobileNumber!, + isForRegister: false, + isExcludedUser: apiResponse.data['IsPatientExcluded'], + responseID: apiResponse.data["ReponseID"], + isFormFamilyFile: true); + }, + onCancelPressed: () { + navigationService.pop(); + }); + } } }); } Future handleFamilyFileRequestOTPVerification() async { LoaderBottomSheet.showLoader(); - await getFamilyFiles(); - await getAllPendingRecordsByResponseId(); + if (!_appState.getIsChildLoggedIn) { + await getFamilyFiles(status: 0); + await getAllPendingRecordsByResponseId(); + } + LoaderBottomSheet.hideLoader(); } + + Future removeFileFromFamilyMembers({int? id}) async { + NavigationService navigationService = getIt.get(); + _dialogService.showExceptionBottomSheet( + message: "Remove this member?", + onOkPressed: () async { + LoaderBottomSheet.showLoader(); + final result = await medicalFileRepo.removeFamilyFile(id: id); + result.fold( + (failure) async => await errorHandlerService.handleError(failure: failure), + (apiResponse) { + if (apiResponse.messageStatus == 2) { + LoaderBottomSheet.hideLoader(); + _dialogService.showErrorBottomSheet( + message: apiResponse.errorMessage!, + onOkPressed: () { + navigationService.pop(); + }); + } else if (apiResponse.messageStatus == 1) { + patientFamilyFiles.removeWhere((element) => element.id == id); + LoaderBottomSheet.hideLoader(); + notifyListeners(); + navigationService.pop(); + } + }, + ); + }, + onCancelPressed: () { + navigationService.pop(); + }); + } + + Future acceptRejectFileFromFamilyMembers({int? id, int? status}) async { + NavigationService navigationService = getIt.get(); + LoaderBottomSheet.showLoader(); + final result = await medicalFileRepo.acceptRejectFamilyFile(id: id, status: status); + result.fold( + (failure) async => await errorHandlerService.handleError(failure: failure), + (apiResponse) { + if (apiResponse.messageStatus == 2) { + LoaderBottomSheet.hideLoader(); + _dialogService.showErrorBottomSheet( + message: apiResponse.errorMessage!, + onOkPressed: () { + navigationService.pop(); + }); + } else if (apiResponse.messageStatus == 1) { + // FamilyFileResponseModelLists moveProfile = pendingFamilyFiles.firstWhere((element) => element.id == patientID); + // moveProfile.status = 3; + // moveProfile.statusDescription = "Approved"; + // patientFamilyFiles.add(moveProfile); + pendingFamilyFiles.removeWhere((element) => element.id == id); + //TODO: Call Api Here To Load Family Members + getFamilyFiles(status: 0); + getAllPendingRecordsByResponseId(); + LoaderBottomSheet.hideLoader(); + onFamilyFileTabChange(0); + } + }, + ); + } } diff --git a/lib/features/medical_file/models/family_file_response_model.dart b/lib/features/medical_file/models/family_file_response_model.dart index 82fe3d8..f4aa557 100644 --- a/lib/features/medical_file/models/family_file_response_model.dart +++ b/lib/features/medical_file/models/family_file_response_model.dart @@ -23,83 +23,90 @@ class FamilyFileResponseModelLists { String? patientIdenficationNumber; String? patientName; String? statusDescription; + bool? isSuperUser = false; + bool? isRequestFromMySide; - FamilyFileResponseModelLists({ - this.id, - this.patientId, - this.responseId, - this.relationshipId, - this.relationship, - this.relationshipN, - this.regionId, - this.familyRegionId, - this.status, - this.isActive, - this.editedOn, - this.createdOn, - this.age, - this.emaiLAddress, - this.gender, - this.genderDescription, - this.genderImage, - this.mobileNumber, - this.patientDataVerified, - this.patientIdenficationNumber, - this.patientName, - this.statusDescription, - }); + FamilyFileResponseModelLists( + {this.id, + this.patientId, + this.responseId, + this.relationshipId, + this.relationship, + this.relationshipN, + this.regionId, + this.familyRegionId, + this.status, + this.isActive, + this.editedOn, + this.createdOn, + this.age, + this.emaiLAddress, + this.gender, + this.genderDescription, + this.genderImage, + this.mobileNumber, + this.patientDataVerified, + this.patientIdenficationNumber, + this.patientName, + this.statusDescription, + this.isSuperUser, + this.isRequestFromMySide}); factory FamilyFileResponseModelLists.fromRawJson(String str) => FamilyFileResponseModelLists.fromJson(json.decode(str)); String toRawJson() => json.encode(toJson()); factory FamilyFileResponseModelLists.fromJson(Map json) => FamilyFileResponseModelLists( - id: json["ID"], - patientId: json["PatientID"], - responseId: json["ResponseID"], - relationshipId: json["RelationshipID"], - relationship: json["Relationship"], - relationshipN: json["RelationshipN"], - regionId: json["RegionID"], - familyRegionId: json["FamilyRegionID"], - status: json["Status"], - isActive: json["IsActive"], - editedOn: json["EditedOn"], - createdOn: json["CreatedOn"], - age: json["Age"], - emaiLAddress: json["EmaiLAddress"], - gender: json["Gender"], - genderDescription: json["GenderDescription"], - genderImage: json["GenderImage"], - mobileNumber: json["MobileNumber"], - patientDataVerified: json["PatientDataVerified"], - patientIdenficationNumber: json["PatientIdenficationNumber"], - patientName: json["PatientName"], - statusDescription: json["StatusDescription"], - ); + id: json["ID"], + patientId: json["PatientID"], + responseId: json["ResponseID"], + relationshipId: json["RelationshipID"], + relationship: json["Relationship"], + relationshipN: json["RelationshipN"], + regionId: json["RegionID"], + familyRegionId: json["FamilyRegionID"], + status: json["Status"], + isActive: json["IsActive"], + editedOn: json["EditedOn"], + createdOn: json["CreatedOn"], + age: json["Age"], + emaiLAddress: json["EmaiLAddress"], + gender: json["Gender"], + genderDescription: json["GenderDescription"], + genderImage: json["GenderImage"], + mobileNumber: json["MobileNumber"], + patientDataVerified: json["PatientDataVerified"], + patientIdenficationNumber: json["PatientIdenficationNumber"], + patientName: json["PatientName"], + statusDescription: json["StatusDescription"], + isSuperUser: json["isSuperUser"] ?? false, + isRequestFromMySide: json["isRequestFromMySide"] ?? false, + ); Map toJson() => { - "ID": id, - "PatientID": patientId, - "ResponseID": responseId, - "RelationshipID": relationshipId, - "Relationship": relationship, - "RelationshipN": relationshipN, - "RegionID": regionId, - "FamilyRegionID": familyRegionId, - "Status": status, - "IsActive": isActive, - "EditedOn": editedOn, - "CreatedOn": createdOn, - "Age": age, - "EmaiLAddress": emaiLAddress, - "Gender": gender, - "GenderDescription": genderDescription, - "GenderImage": genderImage, - "MobileNumber": mobileNumber, - "PatientDataVerified": patientDataVerified, - "PatientIdenficationNumber": patientIdenficationNumber, - "PatientName": patientName, - "StatusDescription": statusDescription, - }; + "ID": id, + "PatientID": patientId, + "ResponseID": responseId, + "RelationshipID": relationshipId, + "Relationship": relationship, + "RelationshipN": relationshipN, + "RegionID": regionId, + "FamilyRegionID": familyRegionId, + "Status": status, + "IsActive": isActive, + "EditedOn": editedOn, + "CreatedOn": createdOn, + "Age": age, + "EmaiLAddress": emaiLAddress, + "Gender": gender, + "GenderDescription": genderDescription, + "GenderImage": genderImage, + "MobileNumber": mobileNumber, + "PatientDataVerified": patientDataVerified, + "PatientIdenficationNumber": patientIdenficationNumber, + "PatientName": patientName, + "StatusDescription": statusDescription, + "isSuperUser": isSuperUser, + "isRequestFromMySide": isRequestFromMySide, + }; } diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index cb2f76f..da19747 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -16,6 +16,7 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; +import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; @@ -81,6 +82,7 @@ class _LandingPageState extends State { myAppointmentsViewModel.getPatientAppointments(true, false); myAppointmentsViewModel.getPatientMyDoctors(); prescriptionsViewModel.initPrescriptionsViewModel(); + } }); super.initState(); diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index 4b5259f..b87d657 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -29,6 +29,7 @@ import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointme import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart'; import 'package:hmg_patient_app_new/presentation/insurance/widgets/patient_insurance_card.dart'; +import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/medical_reports_page.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/patient_sickleaves_list_page.dart'; @@ -80,7 +81,7 @@ class _MedicalFilePageState extends State { medicalFileViewModel.setIsPatientSickLeaveListLoading(true); medicalFileViewModel.getPatientSickLeaveList(); if (appState.getSuperUserID == null) { - medicalFileViewModel.getFamilyFiles(status: 3); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan + medicalFileViewModel.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan medicalFileViewModel.getAllPendingRecordsByResponseId(); //TODO: Added By Aamir } @@ -97,121 +98,139 @@ class _MedicalFilePageState extends State { medicalFileViewModel = Provider.of(context, listen: false); bookAppointmentsViewModel = Provider.of(context, listen: false); NavigationService navigationService = getIt.get(); - return Scaffold( - backgroundColor: AppColors.bgScaffoldColor, - body: CollapsingListView( - title: LocaleKeys.medicalFile.tr(context: context), - isLeading: false, - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox(height: 16.h), - TextInputWidget( - labelText: LocaleKeys.search.tr(context: context), - hintText: "Type any record", - controller: TextEditingController(), - keyboardType: TextInputType.number, - isEnable: true, - prefix: null, - autoFocus: false, - isBorderAllowed: false, - isAllowLeadingIcon: true, - padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8.h), - leadingIcon: AppAssets.student_card, - ).paddingSymmetrical(24.h, 0.0), - SizedBox(height: 16.h), - Container( - width: double.infinity, - decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), - child: Padding( - padding: EdgeInsets.all(16.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h), - SizedBox(width: 8.h), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}".toText18(isBold: true), - SizedBox(height: 4.h), - Wrap( - direction: Axis.horizontal, - spacing: 4.h, - runSpacing: 4.h, - children: [ - AppCustomChipWidget( - icon: AppAssets.file_icon, - labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}", - onChipTap: () { - navigationService.pushPage( - page: FamilyMedicalScreen( - profiles: medicalFileViewModel.patientFamilyFiles, - onSelect: (FamilyFileResponseModelLists p1) {}, - )); - }, - ), - AppCustomChipWidget( - icon: AppAssets.checkmark_icon, - labelText: LocaleKeys.verified.tr(context: context), - iconColor: AppColors.successColor, - ), - ], - ), - ], - ) - ], - ), - SizedBox(height: 16.h), - Divider(color: AppColors.dividerColor, height: 1.h), - SizedBox(height: 16.h), - Wrap( - direction: Axis.horizontal, - spacing: 4.h, - runSpacing: 4.h, - children: [ - AppCustomChipWidget( - labelText: "${appState.getAuthenticatedUser()!.age} Years Old", - ), - AppCustomChipWidget( - icon: AppAssets.blood_icon, - labelText: "${LocaleKeys.bloodType.tr(context: context)}: ${appState.getUserBloodGroup}", - iconColor: AppColors.primaryRedColor, - ), - ], - ), - ], - ), - ), - ).paddingSymmetrical(24.h, 0.0), - SizedBox(height: 16.h), - Consumer(builder: (context, medicalFileVM, child) { - return Column( + return CollapsingListView( + title: "Medical File".needTranslation, + trailing: Row( + children: [ + Wrap(spacing: -15, children: [ + Utils.buildImgWithAssets(icon: AppAssets.babyGirlImg, width: 32.h, height: 32.h, border: 1.5.h, borderRadius: 50.h), + Utils.buildImgWithAssets(icon: AppAssets.femaleImg, width: 32.h, height: 32.h, border: 1.5.h, borderRadius: 50.h), + Utils.buildImgWithAssets(icon: AppAssets.male_img, width: 32.h, height: 32.h, border: 1.5.h, borderRadius: 50.h), + ]), + SizedBox(width: 4.h), + Utils.buildSvgWithAssets(icon: AppAssets.arrow_down) + ], + ).onPress(() { + DialogService dialogService = getIt.get(); + dialogService.showFamilyBottomSheetWithoutH( + label: "Who do you want to book for?".needTranslation, + message: "This clinic or doctor is only available for the below eligible profiles.".needTranslation, + onSwitchPress: (FamilyFileResponseModelLists profile) { + medicalFileViewModel.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + }, + profiles: medicalFileViewModel.patientFamilyFiles); + }), + isLeading: false, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox(height: 16.h), + TextInputWidget( + labelText: LocaleKeys.search.tr(context: context), + hintText: "Type any record".needTranslation, + controller: TextEditingController(), + keyboardType: TextInputType.number, + isEnable: true, + prefix: null, + autoFocus: false, + isBorderAllowed: false, + isAllowLeadingIcon: true, + padding: EdgeInsets.symmetric(vertical: 8.h, horizontal: 8.h), + leadingIcon: AppAssets.student_card, + ).paddingSymmetrical(24.h, 0.0), + SizedBox(height: 16.h), + Container( + width: double.infinity, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - CustomTabBar( - activeTextColor: Color(0xffED1C2B), - activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), - tabs: [ - CustomTabBarModel(AppAssets.myFilesBottom, LocaleKeys.general.tr(context: context).needTranslation), - CustomTabBarModel(AppAssets.insurance, LocaleKeys.insurance.tr(context: context)), - CustomTabBarModel(AppAssets.requests, LocaleKeys.request.tr(context: context).needTranslation), - CustomTabBarModel(AppAssets.more, "More".needTranslation), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h), + SizedBox(width: 8.h), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}" + .toText18(isBold: true, weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1), + SizedBox(height: 4.h), + Wrap( + direction: Axis.horizontal, + spacing: 4.h, + runSpacing: 4.h, + children: [ + AppCustomChipWidget( + icon: AppAssets.file_icon, + labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}", + onChipTap: () { + navigationService.pushPage( + page: FamilyMedicalScreen( + profiles: medicalFileViewModel.patientFamilyFiles, + onSelect: (FamilyFileResponseModelLists p1) {}, + )); + }, + ), + AppCustomChipWidget( + icon: AppAssets.checkmark_icon, + labelText: LocaleKeys.verified.tr(context: context), + iconColor: AppColors.successColor, + ), + ], + ), + ], + ) + ], + ), + SizedBox(height: 16.h), + Divider(color: AppColors.dividerColor, height: 1.h), + SizedBox(height: 16.h), + Wrap( + direction: Axis.horizontal, + spacing: 4.h, + runSpacing: 4.h, + children: [ + AppCustomChipWidget( + labelText: "${appState.getAuthenticatedUser()!.age} Years Old", + ), + AppCustomChipWidget( + icon: AppAssets.blood_icon, + labelText: "${LocaleKeys.bloodType.tr(context: context)}: ${appState.getUserBloodGroup}", + iconColor: AppColors.primaryRedColor, + ), ], - onTabChange: (index) { - medicalFileVM.onTabChanged(index); - }, - ).paddingSymmetrical(24.h, 0.0), - SizedBox(height: 24.h), - getSelectedTabData(medicalFileVM.selectedTabIndex), + ), ], - ); - }), - ], - ), + ), + ), + ).paddingSymmetrical(24.h, 0.0), + SizedBox(height: 16.h), + Consumer(builder: (context, medicalFileVM, child) { + return Column( + children: [ + CustomTabBar( + activeTextColor: Color(0xffED1C2B), + activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), + tabs: [ + CustomTabBarModel(AppAssets.myFilesBottom, LocaleKeys.general.tr(context: context).needTranslation), + CustomTabBarModel(AppAssets.insurance, LocaleKeys.insurance.tr(context: context)), + CustomTabBarModel(AppAssets.requests, LocaleKeys.request.tr(context: context).needTranslation), + CustomTabBarModel(AppAssets.more, "More".needTranslation), + ], + onTabChange: (index) { + medicalFileVM.onTabChanged(index); + }, + ).paddingSymmetrical(24.h, 0.0), + SizedBox(height: 24.h), + getSelectedTabData(medicalFileVM.selectedTabIndex), + ], + ); + }), + ], ), ), ); @@ -576,28 +595,28 @@ class _MedicalFilePageState extends State { horizontalOffset: 100.0, child: FadeInAnimation( child: SizedBox( - width: 80.h, - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Image.network( - myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!, - width: 64.h, - height: 64.h, - fit: BoxFit.fill, - ).circle(100).toShimmer2(isShow: false, radius: 50.h), - SizedBox(height: 8.h), - Expanded( - child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName) - .toString() - .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2) - .toShimmer2(isShow: false), + width: 80.h, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.network( + myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!, + width: 64.h, + height: 64.h, + fit: BoxFit.fill, + ).circle(100).toShimmer2(isShow: false, radius: 50.h), + SizedBox(height: 8.h), + Expanded( + child: (myAppointmentsVM.patientMyDoctorsList[index].doctorName) + .toString() + .toText12(fontWeight: FontWeight.w500, isCenter: true, maxLine: 2) + .toShimmer2(isShow: false), + ), + ], ), - ], + ), ), ), - ), - ), ) : Utils.getNoDataWidget(context, noDataText: "You don't have any completed visits yet.".needTranslation, isSmallWidget: true, width: 62, height: 62) .paddingSymmetrical(24.h, 0.h); diff --git a/lib/presentation/my_family/my_family.dart b/lib/presentation/my_family/my_family.dart index a2bcfaa..7de92f4 100644 --- a/lib/presentation/my_family/my_family.dart +++ b/lib/presentation/my_family/my_family.dart @@ -1,7 +1,10 @@ +import 'dart:convert'; + import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; @@ -11,10 +14,10 @@ import 'package:hmg_patient_app_new/features/authentication/authentication_view_ import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; -import 'package:hmg_patient_app_new/presentation/lab/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; +import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; -import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; @@ -48,100 +51,75 @@ class _FamilyMedicalScreenState extends State { @override Widget build(BuildContext context) { - return Scaffold( - body: CollapsingListView( - title: "My Medical File".needTranslation, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - CustomTabBar( - tabs: tabs, - onTabChange: (index) { - medicalVM!.onFamilyFileTabChange(index); - }, + AppState appState = getIt.get(); + return CollapsingListView( + title: "My Medical File".needTranslation, + bottomChild: appState.getAuthenticatedUser()!.isParentUser! + ? Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)), ), - SizedBox(height: 25.h), - Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), - SizedBox(height: 20.h), - ], - ).paddingSymmetrical(20, 0)), - bottomSheet: Container( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)), + padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h), + child: CustomButton( + text: "Add a new family member".needTranslation, + onPressed: () { + DialogService dialogService = getIt.get(); + dialogService.showAddFamilyFileSheet( + label: "Add Family Member".needTranslation, + message: "Please fill the below field to add a new family member to your profile".needTranslation, + onVerificationPress: () { + medicalVM?.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); + }); + }, + icon: AppAssets.add_icon, + height: 56.h, + fontWeight: FontWeight.w600)) + : SizedBox(), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + CustomTabBar( + tabs: tabs, + onTabChange: (index) { + medicalVM!.onFamilyFileTabChange(index); + }, ), - padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h), - child: CustomButton( - text: "Add a new family member", - onPressed: () { - showModelSheet(); - }, - icon: AppAssets.add_icon, - height: 56.h, - fontWeight: FontWeight.w600)), + SizedBox(height: 25.h), + Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), + SizedBox(height: 20.h), + ], + ).paddingSymmetrical(20, 0), ); - // return Scaffold( - // backgroundColor: AppColors.scaffoldBgColor, - // appBar: CustomAppBar( - // onBackPressed: () { - // Navigator.of(context).pop(); - // }, - // onLanguageChanged: (lang) {}, - // hideLogoAndLang: true, - // ), - // body: SingleChildScrollView( - // child: Column( - // mainAxisSize: MainAxisSize.min, - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // LocaleKeys.myMedicalFile.tr().toText26(color: AppColors.textColor, weight: FontWeight.w600, letterSpacing: -2), - // SizedBox(height: 25.h), - // CustomTabBar( - // tabs: tabs, - // onTabChange: (index) { - // medicalVM!.onFamilyFileTabChange(index); - // }, - // ), - // SizedBox(height: 25.h), - // Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), - // SizedBox(height: 20.h), - // ], - // ).paddingSymmetrical(20, 0), - // ), - // bottomSheet: Container( - // decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - // color: AppColors.whiteColor, - // customBorder: BorderRadius.only(topLeft: Radius.circular(24), topRight: Radius.circular(24)), - // ), - // padding: EdgeInsets.symmetric(vertical: 10.h, horizontal: 20.h), - // child: CustomButton( - // text: "Add a new family member", - // onPressed: () { - // showModelSheet(); - // }, - // icon: AppAssets.add_icon, - // height: 56.h, - // fontWeight: FontWeight.w600, - // )), - // ); } Widget getFamilyTabs({required int index}) { switch (index) { case 0: + print(jsonEncode(medicalVM!.patientFamilyFiles)); return FamilyCards( profiles: medicalVM!.patientFamilyFiles, onSelect: (FamilyFileResponseModelLists profile) { medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); }, + onRemove: (FamilyFileResponseModelLists profile) { + medicalVM!.removeFileFromFamilyMembers(id: profile.id); + }, + isLeftAligned: true, isShowDetails: true, + isShowRemoveButton: true, ); case 1: + print(jsonEncode(medicalVM!.pendingFamilyFiles)); return FamilyCards( profiles: medicalVM!.pendingFamilyFiles, + isRequestDesign: true, onSelect: (FamilyFileResponseModelLists profile) { - // medicalVM!.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 3); + }, + onRemove: (FamilyFileResponseModelLists profile) { + medicalVM!.acceptRejectFileFromFamilyMembers(id: profile.id, status: 4); }, isShowDetails: true, ); @@ -149,85 +127,4 @@ class _FamilyMedicalScreenState extends State { return SizedBox.shrink(); } } - - Future showModelSheet() async { - AuthenticationViewModel authVm = getIt.get(); - return await showCommonBottomSheetWithoutHeight(context, - title: "Add Family Member", - useSafeArea: true, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - "Please fill the below field to add a new family member to your profile".toText16(color: AppColors.textColor, weight: FontWeight.w500), - SizedBox(height: 20.h), - Container( - decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)), - padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 8.h), - child: Column( - children: [ - CustomCountryDropdown( - countryList: CountryEnum.values, - onCountryChange: authVm.onCountryChange, - ).paddingOnly(top: 8.h, bottom: 16.h), - Divider(height: 1.h, color: AppColors.spacerLineColor), - TextInputWidget( - labelText: LocaleKeys.nationalIdNumber.tr(), - hintText: "xxxxxxxxx", - controller: authVm.nationalIdController, - // focusNode: _nationalIdFocusNode, - isEnable: true, - prefix: null, - isAllowRadius: true, - isBorderAllowed: false, - isAllowLeadingIcon: true, - autoFocus: true, - keyboardType: TextInputType.number, - padding: EdgeInsets.symmetric(vertical: 8.h), - leadingIcon: AppAssets.student_card, - ).paddingOnly(top: 8.h, bottom: 8.h), - Divider(height: 1.h, color: AppColors.spacerLineColor), - TextInputWidget( - labelText: LocaleKeys.phoneNumber.tr(), - hintText: "", - controller: authVm.phoneNumberController, - isEnable: true, - prefix: authVm.selectedCountrySignup.countryCode, - isAllowRadius: true, - isBorderAllowed: false, - isAllowLeadingIcon: true, - autoFocus: true, - keyboardType: TextInputType.number, - padding: EdgeInsets.symmetric(vertical: 8.h), - leadingIcon: AppAssets.smart_phone, - ).paddingOnly(top: 8.h, bottom: 4.h), - ], - ), - ), - SizedBox(height: 20.h), - CustomButton( - text: "Verify the member", - onPressed: () { - FocusScope.of(context).unfocus(); - if (ValidationUtils.isValidatedIdAndPhoneWithCountryValidation( - nationalId: authVm.nationalIdController.text, - selectedCountry: authVm.selectedCountrySignup, - phoneNumber: authVm.phoneNumberController.text, - onOkPress: () { - Navigator.of(context).pop(); - }, - )) { - // authVm.addFamilyMember(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); - medicalVM?.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); - } - }, - icon: AppAssets.add_icon, - height: 56.h, - fontWeight: FontWeight.w600), - SizedBox(height: 20.h), - ], - ), - callBackFunc: () {}); - } } diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart index 3916756..166b06d 100644 --- a/lib/presentation/my_family/widget/family_cards.dart +++ b/lib/presentation/my_family/widget/family_cards.dart @@ -17,10 +17,23 @@ import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; class FamilyCards extends StatefulWidget { final List profiles; final Function(FamilyFileResponseModelLists) onSelect; + final Function(FamilyFileResponseModelLists) onRemove; final bool isShowDetails; final bool isBottomSheet; + final bool isRequestDesign; + final bool isLeftAligned; + final bool isShowRemoveButton; - const FamilyCards({super.key, required this.profiles, required this.onSelect, this.isShowDetails = false, this.isBottomSheet = false}); + const FamilyCards( + {super.key, + required this.profiles, + required this.onSelect, + required this.onRemove, + this.isShowDetails = false, + this.isBottomSheet = false, + this.isRequestDesign = false, + this.isLeftAligned = false, + this.isShowRemoveButton = false}); @override State createState() => _FamilyCardsState(); @@ -29,91 +42,315 @@ class FamilyCards extends StatefulWidget { class _FamilyCardsState extends State { AppState appState = getIt(); + // bool isShowActions = true; + @override Widget build(BuildContext context) { - return GridView.builder( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - itemCount: widget.profiles.length, - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 2, - crossAxisSpacing: 10.h, - mainAxisSpacing: 10.h, - childAspectRatio: widget.isShowDetails ? 0.56.h : 0.74.h, - ), - padding: EdgeInsets.only(bottom: 80.h), - itemBuilder: (context, index) { - final profile = widget.profiles[index]; - final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId); - return Container( - padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), - child: Opacity( - opacity: isActive || profile.status == FamilyFileEnum.pending.toInt ? 0.4 : 1.0, // Fade all content if active - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox(height: 5.h), - Utils.buildImgWithAssets( - icon: profile.gender == null - ? AppAssets.dummy_user - : profile.gender == 1 - ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.male_img) - : (profile.age! < 7 ? AppAssets.babyGirlImg : AppAssets.femaleImg), - width: 80.h, - height: 78.h), - SizedBox(height: 8.h), - (profile.patientName ?? "Unknown").toText16(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), - SizedBox(height: 4.h), - CustomChipWidget( - chipType: ChipTypeEnum.alert, - backgroundColor: AppColors.lightGrayBGColor, - chipText: "Relation: ${profile.relationship ?? "N/A"}", - iconAsset: AppAssets.heart, - isShowBorder: false, - borderRadius: 8.h, - textColor: AppColors.textColor), - widget.isShowDetails ? SizedBox(height: 4.h) : SizedBox(), - widget.isShowDetails - ? CustomChipWidget( + if (widget.isRequestDesign) { + return Column( + children: [ + Row( + children: [ + Utils.buildSvgWithAssets(icon: AppAssets.alertSquare), + SizedBox(width: 8.h), + "Sent Requests".needTranslation.toText14(color: AppColors.textColor, isUnderLine: true, weight: FontWeight.w500), + SizedBox(width: 4.h), + Utils.buildSvgWithAssets(icon: AppAssets.arrowRight), + ], + ), + SizedBox(height: 24.h), + ListView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + itemCount: widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).length, + itemBuilder: (context, index) { + final mySideProfiles = widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).toList(); + FamilyFileResponseModelLists profile = mySideProfiles[index]; + + return Container( + margin: EdgeInsets.only( + bottom: 12.h, + ), + padding: EdgeInsets.symmetric( + vertical: 15.h, + horizontal: 15.h, + ), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), + child: Opacity( + opacity: 1.0, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + CustomChipWidget( + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.lightGreenColor + : AppColors.lightGrayBGColor, + chipText: profile.statusDescription ?? "N/A", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.textGreenColor + : AppColors.alertColor, + ), + Wrap( + alignment: WrapAlignment.start, + children: [ + (profile.patientName ?? "").toText16( + isBold: false, + isCenter: true, + maxlines: 1, + weight: FontWeight.w600, + ), + ("has ${(profile.statusDescription ?? "").toLowerCase()} your family member request").toText14( + isBold: false, + isCenter: true, + maxlines: 1, + weight: FontWeight.w500, + color: AppColors.greyTextColor, + ), + ], + ), + SizedBox(height: 4.h), + CustomChipWidget( + height: 30.h, chipType: ChipTypeEnum.alert, backgroundColor: AppColors.lightGrayBGColor, - chipText: "Age: ${profile.age ?? "N/A"} Years", + chipText: "Medical File: ${profile.responseId ?? "N/A"}", + iconAsset: null, isShowBorder: false, borderRadius: 8.h, textColor: AppColors.textColor, - ) - : SizedBox(), - widget.isShowDetails ? SizedBox(height: 8.h) : SizedBox(), - Spacer(), - if (isActive) - CustomButton( - height: 40.h, - onPressed: () {}, - text: LocaleKeys.active.tr(), - backgroundColor: Colors.grey.shade200, - borderColor: Colors.grey.shade200, - textColor: AppColors.greyTextColor, - fontSize: 13.h, - ).paddingOnly(top: 0, bottom: 0) - else - CustomButton( - height: 40.h, - onPressed: () => widget.onSelect(profile), - text: LocaleKeys.switchAccount.tr(), - backgroundColor: AppColors.secondaryLightRedColor, - borderColor: AppColors.secondaryLightRedColor, - textColor: AppColors.primaryRedColor, - fontSize: 13.h, - icon: widget.isBottomSheet ? null : AppAssets.switch_user, - iconColor: AppColors.primaryRedColor, - padding: EdgeInsets.symmetric(vertical: 0, horizontal: 0), - ).paddingOnly(top: 0, bottom: 0), + ), + ], + ), + ), + ); + }, + ), + SizedBox(height: 20.h), + if (widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).isNotEmpty) + Row( + children: [ + Utils.buildSvgWithAssets(icon: AppAssets.alertSquare), + SizedBox(width: 8.h), + "Users who want to view your profile".needTranslation.toText14(color: AppColors.textColor, isUnderLine: true, weight: FontWeight.w500), + SizedBox(width: 4.h), + Utils.buildSvgWithAssets(icon: AppAssets.arrowRight), ], ), + + // Items for second group (requests from others) + ListView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length, + itemBuilder: (context, index) { + final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList(); + FamilyFileResponseModelLists profile = otherProfiles[index]; + return Container( + margin: EdgeInsets.only(bottom: 12.h), + padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), + child: Opacity( + opacity: 1.0, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + CustomChipWidget( + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.lightGreenColor + : AppColors.lightGrayBGColor, + chipText: profile.statusDescription ?? "N/A", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.textGreenColor + : AppColors.alertColor, + ), + Wrap( + alignment: WrapAlignment.start, + children: [ + (profile.patientName ?? "").toText16(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), + (profile.status == FamilyFileEnum.active.toInt ? "can view your family".needTranslation : "wants to add you as their family member".needTranslation).toText14( + isBold: false, + isCenter: true, + maxlines: 1, + weight: FontWeight.w500, + color: AppColors.greyTextColor, + ), + ], + ), + SizedBox(height: 4.h), + CustomChipWidget( + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: AppColors.lightGrayBGColor, + chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: AppColors.textColor, + ), + SizedBox(height: 16.h), + Row( + children: [ + profile.status == FamilyFileEnum.active.toInt + ? SizedBox() + : Expanded( + child: CustomButton( + height: 40.h, + text: LocaleKeys.confirm.tr(), + onPressed: () { + widget.onSelect(profile); + }, + backgroundColor: AppColors.lightGreenButtonColor, + borderColor: AppColors.lightGreenButtonColor, + textColor: AppColors.textGreenColor, + icon: null, + ), + ), + profile.status == FamilyFileEnum.active.toInt ? SizedBox() : SizedBox(width: 8.h), + Expanded( + child: CustomButton( + height: 40.h, + text: profile.status == FamilyFileEnum.active.toInt ? LocaleKeys.removeMember.tr() : LocaleKeys.cancel.tr(), + onPressed: () { + widget.onRemove(profile); + }, + backgroundColor: AppColors.secondaryLightRedColor, + borderColor: AppColors.secondaryLightRedColor, + textColor: AppColors.primaryRedColor, + icon: null, + iconColor: AppColors.primaryRedColor, + ), + ), + ], + ), + ], + ), + ), + ); + }, ), - ); - }, - ); + ], + ); + } else { + return GridView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: widget.profiles.length, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 2, + crossAxisSpacing: 10.h, + mainAxisSpacing: 10.h, + childAspectRatio: widget.isShowDetails ? 0.56.h : 0.66.h, + ), + padding: EdgeInsets.only(bottom: 20.h), + itemBuilder: (context, index) { + final profile = widget.profiles[index]; + final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId); + final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false; + final canSwitch = isParentUser || (!isParentUser && profile.responseId == appState.getSuperUserID); + return Container( + padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), + child: Opacity( + opacity: isActive || profile.status == FamilyFileEnum.pending.toInt || !canSwitch ? 0.4 : 1.0, // Fade all content if active + child: Stack( + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + Utils.buildImgWithAssets( + icon: profile.gender == null + ? AppAssets.dummy_user + : profile.gender == 1 + ? ((profile.age ?? 0) < 7 ? AppAssets.babyBoyImg : AppAssets.male_img) + : (profile.age! < 7 ? AppAssets.babyGirlImg : AppAssets.femaleImg), + width: 80.h, + height: 78.h), + SizedBox(height: 8.h), + (profile.patientName ?? "Unknown").toText16(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), + SizedBox(height: 4.h), + CustomChipWidget( + chipType: ChipTypeEnum.alert, + backgroundColor: AppColors.lightGrayBGColor, + chipText: "Relation:${profile.relationship ?? "N/A"}", + iconAsset: AppAssets.heart, + isShowBorder: false, + borderRadius: 8.h, + textColor: AppColors.textColor), + widget.isShowDetails ? SizedBox(height: 4.h) : SizedBox(), + widget.isShowDetails + ? CustomChipWidget( + chipType: ChipTypeEnum.alert, + backgroundColor: AppColors.lightGrayBGColor, + chipText: "Age:${profile.age ?? "N/A"} Years", + isShowBorder: false, + borderRadius: 8.h, + textColor: AppColors.textColor, + ) + : SizedBox(), + widget.isShowDetails ? SizedBox(height: 8.h) : SizedBox(), + Spacer(), + CustomButton( + height: 40.h, + onPressed: () { + if (canSwitch) widget.onSelect(profile); + }, + text: isActive ? "Active".needTranslation : "Switch".needTranslation, + backgroundColor: isActive || !canSwitch ? Colors.grey.shade200 : AppColors.secondaryLightRedColor, + borderColor: isActive || !canSwitch ? Colors.grey.shade200 : AppColors.secondaryLightRedColor, + textColor: isActive || !canSwitch ? AppColors.greyTextColor : AppColors.primaryRedColor, + fontSize: 13.h, + icon: isActive ? AppAssets.activeCheck : AppAssets.switch_user, + iconColor: isActive || !canSwitch ? (isActive ? null : AppColors.greyTextColor) : AppColors.primaryRedColor, + padding: EdgeInsets.symmetric(vertical: 0, horizontal: 0), + ).paddingOnly(top: 0, bottom: 0), + ], + ), + if (widget.isShowRemoveButton) ...[ + Positioned( + top: 0, + right: 0, + child: Utils.buildSvgWithAssets(icon: AppAssets.deleteIcon).onPress(() { + if (!isActive) widget.onRemove(profile); + }), + ), + ], + ], + ), + ), + ); + }, + ); + } } } diff --git a/lib/presentation/my_family/widget/my_family_sheet.dart b/lib/presentation/my_family/widget/my_family_sheet.dart index da822b1..1c085ca 100644 --- a/lib/presentation/my_family/widget/my_family_sheet.dart +++ b/lib/presentation/my_family/widget/my_family_sheet.dart @@ -7,7 +7,7 @@ import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; class MyFamilySheet { static Future show(BuildContext context, List familyLists, Function(FamilyFileResponseModelLists) onSelect) async { - return await showCommonBottomSheetWithoutHeight( + return showCommonBottomSheetWithoutHeight( context, titleWidget: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -22,6 +22,7 @@ class MyFamilySheet { Navigator.of(context).pop(); // Close the bottom sheet onSelect(profile); // Call the onSelect callback }, + onRemove: (profile) {}, isBottomSheet: true), callBackFunc: () {}, ); diff --git a/lib/presentation/profile_settings/profile_settings.dart b/lib/presentation/profile_settings/profile_settings.dart index 58273fc..2afa3e0 100644 --- a/lib/presentation/profile_settings/profile_settings.dart +++ b/lib/presentation/profile_settings/profile_settings.dart @@ -1,16 +1,25 @@ +import 'dart:convert'; +import 'dart:developer'; + import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_swiper_view/flutter_swiper_view.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/int_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; +import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; +import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_view_model.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/habib_wallet_page.dart'; import 'package:hmg_patient_app_new/presentation/habib_wallet/recharge_wallet_page.dart'; +import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/app_language_change.dart'; @@ -48,6 +57,7 @@ class _ProfileSettingsState extends State { @override Widget build(BuildContext context) { + final MedicalFileViewModel medicalFileViewModel = getIt.get(); return CollapsingListView( title: "Profile & Settings".needTranslation, logout: () {}, @@ -57,11 +67,12 @@ class _ProfileSettingsState extends State { physics: NeverScrollableScrollPhysics(), child: Consumer( builder: (context, model, child) { + print(jsonEncode(medicalFileViewModel.patientFamilyFiles)); return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Swiper( - itemCount: length, + itemCount: medicalFileViewModel.patientFamilyFiles.length, layout: SwiperLayout.STACK, loop: true, itemWidth: MediaQuery.of(context).size.width - 42, @@ -75,7 +86,21 @@ class _ProfileSettingsState extends State { builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor), ), itemBuilder: (BuildContext context, int index) { - return FamilyCardWidget().paddingOnly(right: 16); + return FamilyCardWidget( + profile: medicalFileViewModel.patientFamilyFiles[index], + onAddFamilyMemberPress: () { + DialogService dialogService = getIt.get(); + dialogService.showAddFamilyFileSheet( + label: "Add Family Member".needTranslation, + message: "Please fill the below field to add a new family member to your profile".needTranslation, + onVerificationPress: () { + medicalFileViewModel.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); + }); + }, + onFamilySwitchPress: (FamilyFileResponseModelLists profile) { + medicalFileViewModel.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + }, + ).paddingOnly(right: 16); }, ), GridView( @@ -224,16 +249,20 @@ class _ProfileSettingsState extends State { } class FamilyCardWidget extends StatelessWidget { - FamilyCardWidget(); + final Function() onAddFamilyMemberPress; + final Function(FamilyFileResponseModelLists member) onFamilySwitchPress; + final FamilyFileResponseModelLists profile; + + const FamilyCardWidget({required this.onAddFamilyMemberPress, required this.profile, required this.onFamilySwitchPress(FamilyFileResponseModelLists member)}); @override Widget build(BuildContext context) { + AppState appState = getIt.get(); + final isActive = (profile.responseId == appState.getAuthenticatedUser()?.patientId); + final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false; + final canSwitch = isParentUser || (!isParentUser && profile.responseId == appState.getSuperUserID); return Container( - decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: AppColors.whiteColor, - borderRadius: 20.h, - hasShadow: true, - ), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 20.h, hasShadow: true), child: Column( children: [ Column( @@ -243,16 +272,16 @@ class FamilyCardWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, spacing: 8.h, children: [ - Image.asset(true ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h), + Image.asset((profile.gender == 1) ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h), Column( crossAxisAlignment: CrossAxisAlignment.start, spacing: 0.h, mainAxisSize: MainAxisSize.min, children: [ - "Mahmoud Shrouf Shrouf".toText18(isBold: true, weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1), + (profile.patientName ?? "").toText18(isBold: true, weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1), AppCustomChipWidget( icon: AppAssets.file_icon, - labelText: "File no: 3423443", + labelText: "File no: ${profile.patientId}", iconSize: 14, ), ], @@ -266,11 +295,11 @@ class FamilyCardWidget extends StatelessWidget { alignment: WrapAlignment.start, spacing: 8.h, children: [ - AppCustomChipWidget(labelText: "35 Years Old"), - AppCustomChipWidget(labelText: "Blood: A+"), + AppCustomChipWidget(labelText: "${profile.age} Years Old"), + AppCustomChipWidget(labelText: "Blood: N/A"), AppCustomChipWidget( icon: AppAssets.insurance_active_icon, - labelText: "Insurance Active", + labelText: "Insurance N/A", iconColor: AppColors.bgGreenColor, iconSize: 14, backgroundColor: AppColors.bgGreenColor.withValues(alpha: 0.15), @@ -281,9 +310,92 @@ class FamilyCardWidget extends StatelessWidget { ], ).paddingOnly(top: 16, right: 16, left: 16, bottom: 12).expanded, 1.divider, - CustomButton(icon: AppAssets.add_family, text: "Add a new family member".needTranslation, onPressed: () {}).paddingOnly(top: 12, right: 16, left: 16, bottom: 16), + _buildActionButton(appState), + + // if (appState.getAuthenticatedUser()!.isParentUser ?? false) ...[ + // if (member!.responseId != appState.getAuthenticatedUser()!.patientId) ...[ + // CustomButton( + // icon: AppAssets.switch_user, + // text: "Switch Family File".needTranslation, + // onPressed: () { + // onFamilySwitchPress(member!); + // }, + // ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16), + // ] else + // ...[ + // CustomButton( + // icon: AppAssets.add_family, + // text: "Add a new family member".needTranslation, + // onPressed: () { + // onAddFamilyMemberPress(); + // }, + // ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16), + // ] + // ] else + // ...[ + // if (appState.getSuperUserID != null && appState.getSuperUserID == member!.responseId) ...[ + // CustomButton( + // icon: AppAssets.switch_user, + // text: "Switch Back To Family File".needTranslation, + // onPressed: () { + // onFamilySwitchPress(member!); + // }, + // ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16), + // ] else + // ...[ + // CustomButton( + // icon: AppAssets.switch_user, + // text: "Disabled".needTranslation, + // backgroundColor: Colors.grey.shade200, + // borderColor: Colors.grey.shade200, + // textColor: AppColors.greyTextColor, + // onPressed: () {}, + // iconColor: AppColors.greyTextColor, + // ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16), + // ] + // ] ], ), ); } + + Widget _buildActionButton(AppState appState) { + final isParentUser = appState.getAuthenticatedUser()?.isParentUser ?? false; + final int? currentUserId = appState.getAuthenticatedUser()?.patientId; + final int? superUserId = appState.getSuperUserID; + + if (isParentUser) { + return _buildParentUserButton(currentUserId); + } else { + return _buildNonParentUserButton(superUserId); + } + } + + Widget _buildParentUserButton(int? currentUserId) { + final canSwitch = profile.responseId != currentUserId; + + return CustomButton( + icon: canSwitch ? AppAssets.switch_user : AppAssets.add_family, + text: canSwitch ? "Switch Family File".needTranslation : "Add a new family member".needTranslation, + onPressed: canSwitch ? () => onFamilySwitchPress(profile) : onAddFamilyMemberPress, + backgroundColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor, + borderColor: canSwitch ? AppColors.secondaryLightRedColor : AppColors.primaryRedColor, + textColor: canSwitch ? AppColors.primaryRedColor : AppColors.whiteColor, + iconColor: canSwitch ? AppColors.primaryRedColor : AppColors.whiteColor, + ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16); + } + + Widget _buildNonParentUserButton(int? superUserId) { + final canSwitchBack = superUserId != null && superUserId == profile.responseId; + + return CustomButton( + icon: AppAssets.switch_user, + text: canSwitchBack ? "Switch Back To Family File".needTranslation : "Switch".needTranslation, + backgroundColor: canSwitchBack ? AppColors.primaryRedColor : Colors.grey.shade200, + borderColor: canSwitchBack ? AppColors.primaryRedColor : Colors.grey.shade200, + textColor: canSwitchBack ? AppColors.whiteColor : AppColors.greyTextColor, + iconColor: canSwitchBack ? AppColors.whiteColor : AppColors.greyTextColor, + onPressed: canSwitchBack ? () => onFamilySwitchPress(profile) : () {}, + ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16); + } } diff --git a/lib/services/dialog_service.dart b/lib/services/dialog_service.dart index 6ee0ddc..4d332b3 100644 --- a/lib/services/dialog_service.dart +++ b/lib/services/dialog_service.dart @@ -4,12 +4,15 @@ import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/extensions/route_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/bottomsheet/exception_bottom_sheet.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +import 'package:hmg_patient_app_new/widgets/family_files/family_file_add_widget.dart'; abstract class DialogService { Future showErrorBottomSheet({String title = "", required String message, Function()? onOkPressed, Function()? onCancelPressed}); @@ -18,7 +21,12 @@ abstract class DialogService { Future showCommonBottomSheetWithoutH({String? label, required String message, required Function() onOkPressed, Function()? onCancelPressed}); + Future showFamilyBottomSheetWithoutH( + {String? label, required String message, required Function(FamilyFileResponseModelLists response) onSwitchPress, required List profiles}); + Future showPhoneNumberPickerSheet({String? label, String? message, required Function() onSMSPress, required Function() onWhatsappPress}); + + Future showAddFamilyFileSheet({String? label, String? message, required Function() onVerificationPress}); // TODO : Need to be Fixed showPhoneNumberPickerSheet ( From Login ADn Signup Bottom Sheet Move Here } @@ -93,6 +101,24 @@ class DialogServiceImp implements DialogService { title: label ?? "", child: exceptionBottomSheetWidget(context: context, message: message, onOkPressed: onOkPressed, onCancelPressed: onCancelPressed), callBackFunc: () {}); } + @override + Future showFamilyBottomSheetWithoutH( + {String? label, required String message, required Function(FamilyFileResponseModelLists response) onSwitchPress, required List profiles}) async { + final context = navigationService.navigatorKey.currentContext; + if (context == null) return; + showCommonBottomSheetWithoutHeight(context, + title: label ?? "", + child: FamilyCards( + profiles: profiles, + onSelect: (FamilyFileResponseModelLists profile) { + onSwitchPress(profile); + }, + onRemove: (FamilyFileResponseModelLists profile) {}, + isShowDetails: false, + ), + callBackFunc: () {}); + } + @override Future showPhoneNumberPickerSheet({String? label, String? message, required Function() onSMSPress, required Function() onWhatsappPress}) async { final context = navigationService.navigatorKey.currentContext; @@ -100,6 +126,18 @@ class DialogServiceImp implements DialogService { showCommonBottomSheetWithoutHeight(context, title: label ?? "", child: showPhoneNumberPickerWidget(context: context, message: message, onSMSPress: onSMSPress, onWhatsappPress: onWhatsappPress), callBackFunc: () {}); } + + @override + Future showAddFamilyFileSheet({String? label, String? message, required Function() onVerificationPress}) async { + final context = navigationService.navigatorKey.currentContext; + if (context == null) return; + showCommonBottomSheetWithoutHeight(context, + title: label ?? "", + child: FamilyFileAddWidget(() { + onVerificationPress(); + }, message ?? ""), + callBackFunc: () {}); + } } Widget exceptionBottomSheetWidget({required BuildContext context, required String message, required Function() onOkPressed, Function()? onCancelPressed}) { @@ -216,3 +254,12 @@ Widget showPhoneNumberPickerWidget({required BuildContext context, String? messa // ); }); } + +// Widget familyMemberAddWidget() { +// AuthenticationViewModel authVm = getIt.get(); +// return showCommonBottomSheetWithoutHeight(context, +// title: "Add Family Member".needTranslation, +// useSafeArea: true, +// child: +// callBackFunc: () {}); +// } diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart index b18c6ee..60b0f03 100644 --- a/lib/widgets/appbar/collapsing_list_view.dart +++ b/lib/widgets/appbar/collapsing_list_view.dart @@ -22,10 +22,11 @@ class CollapsingListView extends StatelessWidget { VoidCallback? logout; VoidCallback? history; Widget? bottomChild; + Widget? trailing; bool isClose; bool isLeading; - CollapsingListView({required this.title, this.child, this.search, this.isClose = false, this.bottomChild, this.report, this.logout, this.history, this.isLeading = true}); + CollapsingListView({required this.title, this.child, this.search, this.isClose = false, this.bottomChild, this.report, this.logout, this.history, this.isLeading = true, this.trailing}); @override Widget build(BuildContext context) { @@ -97,7 +98,8 @@ class CollapsingListView extends StatelessWidget { if (logout != null) actionButton(context, t, title: "Logout".needTranslation, icon: AppAssets.logout).onPress(logout!), if (report != null) actionButton(context, t, title: "Report".needTranslation, icon: AppAssets.report_icon).onPress(report!), if (history != null) actionButton(context, t, title: "History".needTranslation, icon: AppAssets.insurance_history_icon).onPress(history!), - if (search != null) Utils.buildSvgWithAssets(icon: AppAssets.search_icon).onPress(search!).paddingOnly(right: 24) + if (search != null) Utils.buildSvgWithAssets(icon: AppAssets.search_icon).onPress(search!).paddingOnly(right: 24), + if (trailing != null) trailing!, ], )), ), diff --git a/lib/widgets/buttons/custom_button.dart b/lib/widgets/buttons/custom_button.dart index 2f8a9ec..b253c36 100644 --- a/lib/widgets/buttons/custom_button.dart +++ b/lib/widgets/buttons/custom_button.dart @@ -23,28 +23,30 @@ class CustomButton extends StatelessWidget { final double? width; final double iconSize; final TextOverflow? textOverflow; + final BorderSide? borderSide; - CustomButton({ - Key? key, - required this.text, - required this.onPressed, - this.backgroundColor = const Color(0xFFED1C2B), - this.borderColor = const Color(0xFFED1C2B), - this.textColor = Colors.white, - this.borderRadius = 12, - this.borderWidth = 2, - this.padding = const EdgeInsets.fromLTRB(8, 10, 8, 10), - this.fontSize = 16, - this.fontFamily, - this.fontWeight = FontWeight.w500, - this.isDisabled = false, - this.icon, - this.iconColor = Colors.white, - this.height = 56, - this.width, - this.iconSize = 24, - this.textOverflow, - }) : super(key: key); + CustomButton( + {Key? key, + required this.text, + required this.onPressed, + this.backgroundColor = const Color(0xFFED1C2B), + this.borderColor = const Color(0xFFED1C2B), + this.textColor = Colors.white, + this.borderRadius = 12, + this.borderWidth = 2, + this.padding = const EdgeInsets.fromLTRB(8, 10, 8, 10), + this.fontSize = 16, + this.fontFamily, + this.fontWeight = FontWeight.w500, + this.isDisabled = false, + this.icon, + this.iconColor = Colors.white, + this.height = 56, + this.width, + this.iconSize = 24, + this.textOverflow, + this.borderSide}) + : super(key: key); @override Widget build(BuildContext context) { @@ -57,17 +59,15 @@ class CustomButton extends StatelessWidget { decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: isDisabled ? Colors.transparent : backgroundColor, borderRadius: borderRadius, - side: BorderSide( - width: borderWidth.h, - color: isDisabled ? borderColor.withOpacity(0.5) : borderColor, - )), + customBorder: BorderRadius.circular(borderRadius), + side: borderSide ?? BorderSide(width: borderWidth.h, color: isDisabled ? borderColor.withValues(alpha: 0.5) : borderColor)), child: Row( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center, children: [ if (icon != null) Padding( - padding: const EdgeInsets.only(right: 8.0, left: 8.0), + padding: EdgeInsets.only(right: 8.h, left: 8.h), child: Utils.buildSvgWithAssets(icon: icon!, iconColor: iconColor, isDisabled: isDisabled, width: iconSize, height: iconSize), ), Padding( @@ -85,17 +85,6 @@ class CustomButton extends StatelessWidget { ), ], ), - ) - - // .toSmoothContainer( - // smoothness: 1, - // side: BorderSide(width: borderWidth, color: backgroundColor), - // borderRadius: BorderRadius.circular(borderRadius * 1.2), - // foregroundDecoration: BoxDecoration( - // color: isDisabled ? backgroundColor.withOpacity(0.5) : Colors.transparent, - // borderRadius: BorderRadius.circular(borderRadius), - // ), - // ), - ); + )); } } diff --git a/lib/widgets/chip/custom_chip_widget.dart b/lib/widgets/chip/custom_chip_widget.dart index 1d0b5ef..5dee4f0 100644 --- a/lib/widgets/chip/custom_chip_widget.dart +++ b/lib/widgets/chip/custom_chip_widget.dart @@ -17,6 +17,7 @@ class CustomChipWidget extends StatelessWidget { final Color? textColor; final Color? borderColor; final bool isShowBorder; + final double? height; const CustomChipWidget({ super.key, @@ -31,6 +32,7 @@ class CustomChipWidget extends StatelessWidget { this.textColor, this.borderColor, this.isShowBorder = false, + this.height, }); @override @@ -39,6 +41,7 @@ class CustomChipWidget extends StatelessWidget { final hasOnTap = onTap != null || hasIcon; return Container( + height: height, decoration: BoxDecoration( borderRadius: BorderRadius.circular(borderRadius), color: isSelected ? chipType.color : backgroundColor ?? chipType.backgroundColor, diff --git a/lib/widgets/family_files/family_file_add_widget.dart b/lib/widgets/family_files/family_file_add_widget.dart new file mode 100644 index 0000000..8e57f91 --- /dev/null +++ b/lib/widgets/family_files/family_file_add_widget.dart @@ -0,0 +1,105 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/enums.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/validation_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/dropdown/country_dropdown_widget.dart'; +import 'package:hmg_patient_app_new/widgets/input_widget.dart'; + +class FamilyFileAddWidget extends StatelessWidget { + final Function()? onVerificationPress; + final String message; + + const FamilyFileAddWidget(this.onVerificationPress, this.message, {super.key}); + + @override + Widget build(BuildContext context) { + AuthenticationViewModel authVm = getIt.get(); + MedicalFileViewModel? medicalVM = getIt.get(); + // TODO: implement build + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + message.toText16(color: AppColors.textColor, weight: FontWeight.w500), + SizedBox(height: 20.h), + Container( + decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)), + padding: EdgeInsets.symmetric(horizontal: 16.h, vertical: 8.h), + child: Column( + children: [ + CustomCountryDropdown( + countryList: CountryEnum.values, + onCountryChange: authVm.onCountryChange, + ).paddingOnly(top: 8.h, bottom: 16.h), + Divider(height: 1.h, color: AppColors.spacerLineColor), + TextInputWidget( + labelText: LocaleKeys.nationalIdNumber.tr(), + hintText: "xxxxxxxxx", + controller: authVm.nationalIdController, + isEnable: true, + prefix: null, + isAllowRadius: true, + isBorderAllowed: false, + isAllowLeadingIcon: true, + autoFocus: true, + keyboardType: TextInputType.number, + padding: EdgeInsets.symmetric(vertical: 8.h), + leadingIcon: AppAssets.student_card, + ).paddingOnly(top: 8.h, bottom: 8.h), + Divider(height: 1.h, color: AppColors.spacerLineColor), + TextInputWidget( + labelText: LocaleKeys.phoneNumber.tr(), + hintText: "", + controller: authVm.phoneNumberController, + isEnable: true, + prefix: authVm.selectedCountrySignup.countryCode, + isAllowRadius: true, + isBorderAllowed: false, + isAllowLeadingIcon: true, + autoFocus: true, + keyboardType: TextInputType.number, + padding: EdgeInsets.symmetric(vertical: 8.h), + leadingIcon: AppAssets.smart_phone, + ).paddingOnly(top: 8.h, bottom: 4.h), + ], + ), + ), + SizedBox(height: 20.h), + CustomButton( + text: "Verify the member".needTranslation, + onPressed: () { + FocusScope.of(context).unfocus(); + if (ValidationUtils.isValidatedIdAndPhoneWithCountryValidation( + nationalId: authVm.nationalIdController.text, + selectedCountry: authVm.selectedCountrySignup, + phoneNumber: authVm.phoneNumberController.text, + onOkPress: () { + Navigator.of(context).pop(); + }, + )) { + // authVm.addFamilyMember(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); + if (onVerificationPress != null) { + onVerificationPress!(); + } + } + }, + icon: AppAssets.add_icon, + height: 56.h, + fontWeight: FontWeight.w600), + SizedBox(height: 20.h), + ], + ); + } +} From 24362f67cbe92690d0c94e6ea1d5f56e0dccf761 Mon Sep 17 00:00:00 2001 From: aamir-csol Date: Tue, 7 Oct 2025 15:43:58 +0300 Subject: [PATCH 17/19] family screen & widgets --- lib/core/dependencies.dart | 2 + .../authentication/authentication_repo.dart | 2 +- .../authentication_view_model.dart | 11 +- .../medical_file/medical_file_repo.dart | 2 +- .../medical_file/medical_file_view_model.dart | 10 +- lib/presentation/home/landing_page.dart | 10 +- .../medical_file/medical_file_page.dart | 8 +- lib/presentation/my_family/my_family.dart | 14 +- .../my_family/widget/family_cards.dart | 375 +++++++++--------- .../my_family/widget/my_family_sheet.dart | 11 +- .../profile_settings/profile_settings.dart | 210 +++++++--- lib/services/dialog_service.dart | 14 + lib/widgets/chip/app_custom_chip_widget.dart | 98 ++--- 13 files changed, 448 insertions(+), 319 deletions(-) diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index e2e06d2..0ddada2 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -24,6 +24,7 @@ import 'package:hmg_patient_app_new/features/payfort/payfort_repo.dart'; import 'package:hmg_patient_app_new/features/payfort/payfort_view_model.dart'; import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_repo.dart'; import 'package:hmg_patient_app_new/features/prescriptions/prescriptions_view_model.dart'; +import 'package:hmg_patient_app_new/features/profile_settings/profile_settings_view_model.dart'; import 'package:hmg_patient_app_new/features/radiology/radiology_repo.dart'; import 'package:hmg_patient_app_new/features/radiology/radiology_view_model.dart'; import 'package:hmg_patient_app_new/services/analytics/analytics_service.dart'; @@ -166,6 +167,7 @@ class AppDependencies { () => AuthenticationViewModel( authenticationRepo: getIt(), cacheService: getIt(), navigationService: getIt(), dialogService: getIt(), appState: getIt(), errorHandlerService: getIt(), localAuthService: getIt()), ); + getIt.registerLazySingleton(() => ProfileSettingsViewModel()); // Screen-specific VMs → Factory // getIt.registerFactory( diff --git a/lib/features/authentication/authentication_repo.dart b/lib/features/authentication/authentication_repo.dart index c034a69..bec5470 100644 --- a/lib/features/authentication/authentication_repo.dart +++ b/lib/features/authentication/authentication_repo.dart @@ -275,7 +275,7 @@ class AuthenticationRepoImp implements AuthenticationRepo { 'PatientShareRequestID': patientShareRequestID, 'ResponseID': responseID, 'Status': 3, - 'PatientID': appState.getAuthenticatedUser()?.patientId ?? 0, + // 'PatientID': appState.getAuthenticatedUser()?.patientId ?? 0, 'LogInTokenID': appState.getFamilyFileTokenID, 'activationCode': activationCode ?? "0000", 'PatientMobileNumber': newRequest.patientMobileNumber, diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 467a476..444e54e 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -550,7 +550,7 @@ class AuthenticationViewModel extends ChangeNotifier { if (!_appState.getIsChildLoggedIn) { await medicalVm.getFamilyFiles(status: 0); await medicalVm.getAllPendingRecordsByResponseId(); - _navigationService.popUntilNamed(AppRoutes.medicalFilePage); + _navigationService.popUntilNamed(AppRoutes.landingScreen); } } else { if (activation.list != null && activation.list!.isNotEmpty) { @@ -567,12 +567,13 @@ class AuthenticationViewModel extends ChangeNotifier { } else { activation.list!.first.isParentUser = true; } + activation.list!.first.bloodGroup = activation.patientBlodType; _appState.setAuthenticatedUser(activation.list!.first); _appState.setPrivilegeModelList(activation.list!.first.listPrivilege!); } - _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); + // _appState.setUserBloodGroup = (activation.patientBlodType ?? ""); _appState.setAppAuthToken = activation.authenticationTokenId; - final request = RequestUtils.getAuthanticatedCommonRequest().toJson(); + final request = await RequestUtils.getAuthanticatedCommonRequest().toJson(); bool isUserAgreedBefore = await checkIfUserAgreedBefore(request: request); //updating the last login type in app state to show the fingerprint/face id option on home screen @@ -583,9 +584,9 @@ class AuthenticationViewModel extends ChangeNotifier { // if (!isSwitchUser && !_appState.getIsChildLoggedIn) { MedicalFileViewModel medicalVm = getIt(); - insertPatientIMEIData(loginTypeEnum.toInt); + await insertPatientIMEIData(loginTypeEnum.toInt); await medicalVm.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan - // medicalVm.getAllPendingRecordsByResponseId(); + await medicalVm.getAllPendingRecordsByResponseId(); } await clearDefaultInputValues(); diff --git a/lib/features/medical_file/medical_file_repo.dart b/lib/features/medical_file/medical_file_repo.dart index 416c372..a460d9f 100644 --- a/lib/features/medical_file/medical_file_repo.dart +++ b/lib/features/medical_file/medical_file_repo.dart @@ -29,7 +29,7 @@ abstract class MedicalFileRepo { Future>>> getAllPendingRecordsByResponseId({required Map request}); - Future>>> addFamilyFile({required dynamic request}); + Future>> addFamilyFile({required dynamic request}); Future>>> getPatientAppointmentsForMedicalReport(); diff --git a/lib/features/medical_file/medical_file_view_model.dart b/lib/features/medical_file/medical_file_view_model.dart index 60d14b0..b5d9d03 100644 --- a/lib/features/medical_file/medical_file_view_model.dart +++ b/lib/features/medical_file/medical_file_view_model.dart @@ -89,9 +89,6 @@ class MedicalFileViewModel extends ChangeNotifier { void onFamilyFileTabChange(int index) { setSelectedFamilyFileTabIndex = index; - if (index == 1) { - // getAllPendingRecordsByResponseId(); - } notifyListeners(); } @@ -323,8 +320,6 @@ class MedicalFileViewModel extends ChangeNotifier { final isPending = element.status == FamilyFileEnum.pending.toInt || element.status == FamilyFileEnum.rejected.toInt; final isActive = element.status == FamilyFileEnum.active.toInt; - print("====== Element Status: ${element.status}, isPending: $isPending, isActive: $isActive ============"); - if (!isPending && !isActive) { continue; } @@ -423,9 +418,6 @@ class MedicalFileViewModel extends ChangeNotifier { } // pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => !pendingFamilyFiles.any((e) => e.responseId == element.responseId))); pendingFamilyFiles.addAll(tempPendingFamilyFiles.where((element) => !pendingFamilyFiles.any((e) => e.patientId == element.patientId))); - - print("====== Pending Family Length: ${pendingFamilyFiles.length} ============"); - print("====== Pending Family Files: ${jsonEncode(pendingFamilyFiles)} ============"); } notifyListeners(); } @@ -447,7 +439,7 @@ class MedicalFileViewModel extends ChangeNotifier { ); } - Future addFamilyFile({required OTPTypeEnum otpTypeEnum, required bool isExcludedUser}) async { + Future addFamilyFile({required OTPTypeEnum otpTypeEnum}) async { LoaderBottomSheet.showLoader(); AuthenticationViewModel authVM = getIt.get(); NavigationService navigationService = getIt.get(); diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index 42932b1..afaa1c8 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -75,6 +75,11 @@ class _LandingPageState extends State { void initState() { authVM = context.read(); habibWalletVM = context.read(); + myAppointmentsViewModel = context.read(); + prescriptionsViewModel = context.read(); + insuranceViewModel = context.read(); + immediateLiveCareViewModel = context.read(); + authVM.savePushTokenToAppState(); if (mounted) { authVM.checkLastLoginStatus(() { @@ -100,11 +105,6 @@ class _LandingPageState extends State { @override Widget build(BuildContext context) { appState = getIt.get(); - NavigationService navigationService = getIt.get(); - myAppointmentsViewModel = Provider.of(context, listen: false); - prescriptionsViewModel = Provider.of(context, listen: false); - insuranceViewModel = Provider.of(context, listen: false); - immediateLiveCareViewModel = Provider.of(context, listen: false); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: SingleChildScrollView( diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index 92396a8..674732a 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -81,10 +81,10 @@ class _MedicalFilePageState extends State { insuranceViewModel.initInsuranceProvider(); medicalFileViewModel.setIsPatientSickLeaveListLoading(true); medicalFileViewModel.getPatientSickLeaveList(); - if (appState.getSuperUserID == null) { - medicalFileViewModel.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan - medicalFileViewModel.getAllPendingRecordsByResponseId(); //TODO: Added By Aamir - } + // if (appState.getSuperUserID == null) { + // medicalFileViewModel.getFamilyFiles(status: 0); //TODO: Remove status: 1 by Aamir Need to Discuss With Sultan + // medicalFileViewModel.getAllPendingRecordsByResponseId(); //TODO: Added By Aamir + // } medicalFileViewModel.onTabChanged(0); } diff --git a/lib/presentation/my_family/my_family.dart b/lib/presentation/my_family/my_family.dart index 7de92f4..c1773b8 100644 --- a/lib/presentation/my_family/my_family.dart +++ b/lib/presentation/my_family/my_family.dart @@ -40,7 +40,6 @@ class FamilyMedicalScreen extends StatefulWidget { } class _FamilyMedicalScreenState extends State { - List tabs = [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())]; MedicalFileViewModel? medicalVM; @override @@ -52,6 +51,7 @@ class _FamilyMedicalScreenState extends State { @override Widget build(BuildContext context) { AppState appState = getIt.get(); + return CollapsingListView( title: "My Medical File".needTranslation, bottomChild: appState.getAuthenticatedUser()!.isParentUser! @@ -69,7 +69,7 @@ class _FamilyMedicalScreenState extends State { label: "Add Family Member".needTranslation, message: "Please fill the below field to add a new family member to your profile".needTranslation, onVerificationPress: () { - medicalVM?.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms, isExcludedUser: true); + medicalVM!.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms); }); }, icon: AppAssets.add_icon, @@ -81,13 +81,17 @@ class _FamilyMedicalScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ CustomTabBar( - tabs: tabs, + activeBackgroundColor: AppColors.secondaryLightRedColor, + activeTextColor: AppColors.primaryRedColor, + tabs: appState.isChildLoggedIn + ? [CustomTabBarModel(null, LocaleKeys.medicalFile.tr())] + : [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())], onTabChange: (index) { medicalVM!.onFamilyFileTabChange(index); }, ), SizedBox(height: 25.h), - Consumer(builder: (context, medicalVM, child) => getFamilyTabs(index: medicalVM.getSelectedFamilyFileTabIndex)), + Selector(selector: (_, model) => model.getSelectedFamilyFileTabIndex, builder: (context, selectedIndex, child) => getFamilyTabs(index: selectedIndex)), SizedBox(height: 20.h), ], ).paddingSymmetrical(20, 0), @@ -97,7 +101,6 @@ class _FamilyMedicalScreenState extends State { Widget getFamilyTabs({required int index}) { switch (index) { case 0: - print(jsonEncode(medicalVM!.patientFamilyFiles)); return FamilyCards( profiles: medicalVM!.patientFamilyFiles, onSelect: (FamilyFileResponseModelLists profile) { @@ -111,7 +114,6 @@ class _FamilyMedicalScreenState extends State { isShowRemoveButton: true, ); case 1: - print(jsonEncode(medicalVM!.pendingFamilyFiles)); return FamilyCards( profiles: medicalVM!.pendingFamilyFiles, isRequestDesign: true, diff --git a/lib/presentation/my_family/widget/family_cards.dart b/lib/presentation/my_family/widget/family_cards.dart index 166b06d..92c85af 100644 --- a/lib/presentation/my_family/widget/family_cards.dart +++ b/lib/presentation/my_family/widget/family_cards.dart @@ -10,6 +10,8 @@ import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/services/dialog_service.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/chip/custom_chip_widget.dart'; @@ -42,10 +44,9 @@ class FamilyCards extends StatefulWidget { class _FamilyCardsState extends State { AppState appState = getIt(); - // bool isShowActions = true; - @override Widget build(BuildContext context) { + DialogService dialogService = getIt.get(); if (widget.isRequestDesign) { return Column( children: [ @@ -53,7 +54,14 @@ class _FamilyCardsState extends State { children: [ Utils.buildSvgWithAssets(icon: AppAssets.alertSquare), SizedBox(width: 8.h), - "Sent Requests".needTranslation.toText14(color: AppColors.textColor, isUnderLine: true, weight: FontWeight.w500), + "Who can view my medical file ?".needTranslation.toText14(color: AppColors.textColor, isUnderLine: true, weight: FontWeight.w500).onPress(() { + dialogService.showFamilyBottomSheetWithoutHWithChild( + label: "Manage Family".needTranslation, + message: "", + child: manageFamily(), + onOkPressed: () {}, + ); + }), SizedBox(width: 4.h), Utils.buildSvgWithAssets(icon: AppAssets.arrowRight), ], @@ -67,100 +75,6 @@ class _FamilyCardsState extends State { itemBuilder: (context, index) { final mySideProfiles = widget.profiles.where((profile) => profile.isRequestFromMySide ?? false).toList(); FamilyFileResponseModelLists profile = mySideProfiles[index]; - - return Container( - margin: EdgeInsets.only( - bottom: 12.h, - ), - padding: EdgeInsets.symmetric( - vertical: 15.h, - horizontal: 15.h, - ), - decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), - child: Opacity( - opacity: 1.0, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - CustomChipWidget( - height: 30.h, - chipType: ChipTypeEnum.alert, - backgroundColor: profile.status == FamilyFileEnum.pending.toInt - ? AppColors.alertLightColor.withValues(alpha: 0.20) - : profile.status == FamilyFileEnum.rejected.toInt - ? AppColors.primaryRedColor.withValues(alpha: 0.20) - : profile.status == FamilyFileEnum.active.toInt - ? AppColors.lightGreenColor - : AppColors.lightGrayBGColor, - chipText: profile.statusDescription ?? "N/A", - iconAsset: null, - isShowBorder: false, - borderRadius: 8.h, - textColor: profile.status == FamilyFileEnum.pending.toInt - ? AppColors.alertLightColor - : profile.status == FamilyFileEnum.rejected.toInt - ? AppColors.primaryRedColor - : profile.status == FamilyFileEnum.active.toInt - ? AppColors.textGreenColor - : AppColors.alertColor, - ), - Wrap( - alignment: WrapAlignment.start, - children: [ - (profile.patientName ?? "").toText16( - isBold: false, - isCenter: true, - maxlines: 1, - weight: FontWeight.w600, - ), - ("has ${(profile.statusDescription ?? "").toLowerCase()} your family member request").toText14( - isBold: false, - isCenter: true, - maxlines: 1, - weight: FontWeight.w500, - color: AppColors.greyTextColor, - ), - ], - ), - SizedBox(height: 4.h), - CustomChipWidget( - height: 30.h, - chipType: ChipTypeEnum.alert, - backgroundColor: AppColors.lightGrayBGColor, - chipText: "Medical File: ${profile.responseId ?? "N/A"}", - iconAsset: null, - isShowBorder: false, - borderRadius: 8.h, - textColor: AppColors.textColor, - ), - ], - ), - ), - ); - }, - ), - SizedBox(height: 20.h), - if (widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).isNotEmpty) - Row( - children: [ - Utils.buildSvgWithAssets(icon: AppAssets.alertSquare), - SizedBox(width: 8.h), - "Users who want to view your profile".needTranslation.toText14(color: AppColors.textColor, isUnderLine: true, weight: FontWeight.w500), - SizedBox(width: 4.h), - Utils.buildSvgWithAssets(icon: AppAssets.arrowRight), - ], - ), - - // Items for second group (requests from others) - ListView.builder( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length, - itemBuilder: (context, index) { - final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList(); - FamilyFileResponseModelLists profile = otherProfiles[index]; return Container( margin: EdgeInsets.only(bottom: 12.h), padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), @@ -173,92 +87,49 @@ class _FamilyCardsState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ CustomChipWidget( - height: 30.h, - chipType: ChipTypeEnum.alert, - backgroundColor: profile.status == FamilyFileEnum.pending.toInt - ? AppColors.alertLightColor.withValues(alpha: 0.20) - : profile.status == FamilyFileEnum.rejected.toInt - ? AppColors.primaryRedColor.withValues(alpha: 0.20) - : profile.status == FamilyFileEnum.active.toInt - ? AppColors.lightGreenColor - : AppColors.lightGrayBGColor, - chipText: profile.statusDescription ?? "N/A", - iconAsset: null, - isShowBorder: false, - borderRadius: 8.h, - textColor: profile.status == FamilyFileEnum.pending.toInt - ? AppColors.alertLightColor - : profile.status == FamilyFileEnum.rejected.toInt - ? AppColors.primaryRedColor - : profile.status == FamilyFileEnum.active.toInt - ? AppColors.textGreenColor - : AppColors.alertColor, - ), - Wrap( - alignment: WrapAlignment.start, - children: [ - (profile.patientName ?? "").toText16(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), - (profile.status == FamilyFileEnum.active.toInt ? "can view your family".needTranslation : "wants to add you as their family member".needTranslation).toText14( - isBold: false, - isCenter: true, - maxlines: 1, - weight: FontWeight.w500, - color: AppColors.greyTextColor, - ), - ], - ), - SizedBox(height: 4.h), + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.lightGreenColor + : AppColors.lightGrayBGColor, + chipText: profile.statusDescription ?? "N/A", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.textGreenColor + : AppColors.alertColor), + SizedBox(height: 8.h), + Wrap(alignment: WrapAlignment.start, crossAxisAlignment: WrapCrossAlignment.start, runAlignment: WrapAlignment.start, spacing: 0.h, children: [ + (profile.patientName ?? "").toText14(isBold: false, isCenter: false, maxlines: 1, weight: FontWeight.w600), + (getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)) + .toText14(isBold: false, isCenter: false, maxlines: 1, weight: FontWeight.w500, color: AppColors.greyTextColor), + ]), + SizedBox(height: 8.h), CustomChipWidget( - height: 30.h, - chipType: ChipTypeEnum.alert, - backgroundColor: AppColors.lightGrayBGColor, - chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}", - iconAsset: null, - isShowBorder: false, - borderRadius: 8.h, - textColor: AppColors.textColor, - ), - SizedBox(height: 16.h), - Row( - children: [ - profile.status == FamilyFileEnum.active.toInt - ? SizedBox() - : Expanded( - child: CustomButton( - height: 40.h, - text: LocaleKeys.confirm.tr(), - onPressed: () { - widget.onSelect(profile); - }, - backgroundColor: AppColors.lightGreenButtonColor, - borderColor: AppColors.lightGreenButtonColor, - textColor: AppColors.textGreenColor, - icon: null, - ), - ), - profile.status == FamilyFileEnum.active.toInt ? SizedBox() : SizedBox(width: 8.h), - Expanded( - child: CustomButton( - height: 40.h, - text: profile.status == FamilyFileEnum.active.toInt ? LocaleKeys.removeMember.tr() : LocaleKeys.cancel.tr(), - onPressed: () { - widget.onRemove(profile); - }, - backgroundColor: AppColors.secondaryLightRedColor, - borderColor: AppColors.secondaryLightRedColor, - textColor: AppColors.primaryRedColor, - icon: null, - iconColor: AppColors.primaryRedColor, - ), - ), - ], - ), + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: AppColors.lightGrayBGColor, + chipText: "Medical File: ${profile.responseId ?? "N/A"}", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: AppColors.textColor), ], ), ), ); }, ), + SizedBox(height: 20.h), ], ); } else { @@ -270,7 +141,7 @@ class _FamilyCardsState extends State { crossAxisCount: 2, crossAxisSpacing: 10.h, mainAxisSpacing: 10.h, - childAspectRatio: widget.isShowDetails ? 0.56.h : 0.66.h, + childAspectRatio: widget.isShowDetails ? 0.56.h : 0.65.h, ), padding: EdgeInsets.only(bottom: 20.h), itemBuilder: (context, index) { @@ -297,8 +168,8 @@ class _FamilyCardsState extends State { width: 80.h, height: 78.h), SizedBox(height: 8.h), - (profile.patientName ?? "Unknown").toText16(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), - SizedBox(height: 4.h), + (profile.patientName ?? "Unknown").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), + SizedBox(height: 8.h), CustomChipWidget( chipType: ChipTypeEnum.alert, backgroundColor: AppColors.lightGrayBGColor, @@ -318,7 +189,11 @@ class _FamilyCardsState extends State { textColor: AppColors.textColor, ) : SizedBox(), - widget.isShowDetails ? SizedBox(height: 8.h) : SizedBox(), + widget.isShowDetails + ? SizedBox(height: 8.h) + : SizedBox( + height: 4.h, + ), Spacer(), CustomButton( height: 40.h, @@ -353,4 +228,144 @@ class _FamilyCardsState extends State { ); } } + + Widget manageFamily() { + NavigationService navigationService = getIt(); + return ListView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsetsGeometry.zero, + itemCount: widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).length, + itemBuilder: (context, index) { + final otherProfiles = widget.profiles.where((profile) => !(profile.isRequestFromMySide ?? false)).toList(); + FamilyFileResponseModelLists profile = otherProfiles[index]; + return Container( + margin: EdgeInsets.only(bottom: 12.h), + padding: EdgeInsets.symmetric(vertical: 15.h, horizontal: 15.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24), + child: Opacity( + opacity: 1.0, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + CustomChipWidget( + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor.withValues(alpha: 0.20) + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.lightGreenColor + : AppColors.lightGrayBGColor, + chipText: profile.statusDescription ?? "N/A", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: profile.status == FamilyFileEnum.pending.toInt + ? AppColors.alertLightColor + : profile.status == FamilyFileEnum.rejected.toInt + ? AppColors.primaryRedColor + : profile.status == FamilyFileEnum.active.toInt + ? AppColors.textGreenColor + : AppColors.alertColor, + ), + SizedBox(height: 8.h), + Wrap( + alignment: WrapAlignment.start, + children: [ + (profile.patientName ?? "").toText14(isBold: false, isCenter: true, maxlines: 1, weight: FontWeight.w600), + (getStatusTextByRequest(FamilyFileEnum.values.firstWhere((e) => e.toInt == profile.status), profile.isRequestFromMySide ?? false)).toText14( + isBold: false, + isCenter: true, + maxlines: 1, + weight: FontWeight.w500, + color: AppColors.greyTextColor, + ), + ], + ), + SizedBox(height: 8.h), + CustomChipWidget( + height: 30.h, + chipType: ChipTypeEnum.alert, + backgroundColor: AppColors.lightGrayBGColor, + chipText: "Medical File: ${profile.patientId ?? "N/A".needTranslation}", + iconAsset: null, + isShowBorder: false, + borderRadius: 8.h, + textColor: AppColors.textColor, + ), + SizedBox(height: 16.h), + Row( + children: [ + profile.status == FamilyFileEnum.active.toInt + ? SizedBox() + : Expanded( + child: CustomButton( + height: 40.h, + text: LocaleKeys.confirm.tr(), + onPressed: () { + navigationService.pop(); + widget.onSelect(profile); + }, + backgroundColor: AppColors.lightGreenButtonColor, + borderColor: AppColors.lightGreenButtonColor, + textColor: AppColors.textGreenColor, + icon: null, + ), + ), + profile.status == FamilyFileEnum.active.toInt ? SizedBox() : SizedBox(width: 8.h), + Expanded( + child: CustomButton( + height: 40.h, + text: profile.status == FamilyFileEnum.active.toInt ? LocaleKeys.removeMember.tr() : LocaleKeys.cancel.tr(), + onPressed: () { + navigationService.pop(); + widget.onRemove(profile); + }, + backgroundColor: AppColors.secondaryLightRedColor, + borderColor: AppColors.secondaryLightRedColor, + textColor: AppColors.primaryRedColor, + icon: null, + iconColor: AppColors.primaryRedColor, + ), + ), + ], + ), + ], + ), + ), + ); + }, + ); + } + + String getStatusTextByRequest(FamilyFileEnum status, bool isRequestFromMySide) { + switch (status) { + case FamilyFileEnum.active: + if (isRequestFromMySide) { + return "${status.displayName} your request to be your family member".needTranslation; + } else { + return "can view your file".needTranslation; + } + case FamilyFileEnum.pending: + if (isRequestFromMySide) { + return "has a request ${status.displayName} to be your family member".needTranslation; + } else { + return "wants to add you as their family member".needTranslation; + } + case FamilyFileEnum.rejected: + if (isRequestFromMySide) { + return "${status.displayName} your request to be your family member".needTranslation; + } else { + return "${status.displayName} your family member request".needTranslation; + } + case FamilyFileEnum.inactive: + return "Inactive".needTranslation; + default: + return "N/A".needTranslation; + } + } } diff --git a/lib/presentation/my_family/widget/my_family_sheet.dart b/lib/presentation/my_family/widget/my_family_sheet.dart index 1c085ca..d469ab2 100644 --- a/lib/presentation/my_family/widget/my_family_sheet.dart +++ b/lib/presentation/my_family/widget/my_family_sheet.dart @@ -1,26 +1,29 @@ import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/presentation/my_family/widget/family_cards.dart'; +import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; class MyFamilySheet { static Future show(BuildContext context, List familyLists, Function(FamilyFileResponseModelLists) onSelect) async { + NavigationService navigationService = getIt(); return showCommonBottomSheetWithoutHeight( context, titleWidget: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - 'Please select a profile'.toText21(isBold: true), - 'switch from the below list of medical file'.toText16(weight: FontWeight.w100, color: AppColors.greyTextColor), + 'Please select a profile'.needTranslation.toText21(isBold: true), + 'switch from the below list of medical file'.needTranslation.toText16(weight: FontWeight.w100, color: AppColors.greyTextColor), ], ), child: FamilyCards( profiles: familyLists, onSelect: (profile) { - Navigator.of(context).pop(); // Close the bottom sheet - onSelect(profile); // Call the onSelect callback + navigationService.pop(); + onSelect(profile); }, onRemove: (profile) {}, isBottomSheet: true), diff --git a/lib/presentation/profile_settings/profile_settings.dart b/lib/presentation/profile_settings/profile_settings.dart index d40104b..3954dd7 100644 --- a/lib/presentation/profile_settings/profile_settings.dart +++ b/lib/presentation/profile_settings/profile_settings.dart @@ -59,11 +59,8 @@ class _ProfileSettingsState extends State { int length = 3; final SwiperController _controller = SwiperController(); - int _index = 0; - @override Widget build(BuildContext context) { - final MedicalFileViewModel medicalFileViewModel = getIt.get(); return CollapsingListView( title: "Profile & Settings".needTranslation, logout: () {}, @@ -71,28 +68,41 @@ class _ProfileSettingsState extends State { child: SingleChildScrollView( padding: EdgeInsets.only(top: 24, bottom: 24), physics: NeverScrollableScrollPhysics(), - child: Consumer( - builder: (context, model, child) { - print(jsonEncode(medicalFileViewModel.patientFamilyFiles)); + child: Consumer2( + builder: (context, profileVm, medicalVm, child) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Swiper( - itemCount: medicalFileViewModel.patientFamilyFiles.length, + itemCount: medicalVm.patientFamilyFiles.length, layout: SwiperLayout.STACK, loop: true, itemWidth: MediaQuery.of(context).size.width - 42, indicatorLayout: PageIndicatorLayout.COLOR, axisDirection: AxisDirection.right, controller: _controller, - itemHeight: 210 + 16, + itemHeight: 220 + 16, pagination: const SwiperPagination( alignment: Alignment.bottomCenter, margin: EdgeInsets.only(top: 210 + 8 + 24), builder: DotSwiperPaginationBuilder(color: Color(0xffD9D9D9), activeColor: AppColors.blackBgColor), ), itemBuilder: (BuildContext context, int index) { - return FamilyCardWidget(isRootUser: true).paddingOnly(right: 16); + return FamilyCardWidget( + profile: medicalVm.patientFamilyFiles[index], + onAddFamilyMemberPress: () { + DialogService dialogService = getIt.get(); + dialogService.showAddFamilyFileSheet( + label: "Add Family Member".needTranslation, + message: "Please fill the below field to add a new family member to your profile".needTranslation, + onVerificationPress: () { + medicalVm.addFamilyFile(otpTypeEnum: OTPTypeEnum.sms); + }); + }, + onFamilySwitchPress: (FamilyFileResponseModelLists profile) { + medicalVm.switchFamilyFiles(responseID: profile.responseId, patientID: profile.patientId, phoneNumber: profile.mobileNumber); + }, + ).paddingOnly(right: 16); }, ), GridView( @@ -241,15 +251,12 @@ class _ProfileSettingsState extends State { } class FamilyCardWidget extends StatelessWidget { - FamilyCardWidget({this.isRootUser = true, Key? key}) : super(key: key); - - bool isRootUser; late AppState appState; final Function() onAddFamilyMemberPress; final Function(FamilyFileResponseModelLists member) onFamilySwitchPress; final FamilyFileResponseModelLists profile; - const FamilyCardWidget({required this.onAddFamilyMemberPress, required this.profile, required this.onFamilySwitchPress(FamilyFileResponseModelLists member)}); + FamilyCardWidget({super.key, required this.onAddFamilyMemberPress, required this.profile, required this.onFamilySwitchPress(FamilyFileResponseModelLists member)}); @override Widget build(BuildContext context) { @@ -268,17 +275,16 @@ class FamilyCardWidget extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, spacing: 8.h, children: [ - Image.asset(appState.getAuthenticatedUser()?.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h), + Image.asset(profile.gender == 1 ? AppAssets.male_img : AppAssets.femaleImg, width: 56.h, height: 56.h), Column( crossAxisAlignment: CrossAxisAlignment.start, spacing: 0.h, mainAxisSize: MainAxisSize.min, children: [ - "${appState.getAuthenticatedUser()!.firstName} ${appState.getAuthenticatedUser()!.lastName}" - .toText18(isBold: true, weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1), + "${profile.patientName}".toText18(isBold: true, weight: FontWeight.w600, textOverflow: TextOverflow.ellipsis, maxlines: 1), AppCustomChipWidget( icon: AppAssets.file_icon, - labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${appState.getAuthenticatedUser()!.patientId}", + labelText: "${LocaleKeys.fileNo.tr(context: context)}: ${profile.patientId}", iconSize: 12, ), ], @@ -291,46 +297,137 @@ class FamilyCardWidget extends StatelessWidget { child: Wrap( alignment: WrapAlignment.start, spacing: 8.h, + runSpacing: 8.h, children: [ - AppCustomChipWidget(labelText: "${appState.getAuthenticatedUser()!.age} Years Old"), + AppCustomChipWidget(labelText: "${profile.age} Years Old"), AppCustomChipWidget( - icon: AppAssets.blood_icon, - labelText: "${LocaleKeys.bloodType.tr(context: context)}: ${appState.getUserBloodGroup}", - iconColor: AppColors.primaryRedColor, - ), - Consumer(builder: (context, insuranceVM, child) { - return AppCustomChipWidget( - icon: insuranceVM.isInsuranceLoading - ? AppAssets.cancel_circle_icon - : (DateTime.now().isAfter( - DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), - )) - ? AppAssets.cancel_circle_icon - : AppAssets.insurance_active_icon, - labelText: insuranceVM.isInsuranceLoading - ? "Insurance" - : (DateTime.now().isAfter( - DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), - ) - ? "Insurance Expired".needTranslation - : "Insurance Active".needTranslation), - iconColor: insuranceVM.isInsuranceLoading - ? AppColors.primaryRedColor - : (DateTime.now().isAfter( - DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), - )) - ? AppColors.primaryRedColor - : AppColors.successColor, - iconSize: 14, - backgroundColor: insuranceVM.isInsuranceLoading - ? AppColors.primaryRedColor - : (DateTime.now().isAfter( - DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), - )) - ? AppColors.primaryRedColor.withValues(alpha: 0.15) - : AppColors.successColor.withValues(alpha: 0.15), - ).toShimmer2(isShow: insuranceVM.isInsuranceLoading); - }), + icon: AppAssets.blood_icon, labelText: "${LocaleKeys.bloodType.tr()}: ${appState.getAuthenticatedUser()!.bloodGroup ?? "N/A"}", iconColor: AppColors.primaryRedColor), + + Selector( + selector: (context, insuranceVM) => ( + isEmpty: insuranceVM.patientInsuranceList.isEmpty, + patientID: insuranceVM.patientInsuranceList.isNotEmpty ? insuranceVM.patientInsuranceList.first.patientID : null, + isLoading: insuranceVM.isInsuranceLoading, + cardValidTo: insuranceVM.patientInsuranceList.isNotEmpty ? insuranceVM.patientInsuranceList.first.cardValidTo : null + ), + builder: (context, data, child) { + if (data.isEmpty) { + return const SizedBox(); + } else if (profile.responseId != data.patientID) { + return SizedBox(); + } + + final isLoading = data.isLoading; + final isExpired = !isLoading && DateTime.now().isAfter(DateUtil.convertStringToDate(data.cardValidTo)); + + final String icon; + final String labelText; + final Color iconColor; + final Color backgroundColor; + + if (isLoading) { + icon = AppAssets.cancel_circle_icon; + labelText = "Insurance"; + iconColor = AppColors.primaryRedColor; + backgroundColor = AppColors.primaryRedColor; + } else if (isExpired) { + icon = AppAssets.cancel_circle_icon; + labelText = "Insurance Expired".needTranslation; + iconColor = AppColors.primaryRedColor; + backgroundColor = AppColors.primaryRedColor.withValues(alpha: 0.15); + } else { + icon = AppAssets.insurance_active_icon; + labelText = "Insurance Active".needTranslation; + iconColor = AppColors.successColor; + backgroundColor = AppColors.successColor.withValues(alpha: 0.15); + } + + return AppCustomChipWidget( + icon: icon, + labelText: labelText, + iconColor: iconColor, + iconSize: 12, + backgroundColor: backgroundColor, + // padding: EdgeInsets.zero, + ).toShimmer2(isShow: isLoading); + }, + ) + + // Consumer(builder: (context, insuranceVM, child) { + // if (insuranceVM.patientInsuranceList.isEmpty) { + // return const SizedBox(); + // } else if (profile.responseId != insuranceVM.patientInsuranceList.first.patientID) { + // return SizedBox(); + // } + // + // final isLoading = insuranceVM.isInsuranceLoading; + // final isExpired = !isLoading && DateTime.now().isAfter(DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo)); + // + // final String icon; + // final String labelText; + // final Color iconColor; + // final Color backgroundColor; + // + // if (isLoading) { + // icon = AppAssets.cancel_circle_icon; + // labelText = "Insurance"; + // iconColor = AppColors.primaryRedColor; + // backgroundColor = AppColors.primaryRedColor; + // } else if (isExpired) { + // icon = AppAssets.cancel_circle_icon; + // labelText = "Insurance Expired".needTranslation; + // iconColor = AppColors.primaryRedColor; + // backgroundColor = AppColors.primaryRedColor.withValues(alpha: 0.15); + // } else { + // icon = AppAssets.insurance_active_icon; + // labelText = "Insurance Active".needTranslation; + // iconColor = AppColors.successColor; + // backgroundColor = AppColors.successColor.withValues(alpha: 0.15); + // } + // + // return AppCustomChipWidget( + // icon: icon, + // labelText: labelText, + // iconColor: iconColor, + // iconSize: 12, + // backgroundColor: backgroundColor, + // // padding: EdgeInsets.zero, + // ).toShimmer2(isShow: isLoading); + // }) + + // Consumer(builder: (context, insuranceVM, child) { + // return insuranceVM.patientInsuranceList. isNotEmpty ? AppCustomChipWidget( + // icon: insuranceVM.isInsuranceLoading + // ? AppAssets.cancel_circle_icon + // : (DateTime.now().isAfter( + // DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), + // )) + // ? AppAssets.cancel_circle_icon + // : AppAssets.insurance_active_icon, + // labelText: insuranceVM.isInsuranceLoading + // ? "Insurance" + // : (DateTime.now().isAfter( + // DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), + // ) + // ? "Insurance Expired".needTranslation + // : "Insurance Active".needTranslation), + // iconColor: insuranceVM.isInsuranceLoading + // ? AppColors.primaryRedColor + // : (DateTime.now().isAfter( + // DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), + // )) + // ? AppColors.primaryRedColor + // : AppColors.successColor, + // iconSize: 14, + // backgroundColor: insuranceVM.isInsuranceLoading + // ? AppColors.primaryRedColor + // : (DateTime.now().isAfter( + // DateUtil.convertStringToDate(insuranceVM.patientInsuranceList.first.cardValidTo), + // )) + // ? AppColors.primaryRedColor.withValues(alpha: 0.15) + // : AppColors.successColor.withValues(alpha: 0.15), + // ).toShimmer2(isShow: insuranceVM.isInsuranceLoading) : SizedBox(); + // }), ], ), ), @@ -426,8 +523,7 @@ class FamilyCardWidget extends StatelessWidget { ).paddingOnly(top: 12, right: 16, left: 16, bottom: 16); } - - // //TODO: Add family file switch logic here +// //TODO: Add family file switch logic here // isRootUser // ? CustomButton(icon: AppAssets.add_family, text: "Add a new family member".needTranslation, height: 40.h, fontSize: 14, onPressed: () {}) // .paddingOnly(top: 12, right: 16, left: 16, bottom: 16) diff --git a/lib/services/dialog_service.dart b/lib/services/dialog_service.dart index 4d332b3..7003a31 100644 --- a/lib/services/dialog_service.dart +++ b/lib/services/dialog_service.dart @@ -24,6 +24,8 @@ abstract class DialogService { Future showFamilyBottomSheetWithoutH( {String? label, required String message, required Function(FamilyFileResponseModelLists response) onSwitchPress, required List profiles}); + Future showFamilyBottomSheetWithoutHWithChild({String? label, required String message, Widget? child, required Function() onOkPressed, Function()? onCancelPressed}); + Future showPhoneNumberPickerSheet({String? label, String? message, required Function() onSMSPress, required Function() onWhatsappPress}); Future showAddFamilyFileSheet({String? label, String? message, required Function() onVerificationPress}); @@ -119,6 +121,18 @@ class DialogServiceImp implements DialogService { callBackFunc: () {}); } + @override + Future showFamilyBottomSheetWithoutHWithChild({String? label, required String message, Widget? child, required Function() onOkPressed, Function()? onCancelPressed}) async { + final context = navigationService.navigatorKey.currentContext; + if (context == null) return; + showCommonBottomSheetWithoutHeight( + context, + title: label ?? "", + child: child ?? SizedBox(), + callBackFunc: () {}, + ); + } + @override Future showPhoneNumberPickerSheet({String? label, String? message, required Function() onSMSPress, required Function() onWhatsappPress}) async { final context = navigationService.navigatorKey.currentContext; diff --git a/lib/widgets/chip/app_custom_chip_widget.dart b/lib/widgets/chip/app_custom_chip_widget.dart index 38552fb..10b98bc 100644 --- a/lib/widgets/chip/app_custom_chip_widget.dart +++ b/lib/widgets/chip/app_custom_chip_widget.dart @@ -24,8 +24,8 @@ class AppCustomChipWidget extends StatelessWidget { this.deleteIconColor = AppColors.textColor, this.deleteIconHasColor = false, this.padding = EdgeInsets.zero, - this.onChipTap - this.labelPadding , + this.onChipTap, + this.labelPadding, }); final String? labelText; @@ -47,54 +47,58 @@ class AppCustomChipWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return ChipTheme( - data: ChipThemeData( - padding: EdgeInsets.all(0.0), - shape: SmoothRectangleBorder( - side: BorderSide( - width: 10.0, - color: Colors.transparent, // Crucially, set color to transparent - style: BorderStyle.none, + return GestureDetector( + onTap: onChipTap, + child: ChipTheme( + data: ChipThemeData( + padding: EdgeInsets.all(0.0), + shape: SmoothRectangleBorder( + side: BorderSide( + width: 10.0, + color: Colors.transparent, // Crucially, set color to transparent + style: BorderStyle.none, + ), + borderRadius: BorderRadius.circular(8.0), // Apply a border radius of 16.0 ), - borderRadius: BorderRadius.circular(8.0), // Apply a border radius of 16.0 ), - ), - child: icon.isNotEmpty - ? Chip( - avatar: icon.isNotEmpty ? Utils.buildSvgWithAssets(icon: icon, width: iconSize.h, height: iconSize.h, iconColor: iconHasColor ? iconColor : null) : SizedBox.shrink(), - label: richText ?? labelText!.toText10(weight: FontWeight.w500, letterSpacing: 0, color: textColor), - // padding: EdgeInsets.all(0.0), - padding: padding, - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - labelPadding: labelPadding??EdgeInsetsDirectional.only(start: 0.h, end: deleteIcon?.isNotEmpty == true ? 2.h : 8.h), - backgroundColor: backgroundColor, - shape: shape ?? - SmoothRectangleBorder( - borderRadius: BorderRadius.circular(8 ?? 0), - smoothness: 10, - side: BorderSide(color: AppColors.transparent, width: 1.5), - ), - deleteIcon: deleteIcon?.isNotEmpty == true - ? Utils.buildSvgWithAssets(icon: deleteIcon!, width: deleteIconSize!.width!.h, height: deleteIconSize!.height.h, iconColor: deleteIconHasColor ? deleteIconColor : null) - : null, - onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, - ) - : Chip( - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - label: richText ?? labelText!.toText10(weight: FontWeight.w500, letterSpacing: 0, color: textColor), - padding: EdgeInsets.all(0.0), - backgroundColor: backgroundColor, - shape: shape ?? SmoothRectangleBorder( - borderRadius: BorderRadius.circular(8 ?? 0), - smoothness: 10, - side: BorderSide(color: AppColors.transparent, width: 1.5), + child: icon.isNotEmpty + ? Chip( + avatar: icon.isNotEmpty ? Utils.buildSvgWithAssets(icon: icon, width: iconSize.h, height: iconSize.h, iconColor: iconHasColor ? iconColor : null) : SizedBox.shrink(), + label: richText ?? labelText!.toText10(weight: FontWeight.w500, letterSpacing: 0, color: textColor), + // padding: EdgeInsets.all(0.0), + padding: padding, + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + labelPadding: labelPadding ?? EdgeInsetsDirectional.only(start: 0.h, end: deleteIcon?.isNotEmpty == true ? 2.h : 8.h), + backgroundColor: backgroundColor, + shape: shape ?? + SmoothRectangleBorder( + borderRadius: BorderRadius.circular(8 ?? 0), + smoothness: 10, + side: BorderSide(color: AppColors.transparent, width: 1.5), + ), + deleteIcon: deleteIcon?.isNotEmpty == true + ? Utils.buildSvgWithAssets(icon: deleteIcon!, width: deleteIconSize!.width!.h, height: deleteIconSize!.height.h, iconColor: deleteIconHasColor ? deleteIconColor : null) + : null, + onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, + ) + : Chip( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + label: richText ?? labelText!.toText10(weight: FontWeight.w500, letterSpacing: 0, color: textColor), + padding: EdgeInsets.all(0.0), + backgroundColor: backgroundColor, + shape: shape ?? + SmoothRectangleBorder( + borderRadius: BorderRadius.circular(8 ?? 0), + smoothness: 10, + side: BorderSide(color: AppColors.transparent, width: 1.5), + ), + labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: deleteIcon?.isNotEmpty == true ? -2.h : 8.h), + deleteIcon: deleteIcon?.isNotEmpty == true + ? Utils.buildSvgWithAssets(icon: deleteIcon!, width: deleteIconSize!.width.h, height: deleteIconSize!.height.h, iconColor: deleteIconHasColor ? deleteIconColor : null) + : null, + onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, ), - labelPadding: EdgeInsetsDirectional.only(start: 8.h, end: deleteIcon?.isNotEmpty == true ? -2.h : 8.h), - deleteIcon: deleteIcon?.isNotEmpty == true - ? Utils.buildSvgWithAssets(icon: deleteIcon!, width: deleteIconSize!.width.h, height: deleteIconSize!.height.h, iconColor: deleteIconHasColor ? deleteIconColor : null) - : null, - onDeleted: deleteIcon?.isNotEmpty == true ? () {} : null, - ), + ), ); } } From 25fa1acc9e64b1ae79bf5206c0c3cbb126f10b9f Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 7 Oct 2025 15:49:23 +0300 Subject: [PATCH 18/19] Medical file widgets, Insurance approval implementation contd. --- lib/core/api/api_client.dart | 4 +- lib/core/dependencies.dart | 5 + lib/features/insurance/insurance_repo.dart | 41 +- .../insurance/insurance_view_model.dart | 33 ++ ...ent_insurance_approval_response_model.dart | 465 ++++++++++++++++++ lib/features/lab/lab_view_model.dart | 30 +- .../appointment_details_page.dart | 2 +- .../appointment_payment_page.dart | 6 +- .../appointments/my_appointments_page.dart | 6 +- .../appointments/my_doctors_page.dart | 6 +- .../widgets/AppointmentFilter.dart | 4 +- .../widgets/appointment_card.dart | 55 ++- .../appointment_checkin_bottom_sheet.dart | 2 +- .../widgets/appointment_doctor_card.dart | 2 +- .../facility_selection_item.dart | 2 +- .../hospital_list_items.dart | 2 +- .../region_bottomsheet/region_list_item.dart | 2 +- .../book_appointment_page.dart | 12 +- .../book_appointment/doctor_profile_page.dart | 4 +- .../immediate_livecare_payment_page.dart | 6 +- .../widgets/livecare_clinic_card.dart | 2 +- .../review_appointment_page.dart | 4 +- .../wallet_payment_confirm_page.dart | 4 +- .../widgets/hospital_list_item.dart | 2 +- lib/presentation/home/landing_page.dart | 6 + .../insurance/insurance_approvals_page.dart | 109 ++++ .../insurance/insurance_home_page.dart | 1 - .../widgets/insurance_approval_card.dart | 129 +++++ .../insurance_approval_details_page.dart | 135 +++++ .../medical_file/medical_file_page.dart | 89 ++-- .../medical_file/vaccine_list_page.dart | 2 +- .../medical_file/widgets/lab_rad_card.dart | 27 +- .../widgets/patient_sick_leave_card.dart | 2 +- .../medical_report_request_page.dart | 2 + .../prescriptions_list_page.dart | 5 +- lib/widgets/appbar/collapsing_list_view.dart | 2 +- lib/widgets/chip/app_custom_chip_widget.dart | 2 +- 37 files changed, 1121 insertions(+), 91 deletions(-) create mode 100644 lib/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart create mode 100644 lib/presentation/insurance/insurance_approvals_page.dart create mode 100644 lib/presentation/insurance/widgets/insurance_approval_card.dart create mode 100644 lib/presentation/insurance/widgets/insurance_approval_details_page.dart diff --git a/lib/core/api/api_client.dart b/lib/core/api/api_client.dart index 9140a13..a36f554 100644 --- a/lib/core/api/api_client.dart +++ b/lib/core/api/api_client.dart @@ -173,8 +173,8 @@ class ApiClientImp implements ApiClient { body[_appState.isAuthenticated ? 'TokenID' : 'LogInTokenID'] = _appState.appAuthToken; } - // body['TokenID'] = "@dm!n"; - // body['PatientID'] = 4767884; + body['TokenID'] = "@dm!n"; + body['PatientID'] = 4772172; // body['PatientTypeID'] = 1; // // body['PatientOutSA'] = 0; diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index 638d80f..3ce8a19 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -19,6 +19,7 @@ import 'package:hmg_patient_app_new/features/lab/lab_repo.dart'; import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_repo.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; +import 'package:hmg_patient_app_new/features/my_appointments/appointment_via_region_viewmodel.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_repo.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/payfort/payfort_repo.dart'; @@ -181,6 +182,10 @@ class AppDependencies { () => DoctorFilterViewModel(), ); + getIt.registerLazySingleton( + () => AppointmentViaRegionViewmodel(navigationService: getIt(), appState: getIt()), + ); + // Screen-specific VMs → Factory // getIt.registerFactory( // () => BookAppointmentsViewModel( diff --git a/lib/features/insurance/insurance_repo.dart b/lib/features/insurance/insurance_repo.dart index d367509..1aeb769 100644 --- a/lib/features/insurance/insurance_repo.dart +++ b/lib/features/insurance/insurance_repo.dart @@ -3,6 +3,7 @@ import 'package:hmg_patient_app_new/core/api/api_client.dart'; import 'package:hmg_patient_app_new/core/api_consts.dart'; import 'package:hmg_patient_app_new/core/common_models/generic_api_model.dart'; import 'package:hmg_patient_app_new/core/exceptions/api_failure.dart'; +import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart'; import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_card_history.dart'; import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_details_response_model.dart'; import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_update_response_model.dart'; @@ -14,6 +15,8 @@ abstract class InsuranceRepo { Future>>> getPatientInsuranceCardHistory(); Future>> getPatientInsuranceDetailsForUpdate({required String patientId, required String identificationNo}); + + Future>>> getPatientInsuranceApprovalsList(); } class InsuranceRepoImp implements InsuranceRepo { @@ -66,7 +69,6 @@ class InsuranceRepoImp implements InsuranceRepo { @override Future>>> getPatientInsuranceCardHistory() async { Map mapDevice = {}; - try { GenericApiModel>? apiResponse; Failure? failure; @@ -144,4 +146,41 @@ class InsuranceRepoImp implements InsuranceRepo { return Left(UnknownFailure(e.toString())); } } + + @override + Future>>> getPatientInsuranceApprovalsList() async { + Map mapDevice = {}; + try { + GenericApiModel>? apiResponse; + Failure? failure; + await apiClient.post( + GET_PAtIENTS_INSURANCE_APPROVALS, + body: mapDevice, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + final list = response['HIS_Approval_List']; + + final insuranceCardsList = list.map((item) => InsuranceApprovalResponseModel.fromJson(item as Map)).toList().cast(); + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: insuranceCardsList, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/insurance/insurance_view_model.dart b/lib/features/insurance/insurance_view_model.dart index 0bcf30f..363ad28 100644 --- a/lib/features/insurance/insurance_view_model.dart +++ b/lib/features/insurance/insurance_view_model.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/features/insurance/insurance_repo.dart'; +import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart'; import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_card_history.dart'; import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_details_response_model.dart'; import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_update_response_model.dart'; @@ -14,11 +15,14 @@ class InsuranceViewModel extends ChangeNotifier { bool isInsuranceDataToBeLoaded = true; + bool isInsuranceApprovalsLoading = false; + InsuranceRepo insuranceRepo; ErrorHandlerService errorHandlerService; List patientInsuranceList = []; List patientInsuranceCardHistoryList = []; + List patientInsuranceApprovalsList = []; PatientInsuranceUpdateResponseModel? patientInsuranceUpdateResponseModel; @@ -34,6 +38,7 @@ class InsuranceViewModel extends ChangeNotifier { isInsuranceHistoryLoading = true; isInsuranceDetailsLoading = true; isInsuranceUpdateDetailsLoading = true; + isInsuranceApprovalsLoading = true; notifyListeners(); } @@ -57,6 +62,11 @@ class InsuranceViewModel extends ChangeNotifier { notifyListeners(); } + setIsInsuranceApprovalsLoading(bool val) { + isInsuranceApprovalsLoading = val; + notifyListeners(); + } + Future getPatientInsuranceDetails({Function(dynamic)? onSuccess, Function(String)? onError}) async { if (!isInsuranceDataToBeLoaded) return; @@ -130,4 +140,27 @@ class InsuranceViewModel extends ChangeNotifier { }, ); } + + Future getPatientInsuranceApprovalsList({Function(dynamic)? onSuccess, Function(String)? onError}) async { + final result = await insuranceRepo.getPatientInsuranceApprovalsList(); + + result.fold( + (failure) async { + isInsuranceApprovalsLoading = false; + notifyListeners(); + }, + (apiResponse) { + if (apiResponse.messageStatus == 2) { + // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); + } else if (apiResponse.messageStatus == 1) { + patientInsuranceApprovalsList = apiResponse.data!; + isInsuranceApprovalsLoading = false; + notifyListeners(); + if (onSuccess != null) { + onSuccess(apiResponse); + } + } + }, + ); + } } diff --git a/lib/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart b/lib/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart new file mode 100644 index 0000000..f272f2d --- /dev/null +++ b/lib/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart @@ -0,0 +1,465 @@ +class InsuranceApprovalResponseModel { + String? setupID; + int? projectID; + int? approvalNo; + String? approvalDate; + int? patientType; + int? patientID; + int? companyID; + int? subCategoryID; + int? doctorID; + int? clinicID; + int? approvalType; + String? inpatientApprovalSubType; + String? validFrom; + String? vaildDays; + String? validTo; + bool? isApprovalOnGross; + bool? isPackage; + int? requestedAmount; + int? actualApprovedAmount; + int? aviliableAmount; + String? companyApprovalNo; + int? progNoteOrderNo; + String? submitOn; + String? receiptOn; + String? remarks1; + String? remarks2; + int? status; + String? feedbackStatusBy; + String? feedbackStatus; + String? feedbackStatusOn; + int? authorizerID; + String? expiryDate; + int? appointmentNo; + int? admissionNo; + int? admissionRequestNo; + int? createdBy; + String? createdOn; + int? editedBy; + String? editedOn; + String? rowVer; + bool? isAddlDiscApplied; + int? inProgressReasonID; + String? extendedBy; + String? extendedOn; + int? subPolicyNo; + int? noOrderAuthorizerID; + bool? isVerbalApproval; + String? subStatus; + bool? isNotificationSend; + String? eApprovalStatus; + String? eApprovalRemarks; + bool? isEmailSentOnDelayApproval; + int? eAuthorizationID; + InsuranceApprovalDetails? apporvalDetails; + String? approvalStatusDescption; + String? clinicName; + String? clinicNameN; + String? companyName; + String? doctorImageURL; + String? doctorName; + String? doctorNameN; + int? doctorRate; + String? doctorTitle; + int? gender; + String? genderDescription; + bool? isActiveDoctorProfile; + bool? isExecludeDoctor; + bool? isInOutPatient; + String? isInOutPatientDescription; + String? isInOutPatientDescriptionN; + bool? isLiveCareAppointment; + String? projectName; + String? projectNameN; + String? qR; + List? speciality; + String? strApprovalDate; + String? strExpiryDate; + String? strSubmitDate; + int? totaUnUsedCount; + int? unUsedCount; + + InsuranceApprovalResponseModel( + {this.setupID, + this.projectID, + this.approvalNo, + this.approvalDate, + this.patientType, + this.patientID, + this.companyID, + this.subCategoryID, + this.doctorID, + this.clinicID, + this.approvalType, + this.inpatientApprovalSubType, + this.validFrom, + this.vaildDays, + this.validTo, + this.isApprovalOnGross, + this.isPackage, + this.requestedAmount, + this.actualApprovedAmount, + this.aviliableAmount, + this.companyApprovalNo, + this.progNoteOrderNo, + this.submitOn, + this.receiptOn, + this.remarks1, + this.remarks2, + this.status, + this.feedbackStatusBy, + this.feedbackStatus, + this.feedbackStatusOn, + this.authorizerID, + this.expiryDate, + this.appointmentNo, + this.admissionNo, + this.admissionRequestNo, + this.createdBy, + this.createdOn, + this.editedBy, + this.editedOn, + this.rowVer, + this.isAddlDiscApplied, + this.inProgressReasonID, + this.extendedBy, + this.extendedOn, + this.subPolicyNo, + this.noOrderAuthorizerID, + this.isVerbalApproval, + this.subStatus, + this.isNotificationSend, + this.eApprovalStatus, + this.eApprovalRemarks, + this.isEmailSentOnDelayApproval, + this.eAuthorizationID, + this.apporvalDetails, + this.approvalStatusDescption, + this.clinicName, + this.clinicNameN, + this.companyName, + this.doctorImageURL, + this.doctorName, + this.doctorNameN, + this.doctorRate, + this.doctorTitle, + this.gender, + this.genderDescription, + this.isActiveDoctorProfile, + this.isExecludeDoctor, + this.isInOutPatient, + this.isInOutPatientDescription, + this.isInOutPatientDescriptionN, + this.isLiveCareAppointment, + this.projectName, + this.projectNameN, + this.qR, + this.speciality, + this.strApprovalDate, + this.strExpiryDate, + this.strSubmitDate, + this.totaUnUsedCount, + this.unUsedCount}); + + InsuranceApprovalResponseModel.fromJson(Map json) { + setupID = json['SetupID']; + projectID = json['ProjectID']; + approvalNo = json['ApprovalNo']; + approvalDate = json['ApprovalDate']; + patientType = json['PatientType']; + patientID = json['PatientID']; + companyID = json['CompanyID']; + subCategoryID = json['SubCategoryID']; + doctorID = json['DoctorID']; + clinicID = json['ClinicID']; + approvalType = json['ApprovalType']; + inpatientApprovalSubType = json['InpatientApprovalSubType']; + validFrom = json['ValidFrom']; + vaildDays = json['VaildDays']; + validTo = json['ValidTo']; + isApprovalOnGross = json['IsApprovalOnGross']; + isPackage = json['IsPackage']; + requestedAmount = json['RequestedAmount']; + actualApprovedAmount = json['ActualApprovedAmount']; + aviliableAmount = json['AviliableAmount']; + companyApprovalNo = json['CompanyApprovalNo']; + progNoteOrderNo = json['ProgNoteOrderNo']; + submitOn = json['SubmitOn']; + receiptOn = json['ReceiptOn']; + remarks1 = json['Remarks1']; + remarks2 = json['Remarks2']; + status = json['Status']; + feedbackStatusBy = json['FeedbackStatusBy']; + feedbackStatus = json['FeedbackStatus']; + feedbackStatusOn = json['FeedbackStatusOn']; + authorizerID = json['AuthorizerID']; + expiryDate = json['ExpiryDate']; + appointmentNo = json['AppointmentNo']; + admissionNo = json['AdmissionNo']; + admissionRequestNo = json['AdmissionRequestNo']; + createdBy = json['CreatedBy']; + createdOn = json['CreatedOn']; + editedBy = json['EditedBy']; + editedOn = json['EditedOn']; + rowVer = json['RowVer']; + isAddlDiscApplied = json['IsAddlDiscApplied']; + inProgressReasonID = json['InProgressReasonID']; + extendedBy = json['ExtendedBy']; + extendedOn = json['ExtendedOn']; + subPolicyNo = json['SubPolicyNo']; + noOrderAuthorizerID = json['NoOrderAuthorizerID']; + isVerbalApproval = json['isVerbalApproval']; + subStatus = json['SubStatus']; + isNotificationSend = json['IsNotificationSend']; + eApprovalStatus = json['EApprovalStatus']; + eApprovalRemarks = json['EApprovalRemarks']; + isEmailSentOnDelayApproval = json['IsEmailSentOnDelayApproval']; + eAuthorizationID = json['EAuthorizationID']; + if (json['ApporvalDetails'] != null && json['ApporvalDetails'].length != 0) { + apporvalDetails = InsuranceApprovalDetails.fromJson(json['ApporvalDetails'][0]); + } + approvalStatusDescption = json['ApprovalStatusDescption']; + clinicName = json['ClinicName']; + clinicNameN = json['ClinicNameN']; + companyName = json['CompanyName']; + doctorImageURL = json['DoctorImageURL']; + doctorName = json['DoctorName']; + doctorNameN = json['DoctorNameN']; + doctorRate = json['DoctorRate']; + doctorTitle = json['DoctorTitle']; + gender = json['Gender']; + genderDescription = json['GenderDescription']; + isActiveDoctorProfile = json['IsActiveDoctorProfile']; + isExecludeDoctor = json['IsExecludeDoctor']; + isInOutPatient = json['IsInOutPatient']; + isInOutPatientDescription = json['IsInOutPatientDescription']; + isInOutPatientDescriptionN = json['IsInOutPatientDescriptionN']; + isLiveCareAppointment = json['IsLiveCareAppointment']; + projectName = json['ProjectName']; + projectNameN = json['ProjectNameN']; + qR = json['QR']; + if (json['Speciality'] != null) speciality = json['Speciality'].cast(); + strApprovalDate = json['StrApprovalDate']; + strExpiryDate = json['StrExpiryDate']; + strSubmitDate = json['StrSubmitDate']; + totaUnUsedCount = json['TotaUnUsedCount']; + unUsedCount = json['UnUsedCount']; + } + + Map toJson() { + final Map data = new Map(); + data['SetupID'] = this.setupID; + data['ProjectID'] = this.projectID; + data['ApprovalNo'] = this.approvalNo; + data['ApprovalDate'] = this.approvalDate; + data['PatientType'] = this.patientType; + data['PatientID'] = this.patientID; + data['CompanyID'] = this.companyID; + data['SubCategoryID'] = this.subCategoryID; + data['DoctorID'] = this.doctorID; + data['ClinicID'] = this.clinicID; + data['ApprovalType'] = this.approvalType; + data['InpatientApprovalSubType'] = this.inpatientApprovalSubType; + data['ValidFrom'] = this.validFrom; + data['VaildDays'] = this.vaildDays; + data['ValidTo'] = this.validTo; + data['IsApprovalOnGross'] = this.isApprovalOnGross; + data['IsPackage'] = this.isPackage; + data['RequestedAmount'] = this.requestedAmount; + data['ActualApprovedAmount'] = this.actualApprovedAmount; + data['AviliableAmount'] = this.aviliableAmount; + data['CompanyApprovalNo'] = this.companyApprovalNo; + data['ProgNoteOrderNo'] = this.progNoteOrderNo; + data['SubmitOn'] = this.submitOn; + data['ReceiptOn'] = this.receiptOn; + data['Remarks1'] = this.remarks1; + data['Remarks2'] = this.remarks2; + data['Status'] = this.status; + data['FeedbackStatusBy'] = this.feedbackStatusBy; + data['FeedbackStatus'] = this.feedbackStatus; + data['FeedbackStatusOn'] = this.feedbackStatusOn; + data['AuthorizerID'] = this.authorizerID; + data['ExpiryDate'] = this.expiryDate; + data['AppointmentNo'] = this.appointmentNo; + data['AdmissionNo'] = this.admissionNo; + data['AdmissionRequestNo'] = this.admissionRequestNo; + data['CreatedBy'] = this.createdBy; + data['CreatedOn'] = this.createdOn; + data['EditedBy'] = this.editedBy; + data['EditedOn'] = this.editedOn; + data['RowVer'] = this.rowVer; + data['IsAddlDiscApplied'] = this.isAddlDiscApplied; + data['InProgressReasonID'] = this.inProgressReasonID; + data['ExtendedBy'] = this.extendedBy; + data['ExtendedOn'] = this.extendedOn; + data['SubPolicyNo'] = this.subPolicyNo; + data['NoOrderAuthorizerID'] = this.noOrderAuthorizerID; + data['isVerbalApproval'] = this.isVerbalApproval; + data['SubStatus'] = this.subStatus; + data['IsNotificationSend'] = this.isNotificationSend; + data['EApprovalStatus'] = this.eApprovalStatus; + data['EApprovalRemarks'] = this.eApprovalRemarks; + data['IsEmailSentOnDelayApproval'] = this.isEmailSentOnDelayApproval; + data['EAuthorizationID'] = this.eAuthorizationID; + if (this.apporvalDetails != null) { + data['ApporvalDetails'] = this.apporvalDetails!.toJson; + } + data['ApprovalStatusDescption'] = this.approvalStatusDescption; + data['ClinicName'] = this.clinicName; + data['ClinicNameN'] = this.clinicNameN; + data['CompanyName'] = this.companyName; + data['DoctorImageURL'] = this.doctorImageURL; + data['DoctorName'] = this.doctorName; + data['DoctorNameN'] = this.doctorNameN; + data['DoctorRate'] = this.doctorRate; + data['DoctorTitle'] = this.doctorTitle; + data['Gender'] = this.gender; + data['GenderDescription'] = this.genderDescription; + data['IsActiveDoctorProfile'] = this.isActiveDoctorProfile; + data['IsExecludeDoctor'] = this.isExecludeDoctor; + data['IsInOutPatient'] = this.isInOutPatient; + data['IsInOutPatientDescription'] = this.isInOutPatientDescription; + data['IsInOutPatientDescriptionN'] = this.isInOutPatientDescriptionN; + data['IsLiveCareAppointment'] = this.isLiveCareAppointment; + data['ProjectName'] = this.projectName; + data['ProjectNameN'] = this.projectNameN; + data['QR'] = this.qR; + data['Speciality'] = this.speciality; + data['StrApprovalDate'] = this.strApprovalDate; + data['StrExpiryDate'] = this.strExpiryDate; + data['StrSubmitDate'] = this.strSubmitDate; + data['TotaUnUsedCount'] = this.totaUnUsedCount; + data['UnUsedCount'] = this.unUsedCount; + return data; + } +} + +class InsuranceApprovalDetails { + int? setupID; + int? projectID; + int? approvalNo; + int? lineItemNo; + int? orderType; + int? procedureID; + int? toothNo; + int? price; + int? approvedAmount; + String? unapprovedPatientShare; + int? waivedAmount; + String? discountType; + int? discountValue; + String? shareType; + String? patientShareTypeValue; + String? companyShareTypeValue; + String? patientShare; + String? companyShare; + int? deductableAmount; + String? disapprovedRemarks; + int? progNoteOrderNo; + int? progNoteLineItemNo; + String? invoiceTransactionType; + int? invoiceNo; + String? procedureName; + String? procedureNameN; + String? status; + bool? isInvoiced; + String? isInvoicedDesc; + + InsuranceApprovalDetails( + {this.setupID, + this.projectID, + this.approvalNo, + this.lineItemNo, + this.orderType, + this.procedureID, + this.toothNo, + this.price, + this.approvedAmount, + this.unapprovedPatientShare, + this.waivedAmount, + this.discountType, + this.discountValue, + this.shareType, + this.patientShareTypeValue, + this.companyShareTypeValue, + this.patientShare, + this.companyShare, + this.deductableAmount, + this.disapprovedRemarks, + this.progNoteOrderNo, + this.progNoteLineItemNo, + this.invoiceTransactionType, + this.invoiceNo, + this.procedureName, + this.procedureNameN, + this.status, + this.isInvoiced, + this.isInvoicedDesc}); + + InsuranceApprovalDetails.fromJson(Map json) { + setupID = json['SetupID']; + projectID = json['ProjectID']; + approvalNo = json['ApprovalNo']; + lineItemNo = json['LineItemNo']; + orderType = json['OrderType']; + procedureID = json['ProcedureID']; + toothNo = json['ToothNo']; + price = json['Price']; + approvedAmount = json['ApprovedAmount']; + unapprovedPatientShare = json['UnapprovedPatientShare']; + waivedAmount = json['WaivedAmount']; + discountType = json['DiscountType']; + discountValue = json['DiscountValue']; + shareType = json['ShareType']; + patientShareTypeValue = json['PatientShareTypeValue']; + companyShareTypeValue = json['CompanyShareTypeValue']; + patientShare = json['PatientShare']; + companyShare = json['CompanyShare']; + deductableAmount = json['DeductableAmount']; + disapprovedRemarks = json['DisapprovedRemarks']; + progNoteOrderNo = json['ProgNoteOrderNo']; + progNoteLineItemNo = json['ProgNoteLineItemNo']; + invoiceTransactionType = json['InvoiceTransactionType']; + invoiceNo = json['InvoiceNo']; + procedureName = json['ProcedureName']; + procedureNameN = json['ProcedureNameN']; + status = json['Status']; + isInvoiced = json['IsInvoiced']; + isInvoicedDesc = json['IsInvoicedDesc']; + } + + Map toJson() { + final Map data = new Map(); + data['SetupID'] = this.setupID; + data['ProjectID'] = this.projectID; + data['ApprovalNo'] = this.approvalNo; + data['LineItemNo'] = this.lineItemNo; + data['OrderType'] = this.orderType; + data['ProcedureID'] = this.procedureID; + data['ToothNo'] = this.toothNo; + data['Price'] = this.price; + data['ApprovedAmount'] = this.approvedAmount; + data['UnapprovedPatientShare'] = this.unapprovedPatientShare; + data['WaivedAmount'] = this.waivedAmount; + data['DiscountType'] = this.discountType; + data['DiscountValue'] = this.discountValue; + data['ShareType'] = this.shareType; + data['PatientShareTypeValue'] = this.patientShareTypeValue; + data['CompanyShareTypeValue'] = this.companyShareTypeValue; + data['PatientShare'] = this.patientShare; + data['CompanyShare'] = this.companyShare; + data['DeductableAmount'] = this.deductableAmount; + data['DisapprovedRemarks'] = this.disapprovedRemarks; + data['ProgNoteOrderNo'] = this.progNoteOrderNo; + data['ProgNoteLineItemNo'] = this.progNoteLineItemNo; + data['InvoiceTransactionType'] = this.invoiceTransactionType; + data['InvoiceNo'] = this.invoiceNo; + data['ProcedureName'] = this.procedureName; + data['ProcedureNameN'] = this.procedureNameN; + data['Status'] = this.status; + data['IsInvoiced'] = this.isInvoiced; + data['IsInvoicedDesc'] = this.isInvoicedDesc; + return data; + } +} diff --git a/lib/features/lab/lab_view_model.dart b/lib/features/lab/lab_view_model.dart index 8a397e3..9f713ac 100644 --- a/lib/features/lab/lab_view_model.dart +++ b/lib/features/lab/lab_view_model.dart @@ -25,6 +25,8 @@ class LabViewModel extends ChangeNotifier { bool isGraphVisible = true; bool shouldShowGraph = true; + bool isLabNeedToLoad = true; + LabRepo labRepo; ErrorHandlerService errorHandlerService; NavigationService navigationService; @@ -33,6 +35,7 @@ class LabViewModel extends ChangeNotifier { List filteredLabOrders = []; List tempLabOrdersList = []; String labSpecialResult = ""; + List labOrderTests = []; PatientLabOrdersResponseModel? currentlySelectedPatientOrder; @@ -71,17 +74,29 @@ class LabViewModel extends ChangeNotifier { required this.navigationService}); initLabProvider() { - patientLabOrders.clear(); - filteredLabOrders.clear(); - isLabOrdersLoading = true; - isLabResultsLoading = true; - getPatientLabOrders(); + if (isLabNeedToLoad) { + patientLabOrders.clear(); + filteredLabOrders.clear(); + labOrderTests.clear(); + isLabOrdersLoading = true; + isLabResultsLoading = true; + getPatientLabOrders(); + } + notifyListeners(); + } + + setIsLabNeedToLoad(bool value) { + isLabNeedToLoad = value; notifyListeners(); } Future getPatientLabOrders({Function(dynamic)? onSuccess, Function(String)? onError}) async { + if (!isLabNeedToLoad) return; + + isLabOrdersLoading = true; patientLabOrders.clear(); uniqueTests.clear(); + labOrderTests.clear(); uniqueTests = {}; notifyListeners(); @@ -105,6 +120,7 @@ class LabViewModel extends ChangeNotifier { isLabResultsLoading = false; filterSuggestions(); getUniqueTestDescription(); + isLabNeedToLoad = false; notifyListeners(); if (onSuccess != null) { onSuccess(apiResponse); @@ -151,6 +167,9 @@ class LabViewModel extends ChangeNotifier { createdOn: item.createdOn, model: item)) }; + for (var element in uniqueTests) { + labOrderTests.add(element.description ?? ""); + } } Future getPatientLabResultByHospital( @@ -165,6 +184,7 @@ class LabViewModel extends ChangeNotifier { result.fold( (failure) async { isLabResultByHospitalLoading = false; + notifyListeners(); // await errorHandlerService.handleError(failure: failure); }, (apiResponse) { diff --git a/lib/presentation/appointments/appointment_details_page.dart b/lib/presentation/appointments/appointment_details_page.dart index 54353a4..c87039c 100644 --- a/lib/presentation/appointments/appointment_details_page.dart +++ b/lib/presentation/appointments/appointment_details_page.dart @@ -313,7 +313,7 @@ class _AppointmentDetailsPageState extends State { ), SizedBox(width: 68.h), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon, iconColor: AppColors.blackColor, diff --git a/lib/presentation/appointments/appointment_payment_page.dart b/lib/presentation/appointments/appointment_payment_page.dart index 3c475c1..467a480 100644 --- a/lib/presentation/appointments/appointment_payment_page.dart +++ b/lib/presentation/appointments/appointment_payment_page.dart @@ -117,7 +117,7 @@ class _AppointmentPaymentPageState extends State { SizedBox(width: 8.h), const Spacer(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, @@ -159,7 +159,7 @@ class _AppointmentPaymentPageState extends State { SizedBox(width: 8.h), const Spacer(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, @@ -196,7 +196,7 @@ class _AppointmentPaymentPageState extends State { SizedBox(width: 8.h), const Spacer(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, diff --git a/lib/presentation/appointments/my_appointments_page.dart b/lib/presentation/appointments/my_appointments_page.dart index 150f0bf..1305ea0 100644 --- a/lib/presentation/appointments/my_appointments_page.dart +++ b/lib/presentation/appointments/my_appointments_page.dart @@ -8,6 +8,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/appointemnet_filters.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; @@ -37,6 +38,7 @@ class MyAppointmentsPage extends StatefulWidget { class _MyAppointmentsPageState extends State { late MyAppointmentsViewModel myAppointmentsViewModel; + late BookAppointmentsViewModel bookAppointmentsViewModel; @override void initState() { @@ -50,6 +52,7 @@ class _MyAppointmentsPageState extends State { @override Widget build(BuildContext context) { myAppointmentsViewModel = Provider.of(context, listen: false); + bookAppointmentsViewModel = Provider.of(context, listen: false); return Scaffold( backgroundColor: AppColors.bgScaffoldColor, body: CollapsingListView( @@ -92,7 +95,6 @@ class _MyAppointmentsPageState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Visibility( visible: myAppointmentsVM.availableFilters.isNotEmpty, child: getAppointmentFilters(myAppointmentsVM)), @@ -117,6 +119,7 @@ class _MyAppointmentsPageState extends State { patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(), myAppointmentsViewModel: myAppointmentsViewModel, + bookAppointmentsViewModel: bookAppointmentsViewModel, isLoading: true, isFromHomePage: false, ), @@ -141,6 +144,7 @@ class _MyAppointmentsPageState extends State { filteredAppointmentList[index], myAppointmentsViewModel: myAppointmentsViewModel, + bookAppointmentsViewModel: bookAppointmentsViewModel, isLoading: false, isFromHomePage: false, ), diff --git a/lib/presentation/appointments/my_doctors_page.dart b/lib/presentation/appointments/my_doctors_page.dart index 2fedfd8..06257c7 100644 --- a/lib/presentation/appointments/my_doctors_page.dart +++ b/lib/presentation/appointments/my_doctors_page.dart @@ -61,7 +61,7 @@ class MyDoctorsPage extends StatelessWidget { "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png", width: 63.h, height: 63.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100).toShimmer2(isShow: true), SizedBox(width: 16.h), Expanded( @@ -112,7 +112,7 @@ class MyDoctorsPage extends StatelessWidget { myAppointmentsVM.patientMyDoctorsList[index].doctorImageURL!, width: 63.h, height: 63.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100).toShimmer2(isShow: false), SizedBox(width: 16.h), Expanded( @@ -140,7 +140,7 @@ class MyDoctorsPage extends StatelessWidget { children: [ "".toText16(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)), ], ), diff --git a/lib/presentation/appointments/widgets/AppointmentFilter.dart b/lib/presentation/appointments/widgets/AppointmentFilter.dart index fd2a9fe..98da22d 100644 --- a/lib/presentation/appointments/widgets/AppointmentFilter.dart +++ b/lib/presentation/appointments/widgets/AppointmentFilter.dart @@ -36,8 +36,8 @@ class AppointmentFilters extends StatelessWidget { padding: EdgeInsets.symmetric(vertical: 12.h, horizontal: 8.h), deleteIconSize: Size(18.h, 18.h), shape: SmoothRectangleBorder( - borderRadius: BorderRadius.circular(10 ), - smoothness: 10, + borderRadius: BorderRadius.circular(10.h), + smoothness: 10.h, side: BorderSide( color: selectedFilter?.contains(item) == true ? AppColors.chipPrimaryRedBorderColor diff --git a/lib/presentation/appointments/widgets/appointment_card.dart b/lib/presentation/appointments/widgets/appointment_card.dart index 3a65124..aa67a76 100644 --- a/lib/presentation/appointments/widgets/appointment_card.dart +++ b/lib/presentation/appointments/widgets/appointment_card.dart @@ -8,15 +8,20 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/appointments/appointment_details_page.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; +import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; +import 'package:hmg_patient_app_new/widgets/loader/bottomsheet_loader.dart'; import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'package:hmg_patient_app_new/widgets/transitions/fade_page.dart'; import 'package:smooth_corner/smooth_corner.dart'; @@ -26,6 +31,7 @@ class AppointmentCard extends StatefulWidget { {super.key, required this.patientAppointmentHistoryResponseModel, required this.myAppointmentsViewModel, + required this.bookAppointmentsViewModel, this.isLoading = false, this.isFromHomePage = false, this.isFromMedicalReport = false, @@ -37,6 +43,7 @@ class AppointmentCard extends StatefulWidget { bool isFromHomePage; bool isFromMedicalReport; MedicalFileViewModel? medicalFileViewModel; + BookAppointmentsViewModel bookAppointmentsViewModel; @override State createState() => _AppointmentCardState(); @@ -140,7 +147,7 @@ class _AppointmentCardState extends State { widget.isLoading ? "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png" : widget.patientAppointmentHistoryResponseModel.doctorImageURL!, width: 63.h, height: 63.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100).toShimmer2(isShow: widget.isLoading), SizedBox(width: 16.h), Expanded( @@ -244,7 +251,7 @@ class _AppointmentCardState extends State { borderRadius: 10.h, ), child: Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon, iconColor: AppColors.whiteColor, @@ -293,7 +300,9 @@ class _AppointmentCardState extends State { ) : CustomButton( text: "Rebook with same doctor".needTranslation, - onPressed: () {}, + onPressed: () { + openDoctorScheduleCalendar(); + }, backgroundColor: AppColors.greyColor, borderColor: AppColors.greyColor, textColor: AppColors.blackColor, @@ -308,5 +317,45 @@ class _AppointmentCardState extends State { ); } + openDoctorScheduleCalendar() async { + DoctorsListResponseModel doctor = DoctorsListResponseModel( + clinicID: widget.patientAppointmentHistoryResponseModel.clinicID, + projectID: widget.patientAppointmentHistoryResponseModel.projectID, + doctorID: widget.patientAppointmentHistoryResponseModel.doctorID, + doctorImageURL: widget.patientAppointmentHistoryResponseModel.doctorImageURL, + doctorTitle: widget.patientAppointmentHistoryResponseModel.doctorTitle, + name: widget.patientAppointmentHistoryResponseModel.doctorNameObj, + nationalityFlagURL: "https://hmgwebservices.com/Images/flag/SYR.png", + speciality: [], + clinicName: widget.patientAppointmentHistoryResponseModel.clinicName, + projectName: widget.patientAppointmentHistoryResponseModel.projectName, + ); + widget.bookAppointmentsViewModel.setSelectedDoctor(doctor); + LoaderBottomSheet.showLoader(); + await widget.bookAppointmentsViewModel.getDoctorFreeSlots( + isBookingForLiveCare: false, + onSuccess: (dynamic respData) async { + LoaderBottomSheet.hideLoader(); + showCommonBottomSheetWithoutHeight( + title: "Pick a Date".needTranslation, + context, + child: AppointmentCalendar(), + isFullScreen: false, + isCloseButtonVisible: true, + callBackFunc: () {}, + ); + }, + onError: (err) { + LoaderBottomSheet.hideLoader(); + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: err), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + }); + } + void performAppointmentNextAction(nextAction) {} } diff --git a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart index 93f2bda..1863875 100644 --- a/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart +++ b/lib/presentation/appointments/widgets/appointment_checkin_bottom_sheet.dart @@ -122,7 +122,7 @@ class AppointmentCheckinBottomSheet extends StatelessWidget { ), ), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, diff --git a/lib/presentation/appointments/widgets/appointment_doctor_card.dart b/lib/presentation/appointments/widgets/appointment_doctor_card.dart index b35305f..efc5a6b 100644 --- a/lib/presentation/appointments/widgets/appointment_doctor_card.dart +++ b/lib/presentation/appointments/widgets/appointment_doctor_card.dart @@ -40,7 +40,7 @@ class AppointmentDoctorCard extends StatelessWidget { patientAppointmentHistoryResponseModel.doctorImageURL!, width: 63.h, height: 63.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100), SizedBox(width: 16.h), Expanded( diff --git a/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart b/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart index 16dfb1e..c7ef3a9 100644 --- a/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart +++ b/lib/presentation/appointments/widgets/faculity_selection/facility_selection_item.dart @@ -46,7 +46,7 @@ class FacilitySelectionItem extends StatelessWidget { children: [ info, Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, diff --git a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart index cad0309..31dc74e 100644 --- a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart +++ b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_list_items.dart @@ -39,7 +39,7 @@ class HospitalListItem extends StatelessWidget { ), ), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, diff --git a/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart b/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart index 688580c..8b35921 100644 --- a/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart +++ b/lib/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart @@ -43,7 +43,7 @@ class RegionListItem extends StatelessWidget { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.blackColor, diff --git a/lib/presentation/book_appointment/book_appointment_page.dart b/lib/presentation/book_appointment/book_appointment_page.dart index b124438..b39c51e 100644 --- a/lib/presentation/book_appointment/book_appointment_page.dart +++ b/lib/presentation/book_appointment/book_appointment_page.dart @@ -130,7 +130,7 @@ class _BookAppointmentPageState extends State { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), ], ).onPress(() { bookAppointmentsViewModel.setIsClinicsListLoading(true); @@ -163,7 +163,7 @@ class _BookAppointmentPageState extends State { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), ], ).onPress(() { bookAppointmentsViewModel.setIsDoctorSearchByNameStarted(false); @@ -194,7 +194,7 @@ class _BookAppointmentPageState extends State { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), ], ).onPress(() { bookAppointmentsViewModel.setProjectID(null); @@ -239,7 +239,7 @@ class _BookAppointmentPageState extends State { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), ], ).onPress(() async { //TODO Implement API to check for existing LiveCare Requests @@ -282,7 +282,7 @@ class _BookAppointmentPageState extends State { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), ], ).onPress(() { bookAppointmentsViewModel.setIsClinicsListLoading(true); @@ -313,7 +313,7 @@ class _BookAppointmentPageState extends State { ], ), Transform.flip( - flipX: appState.isArabic() ? true : false, child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, iconColor: AppColors.textColor, width: 40.h, height: 40.h)), ], ).onPress(() { openRegionListBottomSheet(context, RegionBottomSheetType.FOR_REGION); diff --git a/lib/presentation/book_appointment/doctor_profile_page.dart b/lib/presentation/book_appointment/doctor_profile_page.dart index 6084c3d..1223842 100644 --- a/lib/presentation/book_appointment/doctor_profile_page.dart +++ b/lib/presentation/book_appointment/doctor_profile_page.dart @@ -53,7 +53,7 @@ class DoctorProfilePage extends StatelessWidget { bookAppointmentsViewModel.doctorsProfileResponseModel.doctorImageURL!, width: 63.h, height: 63.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100), SizedBox(width: 8.h), Column( @@ -73,7 +73,7 @@ class DoctorProfilePage extends StatelessWidget { bookAppointmentsViewModel.doctorsProfileResponseModel.nationalityFlagURL!, width: 32.h, height: 32.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ), ], ), diff --git a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart index 95d6302..914ac4a 100644 --- a/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart +++ b/lib/presentation/book_appointment/livecare/immediate_livecare_payment_page.dart @@ -115,7 +115,7 @@ class _ImmediateLiveCarePaymentPageState extends State { bookAppointmentsViewModel.selectedDoctor.doctorImageURL!, width: 50.h, height: 50.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100), SizedBox(width: 8.h), Column( @@ -88,7 +88,7 @@ class _ReviewAppointmentPageState extends State { bookAppointmentsViewModel.selectedDoctor.nationalityFlagURL!, width: 20.h, height: 15.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ), ], ), diff --git a/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart b/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart index 63aa313..b414799 100644 --- a/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart +++ b/lib/presentation/habib_wallet/wallet_payment_confirm_page.dart @@ -88,7 +88,7 @@ class _WalletPaymentConfirmPageState extends State { SizedBox(width: 8.h), const Spacer(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon, iconColor: AppColors.blackColor, @@ -130,7 +130,7 @@ class _WalletPaymentConfirmPageState extends State { SizedBox(width: 8.h), const Spacer(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon, iconColor: AppColors.blackColor, diff --git a/lib/presentation/habib_wallet/widgets/hospital_list_item.dart b/lib/presentation/habib_wallet/widgets/hospital_list_item.dart index c5583e2..8e10e28 100644 --- a/lib/presentation/habib_wallet/widgets/hospital_list_item.dart +++ b/lib/presentation/habib_wallet/widgets/hospital_list_item.dart @@ -36,7 +36,7 @@ class HospitalListItemAdvancePayment extends StatelessWidget { ), ), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon, iconColor: AppColors.blackColor, diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index 258e8e0..d235f4d 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -15,6 +15,7 @@ import 'package:hmg_patient_app_new/extensions/int_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/habib_wallet/habib_wallet_view_model.dart'; import 'package:hmg_patient_app_new/features/immediate_livecare/immediate_livecare_view_model.dart'; import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart'; @@ -67,6 +68,7 @@ class _LandingPageState extends State { late InsuranceViewModel insuranceViewModel; late ImmediateLiveCareViewModel immediateLiveCareViewModel; + late BookAppointmentsViewModel bookAppointmentsViewModel; final SwiperController _controller = SwiperController(); @@ -100,6 +102,7 @@ class _LandingPageState extends State { Widget build(BuildContext context) { appState = getIt.get(); NavigationService navigationService = getIt.get(); + bookAppointmentsViewModel = Provider.of(context, listen: false); myAppointmentsViewModel = Provider.of(context, listen: false); prescriptionsViewModel = Provider.of(context, listen: false); insuranceViewModel = Provider.of(context, listen: false); @@ -200,6 +203,7 @@ class _LandingPageState extends State { child: AppointmentCard( patientAppointmentHistoryResponseModel: PatientAppointmentHistoryResponseModel(), myAppointmentsViewModel: myAppointmentsViewModel, + bookAppointmentsViewModel: bookAppointmentsViewModel, isLoading: true, isFromHomePage: true, ), @@ -211,6 +215,7 @@ class _LandingPageState extends State { child: AppointmentCard( patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList.first, myAppointmentsViewModel: myAppointmentsViewModel, + bookAppointmentsViewModel: bookAppointmentsViewModel, isLoading: false, isFromHomePage: true, ), @@ -239,6 +244,7 @@ class _LandingPageState extends State { child: AppointmentCard( patientAppointmentHistoryResponseModel: myAppointmentsVM.patientAppointmentsHistoryList[index], myAppointmentsViewModel: myAppointmentsViewModel, + bookAppointmentsViewModel: bookAppointmentsViewModel, isLoading: false, isFromHomePage: true, ), diff --git a/lib/presentation/insurance/insurance_approvals_page.dart b/lib/presentation/insurance/insurance_approvals_page.dart new file mode 100644 index 0000000..50e659c --- /dev/null +++ b/lib/presentation/insurance/insurance_approvals_page.dart @@ -0,0 +1,109 @@ +import 'dart:async'; + +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart'; +import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_approval_card.dart'; +import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_approval_details_page.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; +import 'package:provider/provider.dart'; + +class InsuranceApprovalsPage extends StatefulWidget { + const InsuranceApprovalsPage({super.key}); + + @override + State createState() => _InsuranceApprovalsPageState(); +} + +class _InsuranceApprovalsPageState extends State { + late InsuranceViewModel insuranceViewModel; + late AppState appState; + + @override + void initState() { + scheduleMicrotask(() { + insuranceViewModel.setIsInsuranceApprovalsLoading(true); + insuranceViewModel.getPatientInsuranceApprovalsList(); + }); + super.initState(); + } + + @override + Widget build(BuildContext context) { + appState = getIt.get(); + insuranceViewModel = Provider.of(context, listen: false); + return CollapsingListView( + title: "${LocaleKeys.insurance.tr(context: context)} ${LocaleKeys.approvals.tr(context: context)}", + child: SingleChildScrollView( + child: Consumer(builder: (context, insuranceVM, child) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ListView.separated( + padding: EdgeInsets.only(top: 24.h), + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: insuranceVM.isInsuranceApprovalsLoading + ? 5 + : insuranceVM.patientInsuranceApprovalsList.isNotEmpty + ? insuranceVM.patientInsuranceApprovalsList.length + : 1, + itemBuilder: (context, index) { + return insuranceVM.isInsuranceApprovalsLoading + ? Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true), + child: InsuranceApprovalCard( + insuranceApprovalResponseModel: InsuranceApprovalResponseModel(), + appState: appState, + isLoading: true, + ), + ).paddingSymmetrical(24.h, 0.h) + : insuranceVM.patientInsuranceApprovalsList.isNotEmpty + ? AnimationConfiguration.staggeredList( + position: index, + duration: const Duration(milliseconds: 500), + child: SlideAnimation( + verticalOffset: 100.0, + child: FadeInAnimation( + child: AnimatedContainer( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOut, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(color: AppColors.whiteColor, borderRadius: 24.h, hasShadow: true), + child: InsuranceApprovalCard( + insuranceApprovalResponseModel: insuranceVM.patientInsuranceApprovalsList[index], + appState: appState, + isLoading: false, + ).onPress(() { + Navigator.of(context).push( + CustomPageRoute( + page: InsuranceApprovalDetailsPage(insuranceApprovalResponseModel: insuranceVM.patientInsuranceApprovalsList[index]), + ), + ); + }), + ).paddingSymmetrical(24.h, 0.h), + ), + ), + ) + : Utils.getNoDataWidget(context, noDataText: "You don't have any insurance approvals yet.".needTranslation); + }, + separatorBuilder: (BuildContext cxt, int index) => SizedBox(height: 16.h), + ), + SizedBox(height: 24.h), + ], + ); + }), + ), + ); + } +} diff --git a/lib/presentation/insurance/insurance_home_page.dart b/lib/presentation/insurance/insurance_home_page.dart index bc56473..bd195c3 100644 --- a/lib/presentation/insurance/insurance_home_page.dart +++ b/lib/presentation/insurance/insurance_home_page.dart @@ -34,7 +34,6 @@ class InsuranceHomePage extends StatefulWidget { class _InsuranceHomePageState extends State { late InsuranceViewModel insuranceViewModel; - late AppState appState; @override diff --git a/lib/presentation/insurance/widgets/insurance_approval_card.dart b/lib/presentation/insurance/widgets/insurance_approval_card.dart new file mode 100644 index 0000000..71fce58 --- /dev/null +++ b/lib/presentation/insurance/widgets/insurance_approval_card.dart @@ -0,0 +1,129 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart'; +import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; +import 'package:hmg_patient_app_new/features/my_appointments/utils/appointment_type.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; + +class InsuranceApprovalCard extends StatelessWidget { + InsuranceApprovalCard({super.key, required this.insuranceApprovalResponseModel, required this.isLoading, required this.appState}); + + InsuranceApprovalResponseModel insuranceApprovalResponseModel; + AppState appState; + bool isLoading; + + @override + Widget build(BuildContext context) { + return Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: true, + ), + child: Padding( + padding: EdgeInsets.all(14.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Wrap( + alignment: WrapAlignment.start, + direction: Axis.horizontal, + spacing: 6.h, + runSpacing: 6.h, + children: [ + AppCustomChipWidget( + labelText: isLoading ? "Approved" : insuranceApprovalResponseModel.approvalStatusDescption, + backgroundColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor.withOpacity(0.1) : AppColors.primaryRedColor.withOpacity(0.1), + textColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor : AppColors.primaryRedColor, + ).toShimmer2(isShow: isLoading), + AppCustomChipWidget( + icon: isLoading ? AppAssets.walkin_appointment_icon : (!insuranceApprovalResponseModel.isLiveCareAppointment! ? AppAssets.walkin_appointment_icon : AppAssets.small_livecare_icon), + iconColor: isLoading + ? AppColors.textColor + : !insuranceApprovalResponseModel.isLiveCareAppointment! + ? AppColors.textColor + : AppColors.whiteColor, + labelText: isLoading + ? "Walk In" + : insuranceApprovalResponseModel.isLiveCareAppointment! + ? LocaleKeys.livecare.tr(context: context) + : "Walk In".needTranslation, + backgroundColor: isLoading ? AppColors.greyColor : (!insuranceApprovalResponseModel.isLiveCareAppointment! ? AppColors.greyColor : AppColors.successColor), + textColor: isLoading ? AppColors.textColor : (!insuranceApprovalResponseModel.isLiveCareAppointment! ? AppColors.textColor : AppColors.whiteColor), + ).toShimmer2(isShow: isLoading), + AppCustomChipWidget( + labelText: isLoading + ? "OutPatient" + : appState.isArabic() + ? insuranceApprovalResponseModel.isInOutPatientDescriptionN! + : insuranceApprovalResponseModel.isInOutPatientDescription!, + backgroundColor: AppColors.primaryRedColor.withOpacity(0.1), + textColor: AppColors.primaryRedColor, + ).toShimmer2(isShow: isLoading), + ], + ).toShimmer2(isShow: isLoading), + SizedBox(height: 16.h), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.network( + isLoading ? "https://hmgwebservices.com/Images/MobileImages/OALAY/1439.png" : insuranceApprovalResponseModel.doctorImageURL!, + width: 63.h, + height: 63.h, + fit: BoxFit.cover, + ).circle(100).toShimmer2(isShow: isLoading), + SizedBox(width: 16.h), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (isLoading ? "John Smith" : insuranceApprovalResponseModel.doctorName!).toText16(isBold: true).toShimmer2(isShow: isLoading), + Wrap( + direction: Axis.horizontal, + spacing: 3.h, + runSpacing: 4.h, + children: [ + // AppCustomChipWidget(labelText: isLoading ? "Approved" : insuranceApprovalResponseModel.approvalStatusDescption!, + // backgroundColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor.withValues(alpha: 0.1) : AppColors.primaryRedColor.withValues(alpha: 0.1), + // textColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor : AppColors.primaryRedColor, + // ).toShimmer2(isShow: isLoading), + AppCustomChipWidget(labelText: isLoading ? "Cardiology" : insuranceApprovalResponseModel.clinicName!).toShimmer2(isShow: isLoading), + AppCustomChipWidget( + icon: AppAssets.doctor_calendar_icon, + labelText: isLoading ? "Cardiology" : DateUtil.formatDateToDate(DateUtil.convertStringToDate(insuranceApprovalResponseModel.submitOn), false)) + .toShimmer2(isShow: isLoading), + isLoading + ? SizedBox.shrink() + : AppCustomChipWidget( + labelText: isLoading ? LocaleKeys.approvalNo.tr(context: context) : "${LocaleKeys.approvalNo.tr(context: context)} ${insuranceApprovalResponseModel.approvalNo}") + .toShimmer2(isShow: isLoading), + ], + ), + ], + ), + ), + ], + ), + Row( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Transform.flip( + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)), + ], + ), + ], + ), + ), + ); + } +} diff --git a/lib/presentation/insurance/widgets/insurance_approval_details_page.dart b/lib/presentation/insurance/widgets/insurance_approval_details_page.dart new file mode 100644 index 0000000..c9b1517 --- /dev/null +++ b/lib/presentation/insurance/widgets/insurance_approval_details_page.dart @@ -0,0 +1,135 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/dependencies.dart'; +import 'package:hmg_patient_app_new/core/utils/date_util.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart'; +import 'package:hmg_patient_app_new/features/insurance/models/resp_models/patient_insurance_approval_response_model.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; +import 'package:provider/provider.dart'; + +class InsuranceApprovalDetailsPage extends StatelessWidget { + InsuranceApprovalDetailsPage({super.key, required this.insuranceApprovalResponseModel}); + + InsuranceApprovalResponseModel insuranceApprovalResponseModel; + late InsuranceViewModel insuranceViewModel; + late AppState appState; + + @override + Widget build(BuildContext context) { + appState = getIt.get(); + insuranceViewModel = Provider.of(context, listen: false); + return CollapsingListView( + title: "${LocaleKeys.insurance.tr(context: context)} ${LocaleKeys.approvals.tr(context: context)}", + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24.h, + hasShadow: true, + ), + child: Padding( + padding: EdgeInsets.all(14.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Wrap( + alignment: WrapAlignment.start, + direction: Axis.horizontal, + spacing: 6.h, + runSpacing: 6.h, + children: [ + AppCustomChipWidget( + labelText: insuranceApprovalResponseModel.approvalStatusDescption, + backgroundColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor.withOpacity(0.1) : AppColors.primaryRedColor.withOpacity(0.1), + textColor: insuranceApprovalResponseModel.status == 9 ? AppColors.successColor : AppColors.primaryRedColor, + ), + AppCustomChipWidget( + icon: (!insuranceApprovalResponseModel.isLiveCareAppointment! ? AppAssets.walkin_appointment_icon : AppAssets.small_livecare_icon), + iconColor: !insuranceApprovalResponseModel.isLiveCareAppointment! ? AppColors.textColor : AppColors.whiteColor, + labelText: insuranceApprovalResponseModel.isLiveCareAppointment! ? LocaleKeys.livecare.tr(context: context) : "Walk In".needTranslation, + backgroundColor: (!insuranceApprovalResponseModel.isLiveCareAppointment! ? AppColors.greyColor : AppColors.successColor), + textColor: (!insuranceApprovalResponseModel.isLiveCareAppointment! ? AppColors.textColor : AppColors.whiteColor), + ), + AppCustomChipWidget( + labelText: appState.isArabic() ? insuranceApprovalResponseModel.isInOutPatientDescriptionN! : insuranceApprovalResponseModel.isInOutPatientDescription!, + backgroundColor: AppColors.primaryRedColor.withOpacity(0.1), + textColor: AppColors.primaryRedColor, + ), + ], + ), + SizedBox(height: 16.h), + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.network( + insuranceApprovalResponseModel.doctorImageURL!, + width: 63.h, + height: 63.h, + fit: BoxFit.cover, + ).circle(100), + SizedBox(width: 16.h), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (insuranceApprovalResponseModel.doctorName!).toText16(isBold: true), + Wrap( + direction: Axis.horizontal, + spacing: 3.h, + runSpacing: 4.h, + children: [ + AppCustomChipWidget(labelText: insuranceApprovalResponseModel.clinicName!), + AppCustomChipWidget(labelText: "${LocaleKeys.approvalNo.tr(context: context)} ${insuranceApprovalResponseModel.approvalNo}"), + AppCustomChipWidget(labelText: "${LocaleKeys.unusedCount.tr(context: context)} ${insuranceApprovalResponseModel.unUsedCount}"), + AppCustomChipWidget(labelText: "${LocaleKeys.companyName.tr(context: context)} ${insuranceApprovalResponseModel.companyName}"), + AppCustomChipWidget( + labelText: + "${LocaleKeys.receiptOn.tr(context: context)} ${DateUtil.formatDateToDate(DateUtil.convertStringToDate(insuranceApprovalResponseModel.receiptOn), false)}"), + AppCustomChipWidget( + labelText: + "${LocaleKeys.expiryOn.tr(context: context)} ${DateUtil.formatDateToDate(DateUtil.convertStringToDate(insuranceApprovalResponseModel.expiryDate), false)}"), + ], + ), + ], + ), + ), + ], + ), + ], + ), + ), + ), + SizedBox(height: 16.h), + Container( + width: double.infinity, + height: 200.h, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24.h, + hasShadow: true, + ), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + "Approval Details".toText16(isBold: true), + ], + ), + ), + ) + ], + ).paddingSymmetrical(24.h, 24.h), + ); + } +} diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart index dd80513..8ff081f 100644 --- a/lib/presentation/medical_file/medical_file_page.dart +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -8,7 +8,6 @@ import 'package:hmg_patient_app_new/core/app_export.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/dependencies.dart'; import 'package:hmg_patient_app_new/core/utils/date_util.dart'; -import 'package:hmg_patient_app_new/core/utils/request_utils.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; @@ -16,8 +15,8 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart'; import 'package:hmg_patient_app_new/features/insurance/insurance_view_model.dart'; +import 'package:hmg_patient_app_new/features/lab/lab_view_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; -import 'package:hmg_patient_app_new/features/medical_file/models/family_file_response_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/models/patient_sickleave_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; @@ -27,10 +26,13 @@ import 'package:hmg_patient_app_new/presentation/appointments/my_appointments_pa import 'package:hmg_patient_app_new/presentation/appointments/my_doctors_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/book_appointment_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/appointment_calendar.dart'; +import 'package:hmg_patient_app_new/presentation/insurance/insurance_approvals_page.dart'; import 'package:hmg_patient_app_new/presentation/insurance/insurance_home_page.dart'; import 'package:hmg_patient_app_new/presentation/insurance/widgets/insurance_update_details_card.dart'; import 'package:hmg_patient_app_new/presentation/insurance/widgets/patient_insurance_card.dart'; +import 'package:hmg_patient_app_new/presentation/lab/lab_orders_page.dart'; import 'package:hmg_patient_app_new/presentation/lab/lab_result_item_view.dart'; +import 'package:hmg_patient_app_new/presentation/radiology/radiology_orders_page.dart'; import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; import 'package:hmg_patient_app_new/presentation/medical_report/medical_reports_page.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/patient_sickleaves_list_page.dart'; @@ -38,8 +40,6 @@ import 'package:hmg_patient_app_new/presentation/medical_file/vaccine_list_page. import 'package:hmg_patient_app_new/presentation/medical_file/widgets/lab_rad_card.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/widgets/medical_file_card.dart'; import 'package:hmg_patient_app_new/presentation/medical_file/widgets/patient_sick_leave_card.dart'; -import 'package:hmg_patient_app_new/presentation/my_family/my_family.dart'; -import 'package:hmg_patient_app_new/presentation/my_family/widget/my_family_sheet.dart'; import 'package:hmg_patient_app_new/presentation/prescriptions/prescriptions_list_page.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; @@ -69,6 +69,7 @@ class _MedicalFilePageState extends State { late MyAppointmentsViewModel myAppointmentsViewModel; late MedicalFileViewModel medicalFileViewModel; late BookAppointmentsViewModel bookAppointmentsViewModel; + late LabViewModel labViewModel; int currentIndex = 0; @@ -76,10 +77,10 @@ class _MedicalFilePageState extends State { void initState() { scheduleMicrotask(() { if (appState.isAuthenticated) { + labViewModel.initLabProvider(); insuranceViewModel.initInsuranceProvider(); medicalFileViewModel.setIsPatientSickLeaveListLoading(true); medicalFileViewModel.getPatientSickLeaveList(); - // medicalFileViewModel.getFamilyFiles(); medicalFileViewModel.onTabChanged(0); } }); @@ -88,6 +89,7 @@ class _MedicalFilePageState extends State { @override Widget build(BuildContext context) { + labViewModel = Provider.of(context, listen: false); insuranceViewModel = Provider.of(context, listen: false); myAppointmentsViewModel = Provider.of(context, listen: false); medicalFileViewModel = Provider.of(context, listen: false); @@ -106,7 +108,7 @@ class _MedicalFilePageState extends State { SizedBox(height: 16.h), TextInputWidget( labelText: LocaleKeys.search.tr(context: context), - hintText: "Type any record", + hintText: "Type any record".needTranslation, controller: TextEditingController(), keyboardType: TextInputType.number, isEnable: true, @@ -183,8 +185,8 @@ class _MedicalFilePageState extends State { return Column( children: [ CustomTabBar( - activeTextColor: Color(0xffED1C2B), - activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), + activeTextColor: AppColors.primaryRedColor, + activeBackgroundColor: AppColors.primaryRedColor.withValues(alpha: .1), tabs: [ CustomTabBarModel(AppAssets.myFilesBottom, LocaleKeys.general.tr(context: context).needTranslation), CustomTabBarModel(AppAssets.insurance, LocaleKeys.insurance.tr(context: context)), @@ -192,7 +194,6 @@ class _MedicalFilePageState extends State { CustomTabBarModel(AppAssets.more, "More".needTranslation), ], onTabChange: (index) { - print(index); medicalFileVM.onTabChanged(index); }, ).paddingSymmetrical(24.h, 0.0), @@ -361,16 +362,32 @@ class _MedicalFilePageState extends State { child: LabRadCard( icon: AppAssets.lab_result_icon, labelText: LocaleKeys.labResults.tr(context: context), - labOrderTests: ["Complete blood count", "Creatinine", "Blood Sugar"], - ), + // labOrderTests: ["Complete blood count", "Creatinine", "Blood Sugar"], + labOrderTests: labViewModel.isLabOrdersLoading ? [] : labViewModel.labOrderTests, + isLoading: labViewModel.isLabOrdersLoading, + ).onPress(() { + Navigator.of(context).push( + CustomPageRoute( + page: LabOrdersPage(), + ), + ); + }), ), SizedBox(width: 16.h), Expanded( child: LabRadCard( icon: AppAssets.radiology_icon, labelText: LocaleKeys.radiology.tr(context: context), - labOrderTests: ["Chest X-ray", "Abdominal Ultrasound", "Dental X-ray"], - ), + // labOrderTests: ["Chest X-ray", "Abdominal Ultrasound", "Dental X-ray"], + labOrderTests: [], + isLoading: false, + ).onPress(() { + Navigator.of(context).push( + CustomPageRoute( + page: RadiologyOrdersPage(), + ), + ); + }), ), ], ).paddingSymmetrical(24.h, 0.h), @@ -408,7 +425,7 @@ class _MedicalFilePageState extends State { prescriptionVM.patientPrescriptionOrders[index].doctorImageURL!, width: 40.h, height: 40.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100), SizedBox(width: 16.h), Expanded( @@ -434,8 +451,9 @@ class _MedicalFilePageState extends State { ), // SizedBox(width: 40.h), Transform.flip( - flipX: appState.isArabic() ? true : false, - child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)), + flipX: appState.isArabic(), + child: Utils.buildSvgWithAssets( + icon: AppAssets.forward_arrow_icon_small, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor)), ], ).onPress(() { prescriptionVM.setPrescriptionsDetailsLoading(); @@ -469,7 +487,7 @@ class _MedicalFilePageState extends State { backgroundColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor, textColor: AppColors.primaryRedColor, - fontSize: 13, + fontSize: 12.3, fontWeight: FontWeight.w500, borderRadius: 12.h, height: 40.h, @@ -505,7 +523,7 @@ class _MedicalFilePageState extends State { decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 20.h, - hasShadow: true, + hasShadow: false, ), child: Utils.getNoDataWidget(context, noDataText: "You don't have any prescriptions yet.".needTranslation, isSmallWidget: true, width: 62, height: 62)) .paddingSymmetrical(24.h, 0.h); @@ -601,7 +619,7 @@ class _MedicalFilePageState extends State { decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 20.h, - hasShadow: true, + hasShadow: false, ), child: Utils.getNoDataWidget(context, noDataText: "You don't have any completed visits yet.".needTranslation, isSmallWidget: true, width: 62, height: 62), ).paddingSymmetrical(24.h, 0.h); @@ -682,7 +700,7 @@ class _MedicalFilePageState extends State { decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: AppColors.whiteColor, borderRadius: 20.h, - hasShadow: true, + hasShadow: false, ), child: Utils.getNoDataWidget( context, @@ -740,12 +758,18 @@ class _MedicalFilePageState extends State { ); }), MedicalFileCard( - label: "Insurance Approvals".needTranslation, + label: "${LocaleKeys.insurance.tr(context: context)} ${LocaleKeys.approvals.tr(context: context)}", textColor: AppColors.blackColor, backgroundColor: AppColors.whiteColor, svgIcon: AppAssets.eye_result_icon, isLargeText: true, - iconSize: 36.h), + iconSize: 36.h).onPress(() { + Navigator.of(context).push( + CustomPageRoute( + page: InsuranceApprovalsPage(), + ), + ); + }), MedicalFileCard( label: "My Invoices List".needTranslation, textColor: AppColors.blackColor, @@ -780,13 +804,20 @@ class _MedicalFilePageState extends State { patientSickLeavesResponseModel: medicalFileVM.patientSickLeaveList.first, isLoading: false, ).paddingSymmetrical(24.h, 0.0) - : Utils.getNoDataWidget( - context, - noDataText: "You don't have any sick leaves yet.".needTranslation, - isSmallWidget: true, - width: 62, - height: 62, - ); + : Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: false, + ), + child: Utils.getNoDataWidget( + context, + noDataText: "You don't have any sick leaves yet.".needTranslation, + isSmallWidget: true, + width: 62, + height: 62, + ), + ).paddingSymmetrical(24.h, 0.h); }), SizedBox(height: 16.h), GridView( diff --git a/lib/presentation/medical_file/vaccine_list_page.dart b/lib/presentation/medical_file/vaccine_list_page.dart index 82c9441..777426f 100644 --- a/lib/presentation/medical_file/vaccine_list_page.dart +++ b/lib/presentation/medical_file/vaccine_list_page.dart @@ -77,7 +77,7 @@ class _VaccineListPageState extends State { "https://hmgwebservices.com/Images/MobileImages/DUBAI/unkown_female.png", width: 63.h, height: 63.h, - fit: BoxFit.fill, + fit: BoxFit.cover, ).circle(100).toShimmer2(isShow: true), SizedBox(width: 16.h), Expanded( diff --git a/lib/presentation/medical_file/widgets/lab_rad_card.dart b/lib/presentation/medical_file/widgets/lab_rad_card.dart index e396d62..c7fd7dd 100644 --- a/lib/presentation/medical_file/widgets/lab_rad_card.dart +++ b/lib/presentation/medical_file/widgets/lab_rad_card.dart @@ -9,11 +9,12 @@ import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; class LabRadCard extends StatelessWidget { - LabRadCard({super.key, required this.icon, required this.labelText, required this.labOrderTests}); + LabRadCard({super.key, required this.icon, required this.labelText, required this.labOrderTests, required this.isLoading}); String icon; String labelText; List labOrderTests = []; + bool isLoading; @override Widget build(BuildContext context) { @@ -36,24 +37,26 @@ class LabRadCard extends StatelessWidget { ], ), SizedBox(height: 16.h), - ListView.separated( - scrollDirection: Axis.vertical, - padding: EdgeInsets.zero, - physics: NeverScrollableScrollPhysics(), - shrinkWrap: true, + labOrderTests.isNotEmpty + ? ListView.separated( + scrollDirection: Axis.vertical, + padding: EdgeInsets.zero, + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, itemBuilder: (cxt, index) { - return labOrderTests[index].toText12(isBold: true, maxLine: 1).toShimmer2(isShow: false, radius: 6.h, height: 24.h, width: 120.h); - }, - separatorBuilder: (cxt, index) => SizedBox(height: 8.h), - itemCount: labOrderTests.length, - ), + return labOrderTests[index].toText12(isBold: true, maxLine: 1).toShimmer2(isShow: false, radius: 6.h, height: 24.h, width: 120.h).toShimmer2(isShow: isLoading); + }, + separatorBuilder: (cxt, index) => SizedBox(height: 8.h), + itemCount: 3, + ) + : "You don't have any records yet".needTranslation.toText12(fontWeight: FontWeight.w500, color: AppColors.greyTextColor, isCenter: true), SizedBox(height: 16.h), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ SizedBox.shrink(), Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets(icon: AppAssets.forward_arrow_icon_small, width: 15.h, height: 15.h, fit: BoxFit.contain, iconColor: AppColors.textColor) .toShimmer2(isShow: false, radius: 12.h), ), diff --git a/lib/presentation/medical_file/widgets/patient_sick_leave_card.dart b/lib/presentation/medical_file/widgets/patient_sick_leave_card.dart index 8fc3805..87794ef 100644 --- a/lib/presentation/medical_file/widgets/patient_sick_leave_card.dart +++ b/lib/presentation/medical_file/widgets/patient_sick_leave_card.dart @@ -141,7 +141,7 @@ class PatientSickLeaveCard extends StatelessWidget { child: Padding( padding: EdgeInsets.all(10.h), child: Transform.flip( - flipX: _appState.isArabic() ? true : false, + flipX: _appState.isArabic(), child: Utils.buildSvgWithAssets( icon: AppAssets.forward_arrow_icon_small, iconColor: AppColors.whiteColor, diff --git a/lib/presentation/medical_report/medical_report_request_page.dart b/lib/presentation/medical_report/medical_report_request_page.dart index 9d1bcb1..8eabcdd 100644 --- a/lib/presentation/medical_report/medical_report_request_page.dart +++ b/lib/presentation/medical_report/medical_report_request_page.dart @@ -3,6 +3,7 @@ import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; import 'package:hmg_patient_app_new/features/medical_file/medical_file_view_model.dart'; import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/appointment_card.dart'; @@ -42,6 +43,7 @@ class MedicalReportRequestPage extends StatelessWidget { child: AppointmentCard( patientAppointmentHistoryResponseModel: medicalFileViewModel.patientMedicalReportAppointmentHistoryList[index], myAppointmentsViewModel: Provider.of(context, listen: false), + bookAppointmentsViewModel: Provider.of(context, listen: false), medicalFileViewModel: medicalFileViewModel, isLoading: false, isFromHomePage: false, diff --git a/lib/presentation/prescriptions/prescriptions_list_page.dart b/lib/presentation/prescriptions/prescriptions_list_page.dart index 87f880d..1293c9c 100644 --- a/lib/presentation/prescriptions/prescriptions_list_page.dart +++ b/lib/presentation/prescriptions/prescriptions_list_page.dart @@ -264,9 +264,10 @@ class _PrescriptionsListPageState extends State { child: Padding( padding: EdgeInsets.all(8.h), child: Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: Utils.buildSvgWithAssets( - icon: AppAssets.forward_arrow_icon, + icon: AppAssets.forward_arrow_icon_small, + iconColor: AppColors.whiteColor, width: 10.h, height: 10.h, fit: BoxFit.contain, diff --git a/lib/widgets/appbar/collapsing_list_view.dart b/lib/widgets/appbar/collapsing_list_view.dart index b18c6ee..951732b 100644 --- a/lib/widgets/appbar/collapsing_list_view.dart +++ b/lib/widgets/appbar/collapsing_list_view.dart @@ -46,7 +46,7 @@ class CollapsingListView extends StatelessWidget { backgroundColor: AppColors.bgScaffoldColor, leading: isLeading ? Transform.flip( - flipX: appState.isArabic() ? true : false, + flipX: appState.isArabic(), child: IconButton( icon: Utils.buildSvgWithAssets(icon: isClose ? AppAssets.closeBottomNav : AppAssets.arrow_back, width: 32.h, height: 32.h), padding: EdgeInsets.only(left: 12), diff --git a/lib/widgets/chip/app_custom_chip_widget.dart b/lib/widgets/chip/app_custom_chip_widget.dart index 751b01c..783a83f 100644 --- a/lib/widgets/chip/app_custom_chip_widget.dart +++ b/lib/widgets/chip/app_custom_chip_widget.dart @@ -59,7 +59,7 @@ class AppCustomChipWidget extends StatelessWidget { ), child: icon.isNotEmpty ? Chip( - avatar: icon.isNotEmpty ? Utils.buildSvgWithAssets(icon: icon, width: iconSize.h, height: iconSize.h, iconColor: iconHasColor ? iconColor : null) : SizedBox.shrink(), + avatar: icon.isNotEmpty ? Utils.buildSvgWithAssets(icon: icon, width: iconSize.h, height: iconSize.h, iconColor: iconHasColor ? iconColor : null, fit: BoxFit.contain) : SizedBox.shrink(), label: richText ?? labelText!.toText10(weight: FontWeight.w500, letterSpacing: 0, color: textColor), // padding: EdgeInsets.all(0.0), padding: padding, From ea92a0c75c49ca8d0599bd04567e42d8a6095796 Mon Sep 17 00:00:00 2001 From: tahaalam Date: Wed, 8 Oct 2025 14:57:42 +0300 Subject: [PATCH 19/19] laser appointment screen added --- .../images/png/body_parts/female/abdomin.png | Bin 0 -> 21999 bytes assets/images/png/body_parts/female/anal.png | Bin 0 -> 23879 bytes .../images/png/body_parts/female/axilla.png | Bin 0 -> 17488 bytes assets/images/png/body_parts/female/back.png | Bin 0 -> 26088 bytes .../images/png/body_parts/female/bikini.png | Bin 0 -> 23434 bytes .../png/body_parts/female/bikini_line.png | Bin 0 -> 25497 bytes .../images/png/body_parts/female/buttocks.png | Bin 0 -> 22755 bytes .../images/png/body_parts/female/cheeks.svg | 130 ++++++++++++ assets/images/png/body_parts/female/chest.png | Bin 0 -> 17359 bytes .../png/body_parts/female/chest_line.png | Bin 0 -> 17063 bytes assets/images/png/body_parts/female/chin.svg | 129 ++++++++++++ assets/images/png/body_parts/female/ears.svg | 130 ++++++++++++ .../images/png/body_parts/female/eyebrows.svg | 130 ++++++++++++ .../body_parts/female/full_body_female.png | Bin 0 -> 19215 bytes .../png/body_parts/female/full_legs.png | Bin 0 -> 22365 bytes .../png/body_parts/female/full_neck.svg | 129 ++++++++++++ .../png/body_parts/female/half_neck.svg | 129 ++++++++++++ .../png/body_parts/female/hydra_facial.svg | 128 ++++++++++++ .../png/body_parts/female/lower_arm.png | Bin 0 -> 21009 bytes .../png/body_parts/female/lower_leg.png | Bin 0 -> 18981 bytes .../png/body_parts/female/shoulders.png | Bin 0 -> 18871 bytes .../png/body_parts/female/side_burn.svg | 130 ++++++++++++ .../png/body_parts/female/upper_arm.png | Bin 0 -> 21025 bytes .../png/body_parts/female/upper_legs.png | Bin 0 -> 26319 bytes .../png/body_parts/female/upper_lips.svg | 129 ++++++++++++ assets/images/png/body_parts/male/abdomin.png | Bin 0 -> 30646 bytes assets/images/png/body_parts/male/axilla.png | Bin 0 -> 31669 bytes assets/images/png/body_parts/male/back.png | Bin 0 -> 29671 bytes assets/images/png/body_parts/male/back.svg | 188 ++++++++++++++++++ assets/images/png/body_parts/male/bikini.png | Bin 0 -> 30916 bytes .../png/body_parts/male/bikini_line.png | Bin 0 -> 31544 bytes assets/images/png/body_parts/male/cheek.svg | 87 ++++++++ assets/images/png/body_parts/male/chest.png | Bin 0 -> 30748 bytes .../images/png/body_parts/male/chest_line.png | Bin 0 -> 30492 bytes assets/images/png/body_parts/male/chin.svg | 86 ++++++++ assets/images/png/body_parts/male/ears.svg | 87 ++++++++ .../images/png/body_parts/male/eyebrows.svg | 87 ++++++++ .../png/body_parts/male/full_body_male.png | Bin 0 -> 32752 bytes .../images/png/body_parts/male/full_legs.png | Bin 0 -> 28424 bytes .../images/png/body_parts/male/full_neck.png | Bin 0 -> 29996 bytes .../images/png/body_parts/male/full_neck.svg | 1 + .../images/png/body_parts/male/half_neck.png | Bin 0 -> 30182 bytes .../images/png/body_parts/male/half_neck.svg | 1 + .../png/body_parts/male/hydra_facial.svg | 85 ++++++++ .../images/png/body_parts/male/lower_arm.png | Bin 0 -> 33599 bytes .../images/png/body_parts/male/lower_legs.png | Bin 0 -> 27862 bytes .../images/png/body_parts/male/shoulders.png | Bin 0 -> 32796 bytes .../images/png/body_parts/male/side_burn.svg | 87 ++++++++ .../images/png/body_parts/male/upper_arm.png | Bin 0 -> 32517 bytes .../images/png/body_parts/male/upper_legs.png | Bin 0 -> 33670 bytes .../images/png/body_parts/male/upper_lips.svg | 86 ++++++++ assets/langs/ar-SA.json | 4 +- assets/langs/en-US.json | 8 +- lib/core/dependencies.dart | 8 +- .../book_appointments_repo.dart | 48 +++++ .../book_appointments_view_model.dart | 138 ++++++++++++- .../models/LaserCategoryType.dart | 6 + .../models/laser_body_parts_data.dart | 135 +++++++++++++ .../models/resp_models/laser_body_parts.dart | 64 ++++++ .../appointment_via_region_viewmodel.dart | 27 ++- lib/generated/locale_keys.g.dart | 5 +- .../hospital_bottom_sheet_body.dart | 2 +- .../region_list_widget.dart | 13 +- .../laser/laser_appointment.dart | 129 ++++++++++++ .../laser/widgets/body_part_listing.dart | 129 ++++++++++++ .../laser/widgets/body_type_listing.dart | 66 ++++++ .../book_appointment/select_clinic_page.dart | 62 ++++-- lib/services/dialog_service.dart | 1 + lib/widgets/buttons/custom_button.dart | 2 +- pubspec.yaml | 2 + 70 files changed, 2778 insertions(+), 30 deletions(-) create mode 100644 assets/images/png/body_parts/female/abdomin.png create mode 100644 assets/images/png/body_parts/female/anal.png create mode 100644 assets/images/png/body_parts/female/axilla.png create mode 100644 assets/images/png/body_parts/female/back.png create mode 100644 assets/images/png/body_parts/female/bikini.png create mode 100644 assets/images/png/body_parts/female/bikini_line.png create mode 100644 assets/images/png/body_parts/female/buttocks.png create mode 100644 assets/images/png/body_parts/female/cheeks.svg create mode 100644 assets/images/png/body_parts/female/chest.png create mode 100644 assets/images/png/body_parts/female/chest_line.png create mode 100644 assets/images/png/body_parts/female/chin.svg create mode 100644 assets/images/png/body_parts/female/ears.svg create mode 100644 assets/images/png/body_parts/female/eyebrows.svg create mode 100644 assets/images/png/body_parts/female/full_body_female.png create mode 100644 assets/images/png/body_parts/female/full_legs.png create mode 100644 assets/images/png/body_parts/female/full_neck.svg create mode 100644 assets/images/png/body_parts/female/half_neck.svg create mode 100644 assets/images/png/body_parts/female/hydra_facial.svg create mode 100644 assets/images/png/body_parts/female/lower_arm.png create mode 100644 assets/images/png/body_parts/female/lower_leg.png create mode 100644 assets/images/png/body_parts/female/shoulders.png create mode 100644 assets/images/png/body_parts/female/side_burn.svg create mode 100644 assets/images/png/body_parts/female/upper_arm.png create mode 100644 assets/images/png/body_parts/female/upper_legs.png create mode 100644 assets/images/png/body_parts/female/upper_lips.svg create mode 100644 assets/images/png/body_parts/male/abdomin.png create mode 100644 assets/images/png/body_parts/male/axilla.png create mode 100644 assets/images/png/body_parts/male/back.png create mode 100644 assets/images/png/body_parts/male/back.svg create mode 100644 assets/images/png/body_parts/male/bikini.png create mode 100644 assets/images/png/body_parts/male/bikini_line.png create mode 100644 assets/images/png/body_parts/male/cheek.svg create mode 100644 assets/images/png/body_parts/male/chest.png create mode 100644 assets/images/png/body_parts/male/chest_line.png create mode 100644 assets/images/png/body_parts/male/chin.svg create mode 100644 assets/images/png/body_parts/male/ears.svg create mode 100644 assets/images/png/body_parts/male/eyebrows.svg create mode 100644 assets/images/png/body_parts/male/full_body_male.png create mode 100644 assets/images/png/body_parts/male/full_legs.png create mode 100644 assets/images/png/body_parts/male/full_neck.png create mode 100644 assets/images/png/body_parts/male/full_neck.svg create mode 100644 assets/images/png/body_parts/male/half_neck.png create mode 100644 assets/images/png/body_parts/male/half_neck.svg create mode 100644 assets/images/png/body_parts/male/hydra_facial.svg create mode 100644 assets/images/png/body_parts/male/lower_arm.png create mode 100644 assets/images/png/body_parts/male/lower_legs.png create mode 100644 assets/images/png/body_parts/male/shoulders.png create mode 100644 assets/images/png/body_parts/male/side_burn.svg create mode 100644 assets/images/png/body_parts/male/upper_arm.png create mode 100644 assets/images/png/body_parts/male/upper_legs.png create mode 100644 assets/images/png/body_parts/male/upper_lips.svg create mode 100644 lib/features/book_appointments/models/LaserCategoryType.dart create mode 100644 lib/features/book_appointments/models/laser_body_parts_data.dart create mode 100644 lib/features/book_appointments/models/resp_models/laser_body_parts.dart create mode 100644 lib/presentation/book_appointment/laser/laser_appointment.dart create mode 100644 lib/presentation/book_appointment/laser/widgets/body_part_listing.dart create mode 100644 lib/presentation/book_appointment/laser/widgets/body_type_listing.dart diff --git a/assets/images/png/body_parts/female/abdomin.png b/assets/images/png/body_parts/female/abdomin.png new file mode 100644 index 0000000000000000000000000000000000000000..f4918d718b8a66a82b25f5b672f414809d6e13a2 GIT binary patch literal 21999 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 BY1jY& literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/anal.png b/assets/images/png/body_parts/female/anal.png new file mode 100644 index 0000000000000000000000000000000000000000..d96ef28863cff07a512ed192aadb281fb016689d GIT binary patch literal 23879 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 P00000NkvXXu0mjfaK0@} literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/axilla.png b/assets/images/png/body_parts/female/axilla.png new file mode 100644 index 0000000000000000000000000000000000000000..f38be6b3d53fca04374c262bffb14e588131c4b9 GIT binary patch literal 17488 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/back.png b/assets/images/png/body_parts/female/back.png new file mode 100644 index 0000000000000000000000000000000000000000..65d9ef192fb292c0d36438f4f65c263968b1ac36 GIT binary patch literal 26088 zcmYJaWmFu|(ly+};O;Jiy9Nl(;O-LK2^JD8xC{iBKyXMP0|A1&y95vJ5FofiaEFik z-utYt*Xq@Odeu2qb^3JG-upypsw-fjlcNIwfTg4;s|^4k$bW8BWB>pNKb6B?9*FMJ zO1h{omp`gaBmh7FC0Qw5Z?mH|v}6;z0A}B`;(fic<;8r*IvXbkPC@*>zL-#F9v4)> z-MbS>WtV5ic*1j>=aNwwhukmbbZAo=wRvD=B)YJQP^$o<>9HknW z8gUHHa@F~k6#K0{2bH|PeACc=`Cf1NBe#Nr!DZR=NlVB5>T`3!Kby3R_frB#`X5M) zrv$gLk5*v9<$bfI zn5DyFgGQFfB~cVtH&bm*LpZlXCRT&$HtToc+CbFf%};!$`xD4lw~#-lD5YOOYBkZp zsTQ>!_Vr(UsjpgS$D!z1h9`w=%fZNJI2f=yoFmVEULf>+7|9=>1GOpt02h~kp%0k( zsU|?kYFSRqqzt*U>3F^GSC=&I%{xzx6l#X`@P)(ZI^Q909S8Ep+R?2P9}m-4MlJj^ z!?ffg=m6XIpqYqKu2_4|K!e(ELnpokSe=4D7Q&>xxEdsxmw5}q7v6bBzxBL2Xcq4! zM{vQqVF37%p_#M!YEEPhJ~ZR}ule}g#&Mj(fV_V*<7)?SilR*0d8C6yllLdsk_Q+y z8hd=6t!RI&^leR2xPN9lPF(07$h8P1jBL4)=x(po#bLsH_1{f?+|Y7+&&Xwu>Cymt zQ^{NU7%re*Z@2YU=)}*t1inDu*^BHSTR(W?>VSYMF*Xt|xshir8%2S0*;#VgeTgy+E%T=6t*IG;CmJE0^@ z=R$vQc7t+p72b|yUY@9$KGRt4!~TfRO!gs97^|6dxi<)Ggy>TOS{!1d8sW#Kf}M|I z$TX*Z-`sWoZf3Y6c%4LA@E)`#xX@yJ|hjn?revZ?w znx&-iTG$c{9FhNAw zKP47SKm?{Bg;J@M6Ej8FNQ&D=*eHQ3?ms8Ch|&X>ygH(XYz>hQJYw zz~Y+XS2KTrJd0?rV~7e4;nW*EQw;v8`Qq|xDfcq+7PIQRJ%zjbE1NA~)VxFpKz*Y> zjFiKu*(FL|v?jvb#}RGom%5sNu${yZriX>rI^{~`d;o&-GtmaJ8^}_I9+dXdwI@m- zqOclcv~GZmshdc*=N85dOEkj#C`tGPfm}B!3oJy7)Idt!KcKhMYac)wH!b=1ckc#7 zyk>CFX<*9o-9n>FEuRfQk+#>&-8}x(1Z~D~NWZ33XT(>#Aj$^vlo31q3zfB|tGQ{3 zuhLgP#bCf(0z9}BS7^}tT{z{jZLKvItB+j_?!Gt2q{hx`5~(H#_S8J+>oVyy?efp2 z9G;-S(k;pG?xG@L$qEFFTsR&7)c=-&qIc|nAFtH)p+gC|6jMY!B&2P>^IU+ZqG$V9 zdRzg1)-Pc6uIXHo@W1;MVc>4Y5({Yvpq+9pd%+MyBC^jK&9uS|_u|y@Mvs9eE8ysf zgK}bHInl+`0V_8twsJHf)U`xQrz`9-7bGZ)|CHFlVb9sK>oImyn#fJ965>w`^V@JF zh>1`7Xe2fxsU;a>s+h@#1&Fd8W=(>+aLAI|MmE2n-SIfJ?K9mPrzL+R70liw0jH+* z;G2QSwf%)u=i@t&SB%DN;O;cty^oy?xxQ{AcE`@qQUCg}-Yh;QOghk^jbal4mtX%3 zi48{`W7uT}D+U7{QKFGMg_QQ+2j0%HUY`uBC-gonCJ83#$iXpg0-8 zD$F+4RQ7p~f^w8OUvi(qU-zu1QP~cl9k>0(<~u_GGcdt@OO&iWz75fIP7USZu>PaV z7oA&&ii!_J4`5{eg?+0{DgC60ugAuLE6!n!2^$yDhNaWisrpLwaxu2yfFv$)+xD@c zm|Ticejbf*?QPjJG<0d3&Z6s;@M2ham(oY+8aJpqmpz{L{iCT(_Z7QFO*bDKB+s7e zl*Wozp3H&gV<(D-#8zcuVGpOb-5VUd(lb}Ov;71oUHo1H-jK{TvgF(Ak`-gEKxRD{ z;YfVcz@MM$fb7U}d3CCV@@`}+91S}%>l-!sEfPfEKz=4|97K!TFZ3;ez$RTectB6N z>hHDIX)I$`jalxSHetxORjrH6A}X79h@EM)74|Dxg{gXnFpyA?FhSdIg@Ka*+vSo1 z6bMn?`MKL!DcY#1PVATB(qO#QHPas(r3Fr3>!jCQNg|b%x37!^j3Y>CE(@%6A z+=~#V*F&#*+3$mJ!7mAr-J#w-(Y`~E?`}erh|`)YT>&;-q<;H4I=XrUN+_~|G%s&@WfzEc0a=aWV=Osbgp3L9@63)b zszh zv-=OD3fi=3@s!wjpdy2=Q zo8o%HN%8>1gqxn*15*S}3W^*wQ=vYLRVuqTUk!4(y?*Xt=6>ALSRrLk8d4g|aU;uH zoSa2Jw_dO>o$vJ1wQ($}3!N@p10wr5H?qGFbg6-RwCxks?ZW54K|z|+$pCY+SC?4Fab^DFj% zkDSbppTHu7NUy;DR)a@}Uf)BB4%szH4wnM^(Q3XYwfxbUYEz!w9sL^BHWyP?sh8Ra2wLiEln8h%uakZEJL`S@+!c5fv$ymV zPZDvzLQzN<9Y1-tMoA3B_nfJOjFQexr~A^JAqdg|Yj?6zzelMNy_kRFBq^gJyB+8- z*F9`dM2tNsqQU6Yu?LJ)0sz$H+{b_xqJzx)ThHV>9<|d%pw@LSPdMIr$q&8%Zd%Q0 ztYam}^WBl_ez1+wUzV&gEG;J0G*k2n(;o=9U`^Qb8VZ+02}2!c1Z!cEU!ebQzGP>Fo+@9uxLSU;}yzrPuI zB^tk~NbStw3kjomH>Z?SSSkC{fgYStSs2`6I7)TazFB~_(EvA2i{q`^N70q%ptj2EP4h2ltg4<% zV~mXV{L%?Uht%X`Fc+NMn1Rq3+Fi3B!{8y{EzZNU;=F!1lV})zdv7F1e<={Ka9*( z1U~(X%F+XphlIBO`ATk}`IBdX-2g?K)C%dq<|v6m>s)2jzQgjXIkROi3vn)|o<$;! ztMBdpX&iuMix8H~aq~I=Hx7@82tqMWs?Y~m3Vin&PK(T6y*Os;=vGR8+nnucxfQm6 zMf{c)+=qyAVP}DKZ=50F+JKk2s^`_4rr$2=DoVq)XWc6ARUdtDP`n``6=G>v9s z(;=5%HOwiWq}sNxMNewT{Cc`#12hCbJZ~r{{5HR(Vjc=4!EAYC))8rUKFGWP87J80 zXj_8S&Kx|;Arp&bTAq)0Q@FaAytzkYUpv?1d<1Be2;3K zw<|Wi1OZ@%sgT44>M%tr;c*e^ep;WuEs;mDU3c^B?%ap9!&!n3`}_Kaag!7>aTL1R z5`9(G`=gf%UyY)CP-)7@V{%>yOk(wBe#X+}OfLih0WSx`nmojYEJ%TgZ**&zR>H z5bGhd`of~lk+s+HfM|a)7i0`y9tob_v|9)o0FHNh3LM%6goM1U#1L?cU`(K0 z*_NiOWh+;Z53dJL|C_C4t>&^P@`m}V-mRWql84Lkpo&w3mqtb0dE41XErK76jsxHt zFl6EApoJ3B;BG-Hn315Se_@RW7UnZqCUvzt^Z8v9x3wVqrqYd6RXQa2)zy`7uhnS) zBv2d+ao{x_5argEfNqZu<7yyx$61)YFUFbOVbp0&dhd?-y+i@MBE3HQT3B|ur3v6~ zfuCeM?LB@p$F&2csRrDw#Tsq}(l)H%ll+iDmflhT!Tz|=x_!pE;<``U*r|A@3&0Hm zf(?Aqbz@moGw7F713MhPl4(LaLJ=V);(c+o`L}Q0A#iPJo$<&rscVDO5XKc3cNd)u z(#IP1Pd^SOe_#}nTQX|5tNrH|k#Bl7(Pr7)2=Mp>~W#qW5w0de{3i1|a1jrjuoD&lW_4$5;_=w=8myV}K^^oBHbiDJ9GL2zK zxQ_xb<*hCM#95SyqoK<$%`CejgD`%%Tyt`Bsap`by87BvJ4zWLZ@N%jVG{i#4tK|!k*B!CXM?uUF)H{}O%jk)?jSfc(=xy0H4%DGl3%&R`An~IV!e|DxwoEuo^I8(lNW6Uz=mY9a^r4Hq;@qKHvpL$ehh z^@l`|pCpN%ljS#I-hiyg#|a@wGb0B%Af10c^CN7>m^1Dug?KhD%JthRI#h01{lr0O zm6(+z4}j*O)L!3sV@KIIylpU_cg-xSpT;V%%?3H_!o8eJbq9k1mgO&IPK2>Yuy-wr z(@v^@6*Kwu(6kwLq%#_ZIbIvY{EtMNh3FoXY4VjBhy|NV(FQ~>3_0na^iwdvj?x7} z+$NjamvwrY?RGIxO=eCfCMMc8)BgvNB?)Ta0+X)Nr2OE>Yq1AYUV=9u%>lOp%qn|j zd;MJIOr10mn2UNbBZp1IuhYXl4w1A|OsJN-6de*j8k7U6RwXEvIx>ap7dE#kU$M0W z^5nQyY2UcJiW_8zrVuB}gcI6B6Rz%|5APx9eR!|NDI46?Dju69@CB&5HEn(` zVMvR>jGMAOEeD3Pa9TQyP@4$r`g46IDKc|^*-ttO+kEsUgv=^FB4%9M_Zj$%@)M(w z{iv@H1E>bn%ZA?c8ljBPM4~}6iIo+RVH!B4c43jUr{xRWD4}O73YI(I^Tb<&3T*h0RsoH-Op-Z___02K|7*1K07!)gpyjVS+=s3FG<@asqJ9Y(<@fm zmT+5AH0U(J-nBVV{b>^?i5N3V?XD@jFU%F4Ep!bpZqFO=Z?<&qjE{Y24nYc0O=<^F z8)-a#H+qG8z|ImiMx1@2nT`|}euC$!NvNcnZdp8QBpGXZGH(C2VLi*9bzw>Dso=4g7l zlW=YTA?<*IbGTb^4MA03uN4QSg1D>uQUEun!z(bNGnNO_2wnf3#s=))>UI4-4Ox|Q zA+gXEVicMa@^ZXN(Y316ldDdPXDb-@nEAJ&k0Btk{670>*vtLR;Gdv(HLWf8r42T( zmhj&`6N=?#2csG+t>-lE%{p`}h3I;zN&=yS{hH6#zml(|&1r>Kr{#UCQP;rZ?HI{se&RO- zaz8AuylelJAq)|Vq@vc z=((F%g{xKc+tK#!XRBw+euF^QHHgT@X4I95;K+VZub~+Cfk0PJx4qf;3aU35;M*`_ z;L~00_`5Rj#qEWI49|r=Kyg*#M`8TECV_d=4=0J|2mVrb9LZ<12Pfz|tp9twv5l5G0+i z9KnW1j>;vljHxx47>)`kZp47jAYH0xB-h__P+|gLAxskc^4rYgByDNd+~4MJmLy3X zebCSS;KgRRQW+P8{~f|!up)pk^V=AnDcn5-Rx8&cgLQ&j={f2NP(UNs>}lNQ5*v)@ zNHD8cy>pfRm^6@7giI8uoQ#tXdzs~f@yrh+w499OF#;l(i@8)Uk0F8B=*MNv)93bl zm-PxgAaWb$7dtJL>>CvX+|pBEH+W@~%gpEd`(2##*-~_9A?zs~BPXvq>RaARanFYI zb>!{O-J;QAj|2_^G4A5@UeFqKkK&lfL}J`vDTe6_`LB+Zjr z{5q?+$;THCpbaUqr&A=L1F~w;^5qI>u+C>YiJNDkj0>qz3Pj;}@($TD5S5G(cIIHb zZOAnSG{CuUB#pxfT}f8Y99}0A_Wi!CcB5{UY%0@ldU~ayQiwNs{8*UMk#`P<^zNPH z4jl%xM)iEYHF)Br7y*}EDx+%_ywypA+Ln<*Gl_%h(PL*fl36#$9;Yc~kW?|6(}MR; z2v;2eeK)f0}!xs^$S(&2X`$OYSOO&Gbu<<^hficra6pDI=#$$zU( zrJ7q>JuaT>oC(GM5ZFHnU}oTo<8W8K7Tf}j@9CfKZ+K25(HpdDuE}b&bcxWDz^aiR zXB<+WvUjWF(pDcM-VT7r1?o?g`&|NK*Z^8A2QvJoC#Xa(4;>-+=g3$_$7T(ncs=m# zN9nN=3dX#1=b#Xy)7nX(CjZfudZ)WsVwU3D34wF%O*MUiX$U}AtL^wowtZ@J3<-W5 z^0ZWx8n`${_S%sqDF5450IZy9BCy=JH?121GXC9Oo;`EJiAEQ4kJl4vp=&oTe4Zu& zn$j&|GuUDNnuMxTnTT|E6-;!9E6k#T>9!>M0{Zky$YUDd0#;www}wsye>|a#1<`>M zDo}j}`6)S@C7P|~14UlyoAYsFk#s%N2ibmWIn2M_l+4TZ_2tJ!uilE&-FE?In#Iaa zL_n8~s1#a2Ejo6MB*#i^M#M{OS*E)N#NSY9C@QV(*MW1=A+O@?iT95N(bD z)MD~jvSJIlU*-Bu?frIU^LitXql*NM6@&i%Q()}{izXkTC9mrzq*TJ3AsIuPW>qT%`%gj1e4etg97%?#9)@^ zL2c%xX`DdV(Cshv5tjtQ;WArPXqK z9FV<43W;^k{h5)w+ExnynMlCJQxqz+@r_=Ey&)h?@bIT={WA*?>4c?&`Q1&WRwG03 zp#Jmd;B`o|+=YnlBi9CwE*3Od)+V>J2AzaZyG}QABS#d46Jh0%lLgRHJN^4tE~bjM z=uauSeO{MOPxiw1YRSq*c$-)+-zeMisOz|a9uC6+IF#w8NT%0>5Xf`Q!Y7(xEL-dr zY&+^RbSL?M%w?a71K@`{`G8PWPKA^r{(V6cqX+CMlJ^%#H_dXojbDj&O(o_!>@ei? z3m+gsOTy1PG7D|JWbO74#uG!Xw9{;L!-ga8K1ZzTJqFu=?4#bdN;u4m;GqE^%Q$`1 zgXz-^!}|dj#uT%o#Xn6`e(lSPi%-H2uQfSDbB@{KS%~8h;h8*`THCKqq#x`T2YIW- z+cXevG;12G_#n-XpAc|I2)WS}o$DVYSI)C{fxOH-RbtpUVtj2ZI_yS5Y5<9-lh-v! z9g)GbhB}4u|Fi(6rYb*8>;9jwZOPsllEDNsCJrj z7_lMAwFvtO4VXQp#pD}cSmOd7J0Kea27lgcE#3IiqQgjB@dxcd)v2H=MIdbiRf4gI zf)M7yQNe0Ph%@^RZ6NdIpYS-e6P*f%%puY+qHM;F@D8R)>^;;LS)lq7@>mi)6p47+ z0{EK@bf8_j8$j>D(B45)j#3jTlrTh>s!gL9>>o(VN=-J{-|AF^0*tU2p=`$+eHfm! z&8-vtVDRcrXAz4)4<&Sm(X>%>5{;J&z;~6xMm1avXzFQk`i4P!wr1%~lchc01&aLs zwHX1r0@ckHP~MiSW`v?jsjFmYoSh9D{dfcAG{aRVLk4`*PU)}}KUGyyl*=cM|d2vE)EThqel2T?EjQb0FF6j7D+UFi*~+8WY^jON$&4CeK!^>%xw zzxmd^SFIMhUSfKH<6DAO6j(M2u+F}x%cTykOVO9@M}?jk*L$pH4EGG%4E!2SWtoyB z1lD=zt%1#=aM~e%?i%j~H8k5S$;b#DC=e!c;+rap>?r~Bb_58;MmDhe&0$^M9`$!L|BZ8v*lZLCy6_Av7F{bs`ke#e4JP! z>r&7@r0Yio!&*lp#Q;Z78c1G14e-AP{vShWNqbkZdZa5@6IY9akT>>A$`=pWQbLC0 zL4R&5l|P+YD50_Z-r?>DqFSrqb_u>&uG!X?muv2UFF-9v#Runx%SHZ_Topd`K*_I@ zb~Gwq4}6B5y@BptQCBN_BAq04X%J+%UDC^Y>@7Ez60nGqJ&r(vM7qphmXvMBl{NB+!rGMH{7%8itqQ5RdS;bt}Kfv^% z1at%$N~bd4hyX{&K!zd$GHx=X5+?ntZjSLhvOM1s3nH07g}V2KxfjKJim2KSEb$6^ zxUYd1w>8ONA~5is<|`LyZhECF8nl%pew-u>30nJ(tnQ_qJL6rLq+sjJS)VE8D_;`i z0E(}|-^N&s9D_qWXlBdm+Z>Lrhlq$ap!x*Ax3mI{y4m3rh}b4=Q=fx(?0WM9Leo4cXoa|$cN zhT-F_)xYN@RRLvxSSAkahS$=qNa&>y()W3raUHsVOf+RdWldy-iUeb!p3npM{hktg zVSdJgatIC}|MGVUtSvgqMT;O%LGFH3c`B7ero=aF2iaHx7(NYr5-oP$^R3t7(?D_S zlgHw$0=Ny>fWNevf}^0wuFC`kd}LtF+f2?w02ncT$SGbNWAP;71Ze7-C(nw+{{D^j zVLt43wS9xx0YM{V1{fuv0>A}301+C9di=*>=^Aa3;|e7$jArtT+UK?eB{ZnFp}>5f z5Sg0i+T?Rf9a;~VaHM0kpt|R73Z#~AUr7t(0+3XCtCwhs)P%hMxuU#8WBRK2d2-sL z?r)oGq@I|H!8hO{C{KF_Jmbi!`^G{B9A_v5k^R3nU-Nh zgMRuOL_dV>rWvyF`uL0Mqrqa#W9O30X|uOnMsB`Ze0-F1@z{|_&?p?uy*$_l0k5}* z@d6mY>C4m+a3=#NT9KkJS^HMFw3_u#{30FGyV$`&?x%l>lt-CgdoL@o*=OQJ&v4~y zwW+G5(61l*sH}Jpgbv#9Cxb9Ey2JT48lCNX(Ke9bzfcN2$Z-{|4+rLHJ`e-zhTVNw zfbbnPYHxx+VE-*~^aU1qvvq!Zu>3xu^Pjk)#ZB@3s=C>A@>6;w{aL|wA)x8!H+RcA zW!Gj9QuO!F*nD@jjz`Tal+zDMjMu+E$h$hmQv4^ORrJ2})&aSOK%^ZS1qp!oCrpP^ zhL3axOzgli#6)sw#!~|;BoMFz0vVeSiGChY<(L0w{^~mkJx7JdSz$Wy^ai# z6b|-?47JNxaI)Veg(FwzT~a6ud;kC`M0aWc9u(f;h+qGSdkveKS=OkV4d8cIzpD3O zJ7R(B#moCe8BD)k@#_8F zVFm__VI0)C989RX<1D%-YJALg-M3@K3SRWSZgik7_CdZSFY6pT{9D3%&qIq_#6(&$ zA|O+s;huU*HGrH*y-CJz7X3}(JmfdzjT55w7%tPj5Qv4hYt99#h6F7=jEuvErY927 z|IMckM@JTdhjoJVO3mQjo(S^})@LhT_OMpMB&$Gb!av?N7k8YYxHa-0Hf zs!zmxS`w@3<6vixG4e~{1i6nS2Zx3yqQZelux&1byPCpZ++M*CXTxW2=8akP2qTN> zLXMoKKG4*^V+Ns*V0L)q{qv7NinTivBAm~v7Q7;kWjnczQY9~-Gs@){)9n#TqN+A? z-P?FgjCs!v*8JLvHE_V8n9U4~E39>7T@I~nE4ZXp-%}4dEu9f)HF9iJnKEJ71HTJVU6#_Dkfi|L#qHQGt zYDS-wB~<`T1GK?pkfPi(cxdP81vfU>$#}2Qv0C}UysVzXBe(aT?f0^1@Ajq3KV0kX z(8mMQ3j$>gPG=V%Tn#G5kKd3I^Kt`Gt#H@VYB~b}KyRn&ebrISa70YX*-Q?eEhUZz z#Mv}RZKd$$Q|v~WB6k*bBJF1s3<6kkH!oy5HyOj|0YH8r{JrT_WrSeH5xkn((vhZi znlPUA#M1=t?$oWV6bASoi*LU>IXK*Zn^QAtHMu1I94l~O4V^rXzqah_MzN$!Boc5As?Gu0IfZSc4m@`{JXKd z(W8Tt?_B%bJ)kePKK6ItUm~os)t+2e|I^|ScOr=HF_5p!tK%!5Uz=azDN?hi?0wS` zH!9$~SZQ@N`zcLBc|x!2-Y^7>cgPp=L(GdYO)Lo`q}5WuP;h7~lj`LY_;A|L>B{nP z^WO@(6Js6k_c#QUVtjyM11WAe8T5Z}uccq+6Z4DH)ZQHq6^C5=e*R`*t_yK`j52+M z9U>Kvi?#gBKE}8}_fz$$1zVMQZEewtjH8oN%S1KD&W{iIrPi8ShBu(I{lMjP9u(L% zhr!(sE86GZRewO`uU!oq7%NHTf${$_yfEV$C1TjX;y->snZu&)^^-55L{21oHC>{ku#$xd>t}S0Plyqz4rH(6oqQpXo`6fQyd0;SvxHEx#^r-nF=^%LhWmh0RS<$=oKx` zC3vf*5{mbza`XI0lM+*ZMyK!V@hvFd6V`KHcXyHD-Y)1f6#Kzc$Zy*`OVsO(*_Fx# z;$$ET@V_h!L9&2El+3_aqv^AMULa6elj{Pl?VN+)UoVUg{pUA8$ScK^OX#R8062f@ z;EEaTV-Kfo$REqBadG!kn4@WTzc`}kDmmqxfLJ~r%gN@uq5+Agpu{cMisOU?vSFQS zCV~i>bpH48m%dqeX0k~iH@}98Ic~uh(#}{q%)@noX{bIM1qT?8Vhzeq80pGh>mgT& zhuZ!@Wb*4zL!rc9B_${KRp1YdBSpSkzih(r4MZIr(a-X~9zPjoNs>(}d^nzC{Zd+v zM+|&n^8SCTWkSQVv$92mvyD}}$Kgd)OP9&t+m8%I#mCPcXZsI-o%%@~B_O0TXyF*V zZCkOsd@U~x?>071Fuhu`;tjgFSopCzinG0ni-o^^5_k#Cqe+M*$i+m_wGH{{4P_?g zxf_(Rx=W2RON{uqgJbu*4mYz3zVC%5SL+mwgAQeDhsqn1oSFQYdxHd16i;|9Oy-1N zaf-%idDq=L>}A^IzZQ{J{_R!(7(cK?h_&bF@P)GgyUT*sTWG^Zhn0PVNFIquUjj4J zi6#I`X^&ZgQ!n3e*(&N?@+I&5fN2o|b|8nj7INE)4s`is+KS`mk{1Tc2Xeai*_1I9t?ObzAi68-lPT3S4tRf~r;w30?4R*H}`<2^}_*dsN8yw4cxPqFCUu~2k zBPO{v_}hGJBhMF^b(0<;F{gn=0z%k7%)EeL_+8lhx6&Ih7l<|vB5=X~kW|S}Kt>S` z`^jz8`tYyF3wxD)SUxP^)IJPX&RrG+^)tSVkDd2q(t^emet%HchUv4)AVS~k`jY|- z2NgnQ~6?S7WO6$JV*E};JhqG1Aw zS4fGd{VoLK!;`%mI1HGBF2DdmYR=dmWGJKT-~KxCGBk{1`G@sxiBJF zWz}Tj2phNdNYI!@*+FD=w8R%sx`z_Nzi#yULNEsviK54rwS`XSq=;P}&z$PNH}f~D z3x$WWt|(AJr@;Z3JIF+%u9|DQlvsubr);^GN=Z!5UAw#g{5qAhP}272&zo|y5^YtQdzyj0`mqC?Bvt#f-vT}f`jM3uvjMMurrc89atgOj) zC=~4r>k0~>cLA-YCG&0*vZY85GZR(OO*$x*a(jyRFtmVQe)PVGXUW^8|os$5RzL~PaBHwPhN-D^D1IOddC zlZ%CiyC!gVb0@GmAF%#Mh7ZNM*0Z~}i^1=r9|ypDf@;%}3B6*yOaMI4fL))AxX^_@ zjZFOpw(wFM+<0*DC`i`{NEgqX1 z4-vWRY?#c479Cd93XS(D9;z>0*0$W#F4rB)0&V zE{8>o|XgMBKv_1?66iGC~MvkCG`On8KshySW;^ z1_V95AC3Bnex~?!9mzrX0ReY6*jEZ|87s9i$pVd_V23fE8XuOoT=WSyX7&vl>`X?p z>7(vJmgrIN&-#;xfN1&Hc}5LP|I3 z5A?-bpEtwqZTeh>UincvF9!yKQ1858)Vnf5*e<*pUFO~M(CaK_VYqbDeCuxsX=j-` zq?h5WLDryg0|Y*lz#+Q%dG!4~5NGbE>uU^OSLLqy68|GD%CE&4c6$BFi}ybOQ%vjo zI6C0Sbh^%V>2q7KHf@PPw>ObC7)U?{LYqrdztn#rsl)gu*(C#p)NauG_C6{4$$(Xy zu*~)AVG}@M0U}N>!fYYB{UXS6pbu#z6FGZI@12SK>u@OVa`LUORmT9&+J8wz8g`i> zydGSbS>}Y>VcDkuj8CO{`O?VTOdO~{6A}h(t`!OcvnbOd&Wj`^pg0*54-0quq#6hv zH4Wsj;C~@r9nAv%a9O!I@8lSE>SOH$*)IA@{BDyMCJq_*8Og+E>ov7l{p8g?0Z%-53?^K!EN0O-UZ&(nO>KS3C_}UsHCgvVJ?a+cj{J#w$Ufe zCm=!7m#HV|`tJu25=vlZH7<*3L03bgC&i_cPDu1BJff5d3Lx<^dnz*_$GBnNH&H)w zhel94oYkVS!%1Ig_RT9*3to;FyXF7_TdvG{mIYc8`kq@`P8%gI({i-wW&$$YQqvY{ zdw^`>JRiT-=Z zMafgYigksy2=8!2fcwJ63?Wxuq~(jgCw;p9`SS4t3R@htylT3t!`s<%Q#pPBSA^bd zt^IsUI?N2{{xw-;tnvc*?*yZD8Q^b!8nVOe+07OnOj`}bfO?!_#K~I|f%|G+Mt~L? zeQB~G$+}a!QJwpJjc@C50re2fACpKGj7nUq`;SYFxp1rb;(YObF09X^BuAe=piTL^ zLvhI@Dd;xlz`!H&tc!XrHh-@l2-UFBQmel*DD5=VlW089P>%%GI?MfMSa#~!dn{ra zMQ!T$)QC|p-Ju^l`IzzR-|XQ&AeKUb!%uC)Pg^&)>=beblR^u4&i?}`*GMmrojZ}1 zv4PN;kD*$p>7N%cpoQ~s;$10(KuS`=trnEN3>Q|Kd>h;_X{2^hMe_1P2WED9$GP@< zi;#>}Kq%85da93;9QGZV&6d=>zcHXvWtPgcWUyoe%okyFypU-|SK~LpLm9vdkTH4Nss)dTthQFu-Y{_K;6yj^| z^V4hTGQUvaIemPI-;q~fZD=q1%`U?;&?1CZ!9uY$U4D~>j-Z|NuBr?SyfwG09T%EZz(392pnqwBy4%n=nCah zRi<&;tgU22&Ur?&DtM?VIzK5v~pmHLm*UcEfTKv4k&(;U+g9#$Z? ze2I=l{&p2c*s;m`pwXRdUIM_)g<0;AY7gbl&)2{bl3_GC0nFr4W05}`he}*KzXQ*C z{PFSny}@~Yc7R<+O`*{C!KV(NOG$#kXN6QjrIuY*O#)hT;vNGal>O|!>hXU%VYHkl zq#X-JW{mY%)SiMhoayI@(HIuvA(YkB=B`>*W>&u}A-FSu(NIl%upboSPgLo<8OK~v zT7m@M$BZPHc;ISA96XuOfiZ@k0xXdl3GW=S^%cXNjm-xxj{-OVTTK)OBKJa>hrW-v z9lRBo(51g8!yqR8V>a|2msgNGrLN!@*ACS0%~nogKqku?$q-6{M`Rd6ot1%>pQx?y zEzDlSuTQL@Lh|+U*t*TIKuuy2(j}6%Va@T|+6ofDH2{YC81IN}pN3lQp8E17-hKbC zXw0}!NQd_Qq+kwA1(ZqZ*~!5NLcPDeL`&qF`^_>%FioPkHLZo#MkvDZg4UG2_5P6K zd(ypp!~NjZfgL&AQe%gr5HsZn3?#ug@H%wM)h6{*5Nc&@QDVhNVA~o;^LJmD@3U-9 z*y3wt=;#^f72nFHe6%vwmF7nLWvqh?H=x3klYq{m65iEDXRe}p^T|nZ0&#mm_@^qD ziwsAPnw=E1@pSXtMhi#`ho^7W*?6N!R=Uo9cY!5nXi-CAy!bd|1fEjbKg%BMx) zu&20oi_LEK%)CdSOs-Cf?%iA2VEh{&2sX^Vys3K{+7A|rwqJD+*2TsI6%qlvpZS2^ zOq@tNP|YxrrmHDMntJAsq43<3vC$tp?Hl+%&|#4eV*~;>x?A`R&Ko}f2P_#tnw@lC z#3!ESJLKfiE^cfHi!hDxcNHj?5%W3RjhwWD*0uv@W57FVpz?_%kgR#}RlgV2p)p+K z`yAmQ0{m3hUo!<+>Avs3#_qQAVs#EaU*DXfC6*KQY0EBMZQv5rvpS+rX5r>$6ZLWX zNEPh9{m_CMfq-uB{eTFcj66X|n0v@J=&%wxw24MXQsn&&f|u)$kcVLk$<=cWe8`3@ zbn0f(iP-D59)6j_f%*RTfMRV}^BT#`SDHs0PU->#Xy~nYRp6jmQl4o#p^J`3BOtpk zYIy#idCY*T2q#<(y7y6_q|p@)IOC}5fp`zQLHgWB!oIF9waV`(z;NDkKdVRd^E&0e z#C+J-+#V#zpkXhnwfh zvvm=`hW=V-(Ty%p&ZjJ~N{+BI^ioqwAWj6bLwk{J8EvWkVj$lBh_(>#3U1FW6lfKb-X%1d z;nMY2=*$Zpq5lrSY5E7hbjyE&=lDRvO)~T|9Fx-+5#`reQlz<*c}`vsE;?NJsrR!g zHySkWG)%CbhF7)TicJlVNgtUq%t@5zI zeBnQvjoveYP#;%hC8PpNE%|PP4Wf4oIV~?ia7Omk(EV>tZ752a^p8U3Rlm5u?M%^= zIcv3Vo@Gax&m{Nn7r{pMJdJl!r?579t>auLD(fw|+W$`rP@qf*Ao5z|5WY z?BZT(;JfJj?{VjHzYjd`3LPrm)m+55bG8+o@ro~f$-cjyT3S_@G~OiGRKQFcA{fz@ zMJY*UYgMiS<8mWK9AHdjD@h492IjwW5u-cM1n=pj#b5)B>m-lr5Zpthg@%!;TJf4_ zc@Ens7j;DyU$Ff)`tW(*@c-A-RmW8kZQY@}K^iU{(%oFTJ4Ga=1wk4FE-6T(ASGNc z9U>`>bhmUj0s>Of@Qv^NzW4XcoY-g2nSJ(NYfa~(LfOA5jRIzCpS0LIyX=zH z(dvaK;m8oe#@ouRq*k5#EQzH`KdJjH)kL-K>g?)VJI8Z|VRjeBZ>vZ%kfh0(D7uV= za|DO~&M{n^Mu8RMN6U5cHiY`x&72Kj7im=k+xU_~pIvx8N)F zJ1^IOg&A~{?f6~NG|?}aj6hKE#1u6H+YFmaPo=&H=1g8GQ!3Vw6(<5`rmk^mMRhQ> z4;yNJKQ^xPZYFs6_~nkmaVX_iU4*KrFe?0#VEaS&8S%HuAv6Xk*VA9T`L3UHzw6j& z)(>EH9m%9te?I5+hz`Kkh;1!FfzCUblIO9qrg-%ia1SR^unP4F8hE1e{OrniT>=zm z9|^gN=sQy~2+Dl0JuJ0Pg#8F%ZuAsd0`%%F_B`YfTA?Ts{@!vST8OO5fy#=yL!D>! zW=&~sK1UcaM(FU>4vpv@NGZLXV^l6dU7UDMawb!CQd|R)YVo6<9k+i@PC%)W0ugTR zST=pjRn^e7;vI3PVoB%_TI4_ptjFaZW<7@QsX1^c^imKN{v4a_A+scnoo(Be+d^0$ z+Dk)U&nRIG*bq0F-*+ZneoYJ&yOw@nSja%1Oi@Vnl;Z> z=`FRqIyrqAAbTJYZTW&sBIw{M@;E$iF}o6T7I(8@&}Ql2rH15;0pHuFjENaD(?wc` znGv^?&EjN$4VeRBv~}*EKlIUYC;<^Mzl^AY7G+LK zjrl5{dqP%^m0EI1`e?n)-F>Ey0WHZ@GNB>7JimDRXph!?NAxa1v^|?_lPWHbfy4gM ztfRuf7b+@5X$lcF5OXdY+>+b4;~N$&0>89X;jzd9l5U=EM>*CyF0lMqCr-1cmK6Bg z*MacC=5k(~HsR+FYycvf503U)bvKiKy_N3678);JD{@~yJ#u3=u}JSll&(x7#f_Wp z+c;2~3DHed0ZDNWeLAQ9^+$nt455Ar$W3=v>Y=VBjRY*f*0GW@zz?C9 zhJJeMtObxvfw>viqrx`CoNj195DwKsr+ussxnA}bY>jDzYqEWa{E$t;!nAh$49WM> z`u~BJK_z!|BpBWOj|MZ3!|78^;3*N~QyCYyr>}|8r+pY(^cjd1M1qj*v$}4=VHhwG zU0PzjI|f|gTJMtmP-j-cMHWLY9uZ z?S%+E$V}a-Q|rYJM>Ybw{dLrBC?d8(74Q#F@-T?~l|ImWAj9M@qZ8<0VrZDlr;_xR z!ngM!mt}|QgKB9H@6LmxP$VZ;>)B#aH39ZG6IMzlP3$BfV$YS%LD*6+ac(y^yeObHb(}g9|^aW#_x`v7;F5m-zk7lg(yDC-6i@nWlthq z^a0t3uHw7T`7-*z#z9E?EoB2lcE`8yp>I=J+xd{>e;twnHXv+CT36g&fJ-{5pJpsN zj=+eBmK#v}6>?r%@@m1hC&VaYRXV`{3y3@!WVVe^3#9^x*%AI06T#}RX=_uFJ=qcV{nCTu^o0rv8z2Du*ZliDB3okrVAt$I@UWD{Nl zAgSg@E5~$j_Gtyo?y~XV_N`4P6iF~Uucx^rJb|HJ{4gH<{MRz1F=+RbA%0fOg2h=g zn;#Fj_MD=|&$%{yg={Mh>A2lq*Rg7!22g=9%tQi(@hFYDB*XL_R1AHVMkgkYK$4kB z0NB_IF*nw)Yr!OrOMUFi8k;$&%K&t3L*M^)u8cSVse8W46B2wOQ<=I02PHtak>VK+ zd8z$}cEL5}J_8!!u2DQvTHxed7Otsr@cqrXBtcaf@-NIs`b&f;Sk(As6P5n+*%Ps_ z?_J*XYDLBt0vBliXeJ`&e%4Y);VKyDfCt$`%gsqJO@LC}=5qG_mP{w^Kr|uDSO&er z`*Iu~m{*k*cl9XGiJS+cb<+>u!!;RTd!i6`HxhAQL6q@<+IeX<%ZOpBb(T*A*nBMy zm@=>H^W7*Wyo=07K$@5><6iJms{xWKSQJ+3yA3Mxv!*nB*G;G(fIx)@1MpWPN>86o z-ob@``VVf_to4Sl0EUQmkmz;cFnn=#I+Ig@pmo`^GlI(p=~%LQGqLh^wSD~_tZ#a zS{$vcLGiZVDbd*&izb{pO>Q7bRhi;yIWQ6jR|5DNl9u-0&^S* zclUog{J8!&p&wyf_9H{?;!_otrO}NujepQh3zysOf zKHss2!DyqivpOOYA1XCZ#%)FYN%Qf__POP4!S6`##R)De()+QqB%weQ*WakHU!<}* z{1q~`RN4bC-!4q{_NNRnJ%8q73Zn{#MmhAZFYj)HYsRzwRLG5F2ediYr&V2%cP8OYgjce*Fv=7kx@?Um|J9 zzJY^lO7h2<+B(;%glPLzaxSp|a+a2~&CyGYA05PP&g)dIG>0H`O{mJk6(;D|^kEE? z{#gu?P+pCdraI>O4JNdSm8%Cs(mINAfbN+klrK+ov~S;}AQ%Ow zm0Ao@;*?>iu&Y@cO@{aaOZC-)$}s440DU@v)FQM;+}gIy^dmV^(j2kKZ}vQ=#M~rY zns?j34~EylGCG6!vtk<1Bg0p+${gz6{s$;jfh}+I+zb<4ST$iYD+wUX-6zBE@kWz} zVbFicndls%P3s+v;_*nwFf$Ov-CMvlGg#zAKC^ZHAGBzlRg;7P@LR&9TS}xn-X8%|A;pdQw;p=g{)}dT+k6^gX*N%rNuVk9zVN_VRp>LPaAKOqk zEL(TnTuN$U2#H=bAa&-VBUPbixBF?fDR%@=>$e@$^hI`f$s09|PjB9S@|Xu#!!#Y} z7N#!zeHRlRgt2qoC@=IqDUC0yC{+hg)x3W132~Q8nnZ=NZ+n4It`8uT>syRUvFo~# zyNMa0r)Kx7cLKGvSF5eJGAF8a z+|EL05IPEOD`I9kBFS_hiDrBGiVGETF6<%K8AC}uAj@_@AEBM_+CjfwpBDd+(cP3! z#NE{T`Qnz(JjGW;lOGrP0tuckub-pry zk$vT|G7xRkS+1wLZ8&W3?vKlRa&hJWY?ut{1O~z2YQ=uqI*nfWTP5+Q)}I(iDQYvJJam_{OF$#Z;HKwkYp0HntNrG-`$pFNuszQ>GB3sQ{>q7i zDJ&*CFpsaNMt{|iU1JJ|q(nxs2!xYNkc@wF*o{<;exiyae_>D~fdnBcC=2oZYBFuE zt42y9&R)%Bd1P9lTK^C7rc2LM_d?j%g#*~gukToncv09_KxjgwHH8!ID~Uno*mSQi z!UvoXk2l8>?>YFze&g>jkb-Mq==~bq{<~{x%L3&4C~-<;S2wmyJ@-AAlZq4)95A)Z zo}?Jz2^OFFNYtTN=$F8oWN9E(5r060_v6DwXBcV$ItBzuUUH2PYS32Rd^I zQ|cor&D9tqBQubX4mJIhSl&?=Kv$Ru-G@L^WexikaWieY1r4F=;?sKaWGlSnE1>2 zonqTVs_$7R0I5Jh;EGi~iM}p4e0w5wE!lfR48rjUH%P$O}#d~N? zd-^x#D&BEUs3@a$`Is9>T^T;>LYeBi$fBphASrNUVM&H?rmX?Y?oeC=OHl?&$rC;; z4X_={2x(Ovdwt5o7Abb@z-*F|4HL3U1AQCOnltO^K0|qoEzpP9Q@8QrgYIvTtt~B_ z@z?sH1XJ6u*rJm;2mv(?xa%#^c*^Z5tPok3+N~*IUH~)O9V*{a;-pKaI=B|ruU;l} zKtA$G^`(-5<=)lrFCa&9lPeDy@`bVKjwdY59b;;vd1j0Q6$L_x<^|}el@buHqaV46 zAwgtScxU^jQT$UUn8}5DsuS=il})q;@ltL%p5|7qmagA@d#NC?Wh^f9oC6>fWlzO` z29r!NDf!oR{_$m_89YfLrw%n`BgKWiBppZMvJwWmD`6}E=`xP$j(Y`JmpUWa0YmC+ z#f4^XGJn&u&`kd%z>Mkr9vk+N%UT9cOAaae8%+6n+yN8aA~h2(_5_%>;eN{)b{%+K zdM+VsV>*zR@sPB0n{rGb6LTFDX9gChr5k$a;0t^QSQ|LZwGna|bVAtco3o_!xG*Sc zIJFp>o5>R)y=M*fz8x4I0&2L)A^692e+J>EpZb^i=5_4Puz+h6$ZK`HOo2>^H{u(# zA)Z}ge;#ku4%T09$FFK&!Ndyv=rBl8VG(J3B)CKw3Btx=7|)5 zokET|8`p!~k)4}0IdjAL;5#@)Q=cxcmnGrslGn%cJSkIttW(zYjN~Jg1ke~UDjy-` zu0Y+6jBcLtLuC+)2uW4`K@;qR(l3_0vuJc6&Ged`aB#bdvSsCG!SMU5a$3&2rB!uS z3tkpbN}&;LayB?c8I2A=^H7cp-$+K%rHH)*c~%&hyU9dn#K36?qitH{B*ir7qeh3$6M4!?Y=HUHwLV z*%c3U=ITFtR(ME>wUho2Y z3VX?3Jh#(zU=niJ9&@(J*vwCyjJ4TLTBMyB$POJEbilK$04vzulTn;_w!*lr#u}8i za`JB_(7+Emma?}>llRGzuujX>{_}X%#i(rI67*faY2T5 z@SqG)n=ymex5AG^zge98NX%)y+fzh6lWR$8)}0R-KNGW|IQTN<1||pQI1WHTP3fsJL$hzi^G-9$ir%|I#x(H zAZh~4$F6ko(CXRdT9yYq)ShcI%ha_Kpah$%@|sW30B4F$~}-ASHh^ak-G@k zb)DwcW)b4b@ao6x_qZ!H>Hzzdv>L!JhF72hXX!3PPI7$|QtfU%56f&|h((bf!Qb;U zWgt>A2lEkEXyD!dZUo^M-Po*JKOuOjq;SPUci&M+%uslFAmfFR1d7dO4Cc<}6K2rT zjzm7z7Qu|nU7vGO#duCouzjFd09szI*D*o4MbP~~&2GrS;hNDaiTC3XC@F<5Nl}_O zxILt~fG(kW&Fu{ugr-W5X@goHOG~3CRPp@zN50I1aq~QZ3j%E5C3(4vXJe~mX6&2w z!!%G~P&(UT0To6%%76qxv+0=H|E@i`-b2?_pZ>=PDLHyqP8uAglJDN-k7A-eV>&D4a>LoQ)*6qjpuVx6Xl-e1h%xc#;lv>i8^b;Pe4YlU*(qmZSxdo>qj7(k+a!z zp4hI|Xl9zr)yT_TC=>i(yBnm_5XQ+}prx>D7V`y7ew0VLLVg{^`=@m!*HHqJMo;(` zO?sROj?u)+P)&svb_J|!VgVfESvb%fsjkri?crwZsf$^|Z5%EDP6O!H|1c7A`1Z=D z$4uI;^rygIda#5q(o--I)E8y*>(@*~HEFL6s9@^2IzdLtnJ~G)SRoINe?P>6t zul_XpqU}^}<-sYm#K+pondeh8A zx!LGDfoUEU@ge4~t+zjec7;}FmKMjg32%qEN_w1`z-u%OW@4?>IOUXP_{>pm&_DwF zQA8m3XVtkSf`kkpY1oywJ{b)XWpb{}ckE`6&f_!)hZ3HY3FLQ`gsrCaI($cp_zv^5 zQAi_5xDBiHaw{$LeX|VuYc@g%=tw6m>hAub7&_BZXnhUucb8+)X0Li#J((k>1PS^T zymSVJnd=3*ND$45_vG1cQ?doIyLW^xT<%Lj2?2Q8DCe>FLM@Bl@WNbqs$e<|8{rUD zE5fNK>^K~JFx0Dc*8FT|JG7%t{{=f&Fv1`SK~t}%yX`r$7KZ6xFKw(ljco!%WR7JH zOx8Q4#O(TGWCBT@l3!4v#V_D2W%Y-BkmF%;(n76FVp6L&vMGZORQ%gYRXdWBX${Yb zTif>tm*~Qzz{%+9kimqa5P}mN?1Z0Db3qN&u)(X)%oT>WF-mf!WZK0sG7!zgT|&ig ziWpm)v`HrsfANQInpg+EP2t1J-oZbv=~2_p8%<%zRSPVW`k)>E#Tx4osG&vn4l`|S z>DCg1tb0?ttYN^^$(xNQKoKP^v}#GM41D*Lgm?O9YMccgTz@Wu2$wkNQmA~hh2<+} zho`b?&1E^~@$J5U?hYH!Em`U%2dphg^h52P4MN{T`@ho*)z(WaoC{kb87Q2|yp@h< zx|RKuk~B8p==9o58&jNqMCkiudmomFlA8hlQkcpy=;JFctDxfiA1_>ZUo)?--z8IR zL0sEOt9Qo1!B*2EUvVk zn&(Ms{Gd=eRgGSV3LK+5D1Go6@>K;xVf(GQ#J^pW2^on{o}foOIlFDkML#I{?Azld zhW<~1kOJQjIq69q>(}u!A8&>6e+8A*nw*miLg!r>r+L2qVA6I`>c1Cym~2EImjz~e zFiLK*4f>QbAV`qNMGBCs&Z);kwaa+0uwo zvxyE>QQTLdXD2XOgo9Mf%YC-799uAkVWCwegFkK17Xz?eGB!q99gf7jy=<^(dFXknzWr9$EM1xEO=A zv?H-Df9!RS-n4Ns2F!Mo&I|7Hb!)~%PTMQMZ)qW+8eB_G%vyu6@T+Y zK~>ZTw$7ds5vVkg;nG^Dp4tzLnNj(ZWHBy#{Gj+LHtW&b^mY^(NJ51Q|EC&Gf78Qn z$2mcLiIxiwuS_>1g|!t5U$)-vxX9l2t_#Y(5!p+h=Ko@JkyqMqX0LOeQ17ukz0m8e zQK!(S&Wg{{UBal`)-GMq7~z#mUL5e50Bqxkm)2kokYaCUR*onNp{7Y z6Vzp$?fM^7U(j3r*r9IL$u0|NKwTmuo$wmJpU9>jO49+D0Tzuhrzrd*ich|$qc!=0 zS+(ezkGfRz(5Ex#f3!`9$ZTodFubIC-mbC#tpvd8B$|2(z)YH3DS;A}ly4D@Cht;_ zQxtTg;3ACUwkP`Iacp$8yl+ByEjJ9!s+RmmrFRHTNY2M#f)*NI{vKeE^PW?|LDPBp z@#Z0XXqn*?m$}eKUbE?p^?j{W0mv66QtYSd0p^S1WH+g%b^y)PUOTOqSPra25CM6P z48=D5iVShrCdshn!nCCC0*a37>a~_{@4+X_n)|7O4sYkD#R@K{jI|Z1 zsq^^tiZY`i2B;|VPOmom@bTNuMYr~xpzSC6BH%XBtc;xW>LGpdovH=%nOWb?SSBLq zJ{T?`sA1UcVlkuQ8zuY&9pA2Q;8(R8-U>jQ>`)DGYZZu+ME7n0ly*;QF?Xj;AR$b zTXtWRgHIQli)rMS6AH=^=W++FY z5!2J7hnFHZVx}2nsSA@#Yt?sjI7VDH_Fd4!Qhc@uzCP_kgk4H#IfzLe_2d|49;l&)+@5A9h!R_E|At zQ7Y{%pQR>ARRPsZLt8u|SOlwIfk!e9u#9nI&zB>6efO@e%&WJiz<%=QE4 bk0@90SL!FA>@oQ37C=o&Td_jkD(wFN%=DFM literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/bikini.png b/assets/images/png/body_parts/female/bikini.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a684234720c2b14e4b2aaf60090847ae50f2db GIT binary patch literal 23434 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/buttocks.png b/assets/images/png/body_parts/female/buttocks.png new file mode 100644 index 0000000000000000000000000000000000000000..b83576f30c20506943228bfa5eb26dd9538705af GIT binary patch literal 22755 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 SjGasb01Z`Lm1?Dz5&s7RgSton literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/cheeks.svg b/assets/images/png/body_parts/female/cheeks.svg new file mode 100644 index 0000000..6305ce6 --- /dev/null +++ b/assets/images/png/body_parts/female/cheeks.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/chest.png b/assets/images/png/body_parts/female/chest.png new file mode 100644 index 0000000000000000000000000000000000000000..727ebe7aab1dace4bdbf334eb6e85ed5fc6b17be GIT binary patch literal 17359 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�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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/ears.svg b/assets/images/png/body_parts/female/ears.svg new file mode 100644 index 0000000..758a69e --- /dev/null +++ b/assets/images/png/body_parts/female/ears.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/eyebrows.svg b/assets/images/png/body_parts/female/eyebrows.svg new file mode 100644 index 0000000..9657daa --- /dev/null +++ b/assets/images/png/body_parts/female/eyebrows.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/full_body_female.png b/assets/images/png/body_parts/female/full_body_female.png new file mode 100644 index 0000000000000000000000000000000000000000..fb6a3756c1e1cf3228fdf6cc856a64451e3fa5b8 GIT binary patch literal 19215 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 YnT@W#Rg-)L`sD&@N?MBV9$AL{AB-e#+W-In literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/full_neck.svg b/assets/images/png/body_parts/female/full_neck.svg new file mode 100644 index 0000000..f73f07f --- /dev/null +++ b/assets/images/png/body_parts/female/full_neck.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/half_neck.svg b/assets/images/png/body_parts/female/half_neck.svg new file mode 100644 index 0000000..78e4cfa --- /dev/null +++ b/assets/images/png/body_parts/female/half_neck.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/hydra_facial.svg b/assets/images/png/body_parts/female/hydra_facial.svg new file mode 100644 index 0000000..6a46821 --- /dev/null +++ b/assets/images/png/body_parts/female/hydra_facial.svg @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/lower_arm.png b/assets/images/png/body_parts/female/lower_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..717b2cde2c58e482bec6ddbef3af08b72a453a36 GIT binary patch literal 21009 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

dJvj_PkJ+-RNeHC-sW}B>D#>q^GVZ4uL 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 Z{|EK>W*xnkLF)hj002ovPDHLkV1gRPo#X%j literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/cheek.svg b/assets/images/png/body_parts/male/cheek.svg new file mode 100644 index 0000000..984a59f --- /dev/null +++ b/assets/images/png/body_parts/male/cheek.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/chest.png b/assets/images/png/body_parts/male/chest.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cec070af8b6ee5b5d60a3c39d4835a2f8bd540 GIT binary patch literal 30748 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 T0zN7$00000NkvXXu0mjfe=qKp literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/chest_line.png b/assets/images/png/body_parts/male/chest_line.png new file mode 100644 index 0000000000000000000000000000000000000000..41e779f3b1478b269bbe1c3a52cad0bf6394ea1f GIT binary patch literal 30492 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/ears.svg b/assets/images/png/body_parts/male/ears.svg new file mode 100644 index 0000000..1c9600c --- /dev/null +++ b/assets/images/png/body_parts/male/ears.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/eyebrows.svg b/assets/images/png/body_parts/male/eyebrows.svg new file mode 100644 index 0000000..ea38523 --- /dev/null +++ b/assets/images/png/body_parts/male/eyebrows.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/full_body_male.png b/assets/images/png/body_parts/male/full_body_male.png new file mode 100644 index 0000000000000000000000000000000000000000..df30472860752258ef1611163cbb4f3b3cc30ea9 GIT binary patch literal 32752 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 Mmm`gpI@ZwwQdHV0DX(F!+-p8WMUOz8(J&Ga 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/full_neck.png b/assets/images/png/body_parts/male/full_neck.png new file mode 100644 index 0000000000000000000000000000000000000000..a75159f6378af8d5b09043bd7db1e54874458583 GIT binary patch literal 29996 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/full_neck.svg b/assets/images/png/body_parts/male/full_neck.svg new file mode 100644 index 0000000..33b755e --- /dev/null +++ b/assets/images/png/body_parts/male/full_neck.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/png/body_parts/male/half_neck.png b/assets/images/png/body_parts/male/half_neck.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee0249c075befd288ebd763cbc4cb554a7bd0b6 GIT binary patch literal 30182 zcmXt<18^o?u=k(Xw(V@Vv7XqrH@0otwryJ*I~yAtdt>Y7z4!a3YHF&cYR;UV=|0o_ z@83iy$cZDs;=%#|00c=15hVZsg!p?WgogY+Lwh%-`+Wd+5|UJb{@%Qyjl%%|Vt}NG zpo+WRr4Lj$zPiU%##&ELSLh@t{L=ut$4a#P6 zMuq~M>>-xmSI|^_XwILL=wKwj)>3Q9-(1-yQ%g2B{>^lMadeqot#v5ROwCNCb|vMJ z74tbwxXrx$SrG_P%`*`X5Gi~zF+w};ttvnBmhC&_g!~!LcwhB-MkE^`8H7^Ka{UGpb zrSplDm6%7O4<&%EY8SO4tO`iE2nXeqh0Ru{%g0*Th+GJl7_yH#2sJcqswVxMZsnxFg-~Hs6#yF^Pq8VB;Vgg@*gL@5@fF6scKt`c4z;rex&1 zNid@toVf`mutS`+Ao7LE)%mZ~K+3%zX=gKRPgWh>91R{jOOK*6O$>Zvr)T6?!2=+< zV|QjM0S9T0hYxxf{u5Sxpjnqk|1SOdm^l1=bY(A_GnVq^XX8yJ|(w&nOzY`XSg4&fF zD&>5&T10)O>wIb?v&PEnePQe18zEAdGn|F=*I$PV&cWK&mc9No=@0>M*Mn_z^}Br# zkKN`)#zyy&NAiFy_GI9ttP+5Z-6GvpL<>lH{0wI2u?KcFygZ=+NTdyR(5RriY9RNs zQCqTdGpWa zigPGStFu-9eu@&I07QvU0Hv z>+7Mk0E{bl5q3ume^N3R3xpvT;7_{wo8p%Hh|e0U^oHQZZI6)2!o8>I%PkX&1&;?c6B||ZP4iMDQ(5nkZA61Fw5rOx-Z;zm*N6T0r7#W%Ax;exxQwfI!Jlrqp~L(DPT^TJXG-F zWi3M)>`%&Nan*U_ap^-yTHupKnOi=UCwJ}g$1nTq-Mr2R1C6!C(gGFF0s>g`BCg}y z(y|fF?$Tb`zz&oKP~SRG1qkcHJc@LXaKrwiBhyl?%=J7D-c7eL`8>Vtf}8%^O%W*@ z>ash%62Bn+^32#lIKjzgoA2;*-iOU`E$n(?kNiM=BRN+#QeFs1BKuguT<=?WgM31> zBFxOnv5Z?;tk2AR=MMRHl%&^^CAaT&%SwPW3xP8}=)jm7Q9@@{$njG~*=KTc@E{OX zx5tabbBmjgZG2t5TCedaTKs--bwNHy3k6585)32czwm=yixMy|^g4#Xu7=-=$$+!8 zwfwj}8N1;KW0R)N6VJc@R}S(dd6H*u`B4bHD_5R$6oRd-$D#e}x<8*v{OD^u;-+itc6o7eU@Tky zD~sM@Pq-K8(h`%$=d#z}2Ei9*=~p5g@a_IHdLk@nwSECNA2owu;z+akp~{BK3mKoe zE;8MHVzPqhO;2#Q+y=N_uDLncd3iR4Zj$e$wor1BUra3a_l#%}HZYiRB%d-J(f;

^uR?{W0&u}-x2BKCke$|JF2fWs6Rq}mG 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/half_neck.svg b/assets/images/png/body_parts/male/half_neck.svg new file mode 100644 index 0000000..26b6bc3 --- /dev/null +++ b/assets/images/png/body_parts/male/half_neck.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/images/png/body_parts/male/hydra_facial.svg b/assets/images/png/body_parts/male/hydra_facial.svg new file mode 100644 index 0000000..1051630 --- /dev/null +++ b/assets/images/png/body_parts/male/hydra_facial.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/lower_arm.png b/assets/images/png/body_parts/male/lower_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..120242ed9eb32a58ccbf3539c5ccbf4eaa57213c GIT binary patch literal 33599 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%0Dr(VRXJU~Q~yCJ*QiNL1^gcmhEeS| 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 OKt@7QyymNM(EkI&Dr|)S literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/shoulders.png b/assets/images/png/body_parts/male/shoulders.png new file mode 100644 index 0000000000000000000000000000000000000000..907f2dd70f4242974aa466fb80715ad7e7f1c42a GIT binary patch literal 32796 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 xv + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/upper_arm.png b/assets/images/png/body_parts/male/upper_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..f80a75dafc1486fa6556d6c7979ddd1b0d36cec6 GIT binary patch literal 32517 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 Eg1qZf@&Et; literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/male/upper_lips.svg b/assets/images/png/body_parts/male/upper_lips.svg new file mode 100644 index 0000000..b7ae6e0 --- /dev/null +++ b/assets/images/png/body_parts/male/upper_lips.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 811a1af..787a718 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -874,5 +874,7 @@ "to": "إلى", "startDate": "تاريخ البدء", "endDate": "تاريخ الانتهاء", - "walkin": "زيارة بدون موعد" + "walkin": "زيارة بدون موعد", + "laserClinic": "عيادة الليزر", + "continueString": "يكمل" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 336c06c..7b8c4b8 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -685,8 +685,8 @@ "body": "Body Mass", "bodyString": "Body", "face": "Face", - "retouch": "روتوش", - "bikini": "بيكيني", + "retouch": "Re-touch", + "bikini": "Bikini", "totalMinutes": "Total Minutes", "feedback": "Feedback", "send": "أرسل", @@ -870,6 +870,8 @@ "clearAllFilters": "Clear all filters", "filters": "Filters", "searchClinic": "Search Clinic", - "walkin": "Walk In" + "walkin": "Walk In", + "continueString": "Continue", + "laserClinic": "Laser Clinic" } \ No newline at end of file diff --git a/lib/core/dependencies.dart b/lib/core/dependencies.dart index 42349ef..7337dfa 100644 --- a/lib/core/dependencies.dart +++ b/lib/core/dependencies.dart @@ -154,7 +154,7 @@ class AppDependencies { ); getIt.registerLazySingleton( - () => BookAppointmentsViewModel(bookAppointmentsRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt(), myAppointmentsViewModel: getIt(), locationUtils: getIt()), + () => BookAppointmentsViewModel(bookAppointmentsRepo: getIt(), errorHandlerService: getIt(), navigationService: getIt(), myAppointmentsViewModel: getIt(), locationUtils: getIt(), dialogService: getIt()), ); getIt.registerLazySingleton( @@ -165,6 +165,12 @@ class AppDependencies { myAppointmentsViewModel: getIt(), ), ); + getIt.registerLazySingleton( + () => AppointmentViaRegionViewmodel( + navigationService: getIt(), + appState: getIt(), + ), + ); getIt.registerLazySingleton( () => AuthenticationViewModel( diff --git a/lib/features/book_appointments/book_appointments_repo.dart b/lib/features/book_appointments/book_appointments_repo.dart index 437d2c8..1783556 100644 --- a/lib/features/book_appointments/book_appointments_repo.dart +++ b/lib/features/book_appointments/book_appointments_repo.dart @@ -16,6 +16,8 @@ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/patient_appointment_history_response_model.dart'; import 'package:hmg_patient_app_new/services/logger_service.dart'; +import 'models/resp_models/laser_body_parts.dart'; + abstract class BookAppointmentsRepo { Future>>> getClinics(); @@ -79,6 +81,9 @@ abstract class BookAppointmentsRepo { Future>>> getDentalChiefComplaintDoctorsList(int projectID, int chiefComplaintID, {Function(dynamic)? onSuccess, Function(String)? onError}); + + Future>>> getLaserClinics(int laserCategoryID, int projectID, int languageID, + {Function(dynamic)? onSuccess, Function(String)? onError}); } class BookAppointmentsRepoImp implements BookAppointmentsRepo { @@ -800,4 +805,47 @@ class BookAppointmentsRepoImp implements BookAppointmentsRepo { return Left(UnknownFailure(e.toString())); } } + + @override + Future>>> getLaserClinics(int laserCategoryID, int projectID, int languageID, {Function(dynamic p1)? onSuccess, Function(String p1)? onError}) async { + Map mapDevice = { + "LaserCategoryID": laserCategoryID, + "ProjectID": projectID, + "LanguageID": languageID, + }; + + try { + GenericApiModel>? apiResponse; + Failure? failure; + await apiClient.post( + LASER_BODY_PARTS, + body: mapDevice, + onFailure: (error, statusCode, {messageStatus, failureType}) { + failure = failureType; + onError!(error); + }, + onSuccess: (response, statusCode, {messageStatus, errorMessage}) { + try { + final list = response['Laser_GetBodyPartsByCategoryList']; + + final doctorsList = list.map((item) => LaserBodyPart.fromJson(item as Map)).toList().cast(); + + apiResponse = GenericApiModel>( + messageStatus: messageStatus, + statusCode: statusCode, + errorMessage: null, + data: doctorsList, + ); + } catch (e) { + failure = DataParsingFailure(e.toString()); + } + }, + ); + if (failure != null) return Left(failure!); + if (apiResponse == null) return Left(ServerFailure("Unknown error")); + return Right(apiResponse!); + } catch (e) { + return Left(UnknownFailure(e.toString())); + } + } } diff --git a/lib/features/book_appointments/book_appointments_view_model.dart b/lib/features/book_appointments/book_appointments_view_model.dart index 26bfe4f..20b64fd 100644 --- a/lib/features/book_appointments/book_appointments_view_model.dart +++ b/lib/features/book_appointments/book_appointments_view_model.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; @@ -11,12 +13,14 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_repo.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/LaserCategoryType.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/free_slot.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/dental_chief_complaints_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctor_profile_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/doctors_list_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_clinic_list_response_model.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/get_patient_dental_plan_response_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/laser_body_parts.dart'; import 'package:hmg_patient_app_new/features/book_appointments/models/timeslots.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/facility_selection.dart'; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart'; @@ -24,6 +28,7 @@ import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/ import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/presentation/home/navigation_screen.dart'; +import 'package:hmg_patient_app_new/services/dialog_service.dart'; import 'package:hmg_patient_app_new/services/error_handler_service.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; import 'package:hmg_patient_app_new/widgets/common_bottom_sheet.dart'; @@ -32,6 +37,7 @@ import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; import 'models/resp_models/get_livecare_clinics_response_model.dart'; class BookAppointmentsViewModel extends ChangeNotifier { + final DialogService dialogService; int selectedTabIndex = 0; bool isClinicsListLoading = false; @@ -108,8 +114,31 @@ class BookAppointmentsViewModel extends ChangeNotifier { String? selectedClinicForFilters; bool applyFilters = false; + + ///variables for laser clinic + List femaleLaserCategory = [ + LaserCategoryType(1, 'bodyString'), + LaserCategoryType(2, 'face'), + LaserCategoryType(10,'bikini'), + LaserCategoryType(11, 'retouch'), + ]; + List maleLaserCategory =[ + LaserCategoryType(1, 'body'), + LaserCategoryType(2, 'face'), + LaserCategoryType(11, 'retouch'), + ]; + List> bodyTypes = []; + + List laserBodyPartsList = []; + List selectedBodyPartList = []; + int selectedBodyTypeIndex = 0; + int selectedCategory = 0; + bool isBodyPartsLoading = false; + int duration = 0; + + BookAppointmentsViewModel( - {required this.bookAppointmentsRepo, required this.errorHandlerService, required this.navigationService, required this.myAppointmentsViewModel, required this.locationUtils}) { + {required this.bookAppointmentsRepo, required this.errorHandlerService, required this.navigationService, required this.myAppointmentsViewModel, required this.locationUtils, required this.dialogService }) { initBookAppointmentViewModel(); } @@ -141,6 +170,7 @@ class BookAppointmentsViewModel extends ChangeNotifier { dentalChiefComplaintsList.clear(); isContinueDentalPlan = false; isChiefComplaintsListLoading = true; + bodyTypes = [maleLaserCategory, femaleLaserCategory]; // getLocation(); notifyListeners(); } @@ -310,7 +340,10 @@ class BookAppointmentsViewModel extends ChangeNotifier { result.fold( (failure) async { + isDoctorsListLoading = false; + onError!("No doctors found for the search criteria".needTranslation); + notifyListeners(); }, (apiResponse) { if (apiResponse.messageStatus == 2) { @@ -342,7 +375,7 @@ class BookAppointmentsViewModel extends ChangeNotifier { result.fold( (failure) async { - onError!("No doctors found for the search criteria".needTranslation); + onError?.call("No doctors found for the search criteria".needTranslation); }, (apiResponse) async { if (apiResponse.messageStatus == 2) { @@ -1017,4 +1050,105 @@ class BookAppointmentsViewModel extends ChangeNotifier { }, ); } + + setBodyType(int bodyType){ + selectedBodyTypeIndex = bodyType; + selectedCategory = 0; + selectedBodyPartList = []; + duration = 0; + notifyListeners(); + } + + FutureOr getLaserClinic() async{ + isBodyPartsLoading = true; + int id = bodyTypes[selectedBodyTypeIndex][selectedCategory].laserCategoryID; + int projectID = currentlySelectedHospitalFromRegionFlow != null ? int.parse(currentlySelectedHospitalFromRegionFlow!) : 0; + int languageID = _appState.isArabic() ? 1 : 0; + final result = await bookAppointmentsRepo.getLaserClinics(id, projectID, languageID); + result.fold( + (failure) { + isBodyPartsLoading = false; + notifyListeners(); + }, + (apiResponse) {isBodyPartsLoading = false; + if (apiResponse.messageStatus == 2) { + // dialogService.showErrorDialog(message: apiResponse.errorMessage!, onOkPressed: () {}); + } else if (apiResponse.messageStatus == 1) { + List response =apiResponse.data!; + if(response.first.category == 2 || response.first.category == 10 ) response.remove(response.first); + laserBodyPartsList = response; + } + notifyListeners(); + + }, + ); + } + + int getDuration() { + var duration = 0; + + var lowerUpperLegsList = selectedBodyPartList.where((element) => element.mappingCode == "47" || element.mappingCode == "48")?.toList() ?? []; + var upperLowerArmsList = selectedBodyPartList.where((element) => element.mappingCode == "40" || element.mappingCode == "41")?.toList() ?? []; + + if (selectedBodyPartList.isNotEmpty) { + duration = selectedBodyPartList.fold(0, (previousValue, element) => previousValue + int.parse(element.timeDuration!)); + } + if (lowerUpperLegsList.length == 2) { + duration -= 30; + } + if (upperLowerArmsList.length == 2) { + duration -= 15; + } + + return duration; + } + + void setSelectedCategory(category) { + selectedCategory = category; + notifyListeners(); + getLaserClinic(); + } + + void setSelectedBodyPart(LaserBodyPart part) { + if(selectedBodyPartList.contains(part)){ + selectedBodyPartList.remove(part); + this.duration = getDuration(); + + notifyListeners(); + } else { + if(this.duration == 90){ + dialogService.showErrorBottomSheet(message: "Duration can not exceed 90 min".needTranslation,); + return; + } + selectedBodyPartList.add(part); + var duration = getDuration(); + if(duration > 90){ + selectedBodyPartList.remove(part); + dialogService.showErrorBottomSheet(message: "Duration Exceeds 90 min".needTranslation,); + return; + } + this.duration = duration; + notifyListeners(); + } + } + + readCurrentLaserCategoryID() { + return bodyTypes[selectedBodyTypeIndex][selectedCategory].laserCategoryID; + } + + String getLaserProcedureNameWRTLanguage(LaserBodyPart part) { + if(_appState.isArabic()){ + return part.bodyPartN??""; + }else { + return part.bodyPart??""; + } + } + + void resetLaserData() { + selectedCategory = 0; + selectedBodyTypeIndex = 0; + selectedBodyPartList = []; + laserBodyPartsList = []; + duration = 0; + } } diff --git a/lib/features/book_appointments/models/LaserCategoryType.dart b/lib/features/book_appointments/models/LaserCategoryType.dart new file mode 100644 index 0000000..df85620 --- /dev/null +++ b/lib/features/book_appointments/models/LaserCategoryType.dart @@ -0,0 +1,6 @@ +class LaserCategoryType { + int laserCategoryID; + String title; + + LaserCategoryType(this.laserCategoryID, this.title); +} diff --git a/lib/features/book_appointments/models/laser_body_parts_data.dart b/lib/features/book_appointments/models/laser_body_parts_data.dart new file mode 100644 index 0000000..2f8b32d --- /dev/null +++ b/lib/features/book_appointments/models/laser_body_parts_data.dart @@ -0,0 +1,135 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class LaserBodyParts { + static final LaserBodyParts _instance = LaserBodyParts._internal(); + + LaserBodyParts._internal(); + + factory LaserBodyParts() => _instance; + + static Widget image(String assetUri) { + return new SvgPicture.asset(assetUri, fit: BoxFit.cover, width: 88, height: 88); + } + + static Widget imagePng(String assetUri) { + return Image.asset(assetUri, fit: BoxFit.cover, width: 88, height: 88); + } + + Map maleBodyMap = { + "1": imagePng("assets/images/png/body_parts/male/full_body_male.png"), + "40": imagePng("assets/images/png/body_parts/male/upper_arm.png"), + "41": imagePng("assets/images/png/body_parts/male/lower_arm.png"), + "42": imagePng("assets/images/png/body_parts/male/chest.png"), + "43": imagePng("assets/images/png/body_parts/male/chest_line.png"), + "44": imagePng("assets/images/png/body_parts/male/shoulders.png"), + "45": imagePng("assets/images/png/body_parts/male/back.png"), + "46": imagePng("assets/images/png/body_parts/male/abdomin.png"), + "47": imagePng("assets/images/png/body_parts/male/upper_legs.png"), + "48": imagePng("assets/images/png/body_parts/male/lower_legs.png"), + "49": imagePng("assets/images/png/body_parts/male/axilla.png") + }; + + Map maleFaceMap = { + "62": image("assets/images/png/body_parts/male/hydra_facial.svg"), + "5": image("assets/images/png/body_parts/male/upper_lips.svg"), + "6": image("assets/images/png/body_parts/male/chin.svg"), + "7": image("assets/images/png/body_parts/male/cheek.svg"), + "8": image("assets/images/png/body_parts/male/side_burn.svg"), + "9": image("assets/images/png/body_parts/male/ears.svg"), + "10": image("assets/images/png/body_parts/male/full_neck.svg"), + "11": image("assets/images/png/body_parts/male/half_neck.svg"), + "12": image("assets/images/png/body_parts/male/eyebrows.svg") + }; + + Map maleBodyRetouchMap = { + "50": imagePng("assets/images/png/body_parts/male/full_body_male.png"), + "51": imagePng("assets/images/png/body_parts/male/upper_arm.png"), + "52": imagePng("assets/images/png/body_parts/male/lower_arm.png"), + "53": imagePng("assets/images/png/body_parts/male/chest.png"), + "54": imagePng("assets/images/png/body_parts/male/shoulders.png"), + "55": imagePng("assets/images/png/body_parts/male/back.png"), + "56": imagePng("assets/images/png/body_parts/male/abdomin.png"), + "57": imagePng("assets/images/png/body_parts/male/full_legs.png"), + "58": imagePng("assets/images/png/body_parts/male/upper_legs.png"), + "59": imagePng("assets/images/png/body_parts/male/lower_legs.png"), + "60": imagePng("assets/images/png/body_parts/male/bikini.png"), + "61": imagePng("assets/images/png/body_parts/male/bikini_line.png") + }; + + Map femaleBodyMap = { + "1": imagePng("assets/images/png/body_parts/female/full_body_female.png"), + "40": imagePng("assets/images/png/body_parts/female/upper_arm.png"), + "41": imagePng("assets/images/png/body_parts/female/lower_arm.png"), + "42": imagePng("assets/images/png/body_parts/female/chest.png"), + "43": imagePng("assets/images/png/body_parts/female/chest_line.png"), + "44": imagePng("assets/images/png/body_parts/female/shoulders.png"), + "45": imagePng("assets/images/png/body_parts/female/back.png"), + "46": imagePng("assets/images/png/body_parts/female/abdomin.png"), + "47": imagePng("assets/images/png/body_parts/female/upper_legs.png"), + "48": imagePng("assets/images/png/body_parts/female/lower_leg.png"), + "49": imagePng("assets/images/png/body_parts/female/axilla.png") + }; + + Map femaleFaceMap = { + "62": image("assets/images/png/body_parts/female/hydra_facial.svg"), + "5": image("assets/images/png/body_parts/female/upper_lips.svg"), + "6": image("assets/images/png/body_parts/female/chin.svg"), + "7": image("assets/images/png/body_parts/female/cheeks.svg"), + "8": image("assets/images/png/body_parts/female/side_burn.svg"), + "9": image("assets/images/png/body_parts/female/ears.svg"), + "10": image("assets/images/png/body_parts/female/full_neck.svg"), + "11": image("assets/images/png/body_parts/female/half_neck.svg"), + "12": image("assets/images/png/body_parts/female/eyebrows.svg") + }; + + Map femaleBodyBikiniMap = { + "34": imagePng("assets/images/png/body_parts/female/bikini.png"), + "36": imagePng("assets/images/png/body_parts/female/bikini_line.png"), + "38": imagePng("assets/images/png/body_parts/female/buttocks.png"), + "39": imagePng("assets/images/png/body_parts/female/anal.png") + }; + + Map femaleBodyRetouchMap = { + "50": imagePng("assets/images/png/body_parts/female/full_body_female.png"), + "51": imagePng("assets/images/png/body_parts/female/upper_arm.png"), + "52": imagePng("assets/images/png/body_parts/female/lower_arm.png"), + "53": imagePng("assets/images/png/body_parts/female/chest.png"), + "54": imagePng("assets/images/png/body_parts/female/shoulders.png"), + "55": imagePng("assets/images/png/body_parts/female/back.png"), + "56": imagePng("assets/images/png/body_parts/female/abdomin.png"), + "57": imagePng("assets/images/png/body_parts/female/full_legs.png"), + "58": imagePng("assets/images/png/body_parts/female/upper_legs.png"), + "59": imagePng("assets/images/png/body_parts/female/lower_leg.png"), + "60": imagePng("assets/images/png/body_parts/female/bikini.png"), + "61": imagePng("assets/images/png/body_parts/female/bikini_line.png") + }; + + Widget? getCategoryImage(bool isMale, int category, String mappingCode) { + if (isMale) { + if (category == 1) { + return maleBodyMap![mappingCode]!; + } + if (category == 2) { + return maleFaceMap![mappingCode]!; + } + if (category == 11) { + return maleBodyRetouchMap![mappingCode]!; + } + } else { + if (category == 1) { + return femaleBodyMap![mappingCode]!; + } + if (category == 2) { + return femaleFaceMap![mappingCode]!; + } + if (category == 10) { + return femaleBodyBikiniMap![mappingCode]!; + } + if (category == 11) { + return femaleBodyRetouchMap![mappingCode]!; + } + } + return null; + } +} \ No newline at end of file diff --git a/lib/features/book_appointments/models/resp_models/laser_body_parts.dart b/lib/features/book_appointments/models/resp_models/laser_body_parts.dart new file mode 100644 index 0000000..d7d3fbd --- /dev/null +++ b/lib/features/book_appointments/models/resp_models/laser_body_parts.dart @@ -0,0 +1,64 @@ +class LaserBodyPart { + int? id; + int? category; + String? bodyPart; + bool? fullBoadyPart; + bool? isRetouch; + String? timeDuration; + String? bodyPartN; + bool? isActive; + String? mappingCode; + int? procedureID; + int? orderNum; + String? categoryName; + String? categoryNameN; + + LaserBodyPart( + {this.id, + this.category, + this.bodyPart, + this.fullBoadyPart, + this.isRetouch, + this.timeDuration, + this.bodyPartN, + this.isActive, + this.mappingCode, + this.procedureID, + this.orderNum, + this.categoryName, + this.categoryNameN}); + + LaserBodyPart.fromJson(Map json) { + id = json['Id']; + category = json['Category']; + bodyPart = json['BodyPart']; + fullBoadyPart = json['FullBoadyPart']; + isRetouch = json['IsRetouch']; + timeDuration = json['TimeDuration']; + bodyPartN = json['BodyPartN']; + isActive = json['IsActive']; + mappingCode = json['MappingCode']; + procedureID = json['ProcedureID']; + orderNum = json['OrderNum']; + categoryName = json['CategoryName']; + categoryNameN = json['CategoryNameN']; + } + + Map toJson() { + final Map data = new Map(); + data['Id'] = this.id; + data['Category'] = this.category; + data['BodyPart'] = this.bodyPart; + data['FullBoadyPart'] = this.fullBoadyPart; + data['IsRetouch'] = this.isRetouch; + data['TimeDuration'] = this.timeDuration; + data['BodyPartN'] = this.bodyPartN; + data['IsActive'] = this.isActive; + data['MappingCode'] = this.mappingCode; + data['ProcedureID'] = this.procedureID; + data['OrderNum'] = this.orderNum; + data['CategoryName'] = this.categoryName; + data['CategoryNameN'] = this.categoryNameN; + return data; + } +} diff --git a/lib/features/my_appointments/appointment_via_region_viewmodel.dart b/lib/features/my_appointments/appointment_via_region_viewmodel.dart index 9ffb544..3e3c3cd 100644 --- a/lib/features/my_appointments/appointment_via_region_viewmodel.dart +++ b/lib/features/my_appointments/appointment_via_region_viewmodel.dart @@ -1,6 +1,8 @@ import 'package:flutter/foundation.dart' show ChangeNotifier; import 'package:hmg_patient_app_new/core/app_state.dart' show AppState; import 'package:hmg_patient_app_new/features/my_appointments/models/resp_models/doctor_list_api_response.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/dental_chief_complaints_page.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/laser/laser_appointment.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_clinic_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart'; import 'package:hmg_patient_app_new/services/navigation_service.dart'; @@ -96,9 +98,30 @@ class AppointmentViaRegionViewmodel extends ChangeNotifier { ),); } - void handleLastStepForClinicForDentalAndLaser() { - //todo handle the routing here + void handleLastStepForClinicForDentalAndLaser(int clinicId) { navigationService.pop(); + + if (clinicId == 17) { + if (!appState.isAuthenticated) { + navigationService.push( + CustomPageRoute( + page: DentalChiefComplaintsPage(), + ), + ); + } + } + + if (clinicId == 253) { + { + + + navigationService.push( + CustomPageRoute( + page: LaserAppointment(), + ), + ); + } + } } void handleLastStepForDentalAndLaser() { diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index d14a021..798f94d 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -189,6 +189,7 @@ abstract class LocaleKeys { static const firstName = 'firstName'; static const middleName = 'middleName'; static const lastName = 'lastName'; + static const female = 'female'; static const preferredLanguage = 'preferredLanguage'; static const locationsRegister = 'locationsRegister'; static const ksa = 'ksa'; @@ -863,7 +864,6 @@ abstract class LocaleKeys { static const clearAllFilters = 'clearAllFilters'; static const filters = 'filters'; static const searchClinic = 'searchClinic'; - static const walkin = 'walkin'; static const normal = 'normal'; static const attention = 'attention'; static const monitor = 'monitor'; @@ -873,5 +873,8 @@ abstract class LocaleKeys { static const to = 'to'; static const startDate = 'startDate'; static const endDate = 'endDate'; + static const walkin = 'walkin'; + static const laserClinic = 'laserClinic'; + static const continueString = 'continueString'; } diff --git a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart index 7a4d7e9..29a7b96 100644 --- a/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart +++ b/lib/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart @@ -104,7 +104,7 @@ class HospitalBottomSheetBody extends StatelessWidget { regionalViewModel.handleLastStepForClinic(); } else if (regionalViewModel.regionBottomSheetType == RegionBottomSheetType.REGION_FOR_DENTAL_AND_LASER) { regionalViewModel.setBottomSheetState(AppointmentViaRegionState.DOCTOR_SELECTION); - regionalViewModel.handleLastStepForClinicForDentalAndLaser(); + regionalViewModel.handleLastStepForClinicForDentalAndLaser(appointmentsViewModel.selectedClinic.clinicID??-1); // regionalViewModel.handleLastStepForClinic(); } });}, diff --git a/lib/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart b/lib/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart index 174fe10..6bc8007 100644 --- a/lib/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart +++ b/lib/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart @@ -10,6 +10,8 @@ import 'package:hmg_patient_app_new/features/my_appointments/my_appointments_vie import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_item.dart' show RegionListItem; import 'package:provider/provider.dart'; +import '../../../../widgets/common_bottom_sheet.dart'; + class RegionBottomSheetBody extends StatefulWidget { const RegionBottomSheetBody({super.key}); @@ -27,7 +29,16 @@ class _RegionBottomSheetBodyState extends State { if (regionalViewModel.regionBottomSheetType == RegionBottomSheetType.FOR_REGION || regionalViewModel.regionBottomSheetType == RegionBottomSheetType.REGION_FOR_DENTAL_AND_LASER ) { myAppointmentsViewModel.getRegionMappedProjectList(); } else if (regionalViewModel.regionBottomSheetType == RegionBottomSheetType.FOR_CLINIIC) { - myAppointmentsViewModel.getMappedDoctors(); + myAppointmentsViewModel.getMappedDoctors(onError: (err) { + Navigator.pop(context); + showCommonBottomSheetWithoutHeight( + context, + child: Utils.getErrorWidget(loadingText: err), + callBackFunc: () {}, + isFullScreen: false, + isCloseButtonVisible: true, + ); + }); } }); super.initState(); diff --git a/lib/presentation/book_appointment/laser/laser_appointment.dart b/lib/presentation/book_appointment/laser/laser_appointment.dart new file mode 100644 index 0000000..bad0591 --- /dev/null +++ b/lib/presentation/book_appointment/laser/laser_appointment.dart @@ -0,0 +1,129 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/laser_body_parts.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/laser/widgets/body_part_listing.dart' show BodyPartsListing; +import 'package:hmg_patient_app_new/presentation/book_appointment/laser/widgets/body_type_listing.dart' + show BodyTypeListing; +import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart' show AppColors; +import 'package:hmg_patient_app_new/widgets/appbar/collapsing_list_view.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; +import 'package:hmg_patient_app_new/widgets/custom_tab_bar.dart'; +import 'package:hmg_patient_app_new/widgets/routes/custom_page_route.dart'; +import 'package:provider/provider.dart'; + +class LaserAppointment extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + bottomNavigationBar: + DecoratedBox( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 20.h, + hasShadow: true, + ), + child: Selector(selector: (_, vm)=>vm.duration,builder: (_, duration, __)=> Row( + children: [ + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + LocaleKeys.totalMinutes.tr(), + style: TextStyle( + fontSize: 12.fSize, + fontWeight: FontWeight.w600, + color: AppColors.textColor, + letterSpacing: -0.48, + ), + ), + Text( + "$duration / 90".tr(), + style: TextStyle( + fontSize: 16.fSize, + fontWeight: FontWeight.bold, + color: AppColors.textColor, + letterSpacing: -0.64, + ), + ), + ], + ), + ), + Expanded( + child: CustomButton( + isDisabled: duration==0, + text: LocaleKeys.continueString.tr(), onPressed: () { + Navigator.of(context).push( + CustomPageRoute( + page: SelectDoctorPage(), + ), + ); + }, + ), + ), + ], + )).paddingSymmetrical(24.h, 12.h), + ), + body: CollapsingListView( + title: LocaleKeys.laserClinic.tr(), + child: SingleChildScrollView( + child: Column( + children: [ + CustomTabBar( + activeTextColor: Color(0xffED1C2B), + activeBackgroundColor: Color(0xffED1C2B).withValues(alpha: .1), + tabs: [ + CustomTabBarModel(null,LocaleKeys.malE.tr()), + CustomTabBarModel(null,LocaleKeys.female.tr()), + ], + onTabChange: (index) { + var viewmodel = context.read(); + viewmodel.setBodyType(index); + viewmodel.setSelectedCategory(0); + viewmodel.getLaserClinic(); + }, + ), + Selector( + selector: (_, vm) => vm.selectedBodyTypeIndex, + builder: (_, bodyType, __) { + return BodyTypeListing( + availableBodyArea: context + .read() + .bodyTypes[bodyType], + selectedBodyAreaIndex: context + .read() + .selectedCategory, + onCategoryChanged: (category) { + context + .read() + .setSelectedCategory(category); + }); + }, + ), + Selector>(selector: (_, vm) => vm.laserBodyPartsList, builder:(_, parts,__){ + return BodyPartsListing( + parts: parts, + onPartSelected: (part){ + context.read().setSelectedBodyPart(part); + }, + selectedPart: context.watch().selectedBodyPartList, + isLoading: context.watch().isBodyPartsLoading, + isMale: context.watch().selectedBodyTypeIndex == 0, + laserCategoryID: context.watch().readCurrentLaserCategoryID(), + ); + }), + ], + ).paddingSymmetrical(24.h, 12.h), + ), + ), + ); + } +} diff --git a/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart b/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart new file mode 100644 index 0000000..564c013 --- /dev/null +++ b/lib/presentation/book_appointment/laser/widgets/body_part_listing.dart @@ -0,0 +1,129 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/book_appointments_view_model.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/laser_body_parts_data.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/resp_models/laser_body_parts.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:provider/provider.dart'; + +class BodyPartsListing extends StatelessWidget { + final List parts; + final Function(LaserBodyPart) onPartSelected; + final List selectedPart; + final int laserCategoryID; + final bool isMale; + final bool isLoading; + + const BodyPartsListing( + {super.key, + required this.parts, + required this.onPartSelected, + required this.selectedPart, + required this.laserCategoryID, + required this.isMale, required this.isLoading}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + Visibility( + visible: isLoading, + child: GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + childAspectRatio: 85 / 107, + crossAxisSpacing: 4.h, + mainAxisSpacing: 21.h), + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: 20, + // padding: fullBody != null ? EdgeInsets.only(top: 16) : EdgeInsets.zero, + padding: EdgeInsets.zero, + itemBuilder: (BuildContext context, int index) { + return SizedBox( height: 80, width: 80,).toShimmer2(isShow: isLoading); + })), + GridView.builder( + gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3, + childAspectRatio: 85 / 107, + crossAxisSpacing: 4.h, + mainAxisSpacing: 21.h), + physics: NeverScrollableScrollPhysics(), + shrinkWrap: true, + itemCount: parts.length, + // padding: fullBody != null ? EdgeInsets.only(top: 16) : EdgeInsets.zero, + padding: EdgeInsets.zero, + itemBuilder: (BuildContext context, int index) { + bool _isSelected = + selectedPart.any((file) => file.id == parts[index].id); + return InkWell( + onTap: () { + onPartSelected(parts[index]); + }, + child: AnimatedOpacity( + opacity: 1.0, + duration: Duration(milliseconds: 200), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + AspectRatio( + aspectRatio: 97 / 97, + child: FittedBox( + fit: BoxFit.fitWidth, + child: Stack( + alignment: Alignment.topRight, + children: [ + Container( + margin: EdgeInsets.only(top: 5.h, right: 5.h), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15.0), + border: Border.all( + color: _isSelected + ? AppColors.primaryRedColor + : AppColors.borderGrayColor, + width: 2.h), + ), + child: LaserBodyParts().getCategoryImage(isMale, + laserCategoryID, parts[index].mappingCode!), + ), + if (_isSelected) + Container( + width: 18.h, + height: 18.h, + child: Icon(Icons.done, + color: Colors.white, size: 12.h), + decoration: BoxDecoration( + color: AppColors.primaryRedColor, + borderRadius: BorderRadius.circular(30.h), + ), + ), + ], + ), + ), + ), + SizedBox(height: 6.h), + Expanded( + child: Text( + context + .read() + .getLaserProcedureNameWRTLanguage(parts[index]), + style: TextStyle( + fontSize: 12.fSize, + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.48, + ), + maxLines: 1, + ), + ), + ], + ), + ), + ); + }, + ), + ], + ); + } +} diff --git a/lib/presentation/book_appointment/laser/widgets/body_type_listing.dart b/lib/presentation/book_appointment/laser/widgets/body_type_listing.dart new file mode 100644 index 0000000..d8fa736 --- /dev/null +++ b/lib/presentation/book_appointment/laser/widgets/body_type_listing.dart @@ -0,0 +1,66 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/book_appointments/models/LaserCategoryType.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:hmg_patient_app_new/widgets/chip/app_custom_chip_widget.dart'; +import 'package:smooth_corner/smooth_corner.dart' show SmoothRectangleBorder; + +class BodyTypeListing extends StatelessWidget { + final List availableBodyArea; + final Function(int) onCategoryChanged; + final int selectedBodyAreaIndex; + + const BodyTypeListing( + {super.key, + required this.availableBodyArea, + required this.onCategoryChanged, + required this.selectedBodyAreaIndex}); + + @override + Widget build(BuildContext context) { + return SizedBox( + height: 56.h, + child: Row( + children: [ + Expanded( + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: availableBodyArea.length, + separatorBuilder: (_, index) => SizedBox( + width: 8.h, + ), + itemBuilder: (_, index) => AppCustomChipWidget( + backgroundColor: index == selectedBodyAreaIndex + ? AppColors.chipSecondaryLightRedColor + : AppColors.whiteColor, + textColor: index == selectedBodyAreaIndex + ? AppColors.chipPrimaryRedBorderColor + : AppColors.blackColor, + labelText: availableBodyArea[index].title.tr(), + iconHasColor: false, + iconColor: index == selectedBodyAreaIndex + ? AppColors.chipPrimaryRedBorderColor + : AppColors.blackColor, + iconSize: 16, + labelPadding: + EdgeInsetsDirectional.only(start: 8.h, end: 0.h), + padding: + EdgeInsets.symmetric(vertical: 16.h, horizontal: 12.h), + deleteIconSize: Size(18.h, 18.h), + shape: SmoothRectangleBorder( + borderRadius: BorderRadius.circular(10), + smoothness: 10, + side: BorderSide( + color: index == selectedBodyAreaIndex + ? AppColors.chipPrimaryRedBorderColor + : AppColors.borderGrayColor, + width: 1), + )).onPress(() => onCategoryChanged(index)))) + ], + ), + ); + } +} diff --git a/lib/presentation/book_appointment/select_clinic_page.dart b/lib/presentation/book_appointment/select_clinic_page.dart index ada4809..f5e534e 100644 --- a/lib/presentation/book_appointment/select_clinic_page.dart +++ b/lib/presentation/book_appointment/select_clinic_page.dart @@ -19,6 +19,7 @@ import 'package:hmg_patient_app_new/presentation/appointments/widgets/faculity_s import 'package:hmg_patient_app_new/presentation/appointments/widgets/hospital_bottom_sheet/hospital_bottom_sheet_body.dart'; import 'package:hmg_patient_app_new/presentation/appointments/widgets/region_bottomsheet/region_list_widget.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/dental_chief_complaints_page.dart'; +import 'package:hmg_patient_app_new/presentation/book_appointment/laser/laser_appointment.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_doctor_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/select_livecare_clinic_page.dart'; import 'package:hmg_patient_app_new/presentation/book_appointment/widgets/clinic_card.dart'; @@ -223,26 +224,51 @@ class _SelectClinicPageState extends State { void handleDoctorScreen(GetClinicsListResponseModel clinic) async { if (widget.isFromRegionFlow) { //Dental Clinic Flow - if (clinic.clinicID == 17 && appState.isAuthenticated) { - initDentalAppointmentBookingFlow(int.parse(bookAppointmentsViewModel.currentlySelectedHospitalFromRegionFlow ?? "0")); + if (clinic.clinicID == 17) { + if (appState.isAuthenticated) { + initDentalAppointmentBookingFlow(int.parse(bookAppointmentsViewModel + .currentlySelectedHospitalFromRegionFlow ?? + "0")); + return; + } else { + bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); + Navigator.of(context).push( + CustomPageRoute( + page: DentalChiefComplaintsPage(), + ), + ); + return; + } + } + else if (clinic.clinicID == 253) { + bookAppointmentsViewModel.resetLaserData(); + bookAppointmentsViewModel.getLaserClinic(); + Navigator.push( + context, + CustomPageRoute( + page: LaserAppointment(), + ), + ); + return; } else { - bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); - Navigator.of(context).push( + Navigator.push( + context, CustomPageRoute( - page: DentalChiefComplaintsPage(), + page: SelectDoctorPage(), ), ); } } else { var bottomSheetType = RegionBottomSheetType.FOR_CLINIIC; - if (clinic.clinicID == 17 || clinic.clinicID == 235) { + if (clinic.clinicID == 17 || clinic.clinicID == 253) { bottomSheetType = RegionBottomSheetType.REGION_FOR_DENTAL_AND_LASER; } openRegionListBottomSheet(context, bottomSheetType); } } - void openRegionListBottomSheet(BuildContext context, RegionBottomSheetType type) { + void openRegionListBottomSheet( + BuildContext context, RegionBottomSheetType type) { bookAppointmentsViewModel.setProjectID(null); regionalViewModel.flush(); @@ -252,16 +278,6 @@ class _SelectClinicPageState extends State { child: Consumer(builder: (_, data, __) { return getRegionalSelectionWidget(data); }), callBackFunc: () { - if (type == RegionBottomSheetType.REGION_FOR_DENTAL_AND_LASER && appState.isAuthenticated) { - initDentalAppointmentBookingFlow(regionalViewModel.selectedHospital?.hospitalList.first.iD); - } else { - bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); - Navigator.of(context).push( - CustomPageRoute( - page: DentalChiefComplaintsPage(), - ), - ); - } }); } @@ -286,6 +302,18 @@ class _SelectClinicPageState extends State { } else { id = regionalViewModel.selectedHospital?.patientDoctorAppointmentList?.first.projectID?.toString() ?? ""; } + if (bookAppointmentsViewModel.selectedClinic.clinicID == 17) { + if (!appState.isAuthenticated) { + bookAppointmentsViewModel.setIsChiefComplaintsListLoading(true); + } + } + + if (bookAppointmentsViewModel.selectedClinic.clinicID == 253) { + { + bookAppointmentsViewModel.resetLaserData(); + bookAppointmentsViewModel.getLaserClinic(); + } + } bookAppointmentsViewModel.setProjectID(id); return SizedBox.shrink(); } diff --git a/lib/services/dialog_service.dart b/lib/services/dialog_service.dart index 7003a31..cc55ca6 100644 --- a/lib/services/dialog_service.dart +++ b/lib/services/dialog_service.dart @@ -60,6 +60,7 @@ class DialogServiceImp implements DialogService { if (onOkPressed != null) { onOkPressed(); } + context.pop(); }, onCancelPressed: () { if (onCancelPressed != null) { diff --git a/lib/widgets/buttons/custom_button.dart b/lib/widgets/buttons/custom_button.dart index 05ec83f..73885b0 100644 --- a/lib/widgets/buttons/custom_button.dart +++ b/lib/widgets/buttons/custom_button.dart @@ -57,7 +57,7 @@ class CustomButton extends StatelessWidget { width: width, padding: padding, decoration: RoundedRectangleBorder().toSmoothCornerDecoration( - color: isDisabled ? Colors.transparent : backgroundColor, + color: isDisabled ? backgroundColor.withOpacity(.5) : backgroundColor, borderRadius: borderRadius, customBorder: BorderRadius.circular(borderRadius), side: borderSide ?? BorderSide(width: borderWidth.h, color: isDisabled ? borderColor.withValues(alpha: 0.5) : borderColor)), diff --git a/pubspec.yaml b/pubspec.yaml index aad6de7..8265141 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -101,6 +101,8 @@ flutter: - assets/fonts/ - assets/langs/ - assets/images/ + - assets/images/png/body_parts/male/ + - assets/images/png/body_parts/female/ - assets/images/svg/ - assets/images/png/ - assets/animations/

QNmkhPLT9`gBAFOM^8;2FPU=)9p> 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 a)&B>1dRVow0f1Nl0000 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/female/upper_arm.png b/assets/images/png/body_parts/female/upper_arm.png new file mode 100644 index 0000000000000000000000000000000000000000..1edb873c60da606ca7d40ed7f7cecbedf937d9f8 GIT binary patch literal 21025 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 literal 0 HcmV?d00001 diff --git a/assets/images/png/body_parts/female/upper_lips.svg b/assets/images/png/body_parts/female/upper_lips.svg new file mode 100644 index 0000000..7204337 --- /dev/null +++ b/assets/images/png/body_parts/female/upper_lips.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/abdomin.png b/assets/images/png/body_parts/male/abdomin.png new file mode 100644 index 0000000000000000000000000000000000000000..1b180b4274de69635e254c816d46bb5e1553ad83 GIT binary patch literal 30646 zcmXt9Wl$YWv)+SCaCZ&v?i@6@JHa&v2_D=b5S-u;9D)URcXxLP?ruRZZ`J*_YHR=O z_Vo1hOm{#1Y`BWjCln+?Bme+VWMw4P002b(-;DqV004GSx&QkE##vle1L6JhMlcTp z0CGT9QcT0$@T3hsgZh&XtKph(4ZmS@OU>V{Ob%6;UkHBGwvlWx@60d$~*VQ(zO?O%A2AUO?)4> z)bsN4l9Bj6^3+bZU6&-+bXd#F2SG!BQpW9SWl%@>0?PnkPj}-wH`uMUtn+a5++{mP zS2HR1nO-8tGfmLRwc`23XbzC|i`wAacEpg0`Yum6*SVhiGOky!6dK7O+D+BEq!*SD z{hbJP(KGmZ(o)`jc>Md5QhVP-N}^YU*Sma;)hDdslQKZYoDKNh=g#Ddv~mUR+bAtA zMpc}d|JzY8Q(Skkp-AbY4GfMjB;E<*01T%u*IZ8|f^N0~-%LzrXT~trXKNvI=VWTA@GO|5N-j5O2hRxpaQUG&N#Q=zXLU!5u$e9N?-W^y88QtiPPo%CPt+-?A9?u*1CR@j9v+t2KEpm|?HqG- zG$YYx;wSWfOz&g;i`RzZ(hWcY{!E&wg0gX%FQx7l-$hrWghK>yfFFJ7NZy^MfH znIP6l>-#V#o=FN{5x~gToDEvq3+OV5@VNBlTmC{&AM!?3P43HS+u%~5x`zj!&?9&fHl<52?+Vp1fjzv zb3^EE@4FPfrl+P-A8Ihf%gV<~LLiXasuUP41NEnqrkSBq%2cpLY~X(uK&rn9A>o^< zJI0k&YggnxJsk?5Lc6Gub-5)5R2uE<-O`v?Sb_yqYsKbf=P`7(Vw-~$lob!QH5>iK z4eoLeTcN;GH8@jBFx1&?mH%Q&(mW;SXBTLH(nb@24@7_*!DPUHZ_g5nSB3G1IOLef zk3fB=V~WeOCbxIJpyZ3eQTOG$B~Lx*X06{BXm%LS{WBbx&J{h%*UbE(H$6&yx_~;D zSf$RzS;Z}d2&{B7#H!zlBqpa@3Hz*}ULsEAt*6c|>7OclillwG9NJlJmn z$ebhZ%|V;8ic`#VSOPPyTrVZ-BQo-JW@?++8iF(D3c>BTuSOq zXU?4jFSsyeunu!A;Y2_Bw)4vief6U0&*ksP_&d=i*V>Mk6Qnc6iO^dLf78lnYTCVf z$0qT=U+-S>Ty7k`J^?++RP`_=fstd1&W9;|J^flzYq7+G6Fj$Q^S98N&V4f zaB=r6iH_6nsDBQ`yG=9{*sb_X-l3J2+SqJq&H*f`RKalOxUwjT+&6wf9e(h>z$W{7 zOX!7yz9^jll5-oKx9q(u@oW^WNdS%EzIJtw$IbWJ44_2 zgc;+Pl_$RVHPmwXX@HvDU7OnEScuu2*q0UP)8!>c4Haw&82)plr;Q%IrcL81e*h8rpstXZhC+F6d8giRa`P)45fLK7Q0%QmXV*5?I_zyVsi&{r=zr1oWK;oVPp{N~Ek9sRiY-19 zJ&d!_Ia)#>#l;1OYZA}{9oU0lnqS#B(2#k%gW<3Cx@~2!gtZtM4EZ-Er{K#QeNgt+ zQpBKTprf!_nF;ZtA1P-b`f{MTlt-aJ;VFs)lK3I5;#^niA$_2SvFmMA=coK5IP2Hp zUYbAU3A^DZ8rYWENC1xI8nOVxvR~&`hRogldi0sQL(0bYxN$yun4sdJ@PfU)Bs6OH zQE03e1yW%n^0ih1gFBQcMRZ0DMK$?|nJV|WOx&0jDit`~Kou=3oCEtA{6v=c%SAXcR~)Und8^ zj{$Gv9VrF~1z3^DP>8#oGFQDM?eODnl_u(2^n)K;aNmABiypi{@jk~WWgYp!io)eV zi<#Xp6$RstH7Cn&3%O&WDhg6QtKUoCSI`LCOYWpfqLW^?}WmZli9+1w))-X{2 z)+kWe-WwzK*nC`GDvz2)0y|d{rfy3nw&NwpYYO2~z0ct`#X;fyh9rx<+@L60l;_SQY`P zz@o-o8_?rGO?wO#HEnY|sl<(`tXtn>5p z-zlH87w%~ZU&KOgSmO8zwi72sLZ;Ex`ou+X$emg!q~_b-<3T-z;qRYudZuV>;RAnW z%?jWOW*1q-ke1;xOa3mGH17vJx@oyYhf7W<{^T@61D(5YuS2UvWZs8N>r|gtvZV4G zjM`Y)4qR&vm<~5J7w*0BuYS8>RC>|$Wi9{Dc^pr_A1@tr=F#2zCpZcEaklQT3L!~ZkIch|lerVxFhU+4O=o6Z6WdO?`2r}T6 zA9nf3F6Ma>GHVQ(FNkGTwDvhJ4(dsB*T=)w zgGhy_rWDZpdvj*FxqLib4kV)`Gs%$W%2WRhu`-W1cEuF{Ka3Lla|4 zYd?JE7kJ)Q4i3V3t6poUEwWOwvOI)q{u#F_o2eu3dH4{_h_sIO9Uz+dWV3rhoS2kh zYmUfdrg3c`5Yh;3O<^G+ht)*(^^pw5`>=}ltfF^;p*l%m)A|OYqI=h!?R8B}QmR`7 z(+TzoRQoa&m7{Z$6B&=PuB~a{rIu9StTOIFWnTY{;7R;K%u_2Z^Gn@NZw?^6ttbf) z^};o$Pk@at-+PkU3|M6^$}agG5vC+sK_Vx8S&~L;dU;e4dvn8Sn9rdMt!=MY5A~i# zT;vP}L@E3&nEA<$;nHf5@R~5}lm+9FX?y}3Ptq)_Sg_FP_mgYZ^EX6q=!&N__W2)n zaKD{yysDDCHNn|yFg@VmBOep3Vr36zH_LS;&1LGlbRlmD!LQv~ws% z?i3%!_DG=4$}~s)vu*+ODG#md4HXWS$FQD{mfzyk)tV1}TO_bC?FYz_YD`B40{ zCfSOm_q}>@YC3Z3{P|WlzX@Ai!Exktpps@~RJ$U^+_Z**pTkbXxjU9m0Yl1EWxL~1 z@996<`~^Nt0KV@7GW4iDt~MInSg33#axg-=(?$Z@wb+B5<*^Ul7{f6$ zvFtp);oG@W+Gw2FF#yz+Jr{ivhQD6C)%i4xLX)lhiaUfXW4=Bf7pF!jiuw&IwzJkd}v5qh6?U;t7zOp)rNFDp*$SB`8*dzY> znjxM=N3Ywaww~LL+sT-}^oR4{e60@{Vd_Z~#+ab}p!{ z#(n}Hk#W<^%|Sr$o4vBl4xjvQ2Z7HxhXbA=Ndf5Y1Mxm>3w(dRG`$#t$QM=D2lYT? zPgL!W@&kF?+_zp*hQU8>%sS+xt9?F7rJBEC)Kt`7V?V642pam`Dej6cBTW$E*IXIhepwEEY%@~ zThFd7|98kVX{oUw?qQK95E@>BeC?dy-gFof`V`|M*1D0nG(G6?=eJ!^jWHU-Yeplv zo2?Wyx^!tbln{d&r*K#wOR@+U<>~TybyfbtgCpM<={0$rD45{t;=WHFPiY}xl)nTuOI;WH(F(R7+X!eTJl9+o`rzS|nZ^8b4(DcVwRNN8~Oj%VmIJSDAJF6qJc*`PGbVlpD#J+el5LBq%V%pXrQ;cGwSy}G7i@nF=Nii^ zD$d2L#(0bVQ44t8Vc6Y)bs&Pijrlq~eCe!n2L?j{>($J(ZC5~1=|14zZjZcj4XawN zoa|-&vW#K}twPfj)W&q_K6en}Or;;_xfD@FmZ0K~=1Hlb0yI2JI7sL8{wxpu*d-gU zzis*%OVn9U6-cn)gW2YcgL^_Viz-qnKRYv6D3SDlRGvHNR-ErK|9WE=En`3GPUNm*pte zv7uLPO($G&2Oe|1vwfcy?Mn5D=I`(Cv%W1U%5qyxU7P$Yy9@~5Een1Bc$u@D_E({m zUJnQ5)=I7AOVUhK6f@BXi9Z{86&V!fWvW@#VsGDd-k*;lG^8}?(Alw3JtJ)75`s8&bC-(CI~wuJL=S5WSvf^{nu#T~odvJW0^mu8?BLTdA+X6#V? z#VtL}*Y)l;cje})0)e7^5tWX!4_;J)&EGm4Jw1(x zIYc?`;|_;!#+z+_F^SR+^VJ^CnJVS?7bj_6Z=ZhmPMiH(b{~wq8O83@c}y2h|FkDbt+Qj<=TSl zPrsE>TA8*SkvWLbz-iJHS1r7=gXhuZnba5S^)=s7RzeAGbCZODLj~umMRFEfY-u4< zf6J2Ee&kQlqmpgKsxb>mi@xU$SHY!$A*vJXMVIb?8okGc!`t5pn7IaB(GejN3#~s5 z&!8|)!cY>CuNqy`4m#40F)Z7oh}WICx##uK!WG1%LeEAa_<~35*OUpGkL6um>ng=o zBfl!!pFs!@`qa9Q2`r$Hj6f3@a!tiH6ZeY;-aKDfB(}^CW)N6>-YW_ZunPAnP7m}a zU+g{VqyqBG);EDFqaZ(S!PyV!DpWdH^YBGMnk>3r|IS^Cy2&J3CoKn_HRtNS5S)f zsdt^zi`P;oBP9@e&0*^=yU|U-*#y!3fv}Pg2wh=4G<=d3@cD#q;qt-W?PkEExmfXtv3x{?klSQxi&)UB=9eQ?^*%&lhsB zLyJ_?mZ%!^8AOGiKSRIS-S5&dilbGqW&vR5e&QXx#XPjx1yp1d!uosIMR_IOp+(o* z(k2UTUAY2Md=i0Ix45yQTKY4b!KO`X^XbCSRKRjn3vw(&hj_4*ZrF$Dd$ z2_ZFH0L42jduwHDZA+OZ_ggvZsE47RaR|dGGl>>Y0I4o z_?vCAluqfzUjv=k0Mk3orXq?4?axQW+u_JWT2xqw+a6yBBSc$4dL(+~Fq=-)=bq}c zaQigUM+d31Yy}a1K7$EVOa`gwbQ+I_q1j~6jYl{}CPIS`T|P}V3G^#i)HkXWhK>d> z%cz=4D$6M{`#{VOdY_Q1x=doiTl<1#?g79xSXhhV$*QZ64_>2Y&LwSjcAhm|4L{h# za=(lcgmcA(5Iq)AZep8~Y8|PrKF8(W(|@Zg-sbZBWcE8$=?o{sO_tltXunbj+*gS& z{e+f4F?}l93Q8N}{4m|}j(PRaU$A|j1ciO1NgG8u1=E$7fhiN1X;56{s9>m*a0E@I zUm*CSd*X?T4jGPuQFHVTU#Gf^-9j)NH`bfB@6GvNHGNyzM2bia**6->@Nt+9P&nl= zcfLV)#79IR^K(Z+imMq{2R^~&o&GA~%-*A+_0AfmJO=VxzmspOC^JakBKI&=p2Wif zu%s9$M;ju8+_SQ`i#RtPEVJ`eaJqvH7URjnQ&>gvJ0M)zCC;+}!$d%OS0uu%~q@BNJ!g1Q1u(8Luc zqq-tB9t_>j@yrCl<+Lq~2eC2l_I@RHPZJvi5`O!pD8?38Y<{JKotx)|VafE;!zbgl z*!In|EWz`9j)g8JG|hCv1Pb86C`~;BY*LOkq`#2EzWu~X4ue94WqeXT`v<)T_m1(Y z62ssBL_qe>_%LZ($V7_p7OgvDjm%&{F9V;Y^O7gi-Y-g(pU&h(p98TTlJ^?C{UANv z_E4tqD3%1x_=E=Exd8&&`(DDiJMuC-aF6F*FVlH;S*LkB`!r73K8BDFh#Ssn~Z{ zT6cobEOtaWqCT*wx<=k#l-nf33tHM_^FxEW_odyja99)e zcKjNYes?Vv+OMRO-*CA>VrEXRg7y@ed_7W5i+hEFZwSWzrz%_rgO1e&FBWDnXb)s6 zKPCK>iq5!Q7_&W57 zcFNtR)O|vS>T#(cj(9;VqJ_^B0hU-#?2L<+tStB0)6uTIb;octN8vVm`mLOsIZ6nG z!PD8*)G@?P5VHRB3ssQj&y#`nF={d%8uw1rep5{epqh?Cz))-{ASv#zHeU|OLOUJd z#k3syRIyvg;Z?ggdYJSyXDpUxGNAVOTURM%E!TKnNJWU4oIyhf;h)rO$6d8IbR2!y zU9y>{B+r=KEyvH`>Iv%UKkL%TKd7(JDXt`j+Bbw~yz>S^n|o=%ADM_cGy1osU8U4Nvh&tam{Vd74?%ci8v>j7;b)BY=keJE#g4n*#B3WSqq>?1}NWj1TrfwJGSby(<^~GYN2TiEr zecbg@*i%2ysK*2zEP1_LO1&yHMuSK2{=qN}rX+W@=%4w7z;qg_xk@_2j?x&+t`EK4 zd~MlEn|cPCc?)u!&T|pts^1Q`1OETL#BX>6QDRCUrwTVAm|QajTi8Pywv zuL+@-J=uaE>16ECLyS@LU#Ys2t57vG*y2tZywk}+gLVcNrz_t?zse?NcJg87TirV4 z+@SZ$A6wYEp`~}E>IGhx1{N8Q#!PG6Qv09o^%aB&Fye&XhTr#@X*y)(u7pcMJv|FS zx8UuEz}?JFQ^Me~h?5tz2!IHHABShIFr=0>BXAHA^TK%8oY2$+OVkW!y0F{Z>49O@ zF7Ko5!Y!WQZk6y=Q%j-sv_(fz;`wi^ETg+eeO^oC2Js++93<-R?wW~ag#HWck@plA zKuU_7FkjYtP&k0Q7%KY3Amcj_-<&p6cbqh9dc=5*T!WI!%6IpjJQNQKs|7t9Ofr^E z2$l2`rVrv4fPud#rUCrIenxvucP{qQ{rv&xyDjo0_17`dVo2R6IzR$Emi|yS4v>TX zJwll9f-d{gL#!>G;W}@LR?wi~RVKPyg#r2tq^}yQKJeH@{RHZpe&n+La_Eb4dCb&x z2~dZ|pjuqyL!j$-yDXV@&T_c^^vpMx-dTEI%%Cp?hdDai(9RJND|mSO(CJ2tBvFO* zps&<`O`?4mPl+W{KVtZPIHesRdw{W>;qs_OxiL^`?rW_#wl&TmeNd?^4t^o(kTDEu zi2M%pLBdSo%xZ964u}%w=R{M#SH3hF5TlD&avD#Npd^nxd3v}YuCCMJkVpRY<18Mk zXXWc7Zv%H1y}tcb9-Dspc?=H+Hmhcd!{At=FBa9N8%sb4IVM&Wn8$KOf74IQe+Z*7 z5|+67De4m*hovGO>PgQf$rq)p)jId zj;qd~?Q+VS2kG2QwsZ+H)$((iqwW3;7EF(0soa~Qgnmtx>rP{mT`DG`h=Ay+By$*Y zGg2d*#Z4XV*)qa46>=JlpQSj-TM9BAlq&UB!2+ z1O)qJYeXcMhhm(PtL~#M|3btS+^d6x;arQu`a=oeo4A=#f|{aXO{+w6VfX9nzdl{u z+{_vsfkLV!Eeo$tYDP$tLFk08|L`)uh8YL5mWKM}I`YAAOE*ybMNX@uz1$9}IG)zZ z6-Mz})=M}A5S}DjCg~Er3d3s?Z?in=N1YGf#w-@Rgoz$&D&JCtVl+G6b-HI4Irxyx z)P~OSs24w!*HM|y_|vpC-%^L2^}S1Xd>D4o4r9cJ{t;j9zJ;Es$JFn_hF0&%doA=1 zbV2D#?ugS|eR|dDK#vdP?DrjwwAv0i!I`^%;WRS))(L|NG&i`)(jp7>vri7LN*>4{ z%LplT_Q-?n;ve0q3X)IiJ>q2QjPaJ)l!wxEWtWX@)1fK7%TKO#Z+{c5|0URb+XW9C zV>nlXOgg;lMST;DH*tT9LpKvva8dvLg4$dFsf+i2ZoX?PSDn01tV8Pe6K>rJJlv|G zKE+dQb1-XeZmy4xn)qO5Y=8yC65z!;Lc0Qx;7%c!Z1Qp@zFq1MYfr(`ik78+Os&x! z0P8}3TbF5+gGxu0W`60!bV(r0Poec|h8z)Yj`y-qTpB2YLqG|{^3MN&new%2b(ce} zJ?=b@@fUlRXH0 zGz-0k+#JT3p)xkU_d7&@roQ{g9ZYIj?jEqBke=NplW6T7J*)_1ImTXZAt)`TVA2<^ z#CdKCPWf0Mg`IElH644WXGQrd^ zv{faDeci4}WCcv3Q7K}MzRyFm%J)Yx2y-oNq@xQTmoC_+scPZ`26v4k#ebK<6_Nu> z15k+O#+*~0QQL$@3U`8%g$jN7BbR()0Y46$%>*Ms%`*AIZiXDZFX8o4uJ%K~B&Wvs z&s=otDpAfk2V#w`8A)H3*Kz1rg9k}ckmyH0)cRkCJDnI|$kiP#p8DdVi6_Tx{l$MS zzvT(8D?8+^RQ1>zjRUo0x;v6vZlk#P{5oJGkRAeibmraJ+Se@NmK&+hlel!B2gr_$4bi$0zqS5PMZaWx#8`25X;jj6FaAg66WWeiZpzH_vQ-|u}`JWPhtfu7?VA# zUN+(K)=xuczP%Loa(2=>e_VD_f!YdMJUUK4|624@#Ph7Xw+IKgWO-17Ca>Mj$gWDx zD+!)xP*)>khocv0O9^>iLjYS&9V?bb` zC1*A=Fg7%5_AI8Fn_KT|(29I8)97#3%P3{wAzaGQ4d1{3+#S>dFaA zZ`xQW({nX2+L$u>y106YHHhNHE{ev<>pcsJJZRRbGdse2@*$bZG?1^Q=y;KK6s<8} zN3>R=U73hkdygAC1;}{9pjZ0!v(+XzSWq zOL-d~&s_omkn;_xfV{O+EOVKqz)u574F>-^(NF3-N}89=XB@@!4SE|nL0@WL1I;yqI^1yK4xx0%dM>YKv%3@>Pb@9KYC7YVtjq6sUI@epYEPn0_ z$o#^8w8&1WnZDQYPvTS`VMpXkXm1n(ilbsv_^_id*z@MWLoEu zV7|Cg?0pp2BgnNSqnbvYf0akZY=R*}+va9>W4X_?RkZD}@q}Fc9Fe;zDlRR`Z%wmy zz7N3O8FUEcA;I`E#FyMEj*R|&XHSB@nMJjpQ5hKa>|`^dwe{U)*02AX`74W1@)kL0 zmTe;Z-WL>e@f7gsL7full^0uV$AALy%Ike)mlLm%v{x#u+b<~6GQ;gjkYkQ>ty&yX zjNh|PiMr~nsfvV91@66UJDZQATcA$;jo8MU*a6%IqDj(Im}4s9J^8tVGF*Q|_VYgg z<_VTo?AIfwXQ1*lRr&qKz}f@62B31 zt~9||)p1{ATxzni^r*Ad_FRKVN3X5ExBT-nS7S0Ngx|*f$m|N8Xv%tRx`C0}g8Er# zqGjS&t+!m*V0c(r>mDOKshj932Tk(_9F=-JBe3%0EQ8K#>c* zNryw(iQ^NQCx(#riFL7$V-#YwJQN3FV2vaVwzEI*t`UWg$cAkWB)1GOHA;u%}zOEAa!-0P~nO+6Y>U`g8jptqWrn+6uY z(-+6J{GvY)XwC?Hg^5A9?rJ?htFM&xXwAUN)fy&bXhE<(>Kqd+FboHz-C$30uREj|P8IlE~latf*3&FWO=akR^QvQ-;9j9QF^phxcsD(Zna9ua~tGTgDe*p5q% z&o1#Cc%NsRse^+r;GkLMq)>i1Io2_u@L-(=Zs5Vpa9EP3;+zQDxDTV5bs$_Qa7aAi z$WQth%hKTe{(YThhJJW37=DlcwE0nY6va%_Sjtw+GWafcf)snK^1$7sf$=MFbrcFu z#p8|nQ;VGh{oeU>cJzUD^16>QiZZj;4%SV%}PdxyRMgFos1za)PY6qo1yTv^(oafawcZ`gk@Uj-B;$aX7u)!r$`M{dRDLk{F_75)y==s zl`2C+zYy75CqzPUz7Ri^C+D;K?|A4A%gAVw-xf>$FpFm(O8;1DO7lXQm?jnP=1BTb z1@4EU3NvL{Y#O?3)tGrGwgd^XtNR#a>QyizFp~tecLdZLz2qK+k zKN&h5onK5LAS+BbcZ+GOWqqG!3VS3D+vdl%9;E;JW{>nRMC}N8#0KZ?mwoX6HYI8l z*`X!{^&uhoB&cCv#a}}OY|FMqPUCy-gSVPtZb;PUFy~N=^0@9kkFpGSSKbzM;B zJ5^ERIQb<{Vxyh`alCr)Y?k2CReg)wv9n0v5-Oju+}}MSPzhzLb92&CAj6M87&qYUW2`wH7l}2zW6*3EK=1 zw7|n2x+*Di&vESnGOsBU8~g(r)g>)3Qw)t2(f$3o4tcS*lgo{NErZbOO~|kkaN}6h zXuTx}@xj6mlSL}+`%Z;IHQSAf2|Sj)+YdMZlI>H_aTqlDf+5sh2)iJ$ev8|>2q*tP zkJ+ax5!@1^{!R(TZD&%j1?T?d#=Ms1uP4d88+jUvi(*jMpRlLQR+VZ>;8%g%1W){H z)nM4*R~TaPUl;qK;z6uQgpcR2S0(3}gx+r3d(mWIzCOlZ8ehDn*YORs7r>S1pcWOR z=@Gtfx2rHbSw?K>Xz<{2zTvSS*jj+hPQKJC4XaVV6f;}*=RAN=wd-Q_@s4Y1@jg4|i?c;K}5+i;tG|31P{KG0kox&|?!A`@X2Ap{*An zlUVZErgca^2FaZO8}7j6?CkkQTt4V^G4bqd7%P_f*&#KO#ckoc zc8K3#cl+ybD#dBt7B9OwjWi8NzuSRp;@((fAoYsv7(FC zWRr|QifHl>nqDF_^;AGNtP1s!M|Qp+9UDvQe=)`qj6v++XuWi@@p(}e`TR4Jt(>?$ z3|hk@$LQ6pl%z{?;Z{CuW#<3R)JTN#y?YTrOTc*YA8;HF{j_;}nXgIMY*QIb|rSI7^8s zKFVUYDz!VI!sr}_n%fWe_DG`sKn!-&gSOHm+wj%P-Q$^rAy)3wA!1k zgg-tO+C96!llHuzC?OMm7OVEP>`N1T79!gue%F-mbqo`J+#IY;6n*qj+(L3ikaY}f zToI(sN2p4$9#MZ;PHnfze(jc0^6l--)cfXUbd;=W-vvpWOCODD?Z*`94i0$UeoM4H3)eyyo$i`DchtmWHIn?A`Y)qCkbiKAo~`}H9frH= zd9*~@IR^msN>Rytdfyx!(q8clAQYkMT=MujuI;R`DW@#$jZTck!VacbCgZV_oO45= zzY@_j*e8YOz4R7c>5$}BYEr;t!7}{ep;Cf=BEYU)7>~+x}7^QB-UuFtep%jnZM4M zv^VvSe31xbkgD&?2CQHD?~pqi5ecYV5VpX}$w4ZIN&EDyK;Vy`DwMqHQ1D2f)xuW; zGenA#y7o?kSo@eM>FlX}ejxcf5StT4GO`0X&vXXcty1~fY^#6y)3i$ZrdoQe{D}4k z4|G7S0#x;^LKgv3+iNXY%*I5jLcHMPvzi-Y|46&xkLysVM=LABLv*E`SBqiNo zBMTzR^fG1Rv1=qek*D6eDOhp~ruTzCP2Dnvy6wV(GcE}X4ut;xBqCH0R9>9k5+}Va z(MAkYt+^^lB~Zne!}&oi7&z%zG+>WIL~ZKs>I|qJ@fXNyD+NRloY$0vc6}Sx?4LZ3 z+tmo7{IvoD#+D5EKpWKh>m>q~XS`s>Gf~z2lTfUhQ$m?Hw+8QVu$@OU&Km$@(LF?L zJYjJs$%)veF~XIM0_+mRh-r|VoGUg8^OdzFQV{ul5>OU_US|YMj1HJh?A@g=%GHy_ zd%4@u4-}Wdvl3eD+-{g)m37vguy*hlT3|w&?U>xzH@err+=rqNZk{RY;Fsp$1+t`@ z38J<4`WKA2C?2vRl)KfBC3EcapS+VQisp7~>sea0&n+hb^ZI_vOuZw@c}4S$T!^{| z&|7R|57nx`i{EQVk4wb$#B2+25X~Sdu>G51P*v}JfVd8-EQ6*i@4iHpXT4M8#XFIO zT@fPPAj!H}-X5f{-#YSd+#p4XFYr+dcwy5$3)NQ6;^NiU>R6o)*+{gw>B1FZFgr9{ zy|$76F`2%iG0df8U%fLsGrw>4xii}*EkN*}rS(0!kw9QR)=0~B^5V8AE(yLEhF(OK zu2Dnk=QU=a3W9%~P=A%(;}5S6NS3(h1Q5!JKbYz}s^ocU(aM|IGnn%&bv*zIkt6~V zJEUe(8ouoaU_8sh8z*5Cd9W{N&>Gn({Te?pc$-UU2~a_0^DZ&6?V^Ou?q?7-CliCS zb0a-jh7NH(xf`H2(?!1A9w}2GPojwM$#kjwD z<}h;_w1gIis|>kOdP@-*ls&2;c2KCt*#0pj7sicHMah?}lglUt(BNdO@}<{CL~cYU z<(C_rlfx@cEVBDOiw=0~6bo#}r5ks|LFG!qy8&D9H?Cg9c~~>^Gck6wsrAu-w=Zu6_>u{*bgCpmwZb#&MheMbpOF0JX`@3RxmfJN+cBu=ZgUSOxb^G=A0D-zgS1xq zk+2@CK!_j}AYNc%b0|}tx_)rN1L1MK8X%9BWMadZMe3TENZm@ye>U%xQvZBKm}k(NzJ$a z(CMmoFaBou2*9|m<|Ld$H^z!B`Bkzqvg#}X!G|cWn8FKU8VXxnusLFs$H9AIMhE;W z@IB_L<1pEC!>7_rCUd!Rt-Ni<@si(Z~%!8CsTJ-b?BK~Jp*OE&?nOq-| zBmvW<3tx@OG5rQVdpEbM7{|8AkLgQy)4 zQHB)V4YAozoN@i;vDG|`2}M>Pcjfl_2S#656_{b6z;4{z(D2#4XQdwFPA44+AErK{ zfipmQtU<>&@nO&Q$;kcc)o>_a>tLQje(=uqh3ADhK>-$q0BVaBO0y7J;1+wyYOtAr zBWuJ7$R_9|I?!%V-j2;o1fS6}%-=VSZh_-Ml|mckBe@9CdJIf2w2G@MirnxBDgWSX zxEhaSG8b?eFQ;M%Ye2{(rt?2802I_Cs!qzMsNZlwd+7d)nnoMmZ~uWOjUG7<_0ot4 zK^SA@mg4XWGJ4ga(*$=dWZX<2;ypze_&-o`wY2h<-tNz_;{IcnP@wjoaOJ-UxIvE` z?`Na~jtaj!T%16 z6Pk}T5&?ZaA=S*TM4@I*lO&y*(zMNKO^XKwKx}XEPn2j|TJ>egyMhEDqsKPLkFm%) z`)O0!0K|L1T-1PfS}-d1%=nAfA%LEErLv^k+l;y)X8%2F81qWyS~O;tyhOPJNU%0Pz$Y z!Ad~7XU({HQ?|Bjsq+%cdnZ?iq5r7z$MAENG&tH&~ zbx2fZyuwoVoM<@g*4)fMj{HYQmb6y}2|yb+cO0CbpVQA!U0nmIuF*N_a~FIte-0AR z^?uF|yVoQZsAP!hOB;Z)E_mFCAYG4%u07+Zy5}7jg8|xWK|;Py6w{liR*l*482^KD zKvqF~en1GlLEC_wJ!sYIG?jOrPp7xV&|^FCL7TnUcHX%|OWJFA z0P-u{@&yXbJYnF_m;$eD&T#Aph|Ej|LB0=u=H_&7i33nJ2{m8qDJ zAjbKP>w>Xe%`MAHrv>)WGy|Yg;fOA20OElnD8#pN!5ho*cr8fCzo=#aoJ!@0_Ji$2)P_XzQ5HUGc$rM=}Q*qX4|Ea0{_1V+O>qPpq zYvUDw+}1`H0X4gMB46|=m0rbjMT@9jR()bPz$RHe#Q3efuA_)cUNkB@3;^PD!c6Tz z0Xa_0r1ny&l2N(<#0Mb;=yo)7!5ia$g0TOvFJ#T){FS^7NE9qY0}(~4gIWOq0?%oU z_ROZ$JOhRo$;WIAkOwZVlhhMlfyhZ66(L4r^Wp(WQDT#qE{x_mA-sTOclWMqFOH2p zh4-4-fr64!OaUkW!ZR<=?Dn1t02x*+!PphKe>cYetY6!*`S|hUr`;~Lu{|>9#pkAO z^#VYA?v>L#L_v-9GX}|;7ggFhr>eP^P$#L!vOH+V2>8@gQ##%((UG-88*+LU{&y!& zm>b&{4?uo-p7=SgS+{u{>Z0lEXtVCB zJn+9LE>^_?>_h`1)F4NJf5?iI-mT=v15j;U{ljNY4ZJ#tXXXj&jqyMbjQC*)M*L6^ z<19-^4T$h8h`HJI5zWa8;VJR}D4@kQ6J;^*5Dn1m@|%FlF9nL|sqwL=yaJG@EeKVe zE|UJa**35oDNOC~Q(+?LEymD+R!JMNQqO=RyW=8}_E?Q8YWrdL|0Ydux_@#pjz;L9 zRBY^B7z8@*4WjQb`zQ|p3P|5gaJgk{(dXx8 z$ijkNSw_G7=6@MCvt!N1#oOu?J(3Tz;YFksz7G*k5Vl7U+DNosbc6FX!MxI3@MU@I z4ydslkK4nH^M)9n5vYZB38f-YvNE@xKi&-=M2H3doU7Mvo`4UTjy!x`7?3YMHPnCj zId0d)tbGN5f>=cteen4&LFv23GAB5lpwlmmkGNxFTk_T_t(^goTRKxGNx;RD=9;p) zU$ulzqFU4-X?itQC@ePRC!!fsD6k($4AuVx_T@Ex0m|(8SVFIxXXgPZ2p2p*Hm`;? zG&YfV9ICa!1s()i2g5 z4?t)G+ANb_wL-?b=$RB%!>sy4u&JTirCNzxtdq1UzaS$zZ(}@*0K}_dMt6Kru|Q^pG=u8f>z<0-R{jnR zMPLQ>a19Whb-1nK>Q?N<>a4{sbS0bfmHQ|!NH?g1;y88R>h?PK)#mL{$_r` zX#nMT%v_mat6#hk8lM&qXLBs3^8vY8I#Hr7Oi2KG*W+H}Zrsc%$hHVZXQ;eKq(ZEl z*dI1W-~+l6_<-7(1QetZnvKD$VLUwtoZSy3`;UIy?|M}L$nOfeydUf}gYd#8@U|cV zx{LYFG_WbJPMwN9OF(A3zlUtNe~t0U*CC=<C{FZfFKH&Bx3Y&H&TjSP$JrR+KBpin5vd0Nipyf zf<`B4z}PtHaw}am$7da&$_uU3GB?48IsizL^30;D$NU6I$6@wRObz3sq9OF5Z>X<# zH?&W=S_ng9BPm%>A7(#u61lfzZ9stokRbv(Z1ro$jvbrMU6>eUjEHQrPz`I1$3_4& z4vB0aYhz^xa{EHM8I!dgAh8z!An3u1F-qsbllLU3LYd-eAzXIcNZmyJp-2!To0iUL zluBm~uPD@gb zZxke-=?;?q6@1w;wQfSZSSe^Wgb42sKOMGa=~N10a%dg^1(^@Vk7=fcK}DBuCkJ|8 z5A8B_p*>s`0P?VCUT-l1hHnXoBe%ynO-@|W3)SHj1oyMqb28F$GXTQ&3d96$aS;<_ zG(>yx2D#l2CjFq=)g;l=^%5NismrvYtlPdt+8e!pZg{WJvj(c;4Jy^*2tau85)l49 z=y)LP(@YJ6lXf^o$*WKIA082TZnHL~8Sxsu3xMrDuYE>wUrDN9{9*^e1;l$0!p!~R zHxvxeXW-y(umT{o1y#l4sqK;~#N~{3kwGHoi1fX9gWMjtq@?I+1Z}`{C{vnY>yPj< z(z3eo^g$KZ8$ktYfJ}8lvmYBH0EH0`WTl3Iy!fiY!NWiBx_qTd$x#LXM0_XR@#3qe*k3MxG2;wUKF>IfY`F2 zDz-+JgrcK)PgvOAuNfk@ND`HzRJn{t#h8X75&?}-&u27pjU>q=l?LA(XLaELC`j5B z~%qf;sHBGrI)FaQm=x` z9o_E6iw7X!?Rju?_(U!+Rb(!1+E{qQJ`P6X54h=vZ);K`-q*+3>pa}tSNZ_tgA2$Q z{}Yw^#WskqjLL5sBYZ~y!j}b&r1)>OiZaro%wfaqieMkPy&CBGbt(h7I6s_N%CyRHS>+e7Brmvi2)zxz!e5~$d ze-Dx=)XRKC?kQCO3WSP-&;K$O9t?we!?+=QRSf<&M$ei%NB}@-U}nU~*+yA9lOXDo zW}C|!Wu4R!k;736ZI}dPXLKJS@}4Qks^`H6rAoA~;h!iC;cpCpf-1XYw|-V?7<_cz z1}uq>dRhDBC7Q_u@C~(k=_{&xRyY7%&i^tJ&xb+1Vcb--1I6Yh|CrAO(^al4KeVwu zdTdY?c8g`G@2R@DRB{KLe&4nWP#tNvtY z@aX5g_HxP%Dz0>LlsM`0Q_1s%Iqt z5ThY6mf&HO9l-I^jFOFL71z&RnjuP4%RQ%(C;nPw?}BJ!%9Nj#YFH*8$i-!( z<){FVi^UUZnn>(SNU_);wuP7QI}qn^i^zS(Hn34cAZfJWi;Uhc=JF0R{=;mZ*LLmx z(JgfLWk$C!N_})YYaaAH%;;|PfMJfs<*Gb5}Ad(}6IDt~Bb=($!=Uz)B-PkJ0Ck9z%33`SQ(-upT~!!w?qm7hsJ3 zx@bSFosn8NsDce{=ONm@v;iosU6V{6aYfvP3&VdUW@jeJ(h|hTX0I?35Un-?f*|{v z2<<`uLJ5pzWn+7cPeC`a=*8?oOf88b8(ws7VYM@=o4VbH%GWQZm*O&%kQSAE*!;e# z)sO{9(SVnB5KVxyMmp*gu+&QRT{07cfA<-Xx_E>fv>hyeJcynzos8UrAGFG%|Op}u3L)ntQS23`%TuWuw( z)iwA*`ZAHU&nNqi{=)5e`2`!in!p3k0+3hxPqC<9iOxMAgOBY8c>ux<C+F9)bl_we*1sDfc>=_LRk^me(Ge2fy1{&xz7;QrpfisJcr zHH?*ShI5dFIY3O%kq6w)A+KyX@t3Uac5JupOAmmu;pSd-+xE^~p9S&!J-ATQ(-V1W zPn7Bxh{i|&-Lig&~e@AB6=D4vJOGjjcY{jjk;aw0Z_JjsaN+Rc)!kouD!v? z`y8eEg_{gPkWl7|)R_SgI|OJ*_47huKjo^1@zf(2!-D{17ds{LV(|ck+If^|4CdZ2 zdcQ2w$K2+m83PiFIT*170Vop%?PXDU^~=cn97ZuZt3%(>v112O;>YlJI{*@SX`I?b z!HnoMhoFBqG9ecfVF5@GXjuC>C3z(hI*OL`b~*v;KO)jo;NI=-V34~N%s9F z7waX`Hy@DbRa+1l$8VdG0w5NI=-K|$y=NLy5F3o@S8ZMW!)Hzn=*8)xxZ1mW-Xjy~ zvrz#MR19=oXDo_!@G=H3{h+~KBv?~)93udM9q3(P2l^+``~9}t+P>o>V3)ib`(Z(e z@Qj~^aOi&@?(hAXoBs0*(E*e$cQdw|wxtC?-Fx=Jgdg=1-Pzu?>vgiEd~&QR+07yw+d{t1U%{KBhx>=Eg0Zp7Av>Pc@k)d3%+LB;-D?COD0uLwb3uuOq7nHy>({TZaT60{pe-)iSfJ7Zplp~qP0zF@lgSA;2LnXX zhu~}ZTD&Lhs;5r#0#)!IK^6RiC;_M(0uz%&dCn}6Hae}Z*WZ^(K!p4Y*iYW-wLdTS zu?%^G8s<9Tnm0saOi{5?vz8VBLH#c9wcY|>gsa_buF)$nK6W8@dz8j!HYkAM!*IZE ziV}cutWwSo8z<7H(?q$>&Az*BYXU$&1^~*HI&#~em-c*y{AD#vy8|j_9B|toKsbieV+cY5Y^D{2qTZ&ooQ$$*GiYPCD7s>N^MLQS-W*)C1bO|bB zY`Q>{JrJy!=Q=Y{!TRB2*X?)B-QLe)g1Fo;Pf6E&M0Bxw!aQ%N+eHncJxC4^kVWrx z`!(Rzuhh~anVFf=r&Ci~_tUeZgD(kUZf^SEs~4ErfLaMXxrwN{o1R@zyR&+j#IA*; zjWuq@GPVWdHxxTe3l%%`Gfq(Vo~FuGcrIn8(9p zA^{b|h0To7ObzoIlf+ZbcrjaeU2`}0l@tK!E_e?FWPEZS4?s~HpK)VA9juXJ4fAZ1 zi~s~)Iu)v+{+AW;Jg6Z%K^@uVW|K`oDBU5Ye^NuKtJo4hW4gU}UXtohLE%G46K-~U zFKZ74>o3?9PCP+kdjZ%RS$i`8f{LXZpknDcuXFHvA2UWbHMi~P1O+Za_?Yc#hlyB!GiL3+^7453=045Sw?37|O$Ma$YAaL)T>mcc0+8tbD z9eA&Y98{8L)(~yj>-}NfXACs-GENJjeVd7D%coPrRnDk_aA%8%N+dN!;I0j zwRIq=*F$9#_jTU+z*{f(`FC(= z|A8gv|5`~v00>6`82X$xFengeCN#N)sK0R0VWk5=T|EaNc<%rJ&_Oo`!AR1LoI6WP3z0@X^YaDI#67U+I+)^RRKXHN z`*A(dCPkkS)Rne#MAmbD{9FJ&^T4Y3D>q~N8IQjgsWnEZ{5%LS1hb9z3p`!JZA5*> zO%Hr&XEOjQL@*+o|JKCzyQZfmKgl?Pym+!$Kq5ScCjfJ^mR{PH4gf(GJW0>o;yM5^ z8$Hc0PNBqVoC6$)FT$d~-3oxb^w=dEAQI&-G zUkm95zCsM@2nE}jYHK?)o6}JeznQt?Edc0i;EMk}(dP-W-F4SpSJyvyYBt9a_0FgZ~?}o>JE2K*j4#OjG7+z%sK)Z?heW(h*yl}b0 zNq{(+D<+AQ2;#tC4ALekKMWv*@^{Gt!7^n3oi!>_;z?!sHRa!q|J(XGs7Mx)VVM-s{!?odcjmqD4~b4}l8Tt^*Ju zH@a2jg4zTCpd$c4yUYLxHiPaa>HqXP7Q_i%Gfl`AulMu!g>9T3p~{t0+5PY{-)i9P z>5|mPy?{23%e&$&04P#^XyaP6tXfZXPgqU;Bvoe;ZZ!bzBYXf1NzK4<^g2K59rV3L z4?vg!53F2I6IHv>3juv@12|R8t4AS-#qa3u0gR9u%m4_21ebP^RL(=@WxOE>R)pZ5 z&0g*`-UE{yZ71np2hkVbM^JObl0=;VK2|YPBJ=K}%8M5zNw1%7YJ`S=FO=$n0g37K z(%rfn-seYCPe)Q3l9Z^oC;N};R4~PG6+ZxV?|Bp!>M^(8FSEtXj|}xzQPt0;b#`_( zQ@JiLB9}Kp8w>1t9V;m*&z+^x2Cw(?_kmUTJj5kE2?xcsT4)>}ULs|X#GV6DnCtw` zEl%hxs9itx>$yu(SSw)2v;&|*1tYHC)N#J9u6`|2a)9)|&+nRHN)pst`4mxSAi33D zGPmEct?n;s0Mc`~h_v5p^;6?Rv#$V_|1N|S)YiSbM-@ zI5<$FVXQ;ao{%99-D`gum12XE{QMy11jh0uFgX7N<~8SaKI}f8TiQwjDnu~imc;fC z#gzEHn2r&o%@PgLAWj_&0?_=fJ>Flm0EA#clm^KC((ZDb`(?K^tFS1z2EgacQ^NM-r9A#s=9V#&>u>c8Q@o?bMq{AZHpIx zu=)j&Zuet&GgZSdr6VRkjlTuGxlWs63_`^AJOH&4t$!2IjyUxr`a4J)b%R8C3Al#b z6&SM^AP$8@pceh(Za@gZXMn`6=X0(^=Wo^yVwIkNO0ehs^ugcDN0eJhKvW~|P7WOY zd{ARL^@Fw_C`NF%F8%nl{g{n~v2j!)Z$~b(_ChW+&oO>7X?A(fn&J=p^Ox!yeKH}*+{fsuOiy0 z(=)sIov$xu1winn`Y4zI{?bjqe%fx>+<6u}U+b}tFbv>~u9Z@6JVSn-&3JEd0uV$! z1Nz?$OV6XYF1t)E>#ZHeuF0c7}p6OUJ;^n=cqy+M!5ec+K> zt0U{lIIPJFhm_Bum1$A+izI`5O{SCLQoyJ>4U!@QhE!d zY+UU(Z;Z_hK?ve+erDzZ4;p-$;4EyF)MtZVl}wMvNc<)hD#=;{5d8tDE4kp&u;zjN zZrI%MlbV{k7whU*h*YX9MXAtIQ1Jl}lYT-{zi^ZJiUDDXxn_qHjL>>bGyb<~2;O}j z0VM^l*O0}#Vv^?D-EH-PJVoO#f?&lriM&7nRF)nJ_8YjuFWe|C{T&#D=VuA2ou_hb zy`;@ON^AEm60!-$vFk@<9!-S)`sLEX0g<*|+kBtad|;7Cn|}eOGBDaN>jr?J7bJx} zUi)`*--b<{y|s09yR&N-nsm-S!dL>jkWx@l0Z>l*!GjxO*m$7;2qd6$aK6oBU?@2c zTt~XzALa#w_z+}M#6E3APyv? z!D(+dZRtK#T~nhc7ke!~eQ(mlcmSUa=dLzV#gElSX`%y4JrW9YEYJ>3R`>-Y)v;h zPA-H7#RWiF?w+vO+YCnNPz-&>z3S-L)ehX6Nvl1C!{&*2+{>BRvZZHLyjnT}Aml7@ z2}&zo=3#SBDy5~bJ2h}D5~4JyRQnfDsrGMd0f^FVr}}#xiQ@dOLtDqrF8~SIyRs5c zsAn^evNhtEIJQnj13-E7ks&VzFNs9;;%3>D->DzFT1ud|69Qx^{*oR`DwH4e1>QX#d&gS zSg6vL)tVF!00H3`Oy-6#4R88_V}6+=Kfo3wszAg<=bk$yncQc!5m1iz?a6^7xq10H z#BS~dY48Wo{*@y4xB!v7?lO`OUXE7hlQUEF+6xzsL|Uz5YuBzlF-fsi_cW^g*--zH zzZY32zioIH&j`#BIeTcB(pK>UP}d$P|3q5+gq~;e$Le1TUn)y+IxiP2WNC|EbTIsW z0^YwrvjiZjzOE272^+e**VfXSlbE0@`r-(yQo4wVxFaY&sr2f>!CqICs-knYYuDbs zYoi=j>{%c+`pLn8-aiduJf}YL;?x{sfuQYeL{%S4CXXeZ`ZfDKuZDccrVq36i$(%s zb{Rh?42$_FJkVbFQXc>iy2E0@bxBKqHzL$~;h=mCRLong4vDI1uNWRU@*^*Y$nQO7 zIcm;*W~|e?Y=fc^B^YG++h9x4&(vki5d$CS;8UP_zu$S>;9GQecUP;V25LT9U+{$g z2CjIa7%IOr%(I8uL_@=wdH|ODcE4UM_U`%l_dy_MhF5V0k20#ldL2vr^^2 z<*G|s`pXj`;=?AR!S|(B85b!!Tk^A8J=ivFRN%1ND8ARs4SfsBY+VENee zyjCwqd-v{ZWFmWKKUCAN0_I9jY>x2qyd^o%`}H7RT(5n=xfp?aE$M9GVRcIL{P!zK?Q@twb5L8E^-q}4!uly_9N=I^iJ-534!{1#`|!Z*SkT zOOBHxz-{}&WZ%(Wm_<+LvV9E;njd&I(;7vTZ4Q9CdNg>sE!P{qUK>H8JL|MzVgBwM zt7JX8O4Sc2lJdXY&JSK9;3&3s8o2GxYkOm{0JDDl*eAWrE9W9N*eaQghz}v*3J|)^ zAFBWmswjx)0um6ov)>Kw?E8T!@s04({t5}}Gpbj9JWsa2yy_QR0$yZM$9VAC+OB9- zs_2;AAyk*7Rl~!-8TWEfgS-b+#h-wx=-Sqysr19LB9dcvdA6V?p9aHoAO!k;*8sef z&wv_prCmSi#nk4Jk>iooOk*ERV^;iSiRW^4m&+6zWP+$^NMRB8id6uJ0g!-K3cd=T z0##-of)#jQ63825M%`fnKzfs^y$;SIgb6lh~7M6 zz*w)*k1MkD=WfOa0J;wV=q@++gw+-R=vM$h&#?s{s$MbDe^jXKa}e{i;_b-+kiq7Y zlY(5*c$fiN5c3!5qvTXD@K$^SB%U{>Rr*X!kuq7sCiWboL{-RmhmMZj&jTa*6LuQ{ z;yqC85YMFVBAYGJX8rmr>+2ddl*Dj8!WRJ0eE>kNDmQ2(ef?11v7ZYM5@JIkFJMIJ z82n>0_DBCB-V<(msYv}o^V5uNUB@7jH{EXm(@0HEU8i!8`HJy-tk z^m7pXBb>_ydov1q9Y_&Hck?uF4d>&(;XK)9gnO+_>SumA4;3fXax{VZs z0lU2Ylc``)+qiIDis#Uq01!$o#tNp$DyUKNTZlaw{4qCN=iKcY*+*pZ3^aXI|1t== z`u!Xl+=kDK=W%;Xa`p`7>epy!jSo9v)hsbD7 zMdl=ulA>wk9YX_$za-LMP;Gd3JW4^pUw0Kt=`nMg=c-;n#aQs#=>->!7rs{{J#&bG zPz8Wsg-}Alg#wSr?f9p0k=P<)L^1sLt<0gMs_EYu9z6Cv<04ye??jdT&d(>&x%*y8 zmOo^5C_z-4gToR?`J5mQKJNk+?GJLLJ_AzTdqvwvZHIH37o4ky;Y{6R*DlI@u-th! za98p3vx?ifOt)&C-ot;~(K!R62z=~&^Vm9_)+~tMi%A074-bSA&)zHm?Ke}$zzF?G z5M%DjmMnpge~crcJ$zJj_WoSTg<;cNyD9xHG_Vl zuB5neTq~6+=hd>IHO4mV{mPm@NEih8PHR;>0F*5o%fv?1eL)(!#rOd5b^Z{E#qPz4 zQ;z)oPzwlcmODi^vrsXsBDJFTRL~%84VhfR_rNE?7 zGb37C=Z-rSIj-~Sn z%}k^_E?zv2JU9hSNnmqq>)icv0F)m(y}0amm1=*eNb(m%+864u+wakyZ^5_hb#`rF zpZ)>tB*KPvk+pDYV+lYud0%|UiItj$Hd6fUveCLQbTCB&K)4YY^8lNSR2uvAI3ANl zhA{Nop|tV?`WFdA2MKD-f)=J<#xE<+{ljl`)b2)@#}Tku?Xo^>^de2qZUe6b0#LzY zf%Ls_;IKA6i>lH$*fBox?KMq%>(IcFe{p*GqWoP<<)mK(TirXOoELMe=Z)!5w1Iab zm?pAjKh7Bd$}*99Ol0-D7DWX>x-pE>cFbZoi)6-!ZExRwvlN%UkKDotKq$lUJi{zU z4BJ|HbKC@J`CVXr&RsnxVVd2RsbF9OT3SeVrPJdJ=gysj5?jS_!5(12GAIS_e5KOq z8{@H<9_rw9@q6UdHmcu2;uevBz6KJ|??p8y{S0&TF>G8B52Ee`wupIS5>gg`^z4AB zKg#S`iVJ`k8bj<3#yXg}88>d+*j`<~I;k6>Q3A?TkYqeq_^pRu99#ASZp!nVvk^feFr3K)?s&L@eaPYhAcM=% ziew4IMw)qe@XDhkKKCGCW;cnpZc;GOdm> z+0p4JxuNHno4&BVu5qnEU3)qO9|&RkSEo4!^*e-jJOYxmZTV$5V&4b5WL|0QpvJfA zC$EAFc&gxZ-y*`|fSL4g<|fP>Im^iV1adILdd{K(pp3|w(MhvFVH&do3#dvEbfULG zEes=~krfoZVgN!Gwj&@dllDX77ST-%YSH1DkY;1O4I2khm!`lCU)?%9d~zVDasBoK zQo%pN>b^sy9~9y33omARfn7QZYK&fbxR@^3qaVTkyv%k^l>89f@InOsK|PxupbIJz zq3V5ZIK%B?d-9{J!>vN&v<}4wKxiOS8j?E0n}y39^x`D|9X(l+SHIYQ&(Zny=lc84 zJ3V|Ci zZC@0|eEswZ>gJE(MSqF?-07pBg4u(VpGgFGuU&3seqn~olpX;NFWgnp0T9mIE|4l) z`C=T!9%cu^dzdYVs`SyJe1@w(T71Km54x?uFbCUdq3M zg>{VlWpt%*=#Rpl>~sL2$kiB;WrDf?9OnK4+qoAYk5FXpW^MHJ3JQ^B1HH>iL2(JI zma#-$$8~#OQ38+-LfJZDM(aEj(|avMKR<+~A2xZuObmDkE+qSp6jhXMhK`j09jolT7w{;#GFL@gnWpyL;Xv6X~-~ZDIYN0JZ7`f@Ef2g*|P6MWA@l z>3&ds9|qOr)c~~L0lD;dY}-@%S>S*cPFi&uJE-497!i4Tm!QTCs~;VJ(&+<6X2i=R zXVFvyc6z>|1)!`Hv>%FhB|)M&z#haZV9X!|{T%M`Tw=y)(cJzH;_zu$=#9Fy+~S&@ zn%z*}SobP;IUQekx8r+l&!kPK`vHI+1OU1X4*i$l3Gc86py>0doaUc7YdyUHp0>tu zc+N-QIX#i~i_9U&Hdd)j82L;jWnUo@PtBgMxB)0r>2yCvM&|&iv*+(20qp&{3dZSS z24nPTxTh$%hV{eU*)t4M+g3XXNK2`kfHm=TLj%3QcU>G;d*`0t0;l4CI?aYrs|p#d zDg6k5>|Z(c8TIcVS)YIp#5VhJ>GvRnz+S?Odg2!2SpyK*hE&KlNFD(ER@mJ=~|27f@c^2+K>)A322d$wm1;&M^%4ZWL-Ks z_PmlP1Z&6JUXa3n_fX&Aj{(qr0Ky~w)~+$^64F52>(pn|zhg!?Mg%(m&^G~q-VpWN z+>VE87BEH}FpUASNb+_&Mo{gGAAmZ0_7QCs5IZ@+9vZ~uUjWoRKT{a^@*^-1Qq|P! zMv^BU3Tl!3_5+9eIP|gIJ`PCglH%&`0swsy+7<;Z2c(eP2y6rY?ezRSq*pzq2|fr5QXB4o?D8*R9xDF;#j2yji+mX7*<%MlAQoQ@u|hALl9#?V*4H-` z)CT+MXKTmqm&6qL$4-4{Do8+shd(C5ea)mLr#_?p9c+t}aGIKIr8lZ4O55AGqMo?P zco~L6Jqmh1|FdrYAyNx(Q!Vs#iynY*fsASxR&JsD;m ziXc{p2qnwi`TBjcyW{M*GvDm${2M$7^Zk80^PBg+_ulVGB=f;5RHfnCb(=&IFb#}k zW-ki%HI0sbe!Xhd+Uh_>5P5IL7g#LMeM=5qc2fSlxuVhNQYtP~O?;#FFdwhOd_2J$ z&+YpxgC3^A?pXljvGX4$Cw~BtqB=6d`h4YJm=w1k0`2^2n7QlM3?pR5J0_3+oTn)NPgo;gva{Alx=txqy&2jJiXqaBJ4yizZlgG#085 z#S~BG#i)OIeVo2;Se88NesAQJy>fcJz5pOax3jiFY=&=f7qy5*%uZj{~O?bAORkm3y!+O>7Vu=wYUPZ_Rwan0_h~BM4uCrvd+eR>HIy?RFAj)BpW_di@Nu;O z9ssBx0Mu+WA9%dGQeWbRHPXsi=Un?(4Y-tLx)*_>59d0co&8mcRV@H9N)Ji~iY2Dn zxfUy9`v!m%EhtN}#KOp5Xo-U zwbMj)<;Y0Qbk6}0IMf@#q5h7hCziXNcv@^f{sN#}?J$y=SWN;|9ngG~6piVrUkd}3 z%bH{&{}@RQ#mo8O?CcYXtlcgIf_)qfsCV)=JzBL`IO3Hr6=GwMb|5@9l1-KbjtoF6 z*r)6i}Xvy<+y(xVK;Mv0Rss2n#H^#>YU9XO@ zx;C~CHIMF_?K30O9srOU9UP9v4uBT-o^c;~6ZurfOOT!IO`!o@f(FDj3%&lKV}hE+ ze@^KgH!7Z5{n2~}Ksh1z!0~m6l^vlOd7D=m*DOMcL{!Rg1fsr1PCq{cXxMpf`kCU9fG?C4IbR#@x7||<89T} z{@R|Y?w&b4r_V$vDM+Cr5g-8ofciyRTm=B2$o_i~;Q;`^3aW*?e_&lizo;R;KR$?N z;Q&Aed=VE>^DsE^MaU-7^nJ@(UOz5tPol2Mt(9qXg+`WR>+fd=nP7G&vK5#v#|JCf z;cs(pIr7da?M+pgC*g@Ep}=O@WPF4{(;EEApTgiRF_EaSxOz7J^yc^d>2~9{g6Hh5 z+nt3FX}#~0*TXNvw=Y!Bz1WDFWO@M-I#AXLkEreXyVzD*4Hl^?GNUHueV?(kQ}Yrj z8~iA~s7^QjWw~$+64ZagpJU~5+~{zVjOYNZD*mRf?enLXDGaK#L8Vqx7@utIA06F3 z_>IyG%N1I`K42ICg5db0eKQeowmfHGt=a&N5e@8RLADHIwLQKBLP z2s&O7S=(+Re{$jPa7fS%Dns|18pViN;P|*4hSMZ%dPQ_>HtM8h&xs@}%m<#&>ED>{ zHL_M)Pt$XWynj^wytSYh`HJ@sEh14cVpnf{ZWmTW@nPUq6wo;#M*Q^#f&?1w1fD=a z(PpH3f2JSE#fWn!9u(o`;aNU$oPwf1eAXvfEwNb z)v$6ffVF#swrd8=gHxuKLSCo%$Yg-0e1VaC-%v>p& zwz5M*+ujS7CI{deXF^u35WyksJOObiP>B2)d08(DBL%sd$NaEJA4LAPh?~UT)8UF1 zxJyXvsd-8a5N>y_BQ$Id?oV)jjIe>eh=@>*xkRGN?~dy(bO%9C6*~58qe7rSdiTpK zl}D#9FGI0=fm5kDA0tjQD^z&k=HfM(@JBr>t87V==Q0)tb}pu|Ru{iAMNA=3e_8mM z2WP)FKJJPLj&kR`TyS}JkM2?LaX1W_ing}Pq|)%qX;jX+YVza7A zvG!r{>y;G-+~iV}t%Kg}w^uKAR&6J%;Fq=GR~%@iKRGG+l3376N({QNr|dv4GWuY+ zucab-x}@~l&u_NN{Y{S((o~Je%Tz|I!)wpgOcKFZ==Hi(1Weu#TGe*^`M%V$PTw(( zgQRQR1gj>rx6q@vw&lZkX!^jbogvVB-kM@ZHKD?Tt%5(Z3CU;}G+t7FQXqP$n0H;M zw&jKG-L4vgQUisnsZWCu-zsRo)XQHN>LV*-)?XICKYO7y+rj#ZbPD&#jh&V8l zNTHs!38PYM!9kEdfAEL^fY>~V;!$rWJGMVjNkuBLj9yeZI?BLVWe3}@glON2Iq>F< z2p;GPtF?eQ6Vnl#TBanR%2ItS;!@`_O84Mop0QF@9YRi`y3qVsa07hi%2yEnfN%t> zKHL)!a5n2^&)MwIMhZD@rqvWB6T6LS3ke3yTD?jx-mR82#Kl?$q)yd8pns1X7LAFC zjsLmwh>nIr5X! zRo#L+(P_7*N1|`u>eQZ}pq0MG(D?uMk^T^4AfPDf=+Umu__`?u(7y`0as}-##0n-d z`bO4e7X%(1ZwOAg3)CB#XO=YUt)t&c-ISAyAxXcH1M}RR!Q|Tdrw$itNKoY-x1);* zfhkvhuFX?Ck!qk~W52?VYM-)l#^J;6_{WTl%paKg0$QIzG;hZC1zfJ4+VckrXvF^Q zv$uVh1K*+F=RIlgz&+Dcx45(A@5P@$vC4*mP;Wp$8mu<8+rOk|f76H#1FY}qmK}!H zpFfznI(c~&;@CwFH~!qqd?Zo7droWN;PZVw`KQx01ZvUz{Juje{W+1?kc6I_6r9Sy zIzL^D$+=AZeZQG$Orb7hmOfqzV8Y7u&t5I54OX*n` zJVI<|PaTxw+7J7&;lBgS7WG=1U3xBu;o_A1JA(S?^?rEX;cB4Ay!k*22U_$@-mZQ8 z7Rq1m4v45zS5A}ruAc|pHt7JQw+B2f7v+Ic6Da1xdhp6Vu)Lj|T)Wz@Uv@RJ)3`R$ zRxNOo=4Ryt)Ds3L2W{aOvL!w|w2@{L2_%?4zpr+@p7@6lk<_^-a>eK4oNL@vrsx0g z;osfx6{7MUnugyUaL+0B93urNxutWhtaW^A$4WpikVDkYzl^M;+*96z^CD#~3)=qf zl;7~D@n>jqd#HFz;FDA<8{R_yS0XFiU<`si>0MWO^L3{GP*vdxeGGU19m&+vpSH)! zIhPfvkkrtZBTy;s<9Dg7T2+i$Pr$SlR7X=3ZMC(3l3-q>Hc#D@vUnT~y#34?F}3Qv z?1~y2Bh}P2iuSHL<U`VJRfWu#2Rw{>cO^0H0oH=Uie{a{lLwr;h!mk)I1P>x5!B8y3 zdQ(vNN!ku(QF98m`q1bYz5D0pcn7kx>a@FU)h@p%+2twiUQGcAa@jK1^DTMCXnqY|ZGgn6m6KbF(g&8MZGJfZ zV`esqH)n>Nh7nbt7L_NA5|gM%A=}KKzxNLa+D}S`-@RIr#14l{EjULI>Mg-oNR>hS zmLg3=&`O}H%rb8I0I8&#a&N7l#C3flWcXP`ywd8;9W8DTPoeNXg^ds`@PD|4EV-Qo?^#pY zbEcM?1al6A49~WQdHZZo!Yk>A55yM6FEGY*L;lwj8~nYlqroy@)Z&may(ArgH7LGp z!&~1fV8kW=&Fr-C(H-@c^rh+7%eR;;A$~!Q3yb2^e>_-xi_Eq_yX_$}FxcrZXgV0! zP*1F3PhkrW+-rGi4|Kx3tQ&rv_1F6J<2~C5$IqQ`BaIG1r6`gPG@jnh)voCMA zt_J^#D@|o`#3v+tV1M$KpJ;5aV%UrOO`CvA?=o^Q@mrxYwqm6L1-?+qkfn7i=}`@MOsZKN}h7do3pdC$DT>O@B%gO*^`?(*)>Y%slcT5L6wz& zYV}Xv>h~pvtXc>(K`>vsDRQ=42?r?JQ&J;|3#lM0fI$0$@*n;On%!bogZ_N=TWIa{gtzarWWfojT*^oQQ9_gEpy^+$Jsz4mXZO09$Xm z%FZ0SMEfJFN~Q`fwpexAqlmpuNf?^1)q@1LTNQm{$RikI;Y$5pVYn%su(=7A}mD2t*{`I72;1 zOAm4+1~w*vcRpiPriG~B0&4f3|5eZ(wfVKL&|84HDP=3hS>_BB{gy0)g+lS(g(5y?R;tqX0h08-A0M{*| z9GayDcAx#X!Ag_;lp8=7-vCHMfqQ5urJ=?S&P?-@)AJU0Sq!vzB-`?d;P=E&q6SA* zJOb2`mFnEJ*$43&N9odil&N zC_1~w7!mw?fq~Ftg|8b2p*l`tncgh|k2)xAWPsY4V;6>m>cJWi6v48$ki3M_}t4@XeYbBJWVAPrZ^F3j_wp3!oxYt=aht>!SYhe4q;1H`F3xUP;hxqnF7jx*|4;Pv99z*~FfQjcXN z5@Iy@_xgwC^}GYd?v_?@lje*dFP7r|WjVstjSfFvi_$bF9yv0d96q@%H-}(`1SY%RPre+@qT77PI`UMY`i{`ED8C-nRx6HQ2>W`C+aI(GXg!uX()nC>xQ=>rjBZT z*b%?8JKJxja<(wQ?0ci6S{%GUWMgZxVbgWT-BW?~n2t$|j+$HAN2}vFrA+pfK1)Jl zbCtQN-C9vowjgM{b~iDgQL8|WR@E8O1}+w8J9H?^q-&R_o!gxKT71V_5<0%0q$5mS z?_(O$5^GJySH4(pJs67w2XZd`!`Srjz?KVw$Z0gR*)t4_naLRz`Qi-|XA1@#(J_iN zl7@BHqHW`>RDQHiB5}(+y)TjM^>-YhVCe15Pr9jg8OGycRnbxR*~WCYh^q0 z8^%)=_;+}lDdWlM-T#X9Ic&?+r$jXYk6|Z~2%|Lc5~Hkq2|ygmLKdY>&keL|mX#gE zg9gFm-^LDc!H6}P7;Il6RUvmeh&{EAj?x=YJ0FT24SA(pJ9D}I3BMy*rfzI0QK5m& zpR*0F++TH4z2TjeH7|O}lrkM_NuxR_^NWsvI~A(;{9rDO6V+eVYccRVY-ZBR5_0{N zh>%}>k|k8!Kvz70YQxB&Q6sF5!(gb2mcbk?6wLi`~Up&Xz3Gt^++>j-t${ zYA8dJ468Aok>=k}D}@NQUKq2ktu$G85`KrAzQIYc+S}H`P274@oh{Gs)@nGOzIfsf zh)x=+s&|KfdUjeLrwuDw3vka^s5R`qz{FdS(a7c@h5Y_q>oHauJI0bL>_~tCLRa@) zuN-@PdUGAu9+Pc#tyS`}UP55f24vds=dNva>WY!59IcLbb|34s+RjW=zF0KYUw#`K z9Sh6j6I}XR+*x9v!GbR89^>I?DO*uDHUpR6B#&HgP!|!r!x#wm81zN)t-Agfz0K173s=TI%G#ZVtoc#lU5xr*}Ia;}fvrGP7X}UDnx*tM; zh)7WCv0d?k_ixdZRAs$o@FCosj<01G7t?X|Vl+WAUw3;m5`|UYNdPPV$%O9x3hVwt zF5KmxCXDnzhoD9Rz{)@BVQwYekGIWP z(mn!$!+sb)RLX^V4#W9xj`Zxr1}@`{N;t8{VgYcnDZ7ovCDv6f{QxcYJd4#+B-in3 zm%f34A7%Umb=NNjO~=3Tm(zkA_%{p;dP&o&t1NWbt56-9 zfgSF{T^^`i?PK>EC)97|LV`+mwL226~3pf|*enLG)}@e@mdjI(!*Ei1~!N%um<-O9Sp?a9Etp*mDK$D`%tgF)!b^ z_9hPx4|xy%Gc#$WO6RMjGT(K6eolgDL(D#IW?Gy~)}sap&6)-p=~I-M~P?h#LLECnCovz=kgQo{WmP>OILr7$v@EdXo5j zwSOM84ZhJYeK1NY%EG*Jo7nJ{=$CH$ZT2J(HPLg@zlT1ZI4>%-8^q_wYqWEj2XHE zeLeGAuN>K$TW^8)fHNXMWN4GdRPrGz+VIdQqJwHB5&dh6l?=OgIf6W1jc)iftMPt3 zSi)WC#7w(RsP14QEwqA)38*EN4F zB;2T80{!?ga2CQn(!0wUbnF~SqiU+^>P35Ubv3c6?%&`TipTE?v`1eKm&yH@pp)5b zQlG2qR3cH;W`KUF6y!v^5KUzcS2-F?GZP;*{!b|>>c!R7fzrx{qxTWDa%;OKKAy71 zXLfZl`yZ3N^c+!Rd=cQ>9yW?*;K_b};G$*t%c$t>s`)D&2~kT!L$b0mjhygyKj2qw z-JZ8;-)o>YRHr=JrmWJ@R~$JO(m4&*DvJ#pL@kwe~&0xP|z%C2b85a-f?52HZzbR8#jKIY?|L91^Njhb?F;k1lsuwyc^WZK!yCv*Z z`N9L&ERg9mZV^&ZDY}1P@kPS?+d^@W(;XWunGV6%08ymjzMSa;2NQXDx#*9)Y>GOS z^dpyz&W#CF!gmy&ugW3P=8ZCz6;$$LjhrRrE@eE|xq`Qhq8~{@8~&NX z2>JkrH5`-~$93>TYY)gA1fWM+E|5lh6(*vJlOLz>Hj2uB98Zbu{Yy}Z#{K08Q!%S`Cpgsv|1w~3kh>yKD6R6+g(}193-+ndKlqv# zE~ZsBX$mulo!1HaWK zBLjjZSL(#94_&yW$6=sktBkczoHtyt&lMjb4QGD}IeyARV(d;?$IE{GUEZDVQo>K1 zru}fZxNEjt(Y`iia}vN7~~2K{%dKPM5W>WMFCS}IqN-;X01rYjFaCH zFvbZdE^Vp2W>dOFnx$nHsxcs-a3%Sux?M@_7j51Gx|{TYFsuZb5}1hG9>*6h@_?dEHOa*OSH^oDm%A>g-i2m*T~Nt~0ct zdgOBtC5=&da$ZrK@d?TO?`Y^?5v^DU$JNW-sNMdSJ@Cz6;U+khKmLe9!=d`3$+h#r zw~@a|D+&^Fd;GgH;kp!hxGb*}_Q}cC{q@KYfA8Oe)RK?y$54n~7Mo%6TxM z@8R`2#%VQC0#om&|q=F-fWr}H~)|d`4mh(F&uT){Uv-o+pe{6 zJNH6%LJLM4^o~2xIcb2_r}yvbyuc*Ov%X?a<)u)+jUSHECj3!0>}6aG^Kyr&qo5=U z@0{-~!ti5Nw##Q71bNmO5opDP1&G(0_ThpD&pvn_8Zr$||e5kNfb@}y62j7OsSiazAcm-naHQ9~G(tV@G^^7I}R{I605 z-EQR{HR!22Q1jy9AK(6waT{-83spuc3>&>wQ1P=PQ%UUX4{7n2`FCdvryfv`A1Xxo z6IJ*T^~Keb4h=EeIDC4>4VI|?yOtoqT(#tcUhSD;MO@@e>jO`I71doYy3^{!@>P-R zAua-H46{2@5WYG+FVKqf8xS@0QUF>Rb6^(L?}GXp&~me=qU}ehP?98W=)gn0L4r6& zfvtuek?lx1B6WI1@PY{xw={%>ct_VG%Rs;T*TU}62gLU68F{bpz^$9WG_o252 zQS-u#>#}Gr8~rFO)e1FKjRUPT;6u`msUEdplqWwMK+BM>EOT7*4&C^a8^H=KFwoBsIy_3n{hA9z;2os}xov@FkS(oc)NBsJ=({xt+K;;WW) zykn4+91d(->J}~U)us2Qj_|KPO#FsaBMDGgektA)NC-w*!CU^l0An~6Y32Hpn6Zcw zYmJr2Cm(|lDrU(6LEVQgGx0$h!J{RLD;jDkp0C?;e%>%~Co{iufqohDoZq>XC8z58w_Z4h71|+{EH}3e|16>1qLzt;cWySU=NP!C`BYXN`ZjQBl{Y zQW^UT_N@V)QO3U*T!*tWGlyM+jIC}q{+vj4mj@Z)ee)LZ9Y6TEK!jorX2x}Ds5B4Rk*4X9S$z2; z3{<+u`w9>q%*dN8vd^qJI6NPZq)Fh$aA9ogG1ZkDE-mvsQ?~nczSb%WDnF*_ip0N>Ay03MzXquuFcsd&1~dk9HFAJd=67G- zq4v>2X{^#(k0OB|O3qF9rpFSPhG7Vd$4-H~swi2q)YINQ3dSLDbNdE;%p@+Bs>kI2 z*JEJfkra{mYTS56cBn+~&*3BL2!d)t+yR;FHGzg;w5TBM7x9=8yb96UOL>WFZ z1~EI}7AGM02Jsx*z8R`H7%gD$s=-hF@%ysbj0$B?W=f^it|+B4Y3ogT+0onC3I1z1 zX;$8-wSfy}!l8pfv%@@hAX+Jj=uP{4m|Z$Cb^l_R+Z~J!Y4n|I8#KtymW6!!l#s_~ za%3gHW)h#?eiSbSy41vrn$k&Pr!PkNA%TseWiu{sCf%Z|V(iE$QMvm`k8 z`tHYIKRi4`ckJ}U4&!#!gCODxGEk`_&}4CFfll?pIAzm3=@pygA5Av-3f(Tprlcq) zb4qtrFp#9Xd=SNlGY>=BG7|{nZx3ZFsw9skwCO&rhMX+S?FQ4WhL|?BcPx?qE<-Uf zOACk|mQ&p~(<1<5AZ<~Z_b$DnW^AZH^_wLoRu-o)z{e+MTJjHn7ay#RA-yfuiBuwRKVOo|HsVWbQPi>tY(U^ka`{z6+XJD6W!b97O~=IkV-w?2RON9#Gd=em&cIABQ}q7Ki@d~>MXcn$@`0Dv{w;WTfW zzch!-2XnAOE6dy7cWu_A5wVBCmfJXCF^$cMNocG_)0)J~@&pNvdYe;FxefBKX#*hq zTrrWl(O*agE1%-IkSyAbI>p%n4Pv>Xg*UeR)Ghmr_(kDtw^{4nBq;2;%mU~*fee@X z7bknznnnxZMVJk3_IN#}3()p0ize(>Qh)Nxq3^4}Q zz@N`8ae#zto=(Dt`6DicCLz)c?y~nLA3Cjq_goi|!5W*6ZtHEAa;`1Bb~HE2oU^tz zJE>+#)kl?Ls12P>;BS-Yh`(Z4lcL9$XcUV$#DiQ>x$!N^cs z7#Q6qf=nY6!Rz2uP)`_DnVXrikiD+kB|%>Dp!^E@si6=T?^z^)bE8o8NmbR zd^kKY&n)J_xQ&?5yI{vpqm$rrR8Qr3mq)fyB;U6h6?=sG6nyi5wD*m8H*JL^6e~Wf zC}ES27ua>4WqpDp`jti2h1({Pi64l9mnx)3sb;{FE-i#vV-e%ivsT^9S&wO$BL}`D zy@=W?B`xC1gsGu9uaHp|qJj3+bMy`Db$uq&>pGsOE_)&PWLx&3+Y%QNzdmG36f;U7 zNHYGBV3~DF;WwlW7CvIE1F4>WeK8O3`IBATB=tG9Zs-Og8!8wM*MHTa6Lm5*OJ+dj z69Pm}E3TATNnTj;P0YYAkMk9i-*RXt@;VS-y+-Ot>>Smx*)1Aw3QbGLXms?=hx<#e z9G)%-LNlqfa>1hjJo~58nC~CUx4rtb(D32REWHCROO`XN*%4x^Mf`Z6ff}CtKqr#S zXgd2NBQE$(O8Qju-{r%h0Sl_$;g#WhzgLv!+x$BV?oKdnH#^|RLD|lj`cPl|9_`?a$7-E4w&2?nhF!5&=JwpDB zq*dNJ*npR+s-nza@oC3PUX3oq1W=$eI%qsU`^3wCC@Ely(%jxR_?3Tbh-sI8FX_v? zu9yrz@t1U1yM^-|Ij-ScyxA|c6j?gNVo>#Bi4{TtdoV1xG3cO;)JnTOLz0q|Tjs_& zc3A$?L6V}BF%yZ8GAf?x#nBKq9L6mPkkn5%Az@^Yv`E#h4pwuZWY;9BqM3q^jEOs~ zo-ct_KLN>@+Qj8_;necXfsw50w7aZR?MQ)p1y~9Vv~|+N_%lh&&_1GdtI2w%Y#0LP z!qj>}nxw91i%-#5+UOdC;cz>5*1QEn;6<(s`273l@h#z(8`hC8LKVD8k~Z7*Ax0N} z8Qn7zkc66Lu?05|y8!Sp zy4Y&0N}q!A)xy1oBM1W!fs2=|W3=RL1wlM>04S$|7e|Db=DHw_&GQYtf{^BY(6-I{ zK=*y!M-u2qE}TBKs40F{RvA%c*iY_ibMx@%$MTp>j#kaePnPh8HG%q)c4go0DYsrN zGWG3}Wg5jxQtt`>4{=~zVc_6kwl6C|>R^|w8G56EWSwvzXl>WMw_wi7St&m48_ir7 z#2*e04>6y(WA~92J>QsII3ym;a(2)zfJqlAU9}bsEBH7PR`pwpf}I@!5D?a$mCQ-! z=mSmf8_vTNu!M?os{Ae;ap?2| zgy{tpEDAL0o=Uvt#1(9(>J9XJI~714*%aA=$iYSC=I%x)ndJ12?eWqrtn9=bR+&@^ z6WYYDN{RplIJP28lIp=-M?{9LJJ!OnPilZeZyOH$N4c`G*r|u9o}gm85lu`_rKT6F&%dhPAfoR2&a(6=u>^9D z>eBqjdM1shiDR{iw7E`KSc<~&MD4Hsmz2SOkkYez(c#E&Mrv$q=azII6v)qlVPme# zHcH=hN0wwU3U)Lc_FnYOPYJJU$%w|ueYIHXQxY>9P+2s(3jZQ73rtYvCHjYH9<)-} z)mX5kWUn2hqsrROrrTBHO-A^|$>2i3WJrIMvYx#8n`Qs(nmQvWA0e#%GTU3BtM{s{ z3{@(&VhALcU2e5|xa8?9D|^avZ*}n7$%w-3s-#%1eNtiwv9@nQ&i=UD@)`fiBz1nZ z5_n=~om$-USjRO*>nNbRMUNdYGdY3I2t$AlT(t~sGI_XU@bdckwzSmr0E3BHbUrc? zR5~u4Hk!~(q0^_9m%=apo{+)Xdu5Xmb-aIZOo~e<}cA@zdM^sTD z4bIeZBIY+OmkLR|CDpJy(g!eT9xp-(U>D)dv?)?isb z!`_^U+UFpe?_5Wl1L0BV`oqxv(=W_l022b%)=Sdqfj;Nc(^Cd1$ujtW({eBpe9Yp# znJ+-AoeaSSjJ>thK%tb>N2d;)Gz$A$r6-}cOpe(Egm36Snr?1T(=oXAa=V3G1>pLI zXVd01g{wd!(&$2xp1+s$;zLN@J4`=cG3a0{cWnNJP5Q`eJJU-TAklj!pTq8-4Dy%Z zw9^a0lJT_0Rei5*IBi!|P2$P_cG38_2l~m$Z}n7}a&vr-y!76Cy^XkNP|W-ml?;pY z`2jsR`-$v&K%b(xbLenML#oo!hyG$Og4>A1b*%DRj7=1UZ%X^Lf+fnv2FI_uUT< z`)XvtGREK>aUusdnfXbhdXCj^?K=H4$MB#josXLsm;3cm;AU*uQPR}BYXZU;0!LX@ zY2fB>pW-uQq9T@VLBJ{P&DIDd%%g^Z2T&T zSP)tK_~fMd;Ak2lF>ltDQl0kZBV|5x-59ncf+E~I^|}koBC0J63@b=4%{1E2FZG9f z9`#F?akIM?O~q}U9*Y=L?($JrFe2>$(wPE7%E3|^RsDWC8p?>iQ2Pt<>T`x^NJK^W z1AQ%+d!*obtx}`GM!H*gI+RXI>l0UVi5txxi>oUUC5c0;Xr2IHG$9agci(q?E4~2R zIFg5S*Mzrg9l2Y=xA^+U3@<2E5k7$4rtW^mtfzYlnZ~UQ7YUKcyM|GBk-Npu-^=D` z&*N|WV~^6uj(-`N>ql%$h!BrHZnv*ol|9`S(wheKT&OCN*Pt&7V(eWWw@e>>VE?I1 zP|xW{>^`IABjwhVc`SK=oEXTIGLqty2_E@8dPKbM@yv!ktC1w3=hws}xoIyapQfUm z)Hd~@xN2!9E6OVvp|Bx|?wV^uz4i=#VhBd6pYK%6!MEcfz?==;vtr@W20hT&ZB&18 zY9Xeoh~;Cu*?M}X&?i2Om=fcJ_B9ib$ZbrQ_Mt$y?N=VNU2rA+VCrb^3sP;vv{El3+}%%`DMJeyWWJ7kln2=ZBD?pIixWrjXRQ87?#oj`|Q%pKS+kqwE2&Fc64Rg zPzb7SBq4qDCgb^+mohObASj8V2FegNgbeQLL_!L(fx-sk_!D~dloZ;joEEJxVgg#x z4w~uaUN$2i8_oDDZ3c8xkmUpqIiBW;hVcxU5Xfp%C6 zGyW%ibTF?*b7AX<7%vWhVv1;dubC@h(le)J#NwK4o=H+OrWW7$g2xh0%Mr$&!8&us za_{ZWVpbavr~PvI)t^&LBHT1NvNg$V2~I|F3=x@B1xx$IGyRhxwz;eHOa0P<#e@No zb~p#R-9C>3YK}*avbIHXco!QXtA;|-JoUj_uDHo6l+~|_y1M0xhb`>$+vumJ;@m8{ zZ-6ri6x&O0dV?b&k3;*PwGiY@$e3oRGA!F&o5794H>c}B2P&ir}jOi zVC=wS!6J0`!}wvJjLDV8tAD6|wYRy2jLnmDnY@H6;EE_FJMS#Be)1lv+Ex9GiUlg! z%E$(yh5V99tKh*7Cdp+3$V5{i>}1no@paC~jOi|U^!v7^uwXD>U9Rl7A7OPa*FP@!+uOz04epFc|>E}v#kBEQ~Gbg*#25VKag*tqW|H%|o*B_IMAc9?| zEzz>(S~6U6$F$eVBDP0WhX6Y{`6XNdU;t`7n;tXcYC$gz<4g zVMMO>t4T^GFCL#TyX(31@5wGdc2pv12h%C~&J~T_?#sH;g!m+csSYMbdbDfurrmEy zd|nH^HQqoiTRmg@mHY<+eG{58%w@%W^0?!C9=U$5`Es)S+yEVi!F+Q@55iRU%8HQh zP_X-fyHv3G9qXWrSXW>-T87^VSpa8bqdjMh4LR6rC8;es-R}0m;{VM<-T$D zm1v}1DONbqe-e9RfGCLqO#Hux{xIZAUo-9L_5{igOmewMDU~3d?=Ummc+$3?M7nWl z^VMij5 zub0B!sIx#hy*QQu!8UJ=m+bPVlR{-!$#u4W#Y{_(!2Iki(PAQo$cW0yI6WpcR*j_L zl>y7j(+(DX4hmPZqPQ?Z?kTi4eYerXPOd^VHMQQM_;A}ih<`c&53-(oep3lsKt`$n zg-oNN4y!;u6>Fb$eC$B{jG!nm`sAla{&3+Gu~qK^cgq_=`MEGMl(ZQSPD8X%5b({3 z9EZ~icBYJIdTr*09lwa^pl}XdH}yZ=Q^p^|zDw-9)AK{0u;s)DI8lck(?g2=Kt^#Sz5WRel>&xyk#lP_>z(aB}qGD;!A=E+qHoHyHQ* z-d|L}Ka{lhkLDh`FObK|T;L-uaYHqX=CD#ZkaVaEA7&g$-q)gjyB!4$HMf>BwFN%A z1iHl5Rv*GB602>Qrp)kfzTCSD_DBn()(tzu3~zWHjqi5fY3rbl$AZ!`hv<+)?4FkT z*G6Q*lix4&tur%To_C~@zlfC+lNI=s)? zU(!~!P}+D|`H5KwMN&;3T6E;sDd2O*W< zTUjx)$L|xowq(s?ml$R0v~&cgMX*jjf;?`*k}vys zlnYFxNq*hNH2!d0)IRsBq{6W!+tdv{S_bT(AtwpgxgW=x55H-2*~A{ zwoXZ=Mbs7D9l3c+drC>#k*YtX%s1bvfee00U)Ps21Pu>-*Tt;btoyMYS?NNlDjXDb z(ZL8%TyK(96qQDxY`ch~+K3)}k#!nktJUAUrR{h5nHaNJp%*v5Ly9X4K(8`PS2GQ- z1kAb&24vh|U%$dPxcg*LBY-WiqLYAgCi_*%3FaRL!0Bx~frO;^j^vjTCbtXU>|v3> zQond}D9e?qYqo+v=8}I~v2MM1*W8kAaPW|ZfmLqdmz9JoMZs_((~~O0mTf+sfLU>< z;Sc6$YV&IH@;L=UX!S z8pT;#H4<}Sii(ocNA^czy1XPyNk5d`J$0`hT86j`Hk&F!x3;!^3R4prObv4hT39oC z%YzY2(9Ktv&D3(#_+S2AQ18d0WA)kZvt8`EmKe*a!(Pmi8Hvzj`!PA%!>&t+*BpWJ zfj(=yC`wd@xP16Wz^@E*q7zS`V)v#hmfzRNDrBi^|HCH;7rtxr?{f&CNBw z_Dxrm62yu549fr4x|KmdrHfP7ROVNk;NiPd2y|o0gY`jz?4Dg|I5-J|MaakRG-B3G z1{v~M(YVu%Y)?fbJe+<-<`)PHAm1wz<=fH@#|zKBm3HVGv-t2n4@h~a#O_qS?|A?9 z_#y;uzR_p5UxeFQoP{GON)RbSCmG|=Jt=~KgJ}|n1g|Grw6w<`E^jsDDZN1S*%l%=L z>j28NDfr*J7Skd$FyYAzF(A@9lMDT3_x+lz^Zb=YawaBJ*}So+@x$}@$z~&9Gwh(g zIA;-kERIHzhaZ$8MHZMWly^apoXhihq6896NnQ-IunD8K=H^;vd|2NgWJ=fxfbyOu zWRUm8nJe}@U%&bD+a>eYcg~4!a#R3FJ-0dfFoWpjt9+>W{a+6>sQkw5`>d~vCOJQ4a$cdW;)_{Z`RB8?5F?9VanNRavWf@GeFC zTmJkB*dlWpT&p>AVZBbUq@BKTi+%NFjHdsm1qj;;%3x!~CnJ^bF4qS-KNTi4ZmK1Z zyv?tAU;E#fpF~S?ktwtZM`uEPx^K3Y>acLfq8+4wP zEk061fjg#_>NLBL%u%5s{}Ty2_QX)A8!NBKXhqVYN->+KDG-Tlz9vJ`PN&Ak0Xs$O z?ZC^fT`i;swyV-nB1_1kVfd3Au+EgrG)Q;yF`!ZNlz?oc2t<(Hnt)nAi#p=7bI5XZ zvb?hL|Mh5vMydP7LUjb1sGW&s~_%QTtLczpJ~G$@ykXTIhuW!uFVng%tq#AvD%o?H8MG zSZM%IdzxMHiT%pHPizTzLvmd+#m1hdcDyY9XVi%Owy_hQam>4 zb@bI2qDeY)0m&B-nNbH?FnmHj3>$eRi}URl0HNlvx~9%>rTw6Q^g-G%O*gpTJj3hu z=c~T!%agAG+V#V~ynd3OW-=fifIwq&@!Xjq&1~7trw1TxLlZ{R=xgHfBU;R0{TDb0 zY1uL8UbEzbR`bl{RC8$tq1iP_ND&d^8|!9~({)V22h$`+C6HlBpWH!F~P6$9?8*@QY=&t_$u3s5~ z5MwzVZM98d9|F}gw$+PsWDwa?&DfGuj&}7qkf!3_QG?1`ZF}8YCIhkrARo*{a94BW zKt8qW=kYRYtM~zklhyc%{Q8(eYytf|q z^*(`quD{bW;Iw@415jH>KN^{NaXm0vG&2C=4{BL?`H81a4{mb0=&ZaRfWS9OvpD8I zP<*cI`>09x44s_WQMP=rixY|Jj zs@F(rvWrGyUu588l;y-L0P%Z^f#!_dS41?0B739P*!sQxB4cn{rsx4kpGeT{Lh$wU zLGAh9cpD%$LCg8J^Z;ZQ-U6t*PDxQe+TY)u$%^SDBA|Xvf(TNdtqcI8M`aQsJNg#{ z-;a3Mnzk#c&X9=w5c36NzF+z^@(e(0HXH|Ex{cVb`Mx?!8*X;C^#+N>WD#A|0Hn*Y zEfiZt1fWdAx}shG#q*ga+{S}8qkvEVjs8|BOovRYU^Se|?uwu0Qb5Vxc;At`@xR@s z=?MaSjK&j$9KsC0Y*`V1+$Fsq}SOmM#Ki`yT#mc%^PdVgmW$vzT7{ zOd?J;2fx@mk^ADMOmPDcS_!+zv2C|tX6%ihv4C(4dI|^~Qh8aHkrlM&<0VOPS8fP` z!P)KBNB?`uF}4O+VRZFifNAZE=Clu1UVC&R@*z=~kOtfmISdQCJ$roWlTk^%wWsIk zA#7V89L_6s%O@RxnAw@sJp8VhC z$zi67_X~h3-piO3;RVpBUcGqXjHmVE4?Q|wVklNqA1aez z`y!i+Wr8x%U%z4FK4|+keZss2N=UugjZvfByj&+IG>OB^CnUtay;4AYjxjS;yq_Rp z06@NpB<%LW%kQ2pke81AsLLNhKR46taPtCauR=k{9>2zZ%E>|ia(a4wD4zvDK3=fq zwsdSEZjAbz@O~UnLjbY}F7B2c^V>!Wmjx)Fk4{dG-+^(1Ff)eT=ck(t>&q@Ef7WHU ziJ2S(0A;0lHZrmBF>6V#S3C_gJ+|F`i~e5R6j0g*2q){8)ZZ)~v|sta_>Eb!zWv)X z(-Sx1-#7~B8hz+hzK&BNtVaF#c+fF=;@HI84tpK+(s2$+3opCY%5$N1#*SLWyEGP%jMEUwkdOp_AY ztqrKh4?+k;poZLAVvERuL^7k|SoHwp)y9j>pO*vaWo0TQ|2xooKTFAj?W0Bq z?OJp`Yi`e4k|;>0boBsa3LI?VwldhpE3rDa6>Az1v~cEW1A;A~DVpq>Kq zlI=u4H)dsRWDn#Qm10D>J2^{U_swnn;sqcs54>L#kdX#Vp9!_Hs`|mx!+kGxyWskI zyo?~_is8&bQB)Oe#)hS{Z`=u&W4B*(@~a&y_RJ1^MP)y1tULhuVdKTG!K$^*PkG(IjV`@+y@!G@V@GSYYZ%*1NUI5|(k@*Hd1{yHE`rR+~i*1tra7H5XF1rBmS)?}y z#8w-h_KAX=W6~k5oJzM7nV`e#4krgj3sRpVt2Cc9+qx9`k+jr3;F4vWXU(n+O<+wS z4UjCQvsh4+f9`sx-zw-<3mz#mnCi3cc zKiMy%mlthnqOo#ECiH$sN7NGaY0jIFRg{vrcIlJqD4)W{>sF?6v&&jOG3cir0BXBi za55Z=fZdP2-kSBTKbo1Ix(@&Dmy&_?fwog;&yAkM|JJMHRfWD|puh98p4ZgiA@bAy z%j@{e>K88s#ODI@$)L+1#YtB94Zqnh+!X%hO>37N=e4&=BW-tZwD25AT@dvUQNVV@ zgIe6KFT3AU?4Y~@XeFd@cDPN~UI3jB_Ddgw1~(8bqHAjF9kY~Ha-g6Bk+B2U*4B2ZB3JCz#!sXF)6?@r zr<=nlTF1%<%#Hj9fZhlJJ zJ^_%H-iP%UH2a19fDO<^2=kE%W6Jujt6M%M(V1o^@)+iLG3-ZYdT+t3JH`mO-zmVgZw9JxPIFLVdEBT*bjgWdxh8a3IWLL3OcCIFSaiL z#Ki#02m96DzU7(cM@If&G-XX2R#oGO3NrGL_sc%YYFpacwl%7<^jp4+O6fx&SbejD z?Q~pJli5Y859>8$PR{~rKB4oQcy^l&#!qW#)}|2~26CXT${5bnPAMBTr+<_mTQ!2<%29O824^X1n)Q?KLCdSU(aQ^&x zPnSvLI2an=B_|t1DMw~QWt0~T`}fNsm7j|l80wFmwL0Ov$6Y zy+?*b$LqCRPX0D9K$dD zBu7yKkly;&>qX;(&bTkruhZ*&QV+leKjqMt;VZgS=rMaD?r)SR1I$)g;fZVQ} z!+Kflh6}Z;zB^u^9klNk>s#-AZL|bvw!duI@=@^Hx<*7TuQSdRzKjl+KT{my5dU;B z!AF1TM7;j74u(Nd6UqC~9%pQH#B};WSVUuIMr;_S;7-!ytA_iIKIwKpjG_a0eVpBn zMYLXVQb5@W2|ZmjJsBTV=negb*vWucd5smTS#}t-B+szhR9-U_v=!{ywQH-&tCqhE z4*0k1#ueo6PA%e*1sWZnJ6=^?Q_b(S(HMh}0bxI8Y#3Ol-`d~X^=Y^3Wh@g*LW*qn zQ77GwMYLWBK%5g_zSuAJ3XhMBWOBV*Z5W#FLm;sI@!rmxt;%IN=sHwKiyj!RoDBaC zo&<~g@vpv!25jy6wnxh=DzDTBnKPP25Lz(Sk0BeT()+=n_9iHkbhD~P0op{?#7$p* z)hSK@@-Y?=FaOCG`^7d-pAMMcR1EkIF_<%PsL^yESTaj_5YL(hO#%6J0KK-81-ePq z(t><_)5fntRL5H&Cp?*&vR2YTrq|K)PxWzc>NN$5=qT5Hnxw7uz&_I$-wqOnhh%49v|=6G(xh{iNmJQmE-Aa%qPstx_CNKd9KU=$js_n3w{=nA5P5A)-$#XsGFRu9=tjp zV>j2;RtOt3x}7o~u%3nJ05Cj6lhWG;29CILPSva83;i4vKLB~~gon$j8KU6?{j1P?t>WWqCPbU+J)gl0dWsp)s5Q@gio*>C7poHS1d|h?`3;p1^y|nsz9029G zuA~B-MIUG2gTRuqt%~M!&nqA*Dyx2d=4Ag1{2HTGI}Iz=%wnQPp6XTA#G42Dj(yEd z|9VZBU(rI{j76kQkpj>HaJbER#Tzr~*{|xFy8BKJ9!G6N;GdZ~UZ2E{9|(>YFOwuk z4nb_6Yjgm#7dG|IB?LekHLQ2KMPD%zt$sK$H@6)rA28_DSS};*Ve2z1mc2W zc94wNFiO=g%uHVRhqGtTPB}e*IbmfAJVkR+0+1hW7`*$1p8fJGCzQzHS+(lv)d}VN z2)w{4X=wV>XHU?#g)cUy%*nZUZCiGNu=RkbQJ%;c3%LwO@nvaykiAYO=Wm;w7}vn3 zc3FdMJ~KQAAZI)C)aijW`ICux0-OWB7=hF=V;q zKwLfWC-gPCqnk063;^-0lUp`}Zv(P_68`cB;ecqi_)V=Huajlzzwq~|$#Ko@hkg1i znpT?*lB;1UIr%gu4`LKzp_}1*J;>~}=l$MrZ(%(SgF|th6Y#;Yz?|-r zt0wn}R6hdi2uT2`Fy)h4f2w2A=->4BbbcitbK==BmNyK8)k~D#0oL!1!@}w#M*5Zf zFo?A%Y5;PJ?9FXY`=umNP0PWDV#p`^wXVH=eHp393SFTGA@&-IZaiF~`{2Odl+g_3 zAs&$E*n%j>%qWl&hE&e`Q0P24F}5Ap7iZuDV3oQES=ZsGaK2s=#JG*xG-AU*=lPEQ zp6<^>c}FfUdjG~kwh1dn0AgAmS5Byf!hW^1cf17-{Fn8Ikq04t7EO`M0PF}P6qK4l zNmlPBKC(z3g;Iv4QPSoN-|Y0%_C#Xd8TjN-KAG7i0D!9Czg!svI$a|pHVhOD|E|j9 zzQLZ(E~oAB28kg6IbA)A@>X^qBHe)Y>vo7=tOWpHRQ9XA1IT;HFl;G;(A4CFW|zd$ zw}{Nms7xV~-)`rG_4Kbi3Xo@JreM96+iJU5zqxEz_K1=yea=u{=VM;RDOwi==c5-# z4q$oq@F1{Cgnp>Mr|a9I?XYsZk7GXKf;$}_D_?vR5XA5W`N&OfGd+Ozs~aq6F4M<- z&L{h&U7+?3I9%4r_V7ZXQ!1+4-F^UO!U4_P_OTfCcq?`^NkI8oO>Lc}olj<*3({uG zp~Kq!UA(vJOZl1~BqL(^B&44W4|kdeE;1Nko+Bf;UZUaypmaJO zH!nNSe(B>r=fn4h-zB>|URgT|Yyv#%t~R+C;sQIJSW4Jj(~oQ>*2N4a6_wRO-~&_z zk-*R;r{+3KXKA-ma>M@dqFn1+e!U= zm34Qj^EEmnWQXh(aDoOPK$qr1;p7ADz~?1Nek(h)ya)8EmG$e69Xoc)NqcU~u5asT zk4e%A@%nIW;L^CnAk?sx6cxn3?)Z>IqET`15kj8S&cNk=5H9XZ#rMfuNj_5w&xWa# zykoGp^Y_qtLbM0oAhD2b!io-nkaBQqsIr9=hs)DN;=_}Q|kE-6TW{a$$J+MVx{`x?wQkY~f@rbkxF6?F~6eccWo zEkc+S)FsfXLu;C%xZ*f8~Gh{p1rbLYAyowUn)#^-w; zqT_USibY!us2sbv)P;c^ZylPCtfy8>0GH@ixI}k*T_#PQ;Q)vVSsg2~7EXZMEAX)K zBlEhk4KO8mjn(+!(A@@n`+s1W zrl!p;QZ)8S#(Egl6BTo~m7j^Obr9v2x3@1_Mk@vo;& z9oII$rM2S|M3&xVH(qdRy>Xzg^SgHC{QMo$2C;+%88(a%#}rI4#0W1g00I>}oTP)0 zIbffY4d>Y}KK2h}NBGm(Q*n3=^ZW5WU?yPlMF1a7TgQJ*ZQFLihW#f15nAXPd?=*0 zS1|*5pI2{hFRR%#?o7*=bCC8&7_c;{u_ z%qA!kDbeLPG9h{?eZc9%?PdI;b&CpsG!2-WmjG1v%w{ABruq{TsU)8H7Cy60(dY2i zZx)2)+!BvJdDLhVTUs`6rjgh|*tpBgK*&yI4~qzzdG(Hg{;p4m9+Z5S1D2}-97{g} zl;Ulc0AWG(z&sxXL%tgzem1bOxgP?$ERpY7&W(~!K)UCD$oKr2Fq%tH;0i!8ny>;5 zOja}i#OxZJO7rz5`wW2c8Fp2Fc&&^O0bu(f%3-V3fnT|DYfa5E=|`ZBHxC3XO!;fkG z`c3O%6=lO_n+6x>n{aVnYqzPGnY65`;TOQ3JlC|Wjer`-Nf5|BqRvaZ1_z(KXxC>x zen%TA5YYcXbEY-X^4VE4!@LdvXxtz&UT}%&gf-l1x*vr67S7!BMB4JZ3=>Az)Gi~j zSUGVMewYu<;YNGx_nh?Y6%PPGGD5g4&2TyQI9U`v@I2N-+Y!wFb?J(_yjec;;{}TB zxl&X%54B0@2SLmCUXeMXaJG(CpjHRs-804$NEM34XR8!K-<00 ze$GuNSy?*|1Le?Y*G>?>Gs|f72dt{D1-@C? z74Pjn=%g>5MYLlw=ciN;0_`*)X@pq>K$KM6dW_0-!@AncQuZ3(M;8Xbz~6 z=wWy^Gg=gxDzEA7?f!4O!x_ZyK#|=JB)=98#OQ+v9IqVcJ7O&u)m2>Ewym*DqQ8Z9 z*IJF)>;h{_B&;ZDzD93`3-|RP=5EwxdwY9%l2)LW%hKn{&ae=}vQCZBtDIX4cYGMu z?VqjYJ4eZeQ@uyBg2&}+ebzQ^ydRQMz81aXC0TYE18eJcpt>J-3t&OcwWt8dsr-j6 zTu!be7n(G`Ho?yR1VqC-;yq73;+yH!1vB%eRfbM#TC zZTnGv{f3PnotzxM14E5K!2CF{mo0AE)okb_soCuva?__souU9BOrZm}V}}Yblc=@qB?x&}q($(L(t?|8dRq|aE_RbLH3!EoR5 z{$Yp?@LjwP4HAKZbsg0}lLbX;;=qaT1Q0ru_lcNvSnvSEvRi^Z$2Dg8&_x!LZ2(dT zZe#@_eTb9+YV1*1^efHECMexF+}qhB(w0$~4J{ovMk12q2zsn7{?6k%O^zmBasK=< zOI5Ygv8JK{NdLpTL*!tMfQt!S$XQ9HS9@`l0Lt+V5h7c%oGMlSVW4+$Y^E+5Z%`u!Ykp@Tx#JW*0D-kCEF$v0dz~J1efcbvGsSiX+$FhK^Grzru}x9Qy%v_uU|DzBOxZ(23R$JB6Z@5Ajz>Zucml zO9vP>nnxt?Ys0v9)@|5yFC?dYllA~4CmZ~repvGw6+~zqP<77;VCasTEL;H6LT`{g zevzJ;#YbUWv_`Y~&3B~0#@3E!M`g)8v;(C-2Ws!dj&{(du$|+pH3;R#8v;YlzZ&T4 z{*jY0f&$=P&@^e6iSN%1_(1*t1S;{3PWrbi3#Ji0Kxvx;Kc$1PFHLss`1QL+{Y)m0 zRa92i1d&>aJ;H@x7gUe{#Dd4OjF*0G?7|DMkdeX9L4!~Us0*~W%3)u!+7+dIDE$Sl!zGHX4h(4MWWa1rnGyOd~**$reAUE2r}?X|yf9|{x3q122UwGR+H`!Bz7Jm757>?0>F;Y>w{9qxeQ)er}MWf4=l-7VQ#lr zmQ%=T$V_q8t}Q=)N6lAt%`z=74=hh0?h|}gSw9p!Zs%Qa0F+6cL&+F~LD15!`2Fb( z6a5nW+Km%PeLJh$Hw9&dyrI2gt4yWeu&^X{V>SAHK{$;-0+ELxKb!G*x0W@xN$3J| zU8aLD2FE}^)IkbNA{#brq*6gk`u>(<@**36(RsH)}2x^L>2Wp zW-)!lMr>WGxpnK!;O6i(%Tfw`MSp+i5B%uQstt^Ws3wy4q4zs}K|YQweY2lhHmB=T zPyoay4s;WGKy>ms02C0Jn+rf4KZA?;BC~Pk!{oon3H6;PUY>~u@lzspnq4$Z5 z&ubYB?p9v4e99Vt$k$+h-t4t6yZTpLaYfb0*j#2TK?$MRI2Mu@E>6tof&ri`G)}6J zI;QKe-DbJ{oexq58|*5?fz!TMtk?|c=VRk$^$4Hm?@uS}b8=xEQkEeenP$(UhA#giHAhc~&R9$Y0u&4sV zA8n2tC1s(F-o==kvnCk`fP_dEMcz|=M*A~k@e^h4MW2G z#!}fpQIhd!hhY3b1;x?l4k#E`F|HWPhad)zc7xALYuQ|30T8A40;ue^TL8@E1f>6e zz@h!IcDd6zzL@|!j{L z*C_&kJ^}l%U37eYlq)O%BE(h-zhT4E8swOI9^?);4)h*5kRerpedA*X8Re1ZHDEzG z`I!UILI@C}GLVkvWsr^s;v_HL*V@`zN2RI(+sqmULj>^u60l!yaN%c`cbgxh6^1aj zZ-e0Uz$Tl2Dk1L~=sEJCeC-hLFsi3aG;kth2lE(M2w{V)SQ6~$j>esgQwz@_k;D1U zno)EB)ZD)HdWpyfAyCS#RGI!diPV7gG_qc5R>pu-)Hf}aGyYTiGOxxWAiZ5IXb5oe z5(xM3QzwTeh_WJ{;YR%e0Ns}pbWC7?ZqpD6H0`Je$iN^Dlk{cFN^}+$56aqu=Z|mUm89ydUzXCFclV-kS=>V|>k3*{nW*w|=!YzV-_(b>S9_E69gpE^&@;s`By05Sp$ zzyaIZ>@`Y~YLVB>Hj9$_-2EKhrfn?8u^ISU4Mp0_hNdQY=$8#R7<~=VdW^9e~d*uqmnFRyx@a+YC(x zL}@0Iyr(5AAC!lwLL1+xZ*&lEIg- z50|S^6+&8CKSyiiBWa~J7Y%8H<@mdWhQKhvCq$G$e$LMkneAuC`nFJt4}U|z*pos3 z=B?ZHPN@*PH;!4~5cYi!=~nrJj)N!}}j zb`17(S~#ovz4g}Z!2z|5U6fnf84Csv!HRE;ASa5Ah zLe`61l{{+9z-MwFx+`%kT_6GQt=6lM0B8pc=3!>Nj4~UdD6l};i??cR+p8-pD?#Iu z3Q3&)=eOWsWF3Be)I+uiivd7QEgkO%k=1*x6ibqt+}tN82S`uPT)q#uQGXy4xdl=P zeN}iYlziPX-nFhFmC_dt^mhJ2xcz_&0>%87Krw5U^=2QOw`n+M)d3I10Dw}C+WH@? z{J%16n7JR>UT6)Wr6R#Y6qfx{~b_nJ+CP9$a%z=|C|$u^S3ImrT`MeuiNYVG(6 z4D-!a0EC{_O4-c($)28JyGxL--(f!z(3gF%veaX6H@pTn!fvdy8y`F}N8#n&VplGo zzuU%ZN)M*LM}>413r^7a7^4vY*-`Qw1!O2#)&K}Tw3E}yQraA39CovHDkuO#!7)14 zfhKIH833(Yx9Rd&Wf=&VQxp)YP#6foe}50^W^7SR*)R_wKinKRU}ydlw07txWm-Ks zH`^YGL=~qd^lru@TE~$f8sZrNJ^Ct`;%58y=?_5z_Hz4j`76QXAa*@Yj;Xch&UH=N zmGkR&vvJu)56DO*TNK?g2SEJvH835JQ)ipG%Y#d<# zgcCv_l0jgBpQ5TS9_;JVQmkmsr;(bt-nYrAm8jRn2MXvr0Ftk?iU>HDoZkYusnnBw zM=i56cpZzA`e1ebLm2a4iPWJ){TD)I1Rz_lc6c_x;=S{Bk#_S{Mw9}YA+wjB>FGI_ zuW_L=MhjKUe*%#lYyk)i7J*`o6RI56G-d*Rm_f|BumC8XmIoFC_*1e6kmW82QL#@y zaadgN+DHM920(C2(pq^GO#cA@>{+Z16R>6NU!E5m65oOMzVuQ{8IYRP;tdb?9mPQL z1@ZC5o3;a@Duk1j{+cBuv?>o?9lnGwC&I50x;KWVSgU9Yc?Ob+xRgUQSl-V zXa<0&vWr)@XYNJH@E2K#Q7wp{&eg+i9sK&eumFhjWk~^xv3ESkb`o&VHQB@h2%$VE zMFpWiceuB+X90w=Eqn8g_D!u@e+Gy9MOFZ$Ce&xD5h*&<*J*9A=-18*v;(>9-wEz6 z{~=Hm_CW=ez4U64R6m6fenUT}mX?l}LyW2K+s!qhDw~G;x=+}Z^XvC4079#OqV7S# zv0eLis&zgyjF~rqT_1k@UQhsp6XF-#%*wf`ZQC?ZJe4T`$5`i@Mf3tIW{^fV6|^j} z7l5moB$K=IDQkhi?;tdnuC|l`sq@c?(nw{HshOP~m<=r*H%21Tw?*n8K_Yu2t`TQNu)Gjzv-?QseA?milo~};2a(?}eKmu(6M*v}lm8rdEvCj4V z*#QtQ*j_B^2gh7+0EC0$qVya3-hfPH3J!Y}md(oC2?1LO5J3t}K5MY|=pXz#1YX-| zY2Ef~D$zf)0w4$vdnJ|WB?EokKl0k2U-dV%Zh3J;jtGSa0gdDf;V_{?=il1(KTl>G z3rX9jJ$!B3fO;d}v>Q8wO(__c8LP1}GZYA<-=GJrtiXJW;NQlNyC4B5gWd)z^Hr;! zUR_zEOz`0%77P-B9#YAl;{BaDE*Q24E5HIk0X-@c`ARFe2jTe(z!hL^e^1x90vw8? zrqg-D#8^VOm>`&Yja^)296-J`Ng|Wp(7yEz5h8!xu53Qzh}(_D?suee48sxwRfR^s z+5@hOGi2AM-@g|m0Ht0ei1;Q+H|Y_aX)E|FoBY3nfO8TAoV9*0l$Z8^--a+7(sQjA z8{+{{RcQlb%CC9p%g?%v?c3Tw(3X*6Lw=*41>4-U)|NkMpZ=N zJ9l^chb2`D2rMn_HXv;uFhpaN2Q(o>LxM)555z!>s8J&Ujrt-%eNc&s511Il#KssC z6Ak$Lq`{~>sDuzLTdQ4`y3mM1L7-i1d++$2xx3rD_ivW=cJJ&wK+-#R=FGXX-~60& zz9W+f^KA>}Tc50+sTpgAhX#(y>Z$OYEXiIBhegX;weLc`bfPW*6-?+@RqrWdHB9w9 zhl%pKb@yYHf-%gZ=Rh&Jv1>RppiG=mM`!o2@-SSi(zD`makADC_3)L9mv=pHBeH60qlgU*}J0OaOB%eCxn1po`i5s{v z2DS-z>MEHI!hEhQ0MQ^tKq`ve6pv{5w_xsi(%SVq zCG?#^M=+C{cQdXpKY616?b-Ad_Pc&z0OkD%YK{4oSdy@CoWO#T3R}+EwpR%!v{>8} z3mWztcY#fU7Vq6I03z-mjqPv-de2seGkITW01_Ysw6=2u6;lb@cR)@60yvGq(e0X< zC}b|)!RiYC5=MR|0nPJG++<4uKp=O=Ri`4QA^<8l#=(+w8!Sn|1Y?~40hj+3iVUwL z#`4bI?YO^k`J6fBoYJ(e+)#f;HThj2LyI?~Sg!%%*(xg(aZv5-7k>IuAAsPTXh-oy zsno(ot#Jgqi5Lya>lg;J;s|^tq%ld=nnZ1>?t|cO+!W{s1T!|A3Fezqv4hCIdA?e* z$@-}bfV3kZ>bkk3W93RMmiR5GO)L%rnEc(ceyjZ)Uf<7RGD$Pjs%XLU(iPpI;!dK^ zxyvb-^@(@OwKJ-=&h5Y7DEh9bPfELk{lGChGonbrOlMdEARB}Vr$o-iCmG*(I&)my z@~cn)Kp(}J{y?xS=7WeP*C#Y~cqG%GQ$cQ$0lFTCj^T6VUvPZLV zL3scYlf!Wg!=H30n9>L@uqcJ6hd~Z~K=&V`Qm9wI0HFNN&*=sCCY3Rc)9PlR^A?fKfA?GCs8B?kbR%R zj^P9RzgbonE(8>VsEm=oOWp#VFv?Se5E0bJwAFUSwYRTY ztS4e49@enqK=|IU6ck1~unz5kbqHM6MRFCLBQ4g$j8Z4%2lx3aWJL5V$gq>(<6ORIK&B=+E zS-kF6{FpyfLvpdBxr864ze@wq$1wTRe`eEr3*Tv9P&^pMsoVlVa$`sRT?JGkN;*-x z0LY@+aAi$JFg6{(T#kuR&b8VBAdf5=RxTrW&ww++u0#q87#rMI{D+@~kl z$3aIh4CFvw%RkP){BDre^fQU{b9;e*gcN7)w?V}>Ra_P=OnREK$Wt~V& z*z|KS0P#Z;`STkSjV({Wr2R&<07ljibWACw6TW}~^AIu*4)GvZco2$GCAB*-)bmy>O1UW&lX6u7a}F z>?7|^J6A5TAmXBQjWtL3^VnwY3IDUsyu~8@fn*1C6ikk5@I!b}rF>aIj))cu0oMTd zrFkSvag0~8SVTH!uFbi5lX9)gGJ0SK^cma@HqDI$;j}u<12mmWp8V$U%lKC%>sN8K zH3mSdaDI)wrx{Z>VK=k|!tbVm7$#c}O6WArc&3XY!!!beJ(Gul!;x5pU!!M9DW|hBQXEEh-*_;7 z7CVUr6qRjE7+>UagCpTj&#P;ZxR;umP2UU<1ppcY0F^GOWfUHG=P#_pi?2?SxvkyW zy0W>sC2>*Oi-Im5PMN*3Xh7$ms&@HYlRF>_fTqcm#2_lj5FnjcRj2^(?L54<8-ltb z6EFCqH|yLulFbedRza-5E@VH<0w4DoOzs7Bz)uQlqi+51l> zS1e65)JgNPQRa`6L+RI4lHCPBL}PgC|dEazFey=?M0000EThQPd+}-`)?(R;I1a}GUuE7&r0zm^L*yFqRzNwm; zA5%3wHPhXD_u8wYRh4DYkcp8206>$MlTrr&5aoX-7y$qP+|XL++Xc=|LS6&>cKCzM zqX2*ske3qI@HRT{L4?w3d$1X3Zixtt=5OV9*DOzc!NwNX3y#7DV}db1ab+PQJdsQd zj(}iiKXHhmUy_7gala$J!IU6;0#j$vnuNj0t!J-s_*i3Lt#I0MK3&m1D!3%mWip7AfjQp_sHUFeV$+GQEhM6#2%;px|FOLtn2KH1T{tDJ zx$G2|h`O1L=EgkLZ;W)D+u%%wj^yrsZxba}T~WO^2wQBg_dYupJ)xRcM06pDC-+c0 zD^?7f0Z0;ao$fRe67(Zak}M{{VQ=>(=ZRx(vPsF`3h+x|k#$zisgO4td=Br)R>Bzj z+<{Bps1h<=;h0Ez;x8euyT(q3MA7!{+}=UN#nSS&-#*7oU;Cmorp!S4ux$Jk#@Z%+ zjc0VgpgR)+f_7)xX#I)0!xJ!YdHr^R*oWjH__OX^wzcb3dAz$c3@ixblRzuVBmp?RHgat zWj}WBWFyF~zk0DO?03JXfQ};ZxowW^QgI9-=&u-j{UFEIA`l+LZ^O<6vfPg!~j>?M2i+8)b)K@ zNBqYITtU}@>fhOZa@u+^wXW39?_~bzhZb0w2;XC4diVWCWW4>E59jXH^2I+7?wsgP zT!emGd+Xn)1jfiUa>!P ztxwwEkb(WSFxG$Hdw&-Or3-fg@YroWYl+B~#r=<77ccjITPe-9*#eG_o z6<@hgH|X-Sx4$GK+J=ereSiVrA0GY?$fg*j10*fTA-~UlD!EpK>tuy7V0M?Q{_TYU z=QpBA-I~dUisU(&ffaJzy|&^0c-WALQ{!Nl0YUv!-2AkEh%|l?L4s7MrI*#yl$jiA z0pxp;Ers`Y@96cg?p0$){Q2AaZ}iifA0P%P-!$s!d|n%Ific)@a)*lmNvY&O3WGiE zi4-lE*Yhd^kHpThXKPdQOI`90d>38TzfS*(0;AKH7{VwQ8L<_#$LIy&JQ!o{KZcxN z?Ye(GJKyc^>n|hyFtzkF*aX9u6)KI9~#<0Cv zt~(p+>jevt1dWp}O@!}U$ffO*Sr2~ANzy#;g73ph&$~arO^kWhLmWa@7hb9vO`xaV zuSNfo_tpw^jTsreF@YNOE0{N*%O$yy)x++vwPIrNlkmgDzW1wN-o0i!HyEk8^*%r~ zxjb_+W(8(1z5m9G=S&oH8t50j``FHp?fh;{l5!&9_u^#zh3y&J`-T(1ndjUue1Xfe zJTw0sM=#~c@p8FM5Gh|SE4o>tsu%{)b-E0ThXfXr$!hJMvCmeg{0k1LSz|#HZMo|tAB~zV)Ry{Ye|%?-K}$z4NpaQ>gDFb~k$k|1H~J5l}*UML|>|cl9si>Aw0-ADlg|(U-Xk1!Bu+OxVV^DPdhM0wFP*T zR9|>8Ke%^0pJA_YZ}PIT8uBp=7cXXxum#Sz&_^E2fIn@9WEC$o(+#SzRLB?y>Fj%3 z17l~$9y+r>jJ{o1Yp3E>IoenD4owE$bg)k=LLKBNE@Y4K~ri(#EcfUoK zD;<5Qc((nS_vSUx(hbcrM4{|BcdmqJRm#DAQ?y0Hd%aL5dOm@3A?@EnxBwhd#SyNw zz_1@fdM@o(%yoala^@(l$@Yz`~a6VdLEo*%RCQHIdwx3^;9 zKG_gl-VD8yL7?{Jn>MlgvAxBOh-=#-(+Km|G1UK0DM7XP&v60V$BCK%;Mx#2CsCnQ z3@DZzl|`t#vdyzUqrc#bNxu77{}|;Y3uN(I`qj+;;kG~QEqE*o6P3S5&{GY5lriY` z6)hpHZ7*y=Btu|jxB!jK&3TP&=JRexHdjbRbnoG@SK^#Xjt0YXoLNo{de+THa{Wkb z_CbR*JA`b{Mea=QE~9*~Q;EUJE`R7 zv^!TWAa71=n$J3h%1))Q%$`4Fw~GaV#wd4qe#|ZzIZ@x~Ku9jcg$7E#sxzcH{$AT& zPl}<@%b8#Q_4hzODDs>zqYX#{$C+h%@tZPt`!Xi}U$kmzeyP`JX30-HKmP-HO2kF} zEX!r@_(j3u0FR(Aek#8A+BV_uii)iE59};7cQo#Ugu1EoDwdb*-aai($G@+9!c1jivfCkCG3Jk0OX^nJHWfwi zetSy~=WmorWjvg`Tyu_Q6r`sWU-Nq?(8ANavXM+2Jmi@e8M)ypfyx2SsY7KLp}B;z zF&kSt%r>?-3^bngGq#%CBQk&po&rC?`0lP4&w@$BqfYfI0H%qXxh`TKW5b5|2QZ;@$LS+nrho3GOz zjQFvqLF{#v&xz6Vfg<{%KiGMw6XVgo4NeQjiVQ8^_JabVZL%j6(Us>&AhNh{!Oq4WPtcT zY2r!J%Gy_iDuO!KPAc?`00_aq(4;TIgZ5jwMLR=goR?5M`EpV;29PQenjBJi+26JC z?hU(U|Aha|M^D(_>*|wGkn@y0qDH5HUy^Qp><8q)b2GiwZGiU2tBff z#cuqWo*!`(BRjvZe-PIVL#Yvbpn5Fhi{aNob-R~8gUTR=wK*Z{b}NFF)0+N_D5R@z z81cG<3bMBH`?$Wbp_G8Q-B_-eD)~nOXRJY{Dh{-LDL?{J{kFz^g97bTVTT>{LhA`S z*_Us7)I+4y?WFl($EQ2|N()%a6VM+9r)z7JM|*l%>922XDZd!1Nf46`UZ+^+qp#i~ zQ^o;u-$SmWPHF3a%C9Kdk7a2}wF=h+^bwE7d-(pBFRj17u`{IH+46@TrEglVk^bWU z+bPFzt;_90XK?w;H`SScN+hKCuBoX<+Ji<>5he3R*-_ZXr$I~*Dzkb_m`!(>UtVS+=;U0fx^BEk?n!ZxqlBn2Te-o^M*kw0NHRxEv>t5oS;yO zE986c*tIs5-JY3QyBj_|uK}yRd?N!7!$k$lXLg7OG+<0Kdt`yL2(5aAS2}#W12>sX zU&TL(Lpfn7Z<8DxYs)`ixsKdfvc*@>C;V+l0{-#ry58+ZnIk~{HosmYK)rQ`jEIX| z#BhM?&L6-wUNM!_Zcsgq;MklTYzWuU!oPnC>+P{Of89{IcU(M`CY-842WmS5-Jqh@ zgm1Iq64!PoWEc=mSn?YD;x?5cEK-$<;`SXZdqKfGW2`E{KF>eGxUs`^NAq@byW-Ob z?@7Dk;^rPmI5igUGt#xTcm;fZi-KIN0&vFG)Pq^ogCaS&NEg*FV@6y4Cv?wD!w7aQ za_`Cq6@i9FWo8cHPlC3AByo=j8+OCP@oS!|c3QgyFUtKFPrh81jo%K|j>{6C7D3dU zi&e>ll=kLjAR>@zS^Mqv)Y4^xy?)o$-+E4~nn@IO4~Nk0cmiGtZZx@9;80#cW*fj{ z_nwK3hd6y$7lj$m5OU+jk*_uHBH`ay-^22BvAH|X`aaCfw0L6}Nk|zrw)`3v7loJ3 zn2a%AA@@DllmB1Hz6M&#N4IUVSyzkMS)&xSK)jer%-71IlKyu)KY&{aj#XogU;S*Sv{b?EQ zPBK%t zx29A9J1L7qV>j-PeKhQT6`*X3K^&q(MUTvG5ar#}S!7KfIc$7_D?@i1KVSNy3+u7( zkJ#|v#`=a!_pNvU)hI^ijx+%N$jLz$>XnYqZ1M5q$0v$VDPu&lc?zL@sewIy>^dJ0 zI2=%se>6N3kn|J5-mdGqr?}+um3q33m+uzR72i^xmqBGK_Gz-Z{}vewFr~?x=Aks= zpiVZnv03X|8d9Cn{A{r|eaS$MsCtJBMUAmt&~E`CA?%K-(@BU72O#-%rlqpoE-TUx z$k$Wfz_q!wpD|@%OEazP+*qwZ;F~O5`IocZfiFh=Fm)A&dld`wiyW1-AGt{|J*75c zj}wYBbld|ise1|%L#=T3SX&7-Bb<_*-jbtV0!Wf*18hvqe=a*74*#}l zWxtg0?d;u}TAuC^c)XsAJ*@g-6hyVksS3NUV~kMhuyuTUFwe$^LG|(8lzj2}T7tH- ztw{`C*H+LJ9l|mlk&O_Rzrg0_nIC&&)raoxCH(Q17Z=;F=Mapf?f6V$%sZ=ti2K2z zpHk$G7mPqs5uA^Uj2m~Vx|+O=zmLhgBh+d*)p=-4x9FLoIc)~3Gv6pf2`4ik5&E9E z)`!3uP6;HdTJw`;%)6<1@B34;kuR8?VSr(InLY}+$2pk*VAxC4_lFTi8;ezf%=Uqy zbIiRRAU&T1Lqd&?hE|qR8A-N(bXjVTM z%)B};uTc10lwaLYT-vhqKH6NI5hY8w9_?q(NS+@(1~*CbQmKziFe}w~V&5Usv(M){GU)UyhAsM#nIh(m!n7uvSd2{>N_p z4^)~FssV$1Lh`AP_KPZn7z>aNvUC^U|1(k^9eYx?K>qc6jiXNIj}Be_PIa4i%?SI_ zPuXDB7=k@-I*QNFxPY9hYd4xW02UTpSf2=aTHgCJ8WW@7gmuP6GyRPrGZ3qrA6eak z(gGnsxBSy5eOl_$n=TFjqoy>+kcE?I3t#NoiDgB2QR5k#DS0CaH{%deGq_6e?`_m@ zj~}rDKF=OMiQtid;$xCiyO}3Rx%g_TzwCJ;$gdZ~84^~Wv>oWdk+nL>gt`&flPjF* zzP9jx4rBpj5Npj^xGXO(W4fa;cC>w7is|b?FI-+c2Rq}rTZ-%Z?SMi(mS;;7HXHwU zBKW{qw*3tZv=7{aV!V)+h0TC|bh7?4D|2LC5mr?xU~yF}+{-BED*)Fp*@C0~V7d8j z?E9Chs>%LR+?9vMP8~oZ7kn*|3xi2$uj>%&NP!&QycqMZP|M8f^j@6RpM(~4I`CJS zh2_~dkPSZU>cSefx=M+#xM$VxJU;-Xkvdlk>&i6m!+2WUuM@?bs^QB7StDDBaH}+S zh{_7;vRKQkW_V%NSAd5yybv*o=B9;$HZ$=U9_}k!&n8#6AvH0ktyuF;4jJrYB?cqS zsCml|+oumt+w9?mDkD8!4zk3X9}YT4esr%urEHsgI!3vvv`OCx5lqTa$6t9$>JBm* z6JvejyAi91bONwDk#(w@-h-|S$MVl2->+;DrIG&qSG~Ekf7Dzze=2dc8lUt0g~#C! zG10#hZM~4=FS(m&cqOU)1cyK~sG`U~2ZRJ0baJ18XA? z))*kMn0(b1*-GJY$MDqgE2ZN0>sSnVl|$Kc5duuum3n-|sUA4Mz|86Z7y9K4;teN^ zokHP|w&W5-yYof6L|}J|@bPB3+{1=8!{;q^_!+`|(%#GL1VrJ(?~hxn3eRz`i2Qsp zL@?x}t3x$|=-gi~w|FcRrj7I-yfk<(hN9CFuLj%|a?Rd_(uC7sF=8W2`<1PFjgOhB zA4e$3EAK5TFPg*IL-r32l2hlI!_A7;Go|$~9sEapN}hh}t{uXt`bg7VQq!pqjYMqS zs8a2S_!BAOogLlsO|q zC>wEjbdlfnz6Bg#9wy`=Qf81Eysi)E4o+T=3)Apnr;yRQydxipE{VEr?5zG$Zvj0z z^t{}p{W|e*eaR*qNX8uFZ0uWrzmEX@l3>E0>CBLacWu@}ktcK*fCr3`{G{sH7Y159 z?gQ}{=zf}C=U(E+gMZ;jQJrLVGE^DXse1#$meOoe2PP)C0u&pvocqNta`#2aU zk`-x9a8!P|NU29plpW8Gkw}d9$jro~-Vg6+{ZuXj5oVPcLXkO)m*r?K%`)^Rm6G(X za1akwe^|q;Afj^H+6bS6=h%MBsVy|)HT1NK+k&ghYk$at~`y*!4B(B(9LUNub3y|d9nX`i}J zaVI$upS|kjMFyb&Q2XOjutKG*2Nt$an@eNu2uB zM^&ZnRzgDtkh(cea&ZT$S>{VkcXS9V@rT^<_grK#NO{^5a0$>_umzh+WfF*Qn=oEuM_fqrb#MJb&00!hdzsD{qA~{6~jctNm zQd&a=n{=Z~WmX(-Nh(gnL;TJ!XA=o9v4!z<4_OG&@e;}=Y|y{tm6KCzwu`|nzC~Oo z*(ZjoqJ;1hYx$WURYoEJ#k+XwXQPh1?OT5RcWxxdE#rB(?+bGHtn6W{(-jmwNRk9a z*PY1J**G}mMmfs%FI`E4s~%Qp??K?GmLem+3Bhh!nmt<`R3f|@kVzme`QRt@Z$ZQH zAqZFuaamxOZ<^A>C|j;i1k^&Yt*~#Sh`%CTk$h1?6$cr4$VFLLml{bdUyh^{G$~wVC9I(`n@prhyn~<6@&{m7#4Ifs)Eu z!RC>FZHfXAER!r9#2!d>RX*bZJ0eCyAQQ3f2kvVHJb(dk#v&TH2np+cNluGRN?vp; z1A%+DMiDU4m3+>wNR%gy7sLRb=T&u^Jd@1^%AZ4us{orDkf*F!<>3U4SHRmV)| zCErSt8>Xm&261WS?XIqbEeI;*RX2N1sYD&F4Ks6bIuylc<(wzDA@+hcUb)I(tpz(E zSzHU>UrsT+e=BG9xkP^5pP#HKn4krv6h)sIPw&XuHqz5(%B#IOMq!`=8m`*kJ(2NikBv~PKd3Y@5cYwFou|EEwWyEfe$lmO! zDTl))y68%0L!`_@X&}UpFd&CG;HXn`Y`sJ~PrmwaBPhp?=J#kxzGhD8=c{qvc zFOTM4eM%SKAV*kL?Temzabr35?LERGx49ra2}*VZ@KGNO<|G%`H-!06tQ1bIF|gDf zMNd>oS~|gXIS;@@A-4AgXJ@916N{J%dfTqAFbcd#e$L%G7Uexc*&qt`DFTMpevBug z$w*+_6HpiTY@>SqyAeWOKSrI21?|FO4qb9LkF=y|F6`fmXSrmuhPZp`ts66kYb@gdft$K{hFtBLcKg9QXxSC&nbUd=o zNIEUAxbQ4+{5@-fR#{qeL?x&7tpFcl@bQ1)a=hwT51HX-v&ORWVfSM^EPjHopkfo` zaFpg8!SCn+#a5p+6GSLe*dy)=JrJtN zNI^G6itZoCh3HDN=$81Wjs>Ie!-C_K8ofG9I~`(abPaPi+t^a9qU|^nVVS;Xq7+LO z783pn%HI%KU75cZsPFI1_>QrJ7?T*E=V9sZCd7$xG3x-FiuRyhXd&)|%Q^yQE-5iK@fUX0lLP3bdHZ;JI&LCGA4J#M0#5`5o@0v7F9n76*n zn9HI#(r53MQIqo&p+`F(a_MB`jUV5vz?~gq4KW%nZfS0A&P@BB=u+sn13sie6+Daa zlDeLNkNLPu2TR=Xv!MqINbZx`=9*Vle`mw(zMVRcGO_J6bRzB9Odf>YrJ1_(6EerNP8xfdxB z%74}0Yaf;#uH8!lptXoGE2Y!`ob2Re(Y%QLd!d4R`CddEt-Y#cJ~?A=)YABW4_@@>i@X79fUn&@2N%}8Ok>LJYSOLSckn%wYIxyKXrbGEdb8Oh3a z*^joulKvPBw8!{H-<7B_)RqEG-IL}84y2o6Ltwznb1{&kBy*Ie$)AIL8cn&a^lcs? zhOY7;v68Fh3b5m*YO zeve`AKNcW>i~GsW?+0Rf)a}t14!#xbvh!&)NupQ)b32Y5<6OPf*P4(bw15bds?x~Z zv&01?kvR<6k_!W-irhjwmkok3JKYNqxq8y1<(%UmYBO1{>7HuA5KADepnl>s?3_qA zt+#-X=tHzx6F0#EKEQx5s$AQN_%3oMdgld4`QLPg-`fY)K^v>#=3Ft~E&oJ#08NgR z2P*kV*S6w^DgVt8a>bd3uEv`T|1xV%zO2+{^Ha2o0n%hxW`ST$`_y^=ufiV%!JMOF z%~d9?-P)Pik3F=cYwOX{lT!frXmKv>@>^)KH_2%z-4Yc6!LO6@u4`LVfz-;=+LiLm6l$c4I z0Nqcs_Zwk2li3rb4|fU|4*ZziK)HXQHWfFr-?@9)Mjl-~`?x-lF;#;iQvlll>thi$ z?vjGq*7wdVd;h7W7tTu|%*YhB`Ox_P$#3ReaRRG9r`(puw_4&y$Q0 zHIrpJS9PIfsi}V}Ai2f;v}Ozp5O}n;5z&N1&|y$nmy)@IXe~&!^c>CR-cTc*KFGx7 z>j)~;S}2LwP>fqt^aZ-yZrPg)O3I`#g#6b*4cGxO{1Ja|f8^)+U+v9Xsy=HV$(ez+pO zB~2wSrfMT)OT4i%8Ba46@F@sZK#cYqzE2AMa4vUdN+=8^JvqlVzg9ENKKT;M;i)LH6u(yu^$gd-K z_p4W%@ncmc&nId}C7t);0LP(dc#Hz75~CdSI0u`dvUN%C&J7qx!%no$Q5~el#Y32- z)j6a_n@T9;LonMzF6EBz7%XvLL)Z70u>^Dl?r8L{Qz;A$<>jH4-!=4q!11=5s;Gy; z0moQikq#}5+O-unFHn?)j*lmrz{N!-Pv_1;yt3W!%s8XfKw0=$@29=M82%tdVSSs0zf9b6`ID8f@ks1h^LdG+b%pf>o zv3PFp?2PtGAEGEGp$6tH3|WL+=Ac7QX~7#ki=(zBzCG?rG4(!rVQp)_uBO}TbUDR` znre}fJ65r1w(ZhhHPtkl{liOM@@_w$SyOlqPmF|GZc2}VmRH?B^uhzC1YCPK`#;gy z$}Gai9NAcFwtLH1<1jGFmcP1jXvjE@+W;kd(C&H=QGmmWR%TiLxzZwH7;?XMPIW<1 z#C~rPiD={JkR7c*nls+F$R+-0^U&2INC`+_{6pLNAL=XdanYYtlpL$^Xk3%8)zP?g z4!->8FmojLWv}a-28#8GL<KDgw^dyIcwh9 zD5D6?CydswH4dHk6f{BPL3qIRS_-xk z5pCpFRln$TMga9G6;02R+v@|dUHP!sNVgXDp*Z*xB#eA1) zTZ48P)Cs|}H>IMujb9GmQ{TzBKhXkeoc!KSsyB0XULd6QV}I$5bM>d$TM?;JR zgLwDcbccVA?9*Sv9byy|_9judO=y7is0tX&=iO3)=*O7X2l0M zmh1r~nL{dZ{O_D^l4$X=shiTu z57lpG(Cs*aGX)Tdybf`N{gkuN9;!|UIY)jjBe249>6O&#YVG8zqd@Tn!h&A^DBCI% z3WQ)`730&&)FE3*jk(e@qYqqu5R>5suDQVTw!fle6!iau_R0nu5x7lyYt!P!7~>^> zjC!&GY;A;m?oW3&6{kiRSz%)mssm!s5qYWsNQEAL0-ElY8*cB9&$83!D@jY+BeYZY z&Uncs>8UaQxI2aPUiqO^5Thw)Z!ne_gU$g~U@3)+3AxV^XYMlQXYtbCqckn<$*V;11Hn7QA&6_S#^{87$jmkBOd9{S50o%+ zVnUyaUNP6$^;T3lKN}+rdFF;~u(oNF&yJ zZ?Q!_bXZ=KXd%*>yku>ZxxuStQcpIJGgdDKzy+Mhawx5A31V*LH|Kv6R*x@BAWdC< zDLOKzHw@+D+k$s;CSzpl^w!XtEgvhq4oU8%5LkEdaqtk>`OVdCo#`(TxZc*s8Wg!E z()~Q$+Sc?VG?15i@1PlNjKNzq3_NlA%hcn^w1on<6$vPpmb~GiOh&|S-pMY&v3sKX zGp`DJ%?+McU~`OH@C?CpAwR>4o0?WYDKWhEP8?I4VgjpCY?RX4GZQ`j@l%GyL=Lwq zgGJjFwiegU2{i0{)R=qM{;N$iuzWpmj9&%_8!~4Rslfq|nReIY9KWCl>%V1SzZlfl zX%WB}8a!A;$TQXJ2}5G6GKp<9GJ+-|r^q&WueMvIp0_rV1L2e#<00 zuYL}o++;12q>cY(T{loFMN1m7FnfhdPP>CHVqa-zo#WbKotZ@YB~xhEu)X{YMpf}K znxc+vYRi;YG~=8x{90sxVXt@hG;(BgwmdD^_LuMrGPDJ~;D# zxf{QtwfppruO+`UD;r@b7Bt{NMAko+^K~~wCy{Xb^NnU>K#N6?zL^rfb`h_SmFH}KCxkAvEL zh{Stf70G;J*a03w%lwT2JNizp;lk3HxeS%n7ni#R_7E4EKz0#mZ(*_1oXs*ZQA5dF zDfl(|WqwIfk!J8qmg6T2*@+A*Qyz>4P0JIexKl5I{Mz)pkLp?-Z{+jU*%d&U54xw0l8_(b#EfU|8lzHor%#zJuN4dg-???X zVN90B2+H;Pb$H(aroo+THi25JD62_$wS`$&%>nnIQUqMSBFQQyHa$VA8XL7SEm;nO zAl;7lfXT6hpJ`J99DXjLKjphvo8=8-N`ANE|&JSNnlBPY)^ht46SV)pYUP znx%lKt%uWGufFDTz2vaM;cq&?q|lvClkeI^;?ItyaNX}|dBFDk)JIVVDIkR&PNI+r zS)%0Uo)+vbJPkD~V&|Tl^kcuzHE?`dpQes7T{C^sO2N#^Kmvf3z-VZ!@-vj5?PfI1 z+?D@ZRs3iy8Qa`-Msdqb>Cga6JcRG`?0df$8|vaN_>WaEuzNYe5-+52+jaRd4xO^F zWA^-|JoO<#Mt$i!iMahGy3!iL+g5}7o*4wTC>muYI&-B_Fkq>1GgM>3DIt4Z&Ohbb#d9!v&N(pLqo~PoP057Xa{L7@s zlaaSE5HS)Mk2;?{^_Od-`wIfx0hAKVnQ=uaRVsjCyR#9jk?lA0eg*oVHpd?^hxMfq zzsxlC*9NST94$QK29)vW%?5l3AHb{HIk=_Df~PVqv^3%n0@566z4VOii;Q_^@s1p{ zw5QmCMr0YDjUY$V#SU-ONdW*RCS=n2iOXF;k3K~(oI)NM8QM7i@S$u3Ms@B(lyX6V z+9y+97**4NMkA$Axax?XQCbG-mL0bSw-E=VfQS3N#C1ZRmMHxJ%Lh|m`}`r+!a9wu zx!b*yt5_9oTbl~d32#x41_|a}Xms8edX^1?i(B8wvN@%$6a$qP1bJ^iO!#LJyAzAr zVJNN-dS0};ZPSiD2VQ9HZ*j{gwJ}F~$g(OoYDYylTQFaJXRA2VA?E7UzsRMyI&t)U zLkTl0ahl)*tA3U$#wh1~Q#Y{$(?Dy8bs=&%#&$fV0!x=q$rmfe+y$w)6^kJXhdh+S z83c2~X4NO8G{~;4W{bC)&Rj^?D*mw5Pp8Q|n4*N40>u3{Cy5$cL!f`@{_h(B_+IS5 zKpQCvSH<(5HW49y`uODfw7RZFRD_e$WbEJ35W>*Aa?23?wFG}1 zD^fy(&Z7ZCfA6TJ*#?cR7@dHJu1l7(GF&d-EFvI&LD z2hx(i3FfWpTRIL2p=^~C()$9CPHGzyl}S?;jFEnI}<;LL^5ZTgC;kNxS=99jbQ49Ws;<4ki?b# zhZABhg4yeCshzs`wALlpJ2@14;sP0-aqE{l4KqPTKV+=X$XlXEk%wMQb6eju_~Jw4 zVU<6LdQe}&9t?HmkAmOXPezHqYWZB=++B~sM|5|Ep($Y)}KkhonxscDpdLi2B%F#P+B#z+u_ z?S4QPG`#eJbt-~pIe`@I(TLd!8!T!G9zPv9Q-qv!8@@nT)mp-$=%ji!zm~EDixT4M zu^Y>cW4&D5Z`sd}+rMjTJ<5!J^H5>|CBKGK8>I7?&z`OZr)r$65XbVy7Hj-m5uh9} z>#X-*)r#BV|7ao^oKZ3$N8`RP@#Vy4=6fJNT5$=vJfL8A>yD7 zBUtP66)V0rzFeP~{*djdre)O8#lfd(x-y0ez5Hf;F|=?hT+9lnT&ScVmXX#?G%=uO7 z(k{DH93YH=y=I-C-miE$VPL*^Ny@_qr@y>lp5 zuzE)Mo~F5USB2b;D{1s4Xh(07l|NXANsG@wR9K}hbgAV_jpcM`+{0=A(Oe* zTRZm7)(mb7!&-xwWT>SPb(>?0a=iD8!6h{?MBabAAl#9%fO*?=?J7(T>|CLoLvHcV z!OvO%5I+9x{R2(ScoZ2sI~|m9tivk}?dvh!KIf7&m9PVduubH)c_^7xbQ}V3hJxrW$5BE#Rhqt= zUNxILWK!Qg-AN)rx*62D0VXEKcy{)wGAz9Yl|eS37(e2RR|h`q{$DoK%0Wud@lZ6* zY+*t6YsLJ6HG7seo7){>21)}Y5*NAv+dc)z4FRmKaAppWFcgLj`7xLQ#2=AZN~4z& zumi(cL?t%BH8R7hX}-~)Uq_(=X~5FT+I@Nwbx$1r*~B%>DwL9?&~5oU-|NB9Q24#B z2$&fyss$7t{0RToxbL1AUT^V2?~n1rRz4g;`DGK;CQtkffdk}icEm;=u8SG_aTx#3 z7Iwg|cuCpa%P+S^KwArhC#xIM0E;?eOhG~9-_W&;g%EWe>bj8A&BeQL!QlK>Ht7|wO4l%)zuy}uoc`A zY33V1TkMktd4@+E4i!>i`1<(ofAKy+i7jvSDvaRg+v>qMA+sVY_tH^Z%*7vI&*U4l zkYy*s?dYk6kqoGObHQvMJSw*{xg&&rm8A*u-ACyt!*66 zM+`!&o)rzbJbgAP$+vE6%81&^%U2fv=b*U_vh=L%*bEDC7btk!?F0+qk5Nn4=mo%| zJg%du?x=OaAv0)hxw|{}sc-#f2*Lhp{M5o`apVexB8>DY_jYU8i=e;fd*9}0|0dz4_ZH!(Z>dkuxkKk^pA0|wF| zBb5bKrBi0dWh}mWt6*W;&gHlfHj*qVlA@S&&k&Dcw^>^a=RvW^rd@y3Oas zu#_vnbPa{Enr;(^kVrukc9Tms>>P-M+5yT2N41VwkEk?jvtu=EL0PnK&`c$WjXtUz zS=L^r*>qnBS+u8RR$4rM<&?>m2b;Ak|g6I;D%TkC3%*}dOS=` zFCRTe-@{NkzZT?dZ7617Blkz3z>e}5!DD0@GIrTv^hbSnQsCk{#`s%A=`KS7Aiuik zV&%hN-bK?|FqV07Xh>V6YiK1GSuXSV;9F}Xw(Fbh{$5#0?ImDJ@JBXf=|!-}xwtM- z5&OrlL5#_c7{{t=&36|W$RGpoU}idP#Y?9mIKWX{FALcN&6VS$__PP+s6S-oN$k>> zn*#0aOGT3>eU;T~5A7g`cwCqf-VxS(z>rYHJl4EX*Iq+XsI~@0ph&4C0wf?4kM2D- zueeN55pJ|<9kB>14d8385>9>d?IVk(62{!r@SJ43RiEKd!Rlh;>xpplugaKp>}o)X2$HSKLzMHJLX>BY}N^UuQBE$zyr zhx-*z5tWiaQ)^f5)XlsiCoBrJ(Qrzuw?vG7#!n9(B1FFYkCL;{QnhU5`Sw|D(uJ~o z=JW@QOBK&9xJkV~mBhZT5MTZ$H!+%YR=#^IpO z1z-sgh0P4LK-fMj(mvTpQtxD(XK{PdZZqfG-HdLm?=Rc)Yg z9uO%X?_o|^m_8LsZ{(e4t4WL!jR}13E+oe*wSr7eP6jjvkgq2DD9J}3`}|u!$kyU~fKyk* z>3wpO?XeHT3Y;$)pqh#O$Ozu+JGNX-PV5aOJNBteYmhu{fIRAP_N%O;@52Kp9VRGM z9VXT!_SS-66_}WWN2(a5MpfKNzw$5WXF5W$AO@ACZ_II0xkLg8)U2X|YK-|3>CN|MrQ#Y1klfKON! zWc`jl?j}1UZS+JB2Og51(nFKCVP)dcn@k2qI(`2MT*|&qb^#BV{OF#jV%+8c>xS)X zj1D75BkYIsTF@!-^->@M0}C^*{I{NZs?E=%U$3%nCt)z{UdLO2AyEAu;Q#vw>A3c< zcOB`GRxBkK;qYE2EgwC=Q2bofig<64-fCrzxC_F}&)C5O-oFuVr!RFtAB6#r3eOAP zfRqu}`@k!5dUk#?_uT0;(nuKS!YQ2^YLpRSp%0K&b4TIZR2Mq!{Q)I^?eqPTS?CvG zou3mymLCQ&t)u_H3y`635-51!y+Yb^>~nPnaf!%)-6$1$SuaWYP4)*F`VfwSp@Z$h z!bkoE1`r5#DEu9)0NQZgRCz~vdRG`9#t0MDAH@6KWrxuSRml!wb4OA3Y3m3Y!BYQ+ zxokDDhj8&iR7Ue4LP^&~T$7xKs6{2(&8{NV#{h0)zLsVA9qRW+jsF)DGwjSMtG2vn zey=A5fWQt!ELG(1iCCa$$}|vwi5Ok_24Qj+BJ9 zuD&I(0qMa-@x9%*Kw*V{3R1SBV>w!!Xy@6|j%7eR$p3N|`OL151|T;6ht7a+(c%w* zJ9;`>qY{!V*+vpFL^?*WJxfJpMcyfQwMhff0#OF)L?QzQT} z8{>bhHaJujy)CS&o4}FtbE~%C1q1RmN$OOx^XNt9Z)6AJRmd#~N49!G+7G=1Afx*6 zP*F9>mf)1Iz5qa0yELHRS^E#2|K*kOnGZk*{6F|RDMF~HHpnqsQN;m?%5s>fCKX3y zDV4jHbJsadc{&(@7VQKsS`O}01D+j-2S6k*%u4{mCGqNpvBqd8JV6WqIntth5_w9u zd9MM1{U-*;fuuVV3FvpXx4<4#s;(@}I(BpN9uCofz!P-+^6p+Tr~_>XIsm~{BdH@0 zOXF##c@P^VU&qknf#?K5SSa#?)3HFf_C#J-=v!U`P;*Pi-1^#b3i%!Gm&T?9QzBk4 zzbF(gOvG;pUL9S1Smvc>zj@Zyh|hZfV(mY~{cfk?so*nDR>ffXf6yJB3pKzn01?*; zCeZX6MWRB;v35K=5L+vrEC~(KUIUQPF|4e-3dqV5g!Oo-(e*RqK6an>0XPxn?X>iF<{;Fd(seFaCl%CMQ#>s@RbOuPyHwrdLj-BBSks zNXii`i}S(q8i3k6doM%!!+zNT@O`f>OWRwUQe~Ah&S$HQMgRx{5UFT>h<=VpNW+@# z(a&Uk{Xka%|63^sPhE!;Pa)*8k^%cW0?(8bej?_U;cwM&1ofKi%AQ_lt1mxY63yAeCcM4&6xPm2LDRWL~^d zJ$juu`YQsBLrO@!HZDEMYXHJ|lvPygj7jtrjub zSob@r|L$evGYdorKvPQS-++MrB>fv^z(ZJ!)+@&{%7bI~BS16*gV)xsz4XsLY z<2bymsQKa5B&m-!O6s`XIRw$3SE`3^2a=`hA=ShW0II2Nf}lhQ;bbmSz8U{)$0g6Q zKV)kwaHdUXXTow^k$l4AcA#0%xs z7<8Nrf>5s{2A~rVjJOh4+eq9~jh5Y>zw=V~X-JY!%Z)8mNPfFs3;6;-Ek`>?*4CCf z*=I-7bl`8IWMu^a^6D*c*iU=s=@`8GNjLla+$B9Xa>E1K4WlU`06iut_wPodiJCib z=_Po;29&MG4=eEwN|9%)lBTZ*qJ-5}MT3f=+Pu+y>fN+?yiW)T6q>RWKqv7}Mv622VtLFycC-;E-Uqsr04e9IP$_ILm?7H$& z10r;kMAW4CpwohbqK^y#=r^kNOPYcs1SNP7gmTIL!>*S$(qgh^b6Dwb24gbYZctU8 zxfhR@;!C51u({`mWo!%y>L9!AG7nx;dPUV|+`m96O*`3XQ> zz2_iu^%U78nEMrr$E2-|RbSVO0Q7K7eK4g4JOm(O4pp|h-_2eq+EtA&0D@2`q{K>P zWhE@BJ6oDuzo)9D3F2qq4cafdm`hq84}hYafW)6jrGr1781D50fS{P**O!*(?qvI> zYlrEYXgvOlvC+Ys%;vy;gzdWV{a7EbPhVfipccW7(@vG&A;#yTlG6C{!c2k<-lr=8 zKyd(|g9{DNxo`}z5(%pXv5~^$e$078=Eq#KdGS19JVW%ica`X`W~XdLC0ogs{=FQJ zVQB?OQfWG%#+(pY8BM|m&ubezVU|ZXJ9G7-ZQcP;dwcI2HQ^SM zZGi_d1z2=y4h%?4vO7xBccRMfucoKCwdK9oTa8EB)_^J|!N);ep7iL_f^U1tC^Z8$%X*tM9rQ^+ z)OO?rh}!AHH$mE&gqLmU;6qG2-PzuRoEm>3pV@gowXJ*L7HPYO{2e)fiXufS#Q&I* zczL;gKl{?-Ww1;ba3IfqF(1!`3W*+eNRZCYu6>Y6&VB3&`jq`Dd6ct z(tYrK<>Y!r0qCB!9qH_fzuL5DOpsM@A^Sc!q4n^4ujLg00S)CAyaPHP@iu5a>#NIB zX<5bI;@qV~Eo7gsCmwBIy)7I~9Mr*Xfbl<-A!WMLWj>Y9)3((;9>Zeb1q(x*4^3T) zYelW7S=O>P;@NDWqf+RGE$JX{khD#f>Dhl%z8(Mo;n<+H!wE1oCJ2wX^*~leE{Kf& zIh5{sve~-uL|~`Ata(wUhBK05$ z5wwJQMb0b!AIuShkOok86if}k;6z>X(T$z(&uKaCxU{vUfPHKr%8rNt^q9{Y5H7R6 z={SV1t*3e0=+q2A{OIVgIZse~cb^K}(E59xjjs6o0U*lwOkD4N(QX*M2P^<#Ci7`U z&B+(iXpK65jwF@f@e2*3=ncc;7$*5flu%B`JBb7%A^@#a*53;x@5v}*KX6fmCrHGw z3>wfD;7_7Ti2z{vu@6YUBWonK60DyUDJn_? zCGH=`Dk9;fZYh3$(3{w+@%X`rsf7v=fR-!k9-5jQdc0TT8ui1Aj85~0SrC=cb|5>+ ztbVVJ^q&_1)YjSaJw=gkC5u{InAN|`^|dX}o}4@vSV6pN8k)2hlpe%77MJ8703pB6 zgcQCRql6=nWQ(>gJnG`txGtm&1J}<$P@C7wamc#ZKA~)mq{a`teL4WuH2&A6@$*mj za(rH2$J$Olu)H{zq%*-b806WQQo>pK8rXsEGMfv45X1u|*hTDc3i-W0eLX=8;`bQz zITy!5+SN$7NLyK+3zUTE>beH)&WeL$dp>GFC|}eRPy<3kv>p=#FKIYjB=yO$oIP$D zdBNC9sX=N$DC_ddS~Rq!yh5qDVbaRj@L8Qo*XZi(?%Mm% zMR|GYRdPsb)deX>H)Goy-;G2ftxBXaMeU!PnUt!k>PDw8k9PSjK)V0K1V9)ij0R}* zexaubBffL_xS6d0#H$@fQ*@vs0OGNJKO`%WxTZ!!nmW9&5Px`MV<^d3(9zlRfE-E? z!)04iYE}bKYggYNh9vFHfZkVtA&om%42r{mKl;Mx=gp0kz}I$|0EqA=6GL>aYkNFS zAly@#)_~9$eR*d7oAhR;?Lc_+<-Hp4_ZHlRE5+y;c})l1nxt!u)U1DWyq zkvG>EAL(bu%LT*VlW{=%jrAi~HQ0bA{I>y-`PI}lLv`hy<9J08lC^SPG z?-*?6b^&=Nn^1|$$-iL^*y8-N1>B!BB&4iB{kaU;K}-Dh}irec3uQ*%hQ0c{PNWJ#lY9rT2rU>gb(ad zkOm?Zg(EAkl(yeycU{@s{!4P%zv2AWAk_u^@WmzNQZX2zU!`rmGMndZG`H_)#jjpe zLeJ*?jvq7n8rTCGlIn&);(*AwEyqqwuC2}=luCskDk^KGvhoCtHSZ(LTMKCy+ui#+ zunYaqYhKsw4V!qb`E6z#{0cGb0wDi|%3GOett zl}bv>b|Cg55s8{77u1~61-`O8ua_~#b(WTvOOPXf55%OrB-fVN-rX}NYf4IaWL$%u zPYAW-*sHps>BrOK7oQf?I*%Ujnp#<2JVuXKTwE$u*X)~e^ehpdTi7f z^K+fnv-WfJ{l43}dcPS`l;?Xn6l4k`X%rN93hrX_cd)!Jl1OEf%Ij7dbh)GDrFrlY z?Igd(kUTjJ#OFudjuG_zZ2dSgKB=U_&d1NnD!jF~9Pgf5TUkf}pa@X?*48C3Q&a<@ z+s5MRFDFL_o)omK+3_+CK&8izA8RhIo)STDLt*J$#HmZMqAKu1@GJn4O_FWFUvAb; zhxVrdkRVm4oAJHAm!+(r`zHy_?3ln<80dS`-hOgsVR5dRo`+)q+IQRID+2+Hfv$u1 z>@q%q&aTrx2NIbxZZ;P03!p}|myD11-{YoVyZ5p|W2B@Ca1xCG9cH)P{<5(>O>)Ho z5UTiEY~#$h1yyJ^t&3(2Waotet-LE}0O~!}yElI6Qj%o>=ad3K2C+a^A8d#TdIZb^ z*Jkp0WE6nv+S+=nB9;BFv>%Wjl8&)gJR1AW)Wn6y1u5K?w(g&k}S#t#Z3w2~PBP{1Sr!ac}nWSRh1XWM0RQU-2)?E3>~#&lBS{a6VhRt1q6Ln)?;F0K)y9$< z5XbyrC12We42iZ&}W%WDH4UgH`8|$m!0@pgGr>DoQ z`tb7i@`~ydmmC_RD=MLusH*OP=OIu)^m1L;S4T(B$K-J6?WA9ZH#Rzud|}*eoD0OAlsQ4o^c+em;rB2K@~V4W54-j&s(|g;j!v@VECl> z6_L4P0HW+h@Nt}gkE5*sV6UE6MgXX+ti7eFrQ))C+fRD@4+>@n>VP3*AH?7cUz!*? z;gzsN`l+cq65HF|PNsq28XKDuCJ}fscR}6tt)`U7{G7Hy%3C>9k-|DKKZgL6NQNY9 zB>kg3dVI7$>+D{r#Q|cPew4_%c(SUkYx?=6$&02u%uZ#@yYKd=-=YmpEb8{Qot>>@ z6U+z0Dj9g8UCPOY_1*M+3ICTVo*-v4cd}aQp0@7ZZvcJ33*2-=Ds!?RhJPo)W5vZ~ zOP8mH0zKdI=o3iTysic9ZNFuDa^#=ftUVL=wlnqCa1QjbfG!zB=9g_pF&%tD%G=F8 zd}i7Yt}AE{*j1;m(>8XZ@KN2A*49#^vWd)%GUBcF34LFDFZ#`iiSw@BNvrXAzh?x1 zAd)r)sO>6Q)JW)9t7>C?MPDl%e*!l|w{~3lp{0fCKc$6D*Y<|_fk!O+DpZ0jg8FPQbe`=M4e^1AS-c^2)3oh#3F9IEEpw z(D-nFplj2$Hz%m&=APEh-j9Yu%DbHQp=&;%@*7QjcV`=1!`m4HARM?HN~-8S&g7L^ z+dCdt?*>=(OP$If==*pETjBvDb7Ad3^c*u?jR9;v=KwrUSsnR}BA>}x%FC-Z=Vm7p z30MJLGyp9xLgaZgH9J441v!10DKFaI_U?NxUApLN`Epilfddd^ystvs!adj~c39e?pazb#y0U1x8|xZcK0G;g?$2y&S=UWz0NR7Jmla5VNx9%-+|bY> zVPQxoM=@G^g6N>w_|VyufJfI0u;?IA0D`!~yFx|ESDh?MM7TSk{eS^D**%cLPhXxK z2|PFH=<)8A)s=;6W~WF^M-CF2a{+{SM=x9xvJC)PdfH=T-SKP#ea)J79*&?_I@trF z_ax?B3FWZ08Y`{G3{ctUmkE~5r`>#`HZ}v4`TN)M(j4U9F)5A!Le zdGik1{Z8gUykPX479jpgh4?G>BKym(O(-QW5w_&`@L)#(TTCA!Pyhnsa~zD%mg+EB zycPK1?-+E5>NCdvuvaGHfN%~7KIX_w*Yz3%eJ;15LZquV6rDnnTs`KYM2L*LID(|P0LG>^74-Z3;Z6nNE- z*S_dETR(ktGL6nfi*8AaE30WhgnZEuDxg;@(O+;unhw$~Xe}r(06N~;^GA_T=>HYn zU`F7Bk+<91Thi7>B2NcP!=RUmcU6?t{Oz*jt%$b3bIFU$XCIKj2PMa3Rl5vQ8GtwFAowNmLh1Fm;4oL6puusz zg+=T>I2Il)V|$fNbfpQA^?1>S1R}D16#?-=m)iT2`DB0U!(q z*n*@+_9E#S^xyYizRP37nMvft=wNu6UugD1i@va!9NE~M-TA0Sb}Zhu*7=v?vD-#R z&)sKp+q-W5XK#Axz5o8Bffw>R>TE2RM(0zt>@_f?lXnCO%fgXjJz5>hXPaJ>H!R5f zus{H)wzd{*WJgy-zE(WV2miLRw4fV5)4l{Hr4j%eSGJi3AeM^CfOhObcKUVGR#c0_F=!A40RH6o=wRU7 z-ev%FU1y#2o6&Rt!nrSlqX5fF<8ch#^k}+3`w+V8c^7-?*xBCs^XW@NV9@vX3Iu?7 zVf-RO&|gFdA3zi>Co{TJ7BXy)i~Yc5AM^Ng!|O!(l-Wpz5$R% zfOGldP7*vp{`bhT_9O`3Yy`VXL=<$$oSc9UxtA`Y=kHdw?%gWQg6;unH|W}15XSUv zNZ5R?^(fx9Fax0D_2tskBA@oWwXRrtcwi_o833WC=Hohd6Y>a|Y_=q`Xk68{CPw-b zBu_qGz5`H0Lqla{O*2@G&4)5_9VX7S2eCc0EI^pxRfC<9E!$8AKx#4lG zv<5`hZmbEVs{3{~sUPhVM-^1>`FT-J#>|9W2&0>EE#g-?_~`d)+SKT9KUkxKy^OqI zIE$XPdPxCL?Vn2IKGIh)0MpK194J!`a@$Ce1Z-ze&N=1pKp*q0%a%L5?n z+YE$=`_$}6=GFX+`ax|04YXM8!kKD%H;+E zWr7cgY&IhR!rv2yX#`h;tZR4?s=ziBM{kzhm@djch;oCEHj_oNJLb2vVlFT{Jh< zJ$^T)e8mWWz>}dZ%uf1>;6`f`0U*3rKa!zwnp4?>?i+y^ztUI&*^RbVevPt^MxdiZF^6)_%9WYq#2a56t z{pi2N)cC)H=k*m{tcTZ!-vBfX0CW%u#mvAc;u*Py$%Q#B$mGDg!Xd4$w(i*b*Ed%F zz(_!q<(1DF8$179zXZtZmqbF_88eZSgrF;?MbO#;y1K)W)YAbTsq{Dy>=D2XkA0*Z zi=BC;fFNTdApk^Imk`OVayq_O_o1x^wVooA5Dwm0vDn_7lVcaY;nh5>`uU%)dEvRQ zKQMI4s2vvH{P6F;{Omt}_iP`p&8=6pNcTOKh(Xhj{gA{;)E;yQ;E~e`fWZ5=4c_8n^cNU|E-f@7+mmv0100DeDypS2P}}K?01!{xvlDaUW@^Is z0O#8mYylOqFx(dn8Qpqpz-rT>2DSMp!}-iwDm`vblP^qgytOW*k| zdchJGn;KLP0g7~}0sS75O2d91J$(frvttNP`$?QtQwf*MY(R|-O?QsL7pbwi72*}+ z+_e-Hmn=_DjfkaZ3-4z0hHe0e^o+7VZtIL4Y2bxbz#fCZV`d+jy}W+3`Di6SQWO@W z0};k?WeQLMJkiJvY=-=o&BikaqwHUS&FeijZgJK0NjE%Rn_c0@z@Z21^I!i?+56sn z*Z3EHIM~J;==s;TO5b`owYn=^?+hc=D?t-vU!2rI#{ z?Sl?#2%<0S_C~C;v?4reH68*gCg$!zG_K!kKsPf+{EDu@YVPEBIF5V+&*=I1`#yd5JKp=dcg}tBCl?!eW4-*z-Rf6LR(vZ8AcP_H$a{@ZtqJ>>Q&56fYIs>OG8S{{tUN)y)vU!f zdaA+|gLYO*=p&*)BB$G_oN7n7Y_JhxN)Fn=oUTE1?ojLOKPHCxndzc^*lB0v0Ymru zr~l7?>fYUVzUuj#_x|@N*GBXDr=QyS?2pc;Ly z__YTyKeU^Wen?PNbOBt&TsLD~UE}vBCobMf+8^(@;)kFu-5ifbi{QM!2V6muvbuBU z)YQ~tb{@Rjwn#|k7XTT}4Z#~(A<2dO!NhikFK8HIcF4ura@?#pzNelBn%%Q*`Z$=g z@fspvzfqKf)Ce!vAUgNBs{RyM3Vivn@aBM8(BS0C$ETMzBHKGL=~zRhdaAAAn;-h; zuii=8zwt%4#eQfIi1_+voLc?t56`Di10w*PzqEP~8?;~3Ed_w`T?1kfmUr|b0;>^C%kwjnff|@a_72#9Ov4XE`pA_w8>`zVE2>K`=E{8C%oD;G#(*%c z(@h^<-}}s)o}>-WZKQR3`{RzsFh}*i-%h1)j?)w#gj?Dy3OuL1V8DW?@`$cT^fPOC z=A~U!*3^%v(OARg=4x6V4%jTBK)J!^WA*w;+vpGKXaV_}#8kzw(LoM1-Pv61C@HTW z%b_Vdo+`YIa}aph?6?CTZaj76RoY%G-3Iv9=U)Ab2L~_R$ZAJ7bT>#34KL_3!CX1? zQliTpOKbB}GyIJJ_tgjuaX`DUs5F2eDjv)A!vmo5vWm?}S@plIEL_r!&GZGqciQUm zd`2Rj&Gyn^0-*Vsous<%9VO zK%L#aD?rb0s0pAq2dhz%3q3Lz!AoE0h6e+6sH(bNOQYq0*>A3|pp`$JtJUppb#cEF z07@8)WhmO1TbdI_t>@Pu?s8@=14o9#xID%!3 zX8X5)_{yJt;#-eAnVtVlr<%2=KcV{>AN=A2KVpBouA^4^&DcRnZE_65)S9yL$}~~< zT{_BV0P33rz3!kIA1seHa3N&^scwNQM{f-aGN=|p4f1gF(e{~*wRCS-<e_x4rbF>FMe5mX?gP?A)%Ul@5+SoA=fUF|kGchmFRv|TT@#=G!C)Fk(VL%r z)ng$=+WO?TAA2I(*A*>Q(uL^*9y^i{ZDa?6_caQEh`yOQ`~{${-bcZAdKE1MI{O_n z-s$|L5F}jcna#{qU)TH*tvIx>G;{f*Y{*MvL)+`d#vc8==tB#l9oW92pxz4=90Uzl z&nV~33j-SA@6R>Mrwd{|W@GFFkm`zh(ThdEi=t}M0vxd}s*?KYsgZME7VQ?2X@3mm z>MY&s(D&}xP`?SMspyE_wEGJPLi`dFgxFG3A|31O47Zo=uHN&&NE%pH!0~Kj_uw5P z=^2DE5obofqhKcSwUVu`0Mve>_dANDJlhC>=4KA^RIrUv;%Rkt{qW^W!zUV>k8eY+ zRLTaZsV=|v(xpp}c=JfT=|%KN0!0aT#)k*ETrTuXP%Da*R{x$Xhwg$0)}1Yy5o#G= z6A9Y^TssnmuP*6OC;*Ue+JN0P{4Yqu_#Bgl@rqkcEdAAIzES_OXWybdIF#z1Z>lbp=2lZvJ1{yO zK?swZ8!##w0f@@cjK$SoPL2*d$?n`l+xrSYPz~dwPz~clqO zbF-I9Iy$a;-NNGJX9@KSYD{Zui@vTwRFHH#5dgx643w80c(@9z4Z9;V@<_X z6QBthIyDdw;W!eQe67~;$v=7h=RW$iU%i&JYpyDm-gfH~PrmxEKRI;mRo7~(+o?>V zyeb+8>;>QnJ90b?fEH%Q8`js?(*upHCMWp2uP^WM_LDCHR=;~v00=>5{||FBnERFL zLgX2u(KfWUngE)nBW)|28*92D5HzDP(2TMwE(7N!1VF0xhoC)tOz=6mYKBDz!Pv?z zZs(@sBmi~wZ2<6jW*b3phN=vI1Yh32aWg-=_ku0!)9?XI^R|+H5EKD`vdZiFl4sqb zJv^GghqpZE>Rw(%*+@puJp*!u2Cf{uUwuOzS7QO zgKBF9Kya>x3JU{)R#*TK0&Z@_l$+bGd=B`4PA`Mv>KXGS98LS-XnNZ2e7tB6Oa@B; zrd$e2zY{Z^%>RG?$*Z6Ki*vL0wKdg@z5k!Ts@oFZ_okOT@`WFrON-b(0vgf`Wx&z2GZXUB_iOu=Hz|?u{YJ9( zTO)A$jPd?=zUGDV_dbwH)7sHgA&qe&rk5AzAt882w*j%`w823lfrG?XjPSMd1OWBU z!?`+{OiBX~QZrx{JbPhwHfDO$S7Xc3*NDkvD zmA?B(I&Bk)1L78t1kWOrBJ$Pf?mGZ=boV|0=z1f0m^1)k%#ThJ$y|`*1>UapQrbKe z3722HvXWiiE~8Cs1VBV%$mGjqH%7^9uJ9~>GB$MfsU2Ot4}tBLn=ou=tyqO&adx+v z4i>a?zgKOK9lPS1NJ-?kJi1ap$+^6m|DV3$MPpz2>4kREUqx|P>TIr*9-BA_KqSA- z&Vcg|{-qfB#;cjCAdvlk7P9|S!f3pjBk9L~0P5`hxExZFoXsMc@I@u1@sgtAnYFc* zV>nTWhSne&I;)I-W)H#$fZ}_5Po9{#@N=&pqMiP{)Pe{AwRQJ?HzX^!*_j8ot*ZVU zvdz;XdtLYIpaam{9|O%j%?_0d8qlZS{py$h&DVeP?-0YFgUefQ>|0v8 zuP-SteTe-%7XS$7{JuB6c=kVkIns3JnJX>=lhXJ9>AuI_%C2P%D&OwxVDUz%9S<&e z`U=7TjpO+aKsbn5sJ>p71~YP*Yja~Ikh%Hs^78;F8?+y?RacOU(UdpVC0}@%X5dh6$-FVoXwe?MDRd^xje06+e(6i7Aqj?4b zKrBf+8*9KaBGQ3}A_C5~Hmn8|B$>IWEW9AjCjivm-t$}~68cZkvDtRu`C0(a7nfMw zX`f!)cl7Ad*5b0d3DOtDC#evhlr@piqHFxfTYu*t*&`UfgFxoTb-!c3d%Jt@yfk^? z??uOO+Aa_Ps_*Eyk|r)^4bh8p(@_2NAoi!UtbA)>?viJbwN8cO^gb4VkhCjPaVc-sUm63HdHg=zI!-}XzwGWJs_rKSvy#2fnwD&!DOZBRcutQ_xLuUi85AVhL zZoK|_ZD#d=wI-tNNtb44p%6j2UZjz}f;xWTn1KKg4%7)OfiRjLn?P$o`0ugZ_{UaO zX5WDz1mxpdRb}Z@CMG5_>Me5f&}je?O*nNkp3{5XMn}^IS*z%8qd8_{dILRI+75*2 zX<(=FH0RCfv$K2OC*Jw$FMaxZkG*nZHzsvKP~yn+(%jtqY*W*bG&TQB~9Y%8{Xdy-hA(^vjry_8%hKwzey74iy#s%&Dwt z00Kut9JDFhp%QRBeFTCTJxvjDx*pzru&!-bm(IWd0JH-DWXWFO<@jFq^*8Un>*lSs z$h+VBsV_gj<#^Y~`s#8g8~u#h&(3BX(w@$Zc{#RGUx5J-P5{WC;9)BI!z8MIkm_C# z0>v?M1%UKt(%ria@h-MGZdlC@jM|%!=3%>rcwCCzF)?)RTR}Y=yW;==CAp5WjgZXl zTIlx2j85Wx_XY|;6%{8M>zj(_Aj~~EM~IKvg?tm+ zFMypz2HiIG2&Qer`fR_LLCx8zF`CuvAmV)vJ}$Nl$=Uuw*VfiTeBQAY@+`8AlGW`V zIo5hoD=I!XQG(}d4?JIi9x($2AQV_rQ~OP&mF4#Xsg!ODTA1B!%5>NC%+4^Ptt*isOOf*O%e=CCtg}^>ec7udS{3E-1SA)dK*M=AkM^lhu8> z@_TD*&$nTH&p{ASC2bu%d})?0z_c z-6Sf1H-v1WW4LVxYx)?h>FpE%jQ{|3yY07d|A7Pw0OZ4NU;&84%lI&qCtbF6UHRdV z68;lAov{Ga+0}bD@PEHVv=7jrvR<2j2=DJfgm<#^H-rH_JT@|LgXkIy?W`qG03d4_ z*>1rCP&Ni4rXL&oG&?at?3y~ddj4KkLc;laxgZnJ3@<{CTe4t4Hc*Aw-i%p(Ljiz% zctC7zcvf5RVMy0q+C7G`T3u^b-yen*`R_y~g2%79>5ZdXTjS|mEFv8Q)CLUeP^V2v z+C{)&@7$ifnonKHU8Ggk-<-SJ=S6FuK++kJbj)vkf`gb*|-abB_T~&B}*uH^wSpXm(#LeT|$tFG^ z!GcazR8sg*IXmC;*U{oNTq? z0Z_KP;&FkZL5W5QwshW4*&q2u_e$9H16!``xO*^OmVsAf)<+rQMnqj06?z9 z$G@4EjwTz&&&0ay<6`0P&bR@-k0X%5PG4y?o615Z^5a?P0-s{lYgNu4#wW-~1ZEdt07dRe$QWLf~ysIse7c^*jS zgy`pitk0#YtgNhWXl_p_SO-VP2{<|?OWpXiZ4O8eb|9m5w0HOXxgv)?Xe82^ot5L; zQ&X3G61ivHLSpUDAhGslx + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/images/png/body_parts/male/bikini.png b/assets/images/png/body_parts/male/bikini.png new file mode 100644 index 0000000000000000000000000000000000000000..aa98ea740a04e000903dfbe5e64e7d8323c1db39 GIT binary patch literal 30916 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