public IResult GetAllApprovalEventRoles()
        {
            var result = new Result
            {
                Operation = Operation.Read,
                Status    = Status.Success
            };

            try
            {
                var approvalEventRoles = _approvalRepository.GetAllApprovalEventRole().ToList();
                if (approvalEventRoles.Any())
                {
                    result.Body = approvalEventRoles.Select(t =>
                    {
                        var eventRoleViewModel = new ApprovalEventRoleViewModel();
                        eventRoleViewModel.MapFromModel(t);
                        eventRoleViewModel.ApprovalEvent = t.ApprovalEvent.ApprovalEventName;
                        eventRoleViewModel.Role          = t.Role.Name;
                        eventRoleViewModel.User          = t.User.FirstName + " " + t.User.LastName;
                        return(eventRoleViewModel);
                    }).ToList();
                }
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                result.Status  = Status.Error;
            }
            return(result);
        }
        void UpdateApprovalEventRole(ApprovalEventRoleViewModel approvalEventRoleViewModel)
        {
            var eventRoleList = _approvalRepository.GetAllApprovalEventRole().Where(x => x.ApprovalEventId == approvalEventRoleViewModel.ApprovalEventId && x.RoleId == approvalEventRoleViewModel.RoleId).ToList();
            var usersList     = eventRoleList.Select(x => x.User).ToList();
            var usersViewList = approvalEventRoleViewModel.Users;

            var existingUsers = usersList.Select(x => x.UserId).Intersect(usersViewList.Select(x => x.UserId)).ToList();
            var addingUsers   = usersViewList.Select(x => x.UserId).Except(existingUsers).ToList();
            var removingUsers = usersList.Select(x => x.UserId).Except(existingUsers).ToList();

            if (existingUsers.Any())
            {
                var eventRoles = eventRoleList.Where(x => existingUsers.Contains(x.UserId)).ToList();
                eventRoles.ForEach(x => x.MapAuditColumns((ClaimsIdentity)_principal.Identity));
            }

            if (removingUsers.Any())
            {
                var eventRoles = eventRoleList.Where(x => removingUsers.Contains(x.UserId)).ToList();
                eventRoles.ForEach(x => x.MapDeleteColumns((ClaimsIdentity)_principal.Identity));
            }

            if (addingUsers.Any())
            {
                foreach (var user in addingUsers)
                {
                    var approvalEventRoleModel = new ApprovalEventRoles();
                    approvalEventRoleModel.MapFromViewModel(approvalEventRoleViewModel, (ClaimsIdentity)_principal.Identity);
                    approvalEventRoleModel.UserId = user;
                    _approvalRepository.AddApprovalEventRole(approvalEventRoleModel);
                }
            }
        }
        public IResult ManageApprovalEventRole(ApprovalEventRoleViewModel approvalEventRoleViewModel)
        {
            var result = new Result
            {
                Operation = Operation.Create,
                Status    = Status.Success
            };

            try
            {
                var eventRole    = _approvalRepository.GetAllApprovalEventRole().FirstOrDefault(x => x.ApprovalEventId == approvalEventRoleViewModel.ApprovalEventId);;
                var existingRole = new Roles();
                if (eventRole != null)
                {
                    existingRole = eventRole.Role;
                }
                if (existingRole.RoleId == 0)
                {
                    var users = approvalEventRoleViewModel.Users;
                    foreach (var user in users)
                    {
                        var approvalEventRoleModel = new ApprovalEventRoles();
                        approvalEventRoleModel.MapFromViewModel(approvalEventRoleViewModel, (ClaimsIdentity)_principal.Identity);
                        approvalEventRoleModel.UserId = user.UserId;
                        _approvalRepository.AddApprovalEventRole(approvalEventRoleModel);
                    }
                    result.Body = approvalEventRoleViewModel.ApprovalEventId;
                }
                else
                {
                    if (existingRole.RoleId == approvalEventRoleViewModel.RoleId)
                    {
                        result.Operation = Operation.Update;
                        UpdateApprovalEventRole(approvalEventRoleViewModel);
                        result.Body = approvalEventRoleViewModel.ApprovalEventId;
                    }
                    else
                    {
                        result.Message = "";
                        result.Status  = Status.Fail;
                    }
                }
                _approvalRepository.SaveChanges();
            }
            catch (Exception e)
            {
                result.Message = e.Message;
                result.Status  = Status.Error;
            }
            return(result);
        }
        public IResult CreateEventRole([FromBody] ApprovalEventRoleViewModel approvalEventRoleViewModel)
        {
            var createdEventRole = _approvalManager.ManageApprovalEventRole(approvalEventRoleViewModel);

            return(createdEventRole);
        }