attendence records, extra hours , rewards and punishment funnctionality have been added

This commit is contained in:
Daniah Ayad Al-sultani
2026-02-10 16:27:08 +03:00
parent cd7ba8e9d5
commit 1002937045
25 changed files with 1048 additions and 181 deletions

View File

@@ -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: 'خطأ غير متوقع');
}
}