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

 Conflicts:
	lib/core/service/operation_report_servive.dart
merge-requests/868/head
hussam al-habibeh 4 years ago
commit 9270f58615

@ -30,7 +30,7 @@
<uses-feature android:name="android.hardware.camera.autofocus" />
<application
android:name="AppApplication"
android:name=".AppApplication"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
tools:replace="android:name"

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 B

@ -5,8 +5,8 @@ const ONLY_NUMBERS = "[0-9]";
const ONLY_LETTERS = "[a-zA-Z &'\"]";
const ONLY_DATE = "[0-9/]";
const BASE_URL_LIVE_CARE = 'https://livecare.hmg.com/';
// const BASE_URL = 'https://hmgwebservices.com/';
const BASE_URL = 'https://uat.hmgwebservices.com/';
const BASE_URL = 'https://hmgwebservices.com/';
// const BASE_URL = 'https://uat.hmgwebservices.com/';
const PHARMACY_ITEMS_URL = "Services/Lists.svc/REST/GetPharmcyItems_Region_enh";
const PHARMACY_LIST_URL = "Services/Patients.svc/REST/GetPharmcyList";
const PATIENT_PROGRESS_NOTE_URL =
@ -346,7 +346,7 @@ const GET_MEDICATION_FOR_IN_PATIENT =
const GET_EPISODE_FOR_INPATIENT =
"/Services/DoctorApplication.svc/REST/DoctorApp_GetEpisodeForInpatient";
const GET_OPERATION_REPORT =
"/Services/DoctorApplication.svc/REST/DoctorApp_GetReservationDetails";
"Services/DoctorApplication.svc/REST/DoctorApp_GetReservationDetails";
const UPDATE_OPERATION_REPORT =
"Services/DoctorApplication.svc/REST/DoctorApp_CreateUpdateOperationReport";
@ -355,12 +355,22 @@ const NURSING_PROGRESS_NOTE =
const GET_DIAGNOSIS_FOR_IN_PATIENT =
"Services/DoctorApplication.svc/REST/DoctorApp_GetDiagnosisForInPatient";
const GET_DIABETIC_CHART_VALUES =
"Services/DoctorApplication.svc/REST/DoctorApp_GetDiabeticChartValues";
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";
const CHECK_ACTIVATION_CODE_FOR_PATIENT = "Authentication.svc/REST/CheckActivationCode";
const PATIENT_REGISTRATION = "Authentication.svc/REST/PatientRegistration";
var selectedPatientType = 1;
//*********change value to decode json from Dropdown ************

@ -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,112 @@
class CheckActivationCodeModel {
int patientMobileNumber;
String mobileNo;
int projectOutSA;
int loginType;
String zipCode;
bool isRegister;
String logInTokenID;
int searchType;
int patientID;
int nationalID;
int patientIdentificationID;
bool forRegisteration;
String activationCode;
double versionID;
int channel;
int languageID;
String iPAdress;
String generalid;
int patientOutSA;
Null sessionID;
bool isDentalAllowedBackend;
int deviceTypeID;
String dOB;
int isHijri;
String healthId;
CheckActivationCodeModel(
{this.patientMobileNumber,
this.mobileNo,
this.projectOutSA,
this.loginType,
this.zipCode,
this.isRegister,
this.logInTokenID,
this.searchType,
this.patientID,
this.nationalID,
this.patientIdentificationID,
this.forRegisteration,
this.activationCode,
this.versionID,
this.channel,
this.languageID,
this.iPAdress,
this.generalid,
this.patientOutSA,
this.sessionID,
this.isDentalAllowedBackend,
this.deviceTypeID,
this.dOB,
this.isHijri,
this.healthId});
CheckActivationCodeModel.fromJson(Map<String, dynamic> json) {
patientMobileNumber = json['PatientMobileNumber'];
mobileNo = json['MobileNo'];
projectOutSA = json['ProjectOutSA'];
loginType = json['LoginType'];
zipCode = json['ZipCode'];
isRegister = json['isRegister'];
logInTokenID = json['LogInTokenID'];
searchType = json['SearchType'];
patientID = json['PatientID'];
nationalID = json['NationalID'];
patientIdentificationID = json['PatientIdentificationID'];
forRegisteration = json['ForRegisteration'];
activationCode = json['activationCode'];
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
generalid = json['generalid'];
patientOutSA = json['PatientOutSA'];
sessionID = json['SessionID'];
isDentalAllowedBackend = json['isDentalAllowedBackend'];
deviceTypeID = json['DeviceTypeID'];
dOB = json['DOB'];
isHijri = json['IsHijri'];
healthId = json['HealthId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientMobileNumber'] = this.patientMobileNumber;
data['MobileNo'] = this.mobileNo;
data['ProjectOutSA'] = this.projectOutSA;
data['LoginType'] = this.loginType;
data['ZipCode'] = this.zipCode;
data['isRegister'] = this.isRegister;
data['LogInTokenID'] = this.logInTokenID;
data['SearchType'] = this.searchType;
data['PatientID'] = this.patientID;
data['NationalID'] = this.nationalID;
data['PatientIdentificationID'] = this.patientIdentificationID;
data['ForRegisteration'] = this.forRegisteration;
data['activationCode'] = this.activationCode;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['PatientOutSA'] = this.patientOutSA;
data['SessionID'] = this.sessionID;
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['DeviceTypeID'] = this.deviceTypeID;
data['DOB'] = this.dOB;
data['IsHijri'] = this.isHijri;
data['HealthId'] = this.healthId;
return data;
}
}

@ -0,0 +1,80 @@
class CheckPatientForRegistrationModel {
int patientIdentificationID;
int patientMobileNumber;
String zipCode;
double versionID;
int channel;
int languageID;
String iPAdress;
String generalid;
int patientOutSA;
Null sessionID;
bool isDentalAllowedBackend;
int deviceTypeID;
String tokenID;
int patientID;
bool isRegister;
String dOB;
int isHijri;
CheckPatientForRegistrationModel(
{this.patientIdentificationID,
this.patientMobileNumber,
this.zipCode,
this.versionID,
this.channel,
this.languageID,
this.iPAdress,
this.generalid,
this.patientOutSA,
this.sessionID,
this.isDentalAllowedBackend,
this.deviceTypeID,
this.tokenID,
this.patientID,
this.isRegister,
this.dOB,
this.isHijri});
CheckPatientForRegistrationModel.fromJson(Map<String, dynamic> json) {
patientIdentificationID = json['PatientIdentificationID'];
patientMobileNumber = json['PatientMobileNumber'];
zipCode = json['ZipCode'];
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
generalid = json['generalid'];
patientOutSA = json['PatientOutSA'];
sessionID = json['SessionID'];
isDentalAllowedBackend = json['isDentalAllowedBackend'];
deviceTypeID = json['DeviceTypeID'];
tokenID = json['TokenID'];
patientID = json['PatientID'];
isRegister = json['isRegister'];
dOB = json['DOB'];
isHijri = json['IsHijri'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientIdentificationID'] = this.patientIdentificationID;
data['PatientMobileNumber'] = this.patientMobileNumber;
data['ZipCode'] = this.zipCode;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['PatientOutSA'] = this.patientOutSA;
data['SessionID'] = this.sessionID;
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['DeviceTypeID'] = this.deviceTypeID;
data['TokenID'] = this.tokenID;
data['PatientID'] = this.patientID;
data['isRegister'] = this.isRegister;
data['DOB'] = this.dOB;
data['IsHijri'] = this.isHijri;
return data;
}
}

@ -0,0 +1,185 @@
class PatientRegistrationModel {
Patientobject patientobject;
String patientIdentificationID;
String patientMobileNumber;
String logInTokenID;
double versionID;
int channel;
int languageID;
String iPAdress;
String generalid;
int patientOutSA;
Null sessionID;
bool isDentalAllowedBackend;
int deviceTypeID;
String tokenID;
String dOB;
int isHijri;
String healthId;
String zipCode;
PatientRegistrationModel(
{this.patientobject,
this.patientIdentificationID,
this.patientMobileNumber,
this.logInTokenID,
this.versionID,
this.channel,
this.languageID,
this.iPAdress,
this.generalid,
this.patientOutSA,
this.sessionID,
this.isDentalAllowedBackend,
this.deviceTypeID,
this.tokenID,
this.dOB,
this.isHijri,
this.healthId,
this.zipCode});
PatientRegistrationModel.fromJson(Map<String, dynamic> json) {
patientobject = json['Patientobject'] != null
? new Patientobject.fromJson(json['Patientobject'])
: null;
patientIdentificationID = json['PatientIdentificationID'];
patientMobileNumber = json['PatientMobileNumber'];
logInTokenID = json['LogInTokenID'];
versionID = json['VersionID'];
channel = json['Channel'];
languageID = json['LanguageID'];
iPAdress = json['IPAdress'];
generalid = json['generalid'];
patientOutSA = json['PatientOutSA'];
sessionID = json['SessionID'];
isDentalAllowedBackend = json['isDentalAllowedBackend'];
deviceTypeID = json['DeviceTypeID'];
tokenID = json['TokenID'];
dOB = json['DOB'];
isHijri = json['IsHijri'];
healthId = json['HealthId'];
zipCode = json['ZipCode'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
if (this.patientobject != null) {
data['Patientobject'] = this.patientobject.toJson();
}
data['PatientIdentificationID'] = this.patientIdentificationID;
data['PatientMobileNumber'] = this.patientMobileNumber;
data['LogInTokenID'] = this.logInTokenID;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['LanguageID'] = this.languageID;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['PatientOutSA'] = this.patientOutSA;
data['SessionID'] = this.sessionID;
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['DeviceTypeID'] = this.deviceTypeID;
data['TokenID'] = this.tokenID;
data['DOB'] = this.dOB;
data['IsHijri'] = this.isHijri;
data['HealthId'] = this.healthId;
data['ZipCode'] = this.zipCode;
return data;
}
}
class Patientobject {
bool tempValue;
int patientIdentificationType;
String patientIdentificationNo;
int mobileNumber;
int patientOutSA;
String firstNameN;
String middleNameN;
String lastNameN;
String firstName;
String middleName;
String lastName;
String strDateofBirth;
String dateofBirth;
int gender;
String nationalityID;
String dateofBirthN;
String emailAddress;
String sourceType;
String preferredLanguage;
String marital;
String eHealthIDField;
Patientobject(
{this.tempValue,
this.patientIdentificationType,
this.patientIdentificationNo,
this.mobileNumber,
this.patientOutSA,
this.firstNameN,
this.middleNameN,
this.lastNameN,
this.firstName,
this.middleName,
this.lastName,
this.strDateofBirth,
this.dateofBirth,
this.gender,
this.nationalityID,
this.dateofBirthN,
this.emailAddress,
this.sourceType,
this.preferredLanguage,
this.marital,
this.eHealthIDField});
Patientobject.fromJson(Map<String, dynamic> json) {
tempValue = json['TempValue'];
patientIdentificationType = json['PatientIdentificationType'];
patientIdentificationNo = json['PatientIdentificationNo'];
mobileNumber = json['MobileNumber'];
patientOutSA = json['PatientOutSA'];
firstNameN = json['FirstNameN'];
middleNameN = json['MiddleNameN'];
lastNameN = json['LastNameN'];
firstName = json['FirstName'];
middleName = json['MiddleName'];
lastName = json['LastName'];
strDateofBirth = json['StrDateofBirth'];
dateofBirth = json['DateofBirth'];
gender = json['Gender'];
nationalityID = json['NationalityID'];
dateofBirthN = json['DateofBirthN'];
emailAddress = json['EmailAddress'];
sourceType = json['SourceType'];
preferredLanguage = json['PreferredLanguage'];
marital = json['Marital'];
eHealthIDField = json['eHealthIDField'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['TempValue'] = this.tempValue;
data['PatientIdentificationType'] = this.patientIdentificationType;
data['PatientIdentificationNo'] = this.patientIdentificationNo;
data['MobileNumber'] = this.mobileNumber;
data['PatientOutSA'] = this.patientOutSA;
data['FirstNameN'] = this.firstNameN;
data['MiddleNameN'] = this.middleNameN;
data['LastNameN'] = this.lastNameN;
data['FirstName'] = this.firstName;
data['MiddleName'] = this.middleName;
data['LastName'] = this.lastName;
data['StrDateofBirth'] = this.strDateofBirth;
data['DateofBirth'] = this.dateofBirth;
data['Gender'] = this.gender;
data['NationalityID'] = this.nationalityID;
data['DateofBirthN'] = this.dateofBirthN;
data['EmailAddress'] = this.emailAddress;
data['SourceType'] = this.sourceType;
data['PreferredLanguage'] = this.preferredLanguage;
data['Marital'] = this.marital;
data['eHealthIDField'] = this.eHealthIDField;
return data;
}
}

@ -0,0 +1,109 @@
class SendActivationCodeByOTPNotificationTypeForRegistrationModel {
int patientMobileNumber;
String mobileNo;
int projectOutSA;
int loginType;
String zipCode;
bool isRegister;
String logInTokenID;
int searchType;
int patientID;
int nationalID;
int patientIdentificationID;
int oTPSendType;
int languageID;
double versionID;
int channel;
String iPAdress;
String generalid;
int patientOutSA;
Null sessionID;
bool isDentalAllowedBackend;
int deviceTypeID;
String dOB;
int isHijri;
String healthId;
SendActivationCodeByOTPNotificationTypeForRegistrationModel(
{this.patientMobileNumber,
this.mobileNo,
this.projectOutSA,
this.loginType,
this.zipCode,
this.isRegister,
this.logInTokenID,
this.searchType,
this.patientID,
this.nationalID,
this.patientIdentificationID,
this.oTPSendType,
this.languageID,
this.versionID,
this.channel,
this.iPAdress,
this.generalid,
this.patientOutSA,
this.sessionID,
this.isDentalAllowedBackend,
this.deviceTypeID,
this.dOB,
this.isHijri,
this.healthId});
SendActivationCodeByOTPNotificationTypeForRegistrationModel.fromJson(
Map<String, dynamic> json) {
patientMobileNumber = json['PatientMobileNumber'];
mobileNo = json['MobileNo'];
projectOutSA = json['ProjectOutSA'];
loginType = json['LoginType'];
zipCode = json['ZipCode'];
isRegister = json['isRegister'];
logInTokenID = json['LogInTokenID'];
searchType = json['SearchType'];
patientID = json['PatientID'];
nationalID = json['NationalID'];
patientIdentificationID = json['PatientIdentificationID'];
oTPSendType = json['OTP_SendType'];
languageID = json['LanguageID'];
versionID = json['VersionID'];
channel = json['Channel'];
iPAdress = json['IPAdress'];
generalid = json['generalid'];
patientOutSA = json['PatientOutSA'];
sessionID = json['SessionID'];
isDentalAllowedBackend = json['isDentalAllowedBackend'];
deviceTypeID = json['DeviceTypeID'];
dOB = json['DOB'];
isHijri = json['IsHijri'];
healthId = json['HealthId'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['PatientMobileNumber'] = this.patientMobileNumber;
data['MobileNo'] = this.mobileNo;
data['ProjectOutSA'] = this.projectOutSA;
data['LoginType'] = this.loginType;
data['ZipCode'] = this.zipCode;
data['isRegister'] = this.isRegister;
data['LogInTokenID'] = this.logInTokenID;
data['SearchType'] = this.searchType;
data['PatientID'] = this.patientID;
data['NationalID'] = this.nationalID;
data['PatientIdentificationID'] = this.patientIdentificationID;
data['OTP_SendType'] = this.oTPSendType;
data['LanguageID'] = this.languageID;
data['VersionID'] = this.versionID;
data['Channel'] = this.channel;
data['IPAdress'] = this.iPAdress;
data['generalid'] = this.generalid;
data['PatientOutSA'] = this.patientOutSA;
data['SessionID'] = this.sessionID;
data['isDentalAllowedBackend'] = this.isDentalAllowedBackend;
data['DeviceTypeID'] = this.deviceTypeID;
data['DOB'] = this.dOB;
data['IsHijri'] = this.isHijri;
data['HealthId'] = this.healthId;
return data;
}
}

@ -0,0 +1,21 @@
class DiabeticType {
int value;
String nameEn;
String nameAr;
DiabeticType({this.value, this.nameEn, this.nameAr});
DiabeticType.fromJson(Map<String, dynamic> json) {
value = json['value'];
nameEn = json['nameEn'];
nameAr = json['nameAr'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['value'] = this.value;
data['nameEn'] = this.nameEn;
data['nameAr'] = this.nameAr;
return data;
}
}

@ -0,0 +1,44 @@
class GetDiabeticChartValuesRequestModel {
int deviceTypeID;
int patientID;
int resultType;
int admissionNo;
String setupID;
bool patientOutSA;
int patientType;
int patientTypeID;
GetDiabeticChartValuesRequestModel(
{this.deviceTypeID,
this.patientID,
this.resultType,
this.admissionNo,
this.setupID,
this.patientOutSA,
this.patientType,
this.patientTypeID});
GetDiabeticChartValuesRequestModel.fromJson(Map<String, dynamic> json) {
deviceTypeID = json['DeviceTypeID'];
patientID = json['PatientID'];
resultType = json['ResultType'];
admissionNo = json['AdmissionNo'];
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['DeviceTypeID'] = this.deviceTypeID;
data['PatientID'] = this.patientID;
data['ResultType'] = this.resultType;
data['AdmissionNo'] = this.admissionNo;
data['SetupID'] = this.setupID;
data['PatientOutSA'] = this.patientOutSA;
data['PatientType'] = this.patientType;
data['PatientTypeID'] = this.patientTypeID;
return data;
}
}

@ -0,0 +1,36 @@
class GetDiabeticChartValuesResponseModel {
String resultType;
int admissionNo;
String dateChart;
int resultValue;
int createdBy;
String createdOn;
GetDiabeticChartValuesResponseModel(
{this.resultType,
this.admissionNo,
this.dateChart,
this.resultValue,
this.createdBy,
this.createdOn});
GetDiabeticChartValuesResponseModel.fromJson(Map<String, dynamic> json) {
resultType = json['ResultType'];
admissionNo = json['AdmissionNo'];
dateChart = json['DateChart'];
resultValue = json['ResultValue'];
createdBy = json['CreatedBy'];
createdOn = json['CreatedOn'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['ResultType'] = this.resultType;
data['AdmissionNo'] = this.admissionNo;
data['DateChart'] = this.dateChart;
data['ResultValue'] = this.resultValue;
data['CreatedBy'] = this.createdBy;
data['CreatedOn'] = this.createdOn;
return data;
}
}

@ -8,6 +8,8 @@ class GetDiagnosisForInPatientResponseModel {
String createdOn;
int editedBy;
String editedOn;
String createdByName;
String editedByName;
GetDiagnosisForInPatientResponseModel(
{this.iCDCode10ID,
@ -18,7 +20,7 @@ class GetDiagnosisForInPatientResponseModel {
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn});
this.editedOn, this.createdByName});
GetDiagnosisForInPatientResponseModel.fromJson(Map<String, dynamic> json) {
iCDCode10ID = json['ICDCode10ID'];
@ -30,6 +32,8 @@ class GetDiagnosisForInPatientResponseModel {
createdOn = json['CreatedOn'];
editedBy = json['EditedBy'];
editedOn = json['EditedOn'];
createdByName = json['CreatedByName'];
editedByName = json['EditedByName'];
}
Map<String, dynamic> toJson() {

@ -6,13 +6,19 @@ class GetNursingProgressNoteResposeModel {
dynamic editedBy;
dynamic editedOn;
String createdByName;
String editedByName;
GetNursingProgressNoteResposeModel(
{this.notes,
this.conditionType,
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn});
this.conditionType,
this.createdBy,
this.createdOn,
this.editedBy,
this.editedOn,
this.editedByName,
this.createdByName});
GetNursingProgressNoteResposeModel.fromJson(Map<String, dynamic> json) {
notes = json['Notes'];
@ -21,6 +27,8 @@ class GetNursingProgressNoteResposeModel {
createdOn = json['CreatedOn'];
editedBy = json['EditedBy'];
editedOn = json['EditedOn'];
createdByName = json['CreatedByName'];
editedByName = json['EditedByName'];
}
Map<String, dynamic> toJson() {

@ -0,0 +1,51 @@
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/CheckActivationCodeModel.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/CheckPatientForRegistrationModel.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/PatientRegistrationModel.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/SendActivationCodebyOTPNotificationTypeForRegistrationModel.dart';
import 'package:doctor_app_flutter/core/service/base/base_service.dart';
class PatientRegistrationService extends BaseService {
checkPatientForRegistration(
CheckPatientForRegistrationModel registrationModel) async {
hasError = false;
await baseAppClient.post(CHECK_PATIENT_FOR_REGISTRATION,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: registrationModel.toJson());
}
sendActivationCodeByOTPNotificationType(
SendActivationCodeByOTPNotificationTypeForRegistrationModel
registrationModel) async {
hasError = false;
await baseAppClient.post(SEND_ACTIVATION_CODE_BY_OTP_NOT_TYPE,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: registrationModel.toJson());
}
checkActivationCode(CheckActivationCodeModel registrationModel) async {
hasError = false;
await baseAppClient.post(CHECK_ACTIVATION_CODE_FOR_PATIENT,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: registrationModel.toJson());
}
registrationPatient(PatientRegistrationModel registrationModel) async {
hasError = false;
await baseAppClient.post(PATIENT_REGISTRATION,
onSuccess: (dynamic response, int statusCode) {},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: registrationModel.toJson());
}
}

@ -1,5 +1,4 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
@ -44,38 +43,5 @@ class BaseService {
}
}
Future getPatientArrivalList(String date,{String fromDate, int patientMrn = -1, int appointmentNo = -1}) async{
hasError = false;
Map<String, dynamic> body = Map();
body['From'] = fromDate == null ? date : fromDate;
body['To'] = date;
body['PageIndex'] = 0;
body['PageSize'] = 0;
if(patientMrn != -1){
body['PatientMRN'] = patientMrn;
}
if(appointmentNo != -1){
body['AppointmentNo'] = appointmentNo;
}
await baseAppClient.post(
ARRIVED_PATIENT_URL,
onSuccess: (dynamic response, int statusCode) {
patientArrivalList.clear();
if(response['patientArrivalList']['entityList'] != null){
response['patientArrivalList']['entityList'].forEach((v) {
PatiantInformtion item = PatiantInformtion.fromJson(v);
patientArrivalList.add(item);
});
}
},
onFailure: (String error, int statusCode) {
hasError = true;
this.error = error;
},
body: body,
);
}
}

@ -6,13 +6,15 @@ import 'package:doctor_app_flutter/models/operation_report/get_operation_report_
class OperationReportService extends BaseService {
List<GetOperationReportModel> _operationReportList = List();
List<GetOperationReportModel> _operationReportList = [];
List<GetOperationReportModel> get operationReportList => _operationReportList;
Future getOperationReport(
{GetOperationReportRequestModel getOperationReportRequestModel,
int patientId}) async {
getOperationReportRequestModel =
GetOperationReportRequestModel(patientID: patientId);
GetOperationReportRequestModel(patientID: patientId, doctorID: "");
hasError = false;
await baseAppClient.post(GET_OPERATION_REPORT,

@ -1,6 +1,8 @@
import 'package:doctor_app_flutter/client/base_app_client.dart';
import 'package:doctor_app_flutter/config/config.dart';
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
import 'package:doctor_app_flutter/core/model/diabetic_chart/GetDiabeticChartValuesRequestModel.dart';
import 'package:doctor_app_flutter/core/model/diabetic_chart/GetDiabeticChartValuesResponseModel.dart';
import 'package:doctor_app_flutter/core/model/diagnosis/GetDiagnosisForInPatientRequestModel.dart';
import 'package:doctor_app_flutter/core/model/diagnosis/GetDiagnosisForInPatientResponseModel.dart';
import 'package:doctor_app_flutter/core/model/note/CreateNoteModel.dart';
@ -66,6 +68,9 @@ class PatientService extends BaseService {
List<GetDiagnosisForInPatientResponseModel> _diagnosisForInPatientList = [];
List<GetDiagnosisForInPatientResponseModel> get diagnosisForInPatientList => _diagnosisForInPatientList;
List<GetDiabeticChartValuesResponseModel> _diabeticChartValuesList = [];
List<GetDiabeticChartValuesResponseModel> get diabeticChartValuesList => _diabeticChartValuesList;
// TODO: replace var with model
var _insuranceApporvalsList = [];
@ -515,4 +520,24 @@ class PatientService extends BaseService {
body: getDiagnosisForInPatientRequestModel.toJson(),
);
}
Future getDiabeticChartValues(GetDiabeticChartValuesRequestModel getDiabeticChartValuesRequestModel) async {
hasError = false;
await baseAppClient.post(
GET_DIABETIC_CHART_VALUES,
onSuccess: (dynamic response, int statusCode) {
_diabeticChartValuesList = [];
response['List_DiabeticChartValues'].forEach((v) {
_diabeticChartValuesList.add( GetDiabeticChartValuesResponseModel.fromJson(v));
});
},
onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
},
body: getDiabeticChartValuesRequestModel.toJson(),
);
}
}

@ -0,0 +1,59 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/CheckActivationCodeModel.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/CheckPatientForRegistrationModel.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/PatientRegistrationModel.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/SendActivationCodebyOTPNotificationTypeForRegistrationModel.dart';
import 'package:doctor_app_flutter/core/service/PatientRegistrationService.dart';
import 'package:doctor_app_flutter/core/viewModel/base_view_model.dart';
import '../../locator.dart';
class PatientRegistrationViewModel extends BaseViewModel {
PatientRegistrationService _patientRegistrationService =
locator<PatientRegistrationService>();
Future checkPatientForRegistration(
CheckPatientForRegistrationModel registrationModel) async {
setState(ViewState.Busy);
await _patientRegistrationService
.checkPatientForRegistration(registrationModel);
if (_patientRegistrationService.hasError) {
error = _patientRegistrationService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future sendActivationCodeByOTPNotificationType(
SendActivationCodeByOTPNotificationTypeForRegistrationModel
registrationModel) async {
setState(ViewState.Busy);
await _patientRegistrationService
.sendActivationCodeByOTPNotificationType(registrationModel);
if (_patientRegistrationService.hasError) {
error = _patientRegistrationService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future checkActivationCode(CheckActivationCodeModel registrationModel) async {
setState(ViewState.Busy);
await _patientRegistrationService.checkActivationCode(registrationModel);
if (_patientRegistrationService.hasError) {
error = _patientRegistrationService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
Future registrationPatient(PatientRegistrationModel registrationModel) async {
setState(ViewState.Busy);
await _patientRegistrationService.registrationPatient(registrationModel);
if (_patientRegistrationService.hasError) {
error = _patientRegistrationService.error;
setState(ViewState.Error);
} else
setState(ViewState.Idle);
}
}

@ -256,17 +256,7 @@ class PatientReferralViewModel extends BaseViewModel {
}
}
Future getPatientDetails(String fromDate, String toDate, int patientMrn, int appointmentNo) async {
setState(ViewState.Busy);
await _referralPatientService.getPatientArrivalList(toDate, fromDate: fromDate, patientMrn: patientMrn);
if (_referralPatientService.hasError) {
error = _referralPatientService.error;
setState(ViewState.Error);
} else {
setState(ViewState.Idle);
}
}
Future getReferralFrequencyList() async {
setState(ViewState.Busy);

@ -1,4 +1,6 @@
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/diabetic_chart/GetDiabeticChartValuesRequestModel.dart';
import 'package:doctor_app_flutter/core/model/diabetic_chart/GetDiabeticChartValuesResponseModel.dart';
import 'package:doctor_app_flutter/core/model/diagnosis/GetDiagnosisForInPatientRequestModel.dart';
import 'package:doctor_app_flutter/core/model/diagnosis/GetDiagnosisForInPatientResponseModel.dart';
import 'package:doctor_app_flutter/core/model/note/CreateNoteModel.dart';
@ -25,43 +27,60 @@ class PatientViewModel extends BaseViewModel {
List<PatiantInformtion> get inPatientList => _patientService.inPatientList;
List<VitalSignResModel> get patientVitalSignList => _patientService.patientVitalSignList;
List<VitalSignResModel> get patientVitalSignList =>
_patientService.patientVitalSignList;
List<VitalSignResModel> get patientVitalSignOrderdSubList => _patientService.patientVitalSignOrderdSubList;
List<VitalSignResModel> get patientVitalSignOrderdSubList =>
_patientService.patientVitalSignOrderdSubList;
List<LabOrdersResModel> get patientLabResultOrdersList => _patientService.patientLabResultOrdersList;
List<LabOrdersResModel> get patientLabResultOrdersList =>
_patientService.patientLabResultOrdersList;
List<PrescriptionResModel> get patientPrescriptionsList => _patientService.patientPrescriptionsList;
List<PrescriptionResModel> get patientPrescriptionsList =>
_patientService.patientPrescriptionsList;
List<PrescriptionReportForInPatient> get prescriptionReportForInPatientList =>
_patientService.prescriptionReportForInPatientList;
List<PrescriptionReport> get prescriptionReport => _patientService.prescriptionReport;
List<PrescriptionReport> get prescriptionReport =>
_patientService.prescriptionReport;
List<RadiologyResModel> get patientRadiologyList => _patientService.patientRadiologyList;
List<RadiologyResModel> get patientRadiologyList =>
_patientService.patientRadiologyList;
List<LabResult> get labResultList => _patientService.labResultList;
get insuranceApporvalsList => _patientService.insuranceApporvalsList;
List<NoteModel> get patientProgressNoteList => _patientService.patientProgressNoteList;
List<GetNursingProgressNoteResposeModel> get patientNursingProgressNoteList => _patientService.patientNursingProgressNoteList;
List<GetDiagnosisForInPatientResponseModel> get diagnosisForInPatientList => _patientService.diagnosisForInPatientList;
List<NoteModel> get patientProgressNoteList =>
_patientService.patientProgressNoteList;
List<GetNursingProgressNoteResposeModel> get patientNursingProgressNoteList =>
_patientService.patientNursingProgressNoteList;
List<GetDiagnosisForInPatientResponseModel> get diagnosisForInPatientList =>
_patientService.diagnosisForInPatientList;
List<GetDiabeticChartValuesResponseModel> get diabeticChartValuesList =>
_patientService.diabeticChartValuesList;
List<dynamic> get clinicsList => _patientService.clinicsList;
List<dynamic> get doctorsList => _patientService.doctorsList;
List<dynamic> get referralFrequencyList => _patientService.referalFrequancyList;
List<dynamic> get referralFrequencyList =>
_patientService.referalFrequancyList;
Future getPatientList(patient, patientType, {bool isBusyLocal = false, isView}) async {
Future getPatientList(patient, patientType,
{bool isBusyLocal = false, isView}) async {
var localRes;
if (isBusyLocal) {
setState(ViewState.BusyLocal);
} else {
setState(ViewState.Busy);
}
localRes = await _patientService.getPatientList(patient, patientType, isView: isView);
localRes = await _patientService.getPatientList(patient, patientType,
isView: isView);
if (_patientService.hasError) {
error = _patientService.error;
@ -210,12 +229,16 @@ class PatientViewModel extends BaseViewModel {
}
List getDoctorNameList() {
var doctorNamelist = _patientService.doctorsList.map((value) => value['DoctorName'].toString()).toList();
var doctorNamelist = _patientService.doctorsList
.map((value) => value['DoctorName'].toString())
.toList();
return doctorNamelist;
}
List getClinicNameList() {
var clinicsNameslist = _patientService.clinicsList.map((value) => value['ClinicDescription'].toString()).toList();
var clinicsNameslist = _patientService.clinicsList
.map((value) => value['ClinicDescription'].toString())
.toList();
return clinicsNameslist;
}
@ -230,8 +253,9 @@ class PatientViewModel extends BaseViewModel {
}
List getReferralNamesList() {
var referralNamesList =
_patientService.referalFrequancyList.map((value) => value['Description'].toString()).toList();
var referralNamesList = _patientService.referalFrequancyList
.map((value) => value['Description'].toString())
.toList();
return referralNamesList;
}
@ -277,7 +301,8 @@ class PatientViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
Future getInPatientList(PatientSearchRequestModel requestModel, {bool isMyInpatient = false}) async {
Future getInPatientList(PatientSearchRequestModel requestModel,
{bool isMyInpatient = false}) async {
await getDoctorProfile();
setState(ViewState.Busy);
@ -291,7 +316,8 @@ class PatientViewModel extends BaseViewModel {
}
}
Future getNursingProgressNote(GetNursingProgressNoteRequestModel requestModel) async {
Future getNursingProgressNote(
GetNursingProgressNoteRequestModel requestModel) async {
await getDoctorProfile();
setState(ViewState.Busy);
@ -303,7 +329,9 @@ class PatientViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
}
Future getDiagnosisForInPatient(GetDiagnosisForInPatientRequestModel requestModel) async {
Future getDiagnosisForInPatient(
GetDiagnosisForInPatientRequestModel requestModel) async {
await getDoctorProfile();
setState(ViewState.Busy);
@ -315,4 +343,32 @@ class PatientViewModel extends BaseViewModel {
setState(ViewState.Idle);
}
}
Future getDiabeticChartValues(PatiantInformtion patient, int resultType,
{bool isLocalBusy = false}) async {
await getDoctorProfile();
if (isLocalBusy)
setState(ViewState.BusyLocal);
else
setState(ViewState.Busy);
GetDiabeticChartValuesRequestModel requestModel =
GetDiabeticChartValuesRequestModel(
patientID: patient.patientId,
admissionNo: int.parse(patient.admissionNo),
patientTypeID: 1,
patientType: 1,
resultType: resultType,
setupID: "010266");
await _patientService.getDiabeticChartValues(requestModel);
if (_patientService.hasError) {
error = _patientService.error;
if (isLocalBusy)
setState(ViewState.ErrorLocal);
else
setState(ViewState.ErrorLocal);
} else {
setState(ViewState.Idle);
}
}
}

@ -16,6 +16,7 @@ import 'package:get_it/get_it.dart';
import 'core/service/AnalyticsService.dart';
import 'core/service/NavigationService.dart';
import 'core/service/PatientRegistrationService.dart';
import 'core/service/VideoCallService.dart';
import 'core/service/home/dasboard_service.dart';
import 'core/service/home/doctor_reply_service.dart';
@ -51,6 +52,7 @@ import 'core/viewModel/InsuranceViewModel.dart';
import 'core/viewModel/LiveCarePatientViewModel.dart';
import 'core/viewModel/PatientMedicalReportViewModel.dart';
import 'core/viewModel/PatientMuseViewModel.dart';
import 'core/viewModel/PatientRegistrationViewModel.dart';
import 'core/viewModel/PatientSearchViewModel.dart';
import 'core/viewModel/SOAP_view_model.dart';
import 'core/viewModel/doctor_replay_view_model.dart';
@ -106,6 +108,7 @@ void setupLocator() {
locator.registerLazySingleton(() => AnalyticsService());
locator.registerLazySingleton(() => OperationReportService());
locator.registerLazySingleton(() => PendingOrderService());
locator.registerLazySingleton(() => PatientRegistrationService());
/// View Model
locator.registerFactory(() => DoctorReplayViewModel());
@ -135,5 +138,7 @@ void setupLocator() {
locator.registerFactory(() => PatientMedicalReportViewModel());
locator.registerFactory(() => ScanQrViewModel());
locator.registerFactory(() => OperationReportViewModel());
locator.registerFactory(() => PatientRegistrationViewModel());
locator.registerFactory(() => PendingOrdersViewModel());
}

@ -4,6 +4,7 @@ import 'package:doctor_app_flutter/screens/medical-file/health_summary_page.dart
import 'package:doctor_app_flutter/screens/patient-sick-leave/patient_sick_leave_screen.dart';
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/diabetic_chart/diabetic_chart.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';
@ -77,6 +78,7 @@ 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';
const String DIABETIC_CHART_VALUES = 'get_diabetic_chart_values';
//todo: change the routing way.
var routes = {
@ -122,5 +124,8 @@ var routes = {
ALL_SPECIAL_LAB_RESULT: (_) => AllLabSpecialResult(),
GET_OPERATION_REPORT: (_) => OperationReportScreen(),
PENDING_ORDERS: (_) => PendingOrdersScreen(),
NURSING_PROGRESS_NOTE: (_) => NursingProgressNoteScreen(),
DIAGNOSIS_FOR_IN_PATIENT: (_) => DiagnosisScreen(),
ADMISSION_ORDERS: (_) => AdmissionOrdersScreen(),
DIABETIC_CHART_VALUES: (_) => DiabeticChart(),
};

@ -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,255 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/enum/viewstate.dart';
import 'package:doctor_app_flutter/core/model/diabetic_chart/DiabeticType.dart';
import 'package:doctor_app_flutter/core/viewModel/patient_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/models/patient/vital_sign/patient-vital-sign-history.dart';
import 'package:doctor_app_flutter/screens/base/base_view.dart';
import 'package:doctor_app_flutter/screens/patients/profile/diabetic_chart/line_chart_for_diabetic.dart';
import 'package:doctor_app_flutter/screens/patients/profile/vital_sign/vital_sign_details_blood_pressurewideget.dart';
import 'package:doctor_app_flutter/util/date-utils.dart';
import 'package:doctor_app_flutter/util/helpers.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/charts/app_time_series_chart.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:doctor_app_flutter/widgets/shared/loader/gif_loader_dialog_utils.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'diabetic_details_blood_pressurewideget.dart';
class DiabeticChart extends StatefulWidget {
DiabeticChart({
Key key,
}) : super(key: key);
@override
_DiabeticChartState createState() => _DiabeticChartState();
}
class _DiabeticChartState extends State<DiabeticChart> {
List<TimeSeriesSales2> timeSeriesData1 = [];
List<TimeSeriesSales2> timeSeriesData2 = [];
List<DiabeticType> diabeticType = [
DiabeticType(nameAr: "Urine Glucose", nameEn: "Urine Glucose", value: 1),
DiabeticType(nameAr: "Urine Acet", nameEn: "Urine Acet", value: 2),
DiabeticType(nameAr: "Blood Glucose", nameEn: "Blood Glucose", value: 3),
DiabeticType(nameAr: "Blood Glucose(Glucometer)", nameEn: "Blood Glucose(Glucometer)", value: 4)
];
DiabeticType selectedDiabeticType;
@override
Widget build(BuildContext context) {
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
ProjectViewModel projectsProvider = Provider.of(context);
return BaseView<PatientViewModel>(
onModelReady: (model) async {
selectedDiabeticType = diabeticType[2];
await model.getDiabeticChartValues(patient, selectedDiabeticType.value, isLocalBusy: false);
generateData(model);
},
builder: (_, model, w) => AppScaffold(
baseViewModel: model,
backgroundColor: Theme.of(context).scaffoldBackgroundColor,
appBar: PatientProfileAppBar(
patient,
isInpatient: true,
),
body: SingleChildScrollView(
child: Column(
children: [
Container(
width: MediaQuery.of(context).size.width * 0.7,
child: DropdownButtonHideUnderline(
child: DropdownButton(
dropdownColor: Colors.white,
iconEnabledColor: Colors.black,
isExpanded: true,
value: selectedDiabeticType.value,
iconSize: 25,
elevation: 16,
selectedItemBuilder: (BuildContext context) {
return diabeticType
.map((item) {
return Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment:
MainAxisAlignment.end,
children: <Widget>[
Column(
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Container(
padding: EdgeInsets.all(2),
margin: EdgeInsets.all(2),
decoration: new BoxDecoration(
color: Colors.red[800],
borderRadius:
BorderRadius.circular(
20),
),
constraints: BoxConstraints(
minWidth: 20,
minHeight: 20,
),
child: Center(
child: AppText(
diabeticType
.length
.toString(),
color: Colors.white,
fontSize: projectsProvider
.isArabic
? 10
: 11,
textAlign:
TextAlign.center,
),
)),
],
),
AppText(
selectedDiabeticType.nameEn,
fontSize: 12,
color: Colors.black,
fontWeight: FontWeight.bold,
textAlign: TextAlign.end),
],
);
}).toList();
},
onChanged: (newValue) async {
await onChangeFunc(newValue, model, patient);
setState(() {
});
},
items: diabeticType
.map((item) {
return DropdownMenuItem(
child: AppText(
item.nameEn,
textAlign: TextAlign.left,
),
value: item.value,
);
}).toList(),
)),
),
timeSeriesData1.length != 0 || timeSeriesData2.length != 0
? Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Container(
margin: EdgeInsets.symmetric(horizontal: 8),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12)),
child: LineChartForDiabetic(
title: selectedDiabeticType.nameEn,
isOX: false,
timeSeries1: timeSeriesData1,
// timeSeries2: timeSeriesData2,
indexes: timeSeriesData1.length ~/ 5.5,
),
),
Container(
margin: EdgeInsets.symmetric(
horizontal: 8, vertical: 16),
padding: EdgeInsets.only(
top: 16, right: 18.0, left: 16.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
TranslationBase.of(context).graphDetails,
fontSize: SizeConfig.textMultiplier * 2.3,
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
),
SizedBox(
height: 8,
),
DiabeticDetails(
diabeticDetailsList:
model.diabeticChartValuesList,
),
],
),
),
],
),
)
: ErrorMessage(error: TranslationBase.of(context).noItem),
],
),
)),
);
}
generateData(PatientViewModel model) {
if (model.diabeticChartValuesList.length > 0) {
model.diabeticChartValuesList.toList().forEach(
(element) {
DateTime elementDate =
AppDateUtils.getDateTimeFromServerFormat(element.dateChart);
if (element.resultValue.toInt() != 0)
timeSeriesData1.add(
TimeSeriesSales2(
new DateTime(
elementDate.year, elementDate.month, elementDate.day),
element.resultValue.toDouble(),
),
);
if (element.resultValue.toInt() != 0)
timeSeriesData2.add(
TimeSeriesSales2(
new DateTime(
elementDate.year, elementDate.month, elementDate.day),
element.resultValue.toDouble(),
),
);
},
);
}
}
onChangeFunc(newValue, PatientViewModel model, patient) async {
GifLoaderDialogUtils.showMyDialog(context);
setState(() {
selectedDiabeticType = diabeticType[newValue-1];
timeSeriesData1.clear();
timeSeriesData2.clear();
});
await model.getDiabeticChartValues(patient, selectedDiabeticType.value,isLocalBusy:true);
if(model.state == ViewState.ErrorLocal){
Helpers.showErrorToast(model.error);
}
generateData(model);
GifLoaderDialogUtils.hideDialog(context);
}
}

@ -0,0 +1,123 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/diabetic_chart/GetDiabeticChartValuesResponseModel.dart';
import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/models/patient/vital_sign/patient-vital-sign-history.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/shared/app_texts_widget.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class DiabeticDetails extends StatefulWidget {
final List<GetDiabeticChartValuesResponseModel> diabeticDetailsList;
DiabeticDetails(
{Key key, this.diabeticDetailsList,});
@override
_VitalSignDetailsWidgetState createState() => _VitalSignDetailsWidgetState();
}
class _VitalSignDetailsWidgetState extends State<DiabeticDetails> {
@override
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return Container(
margin: EdgeInsets.all(0),
child: Container(
color: Colors.transparent,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: [
Expanded(
child: Container(
child: Container(
padding: EdgeInsets.all(8),
child: AppText(
TranslationBase.of(context).date,
fontSize: SizeConfig.textMultiplier * 1.5,
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
),
// height: 60,
),
),
),
Expanded(
child: Container(
padding: EdgeInsets.all(8),
child: Container(
child: AppText(
"Result",
fontSize: SizeConfig.textMultiplier * 1.5,
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
),
// height: 60
),
),
),
],
),
const Divider(
height: 1,
thickness: 1,
color: Colors.black,
),
Table(
border: TableBorder(
horizontalInside: BorderSide(width: 1.0, color: Colors.grey[300]),
),
children: fullData(projectViewModel),
),
],
),
),
);
}
List<TableRow> fullData(ProjectViewModel projectViewModel) {
List<TableRow> tableRow = [];
widget.diabeticDetailsList.forEach((diabetic) {
var data = diabetic.resultValue;
DateTime elementDate =
AppDateUtils.getDateTimeFromServerFormat(diabetic.dateChart);
if (data != 0)
tableRow.add(TableRow(children: [
Container(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: AppText(
'${projectViewModel.isArabic ? AppDateUtils.getWeekDayArabic(elementDate.weekday) : AppDateUtils.getWeekDay(elementDate.weekday)}, ${elementDate.day} ${projectViewModel.isArabic ? AppDateUtils.getMonthArabic(elementDate.month) : AppDateUtils.getMonth(elementDate.month)}, ${elementDate.year} ${AppDateUtils.getHour(elementDate)}',
// textAlign: TextAlign.center,
fontSize: SizeConfig.textMultiplier * 1.6,
fontWeight: FontWeight.w600,
fontFamily: 'Poppins',
),
),
),
Container(
child: Container(
padding: EdgeInsets.all(10),
color: Colors.white,
child: AppText(
'${diabetic.resultValue}',
// textAlign: TextAlign.center,
fontSize: SizeConfig.textMultiplier * 1.6,
fontWeight: FontWeight.w600,
fontFamily: 'Poppins',
),
),
),
]));
});
return tableRow;
}
}

@ -0,0 +1,237 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/util/translations_delegate_base.dart';
import 'package:doctor_app_flutter/widgets/charts/app_time_series_chart.dart';
import 'package:doctor_app_flutter/widgets/shared/app_texts_widget.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/material.dart';
class LineChartForDiabetic extends StatelessWidget {
final String title;
final List<TimeSeriesSales2> timeSeries1;
final int indexes;
final bool isOX;
LineChartForDiabetic(
{this.title, this.timeSeries1, this.indexes, this.isOX= false});
List<int> xAxixs = List();
List<double> yAxixs = List();
@override
Widget build(BuildContext context) {
getXaxix();
return AspectRatio(
aspectRatio: 1.1,
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(18)),
// color: Colors.white,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
const SizedBox(
height: 4,
),
Container(
padding: const EdgeInsets.only(right: 18.0, left: 16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
AppText(
title,
fontSize: SizeConfig.textMultiplier * 2.1,
fontWeight: FontWeight.bold,
fontFamily: 'Poppins',
textAlign: TextAlign.center,
),
],
),
),
SizedBox(
height: 10,
),
Expanded(
child: Padding(
padding:
const EdgeInsets.only(right: 18.0, left: 16.0, top: 15),
child: LineChart(
sampleData1(context),
swapAnimationDuration: const Duration(milliseconds: 250),
),
),
),
SizedBox(
height: 10,
),
],
),
),
);
}
getXaxix() {
for (int index = 0; index < timeSeries1.length; index++) {
int mIndex = indexes * index;
if (mIndex < timeSeries1.length) {
xAxixs.add(mIndex);
}
}
}
LineChartData sampleData1(context) {
return LineChartData(
lineTouchData: LineTouchData(
touchTooltipData: LineTouchTooltipData(
tooltipBgColor: Colors.white,
),
touchCallback: (LineTouchResponse touchResponse) {},
handleBuiltInTouches: true,
),
gridData: FlGridData(
show: true, drawVerticalLine: true, drawHorizontalLine: true),
titlesData: FlTitlesData(
bottomTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontSize: 10,
),
rotateAngle: -65,
//rotateAngle:-65,
interval: 100,
margin: 22,
getTitles: (value) {
if (timeSeries1.length < 15) {
if (timeSeries1.length > value.toInt()) {
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
} else
return '';
} else {
if (value.toInt() == 0)
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
if (value.toInt() == timeSeries1.length - 1)
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
if (xAxixs.contains(value.toInt())) {
return '${timeSeries1[value.toInt()].time.month}/ ${timeSeries1[value.toInt()].time.year}';
}
}
return '';
},
),
leftTitles: SideTitles(
showTitles: true,
getTextStyles: (value) => const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
fontSize: 10,
),
interval:getMaxY() - getMinY() <=500?50:getMaxY() - getMinY() <=1000?100:200,
margin: 12,
),
),
borderData: FlBorderData(
show: true,
border: const Border(
bottom: BorderSide(
color: Colors.black,
width: 0.5,
),
left: BorderSide(
color: Colors.black,
),
right: BorderSide(
color: Colors.black,
),
top: BorderSide(
color: Colors.transparent,
),
),
),
minX: 0,
maxX: (timeSeries1.length - 1).toDouble(),
maxY: getMaxY() + 0.3,
minY: getMinY(),
lineBarsData: getData(context),
);
}
double getMaxY() {
double max = 0;
timeSeries1.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble > max) max = resultValueDouble;
});
// timeSeries2.forEach((element) {
// double resultValueDouble = element.sales;
// if (resultValueDouble > max) max = resultValueDouble;
// });
return max.roundToDouble();
}
double getMinY() {
double min = timeSeries1[0].sales;
timeSeries1.forEach((element) {
double resultValueDouble = element.sales;
if (resultValueDouble < min) min = resultValueDouble;
});
// timeSeries2.forEach((element) {
// double resultValueDouble = element.sales;
// if (resultValueDouble < min) min = resultValueDouble;
// });
int value = min.toInt();
return value.toDouble();
}
List<LineChartBarData> getData(context) {
List<FlSpot> spots = List();
for (int index = 0; index < timeSeries1.length; index++) {
spots.add(FlSpot(index.toDouble(), timeSeries1[index].sales));
}
List<FlSpot> spots2 = List();
// for (int index = 0; index < timeSeries2.length; index++) {
// spots2.add(FlSpot(index.toDouble(), timeSeries2[index].sales));
// }
final LineChartBarData lineChartBarData1 = LineChartBarData(
spots: spots,
isCurved: true,
colors: [Colors.red],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
final LineChartBarData lineChartBarData2 = LineChartBarData(
spots: spots2,
isCurved: true,
colors: [Colors.red],
barWidth: 5,
isStrokeCapRound: true,
dotData: FlDotData(
show: false,
),
belowBarData: BarAreaData(
show: false,
),
);
List<LineChartBarData> lineChartData = List();
if(spots.isNotEmpty){
lineChartData.add(lineChartBarData1);
}
if(spots2.isNotEmpty){
lineChartData.add(lineChartBarData2);
}
return lineChartData;
}
}

@ -133,7 +133,7 @@ class _ProgressNoteState extends State<DiagnosisScreen> {
model
.diagnosisForInPatientList[
index]
.createdBy
.createdByName
.toString() ??
'',
fontWeight:

@ -135,7 +135,7 @@ class _ProgressNoteState extends State<NursingProgressNoteScreen> {
model
.patientNursingProgressNoteList[
index]
.createdBy
.createdByName
.toString() ??
'',
fontWeight:

@ -46,37 +46,12 @@ class _ProgressNoteState extends State<OperationReportScreen> {
AuthenticationViewModel authenticationViewModel;
ProjectViewModel projectViewModel;
getProgressNoteList(BuildContext context, PatientViewModel model,
{bool isLocalBusy = false}) async {
final routeArgs = ModalRoute.of(context).settings.arguments as Map;
PatiantInformtion patient = routeArgs['patient'];
String token = await sharedPref.getString(TOKEN);
String type = await sharedPref.getString(SLECTED_PATIENT_TYPE);
print(type);
ProgressNoteRequest progressNoteRequest = ProgressNoteRequest(
visitType: widget.visitType,
// if equal 5 then this will return progress note
admissionNo: int.parse(patient.admissionNo),
projectID: patient.projectId,
tokenID: token,
patientTypeID: patient.patientType,
languageID: 2);
model
.getPatientProgressNote(progressNoteRequest.toJson(),
isLocalBusy: isLocalBusy)
.then((c) {
notesList = model.patientProgressNoteList;
});
}
@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<OperationReportViewModel>(
@ -93,27 +68,6 @@ class _ProgressNoteState extends State<OperationReportScreen> {
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,
),
model.operationReportList == null ||
model.operationReportList.length == 0
? DrAppEmbeddedError(
@ -133,283 +87,9 @@ class _ProgressNoteState extends State<OperationReportScreen> {
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.start,
children: [
if (model.operationReportList[index]
.status ==
1 &&
authenticationViewModel
.doctorProfile.doctorID !=
model
.operationReportList[
index]
.createdBy)
AppText(
TranslationBase.of(context)
.notePending,
fontWeight: FontWeight.bold,
color: Color(0xFFCC9B14),
fontSize: 12,
),
if (model.operationReportList[index]
.status ==
4)
AppText(
TranslationBase.of(context)
.noteCanceled,
fontWeight: FontWeight.bold,
color: Colors.red.shade700,
fontSize: 12,
),
if (model.operationReportList[index]
.status ==
2)
AppText(
TranslationBase.of(context)
.noteVerified,
fontWeight: FontWeight.bold,
color: Colors.green[600],
fontSize: 12,
),
if (model.operationReportList[index]
.status !=
2 &&
model.operationReportList[index]
.status !=
4 &&
authenticationViewModel
.doctorProfile.doctorID ==
model
.operationReportList[
index]
.createdBy)
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
InkWell(
// onTap: () {
// Navigator.push(
// context,
// MaterialPageRoute(
// builder: (context) =>
// UpdateNoteOrder(
// note: model
// .operationReportList[
// index],
// patientModel:
// model,
// patient:
// patient,
// visitType: widget
// .visitType,
// isUpdate: true,
// )),
// );
// },
child: Container(
decoration: BoxDecoration(
color: Colors.grey[600],
borderRadius:
BorderRadius.circular(
10),
),
// color:Colors.red[600],
child: Row(
children: [
Icon(
DoctorApp.edit_1,
size: 12,
color: Colors.white,
),
SizedBox(
width: 2,
),
AppText(
TranslationBase.of(
context)
.update,
fontSize: 10,
color: Colors.white,
),
],
),
padding: EdgeInsets.all(6),
),
),
SizedBox(
width: 10,
),
// InkWell(
// onTap: () async {
// showMyDialog(
// context: context,
// actionName: "verify",
// confirmFun: () async {
// GifLoaderDialogUtils
// .showMyDialog(
// context);
// UpdateNoteReqModel
// reqModel =
// UpdateNoteReqModel(
// admissionNo: int
// .parse(patient
// .admissionNo),
// cancelledNote:
// false,
// lineItemNo: model
// .patientProgressNoteList[
// index]
// .lineItemNo,
// createdBy: model
// .patientProgressNoteList[
// index]
// .createdBy,
// notes: model
// .patientProgressNoteList[
// index]
// .notes,
// verifiedNote: true,
// patientTypeID:
// patient
// .patientType,
// patientOutSA: false,
// );
// await model
// .updatePatientProgressNote(
// reqModel);
// await getProgressNoteList(
// context, model,
// isLocalBusy:
// true);
// GifLoaderDialogUtils
// .hideDialog(
// context);
// });
// },
// child: Container(
// decoration: BoxDecoration(
// color: Colors.green[600],
// borderRadius:
// BorderRadius.circular(
// 10),
// ),
// // color:Colors.red[600],
//
// child: Row(
// children: [
// Icon(
// FontAwesomeIcons
// .check,
// size: 12,
// color: Colors.white,
// ),
// SizedBox(
// width: 2,
// ),
// AppText(
// TranslationBase.of(
// context)
// .noteVerify,
// fontSize: 10,
// color: Colors.white,
// ),
// ],
// ),
// padding: EdgeInsets.all(6),
// ),
// ),
SizedBox(
width: 10,
),
// InkWell(
// onTap: () async {
// showMyDialog(
// context: context,
// actionName:
// TranslationBase.of(
// context)
// .cancel,
// confirmFun: () async {
// GifLoaderDialogUtils
// .showMyDialog(
// context,
// );
// UpdateNoteReqModel
// reqModel =
// UpdateNoteReqModel(
// admissionNo: int
// .parse(patient
// .admissionNo),
// cancelledNote: true,
// lineItemNo: model
// .patientProgressNoteList[
// index]
// .lineItemNo,
// createdBy: model
// .patientProgressNoteList[
// index]
// .createdBy,
// notes: model
// .patientProgressNoteList[
// index]
// .notes,
// verifiedNote: false,
// patientTypeID:
// patient
// .patientType,
// patientOutSA: false,
// );
// await model
// .updatePatientProgressNote(
// reqModel);
// await getProgressNoteList(
// context, model,
// isLocalBusy:
// true);
// GifLoaderDialogUtils
// .hideDialog(
// context);
// });
// },
// child: Container(
// decoration: BoxDecoration(
// color: Colors.red[600],
// borderRadius:
// BorderRadius.circular(
// 10),
// ),
// // color:Colors.red[600],
//
// child: Row(
// children: [
// Icon(
// FontAwesomeIcons
// .trash,
// size: 12,
// color: Colors.white,
// ),
// SizedBox(
// width: 2,
// ),
// AppText(
// 'Cancel',
// fontSize: 10,
// color: Colors.white,
// ),
// ],
// ),
// padding: EdgeInsets.all(6),
// ),
// ),
SizedBox(
width: 10,
)
],
),
SizedBox(
height: 10,
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
@ -506,25 +186,160 @@ class _ProgressNoteState extends State<OperationReportScreen> {
SizedBox(
height: 8,
),
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
Expanded(
child: AppText(
model
.operationReportList[
index]
.remarks,
if (model.operationReportList[index]
.operationDate !=
null)
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
"Operation Date : ",
fontSize: 10,
),
),
])
Expanded(
child: AppText(
AppDateUtils.getDayMonthYearDateFormatted(
AppDateUtils
.getDateTimeFromServerFormat(model
.operationReportList[
index]
.operationDate),
isArabic:
projectViewModel
.isArabic,
isMonthShort: true),
fontSize: 10,
),
)
]),
if (model.operationReportList[index]
.timeStart !=
null)
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
"Operation Time Start : ",
fontSize: 10,
),
Expanded(
child: AppText(
model
.operationReportList[
index]
.timeStart,
fontSize: 10,
),
)
]),
if (model.operationReportList[index]
.remarks !=
null)
Row(
mainAxisAlignment:
MainAxisAlignment.start,
children: [
AppText(
"Remarks : ",
fontSize: 10,
),
Expanded(
child: AppText(
model
.operationReportList[
index]
.remarks ??
'',
fontSize: 10,
),
),
])
],
),
SizedBox(
height: 20,
),
// if (
// authenticationViewModel
// .doctorProfile.doctorID ==
// model
// .operationReportList[
// index]
// .createdBy)
Row(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.end,
children: [
InkWell(
onTap: () async {
await locator<AnalyticsService>()
.logEvent(
eventCategory:
"Operation Report Screen",
eventAction:
"Update Operation Report ",
);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
UpdateOperationReport(
operationReport: model
.operationReportList[
index],
operationReportViewModel:
model,
patient: patient,
isUpdate: true,
)),
);
},
child: Container(
decoration: BoxDecoration(
color: Colors.green[600],
borderRadius:
BorderRadius.circular(10),
),
// color:Colors.red[600],
child: Row(
children: [
Icon(
DoctorApp.edit_1,
size: 12,
color: Colors.white,
),
SizedBox(
width: 2,
),
AppText(
"Operation Reports",
fontSize: 10,
color: Colors.white,
),
],
),
padding: EdgeInsets.all(6),
),
),
SizedBox(
width: 10,
),
SizedBox(
width: 10,
),
],
),
SizedBox(
height: 10,
),
],
),
),

@ -12,6 +12,7 @@ import 'package:doctor_app_flutter/core/viewModel/project_view_model.dart';
import 'package:doctor_app_flutter/icons_app/doctor_app_icons.dart';
import 'package:doctor_app_flutter/models/doctor/doctor_profile_model.dart';
import 'package:doctor_app_flutter/models/operation_report/create_update_operation_report_request_model.dart';
import 'package:doctor_app_flutter/models/operation_report/get_operation_report_model.dart';
import 'package:doctor_app_flutter/models/patient/patiant_info_model.dart';
import 'package:doctor_app_flutter/models/patient/progress_note_request.dart';
import 'package:doctor_app_flutter/screens/patients/profile/soap_update/shared_soap_widgets/bottom_sheet_title.dart';
@ -30,7 +31,7 @@ import 'package:speech_to_text/speech_recognition_error.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;
class UpdateOperationReport extends StatefulWidget {
final NoteModel note;
final GetOperationReportModel operationReport;
final OperationReportViewModel operationReportViewModel;
final PatiantInformtion patient;
final int visitType;
@ -38,11 +39,11 @@ class UpdateOperationReport extends StatefulWidget {
const UpdateOperationReport(
{Key key,
this.note,
this.operationReportViewModel,
this.patient,
this.visitType,
this.isUpdate})
this.isUpdate,
this.operationReport})
: super(key: key);
@override
@ -77,6 +78,7 @@ class _UpdateOperationReportState extends State<UpdateOperationReport> {
TextEditingController BloodTransfusedDetailController =
TextEditingController();
TextEditingController anasthetistController = TextEditingController();
TextEditingController OTReservationID = TextEditingController();
setSelectedType(int val) {
setState(() {
@ -92,6 +94,8 @@ class _UpdateOperationReportState extends State<UpdateOperationReport> {
@override
Widget build(BuildContext context) {
projectViewModel = Provider.of(context);
if(widget.isUpdate)
OTReservationID.text = widget.operationReport.oTReservationID.toString();
//TODO Elham* add translation to hints
return AppScaffold(
isShowAppBar: true,
@ -120,6 +124,18 @@ class _UpdateOperationReportState extends State<UpdateOperationReport> {
widthFactor: 0.9,
child: Column(
children: [
AppTextFieldCustom(
hintText: "Reservation No",
//TranslationBase.of(context).addoperationReports,
controller: OTReservationID,
maxLines: 1,
minLines: 1,
enabled: false,
hasBorder: true,
),
SizedBox(
height: 4,
),
AppTextFieldCustom(
hintText: "Pre Op Diagmosis",
//TranslationBase.of(context).addoperationReports,
@ -473,14 +489,15 @@ class _UpdateOperationReportState extends State<UpdateOperationReport> {
});
if (isFormValid()) {
GifLoaderDialogUtils.showMyDialog(context);
await widget.operationReportViewModel.getDoctorProfile();
await widget.operationReportViewModel.getDoctorProfile();
CreateUpdateOperationReportRequestModel
createUpdateOperationReportRequestModel =
CreateUpdateOperationReportRequestModel(
inasion: inasionController.text,
/// TODO Elham* Add dynamic reservation
reservationNo: 0,
reservationNo:widget.operationReport.oTReservationID ,
preOpDiagmosis: preOpDiagmosisController.text,
postOpDiagmosis: postOpDiagmosisNoteController.text,
surgeon: surgeonController.text,
@ -503,7 +520,8 @@ class _UpdateOperationReportState extends State<UpdateOperationReport> {
bloodLossDetailController.text,
patientID: widget.patient.patientId,
admissionNo: int.parse(widget.patient.admissionNo),
createdBy: widget.operationReportViewModel.doctorProfile.doctorID,
createdBy: widget.operationReportViewModel
.doctorProfile.doctorID,
setupID: SETUP_ID);
await widget.operationReportViewModel.updateOperationReport(
createUpdateOperationReportRequestModel);

@ -161,6 +161,13 @@ class ProfileGridForInPatient extends StatelessWidget {
'patient/patient_sick_leave.png',
isInPatient: isInpatient,
),
PatientProfileCardModel(
"Diabetic",
"Chart",
DIABETIC_CHART_VALUES,
'patient/patient_sick_leave.png',
isInPatient: isInpatient,
),
];
return Padding(

@ -34,12 +34,6 @@ class _VitalSignDetailsWidgetState extends State<VitalSignBloodPressureWidget> {
Widget build(BuildContext context) {
ProjectViewModel projectViewModel = Provider.of(context);
return Container(
/*decoration: BoxDecoration(
color: Colors.transparent,
borderRadius: BorderRadius.only(
topLeft: Radius.circular(10.0), topRight: Radius.circular(10.0)),
border: Border.all(color: Colors.grey, width: 1),
),*/
margin: EdgeInsets.all(0),
child: Container(
color: Colors.transparent,
@ -52,13 +46,6 @@ class _VitalSignDetailsWidgetState extends State<VitalSignBloodPressureWidget> {
child: Container(
child: Container(
padding: EdgeInsets.all(8),
/*decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topLeft:projectViewModel.isArabic? Radius.circular(0.0):Radius.circular(10.0),
topRight: projectViewModel.isArabic? Radius.circular(10.0):Radius.circular(0.0)
),
),*/
child: AppText(
TranslationBase.of(context).date,
fontSize: SizeConfig.textMultiplier * 1.5,
@ -74,13 +61,6 @@ class _VitalSignDetailsWidgetState extends State<VitalSignBloodPressureWidget> {
child: Container(
padding: EdgeInsets.all(8),
child: Container(
/*decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topRight: projectViewModel.isArabic? Radius.circular(0.0):Radius.circular(10.0),
topLeft: projectViewModel.isArabic? Radius.circular(10.0):Radius.circular(0.0)
),
),*/
child: AppText(
widget.title2,
fontSize: SizeConfig.textMultiplier * 1.5,
@ -96,13 +76,6 @@ class _VitalSignDetailsWidgetState extends State<VitalSignBloodPressureWidget> {
child: Container(
padding: EdgeInsets.all(8),
child: Container(
/*decoration: BoxDecoration(
color: Theme.of(context).primaryColor,
borderRadius: BorderRadius.only(
topRight: projectViewModel.isArabic? Radius.circular(0.0):Radius.circular(10.0),
topLeft: projectViewModel.isArabic? Radius.circular(10.0):Radius.circular(0.0)
),
),*/
child: AppText(
widget.title3,
fontSize: SizeConfig.textMultiplier * 1.5,

@ -0,0 +1,211 @@
import 'package:doctor_app_flutter/core/viewModel/PatientRegistrationViewModel.dart';
import 'package:doctor_app_flutter/screens/base/base_view.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<PatientRegistrationViewModel>(
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(PatientRegistrationViewModel 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,202 @@
import 'package:doctor_app_flutter/config/size_config.dart';
import 'package:doctor_app_flutter/core/model/PatientRegistration/PatientRegistrationModel.dart';
import 'package:doctor_app_flutter/core/viewModel/PatientRegistrationViewModel.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/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/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<PatientRegistrationViewModel>(
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