NEW: Patient Manager Provider Setup pt3

This commit is contained in:
2025-10-29 15:43:05 +02:00
parent 99d0fa4aa8
commit 39a42048c2
13 changed files with 263 additions and 295 deletions

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/claim_statement_file.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/claim_statement_file.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/patients.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.dart';
class PatientManagerProvider extends ChangeNotifier { class PatientManagerProvider extends ChangeNotifier {
@@ -9,6 +10,7 @@ class PatientManagerProvider extends ChangeNotifier {
int patientManagerIndex; int patientManagerIndex;
int fileViewerIndex; int fileViewerIndex;
bool personalMode; bool personalMode;
List<PatientAccess>? myPaitentList;
Patient? selectedPatient; Patient? selectedPatient;
List<Note>? consultationNotes; List<Note>? consultationNotes;
List<PFile>? patientDocuments; List<PFile>? patientDocuments;
@@ -53,6 +55,11 @@ class PatientManagerProvider extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
void setMyPatientList({required List<PatientAccess>? myPaitentList}) {
this.myPaitentList = myPaitentList ?? [];
notifyListeners();
}
void setConsultationNotes({required List<Note>? consultationNotes}) { void setConsultationNotes({required List<Note>? consultationNotes}) {
this.consultationNotes = consultationNotes ?? []; this.consultationNotes = consultationNotes ?? [];
notifyListeners(); notifyListeners();

View File

@@ -320,6 +320,7 @@ class MihGoRouter {
name: "mihAccess", name: "mihAccess",
path: MihGoRouterPaths.mihAccess, path: MihGoRouterPaths.mihAccess,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: mihAccess");
if (context.watch<MzansiProfileProvider>().user == null) { if (context.watch<MzansiProfileProvider>().user == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
@@ -336,20 +337,21 @@ class MihGoRouter {
name: "patientProfile", name: "patientProfile",
path: MihGoRouterPaths.patientProfile, path: MihGoRouterPaths.patientProfile,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
final String? argPatientAppId = state.extra as String?; KenLogger.success("MihGoRouter: patientProfile");
if (context.watch<MzansiProfileProvider>().user == null) { if (context.watch<MzansiProfileProvider>().user == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
}); });
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
return PatientProfile(patientAppId: argPatientAppId); return PatientProfile();
}, },
), ),
GoRoute( GoRoute(
name: "patientProfileSetup", name: "patientProfileSetup",
path: MihGoRouterPaths.patientProfileSetup, path: MihGoRouterPaths.patientProfileSetup,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: patientProfileSetup");
if (context.watch<MzansiProfileProvider>().user == null) { if (context.watch<MzansiProfileProvider>().user == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
@@ -363,8 +365,8 @@ class MihGoRouter {
name: "patientManager", name: "patientManager",
path: MihGoRouterPaths.patientManager, path: MihGoRouterPaths.patientManager,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
final PatManagerArguments? args = state.extra as PatManagerArguments?; KenLogger.success("MihGoRouter: patientManager");
if (args == null) { if (context.watch<MzansiProfileProvider>().business == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
}); });
@@ -372,7 +374,6 @@ class MihGoRouter {
} }
return PatManager( return PatManager(
key: UniqueKey(), key: UniqueKey(),
arguments: args,
); );
}, },
), ),
@@ -380,14 +381,14 @@ class MihGoRouter {
name: "patientManagerPatient", name: "patientManagerPatient",
path: MihGoRouterPaths.patientManagerPatient, path: MihGoRouterPaths.patientManagerPatient,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
final String? argPatientAppId = state.extra as String?; KenLogger.success("MihGoRouter: patientManagerPatient");
if (context.watch<MzansiProfileProvider>().user == null) { if (context.watch<MzansiProfileProvider>().user == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
}); });
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
return PatientProfile(patientAppId: argPatientAppId); return PatientProfile();
}, },
), ),
// ========================== Mzansi Directory ================================== // ========================== Mzansi Directory ==================================
@@ -395,6 +396,7 @@ class MihGoRouter {
name: "mzansiDirectory", name: "mzansiDirectory",
path: MihGoRouterPaths.mzansiDirectory, path: MihGoRouterPaths.mzansiDirectory,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: mzansiDirectory");
if (context.watch<MzansiProfileProvider>().user == null) { if (context.watch<MzansiProfileProvider>().user == null) {
WidgetsBinding.instance.addPostFrameCallback((_) { WidgetsBinding.instance.addPostFrameCallback((_) {
context.go(MihGoRouterPaths.mihHome); context.go(MihGoRouterPaths.mihHome);
@@ -409,6 +411,7 @@ class MihGoRouter {
name: "fileViewer", name: "fileViewer",
path: MihGoRouterPaths.fileViewer, path: MihGoRouterPaths.fileViewer,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: fileViewer");
final FileViewArguments? args = state.extra as FileViewArguments?; final FileViewArguments? args = state.extra as FileViewArguments?;
return FullScreenFileViewer(arguments: args!); return FullScreenFileViewer(arguments: args!);
}, },
@@ -417,6 +420,7 @@ class MihGoRouter {
name: "printPreview", name: "printPreview",
path: MihGoRouterPaths.printPreview, path: MihGoRouterPaths.printPreview,
builder: (BuildContext context, GoRouterState state) { builder: (BuildContext context, GoRouterState state) {
KenLogger.success("MihGoRouter: printPreview");
final PrintPreviewArguments? args = final PrintPreviewArguments? args =
state.extra as PrintPreviewArguments?; state.extra as PrintPreviewArguments?;
return MIHPrintPreview(arguments: args!); return MIHPrintPreview(arguments: args!);

View File

@@ -1,9 +1,11 @@
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.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_package_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.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_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.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_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.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';
@@ -15,26 +17,12 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
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_error_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/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/patients.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class BuildMyPatientListList extends StatefulWidget { class BuildMyPatientListList extends StatefulWidget {
final List<PatientAccess> patientAccesses;
final AppUser signedInUser;
final Business? business;
final BusinessUser? businessUser;
const BuildMyPatientListList({ const BuildMyPatientListList({
super.key, super.key,
required this.patientAccesses,
required this.signedInUser,
required this.business,
required this.businessUser,
}); });
@override @override
@@ -51,24 +39,21 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
final baseAPI = AppEnviroment.baseApiUrl; final baseAPI = AppEnviroment.baseApiUrl;
Future<void> submitApointment(int index) async { Future<void> submitApointment(MzansiProfileProvider profileProvider,
PatientManagerProvider patientManagerProvider, int index) async {
//To-Do: Add the appointment to the database //To-Do: Add the appointment to the database
// print("To-Do: Add the appointment to the database"); // print("To-Do: Add the appointment to the database");
String description = String description =
"Date: ${dateController.text}\nTime: ${timeController.text}\n"; "Date: ${dateController.text}\nTime: ${timeController.text}\n";
description += "Medical Practice: ${widget.business!.Name}\n"; description += "Medical Practice: ${profileProvider.business!.Name}\n";
description += "Contact Number: ${widget.business!.contact_no}"; description += "Contact Number: ${profileProvider.business!.contact_no}";
int statusCode; int statusCode;
statusCode = await MihMzansiCalendarApis.addPatientAppointment( statusCode = await MihMzansiCalendarApis.addPatientAppointment(
widget.signedInUser, profileProvider.user!,
false, false,
widget.patientAccesses[index].app_id, patientManagerProvider.myPaitentList![index].app_id,
BusinessArguments( profileProvider.business!.business_id,
widget.signedInUser, "${patientManagerProvider.myPaitentList![index].fname} ${patientManagerProvider.myPaitentList![index].lname} - Doctors Visit",
widget.businessUser,
widget.business,
),
"${widget.patientAccesses[index].fname} ${widget.patientAccesses[index].lname} - Doctors Visit",
description, description,
dateController.text, dateController.text,
timeController.text, timeController.text,
@@ -164,11 +149,16 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
} }
} }
void appointmentPopUp(int index, double width) { void appointmentPopUp(
var firstLetterFName = widget.patientAccesses[index].fname; MzansiProfileProvider profileProvider,
var firstLetterLName = widget.patientAccesses[index].lname; PatientManagerProvider patientManagerProvider,
int index,
double width,
) {
var firstLetterFName = patientManagerProvider.myPaitentList![index].fname;
var firstLetterLName = patientManagerProvider.myPaitentList![index].lname;
setState(() { setState(() {
idController.text = widget.patientAccesses[index].id_no; idController.text = patientManagerProvider.myPaitentList![index].id_no;
fnameController.text = firstLetterFName; fnameController.text = firstLetterFName;
lnameController.text = firstLetterLName; lnameController.text = firstLetterLName;
}); });
@@ -260,7 +250,8 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate()) {
bool filled = isAppointmentFieldsFilled(); bool filled = isAppointmentFieldsFilled();
if (filled) { if (filled) {
submitApointment(index); submitApointment(
profileProvider, patientManagerProvider, index);
} else { } else {
showDialog( showDialog(
context: context, context: context,
@@ -299,8 +290,9 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
); );
} }
void noAccessWarning(int index) { void noAccessWarning(
if (widget.patientAccesses[index].status == "pending") { PatientManagerProvider patientManagerProvider, int index) {
if (patientManagerProvider.myPaitentList![index].status == "pending") {
showDialog( showDialog(
context: context, context: context,
builder: (context) { builder: (context) {
@@ -317,10 +309,11 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
} }
} }
bool hasAccessToProfile(int index) { bool hasAccessToProfile(
PatientManagerProvider patientManagerProvider, int index) {
var hasAccess = false; var hasAccess = false;
if (widget.patientAccesses[index].status == "approved") { if (patientManagerProvider.myPaitentList![index].status == "approved") {
hasAccess = true; hasAccess = true;
} else { } else {
hasAccess = false; hasAccess = false;
@@ -329,11 +322,15 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
} }
void patientProfileChoicePopUp( void patientProfileChoicePopUp(
int index, Patient? patientProfile, double width) async { MzansiProfileProvider profileProvider,
var firstLetterFName = widget.patientAccesses[index].fname; PatientManagerProvider patientManagerProvider,
var firstLetterLName = widget.patientAccesses[index].lname; int index,
double width,
) async {
var firstLetterFName = patientManagerProvider.myPaitentList![index].fname;
var firstLetterLName = patientManagerProvider.myPaitentList![index].lname;
setState(() { setState(() {
idController.text = widget.patientAccesses[index].id_no; idController.text = patientManagerProvider.myPaitentList![index].id_no;
fnameController.text = firstLetterFName; fnameController.text = firstLetterFName;
lnameController.text = firstLetterLName; lnameController.text = firstLetterLName;
}); });
@@ -405,7 +402,8 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
children: [ children: [
MihButton( MihButton(
onPressed: () { onPressed: () {
appointmentPopUp(index, width); appointmentPopUp(profileProvider,
patientManagerProvider, index, width);
}, },
buttonColor: MihColors.getGreenColor( buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == MzansiInnovationHub.of(context)!.theme.mode ==
@@ -423,25 +421,14 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
), ),
), ),
MihButton( MihButton(
onPressed: () { onPressed: () async {
await MihPatientServices().getPatientDetails(
patientManagerProvider.myPaitentList![index].app_id,
patientManagerProvider);
context.pop(); context.pop();
context.pushNamed('patientManagerPatient', context.pushNamed(
extra: PatientViewArguments( 'patientManagerPatient',
widget.signedInUser, );
patientProfile,
widget.businessUser,
widget.business,
"business",
));
// Navigator.of(context)
// .pushNamed('/patient-manager/patient',
// arguments: PatientViewArguments(
// widget.signedInUser,
// patientProfile,
// widget.businessUser,
// widget.business,
// "business",
// ));
}, },
buttonColor: MihColors.getSecondaryColor( buttonColor: MihColors.getSecondaryColor(
MzansiInnovationHub.of(context)!.theme.mode == MzansiInnovationHub.of(context)!.theme.mode ==
@@ -468,33 +455,43 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
); );
} }
Widget displayMyPatientTile(int index, double width) { Widget displayMyPatientTile(
MzansiProfileProvider profileProvider,
PatientManagerProvider patientManagerProvider,
int index,
double width,
) {
var firstName = ""; var firstName = "";
var lastName = ""; var lastName = "";
String access = widget.patientAccesses[index].status.toUpperCase(); String access =
patientManagerProvider.myPaitentList![index].status.toUpperCase();
TextSpan accessWithColour; TextSpan accessWithColour;
var hasAccess = false; var hasAccess = false;
hasAccess = hasAccessToProfile(index); hasAccess = hasAccessToProfile(patientManagerProvider, index);
//print(hasAccess); //print(hasAccess);
if (access == "APPROVED") { if (access == "APPROVED") {
firstName = widget.patientAccesses[index].fname; firstName = patientManagerProvider.myPaitentList![index].fname;
lastName = widget.patientAccesses[index].lname; lastName = patientManagerProvider.myPaitentList![index].lname;
accessWithColour = TextSpan( accessWithColour = TextSpan(
text: "$access\n", text: "$access\n",
style: TextStyle( style: TextStyle(
color: MihColors.getGreenColor( color: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"))); MzansiInnovationHub.of(context)!.theme.mode == "Dark")));
} else if (access == "PENDING") { } else if (access == "PENDING") {
firstName = "${widget.patientAccesses[index].fname[0]}********"; firstName =
lastName = "${widget.patientAccesses[index].lname[0]}********"; "${patientManagerProvider.myPaitentList![index].fname[0]}********";
lastName =
"${patientManagerProvider.myPaitentList![index].lname[0]}********";
accessWithColour = TextSpan( accessWithColour = TextSpan(
text: "$access\n", text: "$access\n",
style: TextStyle( style: TextStyle(
color: MihColors.getGreyColor( color: MihColors.getGreyColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"))); MzansiInnovationHub.of(context)!.theme.mode == "Dark")));
} else { } else {
firstName = "${widget.patientAccesses[index].fname[0]}********"; firstName =
lastName = "${widget.patientAccesses[index].lname[0]}********"; "${patientManagerProvider.myPaitentList![index].fname[0]}********";
lastName =
"${patientManagerProvider.myPaitentList![index].lname[0]}********";
accessWithColour = TextSpan( accessWithColour = TextSpan(
text: "$access\n", text: "$access\n",
style: TextStyle( style: TextStyle(
@@ -512,7 +509,8 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
), ),
subtitle: RichText( subtitle: RichText(
text: TextSpan( text: TextSpan(
text: "ID No.: ${widget.patientAccesses[index].id_no}\n", text:
"ID No.: ${patientManagerProvider.myPaitentList![index].id_no}\n",
style: DefaultTextStyle.of(context).style, style: DefaultTextStyle.of(context).style,
children: <TextSpan>[ children: <TextSpan>[
const TextSpan(text: "Access: "), const TextSpan(text: "Access: "),
@@ -520,18 +518,16 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
]), ]),
), ),
onTap: () async { onTap: () async {
Patient? p;
if (hasAccess) { if (hasAccess) {
await MIHApiCalls.fetchPatientByAppId( await MihPatientServices()
widget.patientAccesses[index].app_id) .getPatientDetails(
.then((result) { patientManagerProvider.myPaitentList![index].app_id,
setState(() { patientManagerProvider)
p = result; .then((result) {});
}); patientProfileChoicePopUp(
}); profileProvider, patientManagerProvider, index, width);
patientProfileChoicePopUp(index, p, width);
} else { } else {
noAccessWarning(index); noAccessWarning(patientManagerProvider, index);
} }
}, },
trailing: Icon( trailing: Icon(
@@ -555,19 +551,25 @@ class _BuildPatientsListState extends State<BuildMyPatientListList> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double screenWidth = MediaQuery.of(context).size.width; double screenWidth = MediaQuery.of(context).size.width;
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.myPaitentList!.length,
itemBuilder: (context, index) {
return displayMyPatientTile(
profileProvider, patientManagerProvider, index, screenWidth);
},
); );
}, },
itemCount: widget.patientAccesses.length,
itemBuilder: (context, index) {
return displayMyPatientTile(index, screenWidth);
},
); );
} }
} }

View File

@@ -27,7 +27,6 @@ class _PatManagerTileState extends State<PatManagerTile> {
onTap: () { onTap: () {
context.goNamed( context.goNamed(
'patientManager', 'patientManager',
extra: widget.arguments,
); );
// Navigator.of(context).pushNamed( // Navigator.of(context).pushNamed(
// '/patient-manager', // '/patient-manager',

View File

@@ -1,31 +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/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_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_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart'; import 'package:mzansi_innovation_hub/mih_packages/patient_manager/pat_manager/list_builders/build_my_patient_list_list.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class MyPatientList extends StatefulWidget { class MyPatientList extends StatefulWidget {
final AppUser signedInUser;
final Business? business;
final BusinessUser? businessUser;
final bool personalSelected;
const MyPatientList({ const MyPatientList({
super.key, super.key,
required this.signedInUser,
this.business,
this.businessUser,
this.personalSelected = false,
}); });
@override @override
@@ -33,7 +23,6 @@ class MyPatientList extends StatefulWidget {
} }
class _MyPatientListState extends State<MyPatientList> { class _MyPatientListState extends State<MyPatientList> {
late Future<List<PatientAccess>> _myPatientList;
TextEditingController _myPatientSearchController = TextEditingController(); TextEditingController _myPatientSearchController = TextEditingController();
final FocusNode _searchFocusNode = FocusNode(); final FocusNode _searchFocusNode = FocusNode();
bool hasSearchedBefore = false; bool hasSearchedBefore = false;
@@ -42,7 +31,8 @@ class _MyPatientListState extends State<MyPatientList> {
final FocusNode _focusNode = FocusNode(); final FocusNode _focusNode = FocusNode();
Widget myPatientListTool(double width) { Widget myPatientListTool(MzansiProfileProvider profileProvider,
PatientManagerProvider patientManagerProvider, double width) {
return MihSingleChildScroll( return MihSingleChildScroll(
child: Column(mainAxisSize: MainAxisSize.max, children: [ child: Column(mainAxisSize: MainAxisSize.max, children: [
Padding( Padding(
@@ -56,10 +46,11 @@ class _MyPatientListState extends State<MyPatientList> {
hintColor: MihColors.getPrimaryColor( hintColor: MihColors.getPrimaryColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onPrefixIconTap: () { onPrefixIconTap: () {
setState(() { setState(() async {
_myPatientIdSearchString = _myPatientSearchController.text; _myPatientIdSearchString = _myPatientSearchController.text;
_myPatientList = MIHApiCalls.getPatientAccessListOfBusiness( await MihPatientServices().getPatientAccessListOfBusiness(
widget.business!.business_id); patientManagerProvider,
profileProvider.business!.business_id);
}); });
}, },
onClearIconTap: () { onClearIconTap: () {
@@ -67,57 +58,21 @@ class _MyPatientListState extends State<MyPatientList> {
_myPatientSearchController.clear(); _myPatientSearchController.clear();
_myPatientIdSearchString = ""; _myPatientIdSearchString = "";
}); });
getMyPatientList(); getMyPatientList(profileProvider, patientManagerProvider);
}, },
searchFocusNode: _searchFocusNode, searchFocusNode: _searchFocusNode,
), ),
), ),
//spacer //spacer
const SizedBox(height: 10), const SizedBox(height: 10),
FutureBuilder( displayMyPatientList(patientManagerProvider),
future: _myPatientList,
builder: (context, snapshot) {
//print("patient Liust ${snapshot.data}");
if (snapshot.connectionState == ConnectionState.waiting) {
return const Mihloadingcircle();
} else if (snapshot.connectionState == ConnectionState.done &&
snapshot.hasData) {
List<PatientAccess> patientsAccessList;
if (_myPatientIdSearchString == "") {
patientsAccessList = snapshot.data!;
} else {
patientsAccessList = filterAccessResults(
snapshot.data!, _myPatientIdSearchString);
//print(patientsList);
}
return displayMyPatientList(patientsAccessList);
} else {
return Center(
child: Text(
"Error pulling Patient Access Data\n$baseUrl/access-requests/business/patient/${widget.business!.business_id}",
style: TextStyle(
fontSize: 25,
color: MihColors.getRedColor(
MzansiInnovationHub.of(context)!.theme.mode ==
"Dark")),
textAlign: TextAlign.center,
),
);
}
},
),
]), ]),
); );
} }
Widget displayMyPatientList(List<PatientAccess> patientsAccessList) { Widget displayMyPatientList(PatientManagerProvider patientManagerProvider) {
if (patientsAccessList.isNotEmpty) { if (patientManagerProvider.myPaitentList!.isNotEmpty) {
return BuildMyPatientListList( return BuildMyPatientListList();
patientAccesses: patientsAccessList,
signedInUser: widget.signedInUser,
business: widget.business,
businessUser: widget.businessUser,
);
} }
if (hasSearchedBefore && _myPatientIdSearchString.isNotEmpty) { if (hasSearchedBefore && _myPatientIdSearchString.isNotEmpty) {
return Column( return Column(
@@ -228,10 +183,11 @@ class _MyPatientListState extends State<MyPatientList> {
return templist; return templist;
} }
void getMyPatientList() { Future<void> getMyPatientList(MzansiProfileProvider profileProvider,
PatientManagerProvider patientManagerProvider) async {
await MihPatientServices().getPatientAccessListOfBusiness(
patientManagerProvider, profileProvider.business!.business_id);
setState(() { setState(() {
_myPatientList = MIHApiCalls.getPatientAccessListOfBusiness(
widget.business!.business_id);
hasSearchedBefore = true; hasSearchedBefore = true;
}); });
} }
@@ -239,8 +195,6 @@ class _MyPatientListState extends State<MyPatientList> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
_myPatientList = MIHApiCalls.getPatientAccessListOfBusiness(
widget.business!.business_id);
} }
@override @override
@@ -256,10 +210,16 @@ class _MyPatientListState extends State<MyPatientList> {
Widget build(BuildContext context) { Widget build(BuildContext context) {
final Size size = MediaQuery.sizeOf(context); final Size size = MediaQuery.sizeOf(context);
final double width = size.width; final double width = size.width;
return MihPackageToolBody( return Consumer2<MzansiProfileProvider, PatientManagerProvider>(
borderOn: false, builder: (BuildContext context, MzansiProfileProvider profileProvider,
innerHorizontalPadding: 10, PatientManagerProvider patientManagerProvider, Widget? child) {
bodyItem: myPatientListTool(width), return MihPackageToolBody(
borderOn: false,
innerHorizontalPadding: 10,
bodyItem:
myPatientListTool(profileProvider, patientManagerProvider, width),
);
},
); );
} }
} }

View File

@@ -5,6 +5,7 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_alert.dart';
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_config/mih_colors.dart'; import 'package:mzansi_innovation_hub/mih_config/mih_colors.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_alert_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart'; import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart';
@@ -22,27 +23,14 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
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_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_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/appointment.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.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_packages/calendar/builder/build_appointment_list.dart'; import 'package:mzansi_innovation_hub/mih_packages/calendar/builder/build_appointment_list.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class WaitingRoom extends StatefulWidget { class WaitingRoom extends StatefulWidget {
final AppUser signedInUser;
final Business? business;
final BusinessUser? businessUser;
final bool personalSelected;
final Function(int) onIndexChange;
const WaitingRoom({ const WaitingRoom({
super.key, super.key,
required this.signedInUser,
required this.business,
required this.businessUser,
required this.personalSelected,
required this.onIndexChange,
}); });
@override @override
@@ -71,8 +59,12 @@ class _WaitingRoomState extends State<WaitingRoom> {
// Business Appointment Tool // Business Appointment Tool
Widget getBusinessAppointmentsTool(double width) { Widget getBusinessAppointmentsTool(double width) {
return Consumer<MihCalendarProvider>( return Consumer3<MzansiProfileProvider, PatientManagerProvider,
builder: (BuildContext context, MihCalendarProvider mihCalendarProvider, MihCalendarProvider>(
builder: (BuildContext context,
MzansiProfileProvider profileProvider,
PatientManagerProvider patientManagerProvider,
MihCalendarProvider mihCalendarProvider,
Widget? child) { Widget? child) {
if (isLoading) { if (isLoading) {
return const Center( return const Center(
@@ -132,7 +124,8 @@ class _WaitingRoomState extends State<WaitingRoom> {
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
onTap: () { onTap: () {
// addAppointmentWindow(); // addAppointmentWindow();
appointmentTypeSelection(mihCalendarProvider, width); appointmentTypeSelection(profileProvider,
patientManagerProvider, mihCalendarProvider, width);
}, },
) )
], ],
@@ -237,7 +230,10 @@ class _WaitingRoomState extends State<WaitingRoom> {
} }
void appointmentTypeSelection( void appointmentTypeSelection(
MihCalendarProvider mihCalendarProvider, double width) { MzansiProfileProvider profileProvider,
PatientManagerProvider patientManagerProvider,
MihCalendarProvider mihCalendarProvider,
double width) {
String question = "What type of appointment would you like to add?"; String question = "What type of appointment would you like to add?";
question += question +=
"\n\nExisting Patient: Add an appointment for an patient your practice has access to."; "\n\nExisting Patient: Add an appointment for an patient your practice has access to.";
@@ -268,7 +264,7 @@ class _WaitingRoomState extends State<WaitingRoom> {
const SizedBox(height: 15), const SizedBox(height: 15),
MihButton( MihButton(
onPressed: () { onPressed: () {
widget.onIndexChange(1); patientManagerProvider.setPatientManagerIndex(1);
context.pop(); context.pop();
}, },
buttonColor: MihColors.getGreenColor( buttonColor: MihColors.getGreenColor(
@@ -287,7 +283,7 @@ class _WaitingRoomState extends State<WaitingRoom> {
const SizedBox(height: 10), const SizedBox(height: 10),
MihButton( MihButton(
onPressed: () { onPressed: () {
widget.onIndexChange(2); patientManagerProvider.setPatientManagerIndex(2);
context.pop(); context.pop();
}, },
buttonColor: MihColors.getGreenColor( buttonColor: MihColors.getGreenColor(
@@ -307,7 +303,8 @@ class _WaitingRoomState extends State<WaitingRoom> {
MihButton( MihButton(
onPressed: () { onPressed: () {
Navigator.pop(context); Navigator.pop(context);
addAppointmentWindow(mihCalendarProvider, width); addAppointmentWindow(
profileProvider, mihCalendarProvider, width);
}, },
buttonColor: MihColors.getGreenColor( buttonColor: MihColors.getGreenColor(
MzansiInnovationHub.of(context)!.theme.mode == "Dark"), MzansiInnovationHub.of(context)!.theme.mode == "Dark"),
@@ -329,7 +326,7 @@ class _WaitingRoomState extends State<WaitingRoom> {
); );
} }
void addAppointmentWindow( void addAppointmentWindow(MzansiProfileProvider profileProvider,
MihCalendarProvider mihCalendarProvider, double width) { MihCalendarProvider mihCalendarProvider, double width) {
showDialog( showDialog(
context: context, context: context,
@@ -411,7 +408,8 @@ class _WaitingRoomState extends State<WaitingRoom> {
child: MihButton( child: MihButton(
onPressed: () { onPressed: () {
if (_formKey.currentState!.validate()) { if (_formKey.currentState!.validate()) {
addAppointmentCall(mihCalendarProvider); addAppointmentCall(
profileProvider, mihCalendarProvider);
} else { } else {
MihAlertServices().formNotFilledCompletely(context); MihAlertServices().formNotFilledCompletely(context);
} }
@@ -442,34 +440,23 @@ class _WaitingRoomState extends State<WaitingRoom> {
); );
} }
Future<void> addAppointmentCall( Future<void> addAppointmentCall(MzansiProfileProvider profileProvider,
MihCalendarProvider mihCalendarProvider) async { MihCalendarProvider mihCalendarProvider) async {
if (isAppointmentInputValid()) { if (isAppointmentInputValid()) {
int statusCode; int statusCode;
if (widget.personalSelected == false) { statusCode = await MihMzansiCalendarApis.addBusinessAppointment(
statusCode = await MihMzansiCalendarApis.addBusinessAppointment( profileProvider.user!,
widget.signedInUser, profileProvider.business!,
widget.business!, profileProvider.businessUser!,
widget.businessUser!, true,
true, _appointmentTitleController.text,
_appointmentTitleController.text, _appointmentDescriptionIDController.text,
_appointmentDescriptionIDController.text, _appointmentDateController.text,
_appointmentDateController.text, _appointmentTimeController.text,
_appointmentTimeController.text, mihCalendarProvider,
mihCalendarProvider, context,
context, );
);
} else {
statusCode = await MihMzansiCalendarApis.addPersonalAppointment(
widget.signedInUser,
_appointmentTitleController.text,
_appointmentDescriptionIDController.text,
_appointmentDateController.text,
_appointmentTimeController.text,
mihCalendarProvider,
context,
);
}
if (statusCode == 201) { if (statusCode == 201) {
context.pop(); context.pop();
successPopUp("Successfully Added Appointment", successPopUp("Successfully Added Appointment",

View File

@@ -2,17 +2,19 @@ import 'package:go_router/go_router.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_action.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_package_tools.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_providers/mih_calendar_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_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_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';
import 'package:mzansi_innovation_hub/mih_services/mih_mzansi_calendar_services.dart';
import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart';
import 'package:provider/provider.dart';
class PatManager extends StatefulWidget { class PatManager extends StatefulWidget {
final PatManagerArguments arguments;
const PatManager({ const PatManager({
super.key, super.key,
required this.arguments,
}); });
@override @override
@@ -20,11 +22,39 @@ class PatManager extends StatefulWidget {
} }
class _PatManagerState extends State<PatManager> { class _PatManagerState extends State<PatManager> {
int _selcetedIndex = 0; bool isLoading = true;
void updateIndex(int index) { Future<void> initialisePatientData() async {
setState(() { setState(() {
_selcetedIndex = index; isLoading = true;
});
MzansiProfileProvider profileProvider =
context.read<MzansiProfileProvider>();
PatientManagerProvider patientManagerProvider =
context.read<PatientManagerProvider>();
MihCalendarProvider mihCalendarProvider =
context.read<MihCalendarProvider>();
patientManagerProvider.setPersonalMode(false);
if (profileProvider.business != null) {
await MihMzansiCalendarApis.getBusinessAppointments(
profileProvider.business!.business_id,
false,
mihCalendarProvider.selectedDay,
mihCalendarProvider,
);
MihPatientServices().getPatientAccessListOfBusiness(
patientManagerProvider, profileProvider.business!.business_id);
}
setState(() {
isLoading = false;
});
}
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) async {
initialisePatientData();
}); });
} }
@@ -35,24 +65,30 @@ class _PatManagerState extends State<PatManager> {
appTools: getTools(), appTools: getTools(),
appBody: getToolBody(), appBody: getToolBody(),
appToolTitles: getToolTitle(), appToolTitles: getToolTitle(),
selectedbodyIndex: _selcetedIndex, selectedbodyIndex:
context.watch<PatientManagerProvider>().patientManagerIndex,
onIndexChange: (newValue) { onIndexChange: (newValue) {
setState(() { context.read<PatientManagerProvider>().setPatientManagerIndex(newValue);
_selcetedIndex = newValue;
});
}, },
); );
} }
MihPackageAction getActionButton() { MihPackageAction getActionButton() {
PatientManagerProvider patientManagerProvider =
context.read<PatientManagerProvider>();
return MihPackageAction( return MihPackageAction(
icon: const Icon(Icons.arrow_back), icon: const Icon(Icons.arrow_back),
iconSize: 35, iconSize: 35,
onTap: () { onTap: () {
// Navigator.of(context).pop(); patientManagerProvider.setPatientProfileIndex(0);
context.goNamed( patientManagerProvider.setPatientManagerIndex(0);
'mihHome', if (!patientManagerProvider.personalMode) {
); context.pop();
} else {
context.goNamed(
'mihHome',
);
}
FocusScope.of(context).unfocus(); FocusScope.of(context).unfocus();
}, },
); );
@@ -61,55 +97,33 @@ class _PatManagerState extends State<PatManager> {
MihPackageTools getTools() { MihPackageTools getTools() {
Map<Widget, void Function()?> temp = {}; Map<Widget, void Function()?> temp = {};
temp[const Icon(Icons.calendar_month)] = () { temp[const Icon(Icons.calendar_month)] = () {
setState(() { context.read<PatientManagerProvider>().setPatientManagerIndex(0);
_selcetedIndex = 0;
});
}; };
temp[const Icon(Icons.check_box_outlined)] = () { temp[const Icon(Icons.check_box_outlined)] = () {
setState(() { context.read<PatientManagerProvider>().setPatientManagerIndex(1);
_selcetedIndex = 1;
});
}; };
temp[const Icon(Icons.search)] = () { temp[const Icon(Icons.search)] = () {
setState(() { context.read<PatientManagerProvider>().setPatientManagerIndex(2);
_selcetedIndex = 2;
});
}; };
return MihPackageTools( return MihPackageTools(
tools: temp, tools: temp,
selcetedIndex: _selcetedIndex, selcetedIndex:
context.watch<PatientManagerProvider>().patientManagerIndex,
); );
} }
List<Widget> getToolBody() { List<Widget> getToolBody() {
List<Widget> toolBodies = [ List<Widget> toolBodies = [
//appointment here WaitingRoom(),
// Appointments( MyPatientList(),
Placeholder(),
// MihPatientSearch(
// signedInUser: widget.arguments.signedInUser, // signedInUser: widget.arguments.signedInUser,
// business: widget.arguments.business, // business: widget.arguments.business,
// personalSelected: widget.arguments.personalSelected, // personalSelected: widget.arguments.personalSelected,
// businessUser: widget.arguments.businessUser,
// ), // ),
WaitingRoom(
signedInUser: widget.arguments.signedInUser,
business: widget.arguments.business,
businessUser: widget.arguments.businessUser,
personalSelected: widget.arguments.personalSelected,
onIndexChange: updateIndex,
),
MyPatientList(
signedInUser: widget.arguments.signedInUser,
business: widget.arguments.business,
businessUser: widget.arguments.businessUser,
personalSelected: widget.arguments.personalSelected,
),
MihPatientSearch(
signedInUser: widget.arguments.signedInUser,
business: widget.arguments.business,
personalSelected: widget.arguments.personalSelected,
businessUser: widget.arguments.businessUser,
),
]; ];
return toolBodies; return toolBodies;
} }

View File

@@ -4,7 +4,9 @@ import 'package:mzansi_innovation_hub/mih_components/mih_package_components/mih_
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_objects/arguments.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/arguments.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.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:provider/provider.dart';
class PatientProfileTile extends StatefulWidget { class PatientProfileTile extends StatefulWidget {
final PatientViewArguments arguments; final PatientViewArguments arguments;
@@ -26,6 +28,9 @@ class _PatientProfileTileState extends State<PatientProfileTile> {
return MihPackageTile( return MihPackageTile(
authenticateUser: true, authenticateUser: true,
onTap: () { onTap: () {
PatientManagerProvider patientManagerProvider =
context.read<PatientManagerProvider>();
patientManagerProvider.setPersonalMode(true);
context.goNamed( context.goNamed(
'patientProfile', 'patientProfile',
); );

View File

@@ -15,10 +15,8 @@ import 'package:mzansi_innovation_hub/mih_services/mih_patient_services.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
class PatientProfile extends StatefulWidget { class PatientProfile extends StatefulWidget {
final String? patientAppId;
const PatientProfile({ const PatientProfile({
super.key, super.key,
required this.patientAppId,
}); });
@override @override
@@ -36,13 +34,11 @@ class _PatientProfileState extends State<PatientProfile> {
context.read<MzansiProfileProvider>(); context.read<MzansiProfileProvider>();
PatientManagerProvider patientManagerProvider = PatientManagerProvider patientManagerProvider =
context.read<PatientManagerProvider>(); context.read<PatientManagerProvider>();
String? app_id = widget.patientAppId ?? profileProvider.user!.app_id; String? app_id = profileProvider.user!.app_id;
if (patientManagerProvider.selectedPatient == null) { if (patientManagerProvider.selectedPatient == null) {
await MihPatientServices() await MihPatientServices()
.getPatientDetails(app_id, patientManagerProvider); .getPatientDetails(app_id, patientManagerProvider);
} }
if (patientManagerProvider.selectedPatient == null) { if (patientManagerProvider.selectedPatient == null) {
// go to set up patient package // go to set up patient package
context.goNamed("patientProfileSetup"); context.goNamed("patientProfileSetup");
@@ -61,7 +57,9 @@ class _PatientProfileState extends State<PatientProfile> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
initialisePatientData(); WidgetsBinding.instance.addPostFrameCallback((_) async {
initialisePatientData();
});
} }
@override @override
@@ -87,7 +85,6 @@ class _PatientProfileState extends State<PatientProfile> {
iconSize: 35, iconSize: 35,
onTap: () { onTap: () {
patientManagerProvider.setPatientProfileIndex(0); patientManagerProvider.setPatientProfileIndex(0);
patientManagerProvider.setPatientManagerIndex(0);
if (!patientManagerProvider.personalMode) { if (!patientManagerProvider.personalMode) {
context.pop(); context.pop();
} else { } else {

View File

@@ -129,7 +129,6 @@ class MIHClaimStatementGenerationApi {
List<ClaimStatementFile> docList = List<ClaimStatementFile>.from( List<ClaimStatementFile> docList = List<ClaimStatementFile>.from(
l.map((model) => ClaimStatementFile.fromJson(model))); l.map((model) => ClaimStatementFile.fromJson(model)));
//print("Here3"); //print("Here3");
print(docList);
patientManagerProvider.setClaimsDocuments( patientManagerProvider.setClaimsDocuments(
patientClaimsDocuments: docList); patientClaimsDocuments: docList);
return docList; return docList;

View File

@@ -4,7 +4,6 @@ import 'package:go_router/go_router.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_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/appointment.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.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.dart';
import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/business_user.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@@ -291,7 +290,7 @@ class MihMzansiCalendarApis {
AppUser signedInUser, AppUser signedInUser,
bool personalSelected, bool personalSelected,
String patientAppId, String patientAppId,
BusinessArguments businessArgs, String businessId,
String title, String title,
String description, String description,
String date, String date,
@@ -306,7 +305,7 @@ class MihMzansiCalendarApis {
}, },
body: jsonEncode(<String, dynamic>{ body: jsonEncode(<String, dynamic>{
"app_id": patientAppId, "app_id": patientAppId,
"business_id": businessArgs.business?.business_id, "business_id": businessId,
"title": title, "title": title,
"description": description, "description": description,
"date": date, "date": date,

View File

@@ -4,6 +4,7 @@ import 'package:file_picker/file_picker.dart';
import 'package:ken_logger/ken_logger.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/patients.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/patients.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';
@@ -289,4 +290,21 @@ class MihPatientServices {
} }
return response.statusCode; return response.statusCode;
} }
Future<List<PatientAccess>> getPatientAccessListOfBusiness(
PatientManagerProvider patientManagerProvider,
String business_id,
) async {
final response = await http.get(Uri.parse(
"${AppEnviroment.baseApiUrl}/access-requests/business/patient/$business_id"));
if (response.statusCode == 200) {
Iterable l = jsonDecode(response.body);
List<PatientAccess> patientAccesses = List<PatientAccess>.from(
l.map((model) => PatientAccess.fromJson(model)));
patientManagerProvider.setMyPatientList(myPaitentList: patientAccesses);
return patientAccesses;
} else {
throw Exception('failed to pull patient access List for business');
}
}
} }

View File

@@ -126,29 +126,6 @@ class MIHApiCalls {
} }
} }
/// This function is used to get list of access the business has.
///
/// Patameters: String business_id.
///
/// Returns List<PatientAccess> (List of access that match the above parameters).
static Future<List<PatientAccess>> getPatientAccessListOfBusiness(
String business_id) async {
final response = await http.get(Uri.parse(
"${AppEnviroment.baseApiUrl}/access-requests/business/patient/$business_id"));
// var errorCode = response.statusCode.toString();
// print(response.statusCode);
// print(response.body);
if (response.statusCode == 200) {
Iterable l = jsonDecode(response.body);
List<PatientAccess> patientAccesses = List<PatientAccess>.from(
l.map((model) => PatientAccess.fromJson(model)));
return patientAccesses;
} else {
throw Exception('failed to pull patient access List for business');
}
}
/// This function is used to UPDATE access the business has. /// This function is used to UPDATE access the business has.
/// ///
/// Patameters:- /// Patameters:-