Esempio n. 1
0
        public void AddRange(WorkingHour[] workingHours)
        {
            RepositoryAction.Transaction((c, t) =>
            {
                var dao = new WorkingHourDao(c, t);

                dao.Delete(workingHours.Select(w => w.Ymd.Value).Distinct().ToArray());

                foreach (var row in workingHours.Where(w => w.IsEmpty == false))
                {
                    dao.Insert(WorkingHourTableRow.FromDomainObjects(row));
                }
            });
        }
 public EmpHourController()
 {
     dao = new WorkingHourDao();
 }
        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(),
            });
        }