SP-API stock reconciliation

Amazon had depreciated a number of reports that were used for stock reconciliation. Application now uses the new fba ledger report to reconcile. It is currently untested, as this requires data from Amazon. Methods that require testing will return a 'NotImplementedException'.

Also, removed the depreciated ILMerge and replaced with ILRepack.

Plus much more tidying up, and improvements.
This commit is contained in:
Bobbie Hodgetts
2024-05-07 08:24:00 +01:00
committed by GitHub
parent 2f919d7b5a
commit 91ef9acc78
1272 changed files with 4944 additions and 2773311 deletions
@@ -1,10 +1,11 @@
using System;
using NUnit.Framework.Internal;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper;
//using Dapper;
namespace bnhtrade.Core.Data.Database.Stock
{
@@ -76,6 +77,37 @@ namespace bnhtrade.Core.Data.Database.Stock
}
}
/// <summary>
/// Retrevies the IsProcessed for a given stock sku transaction
/// </summary>
/// <param name="skuTransactionId">the stock transaction id</param>
/// <returns></returns>
/// <exception cref="ArgumentException">Invalid stock transaction id</exception>
public bool GetIsProcessed(int skuTransactionId)
{
using (var conn = new SqlConnection(SqlConnectionString))
{
conn.Open();
using (var cmd = new SqlCommand(@"
SELECT IsProcessed FROM tblStockSkuTransaction WHERE StockSkuTransactionID=@skuTransactionId
", conn))
{
cmd.Parameters.AddWithValue("@skuTransactionId", skuTransactionId);
object obj = cmd.ExecuteScalar();
if (obj == null || obj == DBNull.Value)
{
throw new ArgumentException("invalid stock transaction id");
}
else
{
return (bool)obj;
}
}
}
}
/// <summary>
/// Populates model class from filtered database results
@@ -88,7 +120,8 @@ namespace bnhtrade.Core.Data.Database.Stock
// Adding this means they at least get processed in the correct order (maybe)!
var resultList = new List<Model.Stock.SkuTransaction>();
var parameters = new DynamicParameters();
//var parameters = new DynamicParameters();
var parameterNew = new Dictionary<string, object>();
string sql = @"
SELECT tblStockSkuTransaction.StockSkuTransactionID AS SkuTransactionId
@@ -102,7 +135,7 @@ namespace bnhtrade.Core.Data.Database.Stock
,tblStockSkuTransactionType.TypeCode AS SkuTransactionTypeCode
,tblStockSkuTransactionType.TypeName AS SkuTransactionTypeName
,tblSku.skuSkuNumber AS SkuNumber
,tblStockSkuTransaction.SkuID
,tblStockSkuTransaction.RecordCreated
FROM tblStockSkuTransaction
INNER JOIN tblStockSkuTransactionType ON tblStockSkuTransaction.StockSkuTransactionTypeID = tblStockSkuTransactionType.StockSkuTransactionTypeID
INNER JOIN tblSku ON tblStockSkuTransaction.SkuID = tblSku.skuSkuID
@@ -110,7 +143,7 @@ namespace bnhtrade.Core.Data.Database.Stock
if (transactionIdList.Any())
{
parameters.Add("@transactionIdList", this.transactionIdList);
parameterNew.Add("@transactionIdList", this.transactionIdList);
sql += @"
AND tblStockSkuTransaction.StockSkuTransactionID IN @transactionIdList ";
@@ -133,7 +166,7 @@ namespace bnhtrade.Core.Data.Database.Stock
if (StockTransactionTypeName != null && StockTransactionTypeName.Any())
{
parameters.Add("@stockTransactionTypeName", StockTransactionTypeName);
parameterNew.Add("@stockTransactionTypeName", StockTransactionTypeName);
sql += @"
AND tblStockSkuTransactionType.TypeName IN @stockTransactionTypeName ";
@@ -141,7 +174,7 @@ namespace bnhtrade.Core.Data.Database.Stock
if (StockTransactionTypeCode != null && StockTransactionTypeCode.Any())
{
parameters.Add("@stockTransactionTypeCode", StockTransactionTypeCode);
parameterNew.Add("@stockTransactionTypeCode", StockTransactionTypeCode);
sql += @"
AND tblStockSkuTransactionType.TypeCode IN @stockTransactionTypeCode ";
@@ -155,23 +188,64 @@ namespace bnhtrade.Core.Data.Database.Stock
{
conn.Open();
resultList = conn.Query<Model.Stock.SkuTransaction>(sql, parameters).ToList();
}
// set datetime kind
for (int i = 0; i < resultList.Count; i++)
{
if (resultList[i].IsSetTransactionDate)
using (SqlCommand cmd = new SqlCommand(sql, conn))
{
resultList[i].TransactionDate = DateTime.SpecifyKind(resultList[i].TransactionDate, DateTimeKind.Utc);
foreach (var param in parameterNew)
{
cmd.Parameters.AddWithValue(param.Key, param.Value);
}
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (!reader.HasRows)
{
return resultList;
}
else
{
while (reader.Read())
{
int skuTransactionId = reader.GetInt32(0);
DateTime transactionDate = DateTime.SpecifyKind(reader.GetDateTime(1), DateTimeKind.Utc);
int? foreignKey = null;
if (!reader.IsDBNull(2)) { reader.GetInt32(2); }
string reference = null;
if (!reader.IsDBNull(3)) { reader.GetString(3); }
string detail = null;
if (!reader.IsDBNull(4)) { reader.GetString(4); }
int quantity = reader.GetInt32(5);
bool isProcessed = reader.GetBoolean(6);
int? stockJournalId = null;
if (!reader.IsDBNull(7)) { reader.GetInt32(7); }
string skuTransactionTypeCode = reader.GetString(8);
string skuTransactionTypeName = reader.GetString(9);
string skuNumber = reader.GetString(10);
DateTime recordCreated = DateTime.SpecifyKind(reader.GetDateTime(11), DateTimeKind.Utc);
var item = new Model.Stock.SkuTransaction(skuTransactionId, transactionDate, skuTransactionTypeCode, foreignKey, reference
, detail, skuNumber, quantity, isProcessed, stockJournalId, recordCreated);
resultList.Add(item);
}
}
}
}
}
return resultList;
}
/// <summary>
/// Get Stock SKU Transaction by ID
/// Get Stock SKU Transaction by ID. Overrides any filters already set.
/// </summary>
/// <param name="transactionIdList"></param>
/// <returns>List of SkuTransaction</returns>