next day appointments change.

dev_3.16.3_Lab_CheckIn_6718
sultan khan 8 months ago
parent 3bf1e3fceb
commit 2c746bf783

@ -45,16 +45,17 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
AppSharedPreferences sharedPref = new AppSharedPreferences();
var selectedDate = "";
var selectedNextDate = "";
dynamic selectedDateJSON;
dynamic jsonFreeSlots;
final DateFormat dateFormatter = DateFormat('yyyy-MM-dd');
List<TimeSlot> docFreeSlots = [];
List<TimeSlot> dayEvents = [];
List<TimeSlot> nextDayEvents = [];
int selectedButtonIndex = 0;
int selectedNextDayButtonIndex = -1;
dynamic freeSlotsResponse;
String nextDayAppointmentDate ="";
late ScrollController _scrollController;
var language;
@ -115,9 +116,11 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
final DateFormat formatter = DateFormat('yyyy-MM-dd');
setState(() {
this.selectedDate = DateUtil.getWeekDayMonthDayYearDateFormatted(day, language);
this.selectedNextDate = DateUtil.getWeekDayMonthDayYearDateFormatted(day.add(Duration(days: 1)), language);
_calendarController.selectedDate = day;
openTimeSlotsPickerForDate(day, docFreeSlots);
DocAvailableAppointments.selectedDate = formatter.format(day);
_calendarController.selectedDate = day;
nextDayAppointmentDate = formatter.format(day.add(Duration(days: 1)));
print(_calendarController.selectedDate);
});
}
@ -139,9 +142,12 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
child: Text(selectedDate, style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.w600, letterSpacing: -0.64)),
),
DocAvailableAppointments.areSlotsAvailable
? Container(
? Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ Container(
height: 40,
child: ListView.builder(
child:
ListView.builder(
controller: _scrollController,
scrollDirection: Axis.horizontal,
itemCount: dayEvents.length,
@ -152,7 +158,30 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
);
},
),
)
),
SizedBox(height: 20,),
nextDayEvents.isNotEmpty ? Container(
padding: EdgeInsets.only(left: 20, right: 20, bottom:20),
child: Text(selectedNextDate, style: TextStyle(fontSize: 14.0, fontWeight: FontWeight.w600, letterSpacing: -0.46, color: CustomColors.black))) :SizedBox(),
Container(
height: 40,
padding: EdgeInsets.only(left: 0, right: 0),
child:
ListView.builder(
controller: _scrollController,
scrollDirection: Axis.horizontal,
itemCount: nextDayEvents.length,
itemBuilder: (context, index) {
return Container(
margin: EdgeInsets.only(right: (index == nextDayEvents.length - 1) ? 16 : 5.0, left: index == 0 ? 16 : 5),
child: index == selectedNextDayButtonIndex ? getSelectedNextDayButton(index) : getNormalNextDayButton(index),
);
},
),
)
],)
: Center(
child: Padding(
padding: const EdgeInsets.only(left: 12.0, right: 12.0),
@ -225,21 +254,34 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
Map<String, dynamic> timeSlot = {"isoTime": dayEvents[i].isoTime, "start": dayEvents[i].start.toString(), "end": dayEvents[i].end.toString(), "vidaDate": dayEvents[i].vidaDate};
timeList.add(timeSlot);
}
filterNextDayAppo(freeSlots, timeList.last);
AppSharedPreferences sharedPref = new AppSharedPreferences();
sharedPref.setString('selectedLogSlots', json.encode(timeList));
DocAvailableAppointments.selectedTime = dayEvents[selectedButtonIndex].isoTime;
} else
DocAvailableAppointments.areSlotsAvailable = false;
});
}
filterNextDayAppo(List<TimeSlot> freeSlots, Map<String, dynamic> listList){
DateTime dateStart = DateTime.parse(listList['end']).add(Duration(hours: 6));
DateTime dateStartObj = new DateTime(dateStart.year, dateStart.month, dateStart.day, 0, 0, 0, 0, 0);
nextDayEvents = [];
DateTime? previousDate = _calendarController.selectedDate != null ? _calendarController.selectedDate : _calendarController.displayDate;
// if(DateUtils.isSameDay(dateStart, previousDate!.add(Duration(days:1)) )) {
freeSlots.forEach((v) {
if (v.start == dateStartObj && v.end!.isBefore(dateStart) ) nextDayEvents.add(v);
});
print(nextDayEvents);
// }
}
Future<Map<DateTime, List>> _getJSONSlots() async {
Map<DateTime, List> _eventsParsed;
List<FreeSlot> slotsList = [];
DateTime date;
final DateFormat formatter = DateFormat('HH:mm');
final DateFormat dateFormatter = DateFormat('yyyy-MM-dd');
for (var i = 0; i < freeSlotsResponse.length; i++) {
date = (isLiveCareSchedule != null && isLiveCareSchedule)
? DateUtil.convertStringToDate(freeSlotsResponse[i])
@ -259,6 +301,16 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
),
),
);
nextDayAppointmentDate = dateFormatter.format(
(isLiveCareSchedule != null && isLiveCareSchedule)
? DateUtil.convertStringToDate(freeSlotsResponse[0]).add(Duration(days:1))
: DateUtil.convertStringToDateSaudiTimezone(
freeSlotsResponse[0],
int.parse(
widget.doctor.projectID.toString(),
),
).add(Duration(days:1)),
);
DocAvailableAppointments.selectedAppoDateTime = (isLiveCareSchedule != null && isLiveCareSchedule)
? DateUtil.convertStringToDate(freeSlotsResponse[0])
: DateUtil.convertStringToDateSaudiTimezone(
@ -277,6 +329,16 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
),
),
language);
selectedNextDate = DateUtil.getWeekDayMonthDayYearDateFormatted(
(isLiveCareSchedule != null && isLiveCareSchedule)
? DateUtil.convertStringToDate(freeSlotsResponse[0]).add(Duration(days:1))
: DateUtil.convertStringToDateSaudiTimezone(
freeSlotsResponse[0],
int.parse(
widget.doctor.projectID.toString(),
),
).add(Duration(days:1)),
language);
selectedDateJSON = freeSlotsResponse[0];
});
openTimeSlotsPickerForDate(
@ -319,9 +381,21 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
DocAvailableAppointments.selectedAppoDateTime = timeslot.end;
setState(() {
selectedButtonIndex = index;
selectedNextDayButtonIndex =-1;
DocAvailableAppointments.selectedTime = dayEvents[index].isoTime;
print(DocAvailableAppointments.selectedTime);
DocAvailableAppointments.selectedDate = dateFormatter.format(
(isLiveCareSchedule != null && isLiveCareSchedule)
? DateUtil.convertStringToDate(freeSlotsResponse[0])
: DateUtil.convertStringToDateSaudiTimezone(
freeSlotsResponse[0],
int.parse(
widget.doctor.projectID.toString(),
),
),
);
});
projectViewModel.analytics.appointment.book_appointment_time_selection(appointment_type: 'regular', dateTime: timeslot.end, doctor: widget.doctor);
},
@ -342,12 +416,69 @@ class _DocAvailableAppointmentsState extends State<DocAvailableAppointments> wit
setState(() {
selectedButtonIndex = index;
DocAvailableAppointments.selectedTime = dayEvents[index].isoTime;
DocAvailableAppointments.selectedDate = dateFormatter.format(
(isLiveCareSchedule != null && isLiveCareSchedule)
? DateUtil.convertStringToDate(freeSlotsResponse[0])
: DateUtil.convertStringToDateSaudiTimezone(
freeSlotsResponse[0],
int.parse(
widget.doctor.projectID.toString(),
),
),
);
print(DocAvailableAppointments.selectedTime);
});
},
child: Text(dayEvents[index].isoTime!, style: TextStyle(fontSize: 12.0, color: Colors.white)),
);
}
Widget getNormalNextDayButton(int index) {
return CustomTextButton(
backgroundColor: Colors.white,
elevation: 0,
side: BorderSide(
color: Colors.black, //Color of the border
style: BorderStyle.solid, //Style of the border
width: 1.5 //width of the border
),
onPressed: () {
final timeslot = nextDayEvents[index];
DocAvailableAppointments.selectedAppoDateTime = timeslot.end;
setState(() {
selectedButtonIndex = -1;
selectedNextDayButtonIndex =index;
DocAvailableAppointments.selectedTime = nextDayEvents[index].isoTime;
DocAvailableAppointments.selectedDate = nextDayAppointmentDate;
print(DocAvailableAppointments.selectedTime);
});
projectViewModel.analytics.appointment.book_appointment_time_selection(appointment_type: 'regular', dateTime: timeslot.end, doctor: widget.doctor);
},
child: Text(nextDayEvents[index].isoTime!, style: TextStyle(fontSize: 12.0, color: Color(0xFF60686b))),
);
}
Widget getSelectedNextDayButton(int index) {
return CustomTextButton(
backgroundColor: nextDayEvents[index].isoTime == TranslationBase.of(context).waitingAppointment ? CustomColors.darkOrange : CustomColors.green,
elevation: 0,
side: BorderSide(
color: nextDayEvents[index].isoTime == TranslationBase.of(context).waitingAppointment ? CustomColors.darkOrange : CustomColors.green, //Color of the border
style: BorderStyle.solid, //Style of the border
width: 1.5 //width of the border
),
onPressed: () {
setState(() {
selectedButtonIndex =-1;
selectedNextDayButtonIndex = index;
DocAvailableAppointments.selectedTime = nextDayEvents[index].isoTime;
DocAvailableAppointments.selectedDate = nextDayAppointmentDate;
print(DocAvailableAppointments.selectedTime);
});
},
child: Text(nextDayEvents[index].isoTime!, style: TextStyle(fontSize: 12.0, color: Colors.white)),
);
}
getDoctorFreeSlots(context, DoctorList docObject) {
print(DocAvailableAppointments.initialSlotDuration);

Loading…
Cancel
Save