public WorkingTimeRecordForReport[] Get(YmdString ymdString) { var yearMonth = YearMonth.FromYmdString(ymdString); var headers = _DailyWorkRecordQueryService.SelectByYearMonth(yearMonth); return(headers.WorkingTimeRecordForReports .Where(h => h.Ymd.Equals(ymdString)) .OrderBy(h => h.StartDateTime) .ToArray()); }
public WorkTaskWithTimesDto[] SelectByYmd(YmdString ymd, bool containsCompleted) { var list = new List <WorkTaskWithTimesDto>(); RepositoryAction.Query(c => { var workTaskDao = new WorkTaskDao(c, null); var workingTimeDao = new WorkingTimeDao(c, null); var processes = new WorkProcessDao(c, null).SelectAll(); var products = new ProductDao(c, null).SelectAll(); var clients = new ClientDao(c, null).SelectAll(); var completedDao = new WorkTaskCompletedDao(c, null); var tasks = workTaskDao.SelectPlaned(ymd, containsCompleted); var times = workingTimeDao.SelectByTaskIds(tasks.Select(t => t.Id).Distinct().ToArray()); var completed = completedDao.SelectCompleted(tasks.Select(t => t.Id).Distinct().ToArray()); foreach (var task in tasks) { var dto = new WorkTaskWithTimesDto { TaskId = new Identity <Domain.Domain.Tasks.WorkTask>(task.Id), ClientName = clients.FirstOrDefault(c => c.Id == task.ClientId)?.Name ?? "", ProcessName = processes.FirstOrDefault(p => p.Id == task.ProcessId)?.Title ?? "", ProductName = products.FirstOrDefault(p => p.Id == task.ProductId)?.Name ?? "", TaskCategory = task.TaskCategory, Title = task.Title, IsCompleted = completed.Any(c => c == task.Id), IsScheduled = task.TaskSource == Domain.Domain.Tasks.TaskSource.Schedule, }; dto.WorkingTimes = times.Where(t => t.TaskId == task.Id) .Select(t => t.ToDomainObject()) .OrderBy(t => t.TimePeriod.StartDateTime) .ThenBy(t => t.Id) .ToArray(); list.Add(dto); } }); try { return(list.OrderBy(i => i.WorkingTimes.Any(t => t.IsDoing) ? 0 : 1) .ThenByDescending(i => i.WorkingTimes.Where(t => t.TimePeriod.IsFuture == false).Any() ? i.WorkingTimes.Where(t => t.TimePeriod.IsFuture == false).Max(t => t.TimePeriod.StartDateTime) : DateTime.MinValue) .ThenBy(i => i.WorkingTimes.Where(t => t.TimePeriod.IsFuture).Any() ? i.WorkingTimes.Where(t => t.TimePeriod.IsFuture).Min(t => t.TimePeriod.StartDateTime) : DateTime.MaxValue) .ThenBy(i => i.TaskId.Value).ToArray()); } catch (Exception) { return(list.ToArray()); } }
/// <summary> /// 作業時間の記録に利用するためのタスクを取得します /// </summary> /// <param name="ymd">日付</param> /// <returns></returns> public WorkTaskTableRow[] SelectPlaned(YmdString ymd, bool containsCompleted) { var where = ""; if (containsCompleted) { where = "( id IN ( select taskid from workingtimes where ymd = @ymd ) OR actualenddatetime IS NULL )"; } else { where = "actualenddatetime IS NULL"; } return(SelectCore(where, new { ymd = ymd.Value }).ToArray()); }
/// <summary> /// 指定した日付の予定をタスクとして取り込みます /// </summary> /// <param name="ymdString">取り込み対象日付</param> /// <returns></returns> public async Task <WorkTask[]> ImportToTaskAsync(YmdString ymdString) { try { _Logger.Info($"[ScheduleImporter] ▼スケジュール取り込み開始 target=[{ymdString}]"); // イベントの取得 var fromDateTime = ymdString.ToDateTime().Value; var toDateTime = fromDateTime.AddDays(1).AddMinutes(-1); var targetKinds = _WorkTaskBuilderConfig.EventMappers.Select(e => e.EventKind).ToArray(); var events = await _ScheduledEventRepository.FetchScheduledEventsAsync(targetKinds, fromDateTime, toDateTime); if (events == null) { _Logger.Error("[ScheduleImporter] unknown error"); return(Array.Empty <WorkTask>()); } // 未登録のイベントを取り込み var registedWorkTasks = _WorkTaskRepository.SelectByImportKeys(events.Select(e => e.Id).ToArray()); var list = new List <WorkTask>(); var builder = new WorkTaskBuilder(_WorkTaskBuilderConfig, _ScheduleTitleMaps); foreach (var @event in events) { // 登録済みは無視する if (registedWorkTasks.Any(t => t.ImportKey == @event.Id)) { continue; } // 未登録ならスケジュールに合わせて登録 (WorkTask workTask, ImportedTask importedTask) = builder.Build(@event); workTask = _WorkTaskRepository.AddForSchedule(workTask, importedTask); list.Add(workTask); var newWorkingTime = WorkingTimeRange.FromScheduledEvent(workTask.Id, @event); _WorkingTimeRangeRepository.Add(newWorkingTime); } return(list.ToArray()); } finally { _Logger.Info($"[ScheduleImporter] ▲スケジュール取り込み終了 target=[{ymdString}]"); } }
public async Task <WorkTask[]> ImportToTaskAsync(YmdString ymdString) { // イベントの取得 var fromDateTime = ymdString.ToDateTime().Value; var toDateTime = fromDateTime.AddDays(1).AddMinutes(-1); var targetKinds = _WorkTaskBuilderConfig.EventMappers.Select(e => e.EventKind).ToArray(); var events = await _ScheduledEventRepository.FetchScheduledEventsAsync(targetKinds, fromDateTime, toDateTime); if (events == null) { return(new WorkTask[0]); } // 未登録のイベントを取り込み var registedWorkTasks = _WorkTaskRepository.SelectByImportKeys(events.Select(e => e.Id).ToArray()); var list = new List <WorkTask>(); var builder = new WorkTaskBuilder(_WorkTaskBuilderConfig, _ScheduleTitleMaps); foreach (var @event in events) { // 登録済みは無視する if (registedWorkTasks.Any(t => t.ImportKey == @event.Id)) { continue; } // 未登録ならスケジュールに合わせて登録 var workTask = builder.Build(@event); workTask = _WorkTaskRepository.Add(workTask); list.Add(workTask); var newWorkingTime = WorkingTimeRange.FromScheduledEvent(workTask.Id, @event); _WorkingTimeRangeRepository.Add(newWorkingTime); } return(list.ToArray()); }
/// <summary> /// 作業時間の記録に利用するためのタスクを取得します /// </summary> /// <param name="ymd">日付</param> /// <returns></returns> public WorkTaskTableRow[] SelectPlaned(YmdString ymd, bool containsCompleted) { string where; object param; if (containsCompleted) { where = @" ( id IN ( SELECT worktaskid FROM worktaskscompleted WHERE registdatetime BETWEEN @start AND @end ) OR NOT EXISTS ( SELECT 1 FROM worktaskscompleted WHERE worktaskid = worktasks.id ) )"; param = new { start = ymd.ToDateTime().Value, end = ymd.ToDateTime().Value.AddDays(1).AddMinutes(-1) }; } else { where = @" NOT EXISTS ( SELECT 1 FROM worktaskscompleted WHERE worktaskid = worktasks.id )"; param = new object(); } return(SelectCore(where, param).ToArray()); }
public WorkTaskWithTimesDto[] GetByYmd(YmdString ymdString, bool containsCompleted) { return(_WorkTaskWithTimesQueryService.SelectByYmd(ymdString, containsCompleted)); }
public WorkingHour GetWorkingHour(YmdString ymd) { return(_WorkingHourRepository.SelectYmd(ymd)); }
public WorkingHour(YmdString ymd, DateTime?startTime, DateTime?endTime) { Ymd = ymd; StartTime = startTime; EndTime = endTime; }
public WorkingHour SelectYmd(YmdString ymd) { throw new NotImplementedException(); }