Feature: Sync MWS Shipment with Database

Various restructuring and misc. features added.
Removed reliance on ABrain Amazon MWS NuGet package, added Amazon's own C# lib
This commit is contained in:
Bobbie Hodgetts
2019-06-24 16:01:50 +01:00
committed by GitHub
parent bc44546efd
commit 116aedb897
27 changed files with 2236 additions and 289 deletions
@@ -0,0 +1,100 @@
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
namespace bnhtrade.Core.Data.Database.SKU
{
public class GetSKUId
{
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;
// set paramters
SKUIdBySKUNumber = new Dictionary<string, int>();
SKUNumberBySKUId = new Dictionary<int, string>();
}
/// <summary>
/// Get SKUId by SKU number.
/// </summary>
/// <param name="skuNumber">SKU Number to lookup Id</param>
/// <param name="enableLegacy">If SKUId is can not be retrived, function will attempt to lookup value by sku count.</param>
/// <param name="forceRequery">Results are chached, option forces database requery.</param>
/// <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))
{
return SKUIdBySKUNumber[skuNumber];
}
int skuId = 0;
using (SqlConnection conn = new SqlConnection(SqlConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(@"
SELECT skuSkuID
FROM tblSku
WHERE skuSkuNumber=@skuNumber;
", conn))
{
cmd.Parameters.AddWithValue("@skuNumber", skuNumber);
object obj = cmd.ExecuteScalar();
if (!(obj == null) || !(obj == DBNull.Value))
{
skuId = Convert.ToInt32(obj);
}
}
// if that didn't work, lookup buy sku count
if (skuId == 0 && skuNumber.Length == 6 && enableLegacy == true)
{
int skucount;
bool okay = int.TryParse(skuNumber, out skucount);
if (okay)
{
using (SqlCommand cmd = new SqlCommand(
"SELECT skuSkuID FROM tblSku WHERE skuSkuCount=@skuCount;"
, conn))
{
cmd.Parameters.AddWithValue("@skuCount", skucount);
object obj = cmd.ExecuteScalar();
if (!(obj == null) || !(obj == DBNull.Value))
{
skuId = Convert.ToInt32(obj);
}
}
}
}
}
// update cache
if (skuId > 0)
{
if (SKUIdBySKUNumber.ContainsKey(skuNumber))
{ SKUIdBySKUNumber.Remove(skuNumber); }
SKUIdBySKUNumber.Add(skuNumber, skuId);
if (SKUNumberBySKUId.ContainsKey(skuId))
{ SKUNumberBySKUId.Remove(skuId); }
SKUNumberBySKUId.Add(skuId, skuNumber);
}
else
{
throw new Exception("Unable to retrive an SkuID for SKU#" + skuNumber);
}
return skuId;
}
}
}