NEW: Patient Manager Provider Setup pt4
This commit is contained in:
@@ -15,6 +15,7 @@ class PatientManagerProvider extends ChangeNotifier {
|
|||||||
List<Note>? consultationNotes;
|
List<Note>? consultationNotes;
|
||||||
List<PFile>? patientDocuments;
|
List<PFile>? patientDocuments;
|
||||||
List<ClaimStatementFile>? patientClaimsDocuments;
|
List<ClaimStatementFile>? patientClaimsDocuments;
|
||||||
|
List<Patient> patientSearchResults = [];
|
||||||
|
|
||||||
PatientManagerProvider({
|
PatientManagerProvider({
|
||||||
this.patientProfileIndex = 0,
|
this.patientProfileIndex = 0,
|
||||||
@@ -75,4 +76,9 @@ class PatientManagerProvider extends ChangeNotifier {
|
|||||||
this.patientClaimsDocuments = patientClaimsDocuments ?? [];
|
this.patientClaimsDocuments = patientClaimsDocuments ?? [];
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setPatientSearchResults({required List<Patient> patientSearchResults}) {
|
||||||
|
this.patientSearchResults = patientSearchResults;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:ken_logger/ken_logger.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
|
||||||
@@ -78,9 +77,7 @@ class _MihBusinessHomeState extends State<MihBusinessHome>
|
|||||||
// return []; // Return empty list if data isn't ready
|
// return []; // Return empty list if data isn't ready
|
||||||
// }
|
// }
|
||||||
List<Map<String, Widget>> temp = [];
|
List<Map<String, Widget>> temp = [];
|
||||||
KenLogger.success("here");
|
|
||||||
if (mzansiProfileProvider.business == null && !widget.isLoading) {
|
if (mzansiProfileProvider.business == null && !widget.isLoading) {
|
||||||
KenLogger.success("here");
|
|
||||||
temp.add({
|
temp.add({
|
||||||
"Setup Business": MzansiSetupBusinessProfileTile(
|
"Setup Business": MzansiSetupBusinessProfileTile(
|
||||||
packageSize: packageSize,
|
packageSize: packageSize,
|
||||||
|
|||||||
@@ -167,6 +167,7 @@ class _MihBusinessUserSearchState extends State<MihBusinessUserSearch> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Widget getBody(double width) {
|
Widget getBody(double width) {
|
||||||
|
// dscvds
|
||||||
return MihSingleChildScroll(
|
return MihSingleChildScroll(
|
||||||
child: Column(mainAxisSize: MainAxisSize.max, children: [
|
child: Column(mainAxisSize: MainAxisSize.max, children: [
|
||||||
Padding(
|
Padding(
|
||||||
@@ -187,7 +188,6 @@ class _MihBusinessUserSearchState extends State<MihBusinessUserSearch> {
|
|||||||
searchController.clear();
|
searchController.clear();
|
||||||
userSearch = "";
|
userSearch = "";
|
||||||
});
|
});
|
||||||
submitUserForm();
|
|
||||||
},
|
},
|
||||||
searchFocusNode: _searchFocusNode,
|
searchFocusNode: _searchFocusNode,
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,38 +1,25 @@
|
|||||||
import 'dart:convert';
|
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
|
import 'package:ken_logger/ken_logger.dart';
|
||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_access_controls_services.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_service_calls.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_service_calls.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_validation_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_button.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_window.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_text_form_field.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_success_message.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_warning_message.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart';
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:supertokens_flutter/http.dart' as http;
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class BuildMihPatientSearchList extends StatefulWidget {
|
class BuildMihPatientSearchList extends StatefulWidget {
|
||||||
final List<Patient> patients;
|
|
||||||
final AppUser signedInUser;
|
|
||||||
final Business? business;
|
|
||||||
final BusinessUser? businessUser;
|
|
||||||
final bool personalSelected;
|
|
||||||
|
|
||||||
const BuildMihPatientSearchList({
|
const BuildMihPatientSearchList({
|
||||||
super.key,
|
super.key,
|
||||||
required this.patients,
|
|
||||||
required this.signedInUser,
|
|
||||||
required this.business,
|
|
||||||
required this.businessUser,
|
|
||||||
required this.personalSelected,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -48,90 +35,6 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
TextEditingController accessStatusController = TextEditingController();
|
TextEditingController accessStatusController = TextEditingController();
|
||||||
final baseAPI = AppEnviroment.baseApiUrl;
|
final baseAPI = AppEnviroment.baseApiUrl;
|
||||||
|
|
||||||
Future<void> addPatientAccessAPICall(int index) async {
|
|
||||||
var response = await http.post(
|
|
||||||
Uri.parse("$baseAPI/access-requests/insert/"),
|
|
||||||
headers: <String, String>{
|
|
||||||
"Content-Type": "application/json; charset=UTF-8"
|
|
||||||
},
|
|
||||||
body: jsonEncode(<String, dynamic>{
|
|
||||||
"business_id": widget.business!.business_id,
|
|
||||||
"app_id": widget.patients[index].app_id,
|
|
||||||
"date": dateController.text,
|
|
||||||
"time": timeController.text,
|
|
||||||
"access": "pending",
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
if (response.statusCode == 201) {
|
|
||||||
// Navigator.pushNamed(context, '/patient-manager/patient',
|
|
||||||
// arguments: widget.signedInUser);
|
|
||||||
String message =
|
|
||||||
"The appointment has been successfully booked!\n\nAn approval request as been sent to the patient.Once the access request has been approved, you will be able to access the patients profile. ou can check the status of your request in patient queue under the appointment.";
|
|
||||||
// "${fnameController.text} ${lnameController.text} patient profiole has been successfully added!\n";
|
|
||||||
Navigator.pop(context);
|
|
||||||
Navigator.pop(context);
|
|
||||||
setState(() {
|
|
||||||
dateController.text = "";
|
|
||||||
timeController.text = "";
|
|
||||||
});
|
|
||||||
Navigator.of(context).pushNamed(
|
|
||||||
'/patient-manager',
|
|
||||||
arguments: BusinessArguments(
|
|
||||||
widget.signedInUser,
|
|
||||||
widget.businessUser,
|
|
||||||
widget.business,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
successPopUp(message);
|
|
||||||
addAccessReviewNotificationAPICall(index);
|
|
||||||
} else {
|
|
||||||
internetConnectionPopUp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Future<void> addAccessReviewNotificationAPICall(int index) async {
|
|
||||||
var response = await http.post(
|
|
||||||
Uri.parse("$baseAPI/notifications/insert/"),
|
|
||||||
headers: <String, String>{
|
|
||||||
"Content-Type": "application/json; charset=UTF-8"
|
|
||||||
},
|
|
||||||
body: jsonEncode(<String, dynamic>{
|
|
||||||
"app_id": widget.patients[index].app_id,
|
|
||||||
"notification_type": "New Appointment Booked",
|
|
||||||
"notification_message":
|
|
||||||
"A new Appointment has been booked by ${widget.business!.Name} for the ${dateController.text} ${timeController.text}. Please approve the Access Review request.",
|
|
||||||
"action_path": "/mih-access",
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
if (response.statusCode == 201) {
|
|
||||||
// Navigator.pushNamed(context, '/patient-manager/patient',
|
|
||||||
// arguments: widget.signedInUser);
|
|
||||||
} else {
|
|
||||||
internetConnectionPopUp();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void internetConnectionPopUp() {
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (context) {
|
|
||||||
return const MIHErrorMessage(errorType: "Internet Connection");
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void successPopUp(String message) {
|
|
||||||
showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (context) {
|
|
||||||
return MIHSuccessMessage(
|
|
||||||
successType: "Success",
|
|
||||||
successMessage: message,
|
|
||||||
);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
void noAccessWarning() {
|
void noAccessWarning() {
|
||||||
showDialog(
|
showDialog(
|
||||||
context: context,
|
context: context,
|
||||||
@@ -141,10 +44,12 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> hasAccessToProfile(int index) async {
|
Future<bool> hasAccessToProfile(MzansiProfileProvider profileProvider,
|
||||||
|
PatientManagerProvider patientManagerProvider, int index) async {
|
||||||
var hasAccess = false;
|
var hasAccess = false;
|
||||||
await MIHApiCalls.checkBusinessAccessToPatient(
|
await MIHApiCalls.checkBusinessAccessToPatient(
|
||||||
widget.business!.business_id, widget.patients[index].app_id)
|
profileProvider.business!.business_id,
|
||||||
|
patientManagerProvider.patientSearchResults[index].app_id)
|
||||||
.then((results) {
|
.then((results) {
|
||||||
if (results.isEmpty) {
|
if (results.isEmpty) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -163,10 +68,12 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
return hasAccess;
|
return hasAccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<String> getAccessStatusOfProfile(int index) async {
|
Future<String> getAccessStatusOfProfile(MzansiProfileProvider profileProvider,
|
||||||
|
PatientManagerProvider patientManagerProvider, int index) async {
|
||||||
var accessStatus = "";
|
var accessStatus = "";
|
||||||
await MIHApiCalls.checkBusinessAccessToPatient(
|
await MIHApiCalls.checkBusinessAccessToPatient(
|
||||||
widget.business!.business_id, widget.patients[index].app_id)
|
profileProvider.business!.business_id,
|
||||||
|
patientManagerProvider.patientSearchResults[index].app_id)
|
||||||
.then((results) {
|
.then((results) {
|
||||||
if (results.isEmpty) {
|
if (results.isEmpty) {
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -181,15 +88,22 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
return accessStatus;
|
return accessStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
void patientProfileChoicePopUp(int index) async {
|
void patientProfileChoicePopUp(
|
||||||
|
MzansiProfileProvider profileProvider,
|
||||||
|
PatientManagerProvider patientManagerProvider,
|
||||||
|
int index,
|
||||||
|
) async {
|
||||||
var hasAccess = false;
|
var hasAccess = false;
|
||||||
String accessStatus = "";
|
String accessStatus = "";
|
||||||
await hasAccessToProfile(index).then((result) {
|
await hasAccessToProfile(profileProvider, patientManagerProvider, index)
|
||||||
|
.then((result) {
|
||||||
setState(() {
|
setState(() {
|
||||||
hasAccess = result;
|
hasAccess = result;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
await getAccessStatusOfProfile(index).then((result) {
|
await getAccessStatusOfProfile(
|
||||||
|
profileProvider, patientManagerProvider, index)
|
||||||
|
.then((result) {
|
||||||
setState(() {
|
setState(() {
|
||||||
accessStatus = result;
|
accessStatus = result;
|
||||||
});
|
});
|
||||||
@@ -197,13 +111,22 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
if (accessStatus == "") {
|
if (accessStatus == "") {
|
||||||
accessStatus = "No Access";
|
accessStatus = "No Access";
|
||||||
}
|
}
|
||||||
var idStars = '*' * (13 - 6);
|
String patientIdNo =
|
||||||
String startedOutPatientIdNo =
|
patientManagerProvider.patientSearchResults[index].id_no;
|
||||||
"${widget.patients[index].id_no.substring(0, 6)}$idStars";
|
String displayedIdNo;
|
||||||
|
|
||||||
|
if (patientIdNo.length >= 6) {
|
||||||
|
var idStars = '*' * (patientIdNo.length - 6);
|
||||||
|
displayedIdNo = "${patientIdNo.substring(0, 6)}$idStars";
|
||||||
|
} else {
|
||||||
|
displayedIdNo = "${patientIdNo}******";
|
||||||
|
}
|
||||||
setState(() {
|
setState(() {
|
||||||
idController.text = startedOutPatientIdNo;
|
idController.text = displayedIdNo;
|
||||||
fnameController.text = widget.patients[index].first_name;
|
fnameController.text =
|
||||||
lnameController.text = widget.patients[index].last_name;
|
patientManagerProvider.patientSearchResults[index].first_name;
|
||||||
|
lnameController.text =
|
||||||
|
patientManagerProvider.patientSearchResults[index].last_name;
|
||||||
accessStatusController.text = accessStatus.toUpperCase();
|
accessStatusController.text = accessStatus.toUpperCase();
|
||||||
});
|
});
|
||||||
//print(accessStatus);
|
//print(accessStatus);
|
||||||
@@ -362,17 +285,21 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
visible: hasAccess,
|
visible: hasAccess,
|
||||||
child: Center(
|
child: Center(
|
||||||
child: MihButton(
|
child: MihButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
if (hasAccess) {
|
if (hasAccess) {
|
||||||
|
await MihPatientServices().getPatientDetails(
|
||||||
|
patientManagerProvider
|
||||||
|
.patientSearchResults[index].app_id,
|
||||||
|
patientManagerProvider);
|
||||||
context.pop();
|
context.pop();
|
||||||
context.pushNamed('patientManagerPatient',
|
context.pushNamed(
|
||||||
extra: PatientViewArguments(
|
'patientManagerPatient',
|
||||||
widget.signedInUser,
|
);
|
||||||
widget.patients[index],
|
// context.pushNamed(
|
||||||
widget.businessUser,
|
// 'patientPatient',
|
||||||
widget.business,
|
// extra: patientManagerProvider
|
||||||
"business",
|
// .patientSearchResults![index].app_id,
|
||||||
));
|
// );
|
||||||
// Navigator.of(context)
|
// Navigator.of(context)
|
||||||
// .pushNamed('/patient-manager/patient',
|
// .pushNamed('/patient-manager/patient',
|
||||||
// arguments: PatientViewArguments(
|
// arguments: PatientViewArguments(
|
||||||
@@ -407,17 +334,19 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
visible: !hasAccess && accessStatus == "No Access",
|
visible: !hasAccess && accessStatus == "No Access",
|
||||||
child: Center(
|
child: Center(
|
||||||
child: MihButton(
|
child: MihButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
MIHApiCalls.addPatientAccessAPICall(
|
await MihAccessControlsServices
|
||||||
widget.business!.business_id,
|
.addPatientAccessAPICall(
|
||||||
widget.patients[index].app_id,
|
profileProvider.business!.business_id,
|
||||||
|
patientManagerProvider
|
||||||
|
.patientSearchResults[index].app_id,
|
||||||
"patient",
|
"patient",
|
||||||
widget.business!.Name,
|
profileProvider.business!.Name,
|
||||||
widget.personalSelected,
|
patientManagerProvider.personalMode,
|
||||||
BusinessArguments(
|
BusinessArguments(
|
||||||
widget.signedInUser,
|
profileProvider.user!,
|
||||||
widget.businessUser,
|
profileProvider.businessUser,
|
||||||
widget.business,
|
profileProvider.business,
|
||||||
),
|
),
|
||||||
context,
|
context,
|
||||||
);
|
);
|
||||||
@@ -443,15 +372,16 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
visible: !hasAccess && accessStatus == "declined",
|
visible: !hasAccess && accessStatus == "declined",
|
||||||
child: Center(
|
child: Center(
|
||||||
child: MihButton(
|
child: MihButton(
|
||||||
onPressed: () {
|
onPressed: () async {
|
||||||
MIHApiCalls.reapplyPatientAccessAPICall(
|
await MIHApiCalls.reapplyPatientAccessAPICall(
|
||||||
widget.business!.business_id,
|
profileProvider.business!.business_id,
|
||||||
widget.patients[index].app_id,
|
patientManagerProvider
|
||||||
widget.personalSelected,
|
.patientSearchResults[index].app_id,
|
||||||
|
patientManagerProvider.personalMode,
|
||||||
BusinessArguments(
|
BusinessArguments(
|
||||||
widget.signedInUser,
|
profileProvider.user!,
|
||||||
widget.businessUser,
|
profileProvider.businessUser,
|
||||||
widget.business,
|
profileProvider.business,
|
||||||
),
|
),
|
||||||
context,
|
context,
|
||||||
);
|
);
|
||||||
@@ -491,20 +421,17 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget isMainMember(int index) {
|
Widget isMainMember(
|
||||||
//var matchRE = RegExp(r'^[a-z]+$');
|
PatientManagerProvider patientManagerProvider, int index) {
|
||||||
// var firstLetterFName = widget.patients[index].first_name[0];
|
if (patientManagerProvider
|
||||||
// var firstLetterLName = widget.patients[index].last_name[0];
|
.patientSearchResults[index].medical_aid_main_member ==
|
||||||
// var fnameStar = '*' * 8;
|
"Yes") {
|
||||||
// var lnameStar = '*' * 8;
|
|
||||||
|
|
||||||
if (widget.patients[index].medical_aid_main_member == "Yes") {
|
|
||||||
return Row(
|
return Row(
|
||||||
mainAxisSize: MainAxisSize.max,
|
mainAxisSize: MainAxisSize.max,
|
||||||
children: [
|
children: [
|
||||||
Text(
|
Text(
|
||||||
// "$firstLetterFName$fnameStar $firstLetterLName$lnameStar",
|
// "$firstLetterFName$fnameStar $firstLetterLName$lnameStar",
|
||||||
"${widget.patients[index].first_name} ${widget.patients[index].last_name}",
|
"${patientManagerProvider.patientSearchResults[index].first_name} ${patientManagerProvider.patientSearchResults[index].last_name}",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getSecondaryColor(
|
color: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
@@ -523,7 +450,7 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
} else {
|
} else {
|
||||||
return Text(
|
return Text(
|
||||||
// "$firstLetterFName$fnameStar $firstLetterLName$lnameStar",
|
// "$firstLetterFName$fnameStar $firstLetterLName$lnameStar",
|
||||||
"${widget.patients[index].first_name} ${widget.patients[index].last_name}",
|
"${patientManagerProvider.patientSearchResults[index].first_name} ${patientManagerProvider.patientSearchResults[index].last_name}",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getSecondaryColor(
|
color: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
@@ -532,23 +459,37 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget hasMedicalAid(int index) {
|
Widget hasMedicalAid(
|
||||||
|
MzansiProfileProvider profileProvider,
|
||||||
|
PatientManagerProvider patientManagerProvider,
|
||||||
|
int index,
|
||||||
|
) {
|
||||||
|
String patientIdNo =
|
||||||
|
patientManagerProvider.patientSearchResults[index].id_no;
|
||||||
|
String displayedIdNo;
|
||||||
var medAidNoStar = '*' * 8;
|
var medAidNoStar = '*' * 8;
|
||||||
var idStars = '*' * (13 - 6);
|
if (patientIdNo.length >= 6) {
|
||||||
String startedOutPatientIdNo =
|
var idStars = '*' * (patientIdNo.length - 6);
|
||||||
"${widget.patients[index].id_no.substring(0, 6)}$idStars";
|
displayedIdNo = "${patientIdNo.substring(0, 6)}$idStars";
|
||||||
if (widget.patients[index].medical_aid == "Yes") {
|
} else {
|
||||||
|
// If ID is shorter than 6 characters, just show it with stars
|
||||||
|
displayedIdNo = "${patientIdNo}******";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (patientManagerProvider.patientSearchResults[index].medical_aid ==
|
||||||
|
"Yes") {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
title: isMainMember(index),
|
title: isMainMember(patientManagerProvider, index),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
"ID No.: $startedOutPatientIdNo\nMedical Aid No.: $medAidNoStar",
|
"ID No.: $displayedIdNo\nMedical Aid No.: $medAidNoStar",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getSecondaryColor(
|
color: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
patientProfileChoicePopUp(index);
|
patientProfileChoicePopUp(
|
||||||
|
profileProvider, patientManagerProvider, index);
|
||||||
// setState(() {
|
// setState(() {
|
||||||
// appointmentPopUp(index);
|
// appointmentPopUp(index);
|
||||||
// // Add popup to add patienmt to queue
|
// // Add popup to add patienmt to queue
|
||||||
@@ -565,16 +506,17 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
return ListTile(
|
return ListTile(
|
||||||
title: isMainMember(index),
|
title: isMainMember(patientManagerProvider, index),
|
||||||
subtitle: Text(
|
subtitle: Text(
|
||||||
"ID No.: $startedOutPatientIdNo\nMedical Aid No.: $medAidNoStar",
|
"ID No.: $displayedIdNo\nMedical Aid No.: $medAidNoStar",
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
color: MihColors.getSecondaryColor(
|
color: MihColors.getSecondaryColor(
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
patientProfileChoicePopUp(index);
|
patientProfileChoicePopUp(
|
||||||
|
profileProvider, patientManagerProvider, index);
|
||||||
// setState(() {
|
// setState(() {
|
||||||
// appointmentPopUp(index);
|
// appointmentPopUp(index);
|
||||||
// // Navigator.of(context).pushNamed('/patient-manager/patient',
|
// // Navigator.of(context).pushNamed('/patient-manager/patient',
|
||||||
@@ -599,26 +541,35 @@ class _BuildPatientsListState extends State<BuildMihPatientSearchList> {
|
|||||||
fnameController.dispose();
|
fnameController.dispose();
|
||||||
lnameController.dispose();
|
lnameController.dispose();
|
||||||
accessStatusController.dispose();
|
accessStatusController.dispose();
|
||||||
|
PatientManagerProvider patientManagerProvider =
|
||||||
|
context.read<PatientManagerProvider>();
|
||||||
|
patientManagerProvider.setPatientSearchResults(patientSearchResults: []);
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return ListView.separated(
|
return Consumer2<MzansiProfileProvider, PatientManagerProvider>(
|
||||||
shrinkWrap: true,
|
builder: (BuildContext context, MzansiProfileProvider profileProvider,
|
||||||
physics: const NeverScrollableScrollPhysics(),
|
PatientManagerProvider patientManagerProvider, Widget? child) {
|
||||||
separatorBuilder: (BuildContext context, index) {
|
return ListView.separated(
|
||||||
return Divider(
|
shrinkWrap: true,
|
||||||
color: MihColors.getSecondaryColor(
|
physics: const NeverScrollableScrollPhysics(),
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
separatorBuilder: (BuildContext context, index) {
|
||||||
|
return Divider(
|
||||||
|
color: MihColors.getSecondaryColor(
|
||||||
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
itemCount: patientManagerProvider.patientSearchResults.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
KenLogger.success(
|
||||||
|
"Search Results Count: ${patientManagerProvider.patientSearchResults.length}");
|
||||||
|
return hasMedicalAid(
|
||||||
|
profileProvider, patientManagerProvider, index);
|
||||||
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
itemCount: widget.patients.length,
|
|
||||||
itemBuilder: (context, index) {
|
|
||||||
//final patient = widget.patients[index].id_no.contains(widget.searchString);
|
|
||||||
//print(index);
|
|
||||||
return hasMedicalAid(index);
|
|
||||||
},
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,32 +1,21 @@
|
|||||||
import 'package:mzansi_innovation_hub/main.dart';
|
import 'package:mzansi_innovation_hub/main.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_icons.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_services/mih_service_calls.dart';
|
import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_single_child_scroll.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tool_body.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_search_bar.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/list_builders/build_mih_patient_search_list.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class MihPatientSearch extends StatefulWidget {
|
class MihPatientSearch extends StatefulWidget {
|
||||||
final AppUser signedInUser;
|
|
||||||
final Business? business;
|
|
||||||
final BusinessUser? businessUser;
|
|
||||||
final bool personalSelected;
|
|
||||||
|
|
||||||
const MihPatientSearch({
|
const MihPatientSearch({
|
||||||
super.key,
|
super.key,
|
||||||
required this.signedInUser,
|
|
||||||
required this.business,
|
|
||||||
required this.businessUser,
|
|
||||||
required this.personalSelected,
|
|
||||||
});
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@@ -40,71 +29,44 @@ class _MihPatientSearchState extends State<MihPatientSearch> {
|
|||||||
bool hasSearchedBefore = false;
|
bool hasSearchedBefore = false;
|
||||||
String _mihPatientSearchString = "";
|
String _mihPatientSearchString = "";
|
||||||
String baseUrl = AppEnviroment.baseApiUrl;
|
String baseUrl = AppEnviroment.baseApiUrl;
|
||||||
late Future<List<Patient>> _mihPatientSearchResults;
|
|
||||||
|
|
||||||
Widget getPatientSearch(double width) {
|
Widget getPatientSearch(double width) {
|
||||||
return MihSingleChildScroll(
|
return Consumer<PatientManagerProvider>(
|
||||||
child: Column(mainAxisSize: MainAxisSize.max, children: [
|
builder: (BuildContext context,
|
||||||
Padding(
|
PatientManagerProvider patientManagerProvider, Widget? child) {
|
||||||
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
return MihSingleChildScroll(
|
||||||
child: MihSearchBar(
|
child: Column(mainAxisSize: MainAxisSize.max, children: [
|
||||||
controller: _mihPatientSearchController,
|
Padding(
|
||||||
hintText: "Search Patient ID/ Aid No.",
|
padding: EdgeInsets.symmetric(horizontal: width / 20),
|
||||||
prefixIcon: Icons.search,
|
child: MihSearchBar(
|
||||||
fillColor: MihColors.getSecondaryColor(
|
controller: _mihPatientSearchController,
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
hintText: "Search Patient ID/ Aid No.",
|
||||||
hintColor: MihColors.getPrimaryColor(
|
prefixIcon: Icons.search,
|
||||||
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
fillColor: MihColors.getSecondaryColor(
|
||||||
onPrefixIconTap: () {
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
submitPatientSearch();
|
hintColor: MihColors.getPrimaryColor(
|
||||||
},
|
MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
|
||||||
onClearIconTap: () {
|
onPrefixIconTap: () {
|
||||||
setState(() {
|
submitPatientSearch(patientManagerProvider);
|
||||||
_mihPatientSearchController.clear();
|
},
|
||||||
_mihPatientSearchString = "";
|
onClearIconTap: () {
|
||||||
});
|
setState(() {
|
||||||
submitPatientSearch();
|
_mihPatientSearchController.clear();
|
||||||
//To-Do: Implement the search function
|
_mihPatientSearchString = "";
|
||||||
// print("To-Do: Implement the search function");
|
});
|
||||||
},
|
patientManagerProvider
|
||||||
searchFocusNode: _searchFocusNode,
|
.setPatientSearchResults(patientSearchResults: []);
|
||||||
),
|
},
|
||||||
),
|
searchFocusNode: _searchFocusNode,
|
||||||
//spacer
|
),
|
||||||
const SizedBox(height: 10),
|
),
|
||||||
FutureBuilder(
|
//spacer
|
||||||
future: _mihPatientSearchResults,
|
const SizedBox(height: 10),
|
||||||
builder: (context, snapshot) {
|
|
||||||
//print("patient Liust ${snapshot.data}");
|
displayPatientList(patientManagerProvider, _mihPatientSearchString),
|
||||||
if (snapshot.connectionState == ConnectionState.waiting) {
|
]),
|
||||||
return const Mihloadingcircle();
|
);
|
||||||
} else if (snapshot.connectionState == ConnectionState.done &&
|
},
|
||||||
snapshot.hasData) {
|
|
||||||
List<Patient> patientsList;
|
|
||||||
if (_mihPatientSearchString == "") {
|
|
||||||
patientsList = [];
|
|
||||||
} else {
|
|
||||||
patientsList = filterSearchResults(
|
|
||||||
snapshot.data!, _mihPatientSearchString);
|
|
||||||
//print(patientsList);
|
|
||||||
}
|
|
||||||
return displayPatientList(patientsList, _mihPatientSearchString);
|
|
||||||
} else {
|
|
||||||
return Center(
|
|
||||||
child: Text(
|
|
||||||
"Error pulling Patients Data\n$baseUrl/patients/search/$_mihPatientSearchString",
|
|
||||||
style: TextStyle(
|
|
||||||
fontSize: 25,
|
|
||||||
color: MihColors.getRedColor(
|
|
||||||
MzansiInnovationHub.of(context)!.theme.mode ==
|
|
||||||
"Dark")),
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
),
|
|
||||||
]),
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,16 +83,12 @@ class _MihPatientSearchState extends State<MihPatientSearch> {
|
|||||||
return templist;
|
return templist;
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget displayPatientList(List<Patient> patientsList, String searchString) {
|
Widget displayPatientList(
|
||||||
if (patientsList.isNotEmpty) {
|
PatientManagerProvider patientManagerProvider, String searchString) {
|
||||||
return BuildMihPatientSearchList(
|
if (patientManagerProvider.patientSearchResults.isNotEmpty) {
|
||||||
patients: patientsList,
|
return BuildMihPatientSearchList();
|
||||||
signedInUser: widget.signedInUser,
|
} else if (patientManagerProvider.patientSearchResults.isEmpty &&
|
||||||
business: widget.business,
|
searchString != "") {
|
||||||
businessUser: widget.businessUser,
|
|
||||||
personalSelected: widget.personalSelected,
|
|
||||||
);
|
|
||||||
} else if (patientsList.isEmpty && searchString != "") {
|
|
||||||
return Column(
|
return Column(
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 50),
|
const SizedBox(height: 50),
|
||||||
@@ -195,17 +153,6 @@ class _MihPatientSearchState extends State<MihPatientSearch> {
|
|||||||
TextSpan(
|
TextSpan(
|
||||||
text:
|
text:
|
||||||
"You can search using their ID Number or Medical Aid No."),
|
"You can search using their ID Number or Medical Aid No."),
|
||||||
// WidgetSpan(
|
|
||||||
// alignment: PlaceholderAlignment.middle,
|
|
||||||
// child: Icon(
|
|
||||||
// Icons.menu,
|
|
||||||
// size: 20,
|
|
||||||
// color: MzansiInnovationHub.of(context)!
|
|
||||||
// .theme
|
|
||||||
// .secondaryColor(),
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// TextSpan(text: " to add your first loyalty card"),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
@@ -213,30 +160,18 @@ class _MihPatientSearchState extends State<MihPatientSearch> {
|
|||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
// return Padding(
|
|
||||||
// padding: const EdgeInsets.only(top: 35.0),
|
|
||||||
// child: Center(
|
|
||||||
// child: Text(
|
|
||||||
// "Enter ID or Medical Aid No. of Patient",
|
|
||||||
// style: TextStyle(
|
|
||||||
// fontSize: 25,
|
|
||||||
// color:
|
|
||||||
// MihColors.getGreyColor(MzansiInnovationHub.of(context)!.theme.mode == "Dark")),
|
|
||||||
// textAlign: TextAlign.center,
|
|
||||||
// ),
|
|
||||||
// ),
|
|
||||||
// );
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void submitPatientSearch() {
|
Future<void> submitPatientSearch(
|
||||||
|
PatientManagerProvider patientManagerProvider) async {
|
||||||
if (_mihPatientSearchController.text != "") {
|
if (_mihPatientSearchController.text != "") {
|
||||||
setState(() {
|
setState(() {
|
||||||
_mihPatientSearchString = _mihPatientSearchController.text;
|
_mihPatientSearchString = _mihPatientSearchController.text;
|
||||||
_mihPatientSearchResults =
|
|
||||||
MIHApiCalls.fetchPatients(_mihPatientSearchString);
|
|
||||||
hasSearchedBefore = true;
|
hasSearchedBefore = true;
|
||||||
});
|
});
|
||||||
|
await MihPatientServices.searchPatients(
|
||||||
|
patientManagerProvider, _mihPatientSearchString);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,7 +192,6 @@ class _MihPatientSearchState extends State<MihPatientSearch> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
_mihPatientSearchResults = MIHApiCalls.fetchPatients("abc");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
|
|||||||
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mzansi_profile_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/patient_manager_provider.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/mih_patient_search.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/my_patient_list.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart';
|
import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/package_tools/waiting_room.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -42,7 +43,7 @@ class _PatManagerState extends State<PatManager> {
|
|||||||
mihCalendarProvider.selectedDay,
|
mihCalendarProvider.selectedDay,
|
||||||
mihCalendarProvider,
|
mihCalendarProvider,
|
||||||
);
|
);
|
||||||
MihPatientServices().getPatientAccessListOfBusiness(
|
await MihPatientServices().getPatientAccessListOfBusiness(
|
||||||
patientManagerProvider, profileProvider.business!.business_id);
|
patientManagerProvider, profileProvider.business!.business_id);
|
||||||
}
|
}
|
||||||
setState(() {
|
setState(() {
|
||||||
@@ -82,13 +83,9 @@ class _PatManagerState extends State<PatManager> {
|
|||||||
onTap: () {
|
onTap: () {
|
||||||
patientManagerProvider.setPatientProfileIndex(0);
|
patientManagerProvider.setPatientProfileIndex(0);
|
||||||
patientManagerProvider.setPatientManagerIndex(0);
|
patientManagerProvider.setPatientManagerIndex(0);
|
||||||
if (!patientManagerProvider.personalMode) {
|
context.goNamed(
|
||||||
context.pop();
|
'mihHome',
|
||||||
} else {
|
);
|
||||||
context.goNamed(
|
|
||||||
'mihHome',
|
|
||||||
);
|
|
||||||
}
|
|
||||||
FocusScope.of(context).unfocus();
|
FocusScope.of(context).unfocus();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -104,6 +101,9 @@ class _PatManagerState extends State<PatManager> {
|
|||||||
};
|
};
|
||||||
|
|
||||||
temp[const Icon(Icons.search)] = () {
|
temp[const Icon(Icons.search)] = () {
|
||||||
|
context
|
||||||
|
.read<PatientManagerProvider>()
|
||||||
|
.setPatientSearchResults(patientSearchResults: []);
|
||||||
context.read<PatientManagerProvider>().setPatientManagerIndex(2);
|
context.read<PatientManagerProvider>().setPatientManagerIndex(2);
|
||||||
};
|
};
|
||||||
return MihPackageTools(
|
return MihPackageTools(
|
||||||
@@ -117,13 +117,7 @@ class _PatManagerState extends State<PatManager> {
|
|||||||
List<Widget> toolBodies = [
|
List<Widget> toolBodies = [
|
||||||
WaitingRoom(),
|
WaitingRoom(),
|
||||||
MyPatientList(),
|
MyPatientList(),
|
||||||
Placeholder(),
|
MihPatientSearch(),
|
||||||
// MihPatientSearch(
|
|
||||||
// signedInUser: widget.arguments.signedInUser,
|
|
||||||
// business: widget.arguments.business,
|
|
||||||
// personalSelected: widget.arguments.personalSelected,
|
|
||||||
// businessUser: widget.arguments.businessUser,
|
|
||||||
// ),
|
|
||||||
];
|
];
|
||||||
return toolBodies;
|
return toolBodies;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,10 +2,13 @@ import 'dart:convert';
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/app_user.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_error_message.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_pop_up_messages/mih_loading_circle.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_access_controlls_provider.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
import 'package:mzansi_innovation_hub/mih_config/mih_env.dart';
|
||||||
|
import 'package:mzansi_innovation_hub/mih_services/mih_notification_services.dart';
|
||||||
import 'package:supertokens_flutter/http.dart' as http;
|
import 'package:supertokens_flutter/http.dart' as http;
|
||||||
|
|
||||||
class MihAccessControlsServices {
|
class MihAccessControlsServices {
|
||||||
@@ -32,6 +35,98 @@ class MihAccessControlsServices {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// This function is used to create patient access and trigger notification to patient
|
||||||
|
///
|
||||||
|
/// Patameters:-
|
||||||
|
/// String business_id,
|
||||||
|
/// String app_id,
|
||||||
|
/// String type,
|
||||||
|
/// String requested_by,
|
||||||
|
/// BuildContext context,
|
||||||
|
///
|
||||||
|
/// Returns void (triggers notification of success 201).
|
||||||
|
static Future<void> addPatientAccessAPICall(
|
||||||
|
String business_id,
|
||||||
|
String app_id,
|
||||||
|
String type,
|
||||||
|
String requested_by,
|
||||||
|
bool personalSelected,
|
||||||
|
BusinessArguments args,
|
||||||
|
BuildContext context,
|
||||||
|
) async {
|
||||||
|
var response = await http.post(
|
||||||
|
Uri.parse("${AppEnviroment.baseApiUrl}/access-requests/insert/"),
|
||||||
|
headers: <String, String>{
|
||||||
|
"Content-Type": "application/json; charset=UTF-8"
|
||||||
|
},
|
||||||
|
// business_id: str
|
||||||
|
// app_id: str
|
||||||
|
// type: str
|
||||||
|
// requested_by: str
|
||||||
|
body: jsonEncode(<String, dynamic>{
|
||||||
|
"business_id": business_id,
|
||||||
|
"app_id": app_id,
|
||||||
|
"type": type,
|
||||||
|
"requested_by": requested_by,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
if (response.statusCode == 201) {
|
||||||
|
await MihNotificationApis.addAccessRequestNotificationAPICall(
|
||||||
|
app_id, requested_by, personalSelected, args, context);
|
||||||
|
} else {
|
||||||
|
internetConnectionPopUp(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// This function is used to reapply for access to patient.
|
||||||
|
///
|
||||||
|
/// Patameters:-
|
||||||
|
/// String business_id,
|
||||||
|
/// String app_id,
|
||||||
|
/// BuildContext context,
|
||||||
|
///
|
||||||
|
/// Returns void (on success 200 navigate to /mih-access ).
|
||||||
|
static Future<void> reapplyPatientAccessAPICall(
|
||||||
|
String business_id,
|
||||||
|
String app_id,
|
||||||
|
bool personalSelected,
|
||||||
|
BusinessArguments args,
|
||||||
|
BuildContext context,
|
||||||
|
) async {
|
||||||
|
var response = await http.put(
|
||||||
|
Uri.parse("${AppEnviroment.baseApiUrl}/access-requests/re-apply/"),
|
||||||
|
headers: <String, String>{
|
||||||
|
"Content-Type": "application/json; charset=UTF-8"
|
||||||
|
},
|
||||||
|
// business_id: str
|
||||||
|
// app_id: str
|
||||||
|
// status: str
|
||||||
|
// approved_by: str
|
||||||
|
body: jsonEncode(<String, dynamic>{
|
||||||
|
"business_id": business_id,
|
||||||
|
"app_id": app_id,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
await MihNotificationApis.reapplyAccessRequestNotificationAPICall(
|
||||||
|
app_id, personalSelected, args, context);
|
||||||
|
//notification here
|
||||||
|
} else {
|
||||||
|
internetConnectionPopUp(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void internetConnectionPopUp(BuildContext context) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) {
|
||||||
|
return const MIHErrorMessage(
|
||||||
|
errorType: "Internet Connection",
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/// This function is used to UPDATE access the business has.
|
/// This function is used to UPDATE access the business has.
|
||||||
///
|
///
|
||||||
/// Patameters:-
|
/// Patameters:-
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
import 'package:file_picker/file_picker.dart';
|
import 'package:file_picker/file_picker.dart';
|
||||||
import 'package:ken_logger/ken_logger.dart';
|
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/files.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/files.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/notes.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/notes.dart';
|
||||||
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart';
|
import 'package:mzansi_innovation_hub/mih_components/mih_objects/patient_access.dart';
|
||||||
@@ -26,7 +25,6 @@ class MihPatientServices {
|
|||||||
);
|
);
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
String body = response.body;
|
String body = response.body;
|
||||||
KenLogger.success(response.body);
|
|
||||||
var jsonBody = jsonDecode(body);
|
var jsonBody = jsonDecode(body);
|
||||||
Patient patient = Patient.fromJson(jsonBody);
|
Patient patient = Patient.fromJson(jsonBody);
|
||||||
patientManagerProvider.setSelectedPatient(selectedPatient: patient);
|
patientManagerProvider.setSelectedPatient(selectedPatient: patient);
|
||||||
@@ -36,6 +34,24 @@ class MihPatientServices {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Future<List<Patient>> searchPatients(
|
||||||
|
PatientManagerProvider patientManagerProvider,
|
||||||
|
String search,
|
||||||
|
) async {
|
||||||
|
final response = await http
|
||||||
|
.get(Uri.parse("${AppEnviroment.baseApiUrl}/patients/search/$search"));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
Iterable l = jsonDecode(response.body);
|
||||||
|
List<Patient> patients =
|
||||||
|
List<Patient>.from(l.map((model) => Patient.fromJson(model)));
|
||||||
|
patientManagerProvider.setPatientSearchResults(
|
||||||
|
patientSearchResults: patients);
|
||||||
|
return patients;
|
||||||
|
} else {
|
||||||
|
throw Exception('failed to load patients');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Future<int> addPatientService(
|
Future<int> addPatientService(
|
||||||
String id_no,
|
String id_no,
|
||||||
String fname,
|
String fname,
|
||||||
|
|||||||
@@ -274,12 +274,10 @@ class MIHApiCalls {
|
|||||||
/// Patameters: String dsearch.
|
/// Patameters: String dsearch.
|
||||||
///
|
///
|
||||||
/// Returns List<Patient>.
|
/// Returns List<Patient>.
|
||||||
|
|
||||||
static Future<List<Patient>> fetchPatients(String search) async {
|
static Future<List<Patient>> fetchPatients(String search) async {
|
||||||
final response = await http
|
final response = await http
|
||||||
.get(Uri.parse("${AppEnviroment.baseApiUrl}/patients/search/$search"));
|
.get(Uri.parse("${AppEnviroment.baseApiUrl}/patients/search/$search"));
|
||||||
// errorCode = response.statusCode.toString();
|
|
||||||
// errorBody = response.body;
|
|
||||||
|
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
Iterable l = jsonDecode(response.body);
|
Iterable l = jsonDecode(response.body);
|
||||||
List<Patient> patients =
|
List<Patient> patients =
|
||||||
|
|||||||
Reference in New Issue
Block a user