From 65fbd7af8e03ce1286092451eccb803fc27427bc Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Thu, 3 Dec 2020 11:45:52 +0300 Subject: [PATCH] referral finalised --- lib/config/localized_values.dart | 17 +- .../get_ereferral_response_model.dart | 128 +++++++++++++ .../e_referral_service.dart | 20 ++- .../e_referral_view_model.dart | 10 +- .../E-Referral/referral_details.dart | 100 +++++++++++ .../E-Referral/search_for_referrals_page.dart | 168 +++++++++++++----- lib/uitl/date_uitl.dart | 15 ++ lib/uitl/translations_delegate_base.dart | 5 + 8 files changed, 414 insertions(+), 49 deletions(-) create mode 100644 lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart create mode 100644 lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index a5b22d8c..d51376c3 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -1163,5 +1163,20 @@ const Map localizedValues = { "en": "The referral request has been submitted successfully, you will be contacted ASAP to complete the process. Referral request no is ", "ar": " تم إرسال طلب الإحالة بنجاح ، وسيتم الاتصال بك في أسرع وقت ممكن لإكمال العملية. رقم طلب الإحالة" }, - + "referralStatus": { + "en": "Referral Status", + "ar": "حالة الإحالة" + }, + "referralDate": { + "en": "Referral Date", + "ar": "تاريخ الإحالة" + }, + "patientName": { + "en": "Patient Name", + "ar": "اسم المريض" + }, + "referralNumber": { + "en": "Referral Number", + "ar": "رقم الإحالة" + } }; diff --git a/lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart b/lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart new file mode 100644 index 00000000..e873261d --- /dev/null +++ b/lib/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart @@ -0,0 +1,128 @@ +class GetEReferralResponseModel { + dynamic acceptedBrachCode; + dynamic acceptedBranchName; + dynamic acceptedBranchNameAr; + Channel channel; + dynamic identityCardAttachment; + String identityNumber; + dynamic insuranceCardAttachment; + bool isInsuredPatient; + String otherRelationship; + String patientContactNo; + int patientId; + String patientName; + int preferredBranchCode; + String preferredBranchName; + String referralDate; + int referralNumber; + Channel relationshipType; + String requesterContactNo; + String requesterName; + String status; + String statusAr; + + GetEReferralResponseModel( + {this.acceptedBrachCode, + this.acceptedBranchName, + this.acceptedBranchNameAr, + this.channel, + this.identityCardAttachment, + this.identityNumber, + this.insuranceCardAttachment, + this.isInsuredPatient, + this.otherRelationship, + this.patientContactNo, + this.patientId, + this.patientName, + this.preferredBranchCode, + this.preferredBranchName, + this.referralDate, + this.referralNumber, + this.relationshipType, + this.requesterContactNo, + this.requesterName, + this.status, + this.statusAr}); + + GetEReferralResponseModel.fromJson(Map json) { + acceptedBrachCode = json['AcceptedBrachCode']; + acceptedBranchName = json['AcceptedBranchName']; + acceptedBranchNameAr = json['AcceptedBranchNameAr']; + channel = + json['Channel'] != null ? new Channel.fromJson(json['Channel']) : null; + identityCardAttachment = json['IdentityCardAttachment']; + identityNumber = json['IdentityNumber']; + insuranceCardAttachment = json['InsuranceCardAttachment']; + isInsuredPatient = json['IsInsuredPatient']; + otherRelationship = json['OtherRelationship']; + patientContactNo = json['PatientContactNo']; + patientId = json['PatientId']; + patientName = json['PatientName']; + preferredBranchCode = json['PreferredBranchCode']; + preferredBranchName = json['PreferredBranchName']; + referralDate = json['ReferralDate']; + referralNumber = json['ReferralNumber']; + relationshipType = json['RelationshipType'] != null + ? new Channel.fromJson(json['RelationshipType']) + : null; + requesterContactNo = json['RequesterContactNo']; + requesterName = json['RequesterName']; + status = json['Status']; + statusAr = json['StatusAr']; + } + + Map toJson() { + final Map data = new Map(); + data['AcceptedBrachCode'] = this.acceptedBrachCode; + data['AcceptedBranchName'] = this.acceptedBranchName; + data['AcceptedBranchNameAr'] = this.acceptedBranchNameAr; + if (this.channel != null) { + data['Channel'] = this.channel.toJson(); + } + data['IdentityCardAttachment'] = this.identityCardAttachment; + data['IdentityNumber'] = this.identityNumber; + data['InsuranceCardAttachment'] = this.insuranceCardAttachment; + data['IsInsuredPatient'] = this.isInsuredPatient; + data['OtherRelationship'] = this.otherRelationship; + data['PatientContactNo'] = this.patientContactNo; + data['PatientId'] = this.patientId; + data['PatientName'] = this.patientName; + data['PreferredBranchCode'] = this.preferredBranchCode; + data['PreferredBranchName'] = this.preferredBranchName; + data['ReferralDate'] = this.referralDate; + data['ReferralNumber'] = this.referralNumber; + if (this.relationshipType != null) { + data['RelationshipType'] = this.relationshipType.toJson(); + } + data['RequesterContactNo'] = this.requesterContactNo; + data['RequesterName'] = this.requesterName; + data['Status'] = this.status; + data['StatusAr'] = this.statusAr; + return data; + } +} + +class Channel { + int iD; + String text; + String textAr; + String textEn; + + Channel({this.iD, this.text, this.textAr, this.textEn}); + + Channel.fromJson(Map json) { + iD = json['ID']; + text = json['Text']; + textAr = json['Text_Ar']; + textEn = json['Text_En']; + } + + Map toJson() { + final Map data = new Map(); + data['ID'] = this.iD; + data['Text'] = this.text; + data['Text_Ar'] = this.textAr; + data['Text_En'] = this.textEn; + return data; + } +} diff --git a/lib/core/service/AlHabibMedicalService/e_referral_service.dart b/lib/core/service/AlHabibMedicalService/e_referral_service.dart index c951a968..3670e965 100644 --- a/lib/core/service/AlHabibMedicalService/e_referral_service.dart +++ b/lib/core/service/AlHabibMedicalService/e_referral_service.dart @@ -122,9 +122,7 @@ class EReferralService extends BaseService { Future getEReferrals( SearchEReferralRequestModel searchEReferralRequestModel) async { hasError = false; - dynamic localRes; - await baseAppClient.post(GET_E_REFERRALS, onSuccess: (dynamic response, int statusCode) { print("EEEEEE"); @@ -136,4 +134,22 @@ class EReferralService extends BaseService { }, body: searchEReferralRequestModel.toJson()); return Future.value(localRes); } + + Future getEReferralsIfLogin(String mobileNo) async { + hasError = false; + dynamic localRes; + Map request = {}; + request['PatientMobileNumber'] = mobileNo; + await baseAppClient.post(GET_E_REFERRALS, + onSuccess: (dynamic response, int statusCode) { + print("EEEEEE"); + _allReferral.clear(); + localRes = response; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: request); + return Future.value(localRes); + } + } diff --git a/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart b/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart index 45adb6d3..047e06f2 100644 --- a/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart +++ b/lib/core/viewModels/all_habib_medical_services/e_referral_view_model.dart @@ -107,14 +107,20 @@ class EReferralViewModel extends BaseViewModel { return Future.value(localRes); } - getEReferrals(SearchEReferralRequestModel searchEReferralRequestModel) async { + Future getEReferrals(SearchEReferralRequestModel searchEReferralRequestModel) async { setState(ViewState.BusyLocal); - await _eReferralService.getEReferrals(searchEReferralRequestModel); + dynamic localRes; + await _eReferralService.getEReferrals(searchEReferralRequestModel).then((response) { + localRes = response; + }); if (_eReferralService.hasError) { error = _eReferralService.error; setState(ViewState.ErrorLocal); } else { setState(ViewState.Idle); } + + return Future.value(localRes); + } } diff --git a/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart b/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart new file mode 100644 index 00000000..925d20cd --- /dev/null +++ b/lib/pages/AlHabibMedicalService/E-Referral/referral_details.dart @@ -0,0 +1,100 @@ +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +class ReferralDetails extends StatefulWidget { + GetEReferralResponseModel getEReferralResponseModel; + + ReferralDetails({@required this.getEReferralResponseModel}); + + @override + _ReferralDetailsState createState() => _ReferralDetailsState(); +} + +class _ReferralDetailsState extends State { + @override + Widget build(BuildContext context) { + return AppScaffold( + isShowDecPage: false, + isShowAppBar: true, + appBarTitle: "Referral Details", + body: Container( + margin: EdgeInsets.only(top: 20.0, left: 20.0, right: 20.0), + child: Table( + border: TableBorder.all(color: Colors.grey[600]), + children: [ + TableRow(children: [ + TableCell( + child: _getNormalText( + TranslationBase.of(context).referralStatus)), + TableCell( + child: + _getNormalText(widget.getEReferralResponseModel.status)), + ]), + TableRow(children: [ + TableCell( + child: + _getNormalText(TranslationBase.of(context).patientName)), + TableCell( + child: _getNormalText( + widget.getEReferralResponseModel.patientName)), + ]), + TableRow(children: [ + TableCell( + child: _getNormalText( + TranslationBase.of(context).referralNumber)), + TableCell( + child: _getNormalText(widget + .getEReferralResponseModel.referralNumber + .toString())), + ]), + TableRow(children: [ + TableCell( + child: _getNormalText( + TranslationBase.of(context).referralDate)), + TableCell( + child: _getNormalText(DateUtil.getMonthDayYearDateFormatted( + DateUtil.convertStringToDateNoTimeZone( + widget.getEReferralResponseModel.referralDate)))), + ]), + TableRow(children: [ + TableCell( + child: _getNormalText(TranslationBase.of(context).hospital)), + TableCell( + child: _getNormalText( + widget.getEReferralResponseModel.preferredBranchName)), + ]), + ], + ), + ), + ); + } + + _getNormalText(text) { + return Container( + color: Colors.white, + padding: EdgeInsets.only(top: 12.0, bottom: 12.0), + child: Text(text, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14, + fontFamily: 'Open-Sans', + letterSpacing: 0.5, + color: Colors.grey[800])), + ); + } + + _getHeadingText(text) { + return Container( + padding: EdgeInsets.only(bottom: 10.0), + child: Text(text, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 26.0, + fontFamily: 'Open-Sans', + letterSpacing: 0.5, + color: Colors.white))); + } +} diff --git a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart index e74b6acf..e6aecf2c 100644 --- a/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart +++ b/lib/pages/AlHabibMedicalService/E-Referral/search_for_referrals_page.dart @@ -1,18 +1,19 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; +import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/get_ereferral_response_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_criteria_model.dart'; import 'package:diplomaticquarterapp/core/model/AlHabibMedicalService/EReferral/search_e_referral_request_model.dart'; import 'package:diplomaticquarterapp/core/service/AlHabibMedicalService/e_referral_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/all_habib_medical_services/e_referral_view_model.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/AlHabibMedicalService/E-Referral/referral_details.dart'; import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/medical/balance/new_text_Field.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import 'package:diplomaticquarterapp/widgets/errors/app_embedded_error.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/widgets/others/network_base_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -35,6 +36,8 @@ class _SearchForReferralsPageState extends State { bool _isSubmitted = false; AuthenticatedUser authUser; + List allReferrals = List(); + dynamic _selectedCountry = { "name": "Saudi Arabia", "name_ar": "المملكة العربية السعودية", @@ -130,34 +133,93 @@ class _SearchForReferralsPageState extends State { ? "11" : _selectedCountry["code"], ), - SizedBox( - height: 12, - ), - if ((model.state == ViewState.Idle && - model.allReferral.length == 0)) - Text("There's No Referral To deliver"), - if ((model.state == ViewState.ErrorLocal)) - AppEmbeddedError(error: model.error), - NetworkBaseView( - baseViewModel: model, - child: ListView.builder( - shrinkWrap: true, - scrollDirection: Axis.vertical, - itemCount: model.allReferral == null - ? 0 - : model.allReferral.length < 3 - ? model.allReferral.length - : 3, - itemBuilder: (BuildContext context, int index) { - return Padding( - padding: EdgeInsets.symmetric(horizontal: 0.2), - child: Container( - child: Texts("TODO add referral info"), + allReferrals.length != 0 + ? Container( + child: ListView.builder( + shrinkWrap: true, + scrollDirection: Axis.vertical, + physics: ScrollPhysics(), + itemCount: allReferrals.length, + itemBuilder: + (BuildContext context, int index) { + return Container( + child: InkWell( + onTap: () { + navigateToReferralDetails( + allReferrals[index]); + }, + child: Card( + margin: EdgeInsets.only(bottom: 10.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10), + ), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + margin: EdgeInsets.all(5.0), + child: Text( + allReferrals[index] + .status, + style: TextStyle( + fontSize: 16.0))), + Container( + margin: EdgeInsets.all(5.0), + child: Text( + allReferrals[index] + .patientName, + style: TextStyle( + fontSize: 16.0, + color: Colors + .grey[600]))), + Container( + margin: EdgeInsets.all(5.0), + child: Text( + allReferrals[index] + .preferredBranchName, + style: TextStyle( + fontSize: 16.0, + color: Colors + .grey[600]))), + Container( + margin: EdgeInsets.all(5.0), + child: Text( + DateUtil.getMonthDayYearDateFormatted( + DateUtil.convertStringToDateNoTimeZone( + allReferrals[ + index] + .referralDate)), + style: TextStyle( + fontSize: 16.0, + color: Colors + .grey[600]))), + ], + ), + Container( + margin: EdgeInsets.only( + right: 20.0, left: 20.0), + child: Icon(Icons.arrow_forward, + size: 20.0, + color: Colors.grey[700]), + ), + ], + ), + ), + )); + }, ), - ); - }, - ), - ), + ) + : Container(), + SizedBox( + height: 70.0, + ) ], ), ), @@ -174,8 +236,10 @@ class _SearchForReferralsPageState extends State { onTap: () async { SearchEReferralRequestModel searchEReferralRequestModel = new SearchEReferralRequestModel( - patientMobileNumber: - _selectedCountry['code'] + _mobileTextController.text, + patientMobileNumber: _selectedCountry['code'] + .toString() + .replaceFirst("+", "") + + _mobileTextController.text, ); if (selectedCriteria.value == 1) { searchEReferralRequestModel.identificationNo = @@ -186,9 +250,17 @@ class _SearchForReferralsPageState extends State { int.parse(_searchTextController.text); searchEReferralRequestModel.identificationNo = ''; } - await model.getEReferrals(searchEReferralRequestModel); - setState(() { - _isSubmitted = true; + await model + .getEReferrals(searchEReferralRequestModel) + .then((response) { + print(response['List_EReferrals']); + allReferrals.clear(); + setState(() { + response['List_EReferrals'].forEach((data) { + allReferrals.add(GetEReferralResponseModel.fromJson(data)); + _isSubmitted = true; + }); + }); }); }, loading: model.state == ViewState.BusyLocal, @@ -198,7 +270,7 @@ class _SearchForReferralsPageState extends State { ))); } - void getEreferrals() { + void getEreferralsIsLogin() { EReferralService _eReferralService = locator(); String mobileNumber; @@ -217,16 +289,15 @@ class _SearchForReferralsPageState extends State { zipCode = "971"; } - SearchEReferralRequestModel searchEReferralRequestModel = - new SearchEReferralRequestModel( - patientMobileNumber: zipCode + mobileNumber, - identificationNo: authUser.patientIdentificationNo, - referralNumber: 0); - _eReferralService - .getEReferrals(searchEReferralRequestModel) + .getEReferralsIfLogin(zipCode + mobileNumber) .then((response) { - print(response['List_EReferrals']); + allReferrals.clear(); + setState(() { + response['List_EReferrals'].forEach((data) { + allReferrals.add(GetEReferralResponseModel.fromJson(data)); + }); + }); }).catchError(() {}); } @@ -237,7 +308,7 @@ class _SearchForReferralsPageState extends State { AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE)); setState(() { authUser = data; - getEreferrals(); + getEreferralsIsLogin(); }); } } @@ -256,6 +327,15 @@ class _SearchForReferralsPageState extends State { ); } + navigateToReferralDetails( + GetEReferralResponseModel getEReferralResponseModel) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ReferralDetails( + getEReferralResponseModel: getEReferralResponseModel))); + } + String getCountryName() { if (_selectedCountry != null) return _selectedCountry["name"]; diff --git a/lib/uitl/date_uitl.dart b/lib/uitl/date_uitl.dart index 34c7bf87..0b2b45d9 100644 --- a/lib/uitl/date_uitl.dart +++ b/lib/uitl/date_uitl.dart @@ -19,6 +19,21 @@ class DateUtil { return DateTime.now(); } + static DateTime convertStringToDateNoTimeZone(String date) { + if (date != null) { + const start = "/Date("; + const end = ")/"; + final startIndex = date.indexOf(start); + final endIndex = date.indexOf(end, startIndex + start.length); + return DateTime.fromMillisecondsSinceEpoch( + int.parse( + date.substring(startIndex + start.length, endIndex), + ), + ); + } else + return DateTime.now(); + } + static String convertDateToString(DateTime date) { const start = "/Date("; const end = "+0300)/"; diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 48743fcd..aa05456c 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -899,6 +899,11 @@ String get fileno => localizedValues['fileno'][locale.languageCode]; String get appUpdate => localizedValues['appUpdate'][locale.languageCode]; String get ereferralSaveSuccess => localizedValues['ereferralSaveSuccess'][locale.languageCode]; + String get referralStatus => localizedValues['referralStatus'][locale.languageCode]; + String get referralDate => localizedValues['referralDate'][locale.languageCode]; + String get patientName => localizedValues['patientName'][locale.languageCode]; + String get referralNumber => localizedValues['referralNumber'][locale.languageCode]; + }