public WorkUnitRecorderModel() { _WorkTaskUseCase = new WorkTaskUseCase( ContainerHelper.Resolver.Resolve <IWorkTaskRepository>(), ContainerHelper.Resolver.Resolve <IWorkingTimeRangeRepository>()); _WorkingTimeRangeUseCase = new WorkingTimeRangeUseCase( ContainerHelper.Resolver.Resolve <IWorkingTimeRangeRepository>(), ContainerHelper.Resolver.Resolve <IWorkTaskRepository>()); _GetWorkingTimeForTimelineUseCase = new GetWorkingTimeForTimelineUseCase(ContainerHelper.Resolver.Resolve <IWorkingTimeQueryService>()); _GetWorkTaskWithTimesUseCase = new GetWorkTaskWithTimesUseCase(ContainerHelper.Resolver.Resolve <IWorkTaskWithTimesQueryService>()); ObjectChangedNotificator.Instance.WorkTaskEdited += Load; MessageBroker.Default.Subscribe <WorkTaskRegistedEventArg>(_ => Load()); TargetDate = new ReactivePropertySlim <DateTime>(DateTime.Today); TargetDate.Subscribe(_ => Load()).AddTo(_Disposables); ContainsCompleted.Subscribe(_ => Load()).AddTo(_Disposables); }
public async void AddWorkingTime() { var selectedDate = MainWindowViewModel.Instance.Contents.OfType <WorkUnitRecorderViewModel>().First().TargetDateTime.Value.Date; var now = SystemClockServiceLocator.Current.Now; var workingTimeRange = WorkingTimeRange.ForEdit(Dto.TaskId, now, now); if (now.Date == selectedDate) { // もう少しお行儀のいい書き方はないものか... var usecase = new GetWorkingTimeForTimelineUseCase(ContainerHelper.Resolver.Resolve <IWorkingTimeQueryService>()); var list = usecase.SelectByYmd(selectedDate.ToYmd()); var lastTime = list.Where(i => i.TimePeriod.IsFuture == false) .Where(i => i.TimePeriod.IsStopped) .OrderBy(i => i.TimePeriod.EndDateTime.Value) .LastOrDefault(); if (lastTime != null) { workingTimeRange = WorkingTimeRange.ForEdit(Dto.TaskId, lastTime.TimePeriod.EndDateTime.Value.AddMinutes(1), null); } } else { workingTimeRange = WorkingTimeRange.ForEdit(Dto.TaskId, selectedDate, selectedDate); } var editDialogVm = new WorkingTimeRangeEditDialogViewModel(workingTimeRange); var view = new WorkingTimeRangeEditDialog { DataContext = editDialogVm }; //show the dialog var result = (bool?)await DialogHost.Show(view); if (result.HasValue && result.Value) { var editObj = editDialogVm.WorkingTimeViewModel.DomainModel; _Model.AddWorkingTime(editObj); } }