示例#1
0
        private async Task ReceiveDownloadTimecardOrderAsync(IDialogContext context, IAwaitable <DownloadTimecardOrder> result)
        {
            try
            {
                var order   = await result;
                var usecase = new MainUsecase(_currentUser);
                var res     = await usecase.DumpTimecard(order.YearMonth);

                if (res.ym.IsEmpty)
                {
                    await context.PostAsync($"年月が正しくありません。YYYYMM もしくは今月、先月と指定して下さい。");
                }
                else if (string.IsNullOrEmpty(res.csv))
                {
                    await context.PostAsync($"{res.ym.Format()} のタイムカードはデータがありません。");
                }
                else
                {
                    await context.PostAsync($"{res.ym.Format()} のタイムカードです。");

                    await context.PostAsync(res.csv);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine($"ReceiveDownloadTimecardOrderAsync failed - {ex.Message} - {ex.StackTrace}");
                await context.PostAsync($"中止しました。");
            }
        }
示例#2
0
        private async Task <bool> CommandDownloadTimecardPreviousMonthAsync(IDialogContext context, Command command)
        {
            if (_currentUser == null)
            {
                await context.PostAsync("ユーザー登録されている人のみ使える機能です。");

                return(false);
            }

            // ユーザーのタイムゾーンでの現在時刻
            var tzUser    = TimeZoneInfo.FindSystemTimeZoneById(_currentUser.TimeZoneId);
            var nowUserTz = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzUser).AddMonths(-1); // 先月
            var ym        = Yyyymm.FromDate(nowUserTz.AddMonths(-1));

            var usecase = new MainUsecase(_currentUser);
            var dumped  = await usecase.DumpTimecard(ym);

            if (string.IsNullOrEmpty(dumped))
            {
                await context.PostAsync($"{ym.Format()}bのタイムカードはデータがありません。");
            }
            else
            {
                await context.PostAsync($"{ym.Format()} のタイムカードです。");

                await context.PostAsync(dumped);
            }

            return(false);
        }
示例#3
0
        private async Task <bool> CommandPunchTodayIsOffAsync(IDialogContext context, Command command)
        {
            if (_currentUser == null)
            {
                await context.PostAsync("ユーザー登録されている人のみ使える機能です。");

                return(false);
            }

            var usecase     = new MainUsecase(_currentUser);
            var stateEntity = await usecase.GetCurrentUserStatus();

            // 「今日は休み」と言われたら、 AskingEoW でなくともその日は休日にする
            if (_currentUser != null && stateEntity != null)
            {
                // 今日を休みに更新
                await usecase.PunchTodayIsOff(stateEntity);

                var ymd = Yyyymmdd.Parse(stateEntity.TargetDate, _currentUser.TimeZoneId);
                await context.PostAsync($"今日はお休みなのですね、分かりました。" +
                                        $"今日({ymd.FormatMd()})はもう聞きません。よい休日をお過ごし下さい。");
            }
            else
            {
                await context.PostAsync($"今は仕事の終わりを聞いていません。よい休日をお過ごし下さい。");
            }

            return(false);
        }
示例#4
0
        private async Task <bool> CommandAnswerToEoWAsync(IDialogContext context, Command command)
        {
            if (_currentUser == null)
            {
                await context.PostAsync("ユーザー登録されている人のみ使える機能です。");

                return(false);
            }

            var usecase     = new MainUsecase(_currentUser);
            var stateEntity = await usecase.GetCurrentUserStatus();

            // 終業かを問い合わせ中なら、
            // (y:終わった/n:終わってない/d:今日は徹夜)に応答する。
            if ((stateEntity?.State ?? AskingState.None) == AskingState.AskingEoW)
            {
                // 聞かれた時刻で、終業時刻を更新
                var eowDateTime = await usecase.PunchEoW(stateEntity);

                await context.PostAsync($"お疲れさまでした。{eowDateTime.ymd.FormatMd()} の" +
                                        $"終業時刻は {eowDateTime.hm.Format()} を記録しました。");
            }
            else
            {
                await context.PostAsync($"今は仕事の終わりを聞いていません。終業時刻を記録するには タイムカードの編集 とタイプして下さい。");
            }

            return(false);
        }
示例#5
0
        private async Task <bool> CommandAnswerToDoNotAskTodayAsync(IDialogContext context, Command command)
        {
            if (_currentUser == null)
            {
                await context.PostAsync("ユーザー登録されている人のみ使える機能です。");

                return(false);
            }

            var usecase     = new MainUsecase(_currentUser);
            var stateEntity = await usecase.GetCurrentUserStatus();

            // 終業かを問い合わせ中なら、
            // (y:終わった/n:終わってない/d:今日は徹夜)に応答する。
            if ((stateEntity?.State ?? AskingState.None) == AskingState.AskingEoW)
            {
                // 今日はもう聞かないにして更新
                await usecase.PunchDoNotAskToday(stateEntity);

                var ymd = Yyyymmdd.Parse(stateEntity.TargetDate, _currentUser.TimeZoneId);
                await context.PostAsync($"分かりました。今日({ymd.FormatMd()})はもう聞きません。");
            }
            else
            {
                await context.PostAsync($"今は仕事の終わりを聞いていません。");
            }

            return(false);
        }
示例#6
0
        private async Task ReceivePostFeedbackOrderAsync(IDialogContext context, IAwaitable <FeedbackOrder> argument)
        {
            var order   = await argument;
            var usecase = new MainUsecase(_currentUser);
            await usecase.PostFeedback(order.Body);

            await context.PostAsync("送信しました、今後の改善のネタにします。ご意見ありがとうございます。");
        }
示例#7
0
        private async Task ReceiveModifyTimecardOrderAsync(IDialogContext context, IAwaitable <ModifyTimecardOrder> result)
        {
            try
            {
                var order = await result;

                var usecase = new MainUsecase(_currentUser);
                await usecase.ModifyTimecard(order.Date, order.EoWTime);

                await context.PostAsync("タイムカードを変更しました。");
            }
            catch (Exception ex)
            {
                Trace.WriteLine($"ReceiveModifyTimecardOrderAsync failed - {ex.Message} - {ex.StackTrace}");
                await context.PostAsync($"中止しました。");
            }
        }
示例#8
0
        private async Task <bool> CommandAnswerToEoWWithTimeAsync(IDialogContext context, Command command)
        {
            if (_currentUser == null)
            {
                await context.PostAsync("ユーザー登録されている人のみ使える機能です。");

                return(false);
            }

            var usecase = new MainUsecase(_currentUser);

            // 聞かれた時刻で、終業時刻を更新
            var eowDateTime = await usecase.PunchEoW(command.Message);

            await context.PostAsync($"お疲れさまでした。{eowDateTime.ymd.FormatMd()} の" +
                                    $"終業時刻は {eowDateTime.hm.Format()} を記録しました。");

            return(false);
        }