diff --git a/src/bnhtrade.Core/Data/Database/Repository/Implementation/AmazonSettlementRepository.cs b/src/bnhtrade.Core/Data/Database/Repository/Implementation/AmazonSettlementRepository.cs
index ccfe64a..4de7b75 100644
--- a/src/bnhtrade.Core/Data/Database/Repository/Implementation/AmazonSettlementRepository.cs
+++ b/src/bnhtrade.Core/Data/Database/Repository/Implementation/AmazonSettlementRepository.cs
@@ -369,7 +369,7 @@ namespace bnhtrade.Core.Data.Database.Repository.Implementation
//
///
- /// Update the settlement report marketplace name by settlement Id (not table id)
+ /// Update the settlement report marketplace name by settlement Id (not row id)
///
/// Settlement id (not table/record id) of the settlement to update
/// marketplace name
@@ -433,13 +433,13 @@ namespace bnhtrade.Core.Data.Database.Repository.Implementation
/// Takes a Settlement Report flat file from Amazon and imports it into the database.
///
/// path to the Amazon report flat file
- /// The unique Amazon SP-API report id (not settlement id)
+ /// The unique Amazon SP-API report id (not settlement id)
///
- public bool CreateAmazonSettlements(string filePath, string reportId)
+ public bool CreateAmazonSettlements(string filePath, string spapiReportId)
{
int settlementReportId = 0;
- string settlementRef = "";
- bool marketPlaceUpdated = false;
+ string settlementRef = null;
+ string marketplaceName = null;
decimal settlementAmount = 0m;
int lineNumber = 2;
int lineSkip = 0;
@@ -479,17 +479,17 @@ namespace bnhtrade.Core.Data.Database.Repository.Implementation
int indexQuantityPurchased = Array.IndexOf(headers, "quantity-purchased");
int indexPromotionId = Array.IndexOf(headers, "promotion-id");
- string currency = "";
+ string currency = null;
string fileRow;
while ((fileRow = reader.ReadLine()) != null)
{
Console.Write("\rParsing record: " + lineNumber);
//split line into array
- string[] items = fileRow.Split('\t');
- if (items.Length != columnCount)
+ string[] rowArray = fileRow.Split('\t');
+ if (rowArray.Length != columnCount)
{
- // skip line
+ // skip line, check settlement total at the end
lineSkip = lineSkip + 1;
_log.LogWarning(
"Line #" + lineNumber + " skipped due to no enough element in row.",
@@ -498,28 +498,25 @@ namespace bnhtrade.Core.Data.Database.Repository.Implementation
}
else if (lineNumber == 2)
{
- // check if settlement has already been imported
+ settlementRef = rowArray[indexSettlementId];
+ currency = rowArray[indexCurrency];
+ settlementAmount = decimal.Parse(rowArray[indexTotalAmount].Replace(",", "."));
+ // check if settlement has already been imported
using (SqlCommand cmd = _connection.CreateCommand() as SqlCommand)
{
cmd.CommandText = "SELECT COUNT(*) FROM tblImportAmazonSettlementReport WHERE [settlement-id]=@settlementId;";
cmd.Transaction = _transaction as SqlTransaction;
- cmd.Parameters.AddWithValue("@settlementId", items[indexSettlementId]);
+ cmd.Parameters.AddWithValue("@settlementId", rowArray[indexSettlementId]);
int recordCount = (int)cmd.ExecuteScalar();
if (recordCount > 0)
{
- SetSpapiReportId(items[indexSettlementId], reportId);
+ SetSpapiReportId(rowArray[indexSettlementId], spapiReportId);
_log.LogInformation("Settlement report already imported, skipping...");
return true;
}
}
- //set currencyId
- //currencyId = GeneralQueries.GetCurrencyId(items[5]);
-
- //set currency
- currency = items[indexCurrency];
- settlementAmount = decimal.Parse(items[indexTotalAmount].Replace(",", "."));
// insert
using (SqlCommand cmd = _connection.CreateCommand() as SqlCommand)
@@ -543,61 +540,38 @@ namespace bnhtrade.Core.Data.Database.Repository.Implementation
,@depositDate
,@settlementotalAmounttId
,@currency
- ,@reportId
+ ,@spapiReportId
);";
- // add parameters
- if (indexSettlementId == -1 || items[indexSettlementId].Length == 0) { cmd.Parameters.AddWithValue("@settlementId", DBNull.Value); }
- else
- {
- settlementRef = items[indexSettlementId];
- cmd.Parameters.AddWithValue("@settlementId", settlementRef);
- }
-
var parseDateTime = new Core.Logic.Utilities.DateTime();
- if (indexSettlementStartDate == -1 || items[indexSettlementStartDate].Length == 0) { cmd.Parameters.AddWithValue("@settlementStartDate", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@settlementStartDate", parseDateTime.ParseIsoDateTimeString(items[indexSettlementStartDate])); }
-
- if (indexSettlementEndDate == -1 || items[indexSettlementEndDate].Length == 0) { cmd.Parameters.AddWithValue("@settlementEndDate", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@settlementEndDate", parseDateTime.ParseIsoDateTimeString(items[indexSettlementEndDate])); }
-
- if (indexDepositDate == -1 || items[indexDepositDate].Length == 0) { cmd.Parameters.AddWithValue("@depositDate", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@depositDate", parseDateTime.ParseIsoDateTimeString(items[indexDepositDate])); }
-
- if (indexTotalAmount == -1 || items[indexTotalAmount].Length == 0) { cmd.Parameters.AddWithValue("@totalAmount", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@settlementotalAmounttId", settlementAmount); }
-
- if (string.IsNullOrWhiteSpace(reportId)) { cmd.Parameters.AddWithValue("@reportId", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@reportId", reportId); }
-
+ // add parameters
+ cmd.Parameters.AddWithValue("@settlementId", rowArray[indexSettlementId]);
+ cmd.Parameters.AddWithValue("@settlementStartDate", parseDateTime.ParseIsoDateTimeString(rowArray[indexSettlementStartDate]));
+ cmd.Parameters.AddWithValue("@settlementEndDate", parseDateTime.ParseIsoDateTimeString(rowArray[indexSettlementEndDate]));
+ cmd.Parameters.AddWithValue("@depositDate", parseDateTime.ParseIsoDateTimeString(rowArray[indexDepositDate]));
+ cmd.Parameters.AddWithValue("@settlementotalAmounttId", settlementAmount);
+ if (string.IsNullOrWhiteSpace(spapiReportId)) { cmd.Parameters.AddWithValue("@spapiReportId", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@spapiReportId", spapiReportId); }
cmd.Parameters.AddWithValue("@currency", currency);
- //if (currencyId == -1) { sqlCommand.Parameters.AddWithValue("@currencyId", DBNull.Value); }
- //else { sqlCommand.Parameters.AddWithValue("@currencyId", currencyId); }
-
//execute and retrive id
settlementReportId = (int)cmd.ExecuteScalar();
-
}
}
else
{
- //update market place name in main table, if required
- if (marketPlaceUpdated == false && settlementReportId > 0 && items[indexMarketplaceName].Length > 1)
+ // attempt to retrieve marketplace name for header table
+ if (rowArray[indexMarketplaceName].Length > 1 && settlementReportId > 0)
{
- using (SqlCommand cmd = _connection.CreateCommand() as SqlCommand)
+ if (marketplaceName == null)
{
- cmd.Transaction = _transaction as SqlTransaction;
- cmd.CommandText = @"
- UPDATE tblImportAmazonSettlementReport
- SET [marketplace-name]=@MarketplaceName
- WHERE ImportAmazonSettlementReportID=@ImportAmazonSettlementReportID;";
- cmd.Parameters.AddWithValue("@MarketplaceName", items[indexMarketplaceName]);
- cmd.Parameters.AddWithValue("@ImportAmazonSettlementReportID", settlementReportId);
-
- cmd.ExecuteNonQuery();
- marketPlaceUpdated = true;
+ marketplaceName = rowArray[indexMarketplaceName];
+ }
+ else if (marketplaceName != rowArray[indexMarketplaceName])
+ {
+ _log.LogError("Marketplace name '" + rowArray[indexMarketplaceName] + "' on line " + lineNumber +
+ " is different from marketplace name '" + marketplaceName + "' on previous line. This shouldn't be possible!");
}
}
@@ -620,67 +594,95 @@ namespace bnhtrade.Core.Data.Database.Repository.Implementation
cmd.Parameters.AddWithValue("@currency", currency);
- if (indexTransactionType == -1 || items[indexTransactionType].Length == 0) { cmd.Parameters.AddWithValue("@TransactionType", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@TransactionType", items[indexTransactionType]); }
+ if (indexTransactionType == -1 || rowArray[indexTransactionType].Length == 0) { cmd.Parameters.AddWithValue("@TransactionType", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@TransactionType", rowArray[indexTransactionType]); }
- if (indexOrderId == -1 || items[indexOrderId].Length == 0) { cmd.Parameters.AddWithValue("@orderRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@orderRef", items[indexOrderId]); }
+ if (indexOrderId == -1 || rowArray[indexOrderId].Length == 0) { cmd.Parameters.AddWithValue("@orderRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@orderRef", rowArray[indexOrderId]); }
- if (indexMerchantOrderId == -1 || items[indexMerchantOrderId].Length == 0) { cmd.Parameters.AddWithValue("@merchantOrderRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@merchantOrderRef", items[indexMerchantOrderId]); }
+ if (indexMerchantOrderId == -1 || rowArray[indexMerchantOrderId].Length == 0) { cmd.Parameters.AddWithValue("@merchantOrderRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@merchantOrderRef", rowArray[indexMerchantOrderId]); }
- if (indexAdjustmentId == -1 || items[indexAdjustmentId].Length == 0) { cmd.Parameters.AddWithValue("@AdjustmentRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@AdjustmentRef", items[indexAdjustmentId]); }
+ if (indexAdjustmentId == -1 || rowArray[indexAdjustmentId].Length == 0) { cmd.Parameters.AddWithValue("@AdjustmentRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@AdjustmentRef", rowArray[indexAdjustmentId]); }
- if (indexShipmentId == -1 || items[indexShipmentId].Length == 0) { cmd.Parameters.AddWithValue("@ShipmentRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@ShipmentRef", items[indexShipmentId]); }
+ if (indexShipmentId == -1 || rowArray[indexShipmentId].Length == 0) { cmd.Parameters.AddWithValue("@ShipmentRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@ShipmentRef", rowArray[indexShipmentId]); }
- if (indexMarketplaceName == -1 || items[indexMarketplaceName].Length == 0) { cmd.Parameters.AddWithValue("@MarketplaceName", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@MarketplaceName", items[indexMarketplaceName]); }
+ if (indexMarketplaceName == -1 || rowArray[indexMarketplaceName].Length == 0) { cmd.Parameters.AddWithValue("@MarketplaceName", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@MarketplaceName", rowArray[indexMarketplaceName]); }
- if (indexAmountType == -1 || items[indexAmountType].Length == 0) { cmd.Parameters.AddWithValue("@AmountType", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@AmountType", items[indexAmountType]); }
+ if (indexAmountType == -1 || rowArray[indexAmountType].Length == 0) { cmd.Parameters.AddWithValue("@AmountType", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@AmountType", rowArray[indexAmountType]); }
- if (indexAmountDescription == -1 || items[indexAmountDescription].Length == 0) { cmd.Parameters.AddWithValue("@AmountDescription", DBNull.Value); }
+ if (indexAmountDescription == -1 || rowArray[indexAmountDescription].Length == 0) { cmd.Parameters.AddWithValue("@AmountDescription", DBNull.Value); }
else
{
- string amountDescription = items[indexAmountDescription];
+ string amountDescription = rowArray[indexAmountDescription];
if (amountDescription.Length > 100) { amountDescription = amountDescription.Substring(0, 100); }
cmd.Parameters.AddWithValue("@AmountDescription", amountDescription);
}
- if (indexAmount == -1 || items[indexAmount].Length == 0) { cmd.Parameters.AddWithValue("@Amount", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@Amount", decimal.Parse(items[indexAmount].Replace(",", "."))); }
+ if (indexAmount == -1 || rowArray[indexAmount].Length == 0) { cmd.Parameters.AddWithValue("@Amount", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@Amount", decimal.Parse(rowArray[indexAmount].Replace(",", "."))); }
- if (indexFulfillmentId == -1 || items[indexFulfillmentId].Length == 0) { cmd.Parameters.AddWithValue("@FulfillmentRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@FulfillmentRef", items[indexFulfillmentId]); }
+ if (indexFulfillmentId == -1 || rowArray[indexFulfillmentId].Length == 0) { cmd.Parameters.AddWithValue("@FulfillmentRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@FulfillmentRef", rowArray[indexFulfillmentId]); }
- if (indexPostedDateTime == -1 || items[indexPostedDateTime].Length == 0) { cmd.Parameters.AddWithValue("@PostedDateTimeUTC", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@PostedDateTimeUTC", new Logic.Utilities.DateTime().ParseIsoDateTimeString(items[indexPostedDateTime])); }
+ if (indexPostedDateTime == -1 || rowArray[indexPostedDateTime].Length == 0) { cmd.Parameters.AddWithValue("@PostedDateTimeUTC", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@PostedDateTimeUTC", new Logic.Utilities.DateTime().ParseIsoDateTimeString(rowArray[indexPostedDateTime])); }
- if (indexOrderItemCode == -1 || items[indexOrderItemCode].Length == 0) { cmd.Parameters.AddWithValue("@OrderItemCode", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@OrderItemCode", long.Parse(items[indexOrderItemCode])); }
+ if (indexOrderItemCode == -1 || rowArray[indexOrderItemCode].Length == 0) { cmd.Parameters.AddWithValue("@OrderItemCode", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@OrderItemCode", long.Parse(rowArray[indexOrderItemCode])); }
- if (indexMerchantOrderItemId == -1 || items[indexMerchantOrderItemId].Length == 0) { cmd.Parameters.AddWithValue("@MerchantOrderItemRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@MerchantOrderItemRef", long.Parse(items[indexMerchantOrderItemId])); }
+ if (indexMerchantOrderItemId == -1 || rowArray[indexMerchantOrderItemId].Length == 0) { cmd.Parameters.AddWithValue("@MerchantOrderItemRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@MerchantOrderItemRef", long.Parse(rowArray[indexMerchantOrderItemId])); }
- if (indexMerchantAdjustmentItemId == -1 || items[indexMerchantAdjustmentItemId].Length == 0) { cmd.Parameters.AddWithValue("@MerchantAdjustmentItemRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@MerchantAdjustmentItemRef", items[indexMerchantAdjustmentItemId]); }
+ if (indexMerchantAdjustmentItemId == -1 || rowArray[indexMerchantAdjustmentItemId].Length == 0) { cmd.Parameters.AddWithValue("@MerchantAdjustmentItemRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@MerchantAdjustmentItemRef", rowArray[indexMerchantAdjustmentItemId]); }
- if (indexSku == -1 || items[indexSku].Length == 0) { cmd.Parameters.AddWithValue("@SkuNumber", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@SkuNumber", items[indexSku]); }
+ if (indexSku == -1 || rowArray[indexSku].Length == 0) { cmd.Parameters.AddWithValue("@SkuNumber", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@SkuNumber", rowArray[indexSku]); }
- if (indexQuantityPurchased == -1 || items[indexQuantityPurchased].Length == 0) { cmd.Parameters.AddWithValue("@QuantityPurchased", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@QuantityPurchased", int.Parse(items[indexQuantityPurchased])); }
+ if (indexQuantityPurchased == -1 || rowArray[indexQuantityPurchased].Length == 0) { cmd.Parameters.AddWithValue("@QuantityPurchased", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@QuantityPurchased", int.Parse(rowArray[indexQuantityPurchased])); }
- if (indexPromotionId == -1 || items[indexPromotionId].Length == 0) { cmd.Parameters.AddWithValue("@PromotionRef", DBNull.Value); }
- else { cmd.Parameters.AddWithValue("@PromotionRef", items[indexPromotionId]); }
+ if (indexPromotionId == -1 || rowArray[indexPromotionId].Length == 0) { cmd.Parameters.AddWithValue("@PromotionRef", DBNull.Value); }
+ else { cmd.Parameters.AddWithValue("@PromotionRef", rowArray[indexPromotionId]); }
cmd.ExecuteNonQuery();
}
}
lineNumber = lineNumber + 1;
}
+ // end of filestream reading
+
+ // if we haven't gotten the marketplace name from the line items, attempt to infer from currency
+ if (marketplaceName == null && settlementReportId > 0)
+ {
+ if (currency == "GBP")
+ {
+ marketplaceName = MarketPlaceEnum.AmazonUK.GetMarketplaceUrl();
+ marketplaceName = char.ToUpper(marketplaceName[0]) + marketplaceName.Substring(1);
+ }
+ }
+
+ // finally, if we have it, add marketplace name to main table
+ if (marketplaceName != null && settlementReportId > 0)
+ {
+ using (SqlCommand cmd = _connection.CreateCommand() as SqlCommand)
+ {
+ cmd.Transaction = _transaction as SqlTransaction;
+ cmd.CommandText = @"
+ UPDATE tblImportAmazonSettlementReport
+ SET [marketplace-name]=@MarketplaceName
+ WHERE ImportAmazonSettlementReportID=@ImportAmazonSettlementReportID;";
+ cmd.Parameters.AddWithValue("@MarketplaceName", marketplaceName);
+ cmd.Parameters.AddWithValue("@ImportAmazonSettlementReportID", settlementReportId);
+
+ cmd.ExecuteNonQuery();
+ }
+ }
}
//final check - settlement amount matches sum of inserted settlement lines