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); }
public async Task <(Yyyymm ym, string csv)> DumpTimecard(string yyyymm) { var ym = Yyyymm.Parse(yyyymm, _currentUser.TimeZoneId); if (ym.IsEmpty) { Trace.WriteLine($"DumpTimecard parse ym failed - {yyyymm}"); return(ym, string.Empty); } var dumped = await DumpTimecard(ym); return(ym, dumped); }
public async Task <string> DumpTimecard(Yyyymm ym) { var records = await _monthlyTimecardRepo.GetTimecardRecordByYearMonth(_currentUser.UserId, ym); if (records == null || records.Count == 0) { return(string.Empty); } var builder = new StringBuilder(); builder.Append("日付, 終業時刻"); builder.Append("\n\n"); foreach (var rec in records) { builder.Append($"{rec.Day}, {rec.EoWTime}"); builder.Append("\n\n"); } return(builder.ToString()); }
public async Task <IList <TimecardRecord> > GetTimecardRecordByYearMonth(string userId, Yyyymm ym) { IList <TimecardRecord> timecardRecords = new List <TimecardRecord>(); var monthlyTimecardEntity = await GetMonthlyTimecardsByYearMonth(userId, ym.Year, ym.Month); if (monthlyTimecardEntity != null) { timecardRecords = monthlyTimecardEntity.GetTimecardsAsList(); } return(timecardRecords); }