You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
402 lines
17 KiB
Dart
402 lines
17 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io' show Platform;
|
|
|
|
import 'package:doctor_app_flutter/config/config.dart';
|
|
import 'package:doctor_app_flutter/config/shared_pref_kay.dart';
|
|
import 'package:doctor_app_flutter/core/model/doctor/doctor_profile_model.dart';
|
|
import 'package:doctor_app_flutter/core/model/patient/patiant_info_model.dart';
|
|
import 'package:doctor_app_flutter/core/service/NavigationService.dart';
|
|
import 'package:doctor_app_flutter/core/viewModel/authentication_view_model.dart';
|
|
import 'package:doctor_app_flutter/utils/dr_app_shared_pref.dart';
|
|
import 'package:doctor_app_flutter/utils/dr_app_toast_msg.dart';
|
|
import 'package:doctor_app_flutter/utils/exception_report.dart';
|
|
import 'package:doctor_app_flutter/utils/utils.dart';
|
|
import 'package:flutter/cupertino.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:provider/provider.dart';
|
|
|
|
import '../locator.dart';
|
|
import '../routes.dart';
|
|
|
|
DrAppSharedPreferances sharedPref = new DrAppSharedPreferances();
|
|
Utils helpers = new Utils();
|
|
|
|
class BaseAppClient {
|
|
//TODO change the post fun to nun static when you change all service
|
|
post(String endPoint,
|
|
{Map<String, dynamic>? body,
|
|
required Function(dynamic response, int statusCode) onSuccess,
|
|
required Function(String error, int statusCode) onFailure,
|
|
bool isAllowAny = false,
|
|
bool isLiveCare = false,
|
|
bool isFallLanguage = false}) async {
|
|
String url;
|
|
if (isLiveCare)
|
|
url = BASE_URL_LIVE_CARE + endPoint;
|
|
else
|
|
url = BASE_URL + endPoint;
|
|
|
|
bool callLog = true;
|
|
try {
|
|
Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE);
|
|
String? token = await sharedPref.getString(TOKEN);
|
|
|
|
if (profile != null) {
|
|
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
|
|
if (body == null || body['DoctorID'] == null) {
|
|
body!['DoctorID'] = doctorProfile.doctorID.toString();
|
|
}
|
|
if (body['DoctorID'] == "") body['DoctorID'] = doctorProfile.doctorID; // changed from null; because create update episode not working
|
|
if (body['EditedBy'] == null) body['EditedBy'] = doctorProfile.doctorID.toString();
|
|
if (body['ProjectID'] == null) {
|
|
body['ProjectID'] = doctorProfile.projectID.toString();
|
|
}
|
|
|
|
if (body['ClinicID'] == null) body['ClinicID'] = doctorProfile.clinicID.toString();
|
|
} else {
|
|
String? doctorID = await sharedPref.getString(DOCTOR_ID);
|
|
if (body!['DoctorID'] == '') {
|
|
body['DoctorID'] = null;
|
|
} else if (doctorID != null) body['DoctorID'] = int.parse(doctorID);
|
|
}
|
|
|
|
body['SetupID'] = body.containsKey('SetupID')
|
|
? body['SetupID'] != null
|
|
? body['SetupID']
|
|
: await sharedPref.getString(DOCTOR_SETUP_ID)
|
|
: await sharedPref.getString(DOCTOR_SETUP_ID);
|
|
|
|
if (body['EditedBy'] == '') {
|
|
body.remove("EditedBy");
|
|
}
|
|
if (body['TokenID'] == null) {
|
|
body['TokenID'] = token ?? '';
|
|
}
|
|
|
|
if (!isFallLanguage) {
|
|
String? lang = await sharedPref.getString(APP_Language);
|
|
if (lang != null && lang == 'ar')
|
|
body['LanguageID'] = '1';
|
|
else
|
|
body['LanguageID'] = '2';
|
|
}
|
|
body['stamp'] = DateTime.now().toIso8601String();
|
|
body['IPAdress'] = IP_ADDRESS.toString();
|
|
if (body['VersionID'] == null) {
|
|
body['VersionID'] = VERSION_ID.toString();
|
|
}
|
|
if (body['Channel'] == null) {
|
|
body['Channel'] = CHANNEL.toString();
|
|
}
|
|
body['SessionID'] = SESSION_ID.toString();
|
|
body['IsLoginForDoctorApp'] = IS_LOGIN_FOR_DOCTOR_APP.toString();
|
|
body['PatientOutSA'] = body['PatientOutSA'] ?? '0'; // PATIENT_OUT_SA;
|
|
if (body['VidaAuthTokenID'] == null) {
|
|
body['VidaAuthTokenID'] = await sharedPref.getString(VIDA_AUTH_TOKEN_ID);
|
|
}
|
|
if (body['VidaRefreshTokenID'] == null) {
|
|
body['VidaRefreshTokenID'] = await sharedPref.getString(VIDA_REFRESH_TOKEN_ID);
|
|
}
|
|
|
|
int? projectID = await sharedPref.getInt(PROJECT_ID);
|
|
if (projectID == 2 || projectID == 3)
|
|
body['PatientOutSA'] = true;
|
|
else if ((body.containsKey('facilityId') && body['facilityId'] == 2 || body['facilityId'] == 3) || body['ProjectID'] == 2 || body['ProjectID'] == 3)
|
|
body['PatientOutSA'] = 'true';
|
|
else
|
|
body['PatientOutSA'] = 'false';
|
|
|
|
// if (!body.containsKey('ProjectID')) {
|
|
// if (projectID != null) {
|
|
// body['ProjectID'] = projectID;
|
|
// } else {
|
|
// body['ProjectID'] = 0;
|
|
// }
|
|
// }
|
|
|
|
body['DeviceTypeID'] = Platform.isAndroid ? '1' : '2';
|
|
// body['ClinicID'] = 501;
|
|
// body['ProjectID'] = 12;
|
|
|
|
// body['DoctorID'] = 1002; //3844083
|
|
// body['TokenID'] = "@dm!n";
|
|
|
|
// print("ProjectID :");
|
|
// print(body['ProjectID']);
|
|
debugPrint("URL : $url");
|
|
debugPrint("Body : ${json.encode(body)}");
|
|
var asd = json.encode(body);
|
|
var asd2;
|
|
if (await Utils.checkConnection()) {
|
|
final response = await http.post(Uri.parse(url), body: json.encode(body), headers: {'Content-Type': 'application/json', 'Accept': 'application/json'});
|
|
final int statusCode = response.statusCode;
|
|
if (statusCode < 200 || statusCode >= 400) {
|
|
onFailure(Utils.generateContactAdminMsg(), statusCode);
|
|
if (body['DoctorID'] != null) postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: "$statusCode");
|
|
} else {
|
|
var parsed = json.decode(response.body.toString());
|
|
if (parsed['ErrorType'] == 4) {
|
|
helpers.navigateToUpdatePage(parsed['ErrorEndUserMessage'], parsed['AndroidLink'], parsed['IOSLink']);
|
|
}
|
|
|
|
if (parsed['IsAuthenticated'] != null && !parsed['IsAuthenticated']) {
|
|
if (body['OTP_SendType'] != null) {
|
|
if (parsed['ErrorCode'] == '699') {
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
if (body['DoctorID'] != null) postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: getError(parsed));
|
|
onFailure(getError(parsed), statusCode);
|
|
}
|
|
} else if (!isAllowAny) {
|
|
await Provider.of<AuthenticationViewModel>(AppGlobal.CONTEX, listen: false).logout();
|
|
//todo nofailure is placed here and but have to handle the response here as well
|
|
Utils.showErrorToast('Your session expired Please login again');
|
|
locator<NavigationService>().pushNamedAndRemoveUntil(ROOT);
|
|
}
|
|
if (isAllowAny) {
|
|
onFailure(getError(parsed), statusCode);
|
|
}
|
|
} else if (parsed['MessageStatus'] == 1) {
|
|
if (!parsed['IsAuthenticated']) {
|
|
if (body['DoctorID'] != null) postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: getError(parsed));
|
|
onFailure(getError(parsed), statusCode);
|
|
} else
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
final validations = parsed['ValidationErrorsCSI']?['errors']?['Validations'];
|
|
|
|
if (validations is List && validations.isNotEmpty) {
|
|
final error = validations.first['Error'];
|
|
if (error != null) {
|
|
onFailure(error, statusCode);
|
|
return;
|
|
}
|
|
}
|
|
if (body['DoctorID'] != null) {
|
|
postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: getError(parsed));
|
|
}
|
|
onFailure(getError(parsed), statusCode);
|
|
}
|
|
}
|
|
} else {
|
|
onFailure('Please Check The Internet Connection', -1);
|
|
}
|
|
} catch (e) {
|
|
print(e);
|
|
onFailure(e.toString(), -1);
|
|
}
|
|
}
|
|
|
|
postPatient(String endPoint,
|
|
{Map<String, dynamic>? body,
|
|
required Function(dynamic response, int statusCode) onSuccess,
|
|
required Function(String error, int statusCode) onFailure,
|
|
PatiantInformtion? patient,
|
|
bool isExternal = false}) async {
|
|
String url = BASE_URL + endPoint;
|
|
|
|
try {
|
|
Map<String, String> headers = {'Content-Type': 'application/json', 'Accept': 'application/json'};
|
|
|
|
String? token = await sharedPref.getString(TOKEN);
|
|
Map<String, dynamic>? profile = await sharedPref.getObj(DOCTOR_PROFILE);
|
|
|
|
if (profile != null) {
|
|
DoctorProfileModel doctorProfile = DoctorProfileModel.fromJson(profile);
|
|
if (body!['DoctorID'] == null) {
|
|
body['DoctorID'] = doctorProfile.doctorID;
|
|
}
|
|
}
|
|
if (body!['DoctorID'] == 0) {
|
|
body['DoctorID'] = null;
|
|
}
|
|
var languageID = await sharedPref.getStringWithDefaultValue(APP_Language, 'en');
|
|
body['SetupID'] = body!.containsKey('SetupID')
|
|
? body['SetupID'] != null
|
|
? body['SetupID']
|
|
: await sharedPref.getString(DOCTOR_SETUP_ID)
|
|
: await sharedPref.getString(DOCTOR_SETUP_ID);
|
|
|
|
body['VersionID'] = VERSION_ID;
|
|
body['Channel'] = CHANNEL;
|
|
body['LanguageID'] = languageID == 'ar' ? 1 : 2;
|
|
|
|
body['IPAdress'] = "10.20.10.20";
|
|
body['generalid'] = GENERAL_ID;
|
|
body['PatientOutSA'] = body.containsKey('PatientOutSA')
|
|
? body['PatientOutSA'] != null
|
|
? body['PatientOutSA']
|
|
: PATIENT_OUT_SA_PATIENT_REQ
|
|
: PATIENT_OUT_SA_PATIENT_REQ;
|
|
|
|
if (body.containsKey('isDentalAllowedBackend')) {
|
|
body['isDentalAllowedBackend'] = body.containsKey('isDentalAllowedBackend')
|
|
? body['isDentalAllowedBackend'] != null
|
|
? body['isDentalAllowedBackend']
|
|
: IS_DENTAL_ALLOWED_BACKEND
|
|
: IS_DENTAL_ALLOWED_BACKEND;
|
|
}
|
|
|
|
body['DeviceTypeID'] = Platform.isAndroid ? 1 : 2;
|
|
|
|
body['PatientType'] = body.containsKey('PatientType')
|
|
? body['PatientType'] != null
|
|
? body['PatientType']
|
|
: patient!.patientType != null
|
|
? patient.patientType
|
|
: PATIENT_TYPE
|
|
: PATIENT_TYPE;
|
|
|
|
body['PatientTypeID'] = body.containsKey('PatientTypeID')
|
|
? body['PatientTypeID'] != null
|
|
? body['PatientTypeID']
|
|
: patient!.patientType != null
|
|
? patient.patientType
|
|
: PATIENT_TYPE_ID
|
|
: PATIENT_TYPE_ID;
|
|
|
|
body['TokenID'] = body.containsKey('TokenID') ? body['TokenID'] ?? token : token;
|
|
body['PatientID'] = body['PatientID'] != null ? body['PatientID'] : patient!.patientId ?? patient.patientMRN;
|
|
|
|
body['PatientOutSA'] = 0; //user['OutSA']; //TODO change it
|
|
body['SessionID'] = SESSION_ID; //getSe
|
|
|
|
int? projectID = await sharedPref.getInt(PROJECT_ID);
|
|
if (projectID == 2 || projectID == 3)
|
|
body['PatientOutSA'] = true;
|
|
else
|
|
body['PatientOutSA'] = false;
|
|
|
|
// if(!body.containsKey('ProjectID')) {
|
|
// if (projectID != null) {
|
|
// body['ProjectID'] = 313;
|
|
// } else {
|
|
// body['ProjectID'] = 0;
|
|
// }
|
|
// }
|
|
|
|
// body['DoctorID'] = 24; //3844083
|
|
// body['TokenID'] = "@dm!n";
|
|
|
|
print("URL : $url");
|
|
print("Body : ${json.encode(body)}");
|
|
var asd = json.encode(body);
|
|
var asd2;
|
|
if (await Utils.checkConnection()) {
|
|
final response = await http.post(Uri.parse(url.trim()), body: json.encode(body), headers: headers);
|
|
final int statusCode = response.statusCode;
|
|
print("statusCode :$statusCode");
|
|
if (statusCode < 200 || statusCode >= 400 || json == null) {
|
|
onFailure('Error While Fetching data', statusCode);
|
|
} else {
|
|
// var parsed = json.decode(response.body.toString());
|
|
var parsed = json.decode(utf8.decode(response.bodyBytes));
|
|
if (parsed['Response_Message'] != null) {
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
if (parsed['ErrorType'] == 4) {
|
|
helpers.navigateToUpdatePage(parsed['ErrorEndUserMessage'], parsed['AndroidLink'], parsed['IOSLink']);
|
|
}
|
|
if (parsed['IsAuthenticated'] == null) {
|
|
if (parsed['isSMSSent'] == true) {
|
|
onSuccess(parsed, statusCode);
|
|
} else if (parsed['MessageStatus'] == 1) {
|
|
onSuccess(parsed, statusCode);
|
|
} else if (parsed['Result'] == 'OK') {
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
if (parsed != null) {
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
if (body['DoctorID'] != null) postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: getError(parsed));
|
|
onFailure(getError(parsed), statusCode);
|
|
}
|
|
}
|
|
} else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) {
|
|
onSuccess(parsed, statusCode);
|
|
} else if (parsed['MessageStatus'] == 2 && parsed['IsAuthenticated']) {
|
|
if (parsed['SameClinicApptList'] != null) {
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
if (parsed['message'] == null && parsed['ErrorEndUserMessage'] == null) {
|
|
if (parsed['ErrorSearchMsg'] == null) {
|
|
if (body['DoctorID'] != null)
|
|
postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: "Server Error found with no available message");
|
|
|
|
onFailure("Server Error found with no available message", statusCode);
|
|
} else {
|
|
if (body['DoctorID'] != null) postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: parsed['ErrorSearchMsg']);
|
|
onFailure(parsed['ErrorSearchMsg'], statusCode);
|
|
}
|
|
} else {
|
|
if (body['DoctorID'] != null)
|
|
postFailureResponse(
|
|
doctorId: body['DoctorID'],
|
|
url: url,
|
|
request: json.encode(body),
|
|
response: response.body,
|
|
exception: parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']);
|
|
onFailure(parsed['message'] ?? parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode);
|
|
}
|
|
}
|
|
} else {
|
|
if (parsed['SameClinicApptList'] != null) {
|
|
onSuccess(parsed, statusCode);
|
|
} else {
|
|
if (parsed['message'] != null) {
|
|
if (body['DoctorID'] != null) postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: parsed['message']);
|
|
|
|
onFailure(parsed['message'] ?? parsed['message'], statusCode);
|
|
} else {
|
|
if (body['DoctorID'] != null)
|
|
postFailureResponse(doctorId: body['DoctorID'], url: url, request: json.encode(body), response: response.body, exception: parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage']);
|
|
|
|
onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], statusCode);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
onFailure('Please Check The Internet Connection', -1);
|
|
}
|
|
} catch (e) {
|
|
print(e);
|
|
onFailure(e.toString(), -1);
|
|
}
|
|
}
|
|
|
|
String getError(parsed) {
|
|
//TODO change this fun
|
|
String? error = parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'];
|
|
if (parsed["ValidationErrors"] != null) {
|
|
error = parsed["ValidationErrors"]["StatusMessage"].toString() + "\n";
|
|
|
|
if (parsed["ValidationErrors"]["ValidationErrors"] != null && parsed["ValidationErrors"]["ValidationErrors"].length != 0) {
|
|
for (var i = 0; i < parsed["ValidationErrors"]["ValidationErrors"].length; i++) {
|
|
error = error! + parsed["ValidationErrors"]["ValidationErrors"][i]["Messages"][0] + "\n";
|
|
}
|
|
}
|
|
}
|
|
if (error == null || error == "null" || error == "null\n") {
|
|
return Utils.generateContactAdminMsg();
|
|
}
|
|
return error;
|
|
}
|
|
|
|
get({required String endPoint, required Function(dynamic response, int statusCode) onSuccess, required Function(String error, int statusCode) onFailure}) async {
|
|
String token = await sharedPref.getString(TOKEN);
|
|
String url = DOCTOR_ROTATION + endPoint + '&token=' + token;
|
|
print(url);
|
|
final response = await http.get(Uri.parse(url));
|
|
|
|
final int statusCode = response.statusCode;
|
|
if (statusCode < 200 || statusCode >= 400) {
|
|
onFailure(Utils.generateContactAdminMsg(), statusCode);
|
|
} else {
|
|
var parsed = json.decode(response.body.toString());
|
|
onSuccess(parsed, statusCode);
|
|
}
|
|
}
|
|
}
|