mirror of
https://github.com/stokebob/bnhtrade.git
synced 2026-05-18 19:48:23 +00:00
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:
@@ -4,24 +4,18 @@ using System.Data.SqlClient;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Sku
|
||||
{
|
||||
public class GetSkuId
|
||||
public class GetSkuId : Connection
|
||||
{
|
||||
private Dictionary<string, int> SKUIdBySKUNumber { get; set; }
|
||||
private Dictionary<int, string> SKUNumberBySKUId { get; set; }
|
||||
private string SqlConnectionString { get; set; }
|
||||
public GetSkuId(string sqlConnectionString)
|
||||
{
|
||||
// setup sql parameters
|
||||
if (sqlConnectionString.Length == 0)
|
||||
{
|
||||
throw new Exception("Zero length sql connectionstring passed");
|
||||
}
|
||||
SqlConnectionString = sqlConnectionString;
|
||||
private Dictionary<string, int> SkuIdBySkuNumber { get; set; }
|
||||
|
||||
private Dictionary<int, string> SkuNumberBySkuId { get; set; }
|
||||
|
||||
public GetSkuId()
|
||||
{
|
||||
// set paramters
|
||||
SKUIdBySKUNumber = new Dictionary<string, int>();
|
||||
SKUNumberBySKUId = new Dictionary<int, string>();
|
||||
}
|
||||
SkuIdBySkuNumber = new Dictionary<string, int>();
|
||||
SkuNumberBySkuId = new Dictionary<int, string>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get SKUId by SKU number.
|
||||
@@ -32,9 +26,9 @@ namespace bnhtrade.Core.Data.Database.Sku
|
||||
/// <returns>Database SKUId or Exception if not found.</returns>
|
||||
public int BySKUNumber(string skuNumber, bool enableLegacy = false, bool forceRequery = false)
|
||||
{
|
||||
if (forceRequery == false && SKUIdBySKUNumber.ContainsKey(skuNumber))
|
||||
if (forceRequery == false && SkuIdBySkuNumber.ContainsKey(skuNumber))
|
||||
{
|
||||
return SKUIdBySKUNumber[skuNumber];
|
||||
return SkuIdBySkuNumber[skuNumber];
|
||||
}
|
||||
|
||||
int skuId = 0;
|
||||
@@ -81,13 +75,13 @@ namespace bnhtrade.Core.Data.Database.Sku
|
||||
// update cache
|
||||
if (skuId > 0)
|
||||
{
|
||||
if (SKUIdBySKUNumber.ContainsKey(skuNumber))
|
||||
{ SKUIdBySKUNumber.Remove(skuNumber); }
|
||||
SKUIdBySKUNumber.Add(skuNumber, skuId);
|
||||
if (SkuIdBySkuNumber.ContainsKey(skuNumber))
|
||||
{ SkuIdBySkuNumber.Remove(skuNumber); }
|
||||
SkuIdBySkuNumber.Add(skuNumber, skuId);
|
||||
|
||||
if (SKUNumberBySKUId.ContainsKey(skuId))
|
||||
{ SKUNumberBySKUId.Remove(skuId); }
|
||||
SKUNumberBySKUId.Add(skuId, skuNumber);
|
||||
if (SkuNumberBySkuId.ContainsKey(skuId))
|
||||
{ SkuNumberBySkuId.Remove(skuId); }
|
||||
SkuNumberBySkuId.Add(skuId, skuNumber);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -96,5 +90,45 @@ namespace bnhtrade.Core.Data.Database.Sku
|
||||
|
||||
return skuId;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Does what it says on the tin.
|
||||
/// </summary>
|
||||
/// <param name="productId"></param>
|
||||
/// <param name="conditionId"></param>
|
||||
/// <param name="accountTaxCodeId"></param>
|
||||
/// <param name="noMatchInsertNew"></param>
|
||||
/// <returns>SkuId or null</returns>
|
||||
/// <exception cref="Exception"></exception>
|
||||
public int? ByParameters(int productId, int conditionId, int accountTaxCodeId)
|
||||
{
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
int? returnId = null;
|
||||
|
||||
conn.Open();
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT
|
||||
tblSku.skuSkuID
|
||||
FROM
|
||||
tblSku
|
||||
WHERE
|
||||
(((tblSku.skuProductID)=@productId) AND ((tblSku.skuSkuConditionID)=@conditionId) AND ((tblSku.AccountTaxCodeID)=@accountTaxCodeId));
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@productId", productId);
|
||||
cmd.Parameters.AddWithValue("@conditionId", conditionId);
|
||||
cmd.Parameters.AddWithValue("@accountTaxCodeId", accountTaxCodeId);
|
||||
|
||||
object obj = cmd.ExecuteScalar();
|
||||
if (obj != null || obj == DBNull.Value)
|
||||
{
|
||||
returnId = (int)obj;
|
||||
}
|
||||
}
|
||||
return returnId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
using FikaAmazonAPI.AmazonSpApiSDK.Models.ProductPricing;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Sku
|
||||
{
|
||||
public class InsertSku : Connection
|
||||
{
|
||||
public int InsertNew(int productId, int conditionId, int accountTaxCodeId)
|
||||
{
|
||||
using (TransactionScope scope = new TransactionScope())
|
||||
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
|
||||
{
|
||||
conn.Open();
|
||||
|
||||
// check tax code id is a valid for SKU
|
||||
var dbTax = new Data.Database.Account.ReadTaxCode();
|
||||
var taxCodeList = dbTax.GetByTaxCodeId(new List<int> { accountTaxCodeId });
|
||||
|
||||
if (!taxCodeList.Any())
|
||||
{
|
||||
throw new Exception("AccountTaxCodeID=" + accountTaxCodeId + " doesn't exist!");
|
||||
}
|
||||
else if (taxCodeList[0].IsValidOnIncome == false)
|
||||
{
|
||||
throw new Exception("AccountTaxCodeID=" + accountTaxCodeId + " is not a valid type for an SKU.");
|
||||
}
|
||||
|
||||
// get info to create sku number
|
||||
int skuCount;
|
||||
int skuSuffix;
|
||||
using (SqlCommand cmd = new SqlCommand("SELECT NEXT VALUE FOR SkuCountSequence;", conn))
|
||||
{
|
||||
skuCount = (int)cmd.ExecuteScalar();
|
||||
}
|
||||
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
SELECT tblSkuCondition.scnSkuNumberSuffix
|
||||
FROM tblSkuCondition
|
||||
WHERE (((tblSkuCondition.scnSkuConditionID)=@conditionId));
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@conditionId", conditionId);
|
||||
|
||||
try
|
||||
{
|
||||
skuSuffix = (int)cmd.ExecuteScalar();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new Exception("Error retriving SKU number suffix for SkuConditionID=" + conditionId + "." +
|
||||
System.Environment.NewLine + "Error Message: " + ex.Message);
|
||||
}
|
||||
}
|
||||
string skuNumber = skuCount.ToString("D6") + "-" + skuSuffix.ToString("D2");
|
||||
|
||||
// insert new sku
|
||||
int skuId;
|
||||
using (SqlCommand cmd = new SqlCommand(@"
|
||||
INSERT INTO tblSku
|
||||
(skuSkuNumber, skuProductID, skuSkuConditionID, AccountTaxCodeID)
|
||||
OUTPUT INSERTED.skuSkuID
|
||||
VALUES
|
||||
(@skuNumber, @productId, @conditionId, @accountTaxCodeId)
|
||||
", conn))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("@skuNumber", skuNumber);
|
||||
cmd.Parameters.AddWithValue("@productId", productId);
|
||||
cmd.Parameters.AddWithValue("@conditionId", conditionId);
|
||||
cmd.Parameters.AddWithValue("@accountTaxCodeId", accountTaxCodeId);
|
||||
|
||||
skuId = (int)cmd.ExecuteScalar();
|
||||
}
|
||||
|
||||
scope.Complete();
|
||||
return skuId;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ using System.Data.SqlClient;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Transactions;
|
||||
|
||||
namespace bnhtrade.Core.Data.Database.Sku
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user