179 lines
6.1 KiB
Dart
179 lines
6.1 KiB
Dart
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<dynamic> getMyShifts(
|
|
{required int startDateMills, required int endDateMills}) async {
|
|
// final userJson = LocalStorageManager.getSessionToken(
|
|
// tokenKey: LocalStorageKeys.kUserModelKey,
|
|
// );
|
|
// final userModel = UserModel.fromJson(jsonDecode(userJson));
|
|
|
|
Map<String, dynamic> requestBody = {
|
|
"startDate": startDateMills,
|
|
"endDate": endDateMills,
|
|
"serviceUserId": 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<dynamic> getAvailableShifts() async {
|
|
Map<String, dynamic> 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<dynamic> 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<String, dynamic> 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<dynamic> serviceUserShifts(
|
|
{required String serviceUserId,
|
|
required int month,
|
|
required int year}) async {
|
|
Map<String, dynamic> 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<dynamic> getStaffWorkload() async {
|
|
// final userJson = LocalStorageManager.getSessionToken(
|
|
// tokenKey: LocalStorageKeys.kUserModelKey,
|
|
// );
|
|
// print("userJson: $userJson");
|
|
// final userModel = UserModel.fromJson(jsonDecode(userJson));
|
|
|
|
Map<String, dynamic> 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<dynamic> requestHoliday({required HolidayRequestData request}) async {
|
|
Map<String, dynamic> 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;
|
|
}
|
|
}
|
|
}
|