forked from eatvio/eatvio_app
39 lines
1.1 KiB
Dart
39 lines
1.1 KiB
Dart
/// Finished diaries stay editable for this many calendar days back from today,
|
|
/// including today. Older finished days stay read-only.
|
|
const int diaryFinishedEditWindowInDays = 7;
|
|
|
|
bool canEditDiaryDay({
|
|
required bool isConsultantView,
|
|
required bool isDiaryCommented,
|
|
required bool isDiaryFinished,
|
|
required int closed,
|
|
required String diaryDate,
|
|
DateTime? now,
|
|
}) {
|
|
if (isConsultantView || isDiaryCommented || closed != 0) {
|
|
return false;
|
|
}
|
|
if (!isDiaryFinished) {
|
|
return true;
|
|
}
|
|
final day = _calendarDate(diaryDate);
|
|
if (day == null) {
|
|
return false;
|
|
}
|
|
final clock = now ?? DateTime.now();
|
|
final today = DateTime(clock.year, clock.month, clock.day);
|
|
final oldestEditableDay = today.subtract(
|
|
const Duration(days: diaryFinishedEditWindowInDays),
|
|
);
|
|
return !day.isBefore(oldestEditableDay) && !day.isAfter(today);
|
|
}
|
|
|
|
DateTime? _calendarDate(String raw) {
|
|
final parsed = DateTime.tryParse(raw);
|
|
if (parsed == null) {
|
|
return null;
|
|
}
|
|
final local = parsed.toLocal();
|
|
return DateTime(local.year, local.month, local.day);
|
|
}
|