예제 #1
0
        private string GetCancelingReason(JobStatusLog jobStatusLog)
        {
            if (!jobStatusLog.CancellingId.HasValue)
            {
                return(null);
            }

            var cancelingTemplate = cancelingTemplatesService.GetById(jobStatusLog.CancellingId.Value);

            return(cancelingTemplate?.Text);
        }
        private void WriteToLog(string message)
        {
            Application.Current.Dispatcher.Invoke(() => {
                if (!string.IsNullOrEmpty(JobStatusLog.Text))
                {
                    JobStatusLog.AppendText("\n");
                }

                JobStatusLog.AppendText(GetCurrentTimestamp() + " " + message);
                JobStatusLog.ScrollToEnd();
            });
        }
예제 #3
0
        public IJobStatusLogModel GetLatestJobStatusLog(Guid dayAssignId)
        {
            IEnumerable <JobStatusLog> jobStatusLogList = jobStatusLogRepository.Query.Where(js => js.DayAssignId == dayAssignId);

            JobStatusLog jobStatusLog = jobStatusLogList.OrderByDescending(js => js.Date).FirstOrDefault();

            if (jobStatusLog == null)
            {
                return(null);
            }

            var result = jobStatusLog.Map <IJobStatusLogModel>();

            result.CancelingReason = GetCancelingReason(jobStatusLog);

            return(result);
        }
예제 #4
0
        public void Save(Guid dayAssignId, JobStatus statusId, string comment, List <IMemberSpentTimeModel> timeLogList, Guid?cancelingReasonId, Guid[] uploadedFileIds, Guid?creatorId)
        {
            IMemberModel currentUser = creatorId == null?memberService.GetCurrentUser() : memberService.GetById(creatorId.Value);

            IJobStatusLogModel previousStatusLog = GetLatestJobStatusLog(dayAssignId);

            JobStatusLog jobStatusLog = new JobStatusLog
            {
                DayAssignId      = dayAssignId,
                MemberId         = currentUser.MemberId,
                StatusId         = statusId,
                Date             = DateTime.Now,
                Comment          = comment,
                PreviousStatusId = previousStatusLog?.Id ?? Guid.Empty,
                TimeLogList      = timeLogList?.Select(GetMemberTimeModel) ?? new List <TimeLog>(),
                CancellingId     = cancelingReasonId,
                UploadedFileIds  = uploadedFileIds
            };

            jobStatusLogRepository.Save(jobStatusLog);
        }
예제 #5
0
        public IJobStatusLogModel GetLatestChangeStatusDataAndSummarizedSpentTime(Guid dayAssignId)
        {
            IEnumerable <JobStatusLog> jobStatusLogList = jobStatusLogRepository.Query.Where(js => js.DayAssignId == dayAssignId);

            IEnumerable <TimeLog> allSpentTimeForUsers = jobStatusLogList.SelectMany(js => js.TimeLogList).ToList();

            JobStatusLog jobStatusLog = jobStatusLogList.OrderByDescending(js => js.Date).FirstOrDefault();

            if (jobStatusLog == null)
            {
                return(null);
            }

            jobStatusLog.TimeLogList = allSpentTimeForUsers;

            var result = jobStatusLog.Map <IJobStatusLogModel>();

            result.CancelingReason = GetCancelingReason(jobStatusLog);

            return(result);
        }
예제 #6
0
        public IEnumerable <IJobStatusLogModel> GetStatusLogModelList(IEnumerable <Guid> dayAssignIds, bool showLastCompletedOrCanceledStatus)
        {
            var dayAssignIdList = dayAssignIds.AsList();

            if (!dayAssignIdList.HasValue())
            {
                return(Enumerable.Empty <IJobStatusLogModel>());
            }

            var jobStatusLogModelList = new ConcurrentBag <IJobStatusLogModel>();

            List <JobStatusLog> jobStatusLogList = GetJobStatusLogList(dayAssignIdList);
            List <IGrouping <Guid, JobStatusLog> > jobStatuses = jobStatusLogList.GroupBy(i => i.DayAssignId).ToList();
            IEnumerable <Guid>             cancelReasonIds     = jobStatusLogList.Where(i => i.CancellingId.HasValue).Select(i => i.CancellingId.Value);
            List <ICancelingTemplateModel> cancelReasons       = cancelingTemplatesService.GetByIds(cancelReasonIds).ToList();

            Parallel.ForEach(jobStatuses, dayAssignStatuses =>
            {
                JobStatusLog jobStatusLog = GetJobStatusLog(dayAssignStatuses, showLastCompletedOrCanceledStatus);

                if (jobStatusLog == null)
                {
                    return;
                }

                jobStatusLog.TimeLogList = dayAssignStatuses.SelectMany(js => js.TimeLogList).ToList();

                var model = jobStatusLog.Map <IJobStatusLogModel>();
                model.IsCommentExistInAnyStatus = dayAssignStatuses.Any(y => y.Comment.IsNotNullOrEmpty());

                if (jobStatusLog.CancellingId.HasValue)
                {
                    model.CancelingReason = cancelReasons.FirstOrDefault(i => i.Id == jobStatusLog.CancellingId)?.Text;
                }

                jobStatusLogModelList.Add(model);
            });

            return(jobStatusLogModelList);
        }