public IChangeStatusInfo GetJobStatusInfo(IJobStatusLogModel jobStatusLog, IDayAssign dayAssign) { ChangeStatusInfo resultModel = null; if (IsValidLog(jobStatusLog, dayAssign)) { resultModel = new ChangeStatusInfo { ChangeStatusComment = jobStatusLog.Comment, CancellationReason = jobStatusLog.CancelingReason, ChangeStatusDate = jobStatusLog.Date, UploadedFileList = GetUploadedFileList(dayAssign) }; IMemberModel member = memberService.GetById(jobStatusLog.MemberId); if (member != null) { resultModel.Avatar = member.Avatar; resultModel.Name = member.Name; } } return(resultModel); }
private bool IsValidLog(IJobStatusLogModel jobStatusLog, IDayAssign dayAssign) { bool result = jobStatusLog != null && (!string.IsNullOrEmpty(jobStatusLog.Comment) || !string.IsNullOrEmpty(jobStatusLog.CancelingReason) || dayAssign.UploadList != null && dayAssign.UploadList.Count > 0); return(result); }
private IHistoryModel MapHistoryModelFromLog(IJobStatusLogModel log, IEnumerable <IDayAssign> dayAssigns, IEnumerable <IJob> jobs) { IDayAssign dayAssign = dayAssigns.First(t => t.Id == log.DayAssignId); IJob job = jobs.First(j => j.Id == dayAssign.JobId); return(GetHistoryModel(log, dayAssign, job)); }
private IEnumerable <string> GetCancelingReasons(IJobStatusLogModel parentLog, IEnumerable <IJobStatusLogModel> childLogs) { if (parentLog == null) { return(Enumerable.Empty <string>()); } var logs = new List <IJobStatusLogModel>(); logs.Add(parentLog); logs.AddRange(childLogs); IEnumerable <string> cancelingReasons = logs.Where(x => x.CancelingReason != null).Select(x => x.CancelingReason).Distinct(); return(cancelingReasons); }
private List <TaskInfo> GetFilledTaskInfoList(List <IDayAssign> dayAssignList, List <IJob> jobList, List <IJobStatusLogModel> jobLogList, IDictionary <Guid, ICategoryModel> categoryDictionary, bool onlyWithTime = false) { var result = new List <TaskInfo>(); IEnumerable <Guid> creatorIds = jobList.Select(x => x.CreatorId).Distinct(); IDictionary <Guid, string> creatorNames = memberService.GetMemberNames(creatorIds); foreach (var dayAssign in dayAssignList) { IJob job = jobList.First(x => x.Id == dayAssign.JobId); IJobStatusLogModel log = jobLogList.FirstOrDefault(x => x.DayAssignId == dayAssign.Id); IJobStatusLogModel cancelLog = jobLogList.FirstOrDefault(x => x.DayAssignId == dayAssign.Id && x.StatusId == JobStatus.Canceled); IHousingDepartmentModel assignedHousingDepartment = managementDepartmentService.GetHousingDepartment(dayAssign.DepartmentId); string categoryPath = job.CategoryId != Guid.Empty ? categoryService.GetFullPathString(categoryDictionary[job.CategoryId], Constants.Common.CategoryPathDelimeter, categoryDictionary) : string.Empty; string address = job.AddressList.Any(x => x.HousingDepartmentId == dayAssign.DepartmentId) ? job.AddressList.Last(x => x.HousingDepartmentId == dayAssign.DepartmentId).Address : string.Empty; JobStatus status = log?.StatusId ?? JobStatus.Pending; result.Add(new TaskInfo { Id = job.Id, CategoryName = categoryPath, Title = job.Title, CompletitionDate = log != null ? GetLogDate(log.StatusId, JobStatus.Completed, log) : string.Empty, CancelingDate = log != null ? GetLogDate(log.StatusId, JobStatus.Canceled, log) : string.Empty, CancelingReason = cancelLog != null ? cancelLog.CancelingReason : string.Empty, StatusName = status.GetStatusLabel(translationService), SpentTime = log?.TotalSpentTime ?? default(decimal), CreatorName = creatorNames[job.CreatorId], TenantType = dayAssign.TenantType.HasValue ? GetTenantTaskTypeTranslationsKey(dayAssign.TenantType.Value) : string.Empty, TenantTypeEnum = dayAssign.TenantType, TaskType = job.JobTypeId.GetTaskTypeLabel(translationService), HousingDepartmentName = $"{assignedHousingDepartment.SyncDepartmentId} {assignedHousingDepartment.Name}", Address = address, OriginalTaskId = job.ParentId }); } return(result); }
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); }
private ICancelingReasonDataModel GetCancelingReasonDataModel(IDayAssign dayAssign, IEnumerable <IJobStatusLogModel> jobStatusLogs, IEnumerable <IJob> jobs, Dictionary <Guid, string> creatorNames, IEnumerable <IHousingDepartmentModel> housingDepartments) { List <IJobStatusLogModel> jobStatusLogList = jobStatusLogs.Where(x => x.DayAssignId == dayAssign.Id).ToList(); IJobStatusLogModel unassignedLog = jobStatusLogList .OrderByDescending(log => log.Date) .FirstOrDefault(x => x.StatusId == JobStatus.Rejected); if (unassignedLog == null) { return(null); } IJob job = jobs.First(x => x.Id == dayAssign.JobId); IHousingDepartmentModel housingDepartment = housingDepartments.First(x => x.Id == dayAssign.DepartmentId); decimal totalTimeSpent = (decimal)jobStatusLogList.SelectMany(x => x.TimeLogList).Sum(y => y.SpentTime.TotalHours); Guid managementDepartmentId = managementDepartmentService.GetParentManagementId(dayAssign.DepartmentId); JobAddress addressModel = job.AddressList.FirstOrDefault(x => x.HousingDepartmentId == dayAssign.DepartmentId); return(new CancelingReasonDataModel { HousingDepartmentId = dayAssign.DepartmentId, DayAssignId = dayAssign.Id, ReasonId = unassignedLog.CancelingId ?? Guid.Empty, ManagementDepartmentId = managementDepartmentId, RejectionDate = unassignedLog.Date.ToString(Constants.DateTime.CsvDateFormat), Reason = unassignedLog.CancelingReason, SpentTime = totalTimeSpent, JobId = job.Id, Title = job.Title, HousingDepartmentName = housingDepartment.DisplayName, Address = addressModel?.Address, CreatorName = creatorNames[job.CreatorId], TenantType = dayAssign.TenantType.HasValue ? dayAssign.TenantType.Value.GetTenantTypeTaskLabel(translationService) : string.Empty, StatusName = dayAssign.StatusId.GetStatusLabel(translationService) }); }
private List <IFileModel> GetUploadedFiles(IDayAssign dayAssign, IJobStatusLogModel log) { List <IFileModel> result = new List <IFileModel>(); if (log.UploadedFileIds != null) { foreach (Guid uploadedFileId in log.UploadedFileIds) { UploadFileModel uploadedFileModel = dayAssign.UploadList.FirstOrDefault(l => l.FileId == uploadedFileId); if (uploadedFileModel != null) { FileModel fileModel = new FileModel { FileName = uploadedFileModel.FileName, FileUrl = GetUploadedFileLink(uploadedFileModel, dayAssign.Id) }; result.Add(fileModel); } } } return(result); }
private IHistoryModel GetHistoryModel(IJobStatusLogModel log, IDayAssign dayAssign, IJob job) { var summarizedReportedTime = GetSummarizedReportedTime(log); return(new HistoryModel { JobCreationDate = job.CreationDate, JobStatus = log.StatusId, ChangeStatusComment = log.Comment, ChangeStatusDate = log.Date, Title = new string(job.Title.Take(200).ToArray()), JobComment = dayAssign.Comment, ResidentName = dayAssign.ResidentName, DayAssignId = dayAssign.Id, JobId = job.Id, JobHousingDepartmentId = dayAssign.DepartmentId, UserNameWhoChangedStatus = GetMemberName(log.MemberId), ReportedHours = summarizedReportedTime.Hours, ReportedMinutes = summarizedReportedTime.Minutes, Address = job.GetAddress(dayAssign.DepartmentId), UploadedFiles = GetUploadedFiles(dayAssign, log), CancellationReason = log.CancelingReason }); }
private TimeSpan GetSummarizedReportedTime(IJobStatusLogModel log) { return(log.TimeLogList.Aggregate(default(TimeSpan), (acc, timeLog) => acc + timeLog.SpentTime)); }
private IEnumerable <string> GetCancelingReasons(IJobStatusLogModel log) { string result = log?.CancelingReason ?? string.Empty; return(new [] { result }); }
private string GetLogDate(JobStatus currentStatus, JobStatus status, IJobStatusLogModel log) { return(currentStatus == status?log.Date.ToString(Constants.DateTime.CsvDateFormat) : string.Empty); }
private TaskInfo GetTaskInfo(IDayAssign dayAssign, Action <TaskInfo> groupingFiller, IJob job, IJobStatusLogModel log) { JobStatus status = log?.StatusId ?? JobStatus.Pending; var model = new TaskInfo { Id = job.Id, Title = job.Title, TaskType = job.JobTypeId.GetTaskTypeLabel(translationService), StatusName = status.GetStatusLabel(translationService), SpentTime = log?.TotalSpentTime ?? default(decimal), CompletitionDate = log != null?GetLogDate(log.StatusId, JobStatus.Completed, log) : string.Empty, RejectionDate = log != null?GetLogDate(log.StatusId, JobStatus.Canceled, log) : string.Empty, CreatorName = memberService.GetById(job.CreatorId).Name, TenantTypeEnum = dayAssign.TenantType }; groupingFiller(model); return(model); }