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

@@ -0,0 +1,21 @@
import 'finance_record.dart';
class AttendanceModel extends FinanceRecord {
final DateTime? loginTime;
final DateTime? logoutTime;
final int? workHours;
final DateTime? createdAt;
final bool isDeleted;
AttendanceModel({
required super.id,
required super.employeeId,
super.date,
super.reason,
this.loginTime,
this.logoutTime,
this.workHours,
this.createdAt,
required this.isDeleted,
});
}

View File

@@ -0,0 +1,17 @@
import 'finance_record.dart';
class ExtraPaymentModel extends FinanceRecord {
final double amount;
final String? note;
final bool isPenalty;
ExtraPaymentModel({
required super.id,
required super.employeeId,
super.date,
super.reason,
required this.amount,
this.note,
required this.isPenalty,
});
}

View File

@@ -0,0 +1 @@
enum FinanceCategory { attendance, overtime, bonus, penalty }

View File

@@ -0,0 +1,13 @@
abstract class FinanceRecord {
final String id;
final String employeeId;
final DateTime? date;
final String? reason;
FinanceRecord({
required this.id,
required this.employeeId,
this.date,
this.reason,
});
}

View File

@@ -0,0 +1,16 @@
import 'finance_record.dart';
class OvertimeModel extends FinanceRecord {
final double hours;
final double hourlyRateAtTheTime;
final double totalAmount;
OvertimeModel({
required super.id,
required super.employeeId,
super.date,
required this.hours,
required this.hourlyRateAtTheTime,
required this.totalAmount,
});
}

View File

@@ -1,6 +1,9 @@
import '../models/attendance_login_request.dart';
import '../models/attendance_logout_request.dart';
import '../models/attendance_response_model.dart';
import '../models/attendance_model.dart';
import '../models/overtime_model.dart';
import '../models/extra_payment_model.dart';
//in the following polymorphism is being used , a quich recap it is where th esame method but opperate in a different way
@@ -9,4 +12,11 @@ abstract class AttendanceRepository {
Future<AttendanceResponseModel> login(AttendanceLoginRequest request);
Future<AttendanceResponseModel> logout(AttendanceLogoutRequest request);
Future<List<AttendanceModel>> getAttendanceRecords({
required String employeeId,
});
Future<List<OvertimeModel>> getExtraHours({required String employeeId});
Future<List<ExtraPaymentModel>> getRewards({required String employeeId});
Future<List<ExtraPaymentModel>> getPunishments({required String employeeId});
}

View File

@@ -0,0 +1,12 @@
import '../models/attendance_model.dart';
import '../repositories/attendance_repository.dart';
class GetAttendanceRecordsUseCase {
final AttendanceRepository repository;
GetAttendanceRecordsUseCase(this.repository);
Future<List<AttendanceModel>> execute({required String employeeId}) {
return repository.getAttendanceRecords(employeeId: employeeId);
}
}

View File

@@ -0,0 +1,12 @@
import '../models/overtime_model.dart';
import '../repositories/attendance_repository.dart';
class GetExtraHoursUseCase {
final AttendanceRepository repository;
GetExtraHoursUseCase({required this.repository});
Future<List<OvertimeModel>> execute({required String employeeId}) async {
return await repository.getExtraHours(employeeId: employeeId);
}
}

View File

@@ -0,0 +1,12 @@
import '../models/extra_payment_model.dart';
import '../repositories/attendance_repository.dart';
class GetPunishmentsUseCase {
final AttendanceRepository repository;
GetPunishmentsUseCase({required this.repository});
Future<List<ExtraPaymentModel>> execute({required String employeeId}) async {
return await repository.getPunishments(employeeId: employeeId);
}
}

View File

@@ -0,0 +1,12 @@
import '../models/extra_payment_model.dart';
import '../repositories/attendance_repository.dart';
class GetRewardsUseCase {
final AttendanceRepository repository;
GetRewardsUseCase({required this.repository});
Future<List<ExtraPaymentModel>> execute({required String employeeId}) async {
return await repository.getRewards(employeeId: employeeId);
}
}