From 42feae9a2e3727468f8f5373cb137c4764a2b81a Mon Sep 17 00:00:00 2001 From: RoaaGhali98 Date: Mon, 10 Jan 2022 11:16:31 +0200 Subject: [PATCH] add new medication service --- lib/routes.dart | 7 + .../intervention_medication.dart | 299 ++++++++++++++++++ .../new-medication/new_medication_screen.dart | 119 +++++++ .../profile_gird_for_InPatient.dart | 7 + pubspec.lock | 7 + pubspec.yaml | 1 + 6 files changed, 440 insertions(+) create mode 100644 lib/screens/patients/profile/new-medication/intervention_medication.dart create mode 100644 lib/screens/patients/profile/new-medication/new_medication_screen.dart diff --git a/lib/routes.dart b/lib/routes.dart index 8f636d74..e77bfaac 100644 --- a/lib/routes.dart +++ b/lib/routes.dart @@ -14,6 +14,8 @@ import 'package:doctor_app_flutter/screens/patients/profile/lab_result/labs_home import 'package:doctor_app_flutter/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart'; import 'package:doctor_app_flutter/screens/patients/profile/medical_report/MedicalReportDetailPage.dart'; import 'package:doctor_app_flutter/screens/patients/profile/medical_report/MedicalReportPage.dart'; +import 'package:doctor_app_flutter/screens/patients/profile/new-medication/intervention_medication.dart'; +import 'package:doctor_app_flutter/screens/patients/profile/new-medication/new_medication_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/notes/note/progress_note_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/notes/nursing_note/nursing_note_screen.dart'; import 'package:doctor_app_flutter/screens/patients/profile/operation_report/operation_report.dart'; @@ -81,6 +83,9 @@ const String DIAGNOSIS_FOR_IN_PATIENT = 'get_diagnosis_for_in_patient'; const String DIABETIC_CHART_VALUES = 'get_diabetic_chart_values'; const String DISCHARGE_SUMMARY = 'discharge_summary'; +const String NEW_MEDICATION = 'new_medication'; +const String INTERVENTION_MEDICATION = 'intervention_medication'; + //todo: change the routing way. var routes = { @@ -131,4 +136,6 @@ var routes = { DIAGNOSIS_FOR_IN_PATIENT: (_) => DiagnosisScreen(), ADMISSION_ORDERS: (_) => AdmissionOrdersScreen(), DIABETIC_CHART_VALUES: (_) => DiabeticChart(), + NEW_MEDICATION: (_) => NewMedicationScreen(), + INTERVENTION_MEDICATION: (_) => InterventionMedicationScreen(), }; diff --git a/lib/screens/patients/profile/new-medication/intervention_medication.dart b/lib/screens/patients/profile/new-medication/intervention_medication.dart new file mode 100644 index 00000000..826d0739 --- /dev/null +++ b/lib/screens/patients/profile/new-medication/intervention_medication.dart @@ -0,0 +1,299 @@ +import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/pednding_orders_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_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/util/date-utils.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-app-bar.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class InterventionMedicationScreen extends StatefulWidget { + const InterventionMedicationScreen({Key key}) : super(key: key); + + @override + _InterventionMedicationScreenState createState() => _InterventionMedicationScreenState(); +} + +class _InterventionMedicationScreenState extends State { + bool isDischargedPatient = false; + + AuthenticationViewModel authenticationViewModel; + + ProjectViewModel projectViewModel; + + @override + Widget build(BuildContext context) { + authenticationViewModel = Provider.of(context); + projectViewModel = Provider.of(context); + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + PatiantInformtion patient = routeArgs['patient']; + String arrivalType = routeArgs['arrivalType']; + if (routeArgs.containsKey('isDischargedPatient')) + isDischargedPatient = routeArgs['isDischargedPatient']; + return BaseView( + onModelReady: (model) => model.getAdmissionOrders( + admissionNo: int.parse(patient.admissionNo), + patientId: patient.patientMRN), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + backgroundColor: Theme.of(context).scaffoldBackgroundColor, + //appBarTitle: TranslationBase.of(context).progressNote, + appBar: PatientProfileAppBar( + patient, + isInpatient: true, + ), + body: model.admissionOrderList == null || + model.admissionOrderList.length == 0 + ? Center( + child: ErrorMessage( + error: TranslationBase.of(context).noDataAvailable, + ), + ) + : Container( + color: Colors.grey[200], + child: Column( + children: [ + Padding( + padding: EdgeInsets.all(12.0), + child: Column( + children: [ + Row( + children: [ + AppText( + TranslationBase.of(context).admission, + fontSize: 15.0, + fontWeight: FontWeight.w600, + fontFamily: 'Poppins', + ), + ], + ), + Row( + children: [ + AppText( + TranslationBase.of(context).orders, + fontSize: 30.0, + fontWeight: FontWeight.w700, + ), + ], + ), + ], + ), + ), + Expanded( + child: Container( + child: ListView.builder( + itemCount: model.admissionOrderList.length, + itemBuilder: (BuildContext ctxt, int index) { + return FractionallySizedBox( + widthFactor: 0.95, + child: CardWithBgWidget( + hasBorder: false, + bgColor: Colors.white, + widget: Column( + children: [ + Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + SizedBox( + height: 10, + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Container( + width: MediaQuery.of(context) + .size + .width * + 0.60, + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + AppText( + TranslationBase.of( + context) + .createdBy + .toString(), + fontSize: 13, + ), + Expanded( + child: AppText( + model + .admissionOrderList[ + index] + .createdByName + .toString() ?? + '', + fontWeight: + FontWeight.w600, + fontSize: 12, + isCopyable: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + AppText( + TranslationBase.of( + context) + .procedureName + .toString() + + ": ", + fontSize: 13, + ), + Expanded( + child: AppText( + model + .admissionOrderList[ + index] + .procedureName + .toString() ?? + '', + fontWeight: + FontWeight.w600, + fontSize: 12, + isCopyable: true, + ), + ), + ], + ), + Row( + crossAxisAlignment: + CrossAxisAlignment + .start, + children: [ + AppText( + TranslationBase.of( + context) + .orderNo + .toString(), + fontSize: 13, + ), + Expanded( + child: AppText( + model + .admissionOrderList[ + index] + .orderNo + .toString() ?? + '', + fontWeight: + FontWeight.w600, + fontSize: 12, + isCopyable: true, + ), + ), + ], + ), + ], + ), + ), + Column( + children: [ + AppText( + model + .admissionOrderList[ + index] + .createdOn != + null + ? AppDateUtils.getDayMonthYearDateFormatted( + AppDateUtils + .getDateTimeFromServerFormat(model + .admissionOrderList[ + index] + .createdOn), + isArabic: + projectViewModel + .isArabic, + isMonthShort: true) + : AppDateUtils + .getDayMonthYearDateFormatted( + DateTime.now(), + isArabic: + projectViewModel + .isArabic), + fontWeight: FontWeight.w600, + fontSize: 14, + isCopyable: true, + ), + AppText( + model + .admissionOrderList[ + index] + .createdOn != + null + ? AppDateUtils.getHour( + AppDateUtils + .getDateTimeFromServerFormat(model + .admissionOrderList[ + index] + .createdOn)) + : AppDateUtils.getHour( + DateTime.now()), + fontWeight: FontWeight.w600, + fontSize: 14, + isCopyable: true, + ), + ], + crossAxisAlignment: + CrossAxisAlignment.end, + ) + ], + ), + SizedBox( + height: 8, + ), + // Row( + // mainAxisAlignment: + // MainAxisAlignment.start, + // children: [ + // Expanded( + // child: AppText( + // model + // .admissionOrderList[ + // index] + // .notes, + // fontSize: 10, + // isCopyable: true, + // ), + // ), + // ]) + ], + ), + SizedBox( + height: 20, + ), + ], + ), + ), + ); + }), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/patients/profile/new-medication/new_medication_screen.dart b/lib/screens/patients/profile/new-medication/new_medication_screen.dart new file mode 100644 index 00000000..fa3c3c69 --- /dev/null +++ b/lib/screens/patients/profile/new-medication/new_medication_screen.dart @@ -0,0 +1,119 @@ +import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/pednding_orders_view_model.dart'; +import 'package:doctor_app_flutter/core/viewModel/project_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/util/date-utils.dart'; +import 'package:doctor_app_flutter/util/translations_delegate_base.dart'; +import 'package:doctor_app_flutter/widgets/patients/profile/patient-profile-app-bar.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/card_with_bg_widget.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/dr_app_embedded_error.dart'; +import 'package:doctor_app_flutter/widgets/shared/errors/error_message.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_datetime_picker/flutter_datetime_picker.dart'; +import 'package:provider/provider.dart'; + +import '../../../../config/config.dart'; +import '../../../../routes.dart'; +import 'intervention_medication.dart'; + +class NewMedicationScreen extends StatefulWidget { + const NewMedicationScreen({Key key}) : super(key: key); + + @override + _NewMedicationScreenState createState() => _NewMedicationScreenState(); +} + +class _NewMedicationScreenState extends State { + bool isDischargedPatient = false; + + AuthenticationViewModel authenticationViewModel; + + ProjectViewModel projectViewModel; + + @override + Widget build(BuildContext context) { + authenticationViewModel = Provider.of(context); + projectViewModel = Provider.of(context); + final routeArgs = ModalRoute.of(context).settings.arguments as Map; + PatiantInformtion patient = routeArgs['patient']; + String arrivalType = routeArgs['arrivalType']; + if (routeArgs.containsKey('isDischargedPatient')) + isDischargedPatient = routeArgs['isDischargedPatient']; + return BaseView( + onModelReady: (model) => model.getAdmissionOrders( + admissionNo: int.parse(patient.admissionNo), + patientId: patient.patientMRN), + builder: (_, model, w) => AppScaffold( + baseViewModel: model, + backgroundColor: Colors.white, + //appBarTitle: TranslationBase.of(context).progressNote, + appBar: PatientProfileAppBar( + patient, + isInpatient: true, + ), + body: model.admissionOrderList == null || + model.admissionOrderList.length == 0 + ? Center( + child: ErrorMessage( + error: TranslationBase.of(context).noDataAvailable, + ), + ) + : Container( + color: Colors.white, + child: Padding( + padding: EdgeInsets.only(left: 130,top: 300), + child: Column( + children: [ + TextButton( + onPressed: () { + DatePicker.showDatePicker(context, + showTitleActions: true, + minTime: DateTime(1990, 3, 5), + maxTime: DateTime(2022, 6, 7), onChanged: (date) { + print('change $date'); + }, onConfirm: (date) { + print('confirm $date'); + }, currentTime: DateTime.now(), locale: LocaleType.en); + }, + child: Text( + 'Select Date From', + style: TextStyle(color: Colors.blue), + )), + TextButton( + onPressed: () { + DatePicker.showDatePicker(context, + showTitleActions: true, + minTime: DateTime(1990, 3, 5), + maxTime: DateTime(2022, 6, 7), onChanged: (date) { + print('change $date'); + }, onConfirm: (date) { + print('confirm $date'); + }, currentTime: DateTime.now(), locale: LocaleType.en); + }, + child: Text( + 'Select Date To', + style: TextStyle(color: Colors.blue), + )), + + RaisedButton( + onPressed: () => { + INTERVENTION_MEDICATION, + }, + child: + Text('Search'), + color: AppGlobal.appGreenColor, + textColor: Colors.white, + ), + ], + ), + ), + ), + + + ), + ); + } +} diff --git a/lib/screens/patients/profile/profile_screen/profile_gird_for_InPatient.dart b/lib/screens/patients/profile/profile_screen/profile_gird_for_InPatient.dart index 22d784e7..233a8dbf 100644 --- a/lib/screens/patients/profile/profile_screen/profile_gird_for_InPatient.dart +++ b/lib/screens/patients/profile/profile_screen/profile_gird_for_InPatient.dart @@ -167,6 +167,13 @@ class ProfileGridForInPatient extends StatelessWidget { 'assets/images/svgs/profile_screen/diabetic chart.svg', isInPatient: isInpatient, ), + PatientProfileCardModel( + 'New', + 'Medication', + NEW_MEDICATION, + '', + isInPatient: isInpatient, + ), ]; return Padding( diff --git a/pubspec.lock b/pubspec.lock index 85e7f11e..3ba5bc57 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -489,6 +489,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "0.5.0" + flutter_datetime_picker: + dependency: "direct main" + description: + name: flutter_datetime_picker + url: "https://pub.dartlang.org" + source: hosted + version: "1.5.1" flutter_device_type: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 766f55cb..dfc76868 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -112,6 +112,7 @@ dependencies: # Hijri # hijri: ^2.0.3 hijri_picker: ^3.0.0 + flutter_datetime_picker: ^1.5.1 # flutter_math_fork: ^0.6.0 # flutter_math_fork: ^0.6.0