154 lines
4.6 KiB
Dart
154 lines
4.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
/// Threshold for time elapsed (e.g., 48 hours)
|
|
const Duration THRESHOLD_DURATION = Duration(hours: 48);
|
|
|
|
/// Action text labels
|
|
class ButtonActions {
|
|
static const String checkIn = "Check In";
|
|
static const String checkOut = "Check Out";
|
|
static const String requestRegularize = "Regularize";
|
|
static const String rejected = "Rejected";
|
|
static const String approved = "Approved";
|
|
static const String requested = "Requested";
|
|
static const String approve = "Approve";
|
|
static const String reject = "Reject";
|
|
}
|
|
|
|
/// Action colors mapping
|
|
class AttendanceActionColors {
|
|
static const Map<String, Color> colors = {
|
|
ButtonActions.checkIn: Colors.green,
|
|
ButtonActions.checkOut: Colors.red,
|
|
ButtonActions.requestRegularize: Colors.blue,
|
|
ButtonActions.rejected: Colors.orange,
|
|
ButtonActions.approved: Colors.green,
|
|
ButtonActions.requested: Colors.yellow,
|
|
ButtonActions.approve: Colors.blueAccent,
|
|
ButtonActions.reject: Colors.pink,
|
|
};
|
|
}
|
|
|
|
/// Attendance button helper utilities
|
|
class AttendanceButtonHelper {
|
|
static String getUniqueKey(String employeeId, String logId) {
|
|
return '${employeeId}_$logId';
|
|
}
|
|
|
|
static bool isLogFromYesterday(DateTime? checkIn, DateTime? checkOut) {
|
|
final yesterday = DateTime.now().subtract(const Duration(days: 1));
|
|
final yesterdayOnly =
|
|
DateTime(yesterday.year, yesterday.month, yesterday.day);
|
|
|
|
return checkIn != null &&
|
|
checkOut != null &&
|
|
DateUtils.isSameDay(checkIn, yesterdayOnly) &&
|
|
DateUtils.isSameDay(checkOut, yesterdayOnly);
|
|
}
|
|
|
|
static bool isTodayApproved(int activity, DateTime? checkIn) {
|
|
final today = DateTime.now();
|
|
return activity == 4 && DateUtils.isSameDay(checkIn, today);
|
|
}
|
|
|
|
static bool isApprovedButNotToday(int activity, bool isTodayApproved) {
|
|
return activity == 4 && !isTodayApproved;
|
|
}
|
|
|
|
static bool isTimeElapsed(DateTime? time,
|
|
[Duration threshold = THRESHOLD_DURATION]) {
|
|
if (time == null) return false;
|
|
return DateTime.now().difference(time).compareTo(threshold) > 0;
|
|
}
|
|
|
|
static bool isButtonDisabled({
|
|
required bool isUploading,
|
|
required bool isYesterday,
|
|
required int activity,
|
|
required bool isApprovedButNotToday,
|
|
}) {
|
|
return isUploading ||
|
|
isYesterday ||
|
|
activity == 2 ||
|
|
activity == 5 ||
|
|
isApprovedButNotToday;
|
|
}
|
|
|
|
static String getActionText(
|
|
int activity, DateTime? checkIn, DateTime? checkOut) {
|
|
switch (activity) {
|
|
case 0:
|
|
return ButtonActions.checkIn;
|
|
case 1:
|
|
if (checkOut == null && isTimeElapsed(checkIn)) {
|
|
return ButtonActions.requestRegularize;
|
|
}
|
|
return ButtonActions.checkOut;
|
|
case 2:
|
|
return ButtonActions.requestRegularize;
|
|
case 4:
|
|
return ButtonActions.checkIn;
|
|
case 5:
|
|
return ButtonActions.rejected;
|
|
default:
|
|
return ButtonActions.checkIn;
|
|
}
|
|
}
|
|
|
|
static Color getButtonColor({
|
|
required bool isYesterday,
|
|
required bool isTodayApproved,
|
|
required int activity,
|
|
}) {
|
|
if (isYesterday) return Colors.grey;
|
|
if (isTodayApproved) return Colors.green;
|
|
|
|
return AttendanceActionColors.colors[
|
|
activity == 0 ? ButtonActions.checkIn : ButtonActions.checkOut] ??
|
|
Colors.grey;
|
|
}
|
|
|
|
static bool isOlderThanDays(DateTime? date, int days) {
|
|
if (date == null) return false;
|
|
|
|
// Get today's date with time set to midnight (ignoring the time)
|
|
final now = DateTime.now();
|
|
final today = DateTime(now.year, now.month, now.day);
|
|
|
|
// Compare the date part (ignore time) of the provided date with today's date
|
|
final compareDate = DateTime(date.year, date.month, date.day);
|
|
final difference = today.difference(compareDate).inDays;
|
|
|
|
return difference >=
|
|
days; // Return true if the difference is greater than or equal to 'days'
|
|
}
|
|
|
|
static String getButtonText({
|
|
required int activity,
|
|
required DateTime? checkIn,
|
|
required DateTime? checkOut,
|
|
required bool isTodayApproved,
|
|
}) {
|
|
if (activity == 5) return ButtonActions.rejected;
|
|
if (isTodayApproved) return ButtonActions.checkIn;
|
|
if (activity == 4) return ButtonActions.approved;
|
|
if (activity == 2) return ButtonActions.requested;
|
|
|
|
if (activity == 0) {
|
|
if (isTimeElapsed(checkIn)) {
|
|
return ButtonActions.requestRegularize;
|
|
}
|
|
return ButtonActions.checkIn;
|
|
}
|
|
|
|
if (activity == 1) {
|
|
if (checkOut == null && isTimeElapsed(checkIn)) {
|
|
return ButtonActions.requestRegularize;
|
|
}
|
|
return ButtonActions.checkOut;
|
|
}
|
|
|
|
return ButtonActions.checkOut;
|
|
}
|
|
}
|