diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index c656ebbf..0e71249f 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -9,12 +9,19 @@
additional functionality it is fine to subclass or reimplement
FlutterApplication and put your custom class here.
-->
-
-
-
+
+
+
+
+
+
+
+
+
+
controlPanel.setVisibility(View.GONE);
mVolHandler.postDelayed(mVolRunnable, 5 * 1000);
}
@@ -269,8 +265,8 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
public void onError(Session session, OpentokError opentokError) {
Log.d(TAG, "onError: Error (" + opentokError.getMessage() + ") in session " + session.getSessionId());
- Toast.makeText(this, "Session error. See the logcat please.", Toast.LENGTH_LONG).show();
- finish();
+ // Toast.makeText(this, "Session error. See the logcat please.", Toast.LENGTH_LONG).show();
+ //finish();
}
@Override
@@ -282,6 +278,8 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
}
isConnected = true;
subscribeToStream(stream);
+ if(mConnectedHandler!=null && mConnectedRunnable!=null)
+ mConnectedHandler.removeCallbacks(mConnectedRunnable);
videoCallPresenter.callChangeCallStatus(new ChangeCallStatusRequestModel(3,sessionStatusModel.getDoctorId(), sessionStatusModel.getGeneralid(),token,sessionStatusModel.getVCID()));
}
@@ -315,8 +313,8 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
public void onError(PublisherKit publisherKit, OpentokError opentokError) {
Log.d(TAG, "onError: Error (" + opentokError.getMessage() + ") in publisher");
- Toast.makeText(this, "Session error. See the logcat please.", Toast.LENGTH_LONG).show();
- finish();
+ // Toast.makeText(this, "onError: Error (" + opentokError.getMessage() + ") in publisher", Toast.LENGTH_LONG).show();
+ // finish();
}
@Override
@@ -427,6 +425,10 @@ public class VideoCallActivity extends AppCompatActivity implements EasyPermissi
returnIntent.putExtra("sessionStatusNotRespond", sessionStatusModel);
setResult(Activity.RESULT_OK, returnIntent);
finish();
+ } else if( sessionStatusModel.getSessionStatus() == 4 ){
+ isConnected = true;
+ if(mConnectedHandler!=null && mConnectedRunnable!=null)
+ mConnectedHandler.removeCallbacks(mConnectedRunnable);
}
}
diff --git a/lib/config/config.dart b/lib/config/config.dart
index eb946dea..4bbbd40e 100644
--- a/lib/config/config.dart
+++ b/lib/config/config.dart
@@ -5,8 +5,8 @@ const ONLY_NUMBERS = "[0-9]";
const ONLY_LETTERS = "[a-zA-Z &'\"]";
const ONLY_DATE = "[0-9/]";
const BASE_URL_LIVE_CARE = 'https://livecare.hmg.com/';
-// const BASE_URL = 'https://hmgwebservices.com/';
-const BASE_URL = 'https://uat.hmgwebservices.com/';
+const BASE_URL = 'https://hmgwebservices.com/';
+// const BASE_URL = 'https://uat.hmgwebservices.com/';
const PHARMACY_ITEMS_URL = "Services/Lists.svc/REST/GetPharmcyItems_Region_enh";
const PHARMACY_LIST_URL = "Services/Patients.svc/REST/GetPharmcyList";
const PATIENT_PROGRESS_NOTE_URL = "Services/DoctorApplication.svc/REST/GetProgressNoteForInPatient";
diff --git a/lib/core/model/live_care/AlternativeServicesList.dart b/lib/core/model/live_care/AlternativeServicesList.dart
index fab11b71..11f27b95 100644
--- a/lib/core/model/live_care/AlternativeServicesList.dart
+++ b/lib/core/model/live_care/AlternativeServicesList.dart
@@ -11,6 +11,7 @@ class AlternativeService {
AlternativeService.fromJson(Map json) {
serviceID = json['ServicID'];
serviceName = json['ServiceName'];
+ isSelected = false;
}
Map toJson() {
diff --git a/lib/core/service/patient/LiveCarePatientServices.dart b/lib/core/service/patient/LiveCarePatientServices.dart
index e813e017..29b120ec 100644
--- a/lib/core/service/patient/LiveCarePatientServices.dart
+++ b/lib/core/service/patient/LiveCarePatientServices.dart
@@ -74,7 +74,7 @@ class LiveCarePatientServices extends BaseService {
}, body: startCallReq.toJson(), isLiveCare: _isLive);
}
- Future endCallWithCharge(int vcID, String altServiceList) async {
+ Future endCallWithCharge(int vcID, List altServiceList) async {
hasError = false;
await baseAppClient.post(END_CALL_WITH_CHARGE, onSuccess: (dynamic response, int statusCode) {
endCallResponse = response;
@@ -84,6 +84,7 @@ class LiveCarePatientServices extends BaseService {
}, body: {
"VC_ID": vcID,
"AltServiceList": altServiceList,
+ "generalid":GENERAL_ID
}, isLiveCare: _isLive);
}
@@ -110,7 +111,7 @@ class LiveCarePatientServices extends BaseService {
hasError = true;
super.error = error;
}, body: {
- "VC_ID": vcID,
+ "VC_ID": vcID, "generalid": GENERAL_ID
}, isLiveCare: _isLive);
}
@@ -140,6 +141,7 @@ class LiveCarePatientServices extends BaseService {
super.error = error;
}, body: {
"VC_ID": vcID,
- }, isLiveCare: _isLive);
+ "generalid": GENERAL_ID
+ }, isLiveCare: _isLive);
}
}
diff --git a/lib/core/viewModel/LiveCarePatientViewModel.dart b/lib/core/viewModel/LiveCarePatientViewModel.dart
index 8dc83c06..378013bd 100644
--- a/lib/core/viewModel/LiveCarePatientViewModel.dart
+++ b/lib/core/viewModel/LiveCarePatientViewModel.dart
@@ -101,13 +101,13 @@ class LiveCarePatientViewModel extends BaseViewModel {
Future endCallWithCharge(int vcID, bool isConfirmed) async {
setState(ViewState.BusyLocal);
- String selectedServicesString = "";
+ List selectedServices = [];
if (isConfirmed) {
- selectedServicesString = getSelectedAlternativeServices();
+ selectedServices = getSelectedAlternativeServices();
}
await _liveCarePatientServices.endCallWithCharge(
- vcID, selectedServicesString);
+ vcID, selectedServices);
if (_liveCarePatientServices.hasError) {
error = _liveCarePatientServices.error;
setState(ViewState.ErrorLocal);
@@ -117,14 +117,14 @@ class LiveCarePatientViewModel extends BaseViewModel {
}
}
- String getSelectedAlternativeServices() {
+ List getSelectedAlternativeServices() {
List selectedServices = List();
for (AlternativeService service in alternativeServicesList) {
if (service.isSelected) {
selectedServices.add(service.serviceID);
}
}
- return selectedServices.toString();
+ return selectedServices;
}
Future getAlternativeServices(int vcID) async {
diff --git a/lib/models/livecare/start_call_req.dart b/lib/models/livecare/start_call_req.dart
index 1ad04480..b3ceabb5 100644
--- a/lib/models/livecare/start_call_req.dart
+++ b/lib/models/livecare/start_call_req.dart
@@ -1,56 +1,56 @@
class StartCallReq {
- int vCID;
- bool isrecall;
- String tokenID;
- String generalid;
+ String clincName;
+ int clinicId;
+ String docSpec;
+ String docotrName;
int doctorId;
+ String generalid;
bool isOutKsa;
+ bool isrecall;
String projectName;
- String docotrName;
- String clincName;
- String docSpec;
- int clinicId;
+ String tokenID;
+ int vCID;
StartCallReq(
- {this.vCID,
- this.isrecall,
- this.tokenID,
- this.generalid,
- this.doctorId,
- this.isOutKsa,
- this.projectName,
- this.docotrName,
- this.clincName,
- this.docSpec,
- this.clinicId});
+ {this.clincName,
+ this.clinicId,
+ this.docSpec,
+ this.docotrName,
+ this.doctorId,
+ this.generalid,
+ this.isOutKsa,
+ this.isrecall,
+ this.projectName,
+ this.tokenID,
+ this.vCID});
StartCallReq.fromJson(Map json) {
- vCID = json['VC_ID'];
- isrecall = json['isrecall'];
- tokenID = json['TokenID'];
- generalid = json['generalid'];
+ clincName = json['clincName'];
+ clinicId = json['ClinicId'];
+ docSpec = json['Doc_Spec'];
+ docotrName = json['DocotrName'];
doctorId = json['DoctorId'];
+ generalid = json['generalid'];
isOutKsa = json['IsOutKsa'];
+ isrecall = json['isrecall'];
projectName = json['projectName'];
- docotrName = json['DocotrName'];
- clincName = json['clincName'];
- docSpec = json['Doc_Spec'];
- clinicId = json['ClinicId'];
+ tokenID = json['TokenID'];
+ vCID = json['VC_ID'];
}
Map toJson() {
final Map data = new Map();
- data['VC_ID'] = this.vCID;
- data['isrecall'] = this.isrecall;
- data['TokenID'] = this.tokenID;
- data['generalid'] = this.generalid;
+ data['clincName'] = this.clincName;
+ data['ClinicId'] = this.clinicId;
+ data['Doc_Spec'] = this.docSpec;
+ data['DocotrName'] = this.docotrName;
data['DoctorId'] = this.doctorId;
+ data['generalid'] = this.generalid;
data['IsOutKsa'] = this.isOutKsa;
+ data['isrecall'] = this.isrecall;
data['projectName'] = this.projectName;
- data['DocotrName'] = this.docotrName;
- data['clincName'] = this.clincName;
- data['Doc_Spec'] = this.docSpec;
- data['ClinicId'] = this.clinicId;
+ data['TokenID'] = this.tokenID;
+ data['VC_ID'] = this.vCID;
return data;
}
-}
+}
\ No newline at end of file
diff --git a/lib/screens/home/home_patient_card.dart b/lib/screens/home/home_patient_card.dart
index 6f6712ec..b388a7e2 100644
--- a/lib/screens/home/home_patient_card.dart
+++ b/lib/screens/home/home_patient_card.dart
@@ -36,11 +36,10 @@ class HomePatientCard extends StatelessWidget {
Expanded(
child: Stack(
children: [
- Positioned(
- bottom: 0.1,
- right: 0.5,
- width: 23.0,
- height: 25.0,
+ Container(
+ margin: EdgeInsets.only(top: 18, left: 10),
+ color:Colors.transparent,
+
child: Icon(
cardIcon,
size: iconSize * 2,
diff --git a/lib/screens/home/home_screen.dart b/lib/screens/home/home_screen.dart
index ab0fe73f..82add64c 100644
--- a/lib/screens/home/home_screen.dart
+++ b/lib/screens/home/home_screen.dart
@@ -329,7 +329,7 @@ class _HomeScreenState extends State {
backgroundIconColor: backgroundIconColors[colorIndex],
cardIcon: DoctorApp.livecare,
textColor: textColors[colorIndex],
- iconSize: 24,
+ iconSize: 21,
text:
"${TranslationBase.of(context).liveCare}\n${TranslationBase.of(context).patients}",
onTap: () {
diff --git a/lib/screens/live_care/end_call_screen.dart b/lib/screens/live_care/end_call_screen.dart
index 1b652e36..617eef34 100644
--- a/lib/screens/live_care/end_call_screen.dart
+++ b/lib/screens/live_care/end_call_screen.dart
@@ -142,25 +142,22 @@ class _EndCallScreenState extends State {
'patient/health_summary.png',
onTap: () {
Helpers.showConfirmationDialog(context,
- "${TranslationBase.of(context).areYouSureYouWantTo} ${TranslationBase.of(context).sendLC}${TranslationBase.of(context).instruction} ?",
+ "${TranslationBase.of(context).areYouSureYouWantTo} ${TranslationBase.of(context).sendLC} ${TranslationBase.of(context).instruction} ?",
() async {
Navigator.of(context).pop();
GifLoaderDialogUtils.showMyDialog(context);
- liveCareModel.sendSMSInstruction(widget.patient.vcId);
+ await liveCareModel.sendSMSInstruction(widget.patient.vcId);
GifLoaderDialogUtils.hideDialog(context);
if (liveCareModel.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(liveCareModel.error);
} else {
DrAppToastMsg.showSuccesToast("You successfully sent SMS instructions");
- Navigator.of(context).pop();
- Navigator.of(context).pop();
- Navigator.of(context).pop();
}
});
},
isInPatient: isInpatient,
isDartIcon: true,
- isDisable: true,
+ // isDisable: true,
dartIcon: DoctorApp.send_instruction),
PatientProfileCardModel(
TranslationBase.of(context).transferTo,
diff --git a/lib/screens/live_care/live-care_transfer_to_admin.dart b/lib/screens/live_care/live-care_transfer_to_admin.dart
index 2d0fb7d7..233f59d8 100644
--- a/lib/screens/live_care/live-care_transfer_to_admin.dart
+++ b/lib/screens/live_care/live-care_transfer_to_admin.dart
@@ -120,7 +120,7 @@ class _LivaCareTransferToAdminState extends State {
() async {
Navigator.of(context).pop();
GifLoaderDialogUtils.showMyDialog(context);
- model.transferToAdmin(widget.patient.vcId, noteController.text);
+ await model.transferToAdmin(widget.patient.vcId, noteController.text);
GifLoaderDialogUtils.hideDialog(context);
if (model.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(model.error);
diff --git a/lib/screens/patients/profile/lab_result/laboratory_result_page.dart b/lib/screens/patients/profile/lab_result/laboratory_result_page.dart
index 5f79038f..c7a98924 100644
--- a/lib/screens/patients/profile/lab_result/laboratory_result_page.dart
+++ b/lib/screens/patients/profile/lab_result/laboratory_result_page.dart
@@ -2,7 +2,7 @@ import 'package:doctor_app_flutter/core/model/labs/patient_lab_orders.dart';
import 'package:doctor_app_flutter/core/viewModel/labs_view_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
-import 'package:doctor_app_flutter/widgets/patients/profile/patient_profile_header_with_appointment_card_app_bar.dart';
+import 'package:doctor_app_flutter/widgets/patients/profile/GeneralLabResultHeader.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
@@ -32,37 +32,32 @@ class _LaboratoryResultPageState extends State {
@override
Widget build(BuildContext context) {
return BaseView(
- // onModelReady: (model) => model.getLaboratoryResult(
- // invoiceNo: widget.patientLabOrders.invoiceNo,
- // clinicID: widget.patientLabOrders.clinicID,
- // projectID: widget.patientLabOrders.projectID,
- // orderNo: widget.patientLabOrders.orderNo,
- // patient: widget.patient,
- // isInpatient: widget.patientType == "1"),
onModelReady: (model) => model.getPatientLabResult(
patientLabOrder: widget.patientLabOrders,
patient: widget.patient,
isInpatient: true),
builder: (_, model, w) => AppScaffold(
isShowAppBar: true,
- appBar: PatientProfileHeaderWhitAppointmentAppBar(
- patient: widget.patient,
- patientType: widget.patientType ?? "0",
- arrivalType: widget.arrivalType ?? "0",
- orderNo: widget.patientLabOrders.orderNo,
- appointmentDate: widget.patientLabOrders.orderDate,
- doctorName: widget.patientLabOrders.doctorName,
- branch: widget.patientLabOrders.projectName,
- clinic: widget.patientLabOrders.clinicDescription,
- profileUrl: widget.patientLabOrders.doctorImageURL,
- invoiceNO: widget.patientLabOrders.invoiceNo,
+ appBar: GeneralLabResultHeader(
+ patient: widget.patient,
+ patientType: widget.patientType ?? "0",
+ arrivalType: widget.arrivalType ?? "0",
+ orderNo: widget.patientLabOrders.orderNo,
+ appointmentDate: widget.patientLabOrders.orderDate,
+ doctorName: widget.patientLabOrders.doctorName,
+ branch: widget.patientLabOrders.projectName,
+ clinic: widget.patientLabOrders.clinicDescription,
+ profileUrl: widget.patientLabOrders.doctorImageURL,
+ invoiceNO: widget.patientLabOrders.invoiceNo,
),
+
baseViewModel: model,
body: AppScaffold(
isShowAppBar: false,
body: SingleChildScrollView(
child: Column(
children: [
+
LaboratoryResultWidget(
onTap: () async {},
billNo: widget.patientLabOrders.invoiceNo,
diff --git a/lib/screens/patients/profile/profile_screen/patient_profile_screen.dart b/lib/screens/patients/profile/profile_screen/patient_profile_screen.dart
index 55b2d6f9..d9aa7d8d 100644
--- a/lib/screens/patients/profile/profile_screen/patient_profile_screen.dart
+++ b/lib/screens/patients/profile/profile_screen/patient_profile_screen.dart
@@ -156,51 +156,57 @@ class _PatientProfileScreenState extends State
SizedBox(
height: MediaQuery.of(context).size.height * 0.05,
)
- ],
- ),
- ),
-
],
),
- if (patient.patientStatusType != null &&
- patient.patientStatusType == 43)
- BaseView(
- onModelReady: (model) async {},
- builder: (_, model, w) => Positioned(
- top: 180,
- left: 20,
- right: 20,
- child: Row(
- children: [
- Expanded(child: Container()),
- if (patient.episodeNo == 0)
- AppButton(
- title:
- "${TranslationBase.of(context).createNew}\n${TranslationBase.of(context).episode}",
- color: patient.patientStatusType == 43
- ? Colors.red.shade700
- : Colors.grey.shade700,
- fontColor: Colors.white,
- vPadding: 8,
- radius: 30,
- hPadding: 20,
- fontWeight: FontWeight.normal,
- fontSize: 1.6,
- icon: Image.asset(
- "assets/images/create-episod.png",
- color: Colors.white,
+ ),
+ ],
+ ),
+ if (isFromLiveCare
+ ? patient.episodeNo != null
+ : patient.patientStatusType != null &&
+ patient.patientStatusType == 43)
+ BaseView(
+ onModelReady: (model) async {},
+ builder: (_, model, w) => Positioned(
+ top: 180,
+ left: 20,
+ right: 20,
+ child: Row(
+ children: [
+ Expanded(child: Container()),
+ if (patient.episodeNo == 0)
+ AppButton(
+ title:
+ "${TranslationBase.of(context).createNew}\n${TranslationBase.of(context).episode}",
+ color: isFromLiveCare
+ ? Colors.red.shade700
+ : patient.patientStatusType == 43
+ ? Colors.red.shade700
+ : Colors.grey.shade700,
+ fontColor: Colors.white,
+ vPadding: 8,
+ radius: 30,
+ hPadding: 20,
+ fontWeight: FontWeight.normal,
+ fontSize: 1.6,
+ icon: Image.asset(
+ "assets/images/create-episod.png",
+ color: Colors.white,
height: 30,
),
onPressed: () async {
- if (patient.patientStatusType ==
- 43) {
+ if ((isFromLiveCare &&
+ patient.appointmentNo != null &&
+ patient.appointmentNo != 0) ||
+ patient.patientStatusType ==
+ 43) {
PostEpisodeReqModel
- postEpisodeReqModel =
- PostEpisodeReqModel(
- appointmentNo:
- patient.appointmentNo,
- patientMRN:
- patient.patientMRN);
+ postEpisodeReqModel =
+ PostEpisodeReqModel(
+ appointmentNo:
+ patient.appointmentNo,
+ patientMRN:
+ patient.patientMRN);
GifLoaderDialogUtils.showMyDialog(
context);
await model.postEpisode(
@@ -220,11 +226,18 @@ class _PatientProfileScreenState extends State
if (patient.episodeNo != 0)
AppButton(
title:
- "${TranslationBase.of(context).update}\n${TranslationBase.of(context).episode}",
+ "${TranslationBase
+ .of(context)
+ .update}\n${TranslationBase
+ .of(context)
+ .episode}",
color:
- patient.patientStatusType == 43
- ? Colors.red.shade700
- : Colors.grey.shade700,
+ isFromLiveCare
+ ? Colors.red.shade700
+ : patient.patientStatusType ==
+ 43
+ ? Colors.red.shade700
+ : Colors.grey.shade700,
fontColor: Colors.white,
vPadding: 8,
radius: 30,
@@ -237,8 +250,12 @@ class _PatientProfileScreenState extends State
height: 30,
),
onPressed: () {
- if (patient.patientStatusType ==
- 43) {
+ if ((isFromLiveCare &&
+ patient.appointmentNo !=
+ null &&
+ patient.appointmentNo != 0) ||
+ patient.patientStatusType ==
+ 43) {
Navigator.of(context).pushNamed(
UPDATE_EPISODE,
arguments: {
@@ -283,6 +300,11 @@ class _PatientProfileScreenState extends State
TranslationBase.of(context).initiateCall,
disabled: model.state == ViewState.BusyLocal,
onPressed: () async {
+ // Navigator.push(context, MaterialPageRoute(
+ // builder: (BuildContext context) =>
+ // EndCallScreen(patient:patient)));
+
+
if(isCallFinished) {
Navigator.push(context, MaterialPageRoute(
builder: (BuildContext context) =>
diff --git a/lib/screens/patients/profile/referral/AddReplayOnReferralPatient.dart b/lib/screens/patients/profile/referral/AddReplayOnReferralPatient.dart
index df941a5d..97db3d40 100644
--- a/lib/screens/patients/profile/referral/AddReplayOnReferralPatient.dart
+++ b/lib/screens/patients/profile/referral/AddReplayOnReferralPatient.dart
@@ -66,7 +66,7 @@ class _AddReplayOnReferralPatientState
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- BottomSheetTitle(title: 'Replay'),
+ BottomSheetTitle(title: 'Reply'),
SizedBox(
height: 10.0,
),
@@ -78,7 +78,7 @@ class _AddReplayOnReferralPatientState
Stack(
children: [
AppTextFieldCustom(
- hintText: 'Replay your responses here',
+ hintText: 'Reply your responses here',
controller: replayOnReferralController,
maxLines: 35,
minLines: 25,
@@ -133,7 +133,7 @@ class _AddReplayOnReferralPatientState
Container(
margin: EdgeInsets.all(5),
child: AppButton(
- title: 'Submit Replay',
+ title: 'Submit Reply',
color: Color(0xff359846),
fontWeight: FontWeight.w700,
onPressed: () async {
@@ -152,7 +152,7 @@ class _AddReplayOnReferralPatientState
} else {
GifLoaderDialogUtils.hideDialog(context);
DrAppToastMsg.showSuccesToast(
- "Your Replay Added Successfully");
+ "Your Reply Added Successfully");
Navigator.of(context).pop();
Navigator.of(context).pop();
@@ -166,7 +166,7 @@ class _AddReplayOnReferralPatientState
);
}
} else {
- Helpers.showErrorToast("You can't add empty replay");
+ Helpers.showErrorToast("You can't add empty reply");
setState(() {
isSubmitted = false;
});
diff --git a/lib/widgets/patients/profile/GeneralLabResultHeader.dart b/lib/widgets/patients/profile/GeneralLabResultHeader.dart
new file mode 100644
index 00000000..153a4ccf
--- /dev/null
+++ b/lib/widgets/patients/profile/GeneralLabResultHeader.dart
@@ -0,0 +1,349 @@
+import 'package:doctor_app_flutter/config/config.dart';
+import 'package:doctor_app_flutter/config/size_config.dart';
+import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
+import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
+import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
+import 'package:doctor_app_flutter/util/date-utils.dart';
+import 'package:doctor_app_flutter/util/helpers.dart';
+import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
+import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
+import 'package:flutter/material.dart';
+import 'package:hexcolor/hexcolor.dart';
+import 'package:provider/provider.dart';
+import 'package:url_launcher/url_launcher.dart';
+
+class GeneralLabResultHeader extends StatelessWidget
+ with PreferredSizeWidget {
+ final PatiantInformtion patient;
+ final String patientType;
+ final String arrivalType;
+ final String doctorName;
+ final String branch;
+ final DateTime appointmentDate;
+ final String profileUrl;
+ final String invoiceNO;
+ final String orderNo;
+ final bool isPrescriptions;
+ final bool isMedicalFile;
+ final String episode;
+ final String vistDate;
+
+ final String clinic;
+ GeneralLabResultHeader(
+ {this.patient,
+ this.patientType,
+ this.arrivalType,
+ this.doctorName,
+ this.branch,
+ this.appointmentDate,
+ this.profileUrl,
+ this.invoiceNO,
+ this.orderNo,
+ this.isPrescriptions = false,
+ this.clinic,
+ this.isMedicalFile = false,
+ this.episode,
+ this.vistDate});
+
+ @override
+ Widget build(BuildContext context) {
+ ProjectViewModel projectViewModel = Provider.of(context);
+ int gender = 1;
+ if (patient.patientDetails != null) {
+ gender = patient.patientDetails.gender;
+ } else {
+ gender = patient.gender;
+ }
+
+ return Container(
+ padding: EdgeInsets.only(left: 0, right: 5, bottom: 5, top: 5),
+ decoration: BoxDecoration(
+ color: Colors.white,
+ ),
+ height: MediaQuery.of(context).size.height * 0.23,
+ child: Container(
+ padding: EdgeInsets.only(left: 10, right: 10, bottom: 10),
+ margin: EdgeInsets.only(top: 50),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ Container(
+ padding: EdgeInsets.only(left: 12.0),
+ child: Row(children: [
+ IconButton(
+ icon: Icon(Icons.arrow_back_ios),
+ color: Colors.black, //Colors.black,
+ onPressed: () => Navigator.pop(context),
+ ),
+ Expanded(
+ child: AppText(
+ patient.firstName != null
+ ? (Helpers.capitalize(patient.firstName) +
+ " " +
+ Helpers.capitalize(patient.lastName))
+ : Helpers.capitalize(patient.fullName??patient?.patientDetails?.fullName??""),
+ fontSize: SizeConfig.textMultiplier * 2.2,
+ fontWeight: FontWeight.bold,
+ fontFamily: 'Poppins',
+ ),
+ ),
+ gender == 1
+ ? Icon(
+ DoctorApp.male_2,
+ color: Colors.blue,
+ )
+ : Icon(
+ DoctorApp.female_1,
+ color: Colors.pink,
+ ),
+ Container(
+ margin: EdgeInsets.symmetric(horizontal: 4),
+ child: InkWell(
+ onTap: () {
+ launch("tel://" + patient?.mobileNumber??"");
+ },
+ child: Icon(
+ Icons.phone,
+ color: Colors.black87,
+ ),
+ ),
+ )
+ ]),
+ ),
+ Row(children: [
+ Padding(
+ padding: EdgeInsets.only(left: 12.0),
+ child: Container(
+ width: 60,
+ height: 60,
+ child: Image.asset(
+ gender == 1
+ ? 'assets/images/male_avatar.png'
+ : 'assets/images/female_avatar.png',
+ fit: BoxFit.cover,
+ ),
+ ),
+ ),
+ SizedBox(
+ width: 10,
+ ),
+ Expanded(
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.start,
+ children: [
+ SERVICES_PATIANT2[int.parse(patientType)] ==
+ "patientArrivalList"
+ ? Container(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ patient.patientStatusType == 43
+ ? AppText(
+ TranslationBase.of(context).arrivedP,
+ color: Colors.green,
+ fontWeight: FontWeight.bold,
+ fontFamily: 'Poppins',
+ fontSize: 12,
+ )
+ : AppText(
+ TranslationBase.of(context).notArrived,
+ color: Colors.red[800],
+ fontWeight: FontWeight.bold,
+ fontFamily: 'Poppins',
+ fontSize: 12,
+ ),
+ arrivalType == '1' || patient.arrivedOn == null
+ ? AppText(
+ patient.startTime != null
+ ? patient.startTime
+ : '',
+ fontFamily: 'Poppins',
+ fontWeight: FontWeight.w600,
+ )
+ : AppText(
+ AppDateUtils.convertStringToDateFormat(
+ patient.arrivedOn,
+ 'MM-dd-yyyy HH:mm'),
+ fontFamily: 'Poppins',
+ fontWeight: FontWeight.w600,
+ )
+ ],
+ ))
+ : SizedBox(),
+ if (SERVICES_PATIANT2[int.parse(patientType)] ==
+ "List_MyOutPatient")
+ Container(
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.start,
+ children: [
+ AppText(
+ TranslationBase.of(context).appointmentDate +
+ " : ",
+ fontSize: 14,
+ ),
+ patient.startTime != null
+ ? Container(
+ height: 15,
+ width: 60,
+ decoration: BoxDecoration(
+ borderRadius: BorderRadius.circular(25),
+ color: HexColor("#20A169"),
+ ),
+ child: AppText(
+ patient.startTime ?? "",
+ color: Colors.white,
+ fontSize: 1.5 * SizeConfig.textMultiplier,
+ textAlign: TextAlign.center,
+ fontWeight: FontWeight.bold,
+ ),
+ )
+ : SizedBox(),
+ SizedBox(
+ width: 3.5,
+ ),
+ Container(
+ child: AppText(
+ convertDateFormat2(
+ patient.appointmentDate.toString() ?? ''),
+ fontSize: 1.5 * SizeConfig.textMultiplier,
+ fontWeight: FontWeight.bold,
+ ),
+ ),
+ SizedBox(
+ height: 0.5,
+ )
+ ],
+ ),
+ margin: EdgeInsets.only(
+ top: 8,
+ ),
+ ),
+ Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ RichText(
+ text: TextSpan(
+ style: TextStyle(
+ fontSize: 1.6 * SizeConfig.textMultiplier,
+ color: Colors.black,
+ fontFamily: 'Poppins',
+ ),
+ children: [
+ new TextSpan(
+ text: TranslationBase.of(context).fileNumber,
+ style: TextStyle(
+ fontSize: 14, fontFamily: 'Poppins')),
+ new TextSpan(
+ text: patient?.patientId?.toString() ?? "",
+ style: TextStyle(
+ fontWeight: FontWeight.w700,
+ fontFamily: 'Poppins',
+ fontSize: 14)),
+ ],
+ ),
+ ),
+ Row(
+ children: [
+ AppText(
+ patient.nationalityName ??
+ patient.nationality ??
+ "",
+ fontWeight: FontWeight.bold,
+ fontSize: 12,
+ ),
+ patient.nationality != null
+ ? ClipRRect(
+ borderRadius: BorderRadius.circular(20.0),
+ child: Image.network(
+ patient?.nationalityFlagURL??"",
+ height: 25,
+ width: 30,
+ errorBuilder: (BuildContext context,
+ Object exception,
+ StackTrace stackTrace) {
+ return Text('No Image');
+ },
+ ))
+ : SizedBox()
+ ],
+ )
+ ],
+ ),
+ Container(
+ child: RichText(
+ text: new TextSpan(
+ style: new TextStyle(
+ fontSize: 1.6 * SizeConfig.textMultiplier,
+ color: Colors.black,
+ fontFamily: 'Poppins',
+ ),
+ children: [
+ new TextSpan(
+ text: TranslationBase.of(context).age + " : ",
+ style: TextStyle(fontSize: 14)),
+ new TextSpan(
+ text:
+ "${AppDateUtils.getAgeByBirthday(patient.patientDetails != null ? patient.patientDetails.dateofBirth : patient.dateofBirth, context)}",
+ style: TextStyle(
+ fontWeight: FontWeight.w700, fontSize: 14)),
+ ],
+ ),
+ ),
+ ),
+ Container(
+ child: RichText(
+ text: new TextSpan(
+ style: new TextStyle(
+ fontSize: 1.6 * SizeConfig.textMultiplier,
+ color: Colors.black,
+ fontFamily: 'Poppins',
+ ),
+ children: [
+ new TextSpan(
+ text: "Result Date: ",
+ style: TextStyle(fontSize: 14)),
+ new TextSpan(
+ text:
+ '${AppDateUtils.getDayMonthYearDateFormatted(appointmentDate, isArabic: projectViewModel.isArabic)}',
+ style: TextStyle(
+ fontWeight: FontWeight.w700, fontSize: 14)),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ ),
+ ]),
+ ],
+ ),
+ ),
+ );
+ }
+
+ convertDateFormat2(String str) {
+ String newDate = "";
+ const start = "/Date(";
+ const end = "+0300)";
+
+ if (str.isNotEmpty) {
+ final startIndex = str.indexOf(start);
+ final endIndex = str.indexOf(end, startIndex + start.length);
+
+ var date = new DateTime.fromMillisecondsSinceEpoch(
+ int.parse(str.substring(startIndex + start.length, endIndex)));
+ newDate = date.year.toString() +
+ "/" +
+ date.month.toString().padLeft(2, '0') +
+ "/" +
+ date.day.toString().padLeft(2, '0');
+ }
+
+ return newDate.toString();
+ }
+
+
+
+ @override
+ Size get preferredSize => Size(double.maxFinite, 310);
+}