private TaskModel Mapping(MentifiTask task, string baseUrl, SystemUser mentee, SystemUser mentor) { var status = Enum.GetName(typeof(MentifiTaskStatus), task.Status); var priority = Enum.GetName(typeof(MentifiTaskPriority), task.Priority); var assignedTo = task.AssignedToBusiness?.SystemUser.FirstOrDefault(); return(new TaskModel { Id = task.MentifiTaskId, Subject = task.TaskSubject, Status = new LookupModel <int>(status, (int)task.Status), Priority = new LookupModel <int>(priority, (int)task.Priority), Mentor = mentor != null?mentor.ToProfileModel(baseUrl) : task.MentifiChannelTask?.Mentor?.SystemUser.SingleOrDefault()?.ToProfileModel(baseUrl), Mentee = mentee != null?mentee.ToProfileModel(baseUrl) : task.MentifiChannelTask?.Mentee?.SystemUser.SingleOrDefault()?.ToProfileModel(baseUrl), AssignedTo = assignedTo?.ToProfileModel(baseUrl), DueDate = task.DueDate.ToUnixTime(), Sequence = task.Sequence, }); }
public void Create(NewTaskModel model) { var taskOwner = _systemUserRepository.GetFirstOrDefault(predicate: a => a.SystemUserId == model.FromSystemUserId, include: a => a.Include(b => b.Business).ThenInclude(c => c.BusinessToBusiness)); var taskReceiver = _systemUserRepository.GetFirstOrDefault(predicate: a => a.SystemUserId == model.ToSystemUserId, include: a => a.Include(b => b.Business)); var assigneeSystemUser = model.AssignedToSystemUserId.HasValue ? _systemUserRepository.GetFirstOrDefault( predicate: a => a.SystemUserId == model.AssignedToSystemUserId, include: a => a.Include(b => b.Business)) : null; ValidateAssigning(taskOwner, taskReceiver); var mentor = taskOwner.Business.EduBusinessType == (int)EduBusinessType.Mentor ? taskOwner : taskReceiver; var mentee = taskOwner.Business.EduBusinessType == (int)EduBusinessType.Mentee ? taskOwner : taskReceiver; var channelTask = GetChannelTask(mentor.BusinessId, mentee.BusinessId); var lastSequence = channelTask != null ? _taskRepository.GetFirstOrDefault(predicate : a => a.MentifiTaskId == channelTask.MentifiChannelTaskId, orderBy : a => a.OrderByDescending(b => b.Sequence))?.Sequence ?? 0 : 0; var task = new MentifiTask() { CreatedOn = DateTime.UtcNow, CreatedBy = taskOwner.BusinessId, Status = model.Status, Priority = model.Priority, AssignedTo = assigneeSystemUser?.BusinessId, DueDate = model.DueDate.FromUnixTime(), TaskSubject = model.Subject, Sequence = lastSequence, MentifiChannelTaskId = channelTask?.MentifiChannelTaskId ?? 0 }; if (channelTask == null) { task.MentifiChannelTask = new MentifiChannelTask() { MenteeId = mentee.BusinessId, MentorId = mentor.BusinessId }; } _taskRepository.Insert(task); CreateNotif(taskOwner, Constant.MentifiNotification.TASK_CREATED, taskReceiver.SystemUserId); if (model.AssignedToSystemUserId.HasValue && model.AssignedToSystemUserId > 0) { CreateNotif(taskOwner, Constant.MentifiNotification.TASK_ASSIGNED, model.AssignedToSystemUserId.Value); } if (model.Status == MentifiTaskStatus.Completed) { CreateNotif(taskOwner, Constant.MentifiNotification.TASK_COMPLETED, taskReceiver.SystemUserId); } _unitOfWork.SaveChanges(); }