Skip to content

Commit 6a71cef

Browse files
Merge pull request #277 from TransactionProcessing/bug/#263_immediatesettlementextracompleted
Stop immediate settlement generating extra completed events
2 parents fc4632a + 654de12 commit 6a71cef

2 files changed

Lines changed: 49 additions & 0 deletions

File tree

TransactionProcessor.SettlementAggregates.Tests/SettlementAggregateTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,5 +174,21 @@ public void SettlementAggregate_MarkFeeAsSettled_FeeAlreadySettled_NoErrorThrown
174174
aggregate.MarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId);
175175
}
176176

177+
[Fact]
178+
public void SettlementAggregate_ImmediatelyMarkFeeAsSettled_FeeIsSettledAndSettlementNotCompleted()
179+
{
180+
SettlementAggregate aggregate = SettlementAggregate.Create(TestData.SettlementAggregateId);
181+
aggregate.Create(TestData.EstateId, TestData.SettlementDate);
182+
aggregate.AddFee(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee());
183+
184+
aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(1);
185+
186+
aggregate.ImmediatelyMarkFeeAsSettled(TestData.MerchantId, TestData.TransactionId, TestData.CalculatedFeeMerchantFee().FeeId);
187+
188+
aggregate.GetNumberOfFeesPendingSettlement().ShouldBe(0);
189+
aggregate.GetNumberOfFeesSettled().ShouldBe(1);
190+
aggregate.SettlementComplete.ShouldBeFalse();
191+
}
192+
177193
}
178194
}

TransactionProcessor.SettlementAggregates/SettlementAggregate.cs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,39 @@ public void MarkFeeAsSettled(Guid merchantId, Guid transactionId, Guid feeId)
104104
}
105105
}
106106

107+
public void ImmediatelyMarkFeeAsSettled(Guid merchantId, Guid transactionId, Guid feeId)
108+
{
109+
var pendingFee = this.CalculatedFeesPendingSettlement.Where(c => c.merchantId == merchantId && c.transactionId == transactionId && c.calculatedFee.FeeId == feeId)
110+
.SingleOrDefault();
111+
112+
var settledFee = this.SettledCalculatedFees.Where(c => c.merchantId == merchantId && c.transactionId == transactionId && c.calculatedFee.FeeId == feeId)
113+
.SingleOrDefault();
114+
115+
if (settledFee != default((Guid, Guid, CalculatedFee)))
116+
{
117+
// Fee already settled....
118+
return;
119+
}
120+
121+
if (pendingFee == default((Guid, Guid, CalculatedFee)))
122+
{
123+
// Fee not found....
124+
return;
125+
}
126+
127+
MerchantFeeSettledEvent merchantFeeSettledEvent = new MerchantFeeSettledEvent(this.AggregateId,
128+
this.EstateId,
129+
pendingFee.merchantId,
130+
pendingFee.transactionId,
131+
pendingFee.calculatedFee.CalculatedValue,
132+
(Int32)pendingFee.calculatedFee.FeeCalculationType,
133+
pendingFee.calculatedFee.FeeId,
134+
pendingFee.calculatedFee.FeeValue,
135+
pendingFee.calculatedFee.FeeCalculatedDateTime);
136+
137+
this.ApplyAndAppend(merchantFeeSettledEvent);
138+
}
139+
107140
public void AddFee(Guid merchantId,
108141
Guid transactionId,
109142
CalculatedFee calculatedFee)

0 commit comments

Comments
 (0)