private void UpdateAllDetails(
            Domain.Entity.LearningCalendar.LearningDay learningDay,
            Domain.Entity.LearningCalendar.Employee employee,
            UpdateLearningDayOperationRequest request)
        {
            List <(UpdateLearningDayOperationRequest.LearningDayTopic requestTopic, LearningDayTopic topic)> nonDeletedTopics =
                request.LearningDayTopics
                .Select(requestTopic => (requestTopic, learningDay.GetDayTopicByTopicId(requestTopic.TopicId)))
                .ToList();

            var createdTopics = nonDeletedTopics
                                .Where(group => group.topic == null)
                                .Select(group => CreateDayTopic(employee, group.requestTopic))
                                .ToList();

            var topicsToUpdate = nonDeletedTopics
                                 .Where(group => group.topic != null)
                                 .ToList();

            topicsToUpdate.ForEach(group => UpdateDayTopic(employee, group.requestTopic, group.topic));

            var updatedTopics = topicsToUpdate
                                .Select(group => group.topic);

            learningDay.LearningDayTopics = createdTopics
                                            .Concat(updatedTopics)
                                            .ToList();

            UpdateComment(learningDay, request);
        }
Exemplo n.º 2
0
        private async Task <CreateEmployeeOperationResponse> CreateTopLevelManager(IdentityUser identityUser, CreateEmployeeOperationRequest request)
        {
            try
            {
                var employee = new Domain.Entity.LearningCalendar.Employee
                {
                    Identity  = identityUser,
                    Limit     = new Domain.Entity.LearningCalendar.Limit(),
                    FirstName = request.FirstName,
                    LastName  = request.LastName,
                    Image     = new Image
                    {
                        Value = request.ImageData
                    },
                    Role = new Role
                    {
                        Title = Constants.Employee.TopLevelManagerRole
                    }
                };

                await _employeeRepository.CreateAsync(employee);
            }
            catch (DbUpdateException)
            {
                throw new EmailAlreadyUseException();
            }

            return(new CreateEmployeeOperationResponse());
        }
Exemplo n.º 3
0
 private GetSubordinateTopicTreeOperationResponse.Employee MapEmployee(Domain.Entity.LearningCalendar.Employee employee)
 {
     return(new GetSubordinateTopicTreeOperationResponse.Employee
     {
         FullName = employee.FullName,
         Id = employee.Id
     });
 }
Exemplo n.º 4
0
        private GetTopicDetailsOperationResponse.Employee MapEmployee(Domain.Entity.LearningCalendar.Employee employee, Domain.Entity.LearningCalendar.Topic topic)
        {
            var status = _employeeTopicProgressStatusStrategy.GetStatus(employee, topic);

            return(new GetTopicDetailsOperationResponse.Employee
            {
                Id = employee.Id,
                FullName = employee.FullName,
                ProgressStatus = ProgressStatusMapper.MapStatus(status)
            });
        }
        private void EnsureFitsLimits(
            UpdateLearningDayOperationRequest request,
            Domain.Entity.LearningCalendar.Employee employee)
        {
            var limit = employee.Limit;

            if (request.LearningDayTopics.Count > limit.TopicsPerDay)
            {
                throw new LimitExceededException(nameof(Constants.Limit.MaxTopicsPerDay));
            }
        }
        private List <GetTeamDetailsOperationResponse.Goal> MapGoals(Domain.Entity.LearningCalendar.Employee employee)
        {
            var goals = employee.PersonalGoals
                        .Where(goal => !goal.IsComplete)
                        .Select(goal => new GetTeamDetailsOperationResponse.Goal
            {
                Topic   = goal.Topic.Subject,
                TopicId = goal.Topic.Id
            }).ToList();

            return(goals);
        }
        private LearningDayTopic CreateDayTopic(
            Domain.Entity.LearningCalendar.Employee employee,
            UpdateLearningDayOperationRequest.LearningDayTopic requestTopic)
        {
            if (requestTopic.ProgressStatus == UpdateLearningDayOperationRequest.ProgressStatus.Done)
            {
                var targetGoal = employee.PersonalGoals
                                 .FirstOrDefault(goal => goal.TopicId == requestTopic.TopicId && !goal.IsComplete);

                targetGoal?.MarkAsComplete();
            }
            return(new LearningDayTopic
            {
                ProgressStatus = MapProgressStatus(requestTopic),
                TopicId = requestTopic.TopicId
            });
        }
Exemplo n.º 8
0
        private async Task <CreateEmployeeOperationResponse> CreateEmployee(IdentityUser identityUser, CreateEmployeeOperationRequest request)
        {
            var roleTask = _roleRepository
                           .QuerySingleOrDefaultAsync(role => role.Title == request.Role);

            var managerId = (await _employeeRepository.GetByEmailAsync(request.ManagerEmail)).Id;

            var getTeamResponse = await _ensureManagerHasTeamOperation.Execute(new EnsureManagerHasTeamRequest { ManagerId = managerId });

            Role role = await roleTask;

            var employee = new Domain.Entity.LearningCalendar.Employee
            {
                Identity = identityUser,
                Team     = new Domain.Entity.LearningCalendar.Team {
                    Id = getTeamResponse.TeamId
                },
                FirstName = request.FirstName,
                LastName  = request.LastName,
                Image     = new Image
                {
                    Value = request.ImageData
                },
                Role = role ?? new Role
                {
                    Title = request.Role
                }
            };

            var limit = await _limitRepository.GetGlobalAsync();

            limit.Employees.Add(employee);

            try
            {
                await _limitRepository.UpdateAsync(limit);
            }
            catch (DbUpdateException)
            {
                throw new EmailAlreadyUseException();
            }

            return(new CreateEmployeeOperationResponse());
        }
        private void UpdateDayTopic(
            Domain.Entity.LearningCalendar.Employee employee,
            UpdateLearningDayOperationRequest.LearningDayTopic requestTopic,
            LearningDayTopic dayTopic)
        {
            var newStatus = MapProgressStatus(requestTopic);

            bool goalsShouldBeCompleted = newStatus != dayTopic.ProgressStatus && newStatus == ProgressStatus.Done;

            if (goalsShouldBeCompleted)
            {
                var targetGoal = employee.PersonalGoals
                                 .FirstOrDefault(goal => goal.TopicId == requestTopic.TopicId && !goal.IsComplete);
                targetGoal?.MarkAsComplete();
            }

            dayTopic.ProgressStatus = newStatus;
            dayTopic.TopicId        = requestTopic.TopicId;
        }
        private GetEmployeeTopicTreeOperationResponse.Topic MapTopic(
            Domain.Entity.LearningCalendar.Topic root,
            Domain.Entity.LearningCalendar.Employee employee)
        {
            var children = root.SubTopics
                           .Select(topic => MapTopic(topic, employee))
                           .ToList();

            var status = _employeeTopicProgressStatusStrategy.GetStatus(employee, root);

            return(new GetEmployeeTopicTreeOperationResponse.Topic
            {
                Id = root.Id,
                ParentId = root.ParentTopicId,
                Subject = root.Subject,
                Description = root.Description,
                Children = children,
                Status = ProgressStatusMapper.MapStatus(status)
            });
        }