attendence records, extra hours , rewards and punishment funnctionality have been added
This commit is contained in:
99
lib/presentation/bloc/finance_bloc.dart
Normal file
99
lib/presentation/bloc/finance_bloc.dart
Normal file
@@ -0,0 +1,99 @@
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import '../../../domain/usecases/get_attendance_records_usecase.dart';
|
||||
import '../../../domain/usecases/get_extra_hours_usecase.dart';
|
||||
import '../../../domain/usecases/get_rewards_usecase.dart';
|
||||
import '../../../domain/usecases/get_punishments_usecase.dart';
|
||||
import '../../../domain/models/finance_record.dart';
|
||||
import '../../../domain/models/finance_category.dart';
|
||||
import '../../../core/error/exceptions.dart';
|
||||
|
||||
// Events
|
||||
abstract class FinanceEvent {}
|
||||
|
||||
class LoadFinanceDataEvent extends FinanceEvent {
|
||||
final String employeeId;
|
||||
final FinanceCategory category;
|
||||
|
||||
LoadFinanceDataEvent({required this.employeeId, required this.category});
|
||||
}
|
||||
|
||||
// States
|
||||
abstract class FinanceState {}
|
||||
|
||||
class FinanceInitial extends FinanceState {}
|
||||
|
||||
class FinanceLoading extends FinanceState {}
|
||||
|
||||
class FinanceLoaded extends FinanceState {
|
||||
final List<FinanceRecord> records;
|
||||
final FinanceCategory category;
|
||||
|
||||
FinanceLoaded({required this.records, required this.category});
|
||||
}
|
||||
|
||||
class FinanceError extends FinanceState {
|
||||
final String message;
|
||||
|
||||
FinanceError({required this.message});
|
||||
}
|
||||
|
||||
// Bloc
|
||||
class FinanceBloc extends Bloc<FinanceEvent, FinanceState> {
|
||||
final GetAttendanceRecordsUseCase getAttendanceRecordsUseCase;
|
||||
final GetExtraHoursUseCase getExtraHoursUseCase;
|
||||
final GetRewardsUseCase getRewardsUseCase;
|
||||
final GetPunishmentsUseCase getPunishmentsUseCase;
|
||||
|
||||
FinanceBloc({
|
||||
required this.getAttendanceRecordsUseCase,
|
||||
required this.getExtraHoursUseCase,
|
||||
required this.getRewardsUseCase,
|
||||
required this.getPunishmentsUseCase,
|
||||
}) : super(FinanceInitial()) {
|
||||
on<LoadFinanceDataEvent>(_onLoadFinanceData);
|
||||
}
|
||||
|
||||
Future<void> _onLoadFinanceData(
|
||||
LoadFinanceDataEvent event,
|
||||
Emitter<FinanceState> emit,
|
||||
) async {
|
||||
if (event.employeeId.isEmpty) {
|
||||
emit(FinanceError(message: 'Employee ID is missing or invalid'));
|
||||
return;
|
||||
}
|
||||
|
||||
emit(FinanceLoading());
|
||||
try {
|
||||
List<FinanceRecord> records;
|
||||
switch (event.category) {
|
||||
case FinanceCategory.attendance:
|
||||
records = await getAttendanceRecordsUseCase.execute(
|
||||
employeeId: event.employeeId,
|
||||
);
|
||||
break;
|
||||
case FinanceCategory.overtime:
|
||||
records = await getExtraHoursUseCase.execute(
|
||||
employeeId: event.employeeId,
|
||||
);
|
||||
break;
|
||||
case FinanceCategory.bonus:
|
||||
records = await getRewardsUseCase.execute(
|
||||
employeeId: event.employeeId,
|
||||
);
|
||||
break;
|
||||
case FinanceCategory.penalty:
|
||||
records = await getPunishmentsUseCase.execute(
|
||||
employeeId: event.employeeId,
|
||||
);
|
||||
break;
|
||||
}
|
||||
emit(FinanceLoaded(records: records, category: event.category));
|
||||
} on ServerException catch (e) {
|
||||
emit(FinanceError(message: e.message));
|
||||
} on NetworkException catch (e) {
|
||||
emit(FinanceError(message: e.message));
|
||||
} catch (e) {
|
||||
emit(FinanceError(message: 'Unexpected error occurred: ${e.toString()}'));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user