private void EnsureAccountLegalEntityHasBeenAdded(AccountLegalEntity accountLegalEntity)
 {
     if (_accountLegalEntities.All(ale => ale.Id != accountLegalEntity.Id))
     {
         throw new InvalidOperationException("Requires account legal entity has been added");
     }
 }
 private void EnsureAccountLegalEntityHasNotBeenDeleted(AccountLegalEntity accountLegalEntity)
 {
     if (accountLegalEntity.Deleted != null)
     {
         throw new InvalidOperationException("Requires account legal entity has not been deleted");
     }
 }
        public AccountLegalEntity AddAccountLegalEntity(long accountLegalEntityId, string accountLegalEntityPublicHashedId, string name, DateTime added)
        {
            EnsureAccountLegalEntityHasNotAlreadyBeenAdded(accountLegalEntityId);

            var accountLegalEntity = new AccountLegalEntity(this, accountLegalEntityId, accountLegalEntityPublicHashedId, name, added);

            _accountLegalEntities.Add(accountLegalEntity);

            return(accountLegalEntity);
        }
        public void UpdatePermissions(AccountLegalEntity accountLegalEntity, User user, HashSet <Operation> grantedOperations)
        {
            EnsureAccountLegalEntityHasNotBeenDeleted(accountLegalEntity);

            var accountProviderLegalEntity = _accountProviderLegalEntities.SingleOrDefault(aple => aple.AccountLegalEntityId == accountLegalEntity.Id);

            if (accountProviderLegalEntity == null)
            {
                _accountProviderLegalEntities.Add(new AccountProviderLegalEntity(this, accountLegalEntity, user, grantedOperations));
            }
            else
            {
                accountProviderLegalEntity.UpdatePermissions(user, grantedOperations);
            }
        }
        public AccountProviderLegalEntity(AccountProvider accountProvider, AccountLegalEntity accountLegalEntity, User user, HashSet <Operation> grantedOperations)
        {
            AccountProvider      = accountProvider;
            AccountProviderId    = accountProvider.Id;
            AccountLegalEntity   = accountLegalEntity;
            AccountLegalEntityId = accountLegalEntity.Id;
            _permissions.AddRange(grantedOperations.Select(o => new Permission(this, o)));

            Created = DateTime.UtcNow;

            Publish(() => new UpdatedPermissionsEvent(
                        AccountProvider.AccountId,
                        AccountLegalEntity.Id,
                        AccountProvider.Id,
                        Id,
                        AccountProvider.ProviderUkprn,
                        user.Ref,
                        user.Email,
                        user.FirstName,
                        user.LastName,
                        grantedOperations,
                        new HashSet <Operation>(),
                        Created));
        }
        public void RemoveAccountLegalEntity(AccountLegalEntity accountLegalEntity, DateTime removed)
        {
            EnsureAccountLegalEntityHasBeenAdded(accountLegalEntity);

            accountLegalEntity.Delete(removed);
        }