Files
finger_print_app/lib/services/request_service.dart
2025-12-07 12:53:43 +03:00

101 lines
3.7 KiB
Dart

import 'dart:async';
import '../models/leave_request.dart';
import '../models/advance_request.dart';
class RequestService {
// Singleton implementation
static final RequestService _instance = RequestService._internal();
factory RequestService() => _instance;
RequestService._internal();
final List<LeaveRequest> _leaveRequests = [];
final List<AdvanceRequest> _advanceRequests = [];
// Stream controllers to notify listeners of changes
final _leaveRequestsController = StreamController<List<LeaveRequest>>.broadcast();
final _advanceRequestsController = StreamController<List<AdvanceRequest>>.broadcast();
// Stream getters
Stream<List<LeaveRequest>> get leaveRequestsStream => _leaveRequestsController.stream;
Stream<List<AdvanceRequest>> get advanceRequestsStream => _advanceRequestsController.stream;
// Get all leave requests as a Future
Future<List<LeaveRequest>> getLeaveRequests() async {
print("Getting ${_leaveRequests.length} leave requests");
return List.from(_leaveRequests);
}
// Get all advance requests as a Future
Future<List<AdvanceRequest>> getAdvanceRequests() async {
print("Getting ${_advanceRequests.length} advance requests");
return List.from(_advanceRequests);
}
// Add a new leave request
Future<void> addLeaveRequest(LeaveRequest request) async {
_leaveRequests.add(request);
print("Added leave request: ${request.id}, total: ${_leaveRequests.length}");
// Notify listeners
_leaveRequestsController.add(List.from(_leaveRequests));
}
// Add a new advance request
Future<void> addAdvanceRequest(AdvanceRequest request) async {
_advanceRequests.add(request);
print("Added advance request: ${request.id}, total: ${_advanceRequests.length}");
// Notify listeners
_advanceRequestsController.add(List.from(_advanceRequests));
}
// Update leave request status
Future<void> updateLeaveRequestStatus(String id, String status) async {
final index = _leaveRequests.indexWhere((request) => request.id == id);
if (index != -1) {
// Create a new request with the updated status
final updatedRequest = LeaveRequest(
id: _leaveRequests[index].id,
leaveType: _leaveRequests[index].leaveType,
isTimedLeave: _leaveRequests[index].isTimedLeave,
fromDate: _leaveRequests[index].fromDate,
toDate: _leaveRequests[index].toDate,
fromTime: _leaveRequests[index].fromTime,
toTime: _leaveRequests[index].toTime,
reason: _leaveRequests[index].reason,
requestDate: _leaveRequests[index].requestDate,
status: status, // Updated status
);
// Replace the old request with the updated one
_leaveRequests[index] = updatedRequest;
print("Updated leave request status: $id to $status");
// Notify listeners
_leaveRequestsController.add(List.from(_leaveRequests));
}
}
// Update advance request status
Future<void> updateAdvanceRequestStatus(String id, String status) async {
final index = _advanceRequests.indexWhere((request) => request.id == id);
if (index != -1) {
// Create a new request with the updated status
final updatedRequest = AdvanceRequest(
id: _advanceRequests[index].id,
amount: _advanceRequests[index].amount,
reason: _advanceRequests[index].reason,
status: status, // Updated status
);
// Replace the old request with the updated one
_advanceRequests[index] = updatedRequest;
print("Updated advance request status: $id to $status");
// Notify listeners
_advanceRequestsController.add(List.from(_advanceRequests));
}
}
// Dispose method to close streams
void dispose() {
_leaveRequestsController.close();
_advanceRequestsController.close();
}
}