import 'dart:convert'; import 'package:ftc_mobile_app/ftc_mobile_app.dart'; import '../models/requests/HolidayRequestData.dart'; import '../models/rota/LiveRoasterResponseData.dart'; import '../models/staffWorkload/StaffWorkloadResponse.dart'; class RotaService { static final RotaService _instance = RotaService._private(); RotaService._private(); factory RotaService() { return _instance; } final HttpRequestClient _httpClient = HttpRequestClient(); Future getMyShifts( {required int startDateMills, required int endDateMills}) async { // final userJson = LocalStorageManager.getSessionToken( // tokenKey: LocalStorageKeys.kUserModelKey, // ); // final userModel = UserModel.fromJson(jsonDecode(userJson)); Map requestBody = { "startDate": startDateMills, "endDate": endDateMills, "staffUserId": LocalStorageManager.userId, // "startDate": 1720983600000, // "endDate": 1721502000000, // "staffUserId": "659653a31faf0d9fa4e15d5d", }; ResponseModel responseModel = await _httpClient.customRequest('POST', requestBody: requestBody, url: WebUrls.myShifts, requestHeader: {'Content-Type': 'application/json'}, isBearer: true, isBearerHeaderRequired: true); if (responseModel.statusCode >= 200 && responseModel.statusCode <= 230) { return LiveRoasterResponseData.fromJson({'data': responseModel.data}); } else { return { "message": responseModel.statusDescription, }; } } Future getAvailableShifts() async { Map requestBody = { "startDate": DateTime.now().millisecondsSinceEpoch }; ResponseModel responseModel = await _httpClient.customRequest('POST', requestBody: requestBody, url: WebUrls.unassignedShifts, requestHeader: {'Content-Type': 'application/json'}, isBearer: true, isBearerHeaderRequired: true); if (responseModel.statusCode >= 200 && responseModel.statusCode <= 230) { return LiveRoasterResponseData.fromJson({'data': responseModel.data}); } else { return { "message": responseModel.statusDescription, }; } } Future claimShift({ required String rosterId, required String locationId, required String dayId, }) async { // final userJson = LocalStorageManager.getSessionToken( // tokenKey: LocalStorageKeys.kUserModelKey, // ); // final userModel = UserModel.fromJson(jsonDecode(userJson)); Map requestBody = { "rosterId": rosterId, "locationId": locationId, "staffUserId": LocalStorageManager.userId, "dayId": dayId, }; ResponseModel responseModel = await _httpClient.customRequest('POST', requestBody: requestBody, url: WebUrls.assignStaffToShift, requestHeader: {'Content-Type': 'application/json'}, isBearer: true, isBearerHeaderRequired: true); if (responseModel.statusCode >= 200 && responseModel.statusCode <= 230) { print("responseModel.data type: ${responseModel.data.runtimeType}"); return LiveRoasterResponseData.fromJson({'data': responseModel.data}); } else { return { "message": responseModel.statusDescription, }; } } Future serviceUserShifts( {required String serviceUserId, required int month, required int year}) async { Map requestBody = { "serviceUser": serviceUserId, "month": month, //Dec "year": year, }; ResponseModel responseModel = await _httpClient.customRequest('POST', requestBody: requestBody, url: WebUrls.rotaServiceUserShiftsListUrl, requestHeader: {'Content-Type': 'application/json'}, isBearer: true, isBearerHeaderRequired: true); if (responseModel.statusCode >= 200 && responseModel.statusCode <= 230) { return (responseModel.data['filteredShifts'] is List) && responseModel.data['filteredShifts'].isNotEmpty ? MonthWiseRecord.fromJson(responseModel.data['filteredShifts'][0]) : false; } else { return { "message": responseModel.statusDescription, }; } } Future getStaffWorkload() async { // final userJson = LocalStorageManager.getSessionToken( // tokenKey: LocalStorageKeys.kUserModelKey, // ); // print("userJson: $userJson"); // final userModel = UserModel.fromJson(jsonDecode(userJson)); Map requestBody = { "sortproperty": "createdAt", "sortorder": -1, "offset": 0, "limit": 1, "query": { "critarion": {"staffMember": LocalStorageManager.userId}, "staffMemberfields": "staffMemberName", "usersFields": "profile_picture_url name", "addedby": "_id email name", "lastModifiedBy": "_id email name" } }; ResponseModel responseModel = await _httpClient.customRequest('POST', requestBody: requestBody, url: WebUrls.getStaffWorkload, requestHeader: {'Content-Type': 'application/json'}, isBearer: true, isBearerHeaderRequired: true); if (responseModel.statusCode >= 200 && responseModel.statusCode <= 230) { return StaffWorkloadResponse.fromJson({'data': responseModel.data}) ..status = "Success" ..message = responseModel.statusDescription; } else { return responseModel.statusDescription; } } Future requestHoliday({required HolidayRequestData request}) async { Map requestBody = (request..staffRequester = LocalStorageManager.userId).toJson(); final ResponseModel responseModel = await _httpClient.customRequest('POST', requestBody: requestBody, url: WebUrls.requestHoliday, requestHeader: {'Content-Type': 'application/json'}, isBearer: true, isBearerHeaderRequired: true); if (responseModel.statusCode >= 200 && responseModel.statusCode <= 230) { return responseModel; } else { return responseModel.statusDescription; } } }