private AccountState ApplyEvent(ObligationAssessedConcept occurred) { if (!Obligations.ContainsKey(occurred.ObligationNumber)) { Console.WriteLine( $"Account {AccountNumber} does not contain obligation {occurred.ObligationNumber}. No Action Taken."); throw new Exception( $"Account {AccountNumber} does not contain obligation {occurred.ObligationNumber}. No Action Taken."); } var trans = new FinancialTransaction(occurred.FinancialBucket, occurred.FinancialBucket.Amount); Obligations[occurred.ObligationNumber].PostTransaction(trans); var newBalance = CurrentBalance + decimal.Parse(occurred.FinancialBucket.Amount.ToString()); var newState = new AccountState( AccountNumber, newBalance, AccountStatus, Obligations, SimulatedFields, AuditLog.Add( new StateLog( "ObligationAssessedConcept", occurred.Message + " Balance After: " + ((decimal)newBalance).ToString("C"), occurred.UniqueGuid(), occurred.OccurredOn()) ), OpeningBalance, Inventroy, UserName, LastPaymentAmount, LastPaymentDate); return(newState); }
/* Rule logic goes here. */ public void RunRule() { this.EventsGenerated = new List <IEvent>(); Obligation obligationToUse = null; foreach (var item in AccountState.Obligations.Values.ToImmutableList()) { if (item.Status == ObligationStatus.Active) { obligationToUse = item; break; } } if (obligationToUse != null) { foreach (var item in LineItems) { var @event = new ObligationAssessedConcept(obligationToUse.ObligationNumber, item.Item, item.TotalAmount); this.EventsGenerated.Add(@event); } this.DetailsGenerated = "THIS WORKED"; this.Success = true; } else { this.DetailsGenerated = "No Acttive obligations on this account."; this.Success = false; } }