From 11b6ec9edb897155498c9aafe8bbf9bf8a31dae0 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 4 Nov 2025 11:34:28 +0200 Subject: [PATCH] BUG: Update Appointment & Clear Coltrollers --- .../mih_providers/mih_calendar_provider.dart | 2 + .../builder/build_appointment_list.dart | 144 ++++++++++-------- .../calendar/package_tools/appointments.dart | 2 +- 3 files changed, 80 insertions(+), 68 deletions(-) diff --git a/Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart b/Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart index 40265f45..fe4ee6b6 100644 --- a/Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart +++ b/Frontend/lib/mih_components/mih_providers/mih_calendar_provider.dart @@ -1,4 +1,5 @@ import 'package:flutter/foundation.dart'; +import 'package:ken_logger/ken_logger.dart'; import 'package:mzansi_innovation_hub/mih_components/mih_objects/appointment.dart'; class MihCalendarProvider extends ChangeNotifier { @@ -57,6 +58,7 @@ class MihCalendarProvider extends ChangeNotifier { int index = personalAppointments?.indexWhere((appointment) => appointment.idappointments == updatedAppointment.idappointments) ?? -1; + KenLogger.success("Edit Patient Index: $index"); if (index != -1) { personalAppointments?[index] = updatedAppointment; notifyListeners(); diff --git a/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart b/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart index d56ef908..32481014 100644 --- a/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart +++ b/Frontend/lib/mih_packages/calendar/builder/build_appointment_list.dart @@ -3,7 +3,6 @@ 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/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_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/mzansi_profile_provider.dart'; @@ -59,6 +58,13 @@ class _BuildAppointmentListState extends State { late double width; late double height; + void clearControllers() { + widget.titleController.clear(); + widget.descriptionIDController.clear(); + widget.dateController.clear(); + widget.timeController.clear(); + } + double getPaddingSize() { if (MzansiInnovationHub.of(context)!.theme.screenType == "desktop") { return (width / 10); @@ -72,37 +78,41 @@ class _BuildAppointmentListState extends State { List appointmentList = mzansiProfileProvider.personalHome ? mihCalendarProvider.personalAppointments! : mihCalendarProvider.businessAppointments!; - String heading = ""; - String description = ""; - DateTime now; - int hourNow = 0; - String date = ""; - int appointHour = 0; - String appointDate = ""; - if (appointmentList[index].date_time.contains("T")) { - heading = - "${appointmentList[index].date_time.split('T')[1].substring(0, 5)} - ${appointmentList[index].title.toUpperCase()}"; - description = appointmentList[index].description; - now = DateTime.now(); - hourNow = int.parse(now.toString().split(' ')[1].substring(0, 2)); - date = DateTime(now.year, now.month, now.day).toString().split(' ')[0]; - appointDate = appointmentList[index].date_time.split('T')[0]; - appointHour = int.parse( - appointmentList[index].date_time.split('T')[1].substring(0, 2)); + + // SAFELY EXTRACT DATE AND TIME + String dateTimeString = appointmentList[index].date_time; + String timePart = ""; + String datePart = ""; + + if (dateTimeString.contains("T")) { + List parts = dateTimeString.split('T'); + datePart = parts[0]; + timePart = parts[1].substring(0, 5); + } else if (dateTimeString.contains(" ")) { + List parts = dateTimeString.split(' '); + datePart = parts[0]; + timePart = parts[1].substring(0, 5); } else { - heading = - "${appointmentList[index].date_time.split(' ')[1].substring(0, 5)} - ${appointmentList[index].title.toUpperCase()}"; - description = appointmentList[index].description; - now = DateTime.now(); - hourNow = int.parse(now.toString().split(' ')[1].substring(0, 2)); - date = DateTime(now.year, now.month, now.day).toString().split(' ')[0]; - appointDate = appointmentList[index].date_time.split(' ')[0]; - appointHour = int.parse( - appointmentList[index].date_time.split(' ')[1].substring(0, 2)); + // Fallback if format is unexpected + datePart = dateTimeString; + timePart = "00:00"; } + + String heading = + "$timePart - ${appointmentList[index].title.toUpperCase()}"; + String description = appointmentList[index].description; + + DateTime now = DateTime.now(); + int hourNow = int.parse(now.toString().split(' ')[1].substring(0, 2)); + String currentDate = + DateTime(now.year, now.month, now.day).toString().split(' ')[0]; + + int appointHour = int.parse(timePart.split(':')[0]); + Color appointmentColor = MihColors.getSecondaryColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"); - if (date == appointDate) { + + if (currentDate == datePart) { if (appointHour < hourNow) { appointmentColor = MihColors.getGreyColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"); @@ -110,7 +120,7 @@ class _BuildAppointmentListState extends State { appointmentColor = MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"); } - } else if (DateTime.parse(appointDate).isBefore(DateTime.parse(date))) { + } else if (DateTime.parse(datePart).isBefore(DateTime.parse(currentDate))) { appointmentColor = MihColors.getGreyColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"); } @@ -138,15 +148,15 @@ class _BuildAppointmentListState extends State { ), ), onTap: () { + // SAFELY SET CONTROLLER VALUES setState(() { widget.titleController.text = appointmentList[index].title; widget.descriptionIDController.text = appointmentList[index].description; - widget.dateController.text = - appointmentList[index].date_time.split('T')[0]; - widget.timeController.text = - appointmentList[index].date_time.split('T')[1].substring(0, 5); + widget.dateController.text = datePart; + widget.timeController.text = timePart; }); + if (widget.inWaitingRoom == false) { appointmentDetailsWindow( mzansiProfileProvider, mihCalendarProvider, index, bodyWidth); @@ -214,10 +224,7 @@ class _BuildAppointmentListState extends State { ], onWindowTapClose: () { context.pop(); - widget.dateController.clear(); - widget.timeController.clear(); - widget.titleController.clear(); - widget.descriptionIDController.clear(); + clearControllers(); }, windowBody: Padding( padding: @@ -342,10 +349,7 @@ class _BuildAppointmentListState extends State { ], onWindowTapClose: () { context.pop(); - widget.dateController.clear(); - widget.timeController.clear(); - widget.titleController.clear(); - widget.descriptionIDController.clear(); + clearControllers(); }, windowBody: Padding( padding: @@ -591,6 +595,7 @@ class _BuildAppointmentListState extends State { List appointmentList = mzansiProfileProvider.personalHome ? mihCalendarProvider.personalAppointments! : mihCalendarProvider.businessAppointments!; + KenLogger.success("ersonalHome: ${mzansiProfileProvider.personalHome}"); if (mzansiProfileProvider.personalHome == true) { statusCode = await MihMzansiCalendarApis.updatePersonalAppointment( mzansiProfileProvider.user!, @@ -634,28 +639,30 @@ class _BuildAppointmentListState extends State { if (statusCode == 200) { context.pop(); context.pop(); - if (!widget.inWaitingRoom) { - KenLogger.warning("calendar route"); - context.goNamed( - "mihCalendar", - ); - } else { - KenLogger.warning("waiting room route"); - // GoRouter.of(context).refresh(); - context.goNamed( - 'mihHome', - ); - context.goNamed( - 'patientManager', - extra: PatManagerArguments( - mzansiProfileProvider.user!, - false, - mzansiProfileProvider.business, - mzansiProfileProvider.businessUser, - ), - ); - // context.pop(); - } + successPopUp("Successfully Updated Appointment", + "You appointment has been successfully updated."); + // if (!widget.inWaitingRoom) { + // KenLogger.warning("calendar route"); + // context.goNamed( + // "mihCalendar", + // ); + // } else { + // KenLogger.warning("waiting room route"); + // // GoRouter.of(context).refresh(); + // context.goNamed( + // 'mihHome', + // ); + // context.goNamed( + // 'patientManager', + // extra: PatManagerArguments( + // mzansiProfileProvider.user!, + // false, + // mzansiProfileProvider.business, + // mzansiProfileProvider.businessUser, + // ), + // ); + // // context.pop(); + // } } else { internetConnectionPopUp(); } @@ -724,6 +731,7 @@ class _BuildAppointmentListState extends State { child: MihButton( onPressed: () { context.pop(); + clearControllers(); }, buttonColor: MihColors.getGreenColor( MzansiInnovationHub.of(context)!.theme.mode == "Dark"), @@ -805,15 +813,17 @@ class _BuildAppointmentListState extends State { MzansiProfileProvider mzansiProfileProvider, MihCalendarProvider mihCalendarProvider, Widget? child) { - List appointmentList = mzansiProfileProvider.personalHome - ? mihCalendarProvider.personalAppointments! - : mihCalendarProvider.businessAppointments!; + // List appointmentList = mzansiProfileProvider.personalHome + // ? mihCalendarProvider.personalAppointments! + // : mihCalendarProvider.businessAppointments!; return Padding( padding: EdgeInsets.symmetric(horizontal: getPaddingSize()), child: ListView.builder( physics: const NeverScrollableScrollPhysics(), shrinkWrap: true, - itemCount: appointmentList.length, + itemCount: mzansiProfileProvider.personalHome + ? mihCalendarProvider.personalAppointments!.length + : mihCalendarProvider.businessAppointments!.length, itemBuilder: (context, index) { return displayAppointment( mzansiProfileProvider, mihCalendarProvider, index, width); diff --git a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart index 1d198a82..26e3b59a 100644 --- a/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart +++ b/Frontend/lib/mih_packages/calendar/package_tools/appointments.dart @@ -139,7 +139,7 @@ class _PatientAccessRequestState extends State { fullscreen: false, windowTitle: "Add Appointment", onWindowTapClose: () { - Navigator.of(context).pop(); + context.pop(); _appointmentDateController.clear(); _appointmentTimeController.clear(); _appointmentTitleController.clear();