Done Ed online

merge-update-with-lab-changes
Mohammad Aljammal 5 years ago
parent 576181a72e
commit ec401d4848

@ -91,6 +91,11 @@ const GET_PATIENT_VITAL_SIGN =
const GET_NEAREST_HOSPITAL =
'Services/Patients.svc/REST/Patient_GetProjectAvgERWaitingTime';
///ED Online
const ER_GET_VISUAL_TRIAGE_QUESTIONS = "services/Doctors.svc/REST/ER_GetVisualTriageQuestions";
const ER_SAVE_TRIAGE_INFORMATION = "services/Doctors.svc/REST/ER_SaveTriageInformation";
const ER_GetPatientPaymentInformationForERClinic = "services/Doctors.svc/REST/ER_GetPatientPaymentInformationForERClinic";
///Er Nearest
const GET_AMBULANCE_REQUEST =
'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod';

@ -1956,4 +1956,11 @@ const Map localizedValues = {
},
"order-overview": {"en": "Order Overview", "ar": "ملخص الطلب"},
"shipping-address": {"en": "Delivery Address", "ar": "عنوان التوصيل"},
"onlineCheckInAgreement": {"en": "The online check-in is for non-life threatening situationCall the red crescent (number) or go to the nearest emergency department if there are:signs of stroke or heart attack history of seizure or syncope there is limb or life threatening injury picture of severe injuries",
"ar": "تسجيل الذهاب الى الطوارئ عبر الإنترنت هو فقط للحالات  التي لا تهدد الحياة يجب الاتصل بالهلال الأحمر (رقم) أو الذهاب إلى أقرب قسم طوارئ إذا كان هناك علامات السكتة الدماغية أو النوبة القلبية او هناك نوبة تشنج او حالة فقدان الوعي او وجود إصابة تهدد أحد الأطراف او تهدد الحياة او وجود إصابات خطيرة"},
"chiefComplaints": {"en": "Chief Complaints", "ar": "الشكوى الرئيسة"},
"errorChiefComplaints": {"en": "Please Chief Complaints", "ar": "يرجى ادخال الشكوى الرئيسة"},
"errorExpectedArrivalTimes": {"en": "Please Expected arrival time", "ar": "يرجى ادخال الوقت المتوقع للوصول"},
"expectedArrivalTime": {"en": "Expected arrival time", "ar": "الوقت المتوقع للوصول"},
};

@ -0,0 +1,92 @@
class ErPatientShareModel {
int cashPrice;
int cashPriceTax;
int cashPriceWithTax;
int companyId;
String companyName;
int companyShareWithTax;
dynamic errCode;
int groupID;
dynamic insurancePolicyNo;
String message;
dynamic patientCardID;
double patientShare;
double patientShareWithTax;
double patientTaxAmount;
int policyId;
String policyName;
String procedureName;
dynamic setupID;
int statusCode;
dynamic subPolicyNo;
ErPatientShareModel(
{this.cashPrice,
this.cashPriceTax,
this.cashPriceWithTax,
this.companyId,
this.companyName,
this.companyShareWithTax,
this.errCode,
this.groupID,
this.insurancePolicyNo,
this.message,
this.patientCardID,
this.patientShare,
this.patientShareWithTax,
this.patientTaxAmount,
this.policyId,
this.policyName,
this.procedureName,
this.setupID,
this.statusCode,
this.subPolicyNo});
ErPatientShareModel.fromJson(Map<String, dynamic> json) {
cashPrice = json['CashPrice'];
cashPriceTax = json['CashPriceTax'];
cashPriceWithTax = json['CashPriceWithTax'];
companyId = json['CompanyId'];
companyName = json['CompanyName'];
companyShareWithTax = json['CompanyShareWithTax'];
errCode = json['ErrCode'];
groupID = json['GroupID'];
insurancePolicyNo = json['InsurancePolicyNo'];
message = json['Message'];
patientCardID = json['PatientCardID'];
patientShare = json['PatientShare'];
patientShareWithTax = json['PatientShareWithTax'];
patientTaxAmount = json['PatientTaxAmount'];
policyId = json['PolicyId'];
policyName = json['PolicyName'];
procedureName = json['ProcedureName'];
setupID = json['SetupID'];
statusCode = json['StatusCode'];
subPolicyNo = json['SubPolicyNo'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['CashPrice'] = this.cashPrice;
data['CashPriceTax'] = this.cashPriceTax;
data['CashPriceWithTax'] = this.cashPriceWithTax;
data['CompanyId'] = this.companyId;
data['CompanyName'] = this.companyName;
data['CompanyShareWithTax'] = this.companyShareWithTax;
data['ErrCode'] = this.errCode;
data['GroupID'] = this.groupID;
data['InsurancePolicyNo'] = this.insurancePolicyNo;
data['Message'] = this.message;
data['PatientCardID'] = this.patientCardID;
data['PatientShare'] = this.patientShare;
data['PatientShareWithTax'] = this.patientShareWithTax;
data['PatientTaxAmount'] = this.patientTaxAmount;
data['PolicyId'] = this.policyId;
data['PolicyName'] = this.policyName;
data['ProcedureName'] = this.procedureName;
data['SetupID'] = this.setupID;
data['StatusCode'] = this.statusCode;
data['SubPolicyNo'] = this.subPolicyNo;
return data;
}
}

@ -0,0 +1,147 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
class TriageInformationRequest {
double versionID;
int channel;
int languageID;
String iPAdress;
String sessionID;
int patientID;
String tokenID;
String generalid;
int patientOutSA;
int patientTypeID;
int patientType;
int projectID;
ERTriageInformation eRTriageInformation;
HospitalsModel selectedHospital;
TriageInformationRequest(
{this.versionID,
this.channel,
this.languageID,
this.iPAdress,
this.sessionID,
this.patientID,
this.tokenID,
this.generalid,
this.patientOutSA,
this.patientTypeID,
this.patientType,
this.projectID,
this.eRTriageInformation,this.selectedHospital});
TriageInformationRequest.fromJson(Map<String, dynamic> json) {
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
sessionID = json['SessionID'];
patientID = json['PatientID'];
tokenID = json['TokenID'];
generalid = json['generalid'];
patientOutSA = json['PatientOutSA'];
patientTypeID = json['PatientTypeID'];
patientType = json['PatientType'];
projectID = json['ProjectID'];
eRTriageInformation = json['ERTriageInformation'] != null
? new ERTriageInformation.fromJson(json['ERTriageInformation'])
: null;
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['SessionID'] = this.sessionID;
data['PatientID'] = this.patientID;
data['TokenID'] = this.tokenID;
data['generalid'] = this.generalid;
data['PatientOutSA'] = this.patientOutSA;
data['PatientTypeID'] = this.patientTypeID;
data['PatientType'] = this.patientType;
data['ProjectID'] = this.projectID;
if (this.eRTriageInformation != null) {
data['ERTriageInformation'] = this.eRTriageInformation.toJson();
}
return data;
}
}
class ERTriageInformation {
String notes;
String chiefComplaint;
int patientId;
int projectId;
int riskScore;
List<Checklist> checklist;
ERTriageInformation(
{this.notes,
this.chiefComplaint,
this.patientId,
this.projectId,
this.riskScore,
this.checklist});
ERTriageInformation.fromJson(Map<String, dynamic> json) {
notes = json['Notes'];
chiefComplaint = json['ChiefComplaint'];
patientId = json['PatientId'];
projectId = json['ProjectId'];
riskScore = json['RiskScore'];
if (json['checklist'] != null) {
checklist = new List<Checklist>();
json['checklist'].forEach((v) {
checklist.add(new Checklist.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['Notes'] = this.notes;
data['ChiefComplaint'] = this.chiefComplaint;
data['PatientId'] = this.patientId;
data['ProjectId'] = this.projectId;
data['RiskScore'] = this.riskScore;
if (this.checklist != null) {
data['checklist'] = this.checklist.map((v) => v.toJson()).toList();
}
return data;
}
}
class Checklist {
int isSelected;
int parameterCode;
int parameterGroup;
int parameterType;
int score;
Checklist(
{this.isSelected,
this.parameterCode,
this.parameterGroup,
this.parameterType,
this.score});
Checklist.fromJson(Map<String, dynamic> json) {
isSelected = json['IsSelected'];
parameterCode = json['ParameterCode'];
parameterGroup = json['ParameterGroup'];
parameterType = json['ParameterType'];
score = json['Score'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['IsSelected'] = this.isSelected;
data['ParameterCode'] = this.parameterCode;
data['ParameterGroup'] = this.parameterGroup;
data['ParameterType'] = this.parameterType;
data['Score'] = this.score;
return data;
}
}

@ -0,0 +1,52 @@
class TriageQuestionsModel {
String adultPoints;
String headerSequence;
int parameterCode;
int parameterGroup;
int parameterType;
String pediaPoints;
String question;
String questionN;
String scoreGroup;
String titles;
TriageQuestionsModel(
{this.adultPoints,
this.headerSequence,
this.parameterCode,
this.parameterGroup,
this.parameterType,
this.pediaPoints,
this.question,
this.questionN,
this.scoreGroup,
this.titles});
TriageQuestionsModel.fromJson(Map<String, dynamic> json) {
adultPoints = json['AdultPoints'];
headerSequence = json['HeaderSequence'];
parameterCode = json['ParameterCode'];
parameterGroup = json['ParameterGroup'];
parameterType = json['ParameterType'];
pediaPoints = json['PediaPoints'];
question = json['Question'];
questionN = json['QuestionN'];
scoreGroup = json['ScoreGroup'];
titles = json['Titles'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['AdultPoints'] = this.adultPoints;
data['HeaderSequence'] = this.headerSequence;
data['ParameterCode'] = this.parameterCode;
data['ParameterGroup'] = this.parameterGroup;
data['ParameterType'] = this.parameterType;
data['PediaPoints'] = this.pediaPoints;
data['Question'] = this.question;
data['QuestionN'] = this.questionN;
data['ScoreGroup'] = this.scoreGroup;
data['Titles'] = this.titles;
return data;
}
}

@ -1,11 +1,11 @@
class HospitalsModel {
String desciption;
Null desciptionN;
dynamic desciptionN;
dynamic iD;
String legalName;
String legalNameN;
String name;
Null nameN;
dynamic nameN;
String phoneNumber;
String setupID;
dynamic distanceInKilometers;
@ -13,7 +13,7 @@ class HospitalsModel {
String latitude;
String longitude;
dynamic mainProjectID;
Null projectOutSA;
dynamic projectOutSA;
bool usingInDoctorApp;
HospitalsModel(

@ -0,0 +1,96 @@
import 'package:diplomaticquarterapp/config/config.dart';
import 'package:diplomaticquarterapp/core/model/er/ErPatientShareModel.dart';
import 'package:diplomaticquarterapp/core/model/er/TriageQuestionsModel.dart';
import 'package:diplomaticquarterapp/core/service/base_service.dart';
class EdOnlineServices extends BaseService {
List<TriageQuestionsModel> triageQuestionsModelList = List();
ErPatientShareModel erPatientShareModel;
Future getQuestions() async {
hasError =false;
triageQuestionsModelList.clear();
Map<String, dynamic> body = Map();
body['ProjectID'] = 15;
await baseAppClient.post(ER_GET_VISUAL_TRIAGE_QUESTIONS,
onSuccess: (dynamic response, int statusCode) {
triageQuestionsModelList.clear();
response['ER_TriageQuestionsList'].forEach((questions) {
triageQuestionsModelList.add(TriageQuestionsModel.fromJson(questions));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
Future getPatientPaymentInformation({var id}) async {
hasError =false;
await baseAppClient.post(ER_GetPatientPaymentInformationForERClinic,
onSuccess: (dynamic response, int statusCode) {
erPatientShareModel =
ErPatientShareModel.fromJson(response['ER_PatientShare']);
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: Map.from({"ProjectID":15,"ClinicID":10}));
}
Future saveQuestionsInformation(
{String notes,
String chiefComplaint,
int projectId,
DateTime selectedTime,
List<TriageQuestionsModel> selectedQuestions}) async {
hasError =false;
Map<String, dynamic> body = Map();
List<Map> checklist = List();
body['ProjectID'] = 15;
body['ProjectId'] = projectId;
int riskScore = 0;
if (user.age > 14) {
selectedQuestions.forEach((element) {
int score = int.parse(element.adultPoints);
riskScore += score;
checklist.add(Map.from({
"IsSelected": 1,
"ParameterCode": element.parameterCode,
"ParameterGroup": element.parameterGroup,
"ParameterType": element.parameterType,
"Score": score
}));
});
} else {
selectedQuestions.forEach((element) {
int score = int.parse(element.pediaPoints);
riskScore += score;
checklist.add(Map.from({
"IsSelected": 1,
"ParameterCode": element.parameterCode,
"ParameterGroup": element.parameterGroup,
"ParameterType": element.parameterType,
"Score": score
}));
});
}
body['ERTriageInformation'] = {
"Notes": notes,
"ChiefComplaint": chiefComplaint,
"PatientId": user.patientID,
"ProjectId": 15,
"RiskScore": riskScore,
"checklist": checklist.map((e) => e).toList()
};
await baseAppClient.post(ER_SAVE_TRIAGE_INFORMATION,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: body);
}
}

@ -0,0 +1,76 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/er/ErPatientShareModel.dart';
import 'package:diplomaticquarterapp/core/model/er/TriageQuestionsModel.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/service/er/EdOnlineServices.dart';
import 'package:diplomaticquarterapp/core/service/hospital_service.dart';
import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart';
import '../../../locator.dart';
class EdOnlineViewModel extends BaseViewModel {
HospitalService _hospitalService = locator<HospitalService>();
EdOnlineServices _edOnlineServices = locator<EdOnlineServices>();
List<HospitalsModel> get hospitals => _hospitalService.hospitals;
List<TriageQuestionsModel> get triageQuestionsModelList =>
_edOnlineServices.triageQuestionsModelList;
ErPatientShareModel get erPatientShareModel => _edOnlineServices.erPatientShareModel;
Future getHospitals() async {
if(_hospitalService.hospitals.isEmpty){
setState(ViewState.Busy);
await _hospitalService.getHospitals();
if (_hospitalService.hasError) {
error = _hospitalService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}
Future getQuestions() async {
if(_edOnlineServices.triageQuestionsModelList.isEmpty){
setState(ViewState.Busy);
await _edOnlineServices.getQuestions();
if (_edOnlineServices.hasError) {
error = _edOnlineServices.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}
Future getPatientPaymentInformation({var id}) async {
setState(ViewState.Busy);
await _edOnlineServices.getPatientPaymentInformation();
if (_edOnlineServices.hasError) {
error = _edOnlineServices.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future saveQuestionsInformation(
{String notes,
String chiefComplaint,
int projectId,
DateTime selectedTime,
List<TriageQuestionsModel> selectedQuestions}) async {
setState(ViewState.BusyLocal);
await _edOnlineServices.saveQuestionsInformation(
notes: notes,
projectId: projectId,
chiefComplaint: chiefComplaint,
selectedTime: selectedTime,
selectedQuestions: selectedQuestions);
if (_edOnlineServices.hasError) {
error = _edOnlineServices.error;
setState(ViewState.ErrorLocal);
} else
setState(ViewState.Idle);
}
}

@ -37,6 +37,7 @@ import 'core/service/childvaccines/vaccination_table_service.dart';
import 'core/service/contactus/finadus_service.dart';
import 'core/service/contactus/livechat_service.dart';
import 'core/service/dashboard_service.dart';
import 'core/service/er/EdOnlineServices.dart';
import 'core/service/er/am_service.dart';
import 'core/service/er/er_service.dart';
import 'core/service/feedback/feedback_service.dart';
@ -74,6 +75,7 @@ import 'core/service/parmacyModule/parmacy_module_service.dart';
import 'core/service/offers_service.dart';
import 'core/service/pharmacy_categorise_service.dart';
import 'core/viewModels/AlHabibMedicalService/health-calculator/Bariatrics-viewmodel.dart';
import 'core/viewModels/er/EdOnlineViewModel.dart';
import 'core/viewModels/medical/PrescriptionDeliveryViewModel.dart';
import 'core/viewModels/TermsConditionsViewModel.dart';
import 'core/viewModels/all_habib_medical_services/e_referral_view_model.dart';
@ -191,6 +193,7 @@ void setupLocator() {
locator.registerLazySingleton(() => DeleteBabyService());
locator.registerLazySingleton(() => VaccinationTableService());
locator.registerLazySingleton(() => EdOnlineServices());
//pharmacy
// locator.registerLazySingleton(() => PharmacyCategoriseService());
@ -283,6 +286,7 @@ void setupLocator() {
locator.registerFactory(() => LacumViewModel());
locator.registerFactory(() => LacumTranferViewModel());
locator.registerFactory(() => LacumRegistrationViewModel());
locator.registerFactory(() => EdOnlineViewModel());
//pharmacy
locator.registerFactory(() => PharmacyCategoriseViewModel());

@ -0,0 +1,76 @@
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class ConfirmExitPageDialog extends StatelessWidget {
final GestureTapCallback onTapYes;
final GestureTapCallback onTapNo;
const ConfirmExitPageDialog({Key key, this.onTapYes, this.onTapNo})
: super(key: key);
@override
Widget build(BuildContext context) {
return SimpleDialog(
contentPadding: EdgeInsets.fromLTRB(28.0, 24.0, 28.0, 0.0),
title: Center(
child: Texts(
TranslationBase.of(context).confirm,
color: Colors.black,
),
),
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Texts(
"Are you sure you want to exit this page ?",
color: Colors.grey,
),
SizedBox(
height: 5,
),
Divider(),
SizedBox(
height: 5.0,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
onTapNo();
},
child: Container(
child: Center(
child: Texts(
TranslationBase.of(context).no,
color: Colors.red,
),
),
),
),
InkWell(
onTap: () {
Navigator.pop(context);
onTapYes();
},
child: Container(
child: Center(
child: Texts(TranslationBase.of(context).yes),
),
),
),
],
),
SizedBox(
height: 20.0,
),
],
)
],
);
}
}

@ -0,0 +1,120 @@
import 'package:diplomaticquarterapp/core/model/er/TriageInformationRequest.dart';
import 'package:diplomaticquarterapp/core/model/er/TriageQuestionsModel.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'EdOnlineAgreementPage.dart';
import 'EdOnlineNotesPage.dart';
import 'EdOnlineQuestionsPage.dart';
import 'EdOnlineSelectedHospitalPage.dart';
import 'EdPaymentInformationPage.dart';
import 'ConfirmExitPageDialog.dart';
class DdServicesPage extends StatefulWidget {
@override
_DdServicesPageState createState() => _DdServicesPageState();
}
class _DdServicesPageState extends State<DdServicesPage> {
PageController pageController;
bool isAgree = false;
TriageInformationRequest triageInformationRequest = new TriageInformationRequest();
List<TriageQuestionsModel> selectedQuestions = List();
@override
void initState() {
super.initState();
pageController = new PageController();
}
_changePageViewIndex(int tab) {
setState(() {
pageController.jumpToPage(tab);
pageController.animateToPage(tab,
duration: Duration(milliseconds: 800), curve: Curves.easeOutQuart);
});
}
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return Scaffold(
appBar: AppBar(
elevation: 0,
textTheme: TextTheme(
headline6: TextStyle(
color: Theme.of(context).textTheme.headline1.color,
fontWeight: FontWeight.bold),
),
title: Text(
'ED Online',
style: TextStyle(
fontWeight: FontWeight.bold,
color: Theme.of(context).textTheme.headline1.color,
fontFamily: projectViewModel.isArabic ? 'Cairo' : 'WorkSans'),
// bold: true,
// color: Colors.white,
),
leading: Builder(
builder: (BuildContext context) {
return IconButton(
icon: Icon(Icons.arrow_back),
color: Theme.of(context).textTheme.headline1.color,
onPressed: () {
showConfirmMessage(context);
},
);
},
),
centerTitle: true,
),
body: PageView(
physics: NeverScrollableScrollPhysics(),
controller: pageController,
onPageChanged: _changePageViewIndex,
children: [
EdOnlineSelectedHospitalPage(
changePageViewIndex: _changePageViewIndex,
triageInformationRequest: triageInformationRequest,
),
EdOnlineAgreementPage(
changePageViewIndex: _changePageViewIndex,
isAgree: isAgree,
),
EdOnlineQuestionsPage(
changePageViewIndex: _changePageViewIndex,
selectedQuestions: selectedQuestions,
),
EdOnlineNotesPage(
changePageViewIndex: _changePageViewIndex,
selectedQuestions: selectedQuestions,
triageInformationRequest: triageInformationRequest,
),
EdPaymentInformationPage(selectedHospital: triageInformationRequest.selectedHospital,)
],
),
);
}
void showConfirmMessage(
BuildContext context,
) {
showDialog(
context: context,
child: ConfirmExitPageDialog(
onTapYes: () {
Navigator.pop(context);
},
onTapNo: () {
Navigator.pop(context);
},
),
);
}
}

@ -0,0 +1,99 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class EdOnlineAgreementPage extends StatefulWidget {
final HospitalsModel selectedHospital;
final Function changePageViewIndex;
bool isAgree;
EdOnlineAgreementPage({Key key, this.selectedHospital, this.changePageViewIndex,this.isAgree}) : super(key: key);
@override
_EdOnlineAgreementPageState createState() => _EdOnlineAgreementPageState();
}
class _EdOnlineAgreementPageState extends State<EdOnlineAgreementPage> {
@override
Widget build(BuildContext context) {
return AppScaffold(
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
SizedBox(),
InkWell(
onTap: (){
setState(() {
widget.isAgree = !widget.isAgree;
});
},
child: Row(
children: [
Checkbox(
value: widget.isAgree,
activeColor: Colors.red[800],
onChanged: (bool newValue) {
setState(() {
widget.isAgree = !widget.isAgree;
});
}),
Expanded(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Texts(
TranslationBase.of(context).onlineCheckInAgreement,
fontSize: 15,
),
),
),
],
),
),
SizedBox(),
],
),
),
bottomSheet: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 56,
child: Row(
children: [
Expanded(
child: Container(
margin: EdgeInsets.only(left: 5,right: 5),
child: SecondaryButton(
textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).back.toUpperCase(),
onTap: () => widget.changePageViewIndex(0),
),
),
),
SizedBox(width: 10,),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 5,right: 5),
child: SecondaryButton(
textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).next.toUpperCase(),
disabled: !widget.isAgree,
onTap: () => widget.changePageViewIndex(2),
),
),
),
],
),
),
),
);
}
}

@ -0,0 +1,177 @@
import 'package:diplomaticquarterapp/core/enum/viewstate.dart';
import 'package:diplomaticquarterapp/core/model/er/TriageInformationRequest.dart';
import 'package:diplomaticquarterapp/core/model/er/TriageQuestionsModel.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/er/EdOnlineViewModel.dart';
import 'package:diplomaticquarterapp/core/viewModels/project_view_model.dart';
import 'package:diplomaticquarterapp/pages/Blood/new_text_Field.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
import 'package:diplomaticquarterapp/uitl/gif_loader_dialog_utils.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_datetime_picker/flutter_datetime_picker.dart';
import 'package:provider/provider.dart';
class EdOnlineNotesPage extends StatefulWidget {
final List<TriageQuestionsModel> selectedQuestions;
final Function changePageViewIndex;
TriageInformationRequest triageInformationRequest;
EdOnlineNotesPage(
{Key key, this.selectedQuestions, this.changePageViewIndex,this.triageInformationRequest})
;
@override
_EdOnlineNotesPageState createState() => _EdOnlineNotesPageState();
}
class _EdOnlineNotesPageState extends State<EdOnlineNotesPage> {
TextEditingController _chiefComplaintsTextController =
TextEditingController();
TextEditingController _noteTextController = TextEditingController();
DateTime selectedTime;
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return BaseView<EdOnlineViewModel>(
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Form(
key: _formKey,
child: NewTextFields(
controller: _chiefComplaintsTextController,
maxLines: 15,
minLines: 5,
hintText: TranslationBase.of(context).chiefComplaints,
validator: (value) {
if (value.isEmpty) return TranslationBase.of(context).errorChiefComplaints;
return null;
},
),
),
SizedBox(
height: 8,
),
InkWell(
onTap: () {
DatePicker.showDateTimePicker(
context,
showTitleActions: true,
minTime: DateTime.now(),
maxTime: DateTime.now().add(Duration(hours: 24)),
onConfirm: (date) {
setState(() {
selectedTime = date;
});
},
currentTime: DateTime.now(),
locale: projectViewModel.localeType,
);
},
child: Container(
padding: EdgeInsets.all(12),
width: double.infinity,
// height: 65,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: Colors.white),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Texts(selectedTime == null ?TranslationBase.of(context).errorExpectedArrivalTime:TranslationBase.of(context).expectedArrivalTime),
Texts(getDate(context)),
],
),
),
),
SizedBox(
height: 8,
),
NewTextFields(
controller: _noteTextController,
maxLines: 15,
minLines: 5,
hintText: TranslationBase.of(context).notes,
),
],
),
),
),
bottomSheet: Container(
height: 56,
margin: EdgeInsets.only(bottom: 5),
width: double.infinity,
child: Row(
children: [
Expanded(
child: Container(
margin: EdgeInsets.only(left: 5,right: 5),
child: SecondaryButton(
textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).back.toUpperCase(),
onTap: () => widget.changePageViewIndex(2),
),
),
),
SizedBox(width: 10,),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 5,right: 5),
child: SecondaryButton(
textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).save.toUpperCase(),
disabled: selectedTime == null,
onTap: () async {
if (_formKey.currentState.validate()) {
GifLoaderDialogUtils.showMyDialog(context);
model.saveQuestionsInformation(
chiefComplaint:
_chiefComplaintsTextController.text.toString(),
notes: _noteTextController.text.toString(),
selectedQuestions: widget.selectedQuestions,
projectId: widget.triageInformationRequest.projectID,selectedTime: selectedTime).then((value) {
GifLoaderDialogUtils.hideDialog(context);
if(model.state == ViewState.ErrorLocal)
AppToast.showErrorToast(message: model.error);
else
{
widget.changePageViewIndex(4);
}
}).catchError((onError){
GifLoaderDialogUtils.hideDialog(context);
AppToast.showErrorToast(message: onError.toString());
});
}
}),
),
),
],
),
),
),
);
}
getDate(BuildContext context) {
String message = "";
if (selectedTime != null) {
message = "${selectedTime.hour}:${selectedTime.minute}";
}
return message;
}
}

@ -0,0 +1,127 @@
import 'package:diplomaticquarterapp/core/model/er/TriageQuestionsModel.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/er/EdOnlineViewModel.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
// ignore: must_be_immutable
class EdOnlineQuestionsPage extends StatefulWidget {
final HospitalsModel selectedHospital;
final Function changePageViewIndex;
List<TriageQuestionsModel> selectedQuestions;
EdOnlineQuestionsPage({Key key, this.selectedHospital,this.selectedQuestions, this.changePageViewIndex});
@override
_EdOnlineQuestionsPageState createState() => _EdOnlineQuestionsPageState();
}
class _EdOnlineQuestionsPageState extends State<EdOnlineQuestionsPage> {
@override
Widget build(BuildContext context) {
return BaseView<EdOnlineViewModel>(
onModelReady: (model) => model.getQuestions(),
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
...List.generate(
model.triageQuestionsModelList.length,
(index) =>
InkWell(
onTap: (){
setState(() {
if (widget.selectedQuestions
.contains(model.triageQuestionsModelList[index])) {
widget.selectedQuestions
.remove(model.triageQuestionsModelList[index]);
} else {
widget.selectedQuestions
.add(model.triageQuestionsModelList[index]);
}
});
},
child: Row(
children: [
Checkbox(
value: widget.selectedQuestions.contains(model.triageQuestionsModelList[index]),
activeColor: Colors.red[800],
onChanged: (bool newValue) {
setState(() {
if (widget.selectedQuestions
.contains(model.triageQuestionsModelList[index])) {
widget.selectedQuestions
.remove(model.triageQuestionsModelList[index]);
} else {
widget.selectedQuestions
.add(model.triageQuestionsModelList[index]);
}
});
}),
Expanded(
child: Padding(
padding: const EdgeInsets.all(20.0),
child: Texts(
model.triageQuestionsModelList[index].question,
fontSize: 15,
),
),
),
],
),
),
),
SizedBox(height: 80,)
],
),
),
bottomSheet: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 56,
child: Row(
children: [
Expanded(
child: Container(
margin: EdgeInsets.only(left: 5,right: 5),
child: SecondaryButton(
textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).back.toUpperCase(),
onTap: () => widget.changePageViewIndex(1),
),
),
),
SizedBox(width: 10,),
Expanded(
child: Container(
margin: EdgeInsets.only(left: 5,right: 5),
child: SecondaryButton(
textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).next.toUpperCase(),
disabled: widget.selectedQuestions.isEmpty,
onTap: () => widget.changePageViewIndex(3),
),
),
),
],
),
),
),
),
);
}
}

@ -0,0 +1,102 @@
import 'package:diplomaticquarterapp/core/model/er/TriageInformationRequest.dart';
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/er/EdOnlineViewModel.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import '../../../Constants.dart';
class EdOnlineSelectedHospitalPage extends StatefulWidget {
final Function changePageViewIndex;
TriageInformationRequest triageInformationRequest;
EdOnlineSelectedHospitalPage(
{Key key, this.changePageViewIndex,this.triageInformationRequest})
: super(key: key);
@override
_EdOnlineSelectedHospitalPageState createState() =>
_EdOnlineSelectedHospitalPageState();
}
class _EdOnlineSelectedHospitalPageState
extends State<EdOnlineSelectedHospitalPage> {
@override
Widget build(BuildContext context) {
return BaseView<EdOnlineViewModel>(
onModelReady: (model) => model.getHospitals(),
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
...List.generate(
model.hospitals.length,
(index) => Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
height: 2,
),
Row(
children: <Widget>[
Expanded(
flex: 1,
child: InkWell(
onTap: () {
setState(() {
widget.triageInformationRequest.selectedHospital = model.hospitals[index];
widget.triageInformationRequest.projectID = model.hospitals[index].iD;
});
},
child: ListTile(
title: Text(model.hospitals[index].name +
' ${model.hospitals[index].distanceInKilometers} ' +
TranslationBase.of(context).km),
leading: Radio(
value: model.hospitals[index],
groupValue: widget.triageInformationRequest.selectedHospital,
activeColor: secondaryColor,
onChanged: (value) {
setState(() {
widget.triageInformationRequest.selectedHospital = model.hospitals[index];
widget.triageInformationRequest.projectID = model.hospitals[index].iD;
});
},
),
),
),
)
],
),
SizedBox(
height: 5.0,
),
],
),
)
],
),
),
bottomSheet: Container(
height: 76,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: SecondaryButton(
// textColor: Colors.white,
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).next.toUpperCase(),
disabled: widget.triageInformationRequest.selectedHospital==null,
onTap: () => widget.changePageViewIndex(1)),
),
),
),
);
}
}

@ -0,0 +1,112 @@
import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart';
import 'package:diplomaticquarterapp/core/viewModels/er/EdOnlineViewModel.dart';
import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart';
import 'package:diplomaticquarterapp/pages/base/base_view.dart';
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart';
import 'package:diplomaticquarterapp/widgets/data_display/text.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
class EdPaymentInformationPage extends StatefulWidget {
final HospitalsModel selectedHospital;
const EdPaymentInformationPage({Key key, this.selectedHospital}) : super(key: key);
@override
_EdPaymentInformationPageState createState() =>
_EdPaymentInformationPageState();
}
class _EdPaymentInformationPageState extends State<EdPaymentInformationPage> {
@override
Widget build(BuildContext context) {
return BaseView<EdOnlineViewModel>(
onModelReady: (model) => model.getPatientPaymentInformation(),
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
body: SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10.0),
color: Colors.white),
margin: EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 5.0),
padding: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 20.0),
child: Column(
children: <Widget>[
Container(
alignment: Alignment.center,
margin:
EdgeInsets.only(left: 0.0, right: 20.0, top: 30.0),
child: Text(TranslationBase.of(context).testFee,
style: TextStyle(
color: Colors.black,
fontSize: 22.0,
fontWeight: FontWeight.bold)),
),
if(model.erPatientShareModel!=null)
Table(
children: [
TableRow(children: [
TableCell(
child:
Texts(TranslationBase.of(context).testFee)),
TableCell(
child: Texts(model
.erPatientShareModel.patientShare
.toStringAsFixed(2))),
]),
TableRow(children: [
TableCell(
child: Texts(
TranslationBase.of(context).patientTaxToDo)),
TableCell(
child: Texts(model
.erPatientShareModel.patientTaxAmount
.toStringAsFixed(2))),
]),
TableRow(children: [
TableCell(
child: Texts(TranslationBase.of(context)
.patientShareTotalToDo)),
TableCell(
child: Texts(model
.erPatientShareModel.patientShareWithTax
.toStringAsFixed(2))),
]),
],
),
],
),
),
],
),
),
bottomSheet: Container(
height: 76,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: SecondaryButton(
color: Theme.of(context).primaryColor,
label: TranslationBase.of(context).next.toUpperCase(),
onTap: () {
Navigator.push(context, FadePage(page: PaymentMethod())).then(
(value) {
//TODO Haroun call API here
},
);
},
),
),
),
),
);
}
}

@ -1,10 +1,16 @@
import 'package:diplomaticquarterapp/uitl/location_util.dart';
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
import 'package:flutter/material.dart';
import '../../uitl/translations_delegate_base.dart';
import 'package:diplomaticquarterapp/pages/ErService/widgets/card_common.dart';
import 'AmbulanceReq.dart';
import 'EdOnline/DdServicesPage.dart';
import 'EdOnline/EdOnlineSelectedHospitalPage.dart';
import 'NearestEr.dart';
class ErOptions extends StatefulWidget {
final bool isAppbar;
@ -49,7 +55,12 @@ class _ErOptionsState extends State<ErOptions> {
image: 'assets/images/new-design/AM.PNG',
text: TranslationBase.of(context).ambulancerequest,
subText: TranslationBase.of(context).requestA,
type: 0,
onTap: (){
Navigator.push(
context,
FadePage(
page: AmbulanceReq()));
},
),
),
@ -58,8 +69,39 @@ class _ErOptionsState extends State<ErOptions> {
image: 'assets/images/new-design/emergency_icon.png',
text: TranslationBase.of(context).nearester,
subText: TranslationBase.of(context).locationa,
type: 1),
onTap:(){
Navigator.push(
context,
FadePage(
page: NearestEr()));
}),
)
],
),
),
Container(
margin: EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 10.0),
child: Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
child: CardCommonEr(
image: 'assets/images/new-design/AM.PNG',
text:'ED service',
subText: 'ED service',
onTap: (){
Navigator.push(
context,
FadePage(
page: DdServicesPage()));
},
),
),
Expanded(
child: Container(),
)
],
),

@ -10,20 +10,18 @@ class CardCommonEr extends StatelessWidget {
final image;
final text;
final subText;
final type;
final Function onTap;
const CardCommonEr(
{@required this.image,
@required this.text,
@required this.subText,
@required this.type});
@required this.onTap});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
navigateToSearch(context, this.type);
},
onTap: () => onTap(),
child: Container(
margin: EdgeInsets.fromLTRB(9.0, 9.0, 9.0, 9.0),
decoration: BoxDecoration(boxShadow: [
@ -59,25 +57,4 @@ class CardCommonEr extends StatelessWidget {
);
}
Future navigateToSearch(context, type) async {
//===Switch case===
if(type==0)
{
Navigator.push(
context,
FadePage(
page: AmbulanceReq()));
}
else{
Navigator.push(
context,
FadePage(
page: NearestEr()));
}
}
}

@ -1573,6 +1573,11 @@ class TranslationBase {
String get shippingAddresss =>
localizedValues["shipping-address"][locale.languageCode];
String get covidAlert => localizedValues["covid-alert"][locale.languageCode];
String get onlineCheckInAgreement => localizedValues["onlineCheckInAgreement"][locale.languageCode];
String get chiefComplaints => localizedValues["chiefComplaints"][locale.languageCode];
String get errorChiefComplaints => localizedValues["errorChiefComplaints"][locale.languageCode];
String get expectedArrivalTime => localizedValues["expectedArrivalTime"][locale.languageCode];
String get errorExpectedArrivalTime => localizedValues["errorExpectedArrivalTimes"][locale.languageCode];
}
class TranslationBaseDelegate extends LocalizationsDelegate<TranslationBase> {

Loading…
Cancel
Save