From c4f62b8881d17a752f63450d28efe7c7732a0c05 Mon Sep 17 00:00:00 2001 From: bannzai Date: Wed, 15 Jan 2025 13:50:51 +0900 Subject: [PATCH] Fix --- lib/entity/pill_sheet.codegen.dart | 12 ++++++++++++ lib/entity/pill_sheet_group.codegen.dart | 5 +++++ .../components/core/pill_number.dart | 5 +++-- ...sheet_modified_history_taken_pill_action.dart | 16 ++++++++++------ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/lib/entity/pill_sheet.codegen.dart b/lib/entity/pill_sheet.codegen.dart index 622f2dfe4b..6c03ebcd39 100644 --- a/lib/entity/pill_sheet.codegen.dart +++ b/lib/entity/pill_sheet.codegen.dart @@ -133,6 +133,11 @@ class PillSheet with _$PillSheet { return 0; } + // NOTE: [PillSheet:OLD_Calc_LastTakenPillNumber] 服用日が開始日より前の場合がある。服用日数を1つ目の1番目のピルシートに調整した時 + if (lastTakenDate.isBefore(beginingDate)) { + return 0; + } + return pillNumberFor(targetDate: lastTakenDate); } @@ -141,6 +146,12 @@ class PillSheet with _$PillSheet { if (lastTakenDate == null) { return null; } + + // NOTE: [PillSheet:OLD_Calc_LastTakenPillNumber] 服用日が開始日より前の場合がある。服用日数を1つ目の1番目のピルシートに調整した時 + if (lastTakenDate.isBefore(beginingDate)) { + return null; + } + return pillNumberFor(targetDate: lastTakenDate); } @@ -189,6 +200,7 @@ class PillSheet with _$PillSheet { return dates[pillNumberInPillSheet - 1]; } + // NOTE: [PillSheet:OLD_Calc_LastTakenPillNumber] beginDate > targetDate(lastTakenDate) の場合がある。「本日の服用日」を編集して1番目を未服用にした場合 // pillNumberは0は不自然なので、1番を返す int pillNumberFor({required DateTime targetDate}) { return max(daysBetween(beginingDate.date(), targetDate) - summarizedRestDuration(restDurations: restDurations, upperDate: targetDate) + 1, 1); diff --git a/lib/entity/pill_sheet_group.codegen.dart b/lib/entity/pill_sheet_group.codegen.dart index 16271f5367..c43176bc79 100644 --- a/lib/entity/pill_sheet_group.codegen.dart +++ b/lib/entity/pill_sheet_group.codegen.dart @@ -235,6 +235,11 @@ extension PillSheetGroupDisplayDomain on PillSheetGroup { required int pageIndex, required int pillNumberInPillSheet, }) { + if (pageIndex == 0 && pillNumberInPillSheet == 1) { + final result = pillNumbersForSequential.where((e) => e.pillSheet.groupIndex == pageIndex).toList()[pillNumberInPillSheet - 1].number; + debugPrint("result: $result"); + return result; + } return pillNumbersForSequential.where((e) => e.pillSheet.groupIndex == pageIndex).toList()[pillNumberInPillSheet - 1].number; } diff --git a/lib/features/calendar/components/pill_sheet_modified_history/components/core/pill_number.dart b/lib/features/calendar/components/pill_sheet_modified_history/components/core/pill_number.dart index 20b7e527ed..75522ab2e6 100644 --- a/lib/features/calendar/components/pill_sheet_modified_history/components/core/pill_number.dart +++ b/lib/features/calendar/components/pill_sheet_modified_history/components/core/pill_number.dart @@ -30,9 +30,10 @@ class PillNumber extends StatelessWidget { abstract class PillSheetModifiedHistoryPillNumberOrDate { static String hyphen() => '-'; - static String taken({required int beforeLastTakenPillNumber, required int afterLastTakenPillNumber}) { + static String taken({required int? beforeLastTakenPillNumber, required int afterLastTakenPillNumber}) { // beforePillSheetの最後に飲んだ番号+1から服用記録が始まる - final left = beforeLastTakenPillNumber + 1; + // nullの場合は服用記録を取り消したり、服用日を移動した際にありえる + final left = (beforeLastTakenPillNumber ?? 0) + 1; // 1度飲みの時に本日分を服用した場合は1錠分の服用履歴を表示する if (left == afterLastTakenPillNumber) { return L.withNumber('$afterLastTakenPillNumber'); diff --git a/lib/features/calendar/components/pill_sheet_modified_history/components/rows/pill_sheet_modified_history_taken_pill_action.dart b/lib/features/calendar/components/pill_sheet_modified_history/components/rows/pill_sheet_modified_history_taken_pill_action.dart index 901bfcc158..d4c937cc29 100644 --- a/lib/features/calendar/components/pill_sheet_modified_history/components/rows/pill_sheet_modified_history_taken_pill_action.dart +++ b/lib/features/calendar/components/pill_sheet_modified_history/components/rows/pill_sheet_modified_history_taken_pill_action.dart @@ -39,6 +39,8 @@ class PillSheetModifiedHistoryTakenPillAction extends HookConsumerWidget { return Container(); } + final beforeLastTakenPillNumber = beforePillSheetGroup.lastTakenPillSheetOrFirstPillSheet.lastTakenPillNumber; + final time = DateTimeFormatter.hourAndMinute(estimatedEventCausingDate); return GestureDetector( onTap: () { @@ -84,12 +86,14 @@ class PillSheetModifiedHistoryTakenPillAction extends HookConsumerWidget { day: Day(estimatedEventCausingDate: estimatedEventCausingDate), pillNumbersOrHyphenOrDate: PillNumber( pillNumber: PillSheetModifiedHistoryPillNumberOrDate.taken( - beforeLastTakenPillNumber: beforePillSheetGroup.pillNumberWithoutDate( - // 例えば履歴の表示の際にbeforePillSheetGroupとafterPillSheetGroupのpillSheetAppearanceModeが違う場合があるので、afterPillSheetGroup.pillSheetAppearanceModeを引数にする - pillSheetAppearanceMode: afterPillSheetGroup.pillSheetAppearanceMode, - pageIndex: beforePillSheetGroup.lastTakenPillSheetOrFirstPillSheet.groupIndex, - pillNumberInPillSheet: beforePillSheetGroup.lastTakenPillSheetOrFirstPillSheet.lastTakenPillNumber ?? 1, - ), + beforeLastTakenPillNumber: beforeLastTakenPillNumber == null + ? null + : beforePillSheetGroup.pillNumberWithoutDate( + // 例えば履歴の表示の際にbeforePillSheetGroupとafterPillSheetGroupのpillSheetAppearanceModeが違う場合があるので、afterPillSheetGroup.pillSheetAppearanceModeを引数にする + pillSheetAppearanceMode: afterPillSheetGroup.pillSheetAppearanceMode, + pageIndex: beforePillSheetGroup.lastTakenPillSheetOrFirstPillSheet.groupIndex, + pillNumberInPillSheet: beforeLastTakenPillNumber, + ), afterLastTakenPillNumber: afterPillSheetGroup.pillNumberWithoutDate( pillSheetAppearanceMode: afterPillSheetGroup.pillSheetAppearanceMode, pageIndex: afterPillSheetGroup.lastTakenPillSheetOrFirstPillSheet.groupIndex,