public bool NeedToSummarize(WorkingTimeRecordForReport dailyWorkTaskUnit)
        {
            if (dailyWorkTaskUnit.WorkTaskId == TaskId)
            {
                return(true);
            }

            if ((IsTemporary && dailyWorkTaskUnit.IsTemporary) ||
                (IsScheduled && dailyWorkTaskUnit.IsScheduled))
            {
                if (TaskCategory == dailyWorkTaskUnit.TaskCategory &&
                    Product.Id == dailyWorkTaskUnit.Product.Id &&
                    Client.Id == dailyWorkTaskUnit.Client.Id &&
                    WorkProcess.Id == dailyWorkTaskUnit.WorkProcess.Id &&
                    Title == dailyWorkTaskUnit.Title)
                {
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
        public void EditWorkTask(WorkingTimeRecordForReport record)
        {
            var targetData = _WorkTaskModel.SelectWorkTask(record.WorkTaskId);

            var editDialogVm = new WorkTaskEditDialogViewModel(targetData);

            editDialogVm.ShowDeleteButton.Value = false;

            var result = TransitionHelper.Current.TransitionModal <TaskEditDialog>(editDialogVm);

            if (result == ModalTransitionResponse.Yes)
            {
                if (editDialogVm.NeedDelete)
                {
                    _WorkTaskModel.DeleteWorkTask(record.WorkTaskId);
                }
                else
                {
                    var inputValue = editDialogVm.TaskCardViewModel.DomainModel;
                    _WorkTaskModel.EditWorkTask(inputValue);
                }

                _Model.Load();
            }
        }
 public DailyWorkTaskUnit(WorkingTimeRecordForReport workingTime)
 {
     TaskId       = workingTime.WorkTaskId;
     TaskCategory = workingTime.TaskCategory;
     Product      = workingTime.Product;
     Client       = workingTime.Client;
     WorkProcess  = workingTime.WorkProcess;
     Title        = workingTime.Title;
     IsTemporary  = workingTime.IsTemporary;
     IsScheduled  = workingTime.IsScheduled;
 }
        public void AddWorkTask(WorkingTimeRecordForReport workingTime)
        {
            var targetTask = _DailyWorkTaskUnits.FirstOrDefault(t => t.NeedToSummarize(workingTime));

            if (targetTask == null)
            {
                targetTask = new DailyWorkTaskUnit(workingTime);
                _DailyWorkTaskUnits.Add(targetTask);
            }

            targetTask.AddWorkingTime(workingTime.ConvertToWorkingTimeRange());
        }
        public void  日複数レコードあり_同一種別含まない()
        {
            var records = new WorkingTimeRecordForReport[]
            {
                new WorkingTimeRecordForReport
                {
                    Ymd           = _Ymd0501,
                    TaskCategory  = TaskCategory.Develop,
                    WorkProcess   = _Process01,
                    Product       = _Product01,
                    Client        = _Client01,
                    StartDateTime = DateTimeParser.ConvertFromYmdHHmmss(_Ymd0501.Value, "100000").Value,
                    EndDateTime   = DateTimeParser.ConvertFromYmdHHmmss(_Ymd0501.Value, "103000").Value,
                    Title         = "サンプル作業1",
                    WorkingTimeId = new Identity <WorkingTimeRange>(1),
                    WorkTaskId    = new Identity <WorkTask>(1),
                },
                new WorkingTimeRecordForReport
                {
                    Ymd           = _Ymd0501,
                    TaskCategory  = TaskCategory.Develop,
                    WorkProcess   = _Process02,
                    Product       = _Product01,
                    Client        = _Client01,
                    StartDateTime = DateTimeParser.ConvertFromYmdHHmmss(_Ymd0501.Value, "103000").Value,
                    EndDateTime   = DateTimeParser.ConvertFromYmdHHmmss(_Ymd0501.Value, "113000").Value,
                    Title         = "サンプル作業2",
                    WorkingTimeId = new Identity <WorkingTimeRange>(2),
                    WorkTaskId    = new Identity <WorkTask>(2),
                },
            };

            var list = _MonthlyReportBuilder.Build(new DailyWorkResults {
                WorkingTimeRecordForReports = records
            });

            Assert.IsTrue(list.Length == 31);
            Assert.IsTrue(list[0].WorkYmd == _Ymd0501.Value);
            Assert.IsTrue(list[0].DailyWorkTaskUnits.Count == 2);

            Assert.IsTrue(list[0].DailyWorkTaskUnits[0].TaskId.Value == 1);
            Assert.IsTrue(list[0].DailyWorkTaskUnits[0].WorkingTimeRanges.Count == 1);
            Assert.IsTrue(list[0].DailyWorkTaskUnits[0].TotalWorkMinutes == 30);
            Assert.IsTrue(list[0].DailyWorkTaskUnits[0].Title == "サンプル作業1");

            Assert.IsTrue(list[0].DailyWorkTaskUnits[1].TaskId.Value == 2);
            Assert.IsTrue(list[0].DailyWorkTaskUnits[1].WorkingTimeRanges.Count == 1);
            Assert.IsTrue(list[0].DailyWorkTaskUnits[1].TotalWorkMinutes == 60);
            Assert.IsTrue(list[0].DailyWorkTaskUnits[1].Title == "サンプル作業2");
        }
        public async void EditWorkTaskTime(WorkingTimeRecordForReport record)
        {
            var editDialogVm = new WorkingTimeRangeEditDialogViewModel(record.ConvertToWorkingTimeRange());

            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;
                _WorkTaskModel.EditWorkingTime(editObj);

                _Model.Load();
            }
        }
        public DailyWorkResults SelectByYearMonth(YearMonth yearMonth)
        {
            var list            = new List <WorkingTimeRecordForReport>();
            var listWorkingHour = new List <WorkingHour>();

            RepositoryAction.Query(c =>
            {
                var workTaskDao    = new WorkTaskDao(c, null);
                var workingTimeDao = new WorkingTimeDao(c, null);

                var processes = new WorkProcessDao(c, null).SelectAll()
                                .Select(d => d.ToDomainObject())
                                .ToDictionary(p => p.Id);

                var products = new ProductDao(c, null).SelectAll()
                               .Select(d => d.ToDomainObject())
                               .ToDictionary(p => p.Id);

                var clients = new ClientDao(c, null).SelectAll()
                              .Select(d => d.ToDomainObject())
                              .ToDictionary(p => p.Id);

                var param = new {
                    start = yearMonth.StartDate.ToString("yyyyMMdd"),
                    end   = yearMonth.EndDate.ToString("yyyyMMdd")
                };

                var rows = c.Query <TableRow>(sql, param);

                foreach (var task in rows)
                {
                    processes.TryGetValue(new Identity <WorkProcess>(task.WorkProcessId), out WorkProcess targetProcess);
                    products.TryGetValue(new Identity <Product>(task.ProductId), out Product targetProduct);
                    clients.TryGetValue(new Identity <Client>(task.ClientId), out Client targetClient);

                    if (string.IsNullOrEmpty(task.EndTime))
                    {
                        continue;
                    }

                    var dto = new WorkingTimeRecordForReport
                    {
                        Ymd           = new YmdString(task.Ymd),
                        TaskCategory  = task.TaskCategory,
                        WorkProcess   = targetProcess,
                        Product       = targetProduct ?? Product.Empty,
                        Client        = targetClient ?? Client.Empty,
                        StartDateTime = DateTimeParser.ConvertFromYmdHHmmss(task.Ymd, task.StartTime).Value,
                        EndDateTime   = DateTimeParser.ConvertFromYmdHHmmss(task.Ymd, task.EndTime).Value,
                        Title         = task.Title,
                        WorkingTimeId = new Identity <WorkingTimeRange>(task.WorkingTimeId),
                        WorkTaskId    = new Identity <WorkTask>(task.WorkTaskId),
                        IsTemporary   = task.IsTemporary == "1",
                        IsScheduled   = string.IsNullOrEmpty(task.ImportKey) == false,
                    };

                    list.Add(dto);
                }

                var workingHourDao = new WorkingHourDao(c, null);
                listWorkingHour.AddRange(workingHourDao.SelectByYmdRange(param.start, param.end).Select(r => r.ConvertToDomainObjects()));
            });

            return(new DailyWorkResults
            {
                WorkingTimeRecordForReports = list.OrderBy(t => t.StartDateTime).ToArray(),
                WorkingHours = listWorkingHour.OrderBy(h => h.Ymd).ToArray(),
            });
        }