import 'package:tasq/models/leave_of_absence.model.dart'; import 'package:tasq/models/pass_slip.model.dart'; import 'programmer_daily_time.dart'; /// Index approved leaves covering the given moment by user ID. /// /// Filters to leaves where: /// - status == 'approved' /// - startTime <= now < endTime /// /// Returns a map from userId to the leave record. Map activeLeaveByUser( List leaves, DateTime now, ) { final result = {}; for (final leave in leaves) { if (leave.status == 'approved' && !leave.startTime.isAfter(now) && leave.endTime.isAfter(now)) { result[leave.userId] = leave; } } return result; } /// Index active pass slips by user ID. /// /// Filters to slips where slip.isActive is true. /// /// Returns a map from userId to the pass slip record. Map activePassSlipByUser(List slips) { final result = {}; for (final slip in slips) { if (slip.isActive) { result[slip.userId] = slip; } } return result; } /// Get the set of Manila calendar days covered by approved leaves for a user. /// /// Iterates through all approved leaves for the given user and collects the /// set of Manila day keys (as DateTime.utc(year, month, day)) from each /// leave's start date through end date, inclusive. Set approvedLeaveDays( List leaves, String userId, ) { final result = {}; for (final leave in leaves) { if (leave.userId == userId && leave.status == 'approved') { var current = manilaDay(leave.startTime); final endDay = manilaDay(leave.endTime); while (!current.isAfter(endDay)) { result.add(current); current = current.add(Duration(days: 1)); } } } return result; }