137 lines
4.2 KiB
Dart
137 lines
4.2 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_calendar_carousel/classes/event.dart';
|
|
import 'package:flutter_calendar_carousel/classes/event_list.dart';
|
|
import 'package:ftc_mobile_app/models/requests/HolidayRequestData.dart';
|
|
import 'package:ftc_mobile_app/models/staffWorkload/StaffWorkloadResponse.dart';
|
|
import 'package:ftc_mobile_app/utilities/extensions/custom_extensions.dart';
|
|
import 'package:get/get.dart';
|
|
import '../../ftc_mobile_app.dart';
|
|
|
|
class BookHolidayScreenController extends GetxController {
|
|
final GlobalKey<ScaffoldState> screenKey = GlobalKey<ScaffoldState>();
|
|
|
|
final targetDateTime = DateTime.now().obs;
|
|
|
|
final agreeToRules = false.obs;
|
|
|
|
final holidayStartDate = DateTime.now().obs;
|
|
final holidayEndDate = Rx<DateTime>(DateTime.now());
|
|
final holidayDays = 0.obs;
|
|
final holidayHours = 0.obs;
|
|
|
|
final myWorkLoads = Rx<StaffWorkLoads?>(null);
|
|
|
|
final _controller = Get.put(RotaDashboardScreenController());
|
|
|
|
Rx<EventList<Event>> get markedDatesMap => _controller.markedDatesMap;
|
|
|
|
@override
|
|
void onInit() {
|
|
_calculateDaysAndHours();
|
|
super.onInit();
|
|
}
|
|
|
|
@override
|
|
void onReady() {
|
|
fetchRecords();
|
|
super.onReady();
|
|
}
|
|
|
|
onRangeSelect(
|
|
DateTime rangeStart, DateTime? rangeEnd, List<String> selectedDates) {
|
|
print(
|
|
"rangeStart: ${rangeStart.toString()}\nrangeEnd: ${rangeEnd.toString()}");
|
|
|
|
holidayStartDate.value = rangeStart;
|
|
|
|
holidayEndDate.value = rangeEnd ?? (rangeStart);
|
|
_calculateDaysAndHours();
|
|
}
|
|
|
|
_calculateDaysAndHours() {
|
|
holidayDays.value = holidayEndDate().difference(holidayStartDate()).inDays;
|
|
if (DateFormatter.dateFormatter.format(holidayStartDate()) !=
|
|
DateFormatter.dateFormatter.format(holidayEndDate())) {
|
|
holidayDays.value += 1;
|
|
} else {
|
|
holidayDays.value = 1;
|
|
}
|
|
|
|
//Filtering out shifts that fall between the holiday ranges
|
|
final shifts = _controller.myShiftsList.where((shift) {
|
|
final dateNotNull = shift.shiftDateTime != null;
|
|
|
|
final isWithinHolidayRange =
|
|
shift.shiftDateTime!.isAfter(holidayStartDate()) &&
|
|
shift.shiftDateTime!.isBefore(holidayEndDate());
|
|
|
|
final onHolidayStartDate =
|
|
DateFormatter.dateFormatter.format(shift.shiftDateTime!) ==
|
|
DateFormatter.dateFormatter.format(holidayStartDate());
|
|
|
|
final onHolidayEndDate =
|
|
DateFormatter.dateFormatter.format(shift.shiftDateTime!) ==
|
|
DateFormatter.dateFormatter.format(holidayEndDate());
|
|
|
|
return (dateNotNull &&
|
|
(onHolidayStartDate || isWithinHolidayRange || onHolidayEndDate));
|
|
}).toList();
|
|
|
|
holidayHours.value = shifts.fold(
|
|
0, (previousValue, shift) => (shift.workHrs ?? 0) + previousValue);
|
|
|
|
// holidayHours.value =
|
|
// holidayEndDate().difference(holidayStartDate()).inHours;
|
|
}
|
|
|
|
void removeFocus() {
|
|
FocusScope.of(screenKey.currentContext!).unfocus();
|
|
}
|
|
|
|
Future<void> fetchRecords() async {
|
|
var response = await RotaService().getStaffWorkload().showLoader();
|
|
if (response is StaffWorkloadResponse) {
|
|
final workLoads = response.data?.staffWorkLoads ?? [];
|
|
|
|
if (workLoads.isNotEmpty) {
|
|
myWorkLoads.value = workLoads.first;
|
|
}
|
|
} else if (response is String && response.isNotEmpty) {
|
|
FrequentFunctions.showToast(message: response);
|
|
}
|
|
}
|
|
|
|
Future<bool> requestHoliday() async {
|
|
if (agreeToRules.isFalse) {
|
|
FrequentFunctions.showToast(
|
|
message: "Please select agree to booking rules first");
|
|
return false;
|
|
}
|
|
|
|
var response = await RotaService()
|
|
.requestHoliday(
|
|
request: HolidayRequestData(
|
|
hldRqStartDate: holidayStartDate().toUtc().millisecondsSinceEpoch,
|
|
hldRqEndDate: holidayEndDate().toUtc().millisecondsSinceEpoch,
|
|
hldRqTotalDays: holidayDays(),
|
|
hldRqTotalHours: holidayHours(),
|
|
hldRqStatus: "pending",
|
|
hldRequestType: "holiday",
|
|
),
|
|
)
|
|
.showLoader();
|
|
if (response is ResponseModel) {
|
|
return true;
|
|
} else if (response is String && response.isNotEmpty) {
|
|
FrequentFunctions.showToast(message: response);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@override
|
|
void dispose() {
|
|
Get.delete<BookHolidayScreenController>();
|
|
super.dispose();
|
|
}
|
|
}
|