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

@@ -1,6 +1,9 @@
import '../../domain/models/attendance_login_request.dart';
import '../../domain/models/attendance_logout_request.dart';
import '../../domain/models/attendance_response_model.dart';
import '../../domain/models/attendance_model.dart';
import '../../domain/models/overtime_model.dart';
import '../../domain/models/extra_payment_model.dart';
import '../../domain/repositories/attendance_repository.dart';
import '../datasources/attendance_remote_data_source.dart';
@@ -38,4 +41,94 @@ class AttendanceRepositoryImpl implements AttendanceRepository {
logout: dto.logout,
);
}
@override
Future<List<AttendanceModel>> getAttendanceRecords({
required String employeeId,
}) async {
final dtos = await remoteDataSource.getAttendanceRecords(
employeeId: employeeId,
);
return dtos.map((dto) {
int? hours;
if (dto.login != null && dto.logout != null) {
hours = dto.logout!.difference(dto.login!).inHours;
}
return AttendanceModel(
id: dto.id,
employeeId: dto.employeeId,
date: dto.createdAt ?? dto.login,
loginTime: dto.login,
logoutTime: dto.logout,
workHours: hours,
createdAt: dto.createdAt ?? dto.login,
reason: dto.reason,
isDeleted: dto.isDeleted,
);
}).toList();
}
@override
Future<List<OvertimeModel>> getExtraHours({
required String employeeId,
}) async {
final dtos = await remoteDataSource.getExtraHours(employeeId: employeeId);
return dtos
.map(
(dto) => OvertimeModel(
id: dto.id,
employeeId: dto.employeeId,
date: dto.date,
hours: dto.hours,
hourlyRateAtTheTime: dto.hourlyRateAtTheTime,
totalAmount: dto.hours * dto.hourlyRateAtTheTime,
),
)
.toList();
}
@override
Future<List<ExtraPaymentModel>> getRewards({
required String employeeId,
}) async {
final dtos = await remoteDataSource.getRewards(employeeId: employeeId);
return dtos
.map(
(dto) => ExtraPaymentModel(
id: dto.id,
employeeId: dto.employeeId,
date: dto.date,
amount: dto.amount,
reason: dto.reason,
note: dto.note,
isPenalty: false,
),
)
.toList();
}
@override
Future<List<ExtraPaymentModel>> getPunishments({
required String employeeId,
}) async {
final dtos = await remoteDataSource.getPunishments(employeeId: employeeId);
return dtos
.map(
(dto) => ExtraPaymentModel(
id: dto.id,
employeeId: dto.employeeId,
date: dto.date,
amount: dto.amount,
reason: dto.reason,
note: dto.note,
isPenalty: true,
),
)
.toList();
}
}