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