Beispiel #1
0
        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));
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
        }