private void EnsureAccountPayeSchemeHasBeenAdded(AccountPayeScheme accountPayeScheme)
 {
     if (_accountPayeSchemes.All(aps => aps.AccountId != accountPayeScheme.AccountId && aps.EmployerReferenceNumber != accountPayeScheme.EmployerReferenceNumber))
     {
         throw new InvalidOperationException("Requires account paye scheme has been added");
     }
 }
        public virtual AccountPayeScheme AddPayeScheme(string employerReferenceNumber, DateTime created)
        {
            EnsurePayeSchemeHasNotAlreadyBeenAdded(employerReferenceNumber);

            var accountPayeScheme = new AccountPayeScheme(this, employerReferenceNumber, created);

            _accountPayeSchemes.Add(accountPayeScheme);

            return(accountPayeScheme);
        }
        public LevyDeclarationSaga(DateTime payrollPeriod, AccountPayeScheme accountPayeScheme)
        {
            Type                = LevyDeclarationSagaType.AdHoc;
            PayrollPeriod       = payrollPeriod;
            Created             = DateTime.UtcNow;
            AccountPayeSchemeId = accountPayeScheme.Id;
            ImportPayeSchemeLevyDeclarationsTasksCount = 1;
            UpdateAccountTransactionBalancesTasksCount = 1;

            Publish(() => new StartedProcessingLevyDeclarationsAdHocEvent(Id, PayrollPeriod, AccountPayeSchemeId.Value, Created));
        }
        public virtual void RemovePayeScheme(AccountPayeScheme accountPayeScheme, DateTime removed)
        {
            EnsureAccountPayeSchemeHasBeenAdded(accountPayeScheme);

            accountPayeScheme.Delete(removed);
        }