예제 #1
0
 private void AddUsersToTeam(UpdateApplicationUserCommand request, List <Guid> teamsToAdd)
 {
     foreach (var item in teamsToAdd)
     {
         var addInTeam = new UserDepartmentTeam
         {
             DeparmentTeamId = item,
             UserId          = request.Id
         };
         _context.UserDepartmentTeams.Add(addInTeam);
     }
 }
예제 #2
0
        public async Task <Unit> Handle(AssignUserCommand request, CancellationToken cancellationToken)
        {
            var user = _userAccessor.GetUser();

            var userId = Guid.Parse(user.FindFirst(ClaimTypes.NameIdentifier).Value);

            var entity = await _context.DepartmentTeams.FindAsync(request.DepartmentTeamId);

            if (entity == null)
            {
                throw new NotFoundException("Not exist an entity with this id", nameof(DepartmentTeam));
            }

            // Update many to many UserDepartmentTeams
            var currentUsers = await _context.UserDepartmentTeams.Where(x => x.DeparmentTeamId == request.DepartmentTeamId)
                               .Select(x => x.UserId).ToListAsync(cancellationToken);

            // If list of users is null, will remove all users form team.
            if (request.ApplicationUserIds == null || request.ApplicationUserIds.Count == 0)
            {
                foreach (var item in currentUsers)
                {
                    var removeUser = await _context.UserDepartmentTeams.FirstAsync(x =>
                                                                                   x.DeparmentTeamId == request.DepartmentTeamId && x.UserId == item, cancellationToken);

                    _context.UserDepartmentTeams.Remove(removeUser);
                }

                await _context.SaveChangesAsync(cancellationToken);

                return(Unit.Value);
            }

            // Sort users for adding in team and users for remove from team.
            var addUsers    = request.ApplicationUserIds.Except(currentUsers).ToList();
            var removeUsers = currentUsers.Except(request.ApplicationUserIds).ToList();

            if (addUsers.Count != 0)
            {
                foreach (var item in addUsers)
                {
                    var teamUser = new UserDepartmentTeam {
                        DeparmentTeamId = request.DepartmentTeamId, UserId = item
                    };
                    _context.UserDepartmentTeams.Add(teamUser);
                }
            }

            if (removeUsers.Count != 0)
            {
                foreach (var item in removeUsers)
                {
                    var teamUser = _context.UserDepartmentTeams
                                   .First(x => x.DeparmentTeamId == request.DepartmentTeamId && x.UserId == item);

                    if (teamUser != null)
                    {
                        _context.UserDepartmentTeams.Remove(teamUser);
                    }
                }
            }



            _context.DepartmentTeams.Update(entity);

            await _context.SaveChangesAsync(cancellationToken);

            return(Unit.Value);
        }
예제 #3
0
        public async Task <Unit> Handle(UpdateDepartmentTeamCommand request, CancellationToken cancellationToken)
        {
            var user   = _userAccessor.GetUser();
            var userId = Guid.Parse(user.FindFirst(ClaimTypes.NameIdentifier).Value);

            var departmentTeam = _context.DepartmentTeams.Find(request.Id);

            departmentTeam.Name                 = request.Name;
            departmentTeam.Abbreviation         = request.Abbreviation;
            departmentTeam.Description          = request.Description;
            departmentTeam.DepartmentId         = request.DepartmentId;
            departmentTeam.DepartmentTeamLeadId = request.DepartmentTeamLeadId;

            departmentTeam.Department = await _context.Departments.FindAsync(departmentTeam.DepartmentId);

            if (request.Active)
            {
                departmentTeam.Activate();
            }
            else
            {
                departmentTeam.Deactivate();
            }

            _context.DepartmentTeams.Update(departmentTeam);

            List <Guid?> usersToAdd, usersToRemove;

            // Update members
            if (request.MembersIds != null)
            {
                var existingUsers = _context.UserDepartmentTeams.Where(x => x.DeparmentTeamId == request.Id).ToList();
                usersToAdd    = request.MembersIds.Except(existingUsers.Select(x => (Guid?)x.UserId)).ToList();
                usersToRemove = existingUsers.Select(x => (Guid?)x.UserId).Except(request.MembersIds).ToList();

                // Remove Users from team
                if (usersToRemove.Count != 0)
                {
                    foreach (var item in usersToRemove)
                    {
                        var removeFromTeam = _context.UserDepartmentTeams.First(d =>
                                                                                d.DeparmentTeamId == request.Id && d.UserId == item.Value);
                        if (removeFromTeam != null)
                        {
                            _context.UserDepartmentTeams.Remove(removeFromTeam);
                        }
                    }
                }

                // Add Users in team
                if (usersToAdd.Count != 0)
                {
                    foreach (var item in usersToAdd)
                    {
                        var addInTeam = new UserDepartmentTeam()
                        {
                            DeparmentTeamId = departmentTeam.Id,
                            UserId          = item.Value
                        };
                        _context.UserDepartmentTeams.Add(addInTeam);
                    }
                }
            }



            if (request.JobPositionIds != null)
            {
                // Remove jobs
                var oldJobsList = _context.JobDepartmentTeams.Where(x => x.DepartmentTeamId == request.Id).ToList();

                _context.JobDepartmentTeams.RemoveRange(oldJobsList);


                // Insert users

                foreach (var item in request.JobPositionIds)
                {
                    var jobs = new JobDepartmentTeam
                    {
                        DepartmentTeamId = departmentTeam.Id,
                        JobPositionId    = item.Value
                    };
                    _context.JobDepartmentTeams.Add(jobs);
                }
            }


            await _context.SaveChangesAsync(cancellationToken);

            // Notifications
            // -------------

            var members = _context.UserDepartmentTeams.Where(x => x.DeparmentTeamId == request.Id)
                          .Select(x => x.User.Email).ToList();

            var notification = new DepartmentTeamUpdated()
            {
                PrimaryEntityName = departmentTeam.Name,
                PrimaryEntityId   = departmentTeam.Id,
                GroupEntityName   = departmentTeam.Department.Name,
                GroupEntityId     = departmentTeam.Department.Id,
                UserName          = user.Identity.Name
            };

            if (members.Any())
            {
                notification.Recipients = members;
            }
            await _mediator.Publish(notification, cancellationToken);

            return(Unit.Value);
        }
예제 #4
0
        public async Task <Unit> Handle(CreateApplicationUserCommand request, CancellationToken cancellationToken)
        {
            var user = new ApplicationUser
            {
                Id             = Guid.NewGuid(),
                FirstName      = request.FirstName,
                LastName       = request.LastName,
                Email          = request.Email,
                UserName       = request.Email,
                EmploymentType = request.EmploymentType,
                JobPositionId  = request.JobPositionId,
                PhoneNumber    = request.PhoneNumber,
                CreatedTime    = DateTime.Now,
                ModifiedTime   = DateTime.Now
            };

            IdentityResult result = await _userManager.CreateAsync(user, "@userPass1");

            if (result.Succeeded)
            {
                try
                {
                    if (request.DepartmentTeamId != Guid.Empty)
                    {
                        var userTeam = new UserDepartmentTeam
                        {
                            DeparmentTeamId = request.DepartmentTeamId,
                            UserId          = user.Id
                        };

                        _context.UserDepartmentTeams.Add(userTeam);
                        await _context.SaveChangesAsync(cancellationToken);
                    }


                    if (request.RoleNames != null)
                    {
                        await _userManager.AddToRolesAsync(user, request.RoleNames);
                    }

                    if (request.Projects != null && request.Projects.Any())
                    {
                        var projectMembers = request.Projects.Select(projectId => new ProjectMember {
                            ProjectId = projectId, UserId = user.Id
                        });
                        await _context.ProjectMembers.AddRangeAsync(projectMembers, cancellationToken);

                        await _context.SaveChangesAsync(cancellationToken);
                    }
                }
                catch (Exception e)
                {
                    throw new Exception($"SaveChanges threw {e.GetType().Name}: {(e is DbUpdateException ? e.InnerException?.Message : e.Message)}");
                }
            }
            else
            {
                foreach (IdentityError e in result.Errors)
                {
                    throw new Exception($"IdentityError threw {e.GetType().Name}: {e.Description}");
                }
            }

            return(Unit.Value);
        }
예제 #5
0
        public async Task <Unit> Handle(CreateDepartmentTeamCommand request, CancellationToken cancellationToken)
        {
            var user = _userAccessor.GetUser();

            var userId = Guid.Parse(user.FindFirst(ClaimTypes.NameIdentifier).Value);

            var departmentTeam = new DepartmentTeam
            {
                Name                 = request.Name,
                Abbreviation         = request.Abbreviation,
                DepartmentId         = request.DepartmentId,
                DepartmentTeamLeadId = request.DepartmentTeamLeadId,
                Description          = request.Description
            };

            departmentTeam.CreateEnd(Guid.NewGuid(), request.Name, userId);


            if (departmentTeam.DepartmentId != null)
            {
                departmentTeam.Department = await _context.Departments.FindAsync(departmentTeam.DepartmentId);
            }

            if (request.Active)
            {
                departmentTeam.Activate();
            }
            else
            {
                departmentTeam.Deactivate();
            }

            await _context.DepartmentTeams.AddAsync(departmentTeam, cancellationToken);

            await _context.SaveChangesAsync(cancellationToken);

            if (request.JobPositions != null)
            {
                var jobsList = new List <JobDepartmentTeam>();

                foreach (var item in request.JobPositions)
                {
                    var jobs = new JobDepartmentTeam
                    {
                        DepartmentTeamId = departmentTeam.Id,
                        JobPositionId    = item.Value
                    };
                    jobsList.Add(jobs);
                }
                await _context.JobDepartmentTeams.AddRangeAsync(jobsList, cancellationToken);
            }

            var userList = new List <UserDepartmentTeam>();

            if (request.Members != null)
            {
                foreach (var item in request.Members)
                {
                    if (item == null)
                    {
                        continue;
                    }
                    var members = new UserDepartmentTeam
                    {
                        DeparmentTeamId = departmentTeam.Id,
                        UserId          = item.Value
                    };
                    userList.Add(members);
                }
            }

            if (request.DepartmentTeamLeadId != null)
            {
                var checkLead = userList.FirstOrDefault(x => x.UserId == request.DepartmentTeamLeadId);

                if (checkLead == null)
                {
                    var memberTeam = new UserDepartmentTeam
                    {
                        UserId          = request.DepartmentTeamLeadId.Value,
                        DeparmentTeamId = departmentTeam.Id
                    };

                    userList.Add(memberTeam);
                }
            }

            _context.UserDepartmentTeams.AddRange(userList);
            await _context.SaveChangesAsync(cancellationToken);

            // Notifications
            // --------------

            var notification = new DepartmentTeamCreated()
            {
                PrimaryEntityName = departmentTeam.Name,
                PrimaryEntityId   = departmentTeam.Id,
                GroupEntityName   = departmentTeam.Department != null ? departmentTeam.Department.Name : "No Department",
                GroupEntityId     = departmentTeam.DepartmentId ?? Guid.NewGuid(),
                UserName          = user.Identity.Name
            };

            if (userList.Any())
            {
                notification.Recipients = userList.Select(x => x.User.Email).ToList();
            }
            await _mediator.Publish(notification, cancellationToken);

            return(Unit.Value);
        }