family screen & widgets

pull/76/head
aamir-csol 1 month ago
parent 45a1ce9254
commit 02433e1bef

@ -810,6 +810,7 @@ class ApiConsts {
static final String addFamilyFile = 'Services/Patients.svc/REST/ShareFamilyFileService';
static final String sendFamilyFileActivation = 'Services/Authentication.svc/REST/SendActivationCodeForFamilyFile';
static final String checkActivationCodeForFamily = 'Services/Authentication.svc/REST/CheckActivationCodeForFamilyFile';
static final String getAllPendingRecordsByResponseId = 'Services/Authentication.svc/REST/GetAllPendingRecordsByResponseId';
// static values for Api

@ -97,6 +97,16 @@ class AppState {
set setDeviceTypeID(v) => deviceTypeID = v;
String _familyFileTokenID = "";
String get getFamilyFileTokenID => _familyFileTokenID;
set setFamilyFileTokenID(String value) {
_familyFileTokenID = value;
}
List<VidaPlusProjectListModel> vidaPlusProjectList = [];
List<ListPrivilege> privilegeModelList = [];
List<HMCProjectListModel> hMCProjectListModel = [];

@ -22,7 +22,7 @@ abstract class AuthenticationRepo {
Future<Either<Failure, GenericApiModel<dynamic>>> sendActivationCodeRepo({required dynamic sendActivationCodeReq, String? languageID, bool isRegister = false, bool isFormFamilyFile = false});
Future<Either<Failure, GenericApiModel<dynamic>>> checkActivationCodeRepo(
{required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID, String? familyFileTokenID});
{required dynamic newRequest, required String? activationCode, required bool isRegister, bool isFormFamilyFile = false, int? patientShareRequestID, int? responseID});
Future<Either<Failure, GenericApiModel<dynamic>>> checkIfUserAgreed({required dynamic commonAuthanticatedRequest});
@ -139,6 +139,16 @@ class AuthenticationRepoImp implements AuthenticationRepo {
int isOutKsa = (sendActivationCodeReq.zipCode == '966' || sendActivationCodeReq.zipCode == '+966') ? 0 : 1;
sendActivationCodeReq.patientOutSA = isOutKsa;
sendActivationCodeReq.isDentalAllowedBackend = false;
final payload = sendActivationCodeReq.toJson();
if (isFormFamilyFile) {
payload.remove("MobileNo");
payload.remove("NationalID");
payload.remove("SMSSignature");
payload.remove("ResponseID");
print("=================== Final Payload ===================");
print(payload);
print("=====================================================");
}
try {
GenericApiModel<dynamic>? apiResponse;
@ -150,7 +160,7 @@ class AuthenticationRepoImp implements AuthenticationRepo {
: isRegister
? ApiConsts.sendActivationCodeRegister
: ApiConsts.sendActivationCode,
body: sendActivationCodeReq.toJson(),
body: isFormFamilyFile ? payload : sendActivationCodeReq.toJson(),
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
},
@ -183,8 +193,7 @@ class AuthenticationRepoImp implements AuthenticationRepo {
required bool isRegister,
bool isFormFamilyFile = false,
int? patientShareRequestID,
int? responseID,
String? familyFileTokenID}) async {
int? responseID}) async {
if (isRegister) {
newRequest["activationCode"] = activationCode ?? "0000";
newRequest["isSilentLogin"] = activationCode != null ? false : true;
@ -199,12 +208,27 @@ class AuthenticationRepoImp implements AuthenticationRepo {
Map<String, dynamic> familyRequest = {};
if (isFormFamilyFile) {
AppState appState = getIt.get<AppState>();
familyRequest = newRequest.toJson();
familyRequest = {};
familyRequest['PatientShareRequestID'] = patientShareRequestID;
familyRequest['ResponseID'] = responseID;
familyRequest['Status'] = 3;
familyRequest["PatientID"] = appState.getAuthenticatedUser()!.patientId ?? 0;
familyRequest["LogInTokenID"] = familyFileTokenID;
familyRequest["LogInTokenID"] = appState.getFamilyFileTokenID;
// // Remove unnecessary keys from familyRequest
// familyRequest.remove("MobileNo");
// familyRequest.remove("DeviceToken");
// familyRequest.remove("ProjectOutSA");
// familyRequest.remove("LoginType");
// familyRequest.remove("ZipCode");
// familyRequest.remove("isRegister");
// familyRequest.remove("SearchType");
// familyRequest.remove("NationalID");
// familyRequest.remove("IsSilentLogin");
// familyRequest.remove("isDentalAllowedBackend");
// familyRequest.remove("ForRegisteration");
}
final endpoint = isFormFamilyFile

@ -376,6 +376,9 @@ class AuthenticationViewModel extends ChangeNotifier {
isFormFamilyFile: isFormFamilyFile,
responseID: responseID);
// TODO: GET APP SMS SIGNATURE HERE
request.sMSSignature = await getSignature();
@ -390,10 +393,9 @@ class AuthenticationViewModel extends ChangeNotifier {
(failure) async => await _errorHandlerService.handleError(failure: failure),
(apiResponse) async {
int? patientShareRequestID = 0;
String? familyFileTokenID;
if (isFormFamilyFile) {
patientShareRequestID = apiResponse.data['PatientShareRequestID'];
familyFileTokenID = apiResponse.data['LogInTokenID'];
_appState.setFamilyFileTokenID = apiResponse.data['LogInTokenID'];
}
if (apiResponse.messageStatus == 2) {
LoaderBottomSheet.hideLoader();
@ -415,7 +417,7 @@ class AuthenticationViewModel extends ChangeNotifier {
isExcludedUser: isExcludedUser,
responseID: responseID,
patientShareRequestID: patientShareRequestID,
familyFileTokenID: familyFileTokenID);
);
}
} else {
// TODO: Handle isSMSSent false
@ -441,8 +443,7 @@ class AuthenticationViewModel extends ChangeNotifier {
Function()? onResendActivation,
bool isFormFamilyFile = false,
dynamic patientShareRequestID,
dynamic responseID,
String? familyFileTokenID}) async {
dynamic responseID}) async {
bool isForRegister = (_appState.getUserRegistrationPayload.healthId != null || _appState.getUserRegistrationPayload.patientOutSa == true || _appState.getUserRegistrationPayload.patientOutSa == 1);
final request = RequestUtils.getCommonRequestWelcome(
@ -478,11 +479,7 @@ class AuthenticationViewModel extends ChangeNotifier {
request["ForRegisteration"] = _appState.getUserRegistrationPayload.isRegister;
request["isRegister"] = false;
final resultEither = await _authenticationRepo.checkActivationCodeRepo(
newRequest: request,
activationCode: activationCode.toString(),
isRegister: true,
);
final resultEither = await _authenticationRepo.checkActivationCodeRepo(newRequest: request, activationCode: activationCode.toString(), isRegister: true);
LoaderBottomSheet.hideLoader();
@ -514,8 +511,7 @@ class AuthenticationViewModel extends ChangeNotifier {
isRegister: false,
isFormFamilyFile: isFormFamilyFile,
patientShareRequestID: patientShareRequestID,
responseID: responseID,
familyFileTokenID: familyFileTokenID);
responseID: responseID);
resultEither.fold(
(failure) async => await _errorHandlerService.handleError(
@ -549,17 +545,14 @@ class AuthenticationViewModel extends ChangeNotifier {
return;
} else {
if (isFormFamilyFile) {
_dialogService.showCommonBottomSheetWithoutH(
message: "Family File Added Successfully",
onOkPressed: () {
LoaderBottomSheet.showLoader();
MedicalFileViewModel medicalFileVM = GetIt.instance<MedicalFileViewModel>();
medicalFileVM.getFamilyFiles();
LoaderBottomSheet.hideLoader();
_navigationService.popUntilNamed(AppRoutes.medicalFilePage);
});
}
await navigateToFamilyFilePage();
// _dialogService.showCommonBottomSheetWithoutH(
// message: "Family File Added Successfully",
// onOkPressed: () async {
// print("navigating to family file page");
//
// });
} else {
if (activation.list != null && activation.list!.isNotEmpty) {
_appState.setAuthenticatedUser(activation.list!.first);
_appState.setPrivilegeModelList(activation.list!.first.listPrivilege!);
@ -598,10 +591,16 @@ class AuthenticationViewModel extends ChangeNotifier {
// projectViewModel.analytics.loginRegistration.login_successful();
}
}
});
}
}
Future<void> navigateToFamilyFilePage() async {
MedicalFileViewModel medicalFileVM = GetIt.instance<MedicalFileViewModel>();
medicalFileVM.handleFamilyFileRequestOTPVerification();
}
Future<bool> checkIfUserAgreedBefore({required dynamic request}) async {
bool isAgreed = false;
if (havePrivilege(109)) {
@ -647,8 +646,7 @@ class AuthenticationViewModel extends ChangeNotifier {
bool isFormFamilyFile = false,
bool isExcludedUser = false,
int? responseID,
int? patientShareRequestID,
String? familyFileTokenID}) async {
int? patientShareRequestID}) async {
_navigationService.pushToOtpScreen(
phoneNumber: phoneNumber,
isFormFamilyFile: isFormFamilyFile,
@ -659,7 +657,6 @@ class AuthenticationViewModel extends ChangeNotifier {
otpTypeEnum: otpTypeEnum,
responseID: responseID,
patientShareRequestID: patientShareRequestID,
familyFileTokenID: familyFileTokenID,
onWrongActivationCode: (String? value) {
onWrongActivationCode(message: value);
},

@ -26,6 +26,8 @@ abstract class MedicalFileRepo {
Future<Either<Failure, GenericApiModel<List<FamilyFileResponseModelLists>>>> getPatientFamilyFiles();
Future<Either<Failure, GenericApiModel<List<FamilyFileResponseModelLists>>>> getAllPendingRecordsByResponseId({required Map<String, dynamic> request});
Future<Either<Failure, GenericApiModel<dynamic>>> addFamilyFile({required dynamic request});
}
@ -312,6 +314,45 @@ class MedicalFileRepoImp implements MedicalFileRepo {
}
}
@override
Future<Either<Failure, GenericApiModel<List<FamilyFileResponseModelLists>>>> getAllPendingRecordsByResponseId({required Map<String, dynamic> request}) async {
try {
GenericApiModel<List<FamilyFileResponseModelLists>>? apiResponse;
Failure? failure;
await apiClient.post(
ApiConsts.getAllPendingRecordsByResponseId,
body: request,
onFailure: (error, statusCode, {messageStatus, failureType}) {
failure = failureType;
},
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
final list = response['GetAllSharedRecordsByStatusList'];
// if (list == null || list.isEmpty) {
// throw Exception("lab list is empty");
// }
final familyLists = list.map((item) => FamilyFileResponseModelLists.fromJson(item as Map<String, dynamic>)).toList().cast<FamilyFileResponseModelLists>();
apiResponse = GenericApiModel<List<FamilyFileResponseModelLists>>(
messageStatus: messageStatus,
statusCode: statusCode,
errorMessage: null,
data: familyLists,
);
} catch (e) {
failure = DataParsingFailure(e.toString());
}
},
);
if (failure != null) return Left(failure!);
if (apiResponse == null) return Left(ServerFailure("Unknown error"));
return Right(apiResponse!);
} catch (e) {
return Left(UnknownFailure(e.toString()));
}
}
@override
Future<Either<Failure, GenericApiModel<dynamic>>> addFamilyFile({dynamic request}) async {
try {
@ -325,6 +366,7 @@ class MedicalFileRepoImp implements MedicalFileRepo {
},
onSuccess: (response, statusCode, {messageStatus, errorMessage}) {
try {
apiResponse = GenericApiModel<dynamic>(
messageStatus: messageStatus,
statusCode: statusCode,

@ -268,6 +268,22 @@ class MedicalFileViewModel extends ChangeNotifier {
);
}
Future<void> getAllPendingRecordsByResponseId() async {
AppState appState = getIt<AppState>();
final result = await medicalFileRepo.getAllPendingRecordsByResponseId(request: {'ResponseID': appState.getAuthenticatedUser()!.patientId ?? "0", "Status": 2});
result.fold(
(failure) async => await errorHandlerService.handleError(failure: failure),
(apiResponse) {
if (apiResponse.messageStatus == 2) {
_dialogService.showErrorBottomSheet(message: apiResponse.errorMessage!, onOkPressed: () {});
} else if (apiResponse.messageStatus == 1) {
print("======= Pending Records Response: ${jsonEncode(apiResponse.data)}");
}
},
);
}
Future<void> switchFamilyFiles({Function(dynamic)? onSuccess, Function(String)? onError}) async {
final result = await medicalFileRepo.getPatientFamilyFiles();
@ -318,7 +334,6 @@ class MedicalFileViewModel extends ChangeNotifier {
message: apiResponse.data['Message'],
onOkPressed: () {
LoaderBottomSheet.showLoader();
print("=================== On Press Ok ==================");
authVM.sendActivationCode(
otpTypeEnum: otpTypeEnum,
nationalIdOrFileNumber: request.sharedPatientIdentificationId!,
@ -327,7 +342,6 @@ class MedicalFileViewModel extends ChangeNotifier {
isExcludedUser: apiResponse.data['IsPatientExcluded'],
responseID: apiResponse.data["ReponseID"],
isFormFamilyFile: true);
},
onCancelPressed: () {
navigationService.pop();
@ -335,4 +349,11 @@ class MedicalFileViewModel extends ChangeNotifier {
}
});
}
Future<void> handleFamilyFileRequestOTPVerification() async {
LoaderBottomSheet.showLoader();
await getFamilyFiles();
await getAllPendingRecordsByResponseId();
LoaderBottomSheet.hideLoader();
}
}

@ -38,7 +38,7 @@ class FamilyMedicalScreen extends StatefulWidget {
}
class _FamilyMedicalScreenState extends State<FamilyMedicalScreen> {
List<CustomTabBarModel> tabs = [CustomTabBarModel("", LocaleKeys.medicalFile.tr()), CustomTabBarModel("", LocaleKeys.request.tr())];
List<CustomTabBarModel> tabs = [CustomTabBarModel(null, LocaleKeys.medicalFile.tr()), CustomTabBarModel(null, LocaleKeys.request.tr())];
MedicalFileViewModel? medicalVM;
@override

Loading…
Cancel
Save