attendence records, extra hours , rewards and punishment funnctionality have been added
This commit is contained in:
@@ -3,6 +3,10 @@ import 'package:dio/dio.dart';
|
||||
import '../../core/error/exceptions.dart';
|
||||
import '../../core/network/api_client.dart';
|
||||
import '../dto/attendance_response_dto.dart';
|
||||
import '../dto/attendance_record_dto.dart';
|
||||
import '../dto/overtime_dto.dart';
|
||||
import '../dto/reward_dto.dart';
|
||||
import '../dto/punishment_dto.dart';
|
||||
|
||||
abstract class AttendanceRemoteDataSource {
|
||||
Future<AttendanceResponseDto> login({
|
||||
@@ -14,6 +18,13 @@ abstract class AttendanceRemoteDataSource {
|
||||
required String employeeId,
|
||||
required File faceImage,
|
||||
});
|
||||
|
||||
Future<List<AttendanceRecordDto>> getAttendanceRecords({
|
||||
required String employeeId,
|
||||
});
|
||||
Future<List<OvertimeDto>> getExtraHours({required String employeeId});
|
||||
Future<List<RewardDto>> getRewards({required String employeeId});
|
||||
Future<List<PunishmentDto>> getPunishments({required String employeeId});
|
||||
}
|
||||
|
||||
class AttendanceRemoteDataSourceImpl implements AttendanceRemoteDataSource {
|
||||
@@ -140,9 +151,138 @@ class AttendanceRemoteDataSourceImpl implements AttendanceRemoteDataSource {
|
||||
throw NetworkException(message: 'خطأ في الانترنيت يرجى المحاولة لاحقا');
|
||||
}
|
||||
} catch (e) {
|
||||
if (e is ServerException || e is NetworkException) {
|
||||
rethrow;
|
||||
throw ServerException(message: 'خطأ غير متوقع');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<AttendanceRecordDto>> getAttendanceRecords({
|
||||
required String employeeId,
|
||||
}) async {
|
||||
try {
|
||||
final response = await apiClient.get(
|
||||
'/Attendance',
|
||||
queryParameters: {'IsDeleted': false, 'EmployeeId': employeeId},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final data = response.data;
|
||||
if (data is Map<String, dynamic> &&
|
||||
data['data'] != null &&
|
||||
data['data']['items'] is List) {
|
||||
final items = data['data']['items'] as List;
|
||||
return items.map((e) => AttendanceRecordDto.fromJson(e)).toList();
|
||||
}
|
||||
return [];
|
||||
} else {
|
||||
throw ServerException(
|
||||
message: 'فشل في جلب البيانات',
|
||||
statusCode: response.statusCode,
|
||||
);
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw ServerException(
|
||||
message: e.message ?? 'Unknown error',
|
||||
statusCode: e.response?.statusCode,
|
||||
);
|
||||
} catch (e) {
|
||||
throw ServerException(message: 'خطأ غير متوقع');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<OvertimeDto>> getExtraHours({required String employeeId}) async {
|
||||
try {
|
||||
final response = await apiClient.get(
|
||||
'/ExtraHours',
|
||||
queryParameters: {'IsDeleted': false, 'EmployeeId': employeeId},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final responseData = response.data;
|
||||
|
||||
if (responseData is Map<String, dynamic>) {
|
||||
return OvertimeListResponseDto.fromJson(responseData).items;
|
||||
} else {
|
||||
throw ServerException(
|
||||
message: 'استجابة غير صحيحة من الخادم',
|
||||
statusCode: response.statusCode,
|
||||
);
|
||||
}
|
||||
} else {
|
||||
throw ServerException(
|
||||
message: 'فشل في جلب البيانات',
|
||||
statusCode: response.statusCode,
|
||||
);
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw ServerException(
|
||||
message: e.message ?? 'Unknown error',
|
||||
statusCode: e.response?.statusCode,
|
||||
);
|
||||
} catch (e) {
|
||||
throw ServerException(message: 'خطأ غير متوقع');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<RewardDto>> getRewards({required String employeeId}) async {
|
||||
try {
|
||||
final response = await apiClient.get(
|
||||
'/Reward',
|
||||
queryParameters: {'IsDeleted': false, 'EmployeeId': employeeId},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final responseData = response.data;
|
||||
if (responseData is Map<String, dynamic>) {
|
||||
return RewardListResponseDto.fromJson(responseData).items;
|
||||
}
|
||||
return [];
|
||||
} else {
|
||||
throw ServerException(
|
||||
message: 'فشل في جلب المكافآت',
|
||||
statusCode: response.statusCode,
|
||||
);
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw ServerException(
|
||||
message: e.message ?? 'Unknown error',
|
||||
statusCode: e.response?.statusCode,
|
||||
);
|
||||
} catch (e) {
|
||||
throw ServerException(message: 'خطأ غير متوقع');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future<List<PunishmentDto>> getPunishments({
|
||||
required String employeeId,
|
||||
}) async {
|
||||
try {
|
||||
final response = await apiClient.get(
|
||||
'/Punishment',
|
||||
queryParameters: {'IsDeleted': false, 'EmployeeId': employeeId},
|
||||
);
|
||||
|
||||
if (response.statusCode == 200) {
|
||||
final responseData = response.data;
|
||||
if (responseData is Map<String, dynamic>) {
|
||||
return PunishmentListResponseDto.fromJson(responseData).items;
|
||||
}
|
||||
return [];
|
||||
} else {
|
||||
throw ServerException(
|
||||
message: 'فشل في جلب البيانات',
|
||||
statusCode: response.statusCode,
|
||||
);
|
||||
}
|
||||
} on DioException catch (e) {
|
||||
throw ServerException(
|
||||
message: e.message ?? 'Unknown error',
|
||||
statusCode: e.response?.statusCode,
|
||||
);
|
||||
} catch (e) {
|
||||
throw ServerException(message: 'خطأ غير متوقع');
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user