Пример #1
0
        public virtual ResponseResource AcceptMembershipApplication(IPrincipal principal, MembershipApplicationAcceptanceRequest request)
        {
            var user        = _dependencies.UserService.GetGuaranteedAuthenticatedUser(principal);
            var application =
                _dependencies.StorageService.SetOf <MembershipApplication>().SingleOrDefault(x => x.Id == request.Id);

            if (application == null)
            {
                return(new ResponseResource {
                    HasError = true, Error = "Application not found."
                });
            }
            _dependencies.OrganisationService.GuaranteeUserHasPermission(user, application.Organisation, ShurahOrganisationPermission.AcceptMembershipApplication);
            var currentMember      = _dependencies.OrganisationService.GetGuaranteedMember(principal, application.OrganisationId);
            var existingAcceptance = application.Acceptances.SingleOrDefault(x => x.AcceptingMemberId == currentMember.Id);

            if (existingAcceptance != null)
            {
                return(new ResponseResource {
                    HasError = true, Error = "You have already accepted this application."
                });
            }
            var acceptance = _dependencies.StorageService.SetOf <MembershipApplicationAcceptance>().Create();

            acceptance.AcceptingMemberId       = currentMember.Id;
            acceptance.AcceptanceDateTimeUtc   = DateTime.UtcNow;
            acceptance.AcceptingMember         = currentMember;
            acceptance.MembershipApplication   = application;
            acceptance.MembershipApplicationId = application.Id;
            _dependencies.StorageService.SetOf <MembershipApplicationAcceptance>().Add(acceptance);
            _dependencies.StorageService.SaveChanges();

            var acceptancesCount = application.Acceptances.Count(x => !x.AcceptingMember.Removed);

            if (acceptancesCount >= application.Organisation.RequiredNumbersOfAcceptingMembers)
            {
                var existingMembership = application.Organisation.Members.FirstOrDefault(
                    m => m.MemberAuth0Users.Any(a => a.Auth0UserId == application.Auth0UserId));
                if (existingMembership == null)
                {
                    existingMembership = _dependencies.StorageService.SetOf <Member>().Create();
                    _dependencies.StorageService.SetOf <Member>().Add(existingMembership);
                }
                existingMembership.OrganisationId         = application.OrganisationId;
                existingMembership.PublicName             = application.PublicName;
                existingMembership.EmailAddress           = application.Email;
                existingMembership.Introduction           = "";
                existingMembership.JoinedOnDateAndTimeUtc = DateTime.UtcNow;
                existingMembership.LastDateAndTimeUtcAgreedToMembershipRules = DateTime.UtcNow;
                existingMembership.Organisation = application.Organisation;
                existingMembership.Removed      = false;
                _dependencies.StorageService.SaveChanges();

                var existingMemberAuth0User =
                    _dependencies.StorageService.SetOf <MemberAuth0User>()
                    .SingleOrDefault(
                        x =>
                        x.Auth0UserId == acceptance.MembershipApplication.Auth0UserId &&
                        x.MemberId == existingMembership.Id);
                if (existingMemberAuth0User == null)
                {
                    existingMemberAuth0User             = _dependencies.StorageService.SetOf <MemberAuth0User>().Create();
                    existingMemberAuth0User.Auth0UserId = acceptance.MembershipApplication.Auth0UserId;
                    existingMemberAuth0User.Auth0User   = acceptance.MembershipApplication.Auth0User;
                    existingMemberAuth0User.MemberId    = existingMembership.Id;
                    existingMemberAuth0User.Member      = existingMembership;
                    _dependencies.StorageService.SetOf <MemberAuth0User>().Add(existingMemberAuth0User);
                }
                existingMemberAuth0User.Suspended = false;
                _dependencies.StorageService.SaveChanges();
            }

            return(new ResponseResource());
        }
 public ResponseResource Post([FromBody] MembershipApplicationAcceptanceRequest request)
 {
     return(_service.AcceptMembershipApplication(User, request));
 }
Пример #3
0
 public HttpResponseMessage Post(MembershipApplicationAcceptanceRequest request)
 {
     return(Request.CreateResponse(HttpStatusCode.OK, _service.AcceptMembershipApplication(User, request)));
 }