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($"中止しました。"); } }
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); }
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); }
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); }
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); }
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("送信しました、今後の改善のネタにします。ご意見ありがとうございます。"); }
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($"中止しました。"); } }
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); }