Merge branch 'development' of https://gitlab.com/Cloud_Solution/doctor_app_flutter into patient_registration

 Conflicts:
	lib/config/config.dart
	lib/locator.dart
merge-requests/866/head
Mohammad Aljammal 4 years ago
commit 5ad9976c40

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 B

@ -355,6 +355,12 @@ const NURSING_PROGRESS_NOTE =
const GET_DIAGNOSIS_FOR_IN_PATIENT =
"Services/DoctorApplication.svc/REST/DoctorApp_GetDiagnosisForInPatient";
const GET_PENDING_ORDERS =
"Services/DoctorApplication.svc/REST/DoctorApp_GetPendingOrdersForInPatient";
const GET_ADMISSION_ORDERS =
"/Services/DoctorApplication.svc/REST/DoctorApp_GetAdmissionOrders";
///Patient Registration Services
const CHECK_PATIENT_FOR_REGISTRATION = "Authentication.svc/REST/CheckPatientForRegisteration";
const SEND_ACTIVATION_CODE_BY_OTP_NOT_TYPE = "Authentication.svc/REST/SendActivationCodebyOTPNotificationType";

@ -710,5 +710,7 @@ const Map<String, Map<String, String>> localizedValues = {
"ar":"نوع الطلب"},
"special": {"en": "Special", "ar": "خاص"},
"allClinic": {"en": "All Clinics", "ar": "جميع العيادات"} ,
"operationReports": {"en": "Operation Reports", "ar": "تقارير العملية"}
"operationReports": {"en": "Operation Reports", "ar": "تقارير العملية"},
"registerNewPatient": {"en": "Register\nNew Patient", "ar": "تسجيل\n مريض جديد"},
"registeraPatient": {"en": "Register a Patient", "ar": "تسجيل المريض"},
};

@ -0,0 +1,5 @@
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
class PatientRegisterService extends BaseService{
}

@ -0,0 +1,68 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
import 'package:doctor_app_flutter/models/admisson_orders/admission_orders_model.dart';
import 'package:doctor_app_flutter/models/admisson_orders/admission_orders_request_model.dart';
import 'package:doctor_app_flutter/models/pending_orders/pending_order_request_model.dart';
import 'package:doctor_app_flutter/models/pending_orders/pending_orders_model.dart';
class PendingOrderService extends BaseService {
List<PendingOrderModel> _pendingOrderList = List();
List<PendingOrderModel> get pendingOrderList => _pendingOrderList;
List<AdmissionOrdersModel> _admissionOrderList = List();
List<AdmissionOrdersModel> get admissionOrderList => _admissionOrderList;
Future getPendingOrders(
{PendingOrderRequestModel pendingOrderRequestModel,
int patientId,
int admissionNo}) async {
pendingOrderRequestModel = PendingOrderRequestModel(
patientID: patientId,
admissionNo: admissionNo,
patientTypeID: 1,
patientType: 1,
setupID: "010266");
hasError = false;
await baseAppClient.post(GET_PENDING_ORDERS,
onSuccess: (dynamic response, int statusCode) {
print("Success");
_pendingOrderList.clear();
response['List_PendingOrders'].forEach(
(v) {
_pendingOrderList.add(PendingOrderModel.fromJson(v));
},
);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: pendingOrderRequestModel.toJson());
}
Future getAdmissionOrders(
{AdmissionOrdersRequestModel admissionOrdersRequestModel,
int patientId,
int admissionNo}) async {
admissionOrdersRequestModel = AdmissionOrdersRequestModel(
patientID: patientId,
admissionNo: admissionNo,
patientTypeID: 1,
patientType: 1,
setupID: "010266");
hasError = false;
await baseAppClient.post(GET_ADMISSION_ORDERS,
onSuccess: (dynamic response, int statusCode) {
print("Success");
//admissionOrderList.clear();
response['List_AdmissionOrders'].forEach(
(v) {
_admissionOrderList.add(AdmissionOrdersModel.fromJson(v));
},
);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: admissionOrdersRequestModel.toJson());
}
}

@ -0,0 +1,8 @@
import 'package:doctor_app_flutter/core/service/patient/PatientRegisterService.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import '../../locator.dart';
class PatientRegisterViewModel extends BaseViewModel {
PatientRegisterService _service = locator<PatientRegisterService>();
}

@ -0,0 +1,43 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/service/pending_order_service.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import 'package:doctor_app_flutter/locator.dart';
import 'package:doctor_app_flutter/models/admisson_orders/admission_orders_model.dart';
import 'package:doctor_app_flutter/models/pending_orders/pending_orders_model.dart';
class PendingOrdersViewModel extends BaseViewModel {
bool hasError = false;
PendingOrderService _pendingOrderService = locator<PendingOrderService>();
List<PendingOrderModel> get pendingOrdersList =>
_pendingOrderService.pendingOrderList;
List<AdmissionOrdersModel> get admissionOrderList =>
_pendingOrderService.admissionOrderList;
Future getPendingOrders({int patientId, int admissionNo}) async {
hasError = false;
setState(ViewState.Busy);
await _pendingOrderService.getPendingOrders(
patientId: patientId, admissionNo: admissionNo);
if (_pendingOrderService.hasError) {
error = _pendingOrderService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
Future getAdmissionOrders({int patientId, int admissionNo}) async {
hasError = false;
setState(ViewState.Busy);
await _pendingOrderService.getAdmissionOrders(
patientId: patientId, admissionNo: admissionNo);
if (_pendingOrderService.hasError) {
error = _pendingOrderService.error;
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
}

@ -1,11 +1,13 @@
import 'package:doctor_app_flutter/core/service/authentication_service.dart';
import 'package:doctor_app_flutter/core/service/home/scan_qr_service.dart';
import 'package:doctor_app_flutter/core/service/operation_report_servive.dart';
import 'package:doctor_app_flutter/core/service/pending_order_service.dart';
import 'package:doctor_app_flutter/core/viewModel/dashboard_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/hospitals_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/medical_file_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/operation_report_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/pednding_orders_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/prescription_view_model.dart';
import 'package:doctor_app_flutter/core/viewModel/procedure_View_model.dart';
import 'package:doctor_app_flutter/core/viewModel/scan_qr_view_model.dart';
@ -24,6 +26,7 @@ import 'core/service/patient/DischargedPatientService.dart';
import 'core/service/patient/LiveCarePatientServices.dart';
import 'core/service/patient/MyReferralPatientService.dart';
import 'core/service/patient/PatientMuseService.dart';
import 'core/service/patient/PatientRegisterService.dart';
import 'core/service/patient/ReferralService.dart';
import 'core/service/patient/out_patient_service.dart';
import 'core/service/patient/patient-doctor-referral-service.dart';
@ -51,6 +54,7 @@ import 'core/viewModel/LiveCarePatientViewModel.dart';
import 'core/viewModel/PatientMedicalReportViewModel.dart';
import 'core/viewModel/PatientMuseViewModel.dart';
import 'core/viewModel/PatientRegistrationViewModel.dart';
import 'core/viewModel/PatientRegisterViewModel.dart';
import 'core/viewModel/PatientSearchViewModel.dart';
import 'core/viewModel/SOAP_view_model.dart';
import 'core/viewModel/doctor_replay_view_model.dart';
@ -105,6 +109,8 @@ void setupLocator() {
locator.registerLazySingleton(() => VideoCallService());
locator.registerLazySingleton(() => AnalyticsService());
locator.registerLazySingleton(() => OperationReportService());
locator.registerLazySingleton(() => PendingOrderService());
locator.registerLazySingleton(() => PatientRegisterService());
locator.registerLazySingleton(() => PatientRegistrationService());
/// View Model
@ -136,4 +142,6 @@ void setupLocator() {
locator.registerFactory(() => ScanQrViewModel());
locator.registerFactory(() => OperationReportViewModel());
locator.registerFactory(() => PatientRegistrationViewModel());
locator.registerFactory(() => PendingOrdersViewModel());
locator.registerFactory(() => PatientRegisterViewModel());
}

@ -0,0 +1,52 @@
class AdmissionOrdersModel {
int procedureID;
String procedureName;
String procedureNameN;
int orderNo;
int doctorID;
int clinicID;
String createdOn;
int createdBy;
String editedOn;
int editedBy;
AdmissionOrdersModel(
{this.procedureID,
this.procedureName,
this.procedureNameN,
this.orderNo,
this.doctorID,
this.clinicID,
this.createdOn,
this.createdBy,
this.editedOn,
this.editedBy});
AdmissionOrdersModel.fromJson(Map<String, dynamic> json) {
procedureID = json['ProcedureID'];
procedureName = json['ProcedureName'];
procedureNameN = json['ProcedureNameN'];
orderNo = json['OrderNo'];
doctorID = json['DoctorID'];
clinicID = json['ClinicID'];
createdOn = json['CreatedOn'];
createdBy = json['CreatedBy'];
editedOn = json['EditedOn'];
editedBy = json['EditedBy'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ProcedureID'] = this.procedureID;
data['ProcedureName'] = this.procedureName;
data['ProcedureNameN'] = this.procedureNameN;
data['OrderNo'] = this.orderNo;
data['DoctorID'] = this.doctorID;
data['ClinicID'] = this.clinicID;
data['CreatedOn'] = this.createdOn;
data['CreatedBy'] = this.createdBy;
data['EditedOn'] = this.editedOn;
data['EditedBy'] = this.editedBy;
return data;
}
}

@ -0,0 +1,76 @@
class AdmissionOrdersRequestModel {
bool isDentalAllowedBackend;
double versionID;
int channel;
int languageID;
String iPAdress;
String generalid;
int deviceTypeID;
String tokenID;
int patientID;
int admissionNo;
String sessionID;
int projectID;
String setupID;
bool patientOutSA;
int patientType;
int patientTypeID;
AdmissionOrdersRequestModel(
{this.isDentalAllowedBackend,
this.versionID,
this.channel,
this.languageID,
this.iPAdress,
this.generalid,
this.deviceTypeID,
this.tokenID,
this.patientID,
this.admissionNo,
this.sessionID,
this.projectID,
this.setupID,
this.patientOutSA,
this.patientType,
this.patientTypeID});
AdmissionOrdersRequestModel.fromJson(Map<String, dynamic> json) {
isDentalAllowedBackend = json['isDentalAllowedBackend'];
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
generalid = json['generalid'];
deviceTypeID = json['DeviceTypeID'];
tokenID = json['TokenID'];
patientID = json['PatientID'];
admissionNo = json['AdmissionNo'];
sessionID = json['SessionID'];
projectID = json['ProjectID'];
setupID = json['SetupID'];
patientOutSA = json['PatientOutSA'];
patientType = json['PatientType'];
patientTypeID = json['PatientTypeID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['DeviceTypeID'] = this.deviceTypeID;
data['TokenID'] = this.tokenID;
data['PatientID'] = this.patientID;
data['AdmissionNo'] = this.admissionNo;
data['SessionID'] = this.sessionID;
data['ProjectID'] = this.projectID;
data['SetupID'] = this.setupID;
data['PatientOutSA'] = this.patientOutSA;
data['PatientType'] = this.patientType;
data['PatientTypeID'] = this.patientTypeID;
return data;
}
}

@ -0,0 +1,76 @@
class PendingOrderRequestModel {
bool isDentalAllowedBackend;
double versionID;
int channel;
int languageID;
String iPAdress;
String generalid;
int deviceTypeID;
String tokenID;
int patientID;
int admissionNo;
String sessionID;
int projectID;
String setupID;
bool patientOutSA;
int patientType;
int patientTypeID;
PendingOrderRequestModel(
{this.isDentalAllowedBackend,
this.versionID,
this.channel,
this.languageID,
this.iPAdress,
this.generalid,
this.deviceTypeID,
this.tokenID,
this.patientID,
this.admissionNo,
this.sessionID,
this.projectID,
this.setupID,
this.patientOutSA,
this.patientType,
this.patientTypeID});
PendingOrderRequestModel.fromJson(Map<String, dynamic> json) {
isDentalAllowedBackend = json['isDentalAllowedBackend'];
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
generalid = json['generalid'];
deviceTypeID = json['DeviceTypeID'];
tokenID = json['TokenID'];
patientID = json['PatientID'];
admissionNo = json['AdmissionNo'];
sessionID = json['SessionID'];
projectID = json['ProjectID'];
setupID = json['SetupID'];
patientOutSA = json['PatientOutSA'];
patientType = json['PatientType'];
patientTypeID = json['PatientTypeID'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['DeviceTypeID'] = this.deviceTypeID;
data['TokenID'] = this.tokenID;
data['PatientID'] = this.patientID;
data['AdmissionNo'] = this.admissionNo;
data['SessionID'] = this.sessionID;
data['ProjectID'] = this.projectID;
data['SetupID'] = this.setupID;
data['PatientOutSA'] = this.patientOutSA;
data['PatientType'] = this.patientType;
data['PatientTypeID'] = this.patientTypeID;
return data;
}
}

@ -0,0 +1,15 @@
class PendingOrderModel {
String notes;
PendingOrderModel({this.notes});
PendingOrderModel.fromJson(Map<String, dynamic> json) {
notes = json['Notes'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Notes'] = this.notes;
return data;
}
}

@ -5,6 +5,7 @@ import 'package:doctor_app_flutter/screens/patient-sick-leave/patient_sick_leave
import 'package:doctor_app_flutter/screens/patients/ECGPage.dart';
import 'package:doctor_app_flutter/screens/patients/insurance_approval_screen_patient.dart';
import 'package:doctor_app_flutter/screens/patients/profile/diagnosis/diagnosis_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/admission-orders/admission_orders_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/lab_result/all_lab_special_result_page.dart';
import 'package:doctor_app_flutter/screens/patients/profile/lab_result/labs_home_page.dart';
import 'package:doctor_app_flutter/screens/patients/profile/medical_report/AddVerifyMedicalReport.dart';
@ -13,6 +14,7 @@ import 'package:doctor_app_flutter/screens/patients/profile/medical_report/Medic
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';
import 'package:doctor_app_flutter/screens/patients/profile/pending_orders/pending_orders_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/prescriptions/in_patient_prescription_details_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/radiology/radiology_home_page.dart';
import 'package:doctor_app_flutter/screens/patients/profile/referral/refer-patient-screen-in-patient.dart';
@ -29,6 +31,7 @@ import 'landing_page.dart';
import 'screens/patients/profile/admission-request/admission-request-first-screen.dart';
import 'screens/patients/profile/admission-request/admission-request-third-screen.dart';
import 'screens/patients/profile/admission-request/admission-request_second-screen.dart';
import 'screens/patients/profile/referral/my-referral-detail-screen.dart';
import 'screens/patients/profile/referral/refer-patient-screen.dart';
@ -70,6 +73,8 @@ const String ADD_SICKLEAVE = 'add-sickleave';
const String RADIOLOGY_PATIENT = 'radiology-patient';
const String ALL_SPECIAL_LAB_RESULT = 'all-special_lab';
const String GET_OPERATION_REPORT = 'operation-report';
const String PENDING_ORDERS = 'pending-orders';
const String ADMISSION_ORDERS = 'admission-orders';
const String NURSING_PROGRESS_NOTE = 'nursing_progress_note';
const String DIAGNOSIS_FOR_IN_PATIENT = 'get_diagnosis_for_in_patient';
@ -115,7 +120,7 @@ var routes = {
// PATIENT_UCAF_DETAIL: (_) => UcafDetailScreen(),
PATIENT_ECG: (_) => ECGPage(),
ALL_SPECIAL_LAB_RESULT: (_) => AllLabSpecialResult(),
NURSING_PROGRESS_NOTE: (_) => NursingProgressNoteScreen(),
DIAGNOSIS_FOR_IN_PATIENT: (_) => DiagnosisScreen(),
GET_OPERATION_REPORT: (_) => OperationReportScreen(),
PENDING_ORDERS: (_) => PendingOrdersScreen(),
ADMISSION_ORDERS: (_) => AdmissionOrdersScreen(),
};

@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
class HomePatientCard extends StatelessWidget {
final Color backgroundColor;
final IconData cardIcon;
final String cardIconImage;
final Color backgroundIconColor;
final String text;
final Color textColor;
@ -15,11 +16,12 @@ class HomePatientCard extends StatelessWidget {
HomePatientCard({
@required this.backgroundColor,
@required this.backgroundIconColor,
@required this.cardIcon,
this.cardIcon,
this.cardIconImage,
@required this.text,
@required this.textColor,
@required this.onTap,
this.iconSize = 30,
this.iconSize = 30,
});
@override
@ -38,24 +40,41 @@ class HomePatientCard extends StatelessWidget {
children: [
Container(
margin: EdgeInsets.only(top: 18, left: 10),
color:Colors.transparent,
child: Icon(
cardIcon,
size: iconSize * 2,
color: backgroundIconColor,
),
color: Colors.transparent,
child: cardIcon != null
? Icon(
cardIcon,
size: iconSize * 2,
color: backgroundIconColor,
)
: IconButton(
icon: Image.asset(
'assets/images/patient_register.png',
width: iconSize * 2,
height: iconSize * 2,
fit: BoxFit.fill,
),
iconSize: iconSize * 2,
color: backgroundIconColor,
onPressed: () => null,
),
),
Container(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Icon(
cardIcon,
size: iconSize,
color: textColor,
),
cardIcon != null
? Icon(
cardIcon,
size: iconSize,
color: textColor,
)
: Image.asset(
cardIconImage,
height: iconSize,
width: iconSize,
),
SizedBox(
height: 4,
),

@ -16,6 +16,7 @@ import 'package:doctor_app_flutter/screens/patients/In_patient/in_patient_screen
import 'package:doctor_app_flutter/screens/patients/out_patient/out_patient_screen.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_screen.dart';
import 'package:doctor_app_flutter/screens/patients/profile/referral/patient_referral_screen.dart';
import 'package:doctor_app_flutter/screens/patients/register_patient/RegisterPatientPage.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
@ -254,8 +255,8 @@ class _HomeScreenState extends State<HomeScreen> {
else
Container(
child: ErrorMessage(
error: model.error,
)),
error: model.error,
)),
FractionallySizedBox(
// widthFactor: 0.90,
child: Container(
@ -313,7 +314,6 @@ class _HomeScreenState extends State<HomeScreen> {
),
)
]),
]),
),
);
@ -396,6 +396,23 @@ class _HomeScreenState extends State<HomeScreen> {
));
changeColorIndex();
patientCards.add(HomePatientCard(
backgroundColor: backgroundColors[colorIndex],
backgroundIconColor: backgroundIconColors[colorIndex],
cardIconImage: 'assets/images/patient_register.png',
textColor: textColors[colorIndex],
text: TranslationBase.of(context).registerNewPatient,
onTap: () {
Navigator.push(
context,
FadePage(
page: RegisterPatientPage(),
),
);
},
));
changeColorIndex();
patientCards.add(HomePatientCard(
backgroundColor: backgroundColors[colorIndex],
backgroundIconColor: backgroundIconColors[colorIndex],

@ -16,8 +16,9 @@ class PageStepperWidget extends StatelessWidget {
final int stepsCount;
final int currentStepIndex;
final Size screenSize;
final List<String> stepsTitles;
PageStepperWidget({this.stepsCount, this.currentStepIndex, this.screenSize});
PageStepperWidget({this.stepsCount, this.currentStepIndex, this.screenSize, this.stepsTitles});
@override
Widget build(BuildContext context) {
@ -33,10 +34,10 @@ class PageStepperWidget extends StatelessWidget {
for (int i = 1; i <= stepsCount; i++)
if (i == currentStepIndex)
StepWidget(i, true, i == stepsCount, i < currentStepIndex,
dividerWidth)
dividerWidth, stepsTitles: stepsTitles,)
else
StepWidget(i, false, i == stepsCount, i < currentStepIndex,
dividerWidth)
dividerWidth, stepsTitles: stepsTitles,)
],
)
],
@ -52,9 +53,10 @@ class StepWidget extends StatelessWidget {
final bool isFinalStep;
final bool isStepFinish;
final double dividerWidth;
final List<String> stepsTitles;
StepWidget(this.index, this.isInProgress, this.isFinalStep, this.isStepFinish,
this.dividerWidth);
this.dividerWidth, {this.stepsTitles});
@override
Widget build(BuildContext context) {
@ -106,7 +108,7 @@ class StepWidget extends StatelessWidget {
height: 8,
),
AppText(
"${TranslationBase.of(context).step} $index",
stepsTitles == null ? "${TranslationBase.of(context).step} $index" : "${stepsTitles[index - 1]}",
fontWeight: FontWeight.bold,
color: status == StepStatus.Locked ? Color(0xFF969696) : Colors.black,
fontFamily: 'Poppins',

@ -0,0 +1,351 @@
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:flutter/material.dart';
import 'package:provider/provider.dart';
class AdmissionOrdersScreen extends StatefulWidget {
const AdmissionOrdersScreen({Key key}) : super(key: key);
@override
_AdmissionOrdersScreenState createState() => _AdmissionOrdersScreenState();
}
class _AdmissionOrdersScreenState extends State<AdmissionOrdersScreen> {
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<PendingOrdersViewModel>(
onModelReady: (model) => model.getAdmissionOrders(
admissionNo: 2014005178, 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
? DrAppEmbeddedError(
error: TranslationBase.of(context).noDataAvailable)
: Container(
color: Colors.grey[200],
child: Column(
children: <Widget>[
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: model.admissionOrderList[index]
// .status ==
// 1 &&
// authenticationViewModel
// .doctorProfile.doctorID !=
// model
// .patientProgressNoteList[
// index]
// .createdBy
// ? Color(0xFFCC9B14)
// : model.patientProgressNoteList[index]
// .status ==
// 4
// ? Colors.red.shade700
// : model.patientProgressNoteList[index]
// .status ==
// 2
// ? Colors.green[600]
// : Color(0xFFCC9B14),
widget: Column(
children: [
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
SizedBox(
width: 10,
),
SizedBox(
width: 10,
)
],
),
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: 10,
),
Expanded(
child: AppText(
model
.admissionOrderList[
index]
.createdBy
.toString() ??
'',
fontWeight:
FontWeight.w600,
fontSize: 12,
isCopyable: true,
),
),
],
),
Row(
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
AppText(
TranslationBase.of(
context)
.procedureName
.toString(),
fontSize: 10,
),
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: 10,
),
Expanded(
child: AppText(
model
.admissionOrderList[
index]
.orderNo
.toString() ??
'',
fontWeight:
FontWeight.w600,
fontSize: 12,
isCopyable: true,
),
),
],
),
// Row(
// crossAxisAlignment:
// CrossAxisAlignment
// .start,
// children: [
// AppText(
// TranslationBase.of(
// context)
// .createdBy
// .toString(),
// fontSize: 10,
// ),
// Expanded(
// child: AppText(
// model
// .admissionOrderList[
// index]
// .createdBy
// .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,
),
],
),
),
);
}),
),
),
],
),
),
),
);
}
}

@ -92,7 +92,7 @@ class _ProgressNoteState extends State<DiagnosisScreen> {
widthFactor: 0.95,
child: CardWithBgWidget(
hasBorder: false,
bgColor: Colors.black38,
bgColor: Colors.transparent,
widget: Column(
children: [
Column(

@ -94,7 +94,7 @@ class _ProgressNoteState extends State<NursingProgressNoteScreen> {
widthFactor: 0.95,
child: CardWithBgWidget(
hasBorder: false,
bgColor: Colors.black38,
bgColor: Colors.transparent,
widget: Column(
children: [
Column(

@ -89,36 +89,36 @@ class _ProgressNoteState extends State<OperationReportScreen> {
patient,
isInpatient: true,
),
body:
Container(
color: Colors.grey[200],
child: Column(
children: <Widget>[
AddNewOrder(
onTap: () async {
await locator<AnalyticsService>().logEvent(
eventCategory: "Operation Report Screen",
eventAction: "Update Operation Report ",
);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UpdateOperationReport(
operationReportViewModel: model,
patient: patient,
visitType: widget.visitType,
isUpdate: false,
),
settings: RouteSettings(name: 'UpdateNoteOrder'),
),
);
},
label: TranslationBase.of(context).operationReports,
body: Container(
color: Colors.grey[200],
child: Column(
children: <Widget>[
AddNewOrder(
onTap: () async {
await locator<AnalyticsService>().logEvent(
eventCategory: "Operation Report Screen",
eventAction: "Update Operation Report ",
);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UpdateOperationReport(
operationReportViewModel: model,
patient: patient,
visitType: widget.visitType,
isUpdate: false,
),
model.operationReportList == null ||
model.operationReportList.length == 0
? DrAppEmbeddedError(
error: TranslationBase.of(context).errorNoProgressNote):Expanded(
settings: RouteSettings(name: 'UpdateNoteOrder'),
),
);
},
label: TranslationBase.of(context).operationReports,
),
model.operationReportList == null ||
model.operationReportList.length == 0
? DrAppEmbeddedError(
error: TranslationBase.of(context).errorNoProgressNote)
: Expanded(
child: Container(
child: ListView.builder(
itemCount: model.operationReportList.length,
@ -127,23 +127,7 @@ class _ProgressNoteState extends State<OperationReportScreen> {
widthFactor: 0.95,
child: CardWithBgWidget(
hasBorder: false,
bgColor: model.operationReportList[index]
.status ==
1 &&
authenticationViewModel
.doctorProfile.doctorID !=
model.operationReportList[index]
.createdBy
? Color(0xFFCC9B14)
: model.operationReportList[index]
.status ==
4
? Colors.red.shade700
: model.operationReportList[index]
.status ==
2
? Colors.green[600]
: Color(0xFFCC9B14),
bgColor: Colors.white,
widget: Column(
children: [
Column(
@ -548,9 +532,9 @@ class _ProgressNoteState extends State<OperationReportScreen> {
}),
),
),
],
),
),
],
),
),
),
);
}

@ -0,0 +1,64 @@
import 'package:doctor_app_flutter/core/viewModel/pednding_orders_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/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/errors/dr_app_embedded_error.dart';
import 'package:flutter/material.dart';
class PendingOrdersScreen extends StatelessWidget {
const PendingOrdersScreen({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
patient = routeArgs['patient'];
String patientType = routeArgs['patientType'];
bool isInpatient = routeArgs['isInpatient'];
return BaseView<PendingOrdersViewModel>(
onModelReady: (model) => model.getPendingOrders(
patientId: patient.patientMRN,
admissionNo: int.parse(patient.admissionNo)),
builder:
(BuildContext context, PendingOrdersViewModel model, Widget child) =>
AppScaffold(
appBar: PatientProfileAppBar(
patient,
isInpatient: isInpatient,
),
isShowAppBar: true,
baseViewModel: model,
appBarTitle: "Pending Orders",
body: model.pendingOrdersList == null ||
model.pendingOrdersList.length == 0
? DrAppEmbeddedError(
error: TranslationBase.of(context).noDataAvailable)
: Container(
child: ListView.builder(
itemCount: model.pendingOrdersList.length,
itemBuilder: (BuildContext ctxt, int index) {
return Padding(
padding: EdgeInsets.all(8.0),
child: Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.all(
Radius.circular(10.0),
),
border: Border.all(
color: Color(0xFF707070), width: 0.30),
),
child: Padding(
padding: EdgeInsets.all(8.0),
child:
AppText(model.pendingOrdersList[index].notes),
),
),
);
})),
),
);
}
}

@ -133,6 +133,20 @@ class ProfileGridForInPatient extends StatelessWidget {
'patient/patient_sick_leave.png',
isInPatient: isInpatient,
),
PatientProfileCardModel(
"Pending",
"Orders",
PENDING_ORDERS,
'patient/patient_sick_leave.png',
isInPatient: isInpatient,
),
PatientProfileCardModel(
"Admission",
"Orders",
ADMISSION_ORDERS,
'patient/patient_sick_leave.png',
isInPatient: isInpatient,
),
PatientProfileCardModel(
"Nursing",
"Progress Note",

@ -0,0 +1,212 @@
import 'package:doctor_app_flutter/core/viewModel/PatientRegisterViewModel.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/In_patient/InPatientHeader.dart';
import 'package:doctor_app_flutter/screens/patients/patient_search/patient_search_header.dart';
import 'package:doctor_app_flutter/screens/patients/profile/UCAF/page-stepper-widget.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/shared/app_scaffold_widget.dart';
import 'package:doctor_app_flutter/widgets/shared/buttons/app_buttons_widget.dart';
import 'package:flutter/material.dart';
import 'RegisterSearchPatientPage.dart';
class RegisterPatientPage extends StatefulWidget {
const RegisterPatientPage({Key key}) : super(key: key);
@override
_RegisterPatientPageState createState() => _RegisterPatientPageState();
}
class _RegisterPatientPageState extends State<RegisterPatientPage>
with TickerProviderStateMixin {
PageController _controller;
int _currentIndex = 0;
bool _isLoading = false;
changePageViewIndex(pageIndex, {isChangeState = true}) {
if (pageIndex != _currentIndex && isChangeState) changeLoadingState(true);
_controller.jumpToPage(pageIndex);
setState(() {
_currentIndex = pageIndex;
});
}
void changeLoadingState(bool isLoading) {
setState(() {
_isLoading = isLoading;
});
}
@override
void initState() {
_controller = new PageController();
super.initState();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return BaseView<PatientRegisterViewModel>(
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: true,
isLoading: _isLoading,
appBar: PatientSearchHeader(
title: TranslationBase.of(context).registeraPatient,
),
body: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 10,
),
PageStepperWidget(
stepsCount: 3,
currentStepIndex: _currentIndex + 1,
screenSize: screenSize,
stepsTitles: [
"Search",
"Activation",
"Confirmation",
],
),
SizedBox(
height: 10,
),
Expanded(
child: Container(
color: Theme.of(context).scaffoldBackgroundColor,
child: PageView(
physics: NeverScrollableScrollPhysics(),
controller: _controller,
onPageChanged: (index) {
setState(() {
_currentIndex = index;
});
},
scrollDirection: Axis.horizontal,
children: <Widget>[
RegisterSearchPatientPage(),
]),
),
),
],
),
)),
_isLoading
? Container(
height: 0,
)
: pagerButtons(model),
],
),
),
);
}
Widget pagerButtons(PatientRegisterViewModel model) {
switch (_currentIndex) {
case 2:
return Container(
margin: EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Row(
children: [
Expanded(
child: Container(
child: AppButton(
title: TranslationBase.of(context).cancel,
hasBorder: true,
vPadding: 12,
hPadding: 8,
borderColor: Color(0xFFeaeaea),
color: Color(0xFFeaeaea),
fontColor: Colors.black,
fontSize: 2.2,
onPressed: () {
Navigator.of(context).pop();
},
),
),
),
SizedBox(
width: 8,
),
Expanded(
child: Container(
child: AppButton(
title: TranslationBase.of(context).noteConfirm,
hasBorder: true,
vPadding: 12,
hPadding: 8,
borderColor: Color(0xFF359846),
color: Color(0xFF359846),
fontColor: Colors.white,
fontSize: 2.0,
onPressed: () {},
),
),
),
],
),
);
default:
return Container(
color: Colors.white,
padding: EdgeInsets.symmetric(vertical: 16, horizontal: 16),
child: Row(
children: [
Expanded(
child: Container(
child: AppButton(
title: TranslationBase.of(context).cancel,
hasBorder: true,
vPadding: 12,
hPadding: 8,
borderColor: Color(0xFFeaeaea),
color: Color(0xFFeaeaea),
fontColor: Colors.black,
fontSize: 2.2,
onPressed: () {
Navigator.of(context).pop();
},
),
),
),
SizedBox(
width: 8,
),
Expanded(
child: Container(
child: AppButton(
title: TranslationBase.of(context).next,
hasBorder: true,
vPadding: 12,
hPadding: 8,
borderColor: Color(0xFFB8382B),
color: Color(0xFFB8382B),
fontColor: Colors.white,
fontSize: 2.0,
onPressed: () {
changePageViewIndex(_currentIndex + 1);
},
),
),
),
],
),
);
}
}
}

@ -0,0 +1,201 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientRegisterViewModel.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/dr_app_toast_msg.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.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/dialogs/dailog-list-select.dart';
import 'package:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:doctor_app_flutter/widgets/shared/text_fields/app-textfield-custom.dart';
import 'package:flutter/material.dart';
class RegisterSearchPatientPage extends StatefulWidget {
const RegisterSearchPatientPage({Key key}) : super(key: key);
@override
_RegisterSearchPatientPageState createState() =>
_RegisterSearchPatientPageState();
}
class _RegisterSearchPatientPageState extends State<RegisterSearchPatientPage> {
String countryError;
dynamic _selectedCountry;
final _phoneController = TextEditingController();
String phoneError;
final _idController = TextEditingController();
String idError;
DateTime _birthDate;
String birthdateError;
@override
Widget build(BuildContext context) {
final screenSize = MediaQuery.of(context).size;
return BaseView<PatientRegisterViewModel>(
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
isShowAppBar: false,
body: Column(
children: [
Expanded(
child: Container(
width: double.infinity,
margin: EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
"Please enter mobile number or Identification number",
fontFamily: 'Poppins',
fontSize: SizeConfig.textMultiplier * 2.2,
fontWeight: FontWeight.w800,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: "Country",
isTextFieldHasSuffix: true,
validationError: countryError,
dropDownText: _selectedCountry != null
? _selectedCountry['nameEn']
: null,
enabled: false,
/*onClick: model.dietTypesList != null && model.dietTypesList.length > 0
? () {
openListDialogField('nameEn', 'id', model.dietTypesList, (selectedValue) {
setState(() {
_selectedCountry = selectedValue;
});
});
}
: () async {
GifLoaderDialogUtils.showMyDialog(context);
await model
.getDietTypes(patient.patientId)
.then((_) => GifLoaderDialogUtils.hideDialog(context));
if (model.state == ViewState.Idle && model.dietTypesList.length > 0) {
openListDialogField('nameEn', 'id', model.dietTypesList, (selectedValue) {
setState(() {
_selectedCountry = selectedValue;
});
});
} else if (model.state == ViewState.ErrorLocal) {
DrAppToastMsg.showErrorToast(model.error);
} else {
DrAppToastMsg.showErrorToast("Empty List");
}
},*/
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: "Phone Number",
inputType: TextInputType.phone,
controller: _phoneController,
validationError: phoneError,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: "ID Number",
inputType: TextInputType.phone,
controller: _idController,
validationError: idError,
),
SizedBox(
height: 12,
),
AppText(
"Calender",
fontSize: SizeConfig.textMultiplier * 1.8,
fontWeight: FontWeight.w800,
),
SizedBox(
height: 10,
),
AppTextFieldCustom(
height: screenSize.height * 0.075,
hintText: "Birthdate",
dropDownText: _birthDate != null
? "${AppDateUtils.convertStringToDateFormat(_birthDate.toString(), "yyyy-MM-dd")}"
: null,
enabled: false,
isTextFieldHasSuffix: true,
validationError: birthdateError,
suffixIcon: IconButton(
icon: Icon(
Icons.calendar_today,
color: Colors.black,
),
onPressed: null,
),
onClick: () {
if (_birthDate == null) {
_birthDate = DateTime.now();
}
_selectDate(context, _birthDate, (picked) {
setState(() {
_birthDate = picked;
});
});
},
),
],
),
),
),
),
],
),
),
);
}
Future _selectDate(BuildContext context, DateTime dateTime,
Function(DateTime picked) updateDate) async {
final DateTime picked = await showDatePicker(
context: context,
initialDate: dateTime,
firstDate: DateTime.now(),
lastDate: DateTime(2040),
initialEntryMode: DatePickerEntryMode.calendar,
);
if (picked != null && picked != dateTime) {
updateDate(picked);
}
}
void openListDialogField(String attributeName, String attributeValueId,
List<dynamic> list, Function(dynamic selectedValue) okFunction) {
ListSelectDialog dialog = ListSelectDialog(
list: list,
attributeName: attributeName,
attributeValueId: attributeValueId,
usingSearch: true,
okText: TranslationBase.of(context).ok,
okFunction: (selectedValue) {
okFunction(selectedValue);
},
);
showDialog(
barrierDismissible: false,
context: context,
builder: (BuildContext context) {
return dialog;
},
);
}
}

@ -1106,6 +1106,8 @@ class TranslationBase {
String get requestType => localizedValues['requestType'][locale.languageCode];
String get allClinic => localizedValues['allClinic'][locale.languageCode];
String get notReplied => localizedValues['notReplied'][locale.languageCode];
String get registerNewPatient => localizedValues['registerNewPatient'][locale.languageCode];
String get registeraPatient => localizedValues['registeraPatient'][locale.languageCode];
}

@ -146,6 +146,7 @@ class _AppTextFieldCustomState extends State<AppTextFieldCustom> {
? TextAlign.right
: TextAlign.left,
focusNode: _focusNode,
textAlignVertical: TextAlignVertical.center,
decoration: TextFieldsUtils
.textFieldSelectorDecoration(
widget.hintText, null, true),

Loading…
Cancel
Save