diff --git a/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin b/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin index ba82af84..48967666 100644 Binary files a/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin and b/File_Storage/Mzanzi_Innovation_Hub/.minio.sys/buckets/.tracker.bin differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Docs.pdf/85681ea1-d0e8-48df-914f-2a65a92939e7/part.1 b/File_Storage/Mzanzi_Innovation_Hub/mih/Docs.pdf/85681ea1-d0e8-48df-914f-2a65a92939e7/part.1 new file mode 100644 index 00000000..c6a1b65c Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Docs.pdf/85681ea1-d0e8-48df-914f-2a65a92939e7/part.1 differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Docs.pdf/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/Docs.pdf/xl.meta new file mode 100644 index 00000000..9888fa4b Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Docs.pdf/xl.meta differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-03.pdf/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-03.pdf/xl.meta new file mode 100644 index 00000000..00278a90 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-03.pdf/xl.meta differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-04.pdf/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-04.pdf/xl.meta new file mode 100644 index 00000000..e75a6c94 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-04.pdf/xl.meta differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-05.pdf/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-05.pdf/xl.meta new file mode 100644 index 00000000..08b7a04b Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Med-Cert-Yasien Meth-2024-07-05.pdf/xl.meta differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/SBGRF-Withdrawal-Option-Form.pdf/e7343ebd-8904-47c6-8500-e40da0e72d65/part.1 b/File_Storage/Mzanzi_Innovation_Hub/mih/SBGRF-Withdrawal-Option-Form.pdf/e7343ebd-8904-47c6-8500-e40da0e72d65/part.1 new file mode 100644 index 00000000..e226dec3 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/SBGRF-Withdrawal-Option-Form.pdf/e7343ebd-8904-47c6-8500-e40da0e72d65/part.1 differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/SBGRF-Withdrawal-Option-Form.pdf/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/SBGRF-Withdrawal-Option-Form.pdf/xl.meta new file mode 100644 index 00000000..b13bdc41 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/SBGRF-Withdrawal-Option-Form.pdf/xl.meta differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Screenshot_20230623_175846_Twitter.jpg/8e7ec27e-f34c-4893-94bd-2d353d8fddd3/part.1 b/File_Storage/Mzanzi_Innovation_Hub/mih/Screenshot_20230623_175846_Twitter.jpg/8e7ec27e-f34c-4893-94bd-2d353d8fddd3/part.1 new file mode 100644 index 00000000..aebfa3c2 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Screenshot_20230623_175846_Twitter.jpg/8e7ec27e-f34c-4893-94bd-2d353d8fddd3/part.1 differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/Screenshot_20230623_175846_Twitter.jpg/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/Screenshot_20230623_175846_Twitter.jpg/xl.meta new file mode 100644 index 00000000..0377e9d0 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/Screenshot_20230623_175846_Twitter.jpg/xl.meta differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/4ca36f78-3ff7-4d30-b01c-895fe8d6266b/part.1 b/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/4ca36f78-3ff7-4d30-b01c-895fe8d6266b/part.1 new file mode 100644 index 00000000..55564ea2 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/4ca36f78-3ff7-4d30-b01c-895fe8d6266b/part.1 differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/4ca36f78-3ff7-4d30-b01c-895fe8d6266b/part.2 b/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/4ca36f78-3ff7-4d30-b01c-895fe8d6266b/part.2 new file mode 100644 index 00000000..b39628a9 Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/4ca36f78-3ff7-4d30-b01c-895fe8d6266b/part.2 differ diff --git a/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/xl.meta b/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/xl.meta new file mode 100644 index 00000000..4b15fb7b Binary files /dev/null and b/File_Storage/Mzanzi_Innovation_Hub/mih/asus.jpg/xl.meta differ diff --git a/Frontend/patient_manager/lib/components/BuildFileView.dart b/Frontend/patient_manager/lib/components/BuildFileView.dart new file mode 100644 index 00000000..8ca1a84e --- /dev/null +++ b/Frontend/patient_manager/lib/components/BuildFileView.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; +import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; + +class BuildFileView extends StatefulWidget { + final String pdfLink; + const BuildFileView({super.key, required this.pdfLink}); + + @override + State createState() => _BuildFileViewState(); +} + +class _BuildFileViewState extends State { + late PdfViewerController pdfViewerController = PdfViewerController(); + + String getExtType(String pdfLink) { + //print(pdfLink.split(".")[1]); + return pdfLink.split(".")[1]; + } + + @override + Widget build(BuildContext context) { + if (getExtType(widget.pdfLink).toLowerCase() == "pdf") { + return SizedBox( + width: 700, + child: Column( + children: [ + Expanded( + child: SfPdfViewer.network( + widget.pdfLink, + controller: pdfViewerController, + ), + ), + ], + ), + ); + } else { + return InteractiveViewer( + maxScale: 5.0, + //minScale: 0., + child: Image.network(widget.pdfLink), + ); + } + } +} diff --git a/Frontend/patient_manager/lib/components/BuildPdfView.dart b/Frontend/patient_manager/lib/components/BuildPdfView.dart deleted file mode 100644 index 3a9b6fb0..00000000 --- a/Frontend/patient_manager/lib/components/BuildPdfView.dart +++ /dev/null @@ -1,26 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart'; - -class BuildPDFView extends StatefulWidget { - final String pdfLink; - const BuildPDFView({super.key, required this.pdfLink}); - - @override - State createState() => _BuildPDFViewState(); -} - -class _BuildPDFViewState extends State { - @override - Widget build(BuildContext context) { - return SizedBox( - width: 700, - child: Column( - children: [ - Expanded( - child: SfPdfViewer.network(widget.pdfLink), - ), - ], - ), - ); - } -} diff --git a/Frontend/patient_manager/lib/components/buildFilesList.dart b/Frontend/patient_manager/lib/components/buildFilesList.dart index 3a3ae325..6b46d83a 100644 --- a/Frontend/patient_manager/lib/components/buildFilesList.dart +++ b/Frontend/patient_manager/lib/components/buildFilesList.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; -import 'package:patient_manager/components/BuildPdfView.dart'; +import 'package:patient_manager/components/BuildFileView.dart'; +import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/objects/files.dart'; -import 'dart:js' as js; +//import 'dart:js' as js; +import "package:universal_html/html.dart" as html; class BuildFilesList extends StatefulWidget { final List files; @@ -14,9 +16,78 @@ class BuildFilesList extends StatefulWidget { State createState() => _BuildFilesListState(); } -int indexOn = 0; - class _BuildFilesListState extends State { + int indexOn = 0; + + void viewFilePopUp(String filename) { + showDialog( + context: context, + builder: (context) => Dialog( + child: Stack( + children: [ + Container( + padding: const EdgeInsets.all(10.0), + width: 800.0, + //height: 475.0, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(25.0), + border: Border.all(color: Colors.blueAccent, width: 5.0), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + filename, + textAlign: TextAlign.center, + style: const TextStyle( + color: Colors.blueAccent, + fontSize: 35.0, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 25.0), + Expanded( + child: BuildFileView( + pdfLink: "http://localhost:9000/mih/$filename")), + SizedBox( + width: 300, + height: 100, + child: MyButton( + onTap: () { + html.window.open( + 'http://localhost:9000/mih/$filename', 'download'); + }, + buttonText: "Dowload", + buttonColor: Colors.blueAccent, + textColor: Colors.white, + ), + ) + ], + ), + ), + Positioned( + top: 5, + right: 5, + width: 50, + height: 50, + child: IconButton( + onPressed: () { + Navigator.pop(context); + }, + icon: const Icon( + Icons.close, + color: Colors.red, + size: 35, + ), + ), + ), + ], + ), + ), + ); + } + @override Widget build(BuildContext context) { return SizedBox( @@ -35,36 +106,7 @@ class _BuildFilesListState extends State { subtitle: Text(widget.files[index].insert_date), trailing: const Icon(Icons.arrow_forward), onTap: () { - showDialog( - context: context, - builder: (context) => AlertDialog( - title: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text(widget.files[index].file_name), - IconButton( - onPressed: () { - js.context.callMethod('open', [ - 'http://localhost:9000/mih/${widget.files[index].file_name}' - ]); - //print(object) - }, - icon: const Icon(Icons.download), - ), - ], - ), - content: BuildPDFView( - pdfLink: - "http://localhost:9000/mih/${widget.files[index].file_name}"), - actions: [ - TextButton( - onPressed: () { - Navigator.pop(context); - }, - child: const Text("Close")) - ], - ), - ); + viewFilePopUp(widget.files[index].file_name); }, ); }, diff --git a/Frontend/patient_manager/lib/components/buildNotesList.dart b/Frontend/patient_manager/lib/components/buildNotesList.dart index 3fc0595d..622b5385 100644 --- a/Frontend/patient_manager/lib/components/buildNotesList.dart +++ b/Frontend/patient_manager/lib/components/buildNotesList.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:patient_manager/components/myMLTextInput.dart'; +//import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/objects/notes.dart'; class BuildNotesList extends StatefulWidget { @@ -12,9 +14,87 @@ class BuildNotesList extends StatefulWidget { State createState() => _BuildNotesListState(); } -int indexOn = 0; - class _BuildNotesListState extends State { + final noteTextController = TextEditingController(); + int indexOn = 0; + + void viewNotePopUp(String title, String note) { + setState(() { + noteTextController.text = note; + }); + showDialog( + context: context, + builder: (context) => Dialog( + child: Stack( + children: [ + Container( + padding: const EdgeInsets.all(10.0), + width: 700.0, + //height: 475.0, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(25.0), + border: Border.all(color: Colors.blueAccent, width: 5.0), + ), + child: Column( + //mainAxisSize: MainAxisSize.max, + children: [ + Text( + title, + textAlign: TextAlign.center, + style: const TextStyle( + color: Colors.blueAccent, + fontSize: 35.0, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(height: 25.0), + Expanded( + child: MyMLTextField( + controller: noteTextController, + hintText: "Note Details", + editable: false, + required: false, + ), + ), + const SizedBox(height: 25.0), + // SizedBox( + // width: 300, + // height: 100, + // child: MyButton( + // onTap: () { + // Navigator.pop(context); + // }, + // buttonText: "Close", + // buttonColor: Colors.blueAccent, + // textColor: Colors.white, + // ), + // ) + ], + ), + ), + Positioned( + top: 5, + right: 5, + width: 50, + height: 50, + child: IconButton( + onPressed: () { + Navigator.pop(context); + }, + icon: const Icon( + Icons.close, + color: Colors.red, + size: 35, + ), + ), + ), + ], + ), + ), + ); + } + @override Widget build(BuildContext context) { return SizedBox( @@ -34,27 +114,29 @@ class _BuildNotesListState extends State { "${widget.notes[index].insert_date}:\n${widget.notes[index].note_text}"), //Text(widget.notes[index].note_text), trailing: const Icon(Icons.arrow_forward), onTap: () { - showDialog( - context: context, - builder: (context) => AlertDialog( - title: Center(child: Text(widget.notes[index].note_name)), - content: SizedBox( - width: 700, - height: 250, - child: Text( - "${widget.notes[index].insert_date}:\n${widget.notes[index].note_text}", - style: TextStyle(fontSize: 16), - ), - ), - actions: [ - TextButton( - onPressed: () { - Navigator.pop(context); - }, - child: const Text("Close")) - ], - ), - ); + viewNotePopUp(widget.notes[index].note_name, + "${widget.notes[index].insert_date}:\n${widget.notes[index].note_text}"); + // showDialog( + // context: context, + // builder: (context) => AlertDialog( + // title: Center(child: Text(widget.notes[index].note_name)), + // content: SizedBox( + // width: 700, + // height: 250, + // child: Text( + // "${widget.notes[index].insert_date}:\n${widget.notes[index].note_text}", + // style: TextStyle(fontSize: 16), + // ), + // ), + // actions: [ + // TextButton( + // onPressed: () { + // Navigator.pop(context); + // }, + // child: const Text("Close")) + // ], + // ), + // ); }, ); }, diff --git a/Frontend/patient_manager/lib/components/patientFiles.dart b/Frontend/patient_manager/lib/components/patientFiles.dart index e9b8f118..312fd37d 100644 --- a/Frontend/patient_manager/lib/components/patientFiles.dart +++ b/Frontend/patient_manager/lib/components/patientFiles.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:patient_manager/components/buildFilesList.dart'; import 'package:patient_manager/components/medCertInput.dart'; import 'package:patient_manager/components/myErrorMessage.dart'; +import 'package:patient_manager/components/mySuccessMessage.dart'; import 'package:patient_manager/components/myTextInput.dart'; import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/main.dart'; @@ -47,6 +48,16 @@ class _PatientFilesState extends State { late PlatformFile selected; Future generateMedCert() async { + //start loading circle + showDialog( + context: context, + builder: (context) { + return const Center( + child: CircularProgressIndicator(), + ); + }, + ); + var response1 = await http.post( Uri.parse(endpointGenFiles), headers: { @@ -85,8 +96,11 @@ class _PatientFilesState extends State { futueFiles = fetchFiles(endpointFiles + widget.patientIndex.toString()); }); - String message = "Successfully added file"; - messagePopUp(message); + // end loading circle + Navigator.of(context).pop(); + String message = + "The medical certificate $fileName has been successfully generated and added to ${widget.selectedPatient.first_name} ${widget.selectedPatient.last_name}'s record. You can now access and download it for their use."; + successPopUp(message); } else { internetConnectionPopUp(); } @@ -97,12 +111,22 @@ class _PatientFilesState extends State { Future uploadSelectedFile(PlatformFile file) async { //var strem = new http.ByteStream.fromBytes(file.bytes.) + //start loading circle + showDialog( + context: context, + builder: (context) { + return const Center( + child: CircularProgressIndicator(), + ); + }, + ); + var request = http.MultipartRequest('POST', Uri.parse(endpointFileUpload)); request.headers['Content-Type'] = 'multipart/form-data'; request.files.add(await http.MultipartFile.fromBytes('file', file.bytes!, filename: file.name.replaceAll(RegExp(r' '), '-'))); var response1 = await request.send(); - print(response1.statusCode); + //print(response1.statusCode); if (response1.statusCode == 200) { var response2 = await http.post( Uri.parse(endpointInsertFiles), @@ -115,15 +139,18 @@ class _PatientFilesState extends State { "patient_id": widget.patientIndex }), ); - print(response2.statusCode); + //print(response2.statusCode); if (response2.statusCode == 201) { setState(() { selectedFileController.clear(); futueFiles = fetchFiles(endpointFiles + widget.patientIndex.toString()); }); - String message = "Successfully added file"; - messagePopUp(message); + // end loading circle + Navigator.of(context).pop(); + String message = + "The medical certificate ${file.name.replaceAll(RegExp(r' '), '-')} has been successfully generated and added to ${widget.selectedPatient.first_name} ${widget.selectedPatient.last_name}'s record. You can now access and download it for their use."; + successPopUp(message); } else { internetConnectionPopUp(); } @@ -170,6 +197,18 @@ class _PatientFilesState extends State { } } + void successPopUp(String message) { + showDialog( + context: context, + builder: (context) { + return MySuccessMessage( + successType: "Success", + successMessage: message, + ); + }, + ); + } + void messagePopUp(error) { showDialog( context: context, @@ -232,7 +271,7 @@ class _PatientFilesState extends State { ); } }, - buttonText: "Add Note", + buttonText: "Generate", buttonColor: Colors.blueAccent, textColor: Colors.white, ), @@ -295,7 +334,10 @@ class _PatientFilesState extends State { child: MyButton( onTap: () async { FilePickerResult? result = - await FilePicker.platform.pickFiles(); + await FilePicker.platform.pickFiles( + type: FileType.custom, + allowedExtensions: ['jpg', 'pdf'], + ); if (result == null) return; final selectedFile = result.files.first; setState(() { @@ -335,7 +377,7 @@ class _PatientFilesState extends State { ); } }, - buttonText: "Add Note", + buttonText: "Add File", buttonColor: Colors.blueAccent, textColor: Colors.white, ), diff --git a/Frontend/patient_manager/lib/components/patientNotes.dart b/Frontend/patient_manager/lib/components/patientNotes.dart index 5be30b1e..a5f8e390 100644 --- a/Frontend/patient_manager/lib/components/patientNotes.dart +++ b/Frontend/patient_manager/lib/components/patientNotes.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:patient_manager/components/buildNotesList.dart'; import 'package:patient_manager/components/myErrorMessage.dart'; import 'package:patient_manager/components/myMLTextInput.dart'; +import 'package:patient_manager/components/mySuccessMessage.dart'; import 'package:patient_manager/components/myTextInput.dart'; import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/objects/notes.dart'; @@ -56,13 +57,26 @@ class _PatientNotesState extends State { }); // Navigator.of(context) // .pushNamed('/patient-manager', arguments: widget.userEmail); - String message = "Successfully added Note"; - messagePopUp(message); + String message = + "Your note has been successfully added to the patients medical record. You can now view it alongside their other important information."; + successPopUp(message); } else { internetConnectionPopUp(); } } + void successPopUp(String message) { + showDialog( + context: context, + builder: (context) { + return MySuccessMessage( + successType: "Success", + successMessage: message, + ); + }, + ); + } + void internetConnectionPopUp() { showDialog( context: context, diff --git a/Frontend/patient_manager/lib/pages/patientAdd.dart b/Frontend/patient_manager/lib/pages/patientAdd.dart index 11d2873a..646fc66e 100644 --- a/Frontend/patient_manager/lib/pages/patientAdd.dart +++ b/Frontend/patient_manager/lib/pages/patientAdd.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:patient_manager/components/myErrorMessage.dart'; +import 'package:patient_manager/components/mySuccessMessage.dart'; import 'package:patient_manager/components/myTextInput.dart'; import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/objects/appUser.dart'; @@ -91,8 +92,8 @@ class _AddPatientState extends State { Navigator.of(context) .pushNamed('/patient-manager', arguments: widget.userEmail); String message = - "${fnameController.text} ${lnameController.text} Successfully added"; - messagePopUp(message); + "${fnameController.text} ${lnameController.text} has been successfully added to the Patient Manager! You can now view their details, add notes & documents, and update their information."; + successPopUp(message); } else { internetConnectionPopUp(); } @@ -118,6 +119,18 @@ class _AddPatientState extends State { ); } + void successPopUp(String message) { + showDialog( + context: context, + builder: (context) { + return MySuccessMessage( + successType: "Success", + successMessage: message, + ); + }, + ); + } + @override Widget build(BuildContext context) { return Scaffold( diff --git a/Frontend/patient_manager/lib/pages/patientEdit.dart b/Frontend/patient_manager/lib/pages/patientEdit.dart index a8f6a9f0..1306282b 100644 --- a/Frontend/patient_manager/lib/pages/patientEdit.dart +++ b/Frontend/patient_manager/lib/pages/patientEdit.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:patient_manager/components/myErrorMessage.dart'; +import 'package:patient_manager/components/mySuccessMessage.dart'; import 'package:patient_manager/components/myTextInput.dart'; import 'package:patient_manager/components/mybutton.dart'; import 'package:patient_manager/objects/appUser.dart'; @@ -85,8 +86,8 @@ class _EditPatientState extends State { if (response.statusCode == 200) { Navigator.of(context).pushNamed('/patient-manager', arguments: userEmail); String message = - "${fnameController.text} ${lnameController.text} Successfully Updated"; - messagePopUp(message); + "${fnameController.text} ${lnameController.text}'s information has been updated successfully! Their medical records and details are now current."; + successPopUp(message); } else { internetConnectionPopUp(); } @@ -116,8 +117,8 @@ class _EditPatientState extends State { if (response.statusCode == 200) { Navigator.of(context).pushNamed('/patient-manager', arguments: userEmail); String message = - "${fnameController.text} ${lnameController.text} Successfully Deleted"; - messagePopUp(message); + "${fnameController.text} ${lnameController.text}'s record has been deleted successfully. This means it will no longer be visible in patient manager and cannot be used for future appointments."; + successPopUp(message); } else { internetConnectionPopUp(); } @@ -256,6 +257,18 @@ class _EditPatientState extends State { ); } + void successPopUp(String message) { + showDialog( + context: context, + builder: (context) { + return MySuccessMessage( + successType: "Success", + successMessage: message, + ); + }, + ); + } + bool isFieldsFilled() { if (idController.text.isEmpty || fnameController.text.isEmpty || diff --git a/Frontend/patient_manager/pubspec.lock b/Frontend/patient_manager/pubspec.lock index 10924c36..3a3723f2 100644 --- a/Frontend/patient_manager/pubspec.lock +++ b/Frontend/patient_manager/pubspec.lock @@ -185,6 +185,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + charcode: + dependency: transitive + description: + name: charcode + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" + source: hosted + version: "1.3.1" checked_yaml: dependency: transitive description: @@ -241,6 +249,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.0.3" + csslib: + dependency: transitive + description: + name: csslib + sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" + url: "https://pub.dev" + source: hosted + version: "1.0.0" cupertino_icons: dependency: "direct main" description: @@ -416,6 +432,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.0" + html: + dependency: transitive + description: + name: html + sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" + url: "https://pub.dev" + source: hosted + version: "0.15.4" http: dependency: "direct main" description: @@ -989,6 +1013,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + universal_html: + dependency: "direct main" + description: + name: universal_html + sha256: "56536254004e24d9d8cfdb7dbbf09b74cf8df96729f38a2f5c238163e3d58971" + url: "https://pub.dev" + source: hosted + version: "2.2.4" + universal_io: + dependency: transitive + description: + name: universal_io + sha256: "1722b2dcc462b4b2f3ee7d188dad008b6eb4c40bbd03a3de451d82c78bba9aad" + url: "https://pub.dev" + source: hosted + version: "2.2.2" url_launcher: dependency: transitive description: diff --git a/Frontend/patient_manager/pubspec.yaml b/Frontend/patient_manager/pubspec.yaml index 5dd7fe5d..9972bd89 100644 --- a/Frontend/patient_manager/pubspec.yaml +++ b/Frontend/patient_manager/pubspec.yaml @@ -36,6 +36,7 @@ dependencies: # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.2 syncfusion_flutter_pdfviewer: ^26.1.39 + universal_html: ^2.2.4 file_picker: ^8.0.5 supabase_auth_ui: ^0.4.1 supabase_flutter: ^2.4.0 diff --git a/database/#ib_16384_0.dblwr b/database/#ib_16384_0.dblwr index a813a57e..d1723c4c 100644 Binary files a/database/#ib_16384_0.dblwr and b/database/#ib_16384_0.dblwr differ diff --git a/database/#innodb_redo/#ib_redo18 b/database/#innodb_redo/#ib_redo18 index 2f3068a9..664d4ff7 100644 Binary files a/database/#innodb_redo/#ib_redo18 and b/database/#innodb_redo/#ib_redo18 differ diff --git a/database/binlog.000051 b/database/binlog.000051 index 53f15fec..db8a11b7 100644 Binary files a/database/binlog.000051 and b/database/binlog.000051 differ diff --git a/database/ibdata1 b/database/ibdata1 index 26749c7d..8305f029 100644 Binary files a/database/ibdata1 and b/database/ibdata1 differ diff --git a/database/mysql.ibd b/database/mysql.ibd index d4167eae..ee03d786 100644 Binary files a/database/mysql.ibd and b/database/mysql.ibd differ diff --git a/database/patient_manager/patient_files.ibd b/database/patient_manager/patient_files.ibd index d10d54a6..90a57faa 100644 Binary files a/database/patient_manager/patient_files.ibd and b/database/patient_manager/patient_files.ibd differ diff --git a/database/patient_manager/patient_notes.ibd b/database/patient_manager/patient_notes.ibd index 812a36aa..0729785a 100644 Binary files a/database/patient_manager/patient_notes.ibd and b/database/patient_manager/patient_notes.ibd differ diff --git a/database/patient_manager/patients.ibd b/database/patient_manager/patients.ibd index ee002da3..5a94b035 100644 Binary files a/database/patient_manager/patients.ibd and b/database/patient_manager/patients.ibd differ diff --git a/database/undo_001 b/database/undo_001 index 619a8bec..3094c751 100644 Binary files a/database/undo_001 and b/database/undo_001 differ diff --git a/database/undo_002 b/database/undo_002 index 1336c0d2..e7c1dbd8 100644 Binary files a/database/undo_002 and b/database/undo_002 differ diff --git a/temp.pdf b/temp.pdf index 35ff7a62..3785ca54 100644 --- a/temp.pdf +++ b/temp.pdf @@ -17,17 +17,17 @@ endobj endobj 4 0 obj << -/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 100 /Length 1025 /Subtype /Image +/BitsPerComponent 8 /ColorSpace /DeviceRGB /Filter [ /ASCII85Decode /FlateDecode ] /Height 100 /Length 1042 /Subtype /Image /Type /XObject /Width 100 >> stream -Gb"/_960,J$j1SN95!t'!&SE)RS!u@.12^HrpC3WCGe^0]%f$R\j5/BAT,S;1FqQ%RD]l]I4RHPAaElT.(`#M5a]9jABMu%"]55K\1H$uCk]>QE$?o4mY5DrrL4NIY+M^[T$BT?@,':;h>K1o[\La!n!k1IX,JSAQ*knfB^G#Z11*gBsGnbL@c"c0o*-Bac:Lh3Sl6QPJBk'>Z,Wg+<#HO6aB*W>rjrFX_sg1cMnYHm0&hT6+nm_kl\O"maVn"YoXpYTJn=0WZd]H9V:)r4$_[2mqe(#PA.@R&$)Pp!tO$GKs^mPPSP0#g_k0pVdKNihYSb=[Wd/nTK%?L!o'3\!?F>?8dm=ac*k(K]R@=W^,hYMi/dJ*b@YX@t`/qZn_6!\:<*?:Xf\L,"2Ei7P1QCS`QW72Uiq`GCAu0Uj0kWH\<04eB=d>9PpjZGc]lNZ!YGHEDi04ruaNBQAK8?E!]F35Wf(%_tPZ:jP)Tp?$'_gSFIJaQcf'u_2ZASKiF[s2fS:BDLGdd~>endstream +Gb"/`8Tr!*$q#CA9;d-[QmedaFhh9"$H)W(eHtAN1e:$Gm$Oq.VXJ-Mc.Lpt$@,2iZGl3;QAnf0gI^'aWj4*).Eg7Zh0CmMMB&!nlCbGq]44oC^>0B%gdRfSht/qo=B9"P1\9cOc70:@?"A1t='!%@=o!5jb_cp/o0]7!^)qQcq4kZ8jnD3CpmA-@n)%b:laubsXSfQb`p0[Y9]_jI>P4-Iq^W_WZL[0eXABtEUNq?o1K1D!;0]FBWA!Y5mcj[+=RhL5]hF=o*%']AZTdG24Eaj>rCnVMKhTt<;F_)b5ooch$tI:543I&iNYLPqGqPMPC!Cm77iC15Ob.s5cQs5\/W)LQ,"$APkan9HB;Y"q%acr1W&5*rkquC/a&;W:7sS#2ZL[\3C7mdQk3Yun!qZ-P3('hg+d/_8,KY[NbNdc^9JRq.)=gbgR1?cLoZKkhN3(Wd-l"L+O\@`K%(VGEb/uq!X77&7.7Fd]1X'H$)'f(qgpaB-l5cs"nao#qM-f!BLm[O&=Ui#SptMDdZWV$!*g07lA``C(b259hd(u]p/3BdQ`JK&^YcJgF4L9-"V9F]mLXY0r@p)s@XNG9#CU-9lB45E?j:'_0%$=g6j7YsRQW71N(hQ9&b`Pe;AM_lHAm([6L!HL+=_`+5ToJH0I9HCCZ?#Xp&X4')j(I\F/i"L*c_dfA.4]&T/eK;e6;1HH),)gHFjS#SG$0s[>\X_/`7)CNKm]YXFl\W^AQ;cD=eRH[Ge*!Gd/=eV.a..EeTuafb%a()3p>J"ZCdP?]Ziq>dPi2`/81s?DLO-_:4f4[rD7+c98?haDC/>CKB42M9A3Q]K7PWl(miorN[oR=Zg#?PEhaulB3nr"]9*=?WLaW++>Oe8Wn:)ok1AM.4]mAA+5KkK'[Bp6[>DgVIgZoT6endstream endobj 5 0 obj << /Contents 9 0 R /MediaBox [ 0 0 595.2756 841.8898 ] /Parent 8 0 R /Resources << /Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] /XObject << -/FormXob.cd283a2c1d6ad3d76ad89881508b17eb 4 0 R +/FormXob.38e804a25cd7412fc4aa43f361bf60ca 4 0 R >> >> /Rotate 0 /Trans << @@ -42,7 +42,7 @@ endobj endobj 7 0 obj << -/Author (anonymous) /CreationDate (D:20240627140120+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240627140120+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) +/Author (anonymous) /CreationDate (D:20240704093659+00'00') /Creator (ReportLab PDF Library - www.reportlab.com) /Keywords () /ModDate (D:20240704093659+00'00') /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (unspecified) /Title (untitled) /Trapped /False >> endobj @@ -56,7 +56,7 @@ endobj /Filter [ /ASCII85Decode /FlateDecode ] /Length 446 >> stream -Gas2F>>rBm&;B$=/'anN6V0U_4K?3TN9D[8d)S%=V:m8"Jdh\9["(PTR!-p$mXF>02\a2:Zs,s.gi2m5'U4.bTRe28hdamD1]Q\L&I_%!`F4FE8GseO-K$a6=PP,uNtE.4K"lqFrR)N"Bkco:M_VMI"V,;po2;A!DIm>#_S-q6$pAM`,`#]HHr2M)DkeI:jp#F[)SBD&n&>m*NVO:SFGZiY$J>WYk;MtB%;:H=>M]!^s0!#90QI;oZ9M^;endstream +Gas2F>>p/.&;B$;($AGb.3p'5qWOc9c<)*(*qV0]K1-q\RbI#@Qh7"dFZO%UYhAK8h1^H&(L>ou"'c*Wf+aH8Pb:/$&9etKkf@tZ7IWSYZ[S485G3!n$jqdp-\V4b^W-W?V\!bXB0S3W7Qc\/_d\R@=Zg)OoX%N%`hdQY8V`Z(na5feUS536;U.#Kg0h5'eWUM,C]`2'QfZC8=hJYu'[-Zq)kDq#g.O%l=ZJ,dS^V2.V/>+R\XHZ*UMOc\Yd*t*+7)a&7b*E2AR9l(`=_A,YOo-#CUDeI>-h;H+N,+hc07.@HO4"oN":$YYbtoj!p!u^$/)+rcRt(B-EER`\[HAHCaX4+k^mcq1,\GGcUu0QjCt%EFAh6h8R0s4EVK@WCd%%Bh`4UNGT&)HHjd]2gW_]sL$0HnBY*I~>endstream endobj xref 0 10 @@ -65,15 +65,15 @@ xref 0000000114 00000 n 0000000221 00000 n 0000000333 00000 n -0000001549 00000 n -0000001815 00000 n -0000001883 00000 n -0000002179 00000 n -0000002238 00000 n +0000001566 00000 n +0000001832 00000 n +0000001900 00000 n +0000002196 00000 n +0000002255 00000 n trailer << /ID -[<712dd983c575d0108ff950f2c16588c6><712dd983c575d0108ff950f2c16588c6>] +[<9654e78acfa3634d4603cd72a8d4f7eb><9654e78acfa3634d4603cd72a8d4f7eb>] % ReportLab generated PDF document -- digest (http://www.reportlab.com) /Info 7 0 R @@ -81,5 +81,5 @@ trailer /Size 10 >> startxref -2774 +2791 %%EOF