mirror of
https://github.com/stokebob/bnhtrade.git
synced 2026-03-21 15:27:15 +00:00
Added invoice export function and started implementation of unitofwork pattern (#43)
* complete read invoices from db * wip * wip * wip * wip * wip * wip * wip * wip * updated nuget package spapi * WIP * wip, now test * wip, jut need to fix tax inclusive line amounts not supported * wip * wip, before I f everything up * no, it complies now, this is the one before I f everything up * wip * wip * wip, logic ready for testing * wip it builds!!!! * wip tested, working, need to complete the gui section * wip * wip * wip - created export invoice data delete, time for testing * wip testing phase * wip - delete function fully tested and working * wip on to sorting out the issue with settlement invoices not tallying * wip * wip * wip * wip * wip before I complete change the ReadInvoiceLineItem sections * that appears to have worked, on with the main quest * no it's doesn't work, saving before i remove the confusing cache system (just use a dictionary!!) * wipping picadilli * wip * wip * implemented uow on inovice export, now for testing * wip * wip all tested do invoice currency convertion fearure * wip * pretty much done so long as xero accepts the exported invoices * Complete!
This commit is contained in:
@@ -1,294 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Import
|
||||
{
|
||||
public class AmazonSettlementHeaderRead : Connection
|
||||
{
|
||||
private Dictionary<string, int> dicTablePkBySettlementId = new Dictionary<string, int>();
|
||||
private int? returnTop = null;
|
||||
private List<string> settlementIdList;
|
||||
private List<string> spapiReportId;
|
||||
|
||||
protected bool FilterOutIsProcessed { get; set; }
|
||||
|
||||
public bool DescendingOrder { get; set; }
|
||||
|
||||
public int ReturnTop
|
||||
{
|
||||
get { return (int)returnTop; }
|
||||
set
|
||||
{
|
||||
if (value > 0)
|
||||
{ returnTop = value; }
|
||||
else
|
||||
{ returnTop = null; }
|
||||
}
|
||||
}
|
||||
|
||||
public bool ReturnTopIsSet
|
||||
{
|
||||
get { return returnTop != null; }
|
||||
}
|
||||
|
||||
private List<string> SettlementIdList
|
||||
{
|
||||
get { return settlementIdList; }
|
||||
set
|
||||
{
|
||||
if (value.Any())
|
||||
{ settlementIdList = value; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private List<string> SpapiReportIdList
|
||||
{
|
||||
get { return spapiReportId; }
|
||||
set
|
||||
{
|
||||
if (value.Any())
|
||||
{ spapiReportId = value; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private bool SettlementIdListIsSet
|
||||
{
|
||||
get { return SettlementIdList != null; }
|
||||
}
|
||||
|
||||
private bool SpapiReportIdIsSet
|
||||
{
|
||||
get { return SpapiReportIdList != null; }
|
||||
}
|
||||
|
||||
public AmazonSettlementHeaderRead()
|
||||
{
|
||||
Innit();
|
||||
}
|
||||
|
||||
private void Innit()
|
||||
{
|
||||
DescendingOrder = false;
|
||||
FilterOutIsProcessed = false;
|
||||
ReturnTop = 0;
|
||||
settlementIdList = null;
|
||||
spapiReportId = null;
|
||||
}
|
||||
|
||||
public List<Model.Import.AmazonSettlementHeader> AllUnprocessed()
|
||||
{
|
||||
Innit();
|
||||
FilterOutIsProcessed = true;
|
||||
return ReadHeaderList();
|
||||
}
|
||||
|
||||
public Model.Import.AmazonSettlementHeader BySettlementId(string settlementId)
|
||||
{
|
||||
Innit();
|
||||
|
||||
// create settlement list
|
||||
var idList = new List<string>();
|
||||
idList.Add(settlementId);
|
||||
var settlementList = BySettlementId(idList);
|
||||
|
||||
// return answer
|
||||
if (settlementList == null || !settlementList.Any())
|
||||
{ return null; }
|
||||
else
|
||||
{ return settlementList.First(); }
|
||||
}
|
||||
|
||||
public List<Model.Import.AmazonSettlementHeader> BySettlementId(List<string> settlementIdList)
|
||||
{
|
||||
Innit();
|
||||
|
||||
if (settlementIdList == null || !settlementIdList.Any())
|
||||
{ return new List<Model.Import.AmazonSettlementHeader>(); }
|
||||
|
||||
SettlementIdList = settlementIdList;
|
||||
|
||||
return ReadHeaderList();
|
||||
}
|
||||
|
||||
public List<Model.Import.AmazonSettlementHeader> BySpapiReportId(List<string> spapiReportIdList)
|
||||
{
|
||||
Innit();
|
||||
|
||||
if (spapiReportIdList == null || !spapiReportIdList.Any())
|
||||
{ return new List<Model.Import.AmazonSettlementHeader>(); }
|
||||
|
||||
SpapiReportIdList = spapiReportIdList;
|
||||
|
||||
return ReadHeaderList();
|
||||
}
|
||||
|
||||
private List<Model.Import.AmazonSettlementHeader> ReadHeaderList()
|
||||
{
|
||||
var returnHeaderList = new List<Model.Import.AmazonSettlementHeader>();
|
||||
|
||||
// build the sql string
|
||||
string sqlString = "SELECT ";
|
||||
|
||||
if (ReturnTopIsSet)
|
||||
{
|
||||
sqlString = sqlString + "TOP " + ReturnTop + " ";
|
||||
}
|
||||
|
||||
sqlString = sqlString + @"
|
||||
ImportAmazonSettlementReportID
|
||||
,[marketplace-name]
|
||||
,[settlement-id]
|
||||
,[settlement-start-date]
|
||||
,[settlement-end-date]
|
||||
,[deposit-date]
|
||||
,[total-amount]
|
||||
,currency
|
||||
,IsProcessed
|
||||
,SpapiReportId
|
||||
FROM tblImportAmazonSettlementReport
|
||||
WHERE 1 = 1";
|
||||
|
||||
if (FilterOutIsProcessed)
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
AND IsProcessed = 0";
|
||||
}
|
||||
|
||||
// build dictionary of parameter and values for settlementid
|
||||
var dicSettlementIdByParameterString = new Dictionary<string, string>();
|
||||
if (SettlementIdListIsSet)
|
||||
{
|
||||
int count = 0;
|
||||
foreach (string item in SettlementIdList)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(item))
|
||||
{
|
||||
count = count + 1;
|
||||
string parameterString = "@settlementId" + count;
|
||||
dicSettlementIdByParameterString.Add(parameterString, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dicSettlementIdByParameterString.Any())
|
||||
{
|
||||
int count = 0;
|
||||
foreach (var item in dicSettlementIdByParameterString)
|
||||
{
|
||||
count = count + 1;
|
||||
if (count == 1)
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
AND ( [settlement-id] = " + item.Key;
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
OR [settlement-id] = " + item.Key;
|
||||
}
|
||||
}
|
||||
sqlString = sqlString + " )";
|
||||
}
|
||||
|
||||
// build dictionary of parameter and values for SP-API Report Id
|
||||
var dicSpapiReportIdByParameterString = new Dictionary<string, string>();
|
||||
if (SpapiReportIdIsSet)
|
||||
{
|
||||
int count = 0;
|
||||
foreach (string item in SpapiReportIdList)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(item))
|
||||
{
|
||||
count = count + 1;
|
||||
string parameterString = "@SpapiReportId" + count;
|
||||
dicSpapiReportIdByParameterString.Add(parameterString, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dicSpapiReportIdByParameterString.Any())
|
||||
{
|
||||
int count = 0;
|
||||
foreach (var item in dicSpapiReportIdByParameterString)
|
||||
{
|
||||
count = count + 1;
|
||||
if (count == 1)
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
AND ( SpapiReportId = " + item.Key;
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
OR SpapiReportId = " + item.Key;
|
||||
}
|
||||
}
|
||||
sqlString = sqlString + " )";
|
||||
}
|
||||
|
||||
|
||||
sqlString = sqlString + @"
|
||||
ORDER BY [settlement-start-date] ";
|
||||
if (DescendingOrder) { sqlString = sqlString + " DESC"; }
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(sqlString, conn))
|
||||
{
|
||||
if (dicSettlementIdByParameterString.Any())
|
||||
{
|
||||
foreach (var item in dicSettlementIdByParameterString)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
|
||||
if (dicSpapiReportIdByParameterString.Any())
|
||||
{
|
||||
foreach (var item in dicSpapiReportIdByParameterString)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
while (reader.Read())
|
||||
{
|
||||
var header = new Model.Import.AmazonSettlementHeader();
|
||||
|
||||
int tablePk = reader.GetInt32(0);
|
||||
if (!reader.IsDBNull(1)) { header.MarketPlaceName = reader.GetString(1); }
|
||||
header.SettlementId = reader.GetString(2);
|
||||
header.StartDate = DateTime.SpecifyKind(reader.GetDateTime(3), DateTimeKind.Utc);
|
||||
header.EndDate = DateTime.SpecifyKind(reader.GetDateTime(4), DateTimeKind.Utc);
|
||||
header.DepositDate = DateTime.SpecifyKind(reader.GetDateTime(5), DateTimeKind.Utc);
|
||||
header.TotalAmount = reader.GetDecimal(6);
|
||||
header.CurrencyCode = reader.GetString(7);
|
||||
header.IsProcessed = reader.GetBoolean(8);
|
||||
if (!reader.IsDBNull(9)) { header.SpapiReportId = reader.GetString(9); }
|
||||
|
||||
// update dictionary
|
||||
if (!dicTablePkBySettlementId.ContainsKey(header.SettlementId))
|
||||
{
|
||||
dicTablePkBySettlementId.Add(header.SettlementId, tablePk);
|
||||
}
|
||||
|
||||
// add header to list
|
||||
returnHeaderList.Add(header);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return returnHeaderList;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,330 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Import
|
||||
{
|
||||
public class AmazonSettlementInsert : Connection
|
||||
{
|
||||
Logic.Log.LogEvent log = new Logic.Log.LogEvent();
|
||||
|
||||
public AmazonSettlementInsert ()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="filePath"></param>
|
||||
/// <param name="reportId">The unique Amazon SP-API report id (not settlement id)</param>
|
||||
/// <returns></returns>
|
||||
public bool ByFlatFile(string filePath, string reportId)
|
||||
{
|
||||
using (TransactionScope scope = new TransactionScope())
|
||||
{
|
||||
using (SqlConnection sqlConn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
sqlConn.Open();
|
||||
|
||||
int settlementReportId = 0;
|
||||
string settlementRef = "";
|
||||
bool marketPlaceUpdated = false;
|
||||
decimal settlementAmount = 0m;
|
||||
int lineNumber = 2;
|
||||
int lineSkip = 0;
|
||||
|
||||
using (var reader = new StreamReader(filePath))
|
||||
{
|
||||
//read file one line at a time and insert data into table if required
|
||||
|
||||
// read header and retrive information
|
||||
string headerRow = reader.ReadLine();
|
||||
string[] headers = headerRow.Split('\t');
|
||||
|
||||
int columnCount = headers.Length;
|
||||
|
||||
int indexSettlementId = Array.IndexOf(headers, "settlement-id");
|
||||
int indexSettlementStartDate = Array.IndexOf(headers, "settlement-start-date");
|
||||
int indexSettlementEndDate = Array.IndexOf(headers, "settlement-end-date");
|
||||
int indexDepositDate = Array.IndexOf(headers, "deposit-date");
|
||||
int indexTotalAmount = Array.IndexOf(headers, "total-amount");
|
||||
int indexCurrency = Array.IndexOf(headers, "currency");
|
||||
int indexTransactionType = Array.IndexOf(headers, "transaction-type");
|
||||
int indexOrderId = Array.IndexOf(headers, "order-id");
|
||||
int indexMerchantOrderId = Array.IndexOf(headers, "merchant-order-id");
|
||||
int indexAdjustmentId = Array.IndexOf(headers, "adjustment-id");
|
||||
int indexShipmentId = Array.IndexOf(headers, "shipment-id");
|
||||
int indexMarketplaceName = Array.IndexOf(headers, "marketplace-name");
|
||||
int indexAmountType = Array.IndexOf(headers, "amount-type");
|
||||
int indexAmountDescription = Array.IndexOf(headers, "amount-description");
|
||||
int indexAmount = Array.IndexOf(headers, "amount");
|
||||
int indexFulfillmentId = Array.IndexOf(headers, "fulfillment-id");
|
||||
// int indexPostedDate = Array.IndexOf(headers, "posted-date");
|
||||
int indexPostedDateTime = Array.IndexOf(headers, "posted-date-time");
|
||||
int indexOrderItemCode = Array.IndexOf(headers, "order-item-code");
|
||||
int indexMerchantOrderItemId = Array.IndexOf(headers, "merchant-order-item-id");
|
||||
int indexMerchantAdjustmentItemId = Array.IndexOf(headers, "merchant-adjustment-item-id");
|
||||
int indexSku = Array.IndexOf(headers, "sku");
|
||||
int indexQuantityPurchased = Array.IndexOf(headers, "quantity-purchased");
|
||||
int indexPromotionId = Array.IndexOf(headers, "promotion-id");
|
||||
|
||||
string currency = "";
|
||||
|
||||
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)
|
||||
{
|
||||
// skip line
|
||||
lineSkip = lineSkip + 1;
|
||||
log.LogWarning(
|
||||
"Line #" + lineNumber + " skipped due to no enough element in row.",
|
||||
filePath
|
||||
);
|
||||
}
|
||||
else if (lineNumber == 2)
|
||||
{
|
||||
// check if settlement has already been imported
|
||||
using (SqlCommand sqlCommand = new SqlCommand(
|
||||
"SELECT COUNT(*) FROM tblImportAmazonSettlementReport WHERE [settlement-id]=@settlementId;"
|
||||
, sqlConn))
|
||||
{
|
||||
sqlCommand.Parameters.AddWithValue("@settlementId", items[indexSettlementId]);
|
||||
int recordCount = (int)sqlCommand.ExecuteScalar();
|
||||
if (recordCount > 0)
|
||||
{
|
||||
UpdateSpapiReportId(items[indexSettlementId], reportId);
|
||||
log.LogInformation("Settlement report already imported, skipping...");
|
||||
scope.Complete();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
//set currencyId
|
||||
//currencyId = GeneralQueries.GetCurrencyId(items[5]);
|
||||
|
||||
//set currency
|
||||
currency = items[indexCurrency];
|
||||
settlementAmount = decimal.Parse(items[indexTotalAmount].Replace(",", "."));
|
||||
|
||||
// insert
|
||||
using (SqlCommand sqlCommand = new SqlCommand(@"
|
||||
INSERT INTO tblImportAmazonSettlementReport (
|
||||
[settlement-id]
|
||||
,[settlement-start-date]
|
||||
,[settlement-end-date]
|
||||
,[deposit-date]
|
||||
,[total-amount]
|
||||
,[currency]
|
||||
,SpapiReportId
|
||||
)
|
||||
OUTPUT INSERTED.ImportAmazonSettlementReportID
|
||||
VALUES (
|
||||
@settlementId
|
||||
,@settlementStartDate
|
||||
,@settlementEndDate
|
||||
,@depositDate
|
||||
,@settlementotalAmounttId
|
||||
,@currency
|
||||
,@reportId
|
||||
);
|
||||
", sqlConn))
|
||||
{
|
||||
// add parameters
|
||||
if (indexSettlementId == -1 || items[indexSettlementId].Length == 0) { sqlCommand.Parameters.AddWithValue("@settlementId", DBNull.Value); }
|
||||
else
|
||||
{
|
||||
settlementRef = items[indexSettlementId];
|
||||
sqlCommand.Parameters.AddWithValue("@settlementId", settlementRef);
|
||||
}
|
||||
|
||||
var parseDateTime = new Core.Logic.Utilities.DateTime();
|
||||
|
||||
if (indexSettlementStartDate == -1 || items[indexSettlementStartDate].Length == 0) { sqlCommand.Parameters.AddWithValue("@settlementStartDate", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@settlementStartDate", parseDateTime.ParseIsoDateTimeString(items[indexSettlementStartDate])); }
|
||||
|
||||
if (indexSettlementEndDate == -1 || items[indexSettlementEndDate].Length == 0) { sqlCommand.Parameters.AddWithValue("@settlementEndDate", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@settlementEndDate", parseDateTime.ParseIsoDateTimeString(items[indexSettlementEndDate])); }
|
||||
|
||||
if (indexDepositDate == -1 || items[indexDepositDate].Length == 0) { sqlCommand.Parameters.AddWithValue("@depositDate", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@depositDate", parseDateTime.ParseIsoDateTimeString(items[indexDepositDate])); }
|
||||
|
||||
if (indexTotalAmount == -1 || items[indexTotalAmount].Length == 0) { sqlCommand.Parameters.AddWithValue("@totalAmount", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@settlementotalAmounttId", settlementAmount); }
|
||||
|
||||
if (string.IsNullOrWhiteSpace(reportId)) { sqlCommand.Parameters.AddWithValue("@reportId", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@reportId", reportId); }
|
||||
|
||||
sqlCommand.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)sqlCommand.ExecuteScalar();
|
||||
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//update market place name in main table, if required
|
||||
if (marketPlaceUpdated == false && settlementReportId > 0 && items[indexMarketplaceName].Length > 1)
|
||||
{
|
||||
using (SqlCommand sqlCommand = new SqlCommand(@"
|
||||
UPDATE tblImportAmazonSettlementReport
|
||||
SET [marketplace-name]=@MarketplaceName
|
||||
WHERE ImportAmazonSettlementReportID=@ImportAmazonSettlementReportID
|
||||
", sqlConn))
|
||||
{
|
||||
sqlCommand.Parameters.AddWithValue("@MarketplaceName", items[indexMarketplaceName]);
|
||||
sqlCommand.Parameters.AddWithValue("@ImportAmazonSettlementReportID", settlementReportId);
|
||||
|
||||
sqlCommand.ExecuteNonQuery();
|
||||
marketPlaceUpdated = true;
|
||||
}
|
||||
}
|
||||
|
||||
//insert report items
|
||||
using (SqlCommand sqlCommand = new SqlCommand(
|
||||
"INSERT INTO tblImportAmazonSettlementReportLine ( " +
|
||||
"ImportAmazonSettlementReportID, [transaction-type], [order-id], [merchant-order-id], [adjustment-id], [shipment-id], [marketplace-name], " +
|
||||
"[amount-type], [amount-description], [currency], [amount], [fulfillment-id], [posted-date-time], [order-item-code], " +
|
||||
"[merchant-order-item-id], [merchant-adjustment-item-id], [sku], [quantity-purchased], [promotion-id] ) " +
|
||||
"VALUES ( " +
|
||||
"@ImportAmazonSettlementReportID, @TransactionType, @orderRef, @merchantOrderRef, @AdjustmentRef, @ShipmentRef, @MarketplaceName, " +
|
||||
"@AmountType, @AmountDescription, @currency, @Amount, @FulfillmentRef, @PostedDateTimeUTC, @OrderItemCode, " +
|
||||
"@MerchantOrderItemRef, @MerchantAdjustmentItemRef, @SkuNumber, @QuantityPurchased, @PromotionRef );"
|
||||
, sqlConn))
|
||||
{
|
||||
// add parameters
|
||||
sqlCommand.Parameters.AddWithValue("@ImportAmazonSettlementReportID", settlementReportId);
|
||||
|
||||
sqlCommand.Parameters.AddWithValue("@currency", currency);
|
||||
|
||||
if (indexTransactionType == -1 || items[indexTransactionType].Length == 0) { sqlCommand.Parameters.AddWithValue("@TransactionType", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@TransactionType", items[indexTransactionType]); }
|
||||
|
||||
if (indexOrderId == -1 || items[indexOrderId].Length == 0) { sqlCommand.Parameters.AddWithValue("@orderRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@orderRef", items[indexOrderId]); }
|
||||
|
||||
if (indexMerchantOrderId == -1 || items[indexMerchantOrderId].Length == 0) { sqlCommand.Parameters.AddWithValue("@merchantOrderRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@merchantOrderRef", items[indexMerchantOrderId]); }
|
||||
|
||||
if (indexAdjustmentId == -1 || items[indexAdjustmentId].Length == 0) { sqlCommand.Parameters.AddWithValue("@AdjustmentRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@AdjustmentRef", items[indexAdjustmentId]); }
|
||||
|
||||
if (indexShipmentId == -1 || items[indexShipmentId].Length == 0) { sqlCommand.Parameters.AddWithValue("@ShipmentRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@ShipmentRef", items[indexShipmentId]); }
|
||||
|
||||
if (indexMarketplaceName == -1 || items[indexMarketplaceName].Length == 0) { sqlCommand.Parameters.AddWithValue("@MarketplaceName", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@MarketplaceName", items[indexMarketplaceName]); }
|
||||
|
||||
if (indexAmountType == -1 || items[indexAmountType].Length == 0) { sqlCommand.Parameters.AddWithValue("@AmountType", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@AmountType", items[indexAmountType]); }
|
||||
|
||||
if (indexAmountDescription == -1 || items[indexAmountDescription].Length == 0) { sqlCommand.Parameters.AddWithValue("@AmountDescription", DBNull.Value); }
|
||||
else
|
||||
{
|
||||
string amountDescription = items[indexAmountDescription];
|
||||
if (amountDescription.Length > 100) { amountDescription = amountDescription.Substring(0, 100); }
|
||||
sqlCommand.Parameters.AddWithValue("@AmountDescription", amountDescription);
|
||||
}
|
||||
|
||||
if (indexAmount == -1 || items[indexAmount].Length == 0) { sqlCommand.Parameters.AddWithValue("@Amount", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@Amount", decimal.Parse(items[indexAmount].Replace(",", "."))); }
|
||||
|
||||
if (indexFulfillmentId == -1 || items[indexFulfillmentId].Length == 0) { sqlCommand.Parameters.AddWithValue("@FulfillmentRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@FulfillmentRef", items[indexFulfillmentId]); }
|
||||
|
||||
if (indexPostedDateTime == -1 || items[indexPostedDateTime].Length == 0) { sqlCommand.Parameters.AddWithValue("@PostedDateTimeUTC", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@PostedDateTimeUTC", new Logic.Utilities.DateTime().ParseIsoDateTimeString(items[indexPostedDateTime])); }
|
||||
|
||||
if (indexOrderItemCode == -1 || items[indexOrderItemCode].Length == 0) { sqlCommand.Parameters.AddWithValue("@OrderItemCode", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@OrderItemCode", long.Parse(items[indexOrderItemCode])); }
|
||||
|
||||
if (indexMerchantOrderItemId == -1 || items[indexMerchantOrderItemId].Length == 0) { sqlCommand.Parameters.AddWithValue("@MerchantOrderItemRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@MerchantOrderItemRef", long.Parse(items[indexMerchantOrderItemId])); }
|
||||
|
||||
if (indexMerchantAdjustmentItemId == -1 || items[indexMerchantAdjustmentItemId].Length == 0) { sqlCommand.Parameters.AddWithValue("@MerchantAdjustmentItemRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@MerchantAdjustmentItemRef", items[indexMerchantAdjustmentItemId]); }
|
||||
|
||||
if (indexSku == -1 || items[indexSku].Length == 0) { sqlCommand.Parameters.AddWithValue("@SkuNumber", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@SkuNumber", items[indexSku]); }
|
||||
|
||||
if (indexQuantityPurchased == -1 || items[indexQuantityPurchased].Length == 0) { sqlCommand.Parameters.AddWithValue("@QuantityPurchased", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@QuantityPurchased", int.Parse(items[indexQuantityPurchased])); }
|
||||
|
||||
if (indexPromotionId == -1 || items[indexPromotionId].Length == 0) { sqlCommand.Parameters.AddWithValue("@PromotionRef", DBNull.Value); }
|
||||
else { sqlCommand.Parameters.AddWithValue("@PromotionRef", items[indexPromotionId]); }
|
||||
|
||||
sqlCommand.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
lineNumber = lineNumber + 1;
|
||||
}
|
||||
}
|
||||
|
||||
//final check - settlement amount matches sum of inserted settlement lines
|
||||
using (SqlCommand sqlCommand = new SqlCommand(@"
|
||||
SELECT Sum(tblImportAmazonSettlementReportLine.amount) AS SumOfAmount
|
||||
FROM tblImportAmazonSettlementReportLine
|
||||
WHERE ImportAmazonSettlementReportID=@ImportAmazonSettlementReportID;
|
||||
", sqlConn))
|
||||
{
|
||||
decimal sumOfAmount = -1.12345m;
|
||||
|
||||
sqlCommand.Parameters.AddWithValue("@ImportAmazonSettlementReportID", settlementReportId);
|
||||
sumOfAmount = (decimal)sqlCommand.ExecuteScalar();
|
||||
|
||||
if (sumOfAmount != settlementAmount)
|
||||
{
|
||||
log.LogError("Error importing settlement id'" + settlementRef + "'. Sum of inserted settlement lines (" + sumOfAmount +
|
||||
") does not match settlement amount (" + settlementAmount + ").");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
scope.Complete();
|
||||
|
||||
Console.Write("\r");
|
||||
log.LogInformation((lineNumber - (2 + lineSkip)) + " total settlement items inserted");
|
||||
if (lineSkip > 0)
|
||||
{
|
||||
log.LogError(lineSkip + " total line(s) where skipped due to insufficent number of cells on row");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void UpdateSpapiReportId (string settlementId, string spapiReportId)
|
||||
{
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
UPDATE
|
||||
tblImportAmazonSettlementReport
|
||||
SET
|
||||
SpapiReportId = @spapiReportId
|
||||
WHERE
|
||||
[settlement-id] = @settlementId
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@spapiReportId", spapiReportId);
|
||||
cmd.Parameters.AddWithValue("@settlementId", settlementId);
|
||||
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,462 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Data.SqlClient;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Import
|
||||
{
|
||||
public class AmazonSettlementRead : Connection
|
||||
{
|
||||
private Data.Database.SqlWhereBuilder whereBuilder = new SqlWhereBuilder();
|
||||
|
||||
public List<Model.Import.AmazonSettlement> BySettlementIdList(List<string> settlementIdList)
|
||||
{
|
||||
var settlementList = new List<Model.Import.AmazonSettlement>();
|
||||
|
||||
// build sql statement
|
||||
|
||||
string sql = @"
|
||||
SELECT tblImportAmazonSettlementReport.[settlement-id]
|
||||
,tblImportAmazonSettlementReportLine.[transaction-type]
|
||||
,tblImportAmazonSettlementReportLine.[order-id]
|
||||
,tblImportAmazonSettlementReportLine.[merchant-order-id]
|
||||
,tblImportAmazonSettlementReportLine.[adjustment-id]
|
||||
,tblImportAmazonSettlementReportLine.[shipment-id]
|
||||
,tblImportAmazonSettlementReportLine.[marketplace-name]
|
||||
,tblImportAmazonSettlementReportLine.[amount-type]
|
||||
,tblImportAmazonSettlementReportLine.[amount-description]
|
||||
,tblImportAmazonSettlementReportLine.amount
|
||||
,tblImportAmazonSettlementReportLine.currency
|
||||
,tblImportAmazonSettlementReportLine.[fulfillment-id]
|
||||
,tblImportAmazonSettlementReportLine.[posted-date-time]
|
||||
,tblImportAmazonSettlementReportLine.[order-item-code]
|
||||
,tblImportAmazonSettlementReportLine.[merchant-order-item-id]
|
||||
,tblImportAmazonSettlementReportLine.[merchant-adjustment-item-id]
|
||||
,tblImportAmazonSettlementReportLine.sku
|
||||
,tblImportAmazonSettlementReportLine.[quantity-purchased]
|
||||
,tblImportAmazonSettlementReportLine.[promotion-id]
|
||||
,tblImportAmazonSettlementReportLine.IsProcessed
|
||||
,tblImportAmazonSettlementReportLine.ExportAccountInvoiceLineID
|
||||
FROM tblImportAmazonSettlementReport
|
||||
INNER JOIN tblImportAmazonSettlementReportLine ON tblImportAmazonSettlementReport.ImportAmazonSettlementReportID = tblImportAmazonSettlementReportLine.ImportAmazonSettlementReportID
|
||||
WHERE ";
|
||||
|
||||
whereBuilder.Init();
|
||||
whereBuilder.In("tblImportAmazonSettlementReport.[settlement-id]", settlementIdList);
|
||||
|
||||
sql += whereBuilder.SqlWhereString;
|
||||
|
||||
sql += @"
|
||||
ORDER BY tblImportAmazonSettlementReport.[settlement-id]
|
||||
,tblImportAmazonSettlementReportLine.[posted-date-time] ";
|
||||
|
||||
// set variables
|
||||
bool firstRecord = true;
|
||||
string settlementId = "";
|
||||
var lineList = new List<Model.Import.AmazonSettlement.SettlementLine>();
|
||||
var LineListDic = new Dictionary<string, List<Model.Import.AmazonSettlement.SettlementLine>>();
|
||||
var headerList = new List<Model.Import.AmazonSettlementHeader>();
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(sql, conn))
|
||||
{
|
||||
whereBuilder.AddParametersToSqlCommand(cmd);
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (!reader.HasRows)
|
||||
{
|
||||
return settlementList;
|
||||
}
|
||||
|
||||
// get the header list
|
||||
headerList = new Data.Database.Import.AmazonSettlementHeaderRead().BySettlementId(settlementIdList);
|
||||
|
||||
// loop through table to build dictionary
|
||||
while (reader.Read())
|
||||
{
|
||||
if (reader.GetString(0) != settlementId)
|
||||
{
|
||||
if (firstRecord)
|
||||
{
|
||||
firstRecord = false;
|
||||
settlementId = reader.GetString(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LineListDic.Add(settlementId, lineList);
|
||||
settlementId = reader.GetString(0);
|
||||
lineList = new List<Model.Import.AmazonSettlement.SettlementLine>();
|
||||
}
|
||||
}
|
||||
|
||||
var line = new Model.Import.AmazonSettlement.SettlementLine();
|
||||
|
||||
line.TransactionType = reader.GetString(1);
|
||||
if (!reader.IsDBNull(2)) { line.OrderId = reader.GetString(2); }
|
||||
if (!reader.IsDBNull(3)) { line.MerchantOrderId = reader.GetString(3); }
|
||||
if (!reader.IsDBNull(4)) { line.AdjustmentId = reader.GetString(4); }
|
||||
if (!reader.IsDBNull(5)) { line.ShipmentId = reader.GetString(5); }
|
||||
if (!reader.IsDBNull(6)) { line.MarketPlaceName = reader.GetString(6); }
|
||||
line.AmountType = reader.GetString(7);
|
||||
line.AmountDescription = reader.GetString(8);
|
||||
line.Amount = reader.GetDecimal(9);
|
||||
line.CurrenyCode = reader.GetString(10);
|
||||
if (!reader.IsDBNull(11)) { line.FulfillmentId = reader.GetString(11); }
|
||||
line.PostDateTime = DateTime.SpecifyKind(reader.GetDateTime(12), DateTimeKind.Utc);
|
||||
if (!reader.IsDBNull(13)) { line.OrderItemCode = reader.GetString(13); }
|
||||
if (!reader.IsDBNull(14)) { line.MerchantOrderItemId = reader.GetString(14); }
|
||||
if (!reader.IsDBNull(15)) { line.MerchantAdjustmentItemId = reader.GetString(15); }
|
||||
if (!reader.IsDBNull(16)) { line.Sku = reader.GetString(16); }
|
||||
if (!reader.IsDBNull(17)) { line.QuantityPurchased = reader.GetInt32(17); }
|
||||
if (!reader.IsDBNull(18)) { line.PromotionId = reader.GetString(18); }
|
||||
line.IsProcessed = reader.GetBoolean(19);
|
||||
if (!reader.IsDBNull(20)) { int exportAccountInvoiceLineId = reader.GetInt32(20); }
|
||||
|
||||
lineList.Add(line);
|
||||
}
|
||||
LineListDic.Add(settlementId, lineList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//create return list
|
||||
foreach(var item in headerList)
|
||||
{
|
||||
var settlementReport = new Model.Import.AmazonSettlement(item);
|
||||
settlementReport.SettlementLineList = LineListDic[item.SettlementId];
|
||||
settlementList.Add(settlementReport);
|
||||
}
|
||||
|
||||
return settlementList;
|
||||
}
|
||||
|
||||
public void ByHeaderList()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void BySettlementId()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
private Dictionary<string, int> dicTablePkBySettlementId = new Dictionary<string, int>();
|
||||
private int? returnTop = null;
|
||||
private List<string> settlementIdList;
|
||||
|
||||
private bool FilterOutIsProcessed { get; set; }
|
||||
|
||||
public bool DescendingOrder { get; set; }
|
||||
|
||||
public int ReturnTop
|
||||
{
|
||||
get { return (int)returnTop; }
|
||||
set
|
||||
{
|
||||
if (value > 0)
|
||||
{ returnTop = value; }
|
||||
else
|
||||
{ returnTop = null; }
|
||||
}
|
||||
}
|
||||
|
||||
public bool ReturnTopIsSet
|
||||
{
|
||||
get { return returnTop != null; }
|
||||
}
|
||||
|
||||
private List<string> SettlementIdList
|
||||
{
|
||||
get { return settlementIdList; }
|
||||
set
|
||||
{
|
||||
if (value.Any())
|
||||
{ settlementIdList = value; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private bool SettlementIdListIsSet
|
||||
{
|
||||
get { return SettlementIdList != null; }
|
||||
}
|
||||
|
||||
public AmazonSettlementRead()
|
||||
{
|
||||
Innit();
|
||||
}
|
||||
|
||||
private void Innit()
|
||||
{
|
||||
DescendingOrder = false;
|
||||
FilterOutIsProcessed = false;
|
||||
ReturnTop = 0;
|
||||
settlementIdList = null;
|
||||
}
|
||||
|
||||
public List<Model.Import.AmazonSettlement> AllUnprocessed()
|
||||
{
|
||||
Innit();
|
||||
FilterOutIsProcessed = true;
|
||||
return ExecuteDbQuery();
|
||||
}
|
||||
|
||||
public Model.Import.AmazonSettlement BySettlementId(string settlementId)
|
||||
{
|
||||
Innit();
|
||||
|
||||
// create settlement list
|
||||
var idList = new List<string>();
|
||||
idList.Add(settlementId);
|
||||
var settlementList = BySettlementId(idList);
|
||||
|
||||
// return answer
|
||||
if (settlementList == null || !settlementList.Any())
|
||||
{ return null; }
|
||||
else
|
||||
{ return settlementList.First(); }
|
||||
}
|
||||
|
||||
public List<Model.Import.AmazonSettlement> BySettlementId(List<string> settlementIdList)
|
||||
{
|
||||
Innit();
|
||||
|
||||
if (settlementIdList == null || !settlementIdList.Any())
|
||||
{ return null; }
|
||||
|
||||
SettlementIdList = settlementIdList;
|
||||
|
||||
return ExecuteDbQuery();
|
||||
}
|
||||
|
||||
private List<Model.Import.AmazonSettlement> ExecuteDbQuery()
|
||||
{
|
||||
// get header info
|
||||
var settlementList = ReadHeaderList();
|
||||
if (settlementList == null || !settlementList.Any())
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// add lines to header
|
||||
foreach (var item in settlementList)
|
||||
{
|
||||
if (!dicTablePkBySettlementId.ContainsKey(item.SettlementId))
|
||||
{
|
||||
throw new Exception("This shouldnt' happen!");
|
||||
}
|
||||
int tablePk = dicTablePkBySettlementId[item.SettlementId];
|
||||
|
||||
item.SettlementLineList = ReadLineList(tablePk);
|
||||
}
|
||||
|
||||
return settlementList;
|
||||
}
|
||||
|
||||
private List<Model.Import.AmazonSettlement> ReadHeaderList()
|
||||
{
|
||||
// build the sql string
|
||||
string sqlString = "SELECT ";
|
||||
|
||||
if (ReturnTopIsSet)
|
||||
{
|
||||
sqlString = sqlString + "TOP " + ReturnTop + " ";
|
||||
}
|
||||
|
||||
sqlString = sqlString + @"
|
||||
ImportAmazonSettlementReportID
|
||||
,[marketplace-name]
|
||||
,[settlement-id]
|
||||
,[settlement-start-date]
|
||||
,[settlement-end-date]
|
||||
,[deposit-date]
|
||||
,[total-amount]
|
||||
,currency
|
||||
,IsProcessed
|
||||
FROM tblImportAmazonSettlementReport
|
||||
WHERE 1 = 1";
|
||||
|
||||
if (FilterOutIsProcessed)
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
AND IsProcessed = 0";
|
||||
}
|
||||
|
||||
// build dictionary of parameter and values
|
||||
var dicSettlementIdByParameterString = new Dictionary<string, string>();
|
||||
if (SettlementIdListIsSet)
|
||||
{
|
||||
int count = 0;
|
||||
foreach (string item in SettlementIdList)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(item))
|
||||
{
|
||||
count = count + 1;
|
||||
string parameterString = "@settlementId" + count;
|
||||
dicSettlementIdByParameterString.Add(parameterString, item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (dicSettlementIdByParameterString.Any())
|
||||
{
|
||||
int count = 0;
|
||||
foreach (var item in dicSettlementIdByParameterString)
|
||||
{
|
||||
count = count + 1;
|
||||
if (count == 1)
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
AND ( [settlement-id] = " + item.Key;
|
||||
}
|
||||
else
|
||||
{
|
||||
sqlString = sqlString + @"
|
||||
OR [settlement-id] = " + item.Key;
|
||||
}
|
||||
}
|
||||
sqlString = sqlString + " )";
|
||||
}
|
||||
|
||||
sqlString = sqlString + @"
|
||||
ORDER BY [settlement-start-date] ";
|
||||
if (DescendingOrder) { sqlString = sqlString + " DESC"; }
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(sqlString, conn))
|
||||
{
|
||||
if (dicSettlementIdByParameterString.Any())
|
||||
{
|
||||
foreach (var item in dicSettlementIdByParameterString)
|
||||
{
|
||||
cmd.Parameters.AddWithValue(item.Key, item.Value);
|
||||
}
|
||||
}
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (!reader.HasRows)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var headerList = new List<Model.Import.AmazonSettlement>();
|
||||
while (reader.Read())
|
||||
{
|
||||
var header = new Model.Import.AmazonSettlement();
|
||||
|
||||
int tablePk = reader.GetInt32(0);
|
||||
if (!reader.IsDBNull(1)) { header.MarketPlaceName = reader.GetString(1); }
|
||||
header.SettlementId = reader.GetString(2);
|
||||
header.StartDate = DateTime.SpecifyKind(reader.GetDateTime(3), DateTimeKind.Utc);
|
||||
header.EndDate = DateTime.SpecifyKind(reader.GetDateTime(4), DateTimeKind.Utc);
|
||||
header.DepositDate = DateTime.SpecifyKind(reader.GetDateTime(5), DateTimeKind.Utc);
|
||||
header.TotalAmount = reader.GetDecimal(6);
|
||||
header.CurrencyCode = reader.GetString(7);
|
||||
header.IsProcessed = reader.GetBoolean(8);
|
||||
|
||||
// update dictionary
|
||||
if (!dicTablePkBySettlementId.ContainsKey(header.SettlementId))
|
||||
{
|
||||
dicTablePkBySettlementId.Add(header.SettlementId, tablePk);
|
||||
}
|
||||
|
||||
// add header to list
|
||||
headerList.Add(header);
|
||||
}
|
||||
|
||||
return headerList;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<Model.Import.AmazonSettlement.SettlementLine> ReadLineList(int settlementPk)
|
||||
{
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT ImportAmazonSettlementReportLineID
|
||||
,[transaction-type]
|
||||
,[order-id]
|
||||
,[merchant-order-id]
|
||||
,[adjustment-id]
|
||||
,[shipment-id]
|
||||
,[marketplace-name]
|
||||
,[amount-type]
|
||||
,[amount-description]
|
||||
,amount
|
||||
,currency
|
||||
,[fulfillment-id]
|
||||
,[posted-date-time]
|
||||
,[order-item-code]
|
||||
,[merchant-order-item-id]
|
||||
,[merchant-adjustment-item-id]
|
||||
,sku
|
||||
,[quantity-purchased]
|
||||
,[promotion-id]
|
||||
,IsProcessed
|
||||
,ExportAccountInvoiceLineID
|
||||
FROM tblImportAmazonSettlementReportLine
|
||||
WHERE ImportAmazonSettlementReportID = @settlementPk
|
||||
ORDER BY [posted-date-time]
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@settlementPk", settlementPk);
|
||||
|
||||
using (var reader = cmd.ExecuteReader())
|
||||
{
|
||||
if (!reader.HasRows)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var lineList = new List<Model.Import.AmazonSettlement.SettlementLine>();
|
||||
while (reader.Read())
|
||||
{
|
||||
var line = new Model.Import.AmazonSettlement.SettlementLine();
|
||||
|
||||
int tablePk = reader.GetInt32(0);
|
||||
line.TransactionType = reader.GetString(1);
|
||||
if (!reader.IsDBNull(2)) { line.OrderId = reader.GetString(2); }
|
||||
if (!reader.IsDBNull(3)) { line.MerchantOrderId = reader.GetString(3); }
|
||||
if (!reader.IsDBNull(4)) { line.AdjustmentId = reader.GetString(4); }
|
||||
if (!reader.IsDBNull(5)) { line.ShipmentId = reader.GetString(5); }
|
||||
if (!reader.IsDBNull(6)) { line.MarketPlaceName = reader.GetString(6); }
|
||||
line.AmountType = reader.GetString(7);
|
||||
line.AmountDescription = reader.GetString(8);
|
||||
line.Amount = reader.GetDecimal(9);
|
||||
line.CurrenyCode = reader.GetString(10);
|
||||
if (!reader.IsDBNull(11)) { line.FulfillmentId = reader.GetString(11); }
|
||||
line.PostDateTime = DateTime.SpecifyKind(reader.GetDateTime(12), DateTimeKind.Utc);
|
||||
if (!reader.IsDBNull(13)) { line.OrderItemCode = reader.GetString(13); }
|
||||
if (!reader.IsDBNull(14)) { line.MerchantOrderItemId = reader.GetString(14); }
|
||||
if (!reader.IsDBNull(15)) { line.MerchantAdjustmentItemId = reader.GetString(15); }
|
||||
if (!reader.IsDBNull(16)) { line.Sku = reader.GetString(16); }
|
||||
if (!reader.IsDBNull(17)) { line.QuantityPurchased = reader.GetInt32(17); }
|
||||
if (!reader.IsDBNull(18)) { line.PromotionId = reader.GetString(18); }
|
||||
line.IsProcessed = reader.GetBoolean(19);
|
||||
if (!reader.IsDBNull(20)) { int exportAccountInvoiceLineId = reader.GetInt32(20); }
|
||||
|
||||
lineList.Add(line);
|
||||
}
|
||||
return lineList;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,54 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Import
|
||||
{
|
||||
public class AmazonSettlementUpdate : Connection
|
||||
{
|
||||
public AmazonSettlementUpdate()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void SetIsProcessedTrue(List<string> settlementIdList)
|
||||
{
|
||||
if (settlementIdList == null || !settlementIdList.Any())
|
||||
{
|
||||
throw new Exception("Settlement ID list is empty.");
|
||||
}
|
||||
|
||||
string sqlString = @"
|
||||
UPDATE tblImportAmazonSettlementReport
|
||||
SET IsProcessed = 1
|
||||
WHERE (1=0)";
|
||||
|
||||
for (int i = 0; i < settlementIdList.Count(); i++)
|
||||
{
|
||||
sqlString += @"
|
||||
OR ([settlement-id] = @settlementId" + i + ")";
|
||||
}
|
||||
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(sqlString, conn))
|
||||
{
|
||||
for (int i = 0; i < settlementIdList.Count(); i++)
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@settlementId" + i, settlementIdList[i]);
|
||||
}
|
||||
|
||||
if (cmd.ExecuteNonQuery() == 0)
|
||||
{
|
||||
throw new Exception("Something went wrong updating settlement status.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user