diff --git a/TransactionProcessor.BusinessLogic/Common/Extensions.cs b/TransactionProcessor.BusinessLogic/Common/Extensions.cs
new file mode 100644
index 00000000..fb0ad2ca
--- /dev/null
+++ b/TransactionProcessor.BusinessLogic/Common/Extensions.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace TransactionProcessor.BusinessLogic.Common
+{
+ using System.Diagnostics.CodeAnalysis;
+
+ public static class Extensions
+ {
+ ///
+ /// Extracts the field from metadata.
+ ///
+ ///
+ /// Name of the field.
+ /// The additional transaction metadata.
+ ///
+ [ExcludeFromCodeCoverage]
+ public static T ExtractFieldFromMetadata(this Dictionary additionalTransactionMetadata, String fieldName)
+ {
+ // Create a case insensitive version of the dictionary
+ Dictionary caseInsensitiveDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
+ foreach (KeyValuePair keyValuePair in additionalTransactionMetadata)
+ {
+ caseInsensitiveDictionary.Add(keyValuePair.Key, keyValuePair.Value);
+ }
+
+ if (caseInsensitiveDictionary.ContainsKey(fieldName))
+ {
+ String fieldData = caseInsensitiveDictionary[fieldName];
+ return (T)Convert.ChangeType(fieldData, typeof(T));
+ }
+ else
+ {
+ return default(T);
+ }
+ }
+ }
+}
diff --git a/TransactionProcessor.BusinessLogic/OperatorInterfaces/SafaricomPinless/SafaricomPinlessProxy.cs b/TransactionProcessor.BusinessLogic/OperatorInterfaces/SafaricomPinless/SafaricomPinlessProxy.cs
index 920ae77a..25d4fa42 100644
--- a/TransactionProcessor.BusinessLogic/OperatorInterfaces/SafaricomPinless/SafaricomPinlessProxy.cs
+++ b/TransactionProcessor.BusinessLogic/OperatorInterfaces/SafaricomPinless/SafaricomPinlessProxy.cs
@@ -10,6 +10,7 @@
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
+ using Common;
using EstateManagement.DataTransferObjects.Responses;
///
@@ -74,8 +75,8 @@ public async Task ProcessSaleMessage(String accessToken,
CancellationToken cancellationToken)
{
// Extract the required fields
- String transactionAmount = this.ExtractFieldFromMetadata("Amount", additionalTransactionMetadata);
- String customerMsisdn = this.ExtractFieldFromMetadata("CustomerAccountNumber", additionalTransactionMetadata);
+ String transactionAmount = additionalTransactionMetadata.ExtractFieldFromMetadata("Amount");
+ String customerMsisdn = additionalTransactionMetadata.ExtractFieldFromMetadata("CustomerAccountNumber");
if (String.IsNullOrEmpty(transactionAmount))
{
@@ -116,28 +117,6 @@ public async Task ProcessSaleMessage(String accessToken,
return this.CreateFrom(responseContent);
}
- [ExcludeFromCodeCoverage]
- private String ExtractFieldFromMetadata(String fieldName,
- Dictionary additionalTransactionMetadata)
- {
- // Create a case insensitive version of the dictionary
- Dictionary caseInsensitiveDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
- foreach (KeyValuePair keyValuePair in additionalTransactionMetadata)
- {
- caseInsensitiveDictionary.Add(keyValuePair.Key, keyValuePair.Value);
- }
-
- if (caseInsensitiveDictionary.ContainsKey(fieldName))
- {
- return caseInsensitiveDictionary[fieldName];
- }
- else
- {
- return String.Empty;
- }
-
- }
-
///
/// Builds the request.
///
diff --git a/TransactionProcessor.BusinessLogic/OperatorInterfaces/VoucherManagement/VoucherManagementProxy.cs b/TransactionProcessor.BusinessLogic/OperatorInterfaces/VoucherManagement/VoucherManagementProxy.cs
index 11f1d09d..0b510923 100644
--- a/TransactionProcessor.BusinessLogic/OperatorInterfaces/VoucherManagement/VoucherManagementProxy.cs
+++ b/TransactionProcessor.BusinessLogic/OperatorInterfaces/VoucherManagement/VoucherManagementProxy.cs
@@ -7,6 +7,7 @@ namespace TransactionProcessor.BusinessLogic.OperatorInterfaces.VoucherManagemen
using System.Security.Policy;
using System.Threading;
using System.Threading.Tasks;
+ using Common;
using EstateManagement.DataTransferObjects.Responses;
using global::VoucherManagement.Client;
using global::VoucherManagement.DataTransferObjects;
@@ -58,9 +59,9 @@ public async Task ProcessSaleMessage(String accessToken,
CancellationToken cancellationToken)
{
// Extract the required fields
- String recipientEmail = additionalTransactionMetadata.GetValueOrDefault("RecipientEmail");
- String recipientMobile = additionalTransactionMetadata.GetValueOrDefault("RecipientMobile");
- String transactionAmount = additionalTransactionMetadata.GetValueOrDefault("Amount");
+ String recipientEmail = additionalTransactionMetadata.ExtractFieldFromMetadata("RecipientEmail");
+ String recipientMobile = additionalTransactionMetadata.ExtractFieldFromMetadata("RecipientMobile");
+ String transactionAmount = additionalTransactionMetadata.ExtractFieldFromMetadata("Amount");
// Covert the transaction amount to Decimal and remove decimal places
if (Decimal.TryParse(transactionAmount, out Decimal amountAsDecimal) == false)
diff --git a/TransactionProcessor.BusinessLogic/Services/TransactionDomainService.cs b/TransactionProcessor.BusinessLogic/Services/TransactionDomainService.cs
index 8734b3f8..009629d9 100644
--- a/TransactionProcessor.BusinessLogic/Services/TransactionDomainService.cs
+++ b/TransactionProcessor.BusinessLogic/Services/TransactionDomainService.cs
@@ -8,6 +8,7 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+ using Common;
using EstateManagement.Client;
using EstateManagement.DataTransferObjects.Requests;
using EstateManagement.DataTransferObjects.Responses;
@@ -189,7 +190,7 @@ public async Task ProcessSaleTransaction(Guid tr
String transactionReference = this.GenerateTransactionReference();
// Extract the transaction amount from the metadata
- Decimal transactionAmount = this.ExtractFieldFromMetadata("Amount", additionalTransactionMetadata);
+ Decimal transactionAmount = additionalTransactionMetadata.ExtractFieldFromMetadata("Amount");
(String responseMessage, TransactionResponseCode responseCode) validationResult =
await this.ValidateSaleTransaction(estateId, merchantId, deviceIdentifier, operatorIdentifier, transactionAmount, cancellationToken);
@@ -395,35 +396,7 @@ public async Task ProcessReconciliatio
};
}
- ///
- /// Extracts the field from metadata.
- ///
- ///
- /// Name of the field.
- /// The additional transaction metadata.
- ///
- [ExcludeFromCodeCoverage]
- private T ExtractFieldFromMetadata(String fieldName,
- Dictionary additionalTransactionMetadata)
- {
- // Create a case insensitive version of the dictionary
- Dictionary caseInsensitiveDictionary = new Dictionary(StringComparer.InvariantCultureIgnoreCase);
- foreach (KeyValuePair keyValuePair in additionalTransactionMetadata)
- {
- caseInsensitiveDictionary.Add(keyValuePair.Key, keyValuePair.Value);
- }
-
- if (caseInsensitiveDictionary.ContainsKey(fieldName))
- {
- String fieldData = caseInsensitiveDictionary[fieldName];
- return (T)Convert.ChangeType(fieldData, typeof(T));
- }
- else
- {
- return default(T);
- }
-
- }
+
///
/// Adds the device to merchant.