implementing livecare
parent
59c279998c
commit
db30fbdfd2
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "864393916058",
|
||||||
|
"firebase_url": "https://diplomaticquarter-d2385.firebaseio.com",
|
||||||
|
"project_id": "diplomaticquarter-d2385",
|
||||||
|
"storage_bucket": "diplomaticquarter-d2385.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:864393916058:android:5b5a65cd6d8c18b4b97923",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.cloud.diplomaticquarterapp"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "864393916058-tphjrn8j39ntevt32ekcvmll8aue7qql.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyBdV3mos1BPhUzNKCj2KANJtiO3o2zh9IM"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "864393916058-tphjrn8j39ntevt32ekcvmll8aue7qql.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
{
|
||||||
|
"project_info": {
|
||||||
|
"project_number": "864393916058",
|
||||||
|
"firebase_url": "https://diplomaticquarter-d2385.firebaseio.com",
|
||||||
|
"project_id": "diplomaticquarter-d2385",
|
||||||
|
"storage_bucket": "diplomaticquarter-d2385.appspot.com"
|
||||||
|
},
|
||||||
|
"client": [
|
||||||
|
{
|
||||||
|
"client_info": {
|
||||||
|
"mobilesdk_app_id": "1:864393916058:android:5b5a65cd6d8c18b4b97923",
|
||||||
|
"android_client_info": {
|
||||||
|
"package_name": "com.cloud.diplomaticquarterapp"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "864393916058-tphjrn8j39ntevt32ekcvmll8aue7qql.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"api_key": [
|
||||||
|
{
|
||||||
|
"current_key": "AIzaSyBdV3mos1BPhUzNKCj2KANJtiO3o2zh9IM"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"services": {
|
||||||
|
"appinvite_service": {
|
||||||
|
"other_platform_oauth_client": [
|
||||||
|
{
|
||||||
|
"client_id": "864393916058-tphjrn8j39ntevt32ekcvmll8aue7qql.apps.googleusercontent.com",
|
||||||
|
"client_type": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"configuration_version": "1"
|
||||||
|
}
|
||||||
@ -0,0 +1,108 @@
|
|||||||
|
class PatientERVirtualHistoryResponse {
|
||||||
|
List<ErRequestHistoryList> erRequestHistoryList;
|
||||||
|
|
||||||
|
PatientERVirtualHistoryResponse({this.erRequestHistoryList});
|
||||||
|
|
||||||
|
PatientERVirtualHistoryResponse.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['ErRequestHistoryList'] != null) {
|
||||||
|
erRequestHistoryList = new List<ErRequestHistoryList>();
|
||||||
|
json['ErRequestHistoryList'].forEach((v) {
|
||||||
|
erRequestHistoryList.add(new ErRequestHistoryList.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
if (this.erRequestHistoryList != null) {
|
||||||
|
data['ErRequestHistoryList'] =
|
||||||
|
this.erRequestHistoryList.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ErRequestHistoryList {
|
||||||
|
dynamic appointmentNo;
|
||||||
|
String arrivalTime;
|
||||||
|
int callDuration;
|
||||||
|
int callStatus;
|
||||||
|
String clientRequestID;
|
||||||
|
String doctorID;
|
||||||
|
String doctorName;
|
||||||
|
String doctorNameN;
|
||||||
|
String doctorTitle;
|
||||||
|
String exWaitingTime;
|
||||||
|
bool isAppointmentHaveRating;
|
||||||
|
int patCount;
|
||||||
|
int projectID;
|
||||||
|
String sArrivalTime;
|
||||||
|
int serviceID;
|
||||||
|
String stringCallStatus;
|
||||||
|
int vCID;
|
||||||
|
int watingtimeInteger;
|
||||||
|
|
||||||
|
ErRequestHistoryList(
|
||||||
|
{this.appointmentNo,
|
||||||
|
this.arrivalTime,
|
||||||
|
this.callDuration,
|
||||||
|
this.callStatus,
|
||||||
|
this.clientRequestID,
|
||||||
|
this.doctorID,
|
||||||
|
this.doctorName,
|
||||||
|
this.doctorNameN,
|
||||||
|
this.doctorTitle,
|
||||||
|
this.exWaitingTime,
|
||||||
|
this.isAppointmentHaveRating,
|
||||||
|
this.patCount,
|
||||||
|
this.projectID,
|
||||||
|
this.sArrivalTime,
|
||||||
|
this.serviceID,
|
||||||
|
this.stringCallStatus,
|
||||||
|
this.vCID,
|
||||||
|
this.watingtimeInteger});
|
||||||
|
|
||||||
|
ErRequestHistoryList.fromJson(Map<String, dynamic> json) {
|
||||||
|
appointmentNo = json['AppointmentNo'] != null ? json['AppointmentNo'] : "0";
|
||||||
|
arrivalTime = json['ArrivalTime'];
|
||||||
|
callDuration = json['CallDuration'];
|
||||||
|
callStatus = json['CallStatus'];
|
||||||
|
clientRequestID = json['ClientRequestID'];
|
||||||
|
doctorID = json['DoctorID'];
|
||||||
|
doctorName = json['DoctorName'];
|
||||||
|
doctorNameN = json['DoctorNameN'];
|
||||||
|
doctorTitle = json['DoctorTitle'];
|
||||||
|
exWaitingTime = json['Ex_WaitingTime'];
|
||||||
|
isAppointmentHaveRating = json['IsAppointmentHaveRating'];
|
||||||
|
patCount = json['Pat_Count'];
|
||||||
|
projectID = json['ProjectID'];
|
||||||
|
sArrivalTime = json['SArrivalTime'];
|
||||||
|
serviceID = json['ServiceID'];
|
||||||
|
stringCallStatus = json['StringCallStatus'];
|
||||||
|
vCID = json['VC_ID'];
|
||||||
|
watingtimeInteger = json['WatingtimeInteger'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['AppointmentNo'] = this.appointmentNo;
|
||||||
|
data['ArrivalTime'] = this.arrivalTime;
|
||||||
|
data['CallDuration'] = this.callDuration;
|
||||||
|
data['CallStatus'] = this.callStatus;
|
||||||
|
data['ClientRequestID'] = this.clientRequestID;
|
||||||
|
data['DoctorID'] = this.doctorID;
|
||||||
|
data['DoctorName'] = this.doctorName;
|
||||||
|
data['DoctorNameN'] = this.doctorNameN;
|
||||||
|
data['DoctorTitle'] = this.doctorTitle;
|
||||||
|
data['Ex_WaitingTime'] = this.exWaitingTime;
|
||||||
|
data['IsAppointmentHaveRating'] = this.isAppointmentHaveRating;
|
||||||
|
data['Pat_Count'] = this.patCount;
|
||||||
|
data['ProjectID'] = this.projectID;
|
||||||
|
data['SArrivalTime'] = this.sArrivalTime;
|
||||||
|
data['ServiceID'] = this.serviceID;
|
||||||
|
data['StringCallStatus'] = this.stringCallStatus;
|
||||||
|
data['VC_ID'] = this.vCID;
|
||||||
|
data['WatingtimeInteger'] = this.watingtimeInteger;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,122 @@
|
|||||||
|
class ClinicsServiceTimingsResponse {
|
||||||
|
List<PatientERGetClinicsServiceTimingsList>
|
||||||
|
patientERGetClinicsServiceTimingsList;
|
||||||
|
|
||||||
|
ClinicsServiceTimingsResponse({this.patientERGetClinicsServiceTimingsList});
|
||||||
|
|
||||||
|
ClinicsServiceTimingsResponse.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['PatientER_GetClinicsServiceTimingsList'] != null) {
|
||||||
|
patientERGetClinicsServiceTimingsList =
|
||||||
|
new List<PatientERGetClinicsServiceTimingsList>();
|
||||||
|
json['PatientER_GetClinicsServiceTimingsList'].forEach((v) {
|
||||||
|
patientERGetClinicsServiceTimingsList
|
||||||
|
.add(new PatientERGetClinicsServiceTimingsList.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
if (this.patientERGetClinicsServiceTimingsList != null) {
|
||||||
|
data['PatientER_GetClinicsServiceTimingsList'] = this
|
||||||
|
.patientERGetClinicsServiceTimingsList
|
||||||
|
.map((v) => v.toJson())
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PatientERGetClinicsServiceTimingsList {
|
||||||
|
int iD;
|
||||||
|
int serviceID;
|
||||||
|
Null shiftID;
|
||||||
|
int dayOfWeek;
|
||||||
|
String dayOfWeekStr;
|
||||||
|
Null startTime;
|
||||||
|
Null endTime;
|
||||||
|
bool isActive;
|
||||||
|
String createdOn;
|
||||||
|
String createdBy;
|
||||||
|
bool projectOutSA;
|
||||||
|
String dayOfWeekStrN;
|
||||||
|
List<ShiftTimings> shiftTimings;
|
||||||
|
|
||||||
|
PatientERGetClinicsServiceTimingsList(
|
||||||
|
{this.iD,
|
||||||
|
this.serviceID,
|
||||||
|
this.shiftID,
|
||||||
|
this.dayOfWeek,
|
||||||
|
this.dayOfWeekStr,
|
||||||
|
this.startTime,
|
||||||
|
this.endTime,
|
||||||
|
this.isActive,
|
||||||
|
this.createdOn,
|
||||||
|
this.createdBy,
|
||||||
|
this.projectOutSA,
|
||||||
|
this.dayOfWeekStrN,
|
||||||
|
this.shiftTimings});
|
||||||
|
|
||||||
|
PatientERGetClinicsServiceTimingsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
serviceID = json['ServiceID'];
|
||||||
|
shiftID = json['ShiftID'];
|
||||||
|
dayOfWeek = json['DayOfWeek'];
|
||||||
|
dayOfWeekStr = json['DayOfWeekStr'];
|
||||||
|
startTime = json['StartTime'];
|
||||||
|
endTime = json['EndTime'];
|
||||||
|
isActive = json['IsActive'];
|
||||||
|
createdOn = json['CreatedOn'];
|
||||||
|
createdBy = json['CreatedBy'];
|
||||||
|
projectOutSA = json['ProjectOutSA'];
|
||||||
|
dayOfWeekStrN = json['DayOfWeekStrN'];
|
||||||
|
if (json['ShiftTimings'] != null) {
|
||||||
|
shiftTimings = new List<ShiftTimings>();
|
||||||
|
json['ShiftTimings'].forEach((v) {
|
||||||
|
shiftTimings.add(new ShiftTimings.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ID'] = this.iD;
|
||||||
|
data['ServiceID'] = this.serviceID;
|
||||||
|
data['ShiftID'] = this.shiftID;
|
||||||
|
data['DayOfWeek'] = this.dayOfWeek;
|
||||||
|
data['DayOfWeekStr'] = this.dayOfWeekStr;
|
||||||
|
data['StartTime'] = this.startTime;
|
||||||
|
data['EndTime'] = this.endTime;
|
||||||
|
data['IsActive'] = this.isActive;
|
||||||
|
data['CreatedOn'] = this.createdOn;
|
||||||
|
data['CreatedBy'] = this.createdBy;
|
||||||
|
data['ProjectOutSA'] = this.projectOutSA;
|
||||||
|
data['DayOfWeekStrN'] = this.dayOfWeekStrN;
|
||||||
|
if (this.shiftTimings != null) {
|
||||||
|
data['ShiftTimings'] = this.shiftTimings.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShiftTimings {
|
||||||
|
String endTime;
|
||||||
|
int shiftID;
|
||||||
|
String startTime;
|
||||||
|
|
||||||
|
ShiftTimings({this.endTime, this.shiftID, this.startTime});
|
||||||
|
|
||||||
|
ShiftTimings.fromJson(Map<String, dynamic> json) {
|
||||||
|
endTime = json['EndTime'];
|
||||||
|
shiftID = json['ShiftID'];
|
||||||
|
startTime = json['StartTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['EndTime'] = this.endTime;
|
||||||
|
data['ShiftID'] = this.shiftID;
|
||||||
|
data['StartTime'] = this.startTime;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
class ERAppointmentFeesResponse {
|
||||||
|
GetERAppointmentFeesList getERAppointmentFeesList;
|
||||||
|
|
||||||
|
ERAppointmentFeesResponse({this.getERAppointmentFeesList});
|
||||||
|
|
||||||
|
ERAppointmentFeesResponse.fromJson(Map<String, dynamic> json) {
|
||||||
|
getERAppointmentFeesList = json['GetERAppointmentFeesList'] != null
|
||||||
|
? new GetERAppointmentFeesList.fromJson(
|
||||||
|
json['GetERAppointmentFeesList'])
|
||||||
|
: null;
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
if (this.getERAppointmentFeesList != null) {
|
||||||
|
data['GetERAppointmentFeesList'] = this.getERAppointmentFeesList.toJson();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class GetERAppointmentFeesList {
|
||||||
|
String amount;
|
||||||
|
String companyName;
|
||||||
|
bool isInsured;
|
||||||
|
bool isShowInsuranceUpdateModule;
|
||||||
|
String tax;
|
||||||
|
String total;
|
||||||
|
String currency;
|
||||||
|
|
||||||
|
GetERAppointmentFeesList(
|
||||||
|
{this.amount,
|
||||||
|
this.companyName,
|
||||||
|
this.isInsured,
|
||||||
|
this.isShowInsuranceUpdateModule,
|
||||||
|
this.tax,
|
||||||
|
this.total,
|
||||||
|
this.currency});
|
||||||
|
|
||||||
|
GetERAppointmentFeesList.fromJson(Map<String, dynamic> json) {
|
||||||
|
amount = json['Amount'];
|
||||||
|
companyName = json['CompanyName'];
|
||||||
|
isInsured = json['IsInsured'];
|
||||||
|
isShowInsuranceUpdateModule = json['IsShowInsuranceUpdateModule'];
|
||||||
|
tax = json['Tax'];
|
||||||
|
total = json['Total'];
|
||||||
|
currency = json['currency'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['Amount'] = this.amount;
|
||||||
|
data['CompanyName'] = this.companyName;
|
||||||
|
data['IsInsured'] = this.isInsured;
|
||||||
|
data['IsShowInsuranceUpdateModule'] = this.isShowInsuranceUpdateModule;
|
||||||
|
data['Tax'] = this.tax;
|
||||||
|
data['Total'] = this.total;
|
||||||
|
data['currency'] = this.currency;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,129 @@
|
|||||||
|
class LiveCareClinicsListResponse {
|
||||||
|
List<PatientERGetClinicsList> patientERGetClinicsList;
|
||||||
|
|
||||||
|
LiveCareClinicsListResponse({this.patientERGetClinicsList});
|
||||||
|
|
||||||
|
LiveCareClinicsListResponse.fromJson(Map<String, dynamic> json) {
|
||||||
|
if (json['PatientER_GetClinicsList'] != null) {
|
||||||
|
patientERGetClinicsList = new List<PatientERGetClinicsList>();
|
||||||
|
json['PatientER_GetClinicsList'].forEach((v) {
|
||||||
|
patientERGetClinicsList.add(new PatientERGetClinicsList.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
if (this.patientERGetClinicsList != null) {
|
||||||
|
data['PatientER_GetClinicsList'] =
|
||||||
|
this.patientERGetClinicsList.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class PatientERGetClinicsList {
|
||||||
|
int iD;
|
||||||
|
int serviceID;
|
||||||
|
String serviceName;
|
||||||
|
String serviceNameN;
|
||||||
|
int clinicID;
|
||||||
|
int age;
|
||||||
|
bool isCheckAgeBelow;
|
||||||
|
int gender;
|
||||||
|
bool isActive;
|
||||||
|
String createdOn;
|
||||||
|
String createdBy;
|
||||||
|
int isOnline;
|
||||||
|
Null endTime;
|
||||||
|
bool projectOutSA;
|
||||||
|
List<ShiftTimings> shiftTimings;
|
||||||
|
Null startTime;
|
||||||
|
|
||||||
|
PatientERGetClinicsList(
|
||||||
|
{this.iD,
|
||||||
|
this.serviceID,
|
||||||
|
this.serviceName,
|
||||||
|
this.serviceNameN,
|
||||||
|
this.clinicID,
|
||||||
|
this.age,
|
||||||
|
this.isCheckAgeBelow,
|
||||||
|
this.gender,
|
||||||
|
this.isActive,
|
||||||
|
this.createdOn,
|
||||||
|
this.createdBy,
|
||||||
|
this.isOnline,
|
||||||
|
this.endTime,
|
||||||
|
this.projectOutSA,
|
||||||
|
this.shiftTimings,
|
||||||
|
this.startTime});
|
||||||
|
|
||||||
|
PatientERGetClinicsList.fromJson(Map<String, dynamic> json) {
|
||||||
|
iD = json['ID'];
|
||||||
|
serviceID = json['ServiceID'];
|
||||||
|
serviceName = json['ServiceName'];
|
||||||
|
serviceNameN = json['ServiceNameN'];
|
||||||
|
clinicID = json['ClinicID'];
|
||||||
|
age = json['Age'];
|
||||||
|
isCheckAgeBelow = json['IsCheckAgeBelow'];
|
||||||
|
gender = json['Gender'];
|
||||||
|
isActive = json['IsActive'];
|
||||||
|
createdOn = json['CreatedOn'];
|
||||||
|
createdBy = json['CreatedBy'];
|
||||||
|
isOnline = json['IsOnline'];
|
||||||
|
endTime = json['EndTime'];
|
||||||
|
projectOutSA = json['ProjectOutSA'];
|
||||||
|
if (json['ShiftTimings'] != null) {
|
||||||
|
shiftTimings = new List<ShiftTimings>();
|
||||||
|
json['ShiftTimings'].forEach((v) {
|
||||||
|
shiftTimings.add(new ShiftTimings.fromJson(v));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
startTime = json['StartTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['ID'] = this.iD;
|
||||||
|
data['ServiceID'] = this.serviceID;
|
||||||
|
data['ServiceName'] = this.serviceName;
|
||||||
|
data['ServiceNameN'] = this.serviceNameN;
|
||||||
|
data['ClinicID'] = this.clinicID;
|
||||||
|
data['Age'] = this.age;
|
||||||
|
data['IsCheckAgeBelow'] = this.isCheckAgeBelow;
|
||||||
|
data['Gender'] = this.gender;
|
||||||
|
data['IsActive'] = this.isActive;
|
||||||
|
data['CreatedOn'] = this.createdOn;
|
||||||
|
data['CreatedBy'] = this.createdBy;
|
||||||
|
data['IsOnline'] = this.isOnline;
|
||||||
|
data['EndTime'] = this.endTime;
|
||||||
|
data['ProjectOutSA'] = this.projectOutSA;
|
||||||
|
if (this.shiftTimings != null) {
|
||||||
|
data['ShiftTimings'] = this.shiftTimings.map((v) => v.toJson()).toList();
|
||||||
|
}
|
||||||
|
data['StartTime'] = this.startTime;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ShiftTimings {
|
||||||
|
String endTime;
|
||||||
|
int shiftID;
|
||||||
|
String startTime;
|
||||||
|
|
||||||
|
ShiftTimings({this.endTime, this.shiftID, this.startTime});
|
||||||
|
|
||||||
|
ShiftTimings.fromJson(Map<String, dynamic> json) {
|
||||||
|
endTime = json['EndTime'];
|
||||||
|
shiftID = json['ShiftID'];
|
||||||
|
startTime = json['StartTime'];
|
||||||
|
}
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() {
|
||||||
|
final Map<String, dynamic> data = new Map<String, dynamic>();
|
||||||
|
data['EndTime'] = this.endTime;
|
||||||
|
data['ShiftID'] = this.shiftID;
|
||||||
|
data['StartTime'] = this.startTime;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,130 @@
|
|||||||
|
import 'package:diplomaticquarterapp/models/FamilyFiles/PatientERVirtualHistoryResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/LiveCarePendingRequest.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/clinic_list.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/livecare_logs.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:smart_progress_bar/smart_progress_bar.dart';
|
||||||
|
|
||||||
|
class LiveCareHome extends StatefulWidget {
|
||||||
|
static bool showFooterButton = true;
|
||||||
|
|
||||||
|
@override
|
||||||
|
_LiveCareHomeState createState() => _LiveCareHomeState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LiveCareHomeState extends State<LiveCareHome>
|
||||||
|
with SingleTickerProviderStateMixin {
|
||||||
|
TabController _tabController;
|
||||||
|
|
||||||
|
bool isDataLoaded = false;
|
||||||
|
bool hasLiveCareRequest = false;
|
||||||
|
|
||||||
|
List<ErRequestHistoryList> erRequestHistoryList;
|
||||||
|
|
||||||
|
ErRequestHistoryList pendingERRequestHistoryList;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
_tabController = new TabController(length: 2, vsync: this);
|
||||||
|
erRequestHistoryList = List();
|
||||||
|
|
||||||
|
pendingERRequestHistoryList = new ErRequestHistoryList();
|
||||||
|
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) => getLiveCareHistory());
|
||||||
|
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
appBarTitle: "LiveCare",
|
||||||
|
isShowAppBar: true,
|
||||||
|
body: Container(
|
||||||
|
child: Column(children: [
|
||||||
|
/// this is will not colored with theme data
|
||||||
|
TabBar(
|
||||||
|
tabs: [
|
||||||
|
Tab(text: TranslationBase.of(context).consultation),
|
||||||
|
Tab(text: TranslationBase.of(context).logs),
|
||||||
|
],
|
||||||
|
controller: _tabController,
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
color: Colors.grey[600],
|
||||||
|
thickness: 0.5,
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: TabBarView(
|
||||||
|
physics: NeverScrollableScrollPhysics(),
|
||||||
|
children: [
|
||||||
|
isDataLoaded && !hasLiveCareRequest
|
||||||
|
? ClinicList(
|
||||||
|
getLiveCareHistory: getLiveCareHistory,
|
||||||
|
)
|
||||||
|
: isDataLoaded
|
||||||
|
? LiveCarePendingRequest(
|
||||||
|
getLiveCareHistory: getLiveCareHistory,
|
||||||
|
pendingERRequestHistoryList:
|
||||||
|
pendingERRequestHistoryList)
|
||||||
|
: Container(),
|
||||||
|
isDataLoaded
|
||||||
|
? LiveCareLogs(
|
||||||
|
erRequestHistoryList: erRequestHistoryList,
|
||||||
|
)
|
||||||
|
: Container(),
|
||||||
|
],
|
||||||
|
controller: _tabController,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
]),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void getLiveCareHistory() {
|
||||||
|
setState(() {
|
||||||
|
isDataLoaded = false;
|
||||||
|
hasLiveCareRequest = false;
|
||||||
|
});
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
PatientERVirtualHistoryResponse patientERVirtualHistoryResponse =
|
||||||
|
new PatientERVirtualHistoryResponse();
|
||||||
|
service
|
||||||
|
.getLivecareHistory(context)
|
||||||
|
.then((res) {
|
||||||
|
setState(() {
|
||||||
|
print(res['ErRequestHistoryList'].length);
|
||||||
|
if (res['ErRequestHistoryList'].length != 0) {
|
||||||
|
patientERVirtualHistoryResponse =
|
||||||
|
PatientERVirtualHistoryResponse.fromJson(res);
|
||||||
|
erRequestHistoryList =
|
||||||
|
patientERVirtualHistoryResponse.erRequestHistoryList;
|
||||||
|
|
||||||
|
if (patientERVirtualHistoryResponse
|
||||||
|
.erRequestHistoryList[0].callStatus <
|
||||||
|
4) {
|
||||||
|
pendingERRequestHistoryList =
|
||||||
|
patientERVirtualHistoryResponse.erRequestHistoryList[0];
|
||||||
|
hasLiveCareRequest = true;
|
||||||
|
} else {
|
||||||
|
hasLiveCareRequest = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catchError((err) {
|
||||||
|
print(err);
|
||||||
|
})
|
||||||
|
.showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
|
||||||
|
.then((value) {
|
||||||
|
setState(() {
|
||||||
|
isDataLoaded = true;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,118 @@
|
|||||||
|
import 'package:diplomaticquarterapp/models/LiveCare/ClinicsServiceTimingsResponse.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class ClinicTimingsDialog extends StatefulWidget {
|
||||||
|
final clinicName;
|
||||||
|
final List<PatientERGetClinicsServiceTimingsList>
|
||||||
|
patientERGetClinicsServiceTimingsList;
|
||||||
|
|
||||||
|
ClinicTimingsDialog(
|
||||||
|
{@required this.clinicName,
|
||||||
|
@required this.patientERGetClinicsServiceTimingsList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_ClinicTimingsDialogState createState() => _ClinicTimingsDialogState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ClinicTimingsDialogState extends State<ClinicTimingsDialog> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
print(widget.patientERGetClinicsServiceTimingsList);
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
var size = MediaQuery.of(context).size;
|
||||||
|
final double itemHeight = ((size.height - kToolbarHeight - 24) * 0.42) / 2;
|
||||||
|
final double itemWidth = size.width / 2;
|
||||||
|
return Container(
|
||||||
|
child: Dialog(
|
||||||
|
shape:
|
||||||
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||||
|
child: Container(
|
||||||
|
height: MediaQuery.of(context).size.height * 0.68,
|
||||||
|
margin: EdgeInsets.all(20.0),
|
||||||
|
width: 450.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 10.0),
|
||||||
|
child: Text("Clinic Schedule",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 1.0,
|
||||||
|
color: Colors.grey[400],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(bottom: 20.0, top: 10.0),
|
||||||
|
child: Text(widget.clinicName,
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
CustomScrollView(
|
||||||
|
primary: false,
|
||||||
|
physics: NeverScrollableScrollPhysics(),
|
||||||
|
shrinkWrap: true,
|
||||||
|
slivers: <Widget>[
|
||||||
|
SliverPadding(
|
||||||
|
padding: const EdgeInsets.fromLTRB(15, 0, 15, 0),
|
||||||
|
sliver: SliverGrid.count(
|
||||||
|
crossAxisCount: 2,
|
||||||
|
childAspectRatio: (itemWidth / itemHeight),
|
||||||
|
children: widget.patientERGetClinicsServiceTimingsList
|
||||||
|
.map((e) => Container(
|
||||||
|
height: 10.0,
|
||||||
|
child: Column(
|
||||||
|
children: <Widget>[
|
||||||
|
Text(e.dayOfWeekStr),
|
||||||
|
Text(e.shiftTimings[0].startTime +
|
||||||
|
" - " +
|
||||||
|
e.shiftTimings[0].endTime),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
))
|
||||||
|
.toList()),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 1.0,
|
||||||
|
color: Colors.grey[400],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
height: 30.0,
|
||||||
|
child: Flex(
|
||||||
|
direction: Axis.horizontal,
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Text("OK",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,212 @@
|
|||||||
|
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/FamilyFiles/PatientERVirtualHistoryResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/feedback/feedback_home_page.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/transitions/fade_page.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:smart_progress_bar/smart_progress_bar.dart';
|
||||||
|
|
||||||
|
class LiveCareHistoryCard extends StatefulWidget {
|
||||||
|
ErRequestHistoryList erRequestHistoryList;
|
||||||
|
|
||||||
|
LiveCareHistoryCard({this.erRequestHistoryList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_LiveCareHistoryCardState createState() => _LiveCareHistoryCardState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LiveCareHistoryCardState extends State<LiveCareHistoryCard> {
|
||||||
|
AuthenticatedUser authUser = new AuthenticatedUser();
|
||||||
|
AppSharedPreferences sharedPref = AppSharedPreferences();
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
getAuthenticatedUser();
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
margin: EdgeInsets.all(10.0),
|
||||||
|
child: Card(
|
||||||
|
margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0),
|
||||||
|
color: Colors.white,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
child: Container(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
height: MediaQuery.of(context).size.height * 0.22,
|
||||||
|
padding: EdgeInsets.all(10.0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Text("Requested date:",
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(top: 10.0),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
|
children: <Widget>[
|
||||||
|
Text(widget.erRequestHistoryList.sArrivalTime,
|
||||||
|
style: TextStyle(fontSize: 14.0)),
|
||||||
|
Text(
|
||||||
|
"Call Duration\n" +
|
||||||
|
getCallTime(
|
||||||
|
widget.erRequestHistoryList.callDuration),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 14.0, color: Colors.grey[600])),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.all(7.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.rectangle,
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(5)),
|
||||||
|
color: Colors.green,
|
||||||
|
),
|
||||||
|
margin: EdgeInsets.only(top: 5.0, bottom: 5.0),
|
||||||
|
child: Text(widget.erRequestHistoryList.stringCallStatus,
|
||||||
|
style: TextStyle(fontSize: 14.0, color: Colors.white)),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
color: Colors.grey[500],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.all(5.0),
|
||||||
|
child: Flex(
|
||||||
|
direction: Axis.horizontal,
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
print("Invoice");
|
||||||
|
openInvoice();
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.content_paste, color: Colors.blue),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(left: 10.0),
|
||||||
|
child: Text("Invoice",
|
||||||
|
textAlign: TextAlign.center),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
print("Complaints");
|
||||||
|
openComplaint();
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.add, size: 24.0, color: Colors.red),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(left: 10.0),
|
||||||
|
child: Text("Complaints",
|
||||||
|
textAlign: TextAlign.center),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
print("Rate Dr & Appointment");
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.star,
|
||||||
|
size: 24.0, color: Colors.yellow[700]),
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width * 0.2,
|
||||||
|
margin: EdgeInsets.only(left: 10.0),
|
||||||
|
child: Text("Rate Dr & Appointment",
|
||||||
|
overflow: TextOverflow.clip,
|
||||||
|
textAlign: TextAlign.center),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
openInvoice() {
|
||||||
|
ConfirmDialog dialog = new ConfirmDialog(
|
||||||
|
context: context,
|
||||||
|
confirmMessage: "Send a copy of this invoice to the email: " +
|
||||||
|
authUser.emailAddress,
|
||||||
|
okText: TranslationBase.of(context).confirm,
|
||||||
|
cancelText: TranslationBase.of(context).cancel_nocaps,
|
||||||
|
okFunction: () => {sendInvoiceEmail(context)},
|
||||||
|
cancelFunction: () => {});
|
||||||
|
dialog.showAlertDialog(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
openComplaint() {
|
||||||
|
Navigator.push(context, FadePage(page: FeedbackHomePage()));
|
||||||
|
}
|
||||||
|
|
||||||
|
sendInvoiceEmail(context) {
|
||||||
|
ConfirmDialog.closeAlertDialog(context);
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
service
|
||||||
|
.sendLiveCareInvoiceEmail(
|
||||||
|
widget.erRequestHistoryList.appointmentNo.toString(),
|
||||||
|
widget.erRequestHistoryList.projectID,
|
||||||
|
authUser.emailAddress,
|
||||||
|
context)
|
||||||
|
.then((res) {
|
||||||
|
AppToast.showSuccessToast(message: "LiveCare invoice sent successfully");
|
||||||
|
}).catchError((err) {
|
||||||
|
AppToast.showErrorToast(message: err);
|
||||||
|
print(err);
|
||||||
|
}).showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
|
||||||
|
}
|
||||||
|
|
||||||
|
getAuthenticatedUser() async {
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
setState(() {
|
||||||
|
authUser = data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getCallTime(int number) {
|
||||||
|
number = number.round();
|
||||||
|
var hours = (number / 60 / 60).floor();
|
||||||
|
var minutes = (number / 60).floor() - (hours * 60).floor();
|
||||||
|
var seconds = number % 60;
|
||||||
|
return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}';
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,108 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class LiveCareInfoDialog extends StatelessWidget {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
child: Dialog(
|
||||||
|
shape:
|
||||||
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||||
|
child: Container(
|
||||||
|
height: MediaQuery.of(context).size.height * 0.61,
|
||||||
|
margin: EdgeInsets.all(20.0),
|
||||||
|
width: 450.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 10.0),
|
||||||
|
child: Icon(Icons.info_outline,
|
||||||
|
size: 80.0, color: Colors.red[900]),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Text("Important Instructions",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 24.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.red[900])),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Text(
|
||||||
|
"Please make sure that you're logged in on Al Habib Mobile Application",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.black)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Icon(Icons.not_interested,
|
||||||
|
size: 80.0, color: Colors.red[900]),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 40.0),
|
||||||
|
child: Text(
|
||||||
|
"Otherwise, you will not receive the doctor's call.",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 22.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.red[900])),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 1.0,
|
||||||
|
color: Colors.grey[400],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
height: 40.0,
|
||||||
|
child: Flex(
|
||||||
|
direction: Axis.horizontal,
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context, false);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Text("Cancel",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0, color: Colors.red[700])),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context, true);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Text("Ok",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,296 @@
|
|||||||
|
import 'package:diplomaticquarterapp/models/LiveCare/ERAppointmentFeesResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class LiveCarePaymentDialog extends StatefulWidget {
|
||||||
|
GetERAppointmentFeesList getERAppointmentFeesList;
|
||||||
|
int waitingTime;
|
||||||
|
String clinicName;
|
||||||
|
|
||||||
|
LiveCarePaymentDialog(
|
||||||
|
{@required this.getERAppointmentFeesList, @required this.waitingTime, @required this.clinicName});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_LiveCarePaymentDialogState createState() => _LiveCarePaymentDialogState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LiveCarePaymentDialogState extends State<LiveCarePaymentDialog> {
|
||||||
|
int _selected = 0;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
var size = MediaQuery.of(context).size;
|
||||||
|
final double itemHeight = ((size.height - kToolbarHeight - 24) * 0.42) / 2;
|
||||||
|
final double itemWidth = size.width / 2;
|
||||||
|
|
||||||
|
return Container(
|
||||||
|
child: Dialog(
|
||||||
|
shape:
|
||||||
|
RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)),
|
||||||
|
child: Container(
|
||||||
|
height: MediaQuery.of(context).size.height * 0.691,
|
||||||
|
margin: EdgeInsets.all(20.0),
|
||||||
|
width: 450.0,
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 10.0),
|
||||||
|
child: Text("Online Consultation",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 1.0,
|
||||||
|
color: Colors.grey[400],
|
||||||
|
),
|
||||||
|
Flex(
|
||||||
|
direction: Axis.horizontal,
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: Text("Waiting time to start LiveCare consultation",
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
style: TextStyle(fontSize: 13.0)),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Container(
|
||||||
|
child: Icon(Icons.access_time,
|
||||||
|
size: 36.0, color: Colors.red[800]),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(widget.waitingTime.toString() + " Minutes",
|
||||||
|
textAlign: TextAlign.start,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.red[900])),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(bottom: 10.0, top: 10.0),
|
||||||
|
child: Text(widget.clinicName,
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style:
|
||||||
|
TextStyle(fontSize: 22.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.black87,
|
||||||
|
borderRadius: new BorderRadius.only(
|
||||||
|
topLeft: const Radius.circular(5.0),
|
||||||
|
topRight: const Radius.circular(5.0),
|
||||||
|
),
|
||||||
|
border: Border.all(color: Colors.black87)),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(top: 5.0),
|
||||||
|
padding: EdgeInsets.all(5.0),
|
||||||
|
child: Text("Consultation fee",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.white)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: new BorderRadius.only(
|
||||||
|
bottomLeft: const Radius.circular(5.0),
|
||||||
|
bottomRight: const Radius.circular(5.0),
|
||||||
|
),
|
||||||
|
border: Border.all(color: Colors.black54)),
|
||||||
|
child: Table(
|
||||||
|
children: [
|
||||||
|
TableRow(children: [
|
||||||
|
TableCell(
|
||||||
|
child: _getNormalText(
|
||||||
|
TranslationBase.of(context).patientShareToDo)),
|
||||||
|
TableCell(
|
||||||
|
child: _getNormalText(
|
||||||
|
widget.getERAppointmentFeesList.amount +
|
||||||
|
" " +
|
||||||
|
widget.getERAppointmentFeesList.currency)),
|
||||||
|
]),
|
||||||
|
TableRow(children: [
|
||||||
|
TableCell(
|
||||||
|
child: _getNormalText(
|
||||||
|
TranslationBase.of(context).patientTaxToDo)),
|
||||||
|
TableCell(
|
||||||
|
child: _getNormalText(
|
||||||
|
widget.getERAppointmentFeesList.tax +
|
||||||
|
" " +
|
||||||
|
widget.getERAppointmentFeesList.currency)),
|
||||||
|
]),
|
||||||
|
TableRow(children: [
|
||||||
|
TableCell(
|
||||||
|
child: _getMarginText(TranslationBase.of(context)
|
||||||
|
.patientShareTotalToDo)),
|
||||||
|
TableCell(
|
||||||
|
child: _getMarginText(
|
||||||
|
widget.getERAppointmentFeesList.total +
|
||||||
|
" " +
|
||||||
|
widget.getERAppointmentFeesList.currency)),
|
||||||
|
]),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
padding: EdgeInsets.only(top: 10.0, bottom: 10.0, left: 10.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
borderRadius: new BorderRadius.all(
|
||||||
|
const Radius.circular(5.0),
|
||||||
|
),
|
||||||
|
color: Colors.green[200].withOpacity(0.5)),
|
||||||
|
margin: EdgeInsets.only(top: 20.0),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Image.asset("assets/images/new-design/alert-triangle.png"),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(left: 10.0),
|
||||||
|
width: MediaQuery.of(context).size.width * 0.55,
|
||||||
|
child: Text(
|
||||||
|
"If you're Insurance patient, you have only have to pay the co-payment",
|
||||||
|
style: TextStyle(fontSize: 13.0)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.only(top: 10.0),
|
||||||
|
child: Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
child: new Radio(
|
||||||
|
value: 1,
|
||||||
|
groupValue: _selected,
|
||||||
|
onChanged: onRadioChanged,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
child: new Text(
|
||||||
|
'I Accept the Terms And Conditions',
|
||||||
|
style: new TextStyle(fontSize: 14.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// Container(
|
||||||
|
//// alignment: Alignment.centerRight,
|
||||||
|
// child: new Text(
|
||||||
|
// 'Click Here',
|
||||||
|
// textAlign: TextAlign.end,
|
||||||
|
// style: new TextStyle(fontSize: 16.0),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 1.0,
|
||||||
|
color: Colors.grey[400],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(top: 10.0),
|
||||||
|
child: new Text(
|
||||||
|
'You can pay by the following Options:',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: new TextStyle(fontSize: 14.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0),
|
||||||
|
child: Image.asset(
|
||||||
|
"assets/images/new-design/payment_options_invoice_confirmation.png",
|
||||||
|
width: 300),
|
||||||
|
),
|
||||||
|
Divider(
|
||||||
|
thickness: 1.0,
|
||||||
|
color: Colors.grey[400],
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
height: 40.0,
|
||||||
|
child: Flex(
|
||||||
|
direction: Axis.horizontal,
|
||||||
|
children: <Widget>[
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.pop(context, false);
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Text("Cancel",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0, color: Colors.red[700])),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: InkWell(
|
||||||
|
onTap: () {
|
||||||
|
if(_selected == 0) {
|
||||||
|
AppToast.showErrorToast(message: "Please accept terms & conditions to continue");
|
||||||
|
} else {
|
||||||
|
Navigator.pop(context, true);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Container(
|
||||||
|
child: Text("Ok",
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 18.0,
|
||||||
|
)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void onRadioChanged(int value) {
|
||||||
|
setState(() {
|
||||||
|
_selected = value;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
_getNormalText(text) {
|
||||||
|
return Container(
|
||||||
|
margin: EdgeInsets.only(top: 10.0, right: 10.0),
|
||||||
|
child: Text(text,
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
fontFamily: 'Open-Sans',
|
||||||
|
letterSpacing: 0.5,
|
||||||
|
color: Colors.black)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
_getMarginText(text) {
|
||||||
|
return Container(
|
||||||
|
margin: EdgeInsets.only(top: 10.0, right: 10.0, bottom: 10.0),
|
||||||
|
child: Text(text,
|
||||||
|
textAlign: TextAlign.end,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
fontFamily: 'Open-Sans',
|
||||||
|
letterSpacing: 0.5,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
color: Colors.black)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,167 @@
|
|||||||
|
import 'package:circular_countdown_timer/circular_countdown_timer.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/FamilyFiles/PatientERVirtualHistoryResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/date_uitl.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:smart_progress_bar/smart_progress_bar.dart';
|
||||||
|
|
||||||
|
class LiveCarePendingRequest extends StatefulWidget {
|
||||||
|
ErRequestHistoryList pendingERRequestHistoryList;
|
||||||
|
final Function getLiveCareHistory;
|
||||||
|
|
||||||
|
LiveCarePendingRequest(
|
||||||
|
{@required this.getLiveCareHistory, this.pendingERRequestHistoryList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_LiveCarePendingRequestState createState() => _LiveCarePendingRequestState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LiveCarePendingRequestState extends State<LiveCarePendingRequest> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
// TODO: implement initState
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
border: Border.all(color: Colors.grey[300]),
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
color: Colors.white,
|
||||||
|
shape: BoxShape.rectangle,
|
||||||
|
),
|
||||||
|
margin: EdgeInsets.all(15.0),
|
||||||
|
padding: EdgeInsets.all(10.0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
child: Text("In Progress:",
|
||||||
|
style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
margin: EdgeInsets.only(top: 10.0),
|
||||||
|
child: Text("Estimated Waiting Time: ",
|
||||||
|
style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, -50.0, 0.0),
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: CircularCountDownTimer(
|
||||||
|
duration:
|
||||||
|
widget.pendingERRequestHistoryList.watingtimeInteger * 60,
|
||||||
|
width: MediaQuery.of(context).size.width / 3,
|
||||||
|
height: MediaQuery.of(context).size.height / 3,
|
||||||
|
color: Colors.white,
|
||||||
|
fillColor: Colors.green[700],
|
||||||
|
strokeWidth: 15.0,
|
||||||
|
textStyle: TextStyle(
|
||||||
|
fontSize: 22.0,
|
||||||
|
color: Colors.black87,
|
||||||
|
fontWeight: FontWeight.bold),
|
||||||
|
isReverse: true,
|
||||||
|
isTimerTextShown: true,
|
||||||
|
onComplete: () {
|
||||||
|
print('Countdown Ended');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, -60.0, 0.0),
|
||||||
|
child: Divider(
|
||||||
|
color: Colors.grey[500],
|
||||||
|
thickness: 0.7,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, -50.0, 0.0),
|
||||||
|
child: Text("Requested date:",
|
||||||
|
style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, -30.0, 0.0),
|
||||||
|
child: Text(
|
||||||
|
DateUtil.getDateFormatted(
|
||||||
|
widget.pendingERRequestHistoryList.arrivalTime),
|
||||||
|
style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, -20.0, 0.0),
|
||||||
|
padding: EdgeInsets.all(7.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
shape: BoxShape.rectangle,
|
||||||
|
borderRadius: BorderRadius.all(Radius.circular(5)),
|
||||||
|
color: Colors.red[800],
|
||||||
|
),
|
||||||
|
margin: EdgeInsets.only(top: 5.0, bottom: 5.0),
|
||||||
|
child: Text(widget.pendingERRequestHistoryList.stringCallStatus,
|
||||||
|
style: TextStyle(fontSize: 14.0, color: Colors.white)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, 0.0, 0.0),
|
||||||
|
child: Divider(
|
||||||
|
color: Colors.grey[500],
|
||||||
|
thickness: 0.7,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
transform: Matrix4.translationValues(0.0, 10.0, 0.0),
|
||||||
|
child: Text(
|
||||||
|
"Your turn is after " +
|
||||||
|
widget.pendingERRequestHistoryList.patCount.toString() +
|
||||||
|
" Patients",
|
||||||
|
style: TextStyle(fontSize: 20.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
transform: Matrix4.translationValues(0.0, 130.0, 0.0),
|
||||||
|
alignment: Alignment.bottomCenter,
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
child: ButtonTheme(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
minWidth: MediaQuery.of(context).size.width,
|
||||||
|
height: 45.0,
|
||||||
|
child: RaisedButton(
|
||||||
|
color: Colors.red[800],
|
||||||
|
textColor: Colors.white,
|
||||||
|
disabledTextColor: Colors.white,
|
||||||
|
disabledColor: new Color(0xFFbcc2c4),
|
||||||
|
onPressed: () {
|
||||||
|
cancelLiveCareRequest();
|
||||||
|
},
|
||||||
|
child: Text(TranslationBase.of(context).cancel,
|
||||||
|
style: TextStyle(fontSize: 18.0)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
cancelLiveCareRequest() {
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
service
|
||||||
|
.cancelLiveCareRequest(widget.pendingERRequestHistoryList.vCID, context)
|
||||||
|
.then((res) {
|
||||||
|
AppToast.showSuccessToast(
|
||||||
|
message: "LiveCare request cancelled successfully");
|
||||||
|
})
|
||||||
|
.catchError((err) {
|
||||||
|
print(err);
|
||||||
|
})
|
||||||
|
.showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
|
||||||
|
.then((value) {
|
||||||
|
widget.getLiveCareHistory();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,136 @@
|
|||||||
|
import 'package:diplomaticquarterapp/models/LiveCare/ClinicsServiceTimingsResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/LiveCare/LiveCareClinicsListResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:smart_progress_bar/smart_progress_bar.dart';
|
||||||
|
|
||||||
|
import 'ClinicTimingsDialog.dart';
|
||||||
|
|
||||||
|
// ignore: must_be_immutable
|
||||||
|
class ClinicCard extends StatefulWidget {
|
||||||
|
bool isSelected;
|
||||||
|
final PatientERGetClinicsList patientERGetClinicsList;
|
||||||
|
var languageID;
|
||||||
|
|
||||||
|
ClinicCard(
|
||||||
|
{this.isSelected,
|
||||||
|
this.languageID,
|
||||||
|
@required this.patientERGetClinicsList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_State createState() => _State();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _State extends State<ClinicCard> {
|
||||||
|
ClinicsServiceTimingsResponse clinicsServiceTimingsResponse;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
clinicsServiceTimingsResponse = new ClinicsServiceTimingsResponse();
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Row(
|
||||||
|
children: <Widget>[
|
||||||
|
Card(
|
||||||
|
margin: EdgeInsets.fromLTRB(13.0, 10.0, 8.0, 8.0),
|
||||||
|
color: widget.isSelected ? Colors.blue : Colors.white,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10),
|
||||||
|
),
|
||||||
|
child: Container(
|
||||||
|
width: MediaQuery.of(context).size.width * 0.8,
|
||||||
|
padding: EdgeInsets.all(12.0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
child: Text(
|
||||||
|
widget.languageID == 'ar'
|
||||||
|
? widget.patientERGetClinicsList.serviceNameN
|
||||||
|
: widget.patientERGetClinicsList.serviceName,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 16.0,
|
||||||
|
color:
|
||||||
|
widget.isSelected ? Colors.white : Colors.black)),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
getClinicTimings(widget.patientERGetClinicsList);
|
||||||
|
},
|
||||||
|
child: Card(
|
||||||
|
margin: EdgeInsets.fromLTRB(8.0, 10.0, 8.0, 8.0),
|
||||||
|
color: Colors.white,
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(8),
|
||||||
|
),
|
||||||
|
child: Container(
|
||||||
|
padding: EdgeInsets.all(8.0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
children: <Widget>[
|
||||||
|
Icon(Icons.access_time, size: 26.0, color: Colors.red[800]),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
getClinicTimings(PatientERGetClinicsList patientERGetClinicsList) {
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
service
|
||||||
|
.getLivecareClinicTiming(patientERGetClinicsList.serviceID, context)
|
||||||
|
.then((res) {
|
||||||
|
if (res['MessageStatus'] == 1) {
|
||||||
|
setState(() {
|
||||||
|
clinicsServiceTimingsResponse =
|
||||||
|
ClinicsServiceTimingsResponse.fromJson(res);
|
||||||
|
print(clinicsServiceTimingsResponse
|
||||||
|
.patientERGetClinicsServiceTimingsList.length);
|
||||||
|
|
||||||
|
showGeneralDialog(
|
||||||
|
barrierColor: Colors.black.withOpacity(0.5),
|
||||||
|
transitionBuilder: (context, a1, a2, widget) {
|
||||||
|
final curvedValue =
|
||||||
|
Curves.easeInOutBack.transform(a1.value) - 1.0;
|
||||||
|
return Transform(
|
||||||
|
transform:
|
||||||
|
Matrix4.translationValues(0.0, curvedValue * 200, 0.0),
|
||||||
|
child: Opacity(
|
||||||
|
opacity: a1.value,
|
||||||
|
child: ClinicTimingsDialog(
|
||||||
|
clinicName: patientERGetClinicsList.serviceName,
|
||||||
|
patientERGetClinicsServiceTimingsList:
|
||||||
|
clinicsServiceTimingsResponse
|
||||||
|
.patientERGetClinicsServiceTimingsList,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
transitionDuration: Duration(milliseconds: 500),
|
||||||
|
barrierDismissible: true,
|
||||||
|
barrierLabel: '',
|
||||||
|
context: context,
|
||||||
|
pageBuilder: (context, animation1, animation2) {});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
|
||||||
|
}
|
||||||
|
}).catchError((err) {
|
||||||
|
print(err);
|
||||||
|
}).showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,388 @@
|
|||||||
|
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/LiveCare/ERAppointmentFeesResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/LiveCare/LiveCareClinicsListResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/LiveCareInfoDialog.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/LiveCarePaymentDialog.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/clinic_card.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/livecare_services/livecare_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_toast.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/utils.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart';
|
||||||
|
import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:smart_progress_bar/smart_progress_bar.dart';
|
||||||
|
|
||||||
|
class ClinicList extends StatefulWidget {
|
||||||
|
final Function getLiveCareHistory;
|
||||||
|
|
||||||
|
ClinicList({@required this.getLiveCareHistory});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_clinic_listState createState() => _clinic_listState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _clinic_listState extends State<ClinicList> {
|
||||||
|
int currentSelectedIndex = 0;
|
||||||
|
LiveCareClinicsListResponse liveCareClinicsListResponse;
|
||||||
|
|
||||||
|
bool isDataLoaded = false;
|
||||||
|
var languageID;
|
||||||
|
|
||||||
|
int selectedClinicID = 1;
|
||||||
|
String selectedClinicName = "-";
|
||||||
|
|
||||||
|
AppSharedPreferences sharedPref = AppSharedPreferences();
|
||||||
|
|
||||||
|
AuthenticatedUser authUser;
|
||||||
|
AuthProvider authProvider = new AuthProvider();
|
||||||
|
|
||||||
|
MyInAppBrowser browser;
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
liveCareClinicsListResponse = new LiveCareClinicsListResponse();
|
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
// Future.delayed(new Duration(milliseconds: 1200), () {
|
||||||
|
getLiveCareClinicsList();
|
||||||
|
// });
|
||||||
|
});
|
||||||
|
getLanguageID();
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return AppScaffold(
|
||||||
|
isShowAppBar: false,
|
||||||
|
body: SingleChildScrollView(
|
||||||
|
child: isDataLoaded
|
||||||
|
? Container(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: <Widget>[
|
||||||
|
Container(
|
||||||
|
margin: EdgeInsets.all(15.0),
|
||||||
|
child: Text("Online Clinics: ",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 20.0, fontWeight: FontWeight.bold)),
|
||||||
|
),
|
||||||
|
ListView.builder(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: ScrollPhysics(),
|
||||||
|
padding: EdgeInsets.all(0.0),
|
||||||
|
itemCount: liveCareClinicsListResponse
|
||||||
|
.patientERGetClinicsList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return InkWell(
|
||||||
|
onTap: () {
|
||||||
|
updateSelectedIndex(liveCareClinicsListResponse
|
||||||
|
.patientERGetClinicsList[index]);
|
||||||
|
},
|
||||||
|
child: ClinicCard(
|
||||||
|
isSelected: selectedClinicID ==
|
||||||
|
liveCareClinicsListResponse
|
||||||
|
.patientERGetClinicsList[index]
|
||||||
|
.serviceID
|
||||||
|
? true
|
||||||
|
: false,
|
||||||
|
patientERGetClinicsList: liveCareClinicsListResponse
|
||||||
|
.patientERGetClinicsList[index],
|
||||||
|
languageID: languageID,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Container(
|
||||||
|
height: 80.0,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: Container(),
|
||||||
|
),
|
||||||
|
bottomSheet: Container(
|
||||||
|
width: MediaQuery.of(context).size.width,
|
||||||
|
height: 50.0,
|
||||||
|
margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0),
|
||||||
|
child: ButtonTheme(
|
||||||
|
shape: RoundedRectangleBorder(
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
minWidth: MediaQuery.of(context).size.width * 0.7,
|
||||||
|
height: 45.0,
|
||||||
|
child: RaisedButton(
|
||||||
|
color: new Color(0xFF60686b),
|
||||||
|
textColor: Colors.white,
|
||||||
|
disabledTextColor: Colors.white,
|
||||||
|
disabledColor: new Color(0xFFbcc2c4),
|
||||||
|
onPressed: startLiveCare,
|
||||||
|
child: Text("Start", style: TextStyle(fontSize: 18.0)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void startLiveCare() {
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
ERAppointmentFeesResponse erAppointmentFeesResponse =
|
||||||
|
new ERAppointmentFeesResponse();
|
||||||
|
service
|
||||||
|
.getERAppointmentFees(selectedClinicID, context)
|
||||||
|
.then((res) {
|
||||||
|
erAppointmentFeesResponse = ERAppointmentFeesResponse.fromJson(res);
|
||||||
|
})
|
||||||
|
.catchError((err) {
|
||||||
|
print(err);
|
||||||
|
})
|
||||||
|
.showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6))
|
||||||
|
.then((value) {
|
||||||
|
getERAppointmentTime(
|
||||||
|
erAppointmentFeesResponse.getERAppointmentFeesList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getERAppointmentTime(GetERAppointmentFeesList getERAppointmentFeesList) {
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
service.getERAppointmentTime(selectedClinicID, context).then((res) {
|
||||||
|
print(res['WatingtimeInteger']);
|
||||||
|
showLiveCarePaymentDialog(
|
||||||
|
getERAppointmentFeesList, res['WatingtimeInteger']);
|
||||||
|
}).catchError((err) {
|
||||||
|
print(err);
|
||||||
|
}).showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
|
||||||
|
}
|
||||||
|
|
||||||
|
showLiveCarePaymentDialog(
|
||||||
|
GetERAppointmentFeesList getERAppointmentFeesList, int waitingTime) {
|
||||||
|
showGeneralDialog(
|
||||||
|
barrierColor: Colors.black.withOpacity(0.5),
|
||||||
|
transitionBuilder: (context, a1, a2, widget) {
|
||||||
|
final curvedValue =
|
||||||
|
Curves.easeInOutBack.transform(a1.value) - 1.0;
|
||||||
|
return Transform(
|
||||||
|
transform:
|
||||||
|
Matrix4.translationValues(0.0, curvedValue * 200, 0.0),
|
||||||
|
child: Opacity(
|
||||||
|
opacity: a1.value,
|
||||||
|
child: LiveCarePaymentDialog(
|
||||||
|
getERAppointmentFeesList: getERAppointmentFeesList,
|
||||||
|
waitingTime: waitingTime,
|
||||||
|
clinicName: selectedClinicName),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
transitionDuration: Duration(milliseconds: 500),
|
||||||
|
barrierDismissible: true,
|
||||||
|
barrierLabel: '',
|
||||||
|
context: context,
|
||||||
|
pageBuilder: (context, animation1, animation2) {})
|
||||||
|
.then((value) {
|
||||||
|
if (value) {
|
||||||
|
if (getERAppointmentFeesList.total == "0" ||
|
||||||
|
getERAppointmentFeesList.total == "0.0") {
|
||||||
|
showLiveCareInfoDialog(getERAppointmentFeesList);
|
||||||
|
} else {
|
||||||
|
navigateToPaymentMethod(getERAppointmentFeesList, context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
showLiveCareInfoDialog(
|
||||||
|
GetERAppointmentFeesList getERAppointmentFeesList) async {
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
setState(() {
|
||||||
|
authUser = data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
showGeneralDialog(
|
||||||
|
barrierColor: Colors.black.withOpacity(0.5),
|
||||||
|
transitionBuilder: (context, a1, a2, widget) {
|
||||||
|
final curvedValue =
|
||||||
|
Curves.easeInOutBack.transform(a1.value) - 1.0;
|
||||||
|
return Transform(
|
||||||
|
transform:
|
||||||
|
Matrix4.translationValues(0.0, curvedValue * 200, 0.0),
|
||||||
|
child: Opacity(
|
||||||
|
opacity: a1.value,
|
||||||
|
child: LiveCareInfoDialog(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
transitionDuration: Duration(milliseconds: 500),
|
||||||
|
barrierDismissible: true,
|
||||||
|
barrierLabel: '',
|
||||||
|
context: context,
|
||||||
|
pageBuilder: (context, animation1, animation2) {})
|
||||||
|
.then((value) {
|
||||||
|
if (value) {
|
||||||
|
if (getERAppointmentFeesList.total == "0" ||
|
||||||
|
getERAppointmentFeesList.total == "0.0") {
|
||||||
|
addNewCallForPatientER(authUser.patientID.toString() +
|
||||||
|
"" +
|
||||||
|
DateTime.now().millisecondsSinceEpoch.toString());
|
||||||
|
} else {
|
||||||
|
navigateToPaymentMethod(getERAppointmentFeesList, context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future navigateToPaymentMethod(
|
||||||
|
GetERAppointmentFeesList getERAppointmentFeesList, context) async {
|
||||||
|
AppoitmentAllHistoryResultList appo = new AppoitmentAllHistoryResultList();
|
||||||
|
|
||||||
|
appo.clinicID = selectedClinicID;
|
||||||
|
appo.appointmentNo = DateTime.now().millisecondsSinceEpoch;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
setState(() {
|
||||||
|
authUser = data;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Navigator.push(
|
||||||
|
context, MaterialPageRoute(builder: (context) => PaymentMethod()))
|
||||||
|
.then((value) {
|
||||||
|
print(value);
|
||||||
|
if (value != null) {
|
||||||
|
openPayment(value, authUser,
|
||||||
|
double.parse(getERAppointmentFeesList.total), appo);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openPayment(String paymentMethod, AuthenticatedUser authenticatedUser,
|
||||||
|
double amount, AppoitmentAllHistoryResultList appo) {
|
||||||
|
browser = new MyInAppBrowser(
|
||||||
|
onExitCallback: onBrowserExit,
|
||||||
|
appo: appo,
|
||||||
|
onLoadStartCallback: onBrowserLoadStart);
|
||||||
|
|
||||||
|
browser.openPaymentBrowser(
|
||||||
|
amount,
|
||||||
|
"LiveCare Payment",
|
||||||
|
Utils.getAppointmentTransID(12, appo.clinicID, appo.appointmentNo),
|
||||||
|
"12",
|
||||||
|
authenticatedUser.emailAddress,
|
||||||
|
paymentMethod,
|
||||||
|
authenticatedUser,
|
||||||
|
browser);
|
||||||
|
}
|
||||||
|
|
||||||
|
onBrowserLoadStart(String url) {
|
||||||
|
print("onBrowserLoadStart");
|
||||||
|
print(url);
|
||||||
|
|
||||||
|
MyInAppBrowser.successURLS.forEach((element) {
|
||||||
|
if (url.contains(element)) {
|
||||||
|
if (browser.isOpened()) browser.close();
|
||||||
|
MyInAppBrowser.isPaymentDone = true;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
MyInAppBrowser.errorURLS.forEach((element) {
|
||||||
|
if (url.contains(element)) {
|
||||||
|
if (browser.isOpened()) browser.close();
|
||||||
|
MyInAppBrowser.isPaymentDone = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) {
|
||||||
|
print("onBrowserExit Called!!!!");
|
||||||
|
if (isPaymentMade) checkPaymentStatus(appo);
|
||||||
|
}
|
||||||
|
|
||||||
|
checkPaymentStatus(AppoitmentAllHistoryResultList appo) {
|
||||||
|
DoctorsListService service = new DoctorsListService();
|
||||||
|
service
|
||||||
|
.checkPaymentStatus(
|
||||||
|
Utils.getAppointmentTransID(
|
||||||
|
appo.projectID, appo.clinicID, appo.appointmentNo),
|
||||||
|
context)
|
||||||
|
.then((res) {
|
||||||
|
print("Printing Payment Status Reponse!!!!");
|
||||||
|
print(res);
|
||||||
|
String paymentInfo = res['Response_Message'];
|
||||||
|
if (paymentInfo == 'Success') {
|
||||||
|
addNewCallForPatientER(Utils.getAppointmentTransID(
|
||||||
|
appo.projectID, appo.clinicID, appo.appointmentNo));
|
||||||
|
} else {
|
||||||
|
AppToast.showErrorToast(message: res['Response_Message']);
|
||||||
|
}
|
||||||
|
}).catchError((err) {
|
||||||
|
print(err);
|
||||||
|
}).showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
|
||||||
|
}
|
||||||
|
|
||||||
|
addNewCallForPatientER(String clientRequestID) {
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
service
|
||||||
|
.addNewCallForPatientER(selectedClinicID, clientRequestID, context)
|
||||||
|
.then((res) {
|
||||||
|
AppToast.showSuccessToast(
|
||||||
|
message: "New Call has been added successfully");
|
||||||
|
}).catchError((err) {
|
||||||
|
print(err);
|
||||||
|
}).showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6)).then((value) {
|
||||||
|
widget.getLiveCareHistory();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getLanguageID() async {
|
||||||
|
languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
}
|
||||||
|
|
||||||
|
getLiveCareClinicsList() {
|
||||||
|
isDataLoaded = false;
|
||||||
|
LiveCareService service = new LiveCareService();
|
||||||
|
service.getLivecareClinics(context).then((res) {
|
||||||
|
print(res['PatientER_GetClinicsList'].length);
|
||||||
|
if (res['MessageStatus'] == 1) {
|
||||||
|
setState(() {
|
||||||
|
liveCareClinicsListResponse =
|
||||||
|
LiveCareClinicsListResponse.fromJson(res);
|
||||||
|
print(liveCareClinicsListResponse.patientERGetClinicsList.length);
|
||||||
|
selectedClinicID =
|
||||||
|
liveCareClinicsListResponse.patientERGetClinicsList[0].serviceID;
|
||||||
|
selectedClinicName = liveCareClinicsListResponse
|
||||||
|
.patientERGetClinicsList[0].serviceName;
|
||||||
|
isDataLoaded = true;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
isDataLoaded = true;
|
||||||
|
AppToast.showErrorToast(message: res['ErrorEndUserMessage']);
|
||||||
|
}
|
||||||
|
}).catchError((err) {
|
||||||
|
print(err);
|
||||||
|
}).showProgressBar(
|
||||||
|
text: "Loading", backgroundColor: Colors.blue.withOpacity(0.6));
|
||||||
|
}
|
||||||
|
|
||||||
|
updateSelectedIndex(PatientERGetClinicsList patientERGetClinicsList) {
|
||||||
|
setState(() {
|
||||||
|
selectedClinicID = patientERGetClinicsList.serviceID;
|
||||||
|
selectedClinicName = patientERGetClinicsList.serviceName;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
import 'package:diplomaticquarterapp/models/FamilyFiles/PatientERVirtualHistoryResponse.dart';
|
||||||
|
import 'package:diplomaticquarterapp/pages/livecare/widgets/LiveCareHistoryCard.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class LiveCareLogs extends StatefulWidget {
|
||||||
|
List<ErRequestHistoryList> erRequestHistoryList;
|
||||||
|
|
||||||
|
LiveCareLogs({@required this.erRequestHistoryList});
|
||||||
|
|
||||||
|
@override
|
||||||
|
_LiveCareLogsState createState() => _LiveCareLogsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _LiveCareLogsState extends State<LiveCareLogs> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return SingleChildScrollView(
|
||||||
|
child: Container(
|
||||||
|
child: ListView.builder(
|
||||||
|
scrollDirection: Axis.vertical,
|
||||||
|
shrinkWrap: true,
|
||||||
|
physics: ScrollPhysics(),
|
||||||
|
padding: EdgeInsets.all(0.0),
|
||||||
|
itemCount: widget.erRequestHistoryList.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
return widget.erRequestHistoryList[index].callStatus < 4
|
||||||
|
? Container()
|
||||||
|
: LiveCareHistoryCard(
|
||||||
|
erRequestHistoryList: widget.erRequestHistoryList[index]);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,304 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:diplomaticquarterapp/config/config.dart';
|
||||||
|
import 'package:diplomaticquarterapp/config/shared_pref_kay.dart';
|
||||||
|
import 'package:diplomaticquarterapp/core/service/base_service.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart';
|
||||||
|
import 'package:diplomaticquarterapp/models/Request.dart';
|
||||||
|
import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart';
|
||||||
|
import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class LiveCareService extends BaseService {
|
||||||
|
AppSharedPreferences sharedPref = AppSharedPreferences();
|
||||||
|
AppGlobal appGlobal = new AppGlobal();
|
||||||
|
|
||||||
|
AuthenticatedUser authUser = new AuthenticatedUser();
|
||||||
|
AuthProvider authProvider = new AuthProvider();
|
||||||
|
|
||||||
|
Future<Map> getLivecareClinics(BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
Request req = appGlobal.getPublicRequest();
|
||||||
|
request = {
|
||||||
|
"LanguageID": languageID == 'ar' ? 1 : 2,
|
||||||
|
"IPAdress": "10.20.10.20",
|
||||||
|
"VersionID": req.VersionID,
|
||||||
|
"Channel": req.Channel,
|
||||||
|
"generalid": 'Cs2020@2016\$2958',
|
||||||
|
"PatientOutSA": 0,
|
||||||
|
"TokenID": "",
|
||||||
|
"DeviceTypeID": req.DeviceTypeID,
|
||||||
|
"SessionID": "YckwoXhUmWBsnHKEKig",
|
||||||
|
"Age": authUser.age != null ? authUser.age : 0,
|
||||||
|
"PatientID": authUser.patientID != null ? authUser.patientID : 0,
|
||||||
|
"Gender": authUser.gender != null ? authUser.gender : 0
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(GET_LIVECARE_CLINICS,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> getLivecareHistory(BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
// Request req = appGlobal.getPublicRequest();
|
||||||
|
request = {
|
||||||
|
"LanguageID": languageID == 'ar' ? 1 : 2,
|
||||||
|
"TokenID": "",
|
||||||
|
"SessionID": "YckwoXhUmWBsnHKEKig"
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(GET_LIVECARE_HISTORY,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> getLivecareClinicTiming(
|
||||||
|
int serviceID, BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
Request req = appGlobal.getPublicRequest();
|
||||||
|
request = {
|
||||||
|
"LanguageID": languageID == 'ar' ? 1 : 2,
|
||||||
|
"IPAdress": "10.20.10.20",
|
||||||
|
"VersionID": req.VersionID,
|
||||||
|
"Channel": req.Channel,
|
||||||
|
"generalid": 'Cs2020@2016\$2958',
|
||||||
|
"PatientOutSA": 0,
|
||||||
|
"ServiceID": serviceID,
|
||||||
|
"DeviceTypeID": req.DeviceTypeID,
|
||||||
|
"SessionID": "YckwoXhUmWBsnHKEKig",
|
||||||
|
"Age": authUser.age != null ? authUser.age : 0,
|
||||||
|
"PatientID": authUser.patientID != null ? authUser.patientID : 0,
|
||||||
|
"Gender": authUser.gender != null ? authUser.gender : 0
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(GET_LIVECARE_CLINIC_TIMING,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> getERAppointmentFees(int serviceID, BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
Request req = appGlobal.getPublicRequest();
|
||||||
|
request = {
|
||||||
|
"LanguageID": languageID == 'ar' ? 1 : 2,
|
||||||
|
"IPAdress": "10.20.10.20",
|
||||||
|
"VersionID": req.VersionID,
|
||||||
|
"Channel": req.Channel,
|
||||||
|
"generalid": 'Cs2020@2016\$2958',
|
||||||
|
"PatientOutSA": 0,
|
||||||
|
"ServiceID": serviceID,
|
||||||
|
"ProjectID": 15,
|
||||||
|
"DeviceTypeID": req.DeviceTypeID,
|
||||||
|
"PatientType": authUser.patientType != null ? authUser.patientType : 0,
|
||||||
|
"PatientTypeID": authUser.patientType != null ? authUser.patientType : 0,
|
||||||
|
"SessionID": "YckwoXhUmWBsnHKEKig",
|
||||||
|
"Age": authUser.age != null ? authUser.age : 0,
|
||||||
|
"PatientID": authUser.patientID != null ? authUser.patientID : 0,
|
||||||
|
"Gender": authUser.gender != null ? authUser.gender : 0
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(GET_ER_APPOINTMENT_FEES,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> getERAppointmentTime(int serviceID, BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
Request req = appGlobal.getPublicRequest();
|
||||||
|
request = {
|
||||||
|
"LanguageID": languageID == 'ar' ? 1 : 2,
|
||||||
|
"IPAdress": "10.20.10.20",
|
||||||
|
"VersionID": req.VersionID,
|
||||||
|
"Channel": req.Channel,
|
||||||
|
"generalid": 'Cs2020@2016\$2958',
|
||||||
|
"PatientOutSA": 0,
|
||||||
|
"ServiceID": serviceID,
|
||||||
|
"ProjectID": 15,
|
||||||
|
"DeviceTypeID": req.DeviceTypeID,
|
||||||
|
"PatientType": authUser.patientType != null ? authUser.patientType : 0,
|
||||||
|
"PatientTypeID": authUser.patientType != null ? authUser.patientType : 0,
|
||||||
|
"SessionID": "YckwoXhUmWBsnHKEKig",
|
||||||
|
"Age": authUser.age != null ? authUser.age : 0,
|
||||||
|
"PatientID": authUser.patientID != null ? authUser.patientID : 0,
|
||||||
|
"Gender": authUser.gender != null ? authUser.gender : 0
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(GET_ER_APPOINTMENT_TIME,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> addNewCallForPatientER(
|
||||||
|
int serviceID, String clientRequestID, BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
String deviceToken;
|
||||||
|
getDeviceToken().then((value) {
|
||||||
|
print(value);
|
||||||
|
deviceToken = value;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
|
||||||
|
var languageID = await sharedPref.getString(APP_LANGUAGE);
|
||||||
|
Request req = appGlobal.getPublicRequest();
|
||||||
|
request = {
|
||||||
|
"LanguageID": languageID == 'ar' ? 1 : 2,
|
||||||
|
"IPAdress": "10.20.10.20",
|
||||||
|
"VersionID": req.VersionID,
|
||||||
|
"Channel": req.Channel,
|
||||||
|
"generalid": 'Cs2020@2016\$2958',
|
||||||
|
"PatientOutSA": 0,
|
||||||
|
"ErServiceID": serviceID,
|
||||||
|
"ClientRequestID": clientRequestID,
|
||||||
|
"DeviceToken": deviceToken,
|
||||||
|
"VoipToken": "",
|
||||||
|
"Latitude": "24.708488",
|
||||||
|
"Longitude": "46.665925",
|
||||||
|
"DeviceType": Platform.isIOS ? 'iOS' : 'Android',
|
||||||
|
"PatientType": authUser.patientType != null ? authUser.patientType : 0,
|
||||||
|
"PatientTypeID": authUser.patientType != null ? authUser.patientType : 0,
|
||||||
|
"SessionID": "YckwoXhUmWBsnHKEKig",
|
||||||
|
"Age": authUser.age != null ? authUser.age : 0,
|
||||||
|
"PatientID": authUser.patientID != null ? authUser.patientID : 0,
|
||||||
|
"Gender": authUser.gender != null ? authUser.gender : 0
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(ADD_NEW_CALL_FOR_PATIENT_ER,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> getDeviceToken() async {
|
||||||
|
String deviceToken = await sharedPref.getString(PUSH_TOKEN);
|
||||||
|
return deviceToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> cancelLiveCareRequest(int vc_id, BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
request = {"VCID": vc_id};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(CANCEL_LIVECARE_REQUEST,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<Map> sendLiveCareInvoiceEmail(String appoNo, int projectID,
|
||||||
|
String emailAddress, BuildContext context) async {
|
||||||
|
Map<String, dynamic> request;
|
||||||
|
|
||||||
|
if (await this.sharedPref.getObject(USER_PROFILE) != null) {
|
||||||
|
var data = AuthenticatedUser.fromJson(
|
||||||
|
await this.sharedPref.getObject(USER_PROFILE));
|
||||||
|
authUser = data;
|
||||||
|
}
|
||||||
|
request = {
|
||||||
|
"To": emailAddress,
|
||||||
|
"ProjectID": projectID,
|
||||||
|
"AppointmentNo": appoNo
|
||||||
|
};
|
||||||
|
|
||||||
|
dynamic localRes;
|
||||||
|
|
||||||
|
await baseAppClient.post(SEND_LIVECARE_INVOICE_EMAIL,
|
||||||
|
onSuccess: (response, statusCode) async {
|
||||||
|
localRes = response;
|
||||||
|
}, onFailure: (String error, int statusCode) {
|
||||||
|
throw error;
|
||||||
|
}, body: request);
|
||||||
|
return Future.value(localRes);
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue