public async Task PunchTodayIsOff(ConversationStateEntity stateEntity) { // 今日は休み にして更新 stateEntity.State = AskingState.TodayIsOff; await _conversationStateRepo.UpsertState(stateEntity); // もし終業時刻が登録済みだったら削除する var tzUser = TimeZoneInfo.FindSystemTimeZoneById(_currentUser.TimeZoneId); var nowUserTz = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzUser); // ユーザーのタイムゾーンでの現在時刻 await _monthlyTimecardRepo.DeleteTimecardRecord(_currentUser.UserId, Yyyymmdd.FromDate(nowUserTz)); }
public async Task ModifyTimecard(string yyyymmdd, string eoWTime) { var ymd = Yyyymmdd.Parse(yyyymmdd, _currentUser.TimeZoneId); if (ymd.isEmpty) { Trace.WriteLine($"ModifyTimecard parse ymd failed - {yyyymmdd}"); return; } // なしと言われたら該当日のタイムカードを削除 if (eoWTime.Contains("なし")) { await _monthlyTimecardRepo.DeleteTimecardRecord(_currentUser.UserId, ymd); // ユーザーのタイムゾーンでの現在時刻 var tzUser = TimeZoneInfo.FindSystemTimeZoneById(_currentUser.TimeZoneId); var nowUserTz = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzUser); var today = Yyyymmdd.FromDate(nowUserTz); // 削除日が今日だったら、また聞き始めるようにステータスを削除する if (ymd.Equals(today)) { var stateEntity = await _conversationStateRepo.GetStatusByUserId(_currentUser.UserId); if (stateEntity != null) { stateEntity.State = AskingState.None; await _conversationStateRepo.UpsertState(stateEntity); } } } else { // 該当日のタイムカードを更新または追加 var hhmm = Hhmm.Parse(eoWTime); if (hhmm.IsEmpty) { Trace.WriteLine($"ModifyTimecard parse hhmm failed - {hhmm}"); return; } await PunchEoW(ymd, hhmm); } }
public async Task <(Yyyymmdd ymd, Hhmm hm)> PunchEoW(string hhmmText) { var tzUser = TimeZoneInfo.FindSystemTimeZoneById(_currentUser.TimeZoneId); var nowUserTz = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzUser); // ユーザーのタイムゾーンでの現在時刻 var hhmm = Hhmm.Parse(hhmmText); var ymd = Yyyymmdd.FromDate(nowUserTz); // パース失敗していたら処理しない if (hhmm.IsEmpty || ymd.isEmpty) { Trace.WriteLine($"PunchEoW parse hhmm failed - {hhmmText}"); return(ymd, hhmm); } await PunchEoW(ymd, hhmm); return(ymd, hhmm); }