This repository has been archived on 2024-10-18. You can view files and clone it, but cannot push or open issues or pull requests.
ftc_patient_app/lib/web_services/rota_services.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,
"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<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;
}
}
}