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

View File

@@ -1,9 +1,9 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio Version 16
VisualStudioVersion = 15.0.27428.2037 VisualStudioVersion = 16.0.28803.202
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{CF330C30-8231-4D54-B60C-FF0644713502}" Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{CF330C30-8231-4D54-B60C-FF0644713502}"
ProjectSection(SolutionItems) = preProject ProjectSection(SolutionItems) = preProject
build\bnhtrade.ComTypeLib.RegAsmInstall.bat = build\bnhtrade.ComTypeLib.RegAsmInstall.bat build\bnhtrade.ComTypeLib.RegAsmInstall.bat = build\bnhtrade.ComTypeLib.RegAsmInstall.bat
build\bnhtrade.ComTypeLib.RegAsmRefresh.bat = build\bnhtrade.ComTypeLib.RegAsmRefresh.bat build\bnhtrade.ComTypeLib.RegAsmRefresh.bat = build\bnhtrade.ComTypeLib.RegAsmRefresh.bat
@@ -16,6 +16,20 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bnhtrade.Core", "src\bnhtra
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bnhtrade.ComTypeLib", "src\bnhtrade.ComTypeLib\bnhtrade.ComTypeLib.csproj", "{C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "bnhtrade.ComTypeLib", "src\bnhtrade.ComTypeLib\bnhtrade.ComTypeLib.csproj", "{C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}"
EndProject EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "lib", "lib", "{3D90C0F5-02E7-44E5-A89D-F5E217C6602F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MWSClientCsRuntime", "..\..\AmazonMWSCsClient\src\MWSClientCsRuntime\MWSClientCsRuntime.csproj", "{BDE52371-CAD4-4809-B8F7-9A218EE02464}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FBAInboundServiceMWS", "..\..\AmazonMWSCsClient\src\FBAInboundServiceMWS\FBAInboundServiceMWS.csproj", "{9C7D6775-4F06-4881-87A0-B9514F2F3033}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MarketplaceWebServiceProducts", "..\..\AmazonMWSCsClient\src\MarketplaceWebServiceProducts\MarketplaceWebServiceProducts.csproj", "{FE2FE872-F92E-4B47-BCC2-E41B9C10EB96}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MWSFinancesService", "..\..\AmazonMWSCsClient\src\MWSFinancesService\MWSFinancesService.csproj", "{1FE13EF5-AABF-4080-B790-990B9069C634}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MarketplaceWebService", "..\..\AmazonMWSCsClient\src\MarketplaceWebService\MarketplaceWebService.csproj", "{52B09E65-F1B4-4B99-B8E2-4A0B2E3201C2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AmazonMWS", "AmazonMWS", "{09C5A59A-8917-4D5C-BA80-D38B8C9EDECC}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@@ -34,10 +48,38 @@ Global
{C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}.Debug|Any CPU.Build.0 = Debug|Any CPU {C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}.Release|Any CPU.ActiveCfg = Release|Any CPU {C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}.Release|Any CPU.Build.0 = Release|Any CPU {C3405E9D-B47A-4569-B6A3-BC9E7AA71EE5}.Release|Any CPU.Build.0 = Release|Any CPU
{BDE52371-CAD4-4809-B8F7-9A218EE02464}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDE52371-CAD4-4809-B8F7-9A218EE02464}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDE52371-CAD4-4809-B8F7-9A218EE02464}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDE52371-CAD4-4809-B8F7-9A218EE02464}.Release|Any CPU.Build.0 = Release|Any CPU
{9C7D6775-4F06-4881-87A0-B9514F2F3033}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C7D6775-4F06-4881-87A0-B9514F2F3033}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C7D6775-4F06-4881-87A0-B9514F2F3033}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C7D6775-4F06-4881-87A0-B9514F2F3033}.Release|Any CPU.Build.0 = Release|Any CPU
{FE2FE872-F92E-4B47-BCC2-E41B9C10EB96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE2FE872-F92E-4B47-BCC2-E41B9C10EB96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE2FE872-F92E-4B47-BCC2-E41B9C10EB96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE2FE872-F92E-4B47-BCC2-E41B9C10EB96}.Release|Any CPU.Build.0 = Release|Any CPU
{1FE13EF5-AABF-4080-B790-990B9069C634}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1FE13EF5-AABF-4080-B790-990B9069C634}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1FE13EF5-AABF-4080-B790-990B9069C634}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1FE13EF5-AABF-4080-B790-990B9069C634}.Release|Any CPU.Build.0 = Release|Any CPU
{52B09E65-F1B4-4B99-B8E2-4A0B2E3201C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{52B09E65-F1B4-4B99-B8E2-4A0B2E3201C2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{52B09E65-F1B4-4B99-B8E2-4A0B2E3201C2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{52B09E65-F1B4-4B99-B8E2-4A0B2E3201C2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{BDE52371-CAD4-4809-B8F7-9A218EE02464} = {09C5A59A-8917-4D5C-BA80-D38B8C9EDECC}
{9C7D6775-4F06-4881-87A0-B9514F2F3033} = {09C5A59A-8917-4D5C-BA80-D38B8C9EDECC}
{FE2FE872-F92E-4B47-BCC2-E41B9C10EB96} = {09C5A59A-8917-4D5C-BA80-D38B8C9EDECC}
{1FE13EF5-AABF-4080-B790-990B9069C634} = {09C5A59A-8917-4D5C-BA80-D38B8C9EDECC}
{52B09E65-F1B4-4B99-B8E2-4A0B2E3201C2} = {09C5A59A-8917-4D5C-BA80-D38B8C9EDECC}
{09C5A59A-8917-4D5C-BA80-D38B8C9EDECC} = {3D90C0F5-02E7-44E5-A89D-F5E217C6602F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {9CE53A62-9E0C-460F-9C09-B7DDB3B7F0EA} SolutionGuid = {9CE53A62-9E0C-460F-9C09-B7DDB3B7F0EA}
EndGlobalSection EndGlobalSection

View File

@@ -1,8 +1,8 @@
using bnhtrade.ComTypeLib.Credential; using bnhtrade.ComTypeLib.Credential;
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using Core.EbayQuery;
using System.IO; using System.IO;
using bnhtrade.Core.EbayQuery;
namespace bnhtrade.ComTypeLib.Ebay namespace bnhtrade.ComTypeLib.Ebay
{ {

View File

@@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Data.AmazonMWS
{
public class CredentialMws
{
public string merchantId { get { return "A3RUYNKLWWM5KW"; } }
public string marketPlaceId { get { return "A1F83G8C2ARO7P"; } } // Amazon.co.uk
public string accessKeyId { get { return "AKIAJU45WSYVINEN45UA"; } }
public string secretAccessKey { get { return "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"; } }
public string applicationName { get { return "bnhtrade.Core"; } }
public string applicationVersion { get { return "0.1"; } }
public string serviceURL { get { return "https://mws.amazonservices.co.uk"; } }
}
}

View File

@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Linq;
using System.Xml.XPath;
namespace bnhtrade.Core.Data.AmazonMWS
{
public class CurrentDateTime
{
public DateTime GetUtc()
{
var xmlDoc = new XmlDocument();
xmlDoc.Load("https://mws.amazonservices.com/");
DateTime returnTime = default(DateTime);
XmlNodeList elemList = xmlDoc.GetElementsByTagName("Timestamp");
for (int i = 0; i < elemList.Count; i++)
{
string attrVal = elemList[i].Attributes["timestamp"].Value;
if (!string.IsNullOrWhiteSpace(attrVal))
{
returnTime = DateTime.Parse(attrVal);
break;
}
}
if (returnTime == default(DateTime))
{
throw new Exception("Error requesting time from Amazon");
}
returnTime = returnTime.ToUniversalTime();
returnTime = returnTime.AddTicks(-(returnTime.Ticks % TimeSpan.TicksPerSecond));
return returnTime;
}
public DateTime GetLocal()
{
return GetUtc().ToLocalTime();
}
}
}

View File

@@ -0,0 +1,189 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using FBAInboundServiceMWS.Model;
namespace bnhtrade.Core.Data.AmazonMWS.FBAInbound
{
class ListInboundShipmentItems
{
public string AmazonShipmentId { get; private set; }
public DateTime LastUpdatedAfter { get; private set; }
public DateTime LastUpdatedBefore { get; private set; }
public bool IsSetAmazonShipmentId()
{
return AmazonShipmentId != null;
}
public bool IsSetLastUpdatedAfter()
{
return LastUpdatedAfter != null;
}
public bool IsSetLastUpdatedBefore()
{
return LastUpdatedBefore != null;
}
public List<Model.AmazonFBAInbound.ShipmentItemInfo> GetByAmazonShipmentId(string amazonShipmentId)
{
// checks
if (amazonShipmentId.Length < 9)
{
throw new Exception("Amazon shipment id incorrect length '" + amazonShipmentId + "'");
}
var request = new ListInboundShipmentItemsRequest();
request.ShipmentId = amazonShipmentId;
AmazonShipmentId = amazonShipmentId;
return ListInboundShipmentItemsGet(request);
}
public List<Model.AmazonFBAInbound.ShipmentItemInfo> GetByDates(DateTime lastUpdatedAfter, DateTime lastUpdatedBefore)
{
//checks
if (lastUpdatedAfter >= lastUpdatedBefore)
{
throw new Exception("Paramter LastUpdatedAfter must be greater than LastUpdatedBefore");
}
var request = new ListInboundShipmentItemsRequest();
request.LastUpdatedAfter = lastUpdatedAfter;
request.LastUpdatedBefore = lastUpdatedBefore;
LastUpdatedAfter = lastUpdatedAfter;
LastUpdatedBefore = lastUpdatedBefore;
return ListInboundShipmentItemsGet(request);
}
private List<Model.AmazonFBAInbound.ShipmentItemInfo> ListInboundShipmentItemsGet(ListInboundShipmentItemsRequest request)
{
// variables
int mwsPollFrequency = 500;
int mwsPollTimeout = 60;
// add default entries, if not already set
if (!request.IsSetSellerId())
{
var cred = new AmazonMWS.CredentialMws();
request.SellerId = cred.merchantId;
}
// checks
if ((request.IsSetLastUpdatedAfter() || request.IsSetLastUpdatedBefore()) && request.IsSetShipmentId())
{
throw new Exception("If ShipmentId is specified, LastUpdatedBefore and LastUpdatedAfter are ignored.");
}
// get amazon service, responce and result
var service = new AmazonMWS.Service().FbaInbound;
//var response = new ListInboundShipmentItemsResponse();
var result = new ListInboundShipmentItemsResult();
// poll mws for response
int count = 0;
do
{
var response = service.ListInboundShipmentItems(request);
if (response.IsSetListInboundShipmentItemsResult())
{
result = response.ListInboundShipmentItemsResult;
break;
}
else
{
Thread.Sleep(mwsPollFrequency);
count++;
}
} while (count < mwsPollTimeout);
if (count == mwsPollTimeout)
{
throw new Exception("Response from Amazon MWS timeout");
}
// create the return list
var returnList = new List<Model.AmazonFBAInbound.ShipmentItemInfo>();
// check a result was returned, return empty list on no results
if (!result.IsSetItemData())
{
return returnList;
}
// add data list
InboundShipmentItemList resultList = result.ItemData;
var infoList = new List<InboundShipmentItem>();
infoList.AddRange(resultList.member);
// check for next dataset
if (result.IsSetNextToken())
{
string nextToken = result.NextToken;
do
{
var nextRequest = new ListInboundShipmentItemsByNextTokenRequest();
var nextResult = new ListInboundShipmentItemsByNextTokenResult();
nextRequest.NextToken = nextToken;
nextRequest.SellerId = request.SellerId;
count = 0;
do
{
var response = service.ListInboundShipmentItemsByNextToken(nextRequest);
if (response.IsSetListInboundShipmentItemsByNextTokenResult())
{
nextResult = response.ListInboundShipmentItemsByNextTokenResult;
break;
}
else
{
Thread.Sleep(mwsPollFrequency);
count++;
}
} while (count < mwsPollTimeout);
if (count == mwsPollTimeout)
{
throw new Exception("Response from Amazon MWS timeout");
}
// add data to list
InboundShipmentItemList nextResultList = nextResult.ItemData;
infoList.AddRange(nextResultList.member);
if (nextResult.IsSetNextToken())
{
nextToken = nextResult.NextToken;
}
else
{
nextToken = "";
}
} while (nextToken.Length > 0); // next token is true
}
// load data set into returnList
foreach (var item in infoList)
{
var returnItem = new Model.AmazonFBAInbound.ShipmentItemInfo();
returnItem.AmazonShipmentId = item.ShipmentId;
returnItem.SKUNumber = item.SellerSKU;
returnItem.AmazonFNSKU = item.FulfillmentNetworkSKU;
if (item.IsSetQuantityShipped()) { returnItem.QuantityAllocated = (int)item.QuantityShipped; }
else { returnItem.QuantityAllocated = 0; }
if (item.IsSetQuantityReceived()) { returnItem.QuantityReceived = (int)item.QuantityReceived; }
else { returnItem.QuantityReceived = 0; }
returnList.Add(returnItem);
}
return returnList;
}
}
}

View File

@@ -0,0 +1,223 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using FBAInboundServiceMWS.Model;
namespace bnhtrade.Core.Data.AmazonMWS.FBAInbound
{
public class ListInboundShipments
{
/// <summary>
/// List of Shipment Status' to return. Default is all status' returned.
/// </summary>
public List<string> ShipmentStatusList { get; set; }
/// <summary>
/// List of Shipment Id to return.
/// </summary>
public List<string> ShipmentIdList { get; set; }
public DateTime LastUpdatedAfter { get; set; }
public DateTime LastUpdatedBefore { get; set; }
public bool IsSetShipmentStatusList()
{
return ShipmentStatusList != null;
}
public bool IsSetShipmentIdList()
{
return ShipmentIdList != null;
}
public bool IsSetLastUpdatedAfter()
{
return LastUpdatedAfter != null;
}
public bool IsSetLastUpdatedBefore()
{
return LastUpdatedBefore != null;
}
public List<Core.Model.AmazonFBAInbound.ShipmentInfo> GetShipmentInfo()
{
// variables
int mwsPollFrequency = 500; // restore rate of two requests every second
int mwsPollTimeout = 60;
// at least one search variable needs to be set (to make sure EVERYTHING isn't returned)
if (!IsSetShipmentStatusList() && !IsSetShipmentIdList() && !IsSetLastUpdatedAfter() && !IsSetLastUpdatedBefore())
{
throw new Exception("No request variables have been set");
}
// date checks
if (IsSetLastUpdatedAfter() || IsSetLastUpdatedBefore())
{
if (!IsSetLastUpdatedAfter() || !IsSetLastUpdatedBefore())
{
throw new Exception("If LastUpdatedBefore or LastUpdatedAfter is specified then both parameters must be specified");
}
// set date types
DateTime.SpecifyKind(LastUpdatedAfter, DateTimeKind.Utc);
DateTime.SpecifyKind(LastUpdatedBefore, DateTimeKind.Utc);
if (LastUpdatedBefore.ToUniversalTime() < LastUpdatedAfter.ToUniversalTime())
{
throw new Exception("Parameter LastUpdatedBefore must be less than LastUpdatedAfter");
}
}
// down to business, build the mws request
var request = new ListInboundShipmentsRequest();
var cred = new AmazonMWS.CredentialMws();
request.SellerId = cred.merchantId;
// add shipment status to request
if (!IsSetShipmentStatusList() && !IsSetShipmentIdList())
{
// defaults values
var statusList = new ShipmentStatusList();
statusList.member.Add("WORKING");
statusList.member.Add("SHIPPED");
statusList.member.Add("IN_TRANSIT");
statusList.member.Add("DELIVERED");
statusList.member.Add("CHECKED_IN");
statusList.member.Add("RECEIVING");
statusList.member.Add("CLOSED");
statusList.member.Add("CANCELLED");
statusList.member.Add("DELETED");
statusList.member.Add("ERROR");
request.ShipmentStatusList = statusList;
}
else if (IsSetShipmentStatusList())
{
var statusList = new ShipmentStatusList();
foreach (string item in ShipmentStatusList)
{
statusList.member.Add(item);
}
request.ShipmentStatusList = statusList;
}
// add shipment Id list to request
if (IsSetShipmentIdList())
{
var shipmentIdList = new ShipmentIdList();
foreach (string item in ShipmentIdList)
{
shipmentIdList.member.Add(item);
}
request.ShipmentIdList = shipmentIdList;
}
// add dates to request
if (IsSetLastUpdatedAfter())
{
request.LastUpdatedAfter = LastUpdatedAfter.ToUniversalTime();
request.LastUpdatedBefore = LastUpdatedBefore.ToUniversalTime();
}
// get amazon service, responce and result
var service = new AmazonMWS.Service().FbaInbound;
var result = new ListInboundShipmentsResult();
// poll mws for response
int count = 0;
do
{
var response = service.ListInboundShipments(request);
if (response.IsSetListInboundShipmentsResult())
{
result = response.ListInboundShipmentsResult;
break;
}
else
{
Thread.Sleep(mwsPollFrequency);
count++;
}
} while (count < mwsPollTimeout);
if (count == mwsPollTimeout)
{
throw new Exception("Response from Amazon MWS timeout");
}
// check a result was returned
if (!result.IsSetShipmentData())
{
return null;
}
// add data list
InboundShipmentList resultList = result.ShipmentData;
var infoList = new List<InboundShipmentInfo>();
infoList.AddRange(resultList.member);
// check for next dataset
if (result.IsSetNextToken())
{
string nextToken = result.NextToken;
do
{
var nextRequest = new ListInboundShipmentsByNextTokenRequest();
var nextResult = new ListInboundShipmentsByNextTokenResult();
nextRequest.NextToken = nextToken;
nextRequest.SellerId = request.SellerId;
count = 0;
do
{
var response = service.ListInboundShipmentsByNextToken(nextRequest);
if (response.IsSetListInboundShipmentsByNextTokenResult())
{
nextResult = response.ListInboundShipmentsByNextTokenResult;
break;
}
else
{
Thread.Sleep(mwsPollFrequency);
count++;
}
} while (count < mwsPollTimeout);
if (count == mwsPollTimeout)
{
throw new Exception("Response from Amazon MWS timeout");
}
// add data to list
InboundShipmentList nextResultList = nextResult.ShipmentData;
infoList.AddRange(nextResultList.member);
if (nextResult.IsSetNextToken())
{
nextToken = nextResult.NextToken;
}
else
{
nextToken = "";
}
} while (nextToken.Length > 0); // next token is true
}
// build return value
var returnItem = new List<Core.Model.AmazonFBAInbound.ShipmentInfo>();
//var lastUpdated = infoList.
foreach( InboundShipmentInfo item in infoList)
{
var listItem = new Core.Model.AmazonFBAInbound.ShipmentInfo();
listItem.AmazonShipmentId = item.ShipmentId;
listItem.DestinationFulfillmentCenterId = item.DestinationFulfillmentCenterId;
listItem.ShipmentName = item.ShipmentName;
listItem.ShipmentStatus = item.ShipmentStatus;
returnItem.Add(listItem);
}
return returnItem;
}
}
}

View File

@@ -0,0 +1,74 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
//using bnhtrade.Core.Data.AmazonMWS.FBAInbound;
using FBAInboundServiceMWS;
//using bnhtrade.Core.Data.AmazonMWS;
using MarketplaceWebService;
namespace bnhtrade.Core.Data.AmazonMWS
{
public class Service : CredentialMws
{
private string merchantId;
private string marketplaceId; // Amazon.co.uk
private string accessKeyId;
private string secretAccessKey;
private string applicationName;
private string applicationVersion;
private string serviceURL;
// class constructor
public Service()
{
var cred = new AmazonMWS.CredentialMws();
this.merchantId = cred.merchantId;
this.marketplaceId = cred.marketPlaceId;
this.accessKeyId = cred.accessKeyId;
this.secretAccessKey = cred.secretAccessKey;
this.applicationName = cred.applicationName;
this.applicationVersion = cred.applicationVersion;
this.serviceURL = cred.serviceURL;
}
public MarketplaceWebService.MarketplaceWebService MarketPlaceWeb
{
get
{
MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
config.ServiceURL = serviceURL;
MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient(
accessKeyId,
secretAccessKey,
applicationName,
applicationVersion,
config);
return service;
}
}
public global::FBAInboundServiceMWS.FBAInboundServiceMWS FbaInbound
{
get
{
FBAInboundServiceMWSConfig config = new FBAInboundServiceMWSConfig();
config.ServiceURL = serviceURL;
global::FBAInboundServiceMWS.FBAInboundServiceMWS service = new FBAInboundServiceMWSClient(
accessKeyId,
secretAccessKey,
applicationName,
applicationVersion,
config);
return service;
}
}
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Data.Database
{
public class Connection
{
protected readonly string sqlConnectionString;
public Connection(string sqlConnectionString)
{
// setup sql parameters
if (sqlConnectionString.Length == 0)
{ throw new Exception("Zero length sql connectionstring passed"); }
this.sqlConnectionString = sqlConnectionString;
}
}
}

View File

@@ -0,0 +1,157 @@
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.FBAInbound
{
public class GetShipmentHeaderInfo : Connection
{
private List<string> shipmentIdList;
public GetShipmentHeaderInfo(string sqlConnectionString) : base(sqlConnectionString) { }
/// <summary>
/// Return active shipments only. Default is false.
/// </summary>
public bool ActiveShipments { get; set; } = false;
public bool IsSetActiveShipments { get { return true; } }
public bool IsSetShipmentIdList
{
get
{
if (ShipmentIdList == null || !ShipmentIdList.Any()) { return false; }
else { return true; }
}
}
/// <summary>
/// Filter results by Amazon's shipment Id.
/// </summary>
public List<string> ShipmentIdList
{
get { return shipmentIdList; }
set
{
if (value != null)
{
// clean list
shipmentIdList = new List<string>();
foreach (string item in value)
{
if (item.Length > 0)
{
shipmentIdList.Add(item);
}
}
if (!ShipmentIdList.Any())
{
shipmentIdList = null;
throw new Exception("Invalid shipment Id set");
}
}
}
}
/// <summary>
/// Retrives table primary key 'AmazonShipmentID' for tblAmazonShipment
/// </summary>
/// <param name="amazonShipmentId">Amazon's inbound FBA shipment Id.</param>
/// <returns>Primary key or -1 if match isn't found.</returns>
public List<Model.AmazonFBAInbound.ShipmentInfo> Execute()
{
// build the sql string
int countShipId = 0;
string sqlString = @"
SELECT
AmazonShipmentID
,ShipmentName
,ShipmentId
,CenterId
,ShipmentStatus
,LastUpdated
,IsClosed
FROM
tblAmazonShipment
WHERE
1 = 1";
if (ActiveShipments)
{
sqlString = sqlString + @"
AND IsClosed = 0";
}
var dicShipIdByParameterString = new Dictionary<string, string>();
if (IsSetShipmentIdList)
{
foreach (string item in ShipmentIdList)
{
countShipId = countShipId + 1;
string parameterString = "@shipmentId" + countShipId.ToString().PadLeft(6, '0');
dicShipIdByParameterString.Add(parameterString, item);
if (countShipId == 1)
{
sqlString = sqlString + @"
AND ( ShipmentId = " + parameterString;
}
else
{
sqlString = sqlString + @"
OR ShipmentId = " + parameterString;
}
}
if (countShipId > 0)
{
sqlString = sqlString + " )";
}
}
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(sqlString, conn))
{
// add shipId parameters
if (ShipmentIdList.Any())
{
foreach (var item in dicShipIdByParameterString)
{
cmd.Parameters.AddWithValue(item.Key, item.Value);
}
}
using (var reader = cmd.ExecuteReader())
{
if (!reader.HasRows)
{
// no records
return null;
}
var infoList = new List<Model.AmazonFBAInbound.ShipmentInfo>();
while (reader.Read())
{
var info = new Model.AmazonFBAInbound.ShipmentInfo();
int tablePK = reader.GetInt32(0);
info.ShipmentName = reader.GetString(1);
info.AmazonShipmentId = reader.GetString(2);
info.DestinationFulfillmentCenterId = reader.GetString(3);
info.ShipmentStatus = reader.GetString(4);
info.LastUpdatedUtc = reader.GetDateTime(5);
bool dbIsClosed = reader.GetBoolean(6);
// db consistancy check
if (dbIsClosed != info.ShipmentIsClosed)
{
throw new Exception("Data inconstitancy in database: check shipment IsClosed where AmazonShipmentID=" + tablePK);
}
// update cache
infoList.Add(info);
}
return infoList;
}
}
}
}
}
}

View File

@@ -0,0 +1,113 @@
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.FBAInbound
{
public class GetShipmentPrimaryKey : Connection
{
private bool enableCache = false;
private Dictionary<string, int> shipmentPKByAmazonShipmentIdDic;
private Dictionary<int, string> amazonShipmentIdByShipmentPKDic;
public GetShipmentPrimaryKey(string sqlConnectionString) : base(sqlConnectionString) { }
public bool CacheEnabled
{
get { return enableCache; }
set
{
if (value && enableCache == false)
{
shipmentPKByAmazonShipmentIdDic = new Dictionary<string, int>();
amazonShipmentIdByShipmentPKDic = new Dictionary<int, string>();
}
else
{
shipmentPKByAmazonShipmentIdDic = null;
amazonShipmentIdByShipmentPKDic = null;
}
}
}
private void ClearCache()
{
if (CacheEnabled)
{
shipmentPKByAmazonShipmentIdDic.Clear();
amazonShipmentIdByShipmentPKDic.Clear();
}
}
private void DeleteCachedShipmentPK(int shipmentPrimaryKey)
{
if (CacheEnabled)
{
if (amazonShipmentIdByShipmentPKDic.ContainsKey(shipmentPrimaryKey))
{
string amazonShipmentId = amazonShipmentIdByShipmentPKDic[shipmentPrimaryKey];
shipmentPKByAmazonShipmentIdDic.Remove(amazonShipmentId);
amazonShipmentIdByShipmentPKDic.Remove(shipmentPrimaryKey);
}
}
}
/// <summary>
/// Retrives table primary key 'AmazonShipmentID' for tblAmazonShipment
/// </summary>
/// <param name="amazonShipmentId">Amazon's inbound FBA shipment Id.</param>
/// <param name="forceDBQuery">Forces a database query when cache is enabled.</param>
/// <returns>Primary key or -1 if match isn't found.</returns>
public int ByAmazonShipmentId(string amazonShipmentId, bool forceDBQuery = false)
{
if (amazonShipmentId.Length < 5)
{
throw new Exception("Incorrect Amazon shipment if supplied '" + amazonShipmentId + "'");
}
// first, query class dictionary before sql call
if (CacheEnabled
&& forceDBQuery == false
&& shipmentPKByAmazonShipmentIdDic.ContainsKey(amazonShipmentId))
{
return shipmentPKByAmazonShipmentIdDic[amazonShipmentId];
}
int shipmentPK = -1;
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(@"
SELECT AmazonShipmentID
FROM tblAmazonShipment
WHERE (((tblAmazonShipment.ShipmentId)=@amazonShipmentId));
", conn))
{
cmd.Parameters.AddWithValue("@amazonShipmentId", amazonShipmentId);
object obj = cmd.ExecuteScalar();
if (obj == null || obj == DBNull.Value)
{
return shipmentPK;
}
else
{
shipmentPK = (int)obj;
}
}
}
UpdateCache(shipmentPK, amazonShipmentId);
return shipmentPK;
}
private void UpdateCache(int shipmentPK, string amazonShipmentId)
{
if (CacheEnabled)
{
DeleteCachedShipmentPK(shipmentPK);
shipmentPKByAmazonShipmentIdDic.Add(amazonShipmentId, shipmentPK);
amazonShipmentIdByShipmentPKDic.Add(shipmentPK, amazonShipmentId);
}
}
}
}

View File

@@ -0,0 +1,246 @@
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.FBAInbound
{
public class SetShipmentInfo : Connection
{
private GetShipmentPrimaryKey getPK;
private Data.Database.SKU.GetSKUId skuIdLoopkup;
public SetShipmentInfo(string sqlConnectionString) : base(sqlConnectionString) { }
private GetShipmentPrimaryKey GetPK
{
get
{
if (getPK == null)
{
getPK = new GetShipmentPrimaryKey(sqlConnectionString);
}
return getPK;
}
set
{
getPK = value;
}
}
private Data.Database.SKU.GetSKUId SkuIdLoopkup
{
get
{
if (skuIdLoopkup == null)
{
skuIdLoopkup = new SKU.GetSKUId(sqlConnectionString);
}
return skuIdLoopkup;
}
}
public void Excecute(Model.AmazonFBAInbound.ShipmentInfo info)
{
using (var scope = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
// input checks
if (!info.IsSetAll())
{
throw new Exception("Insurficent ShipmentInfo parameters.");
}
// get tablePK
int shipmentPK = GetPK.ByAmazonShipmentId(info.AmazonShipmentId);
// add or update shipment header info
if (shipmentPK == -1)
{
shipmentPK = InsertShipmentHeaderInfo(info);
}
else
{
UpdateShipmentHeaderInfo(info);
DeleteShipmentItems(shipmentPK);
}
// insert new shipment item info
foreach (var item in info.ShipmentItemInfoList)
{
int skuId = SkuIdLoopkup.BySKUNumber(item.SKUNumber);
using (SqlCommand cmd = new SqlCommand(@"
INSERT INTO tblAmazonShipmentItem (
AmazonShipmentID
,SkuID
,QuantityAllocated
,QuantityReceived
)
VALUES (
@amazonShipmentID
,@skuID
,@quantityAllocated
,@quantityReceived
)
", conn))
{
cmd.Parameters.AddWithValue("@amazonShipmentID", shipmentPK);
cmd.Parameters.AddWithValue("@skuID", skuId);
cmd.Parameters.AddWithValue("@quantityAllocated", item.QuantityAllocated);
cmd.Parameters.AddWithValue("@quantityReceived", item.QuantityReceived);
int effected = (int)cmd.ExecuteNonQuery();
if (effected == 0)
{
throw new Exception("Error, no tblAmazonShipment was not updated.");
}
}
}
}
scope.Complete();
}
}
public void ExcecuteByList(List<Model.AmazonFBAInbound.ShipmentInfo> infoList)
{
using (var scope = new TransactionScope())
{
foreach (var item in infoList)
{
Excecute(item);
}
scope.Complete();
}
}
private void DeleteShipmentItems(int shipmentId)
{
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(@"
DELETE FROM
tblAmazonShipmentItem
WHERE
AmazonShipmentId = @shipmentId
", conn))
{
cmd.Parameters.AddWithValue("@shipmentId", shipmentId);
cmd.ExecuteNonQuery();
}
}
}
private int InsertShipmentHeaderInfo(Model.AmazonFBAInbound.ShipmentInfo info)
{
if (!info.IsSetAll())
{
throw new Exception("Unsuficent properties set in Shipment Header Info.");
}
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
if (GetPK.ByAmazonShipmentId(info.AmazonShipmentId) != -1)
{
throw new Exception("Shipment insert failed, shipment with same Amazon Id already exists.");
}
// get next shipment Number in sequence and create shipment name
int sequenceNumber;
using (SqlCommand cmd = new SqlCommand(@"
SELECT NEXT VALUE FOR dbo.ShipmentCountSequence AS SequenceNumber
", conn))
{
sequenceNumber = (int)cmd.ExecuteScalar();
}
// info.ShipmentName = "FBA_Shipment_" + sequenceNumber.ToString().PadLeft(4, '0') + "_" + info.DestinationFulfillmentCenterId;
// make the insert
using (SqlCommand cmd = new SqlCommand(@"
INSERT INTO tblAmazonShipment (
AmazonShipmentCount
,ShipmentName
,ShipmentId
,CenterId
,ShipmentStatus
,LastUpdated
,IsClosed
)
OUTPUT INSERTED.AmazonShipmentID
VALUES (
@amazonShipmentCount
,@shipmentName
,@shipmentId
,@centerId
,@shipmentStatus
,@lastUpdated
,@isClosed
)
", conn))
{
cmd.Parameters.AddWithValue("@amazonShipmentCount", sequenceNumber);
cmd.Parameters.AddWithValue("@shipmentName", info.ShipmentName);
cmd.Parameters.AddWithValue("@shipmentId", info.AmazonShipmentId);
cmd.Parameters.AddWithValue("@centerId", info.DestinationFulfillmentCenterId);
cmd.Parameters.AddWithValue("@shipmentStatus", info.ShipmentStatus);
cmd.Parameters.AddWithValue("@lastUpdated", info.LastUpdatedUtc);
cmd.Parameters.AddWithValue("@isClosed", info.ShipmentIsClosed);
int tablePk = (int)cmd.ExecuteScalar();
// update cache and return
return tablePk;
}
}
}
private void UpdateShipmentHeaderInfo(Model.AmazonFBAInbound.ShipmentInfo info)
{
int tablePK = GetPK.ByAmazonShipmentId(info.AmazonShipmentId);
if (tablePK == -1)
{
throw new Exception("Shipment insert failed, shipment with same Amazon Id already exists.");
}
// make the update
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(@"
UPDATE tblAmazonShipment
SET
ShipmentName = @shipmentName
,ShipmentStatus = @shipmentStatus
,LastUpdated = @lastUpdated
,IsClosed = @isClosed
WHERE
AmazonShipmentID = @tablePK
", conn))
{
cmd.Parameters.AddWithValue("@shipmentName", info.ShipmentName);
cmd.Parameters.AddWithValue("@shipmentStatus", info.ShipmentStatus);
cmd.Parameters.AddWithValue("@lastUpdated", info.LastUpdatedUtc);
cmd.Parameters.AddWithValue("@isClosed", info.ShipmentIsClosed);
cmd.Parameters.AddWithValue("@tablePK", tablePK);
int count = cmd.ExecuteNonQuery();
if (count == 0)
{
throw new Exception("No records updated");
}
}
}
}
}
}

View File

@@ -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;
}
}
}

View File

@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Logic.AmazonFBAInbound
{
public class ShipmentSkuAddByFNSKU
{
public string fnsku { get; private set; }
public int skuId { get; private set; }
public string skuProductTitle { get; private set; }
public string fbaCenterId { get; private set; }
public string fbaShipmentId { get; private set; }
public bool errorFlag { get; private set; } = false;
public string errorMessage { get; private set; } = "";
// add method here
public ShipmentSkuAddByFNSKU Request(string fnsku)
{
var repsonce = new ShipmentSkuAddByFNSKU();
// checks
if (fnsku.Length != 10)
{
throw new Exception("Incorrect FNSKU supplied.");
}
repsonce.fnsku = fnsku;
return repsonce;
}
}
}

View File

@@ -0,0 +1,113 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;
using bnhtrade.Core.Data;
namespace bnhtrade.Core.Logic.AmazonFBAInbound
{
public class UpdateDatabaseShipmentInfo
{
private string sqlConnectionString;
private readonly string logDateTimeId = "FbaInboundShipmentNewCheck";
public int TotalUpdated { get; private set; } = 0;
public UpdateDatabaseShipmentInfo(string sqlConnectionString)
{
this.sqlConnectionString = sqlConnectionString;
}
public void GetNew()
{
TotalUpdated = 0;
// get time frame to check
DateTime dateTimeBefore = new Data.AmazonMWS.CurrentDateTime().GetUtc();
DateTime dateTimeAfter = new Data.Database.Log.DateTimeLog(sqlConnectionString).GetDateTimeUtc(logDateTimeId);
//var objGetUtc = new Data.AmazonMWS.CurrentDateTime();
//DateTime dateTimeBefore = objGetUtc.GetUtc();
//var objDateTimeCheck = new Data.Database.Log.DateTimeLog(sqlConnectionString);
//DateTime dateTimeAfter = objDateTimeCheck.GetDateTimeUtc(logDateTimeId);
//
var shipmentRequest = new Data.AmazonMWS.FBAInbound.ListInboundShipments();
shipmentRequest.LastUpdatedAfter = dateTimeAfter.AddDays(-14);
shipmentRequest.LastUpdatedBefore = dateTimeBefore;
List<Model.AmazonFBAInbound.ShipmentInfo> shipmentInfoList = shipmentRequest.GetShipmentInfo();
// build list of shipments returned from mws
var dicShipExistsInDb = new Dictionary<string, bool>();
foreach (var item in shipmentInfoList)
{
dicShipExistsInDb.Add(item.AmazonShipmentId, false);
}
// build list of shipmentId that do not exist in database
int complete = 0;
using (TransactionScope scope = new TransactionScope())
{
List<Model.AmazonFBAInbound.ShipmentInfo> newShipmentInfoList = null;
if (dicShipExistsInDb.Any())
{
var newShipmentId = new List<string>();
// query db for shipment header info
var requestHeader = new Data.Database.FBAInbound.GetShipmentHeaderInfo(sqlConnectionString);
requestHeader.ShipmentIdList = dicShipExistsInDb.Keys.ToList();
var resultHeader = requestHeader.Execute();
// compare db and mws result
foreach (var item in resultHeader)
{
dicShipExistsInDb[item.AmazonShipmentId] = true;
}
foreach (var item in dicShipExistsInDb)
{
if (item.Value == false)
{
newShipmentId.Add(item.Key);
}
}
// query mws for new shipment info
if (newShipmentId.Any())
{
shipmentRequest.ShipmentIdList = newShipmentId;
newShipmentInfoList = shipmentRequest.GetShipmentInfo();
foreach (var item in newShipmentInfoList)
{
var shipmentItemInfoRequest = new Data.AmazonMWS.FBAInbound.ListInboundShipmentItems();
item.ShipmentItemInfoList = shipmentItemInfoRequest.GetByAmazonShipmentId(item.AmazonShipmentId);
}
}
// write to db
if (newShipmentInfoList != null)
{
foreach (var item in newShipmentInfoList)
{
// add the update date
item.LastUpdatedUtc = dateTimeBefore;
// write to db
var dbWrite = new Data.Database.FBAInbound.SetShipmentInfo(sqlConnectionString);
dbWrite.Excecute(item);
complete = complete + 1;
}
}
}
// update datetime log
new Data.Database.Log.DateTimeLog(sqlConnectionString).SetDateTimeUtc(logDateTimeId, dateTimeBefore);
//objDateTimeCheck.SetDateTimeUtc(logDateTimeId, dateTimeBefore);
scope.Complete();
}
TotalUpdated = complete;
}
}
}

View File

@@ -0,0 +1,121 @@
using System;
using System.Data.SqlClient;
using System.Transactions;
namespace bnhtrade.Core.Logic.Sku
{
class GetSkuIdByType
{
// used for retriving SKU that matched parameters, creates new if required, returns 0 if not found
public static int Request(string sqlConnectionString, int productId, int conditionId, int accountTaxCodeId, bool noMatchInsertNew)
{
using (TransactionScope scope = new TransactionScope())
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
// look for existing entry
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)
{
return (int)obj;
}
}
// value check insert bool
if (noMatchInsertNew == false)
{
return 0;
}
else
{
// get this far, check tax code id is a valid for SKU
using (SqlCommand cmd = new SqlCommand(@"
SELECT tblAccountTaxCode.InvoiceSales
FROM tblAccountTaxCode
WHERE (((tblAccountTaxCode.AccountTaxCodeID)=@accountTaxCodeId));
", conn))
{
cmd.Parameters.AddWithValue("@accountTaxCodeId", accountTaxCodeId);
object obj = cmd.ExecuteScalar();
if (obj == null)
{
throw new Exception("AccountTaxCodeID=" + accountTaxCodeId + " doesn't exist!");
}
else
{
bool result = (bool)obj;
if (result == 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;
}
}
}
}
}

View File

@@ -0,0 +1,179 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Model.AmazonFBAInbound
{
public class ShipmentInfo
{
private string destinationFulfillmentCenterId;
private List<ShipmentItemInfo> shipmentItemInfoList;
private string shipmentStatus;
private DateTime lastUpdatedUtc;
private Dictionary<string, bool> shipmentStatusToIsClosed;
public string AmazonShipmentId { get; set; }
public string ShipmentName { get; set; }
public string DestinationFulfillmentCenterId
{
get { return destinationFulfillmentCenterId; }
set
{
if (value.Length != 4)
{
throw new Exception("incorrect Fulfillment Center Id");
}
else
{
destinationFulfillmentCenterId = value;
}
}
}
public string ShipmentStatus
{
get
{
return shipmentStatus;
}
set
{
string status = value.ToUpper();
if (!shipmentStatusToIsClosed.ContainsKey(status))
{
throw new Exception("Invalid shipment status '" + status + "' parameter set as per Amazon MWS definitions.");
}
shipmentStatus = status;
}
}
public DateTime LastUpdatedUtc
{
get
{
return lastUpdatedUtc;
}
set
{
lastUpdatedUtc = DateTime.SpecifyKind(value, DateTimeKind.Utc);
}
}
public bool ShipmentIsClosed
{
get
{
if (IsSetShipmentStatus())
{
return shipmentStatusToIsClosed[shipmentStatus];
}
else
{
return false;
}
}
}
public List<ShipmentItemInfo> ShipmentItemInfoList
{
get { return shipmentItemInfoList; }
set
{
var skuCheck = new Dictionary<string, string>();
var fnskuCheck = new Dictionary<string, string>();
foreach (var item in value)
{
if (!item.IsSetAll())
{ throw new Exception("Infomation missing from Shipment Item list"); }
if (item.AmazonShipmentId != AmazonShipmentId)
{ throw new Exception("Amazon shipment id in item list does not match header information."); }
if (skuCheck.ContainsKey(item.SKUNumber))
{ throw new Exception("Duplicated SKU number in item list."); }
skuCheck.Add(item.SKUNumber, "0000");
if (fnskuCheck.ContainsKey(item.AmazonFNSKU))
{ throw new Exception("Duplicated SKU number in item list."); }
fnskuCheck.Add(item.AmazonFNSKU, "0000");
if (item.QuantityAllocated < 0 || item.QuantityReceived < 0)
{ throw new Exception("Quantites cannot be less than zero."); }
if ((item.QuantityAllocated + item.QuantityReceived ) < 1)
{ throw new Exception("Quantites cannot be zero"); }
}
shipmentItemInfoList = value;
}
}
public bool IsSetAll()
{
if (IsSetAllHeaderInfo() && IsSetListShipmentItemInfo())
{
return true;
}
else
{
return false;
}
}
public bool IsSetAllHeaderInfo()
{
if (IsSetAmazonShipmentId()
&& IsSetShipmentName()
&& IsSetDestinationFulfillmentCenterId()
&& IsSetShipmentStatus()
&& IsSetLastUpdated()
&& IsSetShipmentIsClosed())
{
return true;
}
else
{
return false;
}
}
public bool IsSetAmazonShipmentId()
{
return AmazonShipmentId != null;
}
public bool IsSetShipmentName()
{
return ShipmentName != null;
}
public bool IsSetDestinationFulfillmentCenterId()
{
return DestinationFulfillmentCenterId != null;
}
public bool IsSetLastUpdated()
{
return LastUpdatedUtc != default(DateTime);
}
public bool IsSetListShipmentItemInfo()
{
return ShipmentItemInfoList != null;
}
public bool IsSetShipmentIsClosed()
{
return ShipmentStatus != null;
}
public bool IsSetShipmentStatus()
{
return ShipmentStatus != null;
}
public ShipmentInfo()
{
shipmentStatusToIsClosed = new Dictionary<string, bool>();
shipmentStatusToIsClosed.Add("WORKING", false);
shipmentStatusToIsClosed.Add("SHIPPED", false);
shipmentStatusToIsClosed.Add("IN_TRANSIT", false);
shipmentStatusToIsClosed.Add("DELIVERED", false);
shipmentStatusToIsClosed.Add("CHECKED_IN", false);
shipmentStatusToIsClosed.Add("RECEIVING", false);
shipmentStatusToIsClosed.Add("CLOSED", true);
shipmentStatusToIsClosed.Add("CANCELLED", true);
shipmentStatusToIsClosed.Add("DELETED", true);
shipmentStatusToIsClosed.Add("ERROR", false);
}
}
}

View File

@@ -0,0 +1,83 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Model.AmazonFBAInbound
{
public class ShipmentItemInfo
{
private int quantityAllocated;
private int quantityReceived;
private bool isSetQuantityAllocated;
private bool isSetQuantityReceived;
/// <summary>
/// Gets and sets the AmazonShipmentId property.
/// </summary>
public string AmazonShipmentId { get; set; }
/// <summary>
/// Gets and sets the SKUNumber property.
/// </summary>
public string SKUNumber { get; set; }
/// <summary>
/// Gets and sets the FulfillmentNetworkSKU property.
/// </summary>
public string AmazonFNSKU { get; set; }
/// <summary>
/// Gets and sets the QuantityAllocated property.
/// </summary>
public int QuantityAllocated
{
get { return quantityAllocated; }
set { quantityAllocated = value; isSetQuantityAllocated = true; }
}
/// <summary>
/// Gets and sets the QuantityReceived property.
/// </summary>
public int QuantityReceived
{
get { return quantityReceived; }
set { quantityReceived = value; isSetQuantityReceived = true; }
}
public bool IsSetAll()
{
if (IsSetAmazonShipmentId()
&& IsSetSKUNumber()
&& IsSetFulfillmentNetworkSKU()
&& IsSetQuantityAllocated()
&& IsSetQuantityReceived()
)
{
return true;
}
else
{
return false;
}
}
public bool IsSetAmazonShipmentId()
{
return AmazonShipmentId != null;
}
public bool IsSetSKUNumber()
{
return SKUNumber != null;
}
public bool IsSetFulfillmentNetworkSKU()
{
return AmazonFNSKU != null;
}
public bool IsSetQuantityAllocated()
{
return isSetQuantityAllocated;
}
public bool IsSetQuantityReceived()
{
return isSetQuantityReceived;
}
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Model.SKU
{
class SKUInfo
{
public string SkuNumber { get; set; }
public string AmazonFNSKU { get; set; }
public bool IsActive { get; set; }
}
}

View File

@@ -19,9 +19,12 @@ using MarketplaceWebServiceProducts.Model;
using MarketplaceWebServiceProducts; using MarketplaceWebServiceProducts;
using System.Data.SqlTypes; using System.Data.SqlTypes;
using System.Security.Cryptography; using System.Security.Cryptography;
using Core.AmazonMWS; using bnhtrade.Core.AmazonAPI;
using bnhtrade.Core.Order;
using bnhtrade.Core.Data.AmazonMWS;
using bnhtrade.Core.Logic.Sku;
namespace Core namespace bnhtrade.Core
{ {
namespace Database namespace Database
{ {
@@ -2064,7 +2067,7 @@ namespace Core
} }
// get/set an skuId // get/set an skuId
int skuId = Core.Sku.SkuQuery.WIP_SkuGetSet(sqlConnectionString, productId, conditionId, accountTaxCodeId, true); int skuId = Logic.Sku.GetSkuIdByType.Request(sqlConnectionString, productId, conditionId, accountTaxCodeId, true);
// add the entry to the stock table (minus stockJournalId) // add the entry to the stock table (minus stockJournalId)
int stockId = 0; int stockId = 0;
@@ -4232,7 +4235,8 @@ namespace Core
transactionDate = DateTime.SpecifyKind(transactionDate, DateTimeKind.Utc); transactionDate = DateTime.SpecifyKind(transactionDate, DateTimeKind.Utc);
int importTableId = reader.GetInt32(index01); int importTableId = reader.GetInt32(index01);
string sku = reader.GetString(index03); string sku = reader.GetString(index03);
int skuId = Sku.SkuQuery.SkuLookupId(sqlConnectionString, sku, true); var skuData = new Data.Database.SKU.GetSKUId(sqlConnectionString);
int skuId = skuData.BySKUNumber(sku, true);
if (skuId < 1) if (skuId < 1)
{ {
transposeSkip = transposeSkip + 1; transposeSkip = transposeSkip + 1;
@@ -4428,15 +4432,16 @@ namespace Core
transactionDate = DateTime.SpecifyKind(transactionDate, DateTimeKind.Utc); transactionDate = DateTime.SpecifyKind(transactionDate, DateTimeKind.Utc);
int importTableId = reader.GetInt32(index01); int importTableId = reader.GetInt32(index01);
string sku = reader.GetString(index03); string sku = reader.GetString(index03);
int skuId = Sku.SkuQuery.SkuLookupId(sqlConnectionString, sku, true); var skuData = new Data.Database.SKU.GetSKUId(sqlConnectionString);
int skuId = skuData.BySKUNumber(sku, true);
if (skuId < 1) if (skuId < 1)
{ transposeSkip = transposeSkip + 1; continue; } { transposeSkip = transposeSkip + 1; continue; }
int quantity = reader.GetInt32(index04); int quantity = reader.GetInt32(index04);
int orderChannelId = Order.OrderQuery.GetSaleChannelIdByName(sqlConnectionString, reader.GetString(index05), true); int orderChannelId = OrderQuery.GetSaleChannelIdByName(sqlConnectionString, reader.GetString(index05), true);
string amazonOrderId = reader.GetString(index06); string amazonOrderId = reader.GetString(index06);
int orderId = Order.OrderQuery.GetOrderIdBySaleChannelRef(sqlConnectionString, orderChannelId, amazonOrderId, true); int orderId = OrderQuery.GetOrderIdBySaleChannelRef(sqlConnectionString, orderChannelId, amazonOrderId, true);
string amazonOrderItemId = reader.GetString(index07); string amazonOrderItemId = reader.GetString(index07);
int orderItemId = Order.OrderQuery.GetOrderItemIdBySaleChannelRef(sqlConnectionString, orderId, amazonOrderItemId, true); int orderItemId = OrderQuery.GetOrderItemIdBySaleChannelRef(sqlConnectionString, orderId, amazonOrderItemId, true);
if (quantity > 0 && transactionTypeId == 0) if (quantity > 0 && transactionTypeId == 0)
{ transposeSkip = transposeSkip + 1; continue; } { transposeSkip = transposeSkip + 1; continue; }
@@ -4520,13 +4525,13 @@ namespace Core
string sku = reader.GetString(index04); string sku = reader.GetString(index04);
// get orderchannelId // get orderchannelId
int salesChannelId = Order.OrderQuery.GetSaleChannelIdByName(sqlConnectionString, salesChannel); int salesChannelId = OrderQuery.GetSaleChannelIdByName(sqlConnectionString, salesChannel);
// get/set order ref // get/set order ref
int orderId = Order.OrderQuery.GetOrderIdBySaleChannelRef(sqlConnectionString, salesChannelId, amazonOrderId, true); int orderId = OrderQuery.GetOrderIdBySaleChannelRef(sqlConnectionString, salesChannelId, amazonOrderId, true);
// get/set order item ref // get/set order item ref
int orderItemId = Order.OrderQuery.GetOrderItemIdBySaleChannelRef(sqlConnectionString, orderId, amazonOrderItemId, true); int orderItemId = OrderQuery.GetOrderItemIdBySaleChannelRef(sqlConnectionString, orderId, amazonOrderItemId, true);
// //
} }
Console.Write("\r"); Console.Write("\r");
@@ -4611,8 +4616,8 @@ namespace Core
string sku = reader.GetString(index03); string sku = reader.GetString(index03);
int quantity = reader.GetInt32(index04); int quantity = reader.GetInt32(index04);
string reference = reader.GetString(index05); string reference = reader.GetString(index05);
int orderChannelId = Order.OrderQuery.GetSaleChannelIdByAmazonOrderId(sqlConnectionString, reference); int orderChannelId = OrderQuery.GetSaleChannelIdByAmazonOrderId(sqlConnectionString, reference);
int orderId = Order.OrderQuery.GetOrderIdBySaleChannelRef(sqlConnectionString, orderChannelId, reference, true); int orderId = OrderQuery.GetOrderIdBySaleChannelRef(sqlConnectionString, orderChannelId, reference, true);
string detail = string detail =
"Amazon Assessment: " + disposition + Environment.NewLine + "Amazon Assessment: " + disposition + Environment.NewLine +
"Status: " + reader.GetString(index07) + Environment.NewLine + "Status: " + reader.GetString(index07) + Environment.NewLine +
@@ -4620,7 +4625,8 @@ namespace Core
if (!reader.IsDBNull(index09)) if (!reader.IsDBNull(index09))
{ detail = detail + Environment.NewLine + "Customer Comments: " + reader.GetString(index09); } { detail = detail + Environment.NewLine + "Customer Comments: " + reader.GetString(index09); }
int skuId = Sku.SkuQuery.SkuLookupId(sqlConnectionString, sku, true); var skuData = new Data.Database.SKU.GetSKUId(sqlConnectionString);
int skuId = skuData.BySKUNumber(sku, true);
if (skuId < 1) if (skuId < 1)
{ transposeSkip = transposeSkip + 1; continue; } { transposeSkip = transposeSkip + 1; continue; }
@@ -4776,7 +4782,8 @@ namespace Core
if (quantity < 0) { quantity = quantity * -1; } if (quantity < 0) { quantity = quantity * -1; }
string reference = reader.GetString(index05); string reference = reader.GetString(index05);
int skuId = Sku.SkuQuery.SkuLookupId(sqlConnectionString, sku, true); var skuData = new Data.Database.SKU.GetSKUId(sqlConnectionString);
int skuId = skuData.BySKUNumber(sku, true);
if (skuId < 1) { transposeSkip = transposeSkip + 1; continue; } if (skuId < 1) { transposeSkip = transposeSkip + 1; continue; }
using (TransactionScope scope = new TransactionScope()) using (TransactionScope scope = new TransactionScope())
@@ -5120,7 +5127,8 @@ namespace Core
string reference = reader.GetString(index03); string reference = reader.GetString(index03);
int quantityTotal = reader.GetInt32(index06); int quantityTotal = reader.GetInt32(index06);
int skuId = Sku.SkuQuery.SkuLookupId(sqlConnectionString, reader.GetString(index05), true); var skuData = new Data.Database.SKU.GetSKUId(sqlConnectionString);
int skuId = skuData.BySKUNumber(sku, true);
if (skuId < 1) if (skuId < 1)
{ {
transposeSkip = transposeSkip + 1; transposeSkip = transposeSkip + 1;
@@ -5251,7 +5259,10 @@ namespace Core
if (quantity == 0) if (quantity == 0)
{ transactionTypeId = -1; } { transactionTypeId = -1; }
else else
{ skuId = Sku.SkuQuery.SkuLookupId(sqlConnectionString, sku, true); } {
var skuData = new Data.Database.SKU.GetSKUId(sqlConnectionString);
skuId = skuData.BySKUNumber(sku, true);
}
if (skuId < 1) if (skuId < 1)
{ transposeSkip = transposeSkip + 1; continue; } { transposeSkip = transposeSkip + 1; continue; }
@@ -5656,171 +5667,7 @@ namespace Core
} }
} }
namespace Sku
{
public class SkuQuery
{
public static int SkuLookupId(string sqlConnectionString, string sku, bool enableLegacy = false)
{
// if enableLegacy = true, function will attempt to lookup value by sku count
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
using (SqlCommand cmd = new SqlCommand(@"
SELECT skuSkuID FROM tblSku WHERE skuSkuNumber=@sku;
", conn))
{
cmd.Parameters.AddWithValue("@sku", sku);
object obj = cmd.ExecuteScalar();
if (!(obj == null))
{
return Convert.ToInt32(obj);
}
}
// if that didn't work, lookup buy sku count
if (sku.Length == 6 & enableLegacy == true)
{
int skucount;
bool okay = int.TryParse(sku, 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))
{
return Convert.ToInt32(obj);
}
else
{
return -1;
}
}
}
}
}
return -1;
}
// used for retriving SKU that matched parameters, creates new if required, returns 0 if not found
public static int WIP_SkuGetSet(string sqlConnectionString, int productId, int conditionId, int accountTaxCodeId, bool noMatchInsertNew)
{
using (TransactionScope scope = new TransactionScope())
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
conn.Open();
// look for existing entry
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)
{
return (int)obj;
}
}
// value check insert bool
if (noMatchInsertNew == false)
{
return 0;
}
else
{
// get this far, check tax code id is a valid for SKU
using (SqlCommand cmd = new SqlCommand(@"
SELECT tblAccountTaxCode.InvoiceSales
FROM tblAccountTaxCode
WHERE (((tblAccountTaxCode.AccountTaxCodeID)=@accountTaxCodeId));
", conn))
{
cmd.Parameters.AddWithValue("@accountTaxCodeId", accountTaxCodeId);
object obj = cmd.ExecuteScalar();
if (obj == null)
{
throw new Exception("AccountTaxCodeID=" + accountTaxCodeId + " doesn't exist!");
}
else
{
bool result = (bool)obj;
if (result == 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;
}
}
}
}
}
namespace Inventory namespace Inventory
{ {
public class InventoryPricing public class InventoryPricing
@@ -6421,24 +6268,13 @@ namespace Core
} }
} }
namespace AmazonMWS namespace AmazonAPI
{ {
public class AmazonMwsCredential
{
public string merchantId { get { return "A3RUYNKLWWM5KW"; } }
public string marketPlaceId { get { return "A1F83G8C2ARO7P"; } } // Amazon.co.uk
public string accessKeyId { get { return "AKIAJU45WSYVINEN45UA"; } }
public string secretAccessKey { get { return "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"; } }
public string applicationName { get { return "bnhtrade Database Client"; } }
public string applicationVersion { get { return "0.1"; } }
public string serviceURL { get { return "https://mws.amazonservices.co.uk"; } }
}
public class AmazonMwsService public class AmazonMwsService
{ {
public MarketplaceWebService.MarketplaceWebService GetAmazonMwsService() public MarketplaceWebService.MarketplaceWebService GetAmazonMwsService()
{ {
AmazonMwsCredential cred = new AmazonMwsCredential(); CredentialMws cred = new CredentialMws();
MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig(); MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient( MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient(
@@ -6457,7 +6293,7 @@ namespace Core
{ {
public MarketplaceWebServiceProducts.MarketplaceWebServiceProducts GetAmazonMwsServiceProduct() public MarketplaceWebServiceProducts.MarketplaceWebServiceProducts GetAmazonMwsServiceProduct()
{ {
AmazonMwsCredential cred = new AmazonMwsCredential(); CredentialMws cred = new CredentialMws();
MarketplaceWebServiceProductsConfig config = new MarketplaceWebServiceProductsConfig(); MarketplaceWebServiceProductsConfig config = new MarketplaceWebServiceProductsConfig();
config.ServiceURL = cred.serviceURL; config.ServiceURL = cred.serviceURL;
@@ -6478,7 +6314,7 @@ namespace Core
/// <param name="itemList"></param> /// <param name="itemList"></param>
public List<FeesEstimateResult> WIP_GetProductEstimateFee( FeesEstimateRequestList requestList) public List<FeesEstimateResult> WIP_GetProductEstimateFee( FeesEstimateRequestList requestList)
{ {
AmazonMwsCredential cred = new AmazonMwsCredential(); CredentialMws cred = new CredentialMws();
AmazonMwsProduct mwsProduct = new AmazonMwsProduct(); AmazonMwsProduct mwsProduct = new AmazonMwsProduct();
MarketplaceWebServiceProducts.MarketplaceWebServiceProducts service = mwsProduct.GetAmazonMwsServiceProduct(); MarketplaceWebServiceProducts.MarketplaceWebServiceProducts service = mwsProduct.GetAmazonMwsServiceProduct();
@@ -6549,30 +6385,46 @@ namespace Core
} }
public class AmazonReport public class AmazonReport
{ {
string merchantId = "A3RUYNKLWWM5KW"; private string merchantId;
string marketplaceId = "A1F83G8C2ARO7P"; // Amazon.co.uk //private string marketplaceId; // Amazon.co.uk
string accessKeyId = "AKIAJU45WSYVINEN45UA"; //private string accessKeyId;
string secretAccessKey = "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"; //private string secretAccessKey;
string applicationName = "AmazonApiApp"; //private string applicationName;
string applicationVersion = "0.1"; //private string applicationVersion;
string serviceURL = "https://mws.amazonservices.co.uk"; //private string serviceURL;
public MarketplaceWebService.MarketplaceWebService GetMwsService()
// class constructor
public AmazonReport()
{ {
MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig(); CredentialMws cred = new CredentialMws();
MarketplaceWebService.MarketplaceWebService service = new MarketplaceWebServiceClient( this.merchantId = cred.merchantId;
accessKeyId, //this.marketplaceId = cred.marketPlaceId;
secretAccessKey, //this.accessKeyId = cred.accessKeyId;
applicationName, //this.secretAccessKey = cred.secretAccessKey;
applicationVersion, //this.applicationName = cred.applicationName;
config); //this.applicationVersion = cred.applicationVersion;
//this.serviceURL = cred.serviceURL;
config.ServiceURL = serviceURL;
return service;
} }
//public MarketplaceWebService.MarketplaceWebService GetMwsClient()
//{
// MarketplaceWebServiceConfig config = new MarketplaceWebServiceConfig();
// MarketplaceWebService.MarketplaceWebService client = new MarketplaceWebServiceClient(
// accessKeyId,
// secretAccessKey,
// applicationName,
// applicationVersion,
// config);
// config.ServiceURL = serviceURL;
// return client;
//}
public List<ReportInfo> GetMwsReportList(GetReportListRequest requestList) public List<ReportInfo> GetMwsReportList(GetReportListRequest requestList)
{ {
MarketplaceWebService.MarketplaceWebService service = GetMwsService(); var service = new Data.AmazonMWS.Service().MarketPlaceWeb;
//define the list //define the list
GetReportListResult getReportListResult = new GetReportListResult(); GetReportListResult getReportListResult = new GetReportListResult();
@@ -6613,11 +6465,12 @@ namespace Core
} while (true); } while (true);
} }
public string GetMwsReportById(string reportId) public string GetMwsReportById(string reportId)
{ {
// retrives report by reportId, saves to disk, and returns filepath // retrives report by reportId, saves to disk, and returns filepath
MarketplaceWebService.MarketplaceWebService service = GetMwsService(); var service = new Service().MarketPlaceWeb;
string filePath = MiscFunction.GetTempFilePath(reportId + ".txt"); string filePath = MiscFunction.GetTempFilePath(reportId + ".txt");
@@ -6669,12 +6522,13 @@ namespace Core
} while (true); } while (true);
return ""; return "";
} }
public string GetMwsReportByRequest(RequestReportRequest requestReport) public string GetMwsReportByRequest(RequestReportRequest requestReport)
{ {
try try
{ {
string targetRptType = requestReport.ReportType.ToString(); string targetRptType = requestReport.ReportType.ToString();
MarketplaceWebService.MarketplaceWebService service = GetMwsService(); var service = new Service().MarketPlaceWeb;
string status; string status;
RequestReportResponse requestResponse = new RequestReportResponse(); RequestReportResponse requestResponse = new RequestReportResponse();
@@ -6811,6 +6665,7 @@ namespace Core
return ""; return "";
} }
} }
public List<string> GetMwsReportByPeriod(string mwsReportEnum, DateTime startTime, DateTime endTime, int maxReportCount = 12, int reportMaxPeriod = 30) public List<string> GetMwsReportByPeriod(string mwsReportEnum, DateTime startTime, DateTime endTime, int maxReportCount = 12, int reportMaxPeriod = 30)
{ {
// method downloads reports and returns a list of filePaths // method downloads reports and returns a list of filePaths
@@ -6902,9 +6757,10 @@ namespace Core
return reportIdList; return reportIdList;
} }
public bool SetMwsReportAcknowledgement(string reportId, bool acknowledged = true) public bool SetMwsReportAcknowledgement(string reportId, bool acknowledged = true)
{ {
MarketplaceWebService.MarketplaceWebService service = GetMwsService(); var service = new Service().MarketPlaceWeb;
do do
{ {
@@ -6957,6 +6813,7 @@ namespace Core
} while (true); } while (true);
return false; return false;
} }
public bool ImportReportSettlementData(string sqlConnectionString, string filePath) public bool ImportReportSettlementData(string sqlConnectionString, string filePath)
{ {
try try
@@ -7224,6 +7081,7 @@ namespace Core
} }
return true; return true;
} }
public bool ImportReportFbaInventoryReceipt(string sqlConnectionString, string filePath, DateTime startDate) public bool ImportReportFbaInventoryReceipt(string sqlConnectionString, string filePath, DateTime startDate)
{ {
SqlConnection sqlConn; SqlConnection sqlConn;
@@ -9543,7 +9401,7 @@ namespace Core
} }
else else
{ {
Console.WriteLine("\r[" + DateTime.Now.ToString("HH:mm:ss") + "] " + consoleText); Console.Write("\r[" + DateTime.Now.ToString("HH:mm:ss") + "] " + consoleText);
} }
} }
public static string GetTempFilePath(string fileName) public static string GetTempFilePath(string fileName)

View File

@@ -8,11 +8,11 @@
// </auto-generated> // </auto-generated>
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
namespace Core.Properties { namespace bnhtrade.Core.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.6.0.0")] [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));

View File

@@ -1,40 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Runtime.InteropServices;
namespace DatabaseConnection
{
//[ComVisible(true)]
//[Guid("8bebe939-7a73-4ba3-877b-50cd2a7e4586")]
//[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface bnhtradeDbInterface
{
SqlConnection Connection(string DataSource, string InitialCatalog, string UserId, string Password, bool PersistSecurityInfo = true, bool MultipleActiveResultSets = true);
}
//[ComVisible(true)]
//[Guid("b0e29c9e-d353-4d3a-83dd-5278b520af54")]
//[ClassInterface(ClassInterfaceType.None)]
////[ProgId("MyNameSpace.Criteria")]
public class bnhtradeDb : bnhtradeDbInterface
{
public SqlConnection Connection(string DataSource, string InitialCatalog, string UserId, string Password, bool PersistSecurityInfo = true, bool MultipleActiveResultSets = true)
{
if (InitialCatalog == "" || DataSource == "" || UserId == "" || Password == "")
{
throw new Exception("Insuficent info supplied for sql connection string");
}
string connString =
"Data Source=" + DataSource + ";Initial Catalog=" + InitialCatalog + ";Persist Security Info=" + PersistSecurityInfo.ToString() + ";" +
"User ID=" + UserId + ";Password=" + Password + ";MultipleActiveResultSets=" + MultipleActiveResultSets.ToString() + "";
SqlConnection sqlConn = new SqlConnection(connString);
return sqlConn;
}
}
}

View File

@@ -0,0 +1,83 @@
using FBAInboundServiceMWS.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Test
{
public class InboundShipmentInfo
{
private string sqlConnectionString;
public InboundShipmentInfo(string sqlConnectionString)
{
this.sqlConnectionString = sqlConnectionString;
}
public void SetDatabase()
{
var info = new Model.AmazonFBAInbound.ShipmentInfo();
info.AmazonShipmentId = "BOBBIE2";
info.DestinationFulfillmentCenterId = "HODG";
info.LastUpdatedUtc = DateTime.UtcNow;
info.ShipmentName = "the one";
info.ShipmentStatus = "WORKING";
bool all = info.IsSetAll();
bool allHead = info.IsSetAllHeaderInfo();
var itemInfoList = new List<Model.AmazonFBAInbound.ShipmentItemInfo>();
var itemInfo01 = new Model.AmazonFBAInbound.ShipmentItemInfo();
itemInfo01.AmazonFNSKU = "Z0000000";
itemInfo01.AmazonShipmentId = "BOBBIE2";
itemInfo01.QuantityReceived = 4;
itemInfo01.QuantityAllocated = 2;
itemInfo01.SKUNumber = "000291-10";
itemInfoList.Add(itemInfo01);
var itemInfo02 = new Model.AmazonFBAInbound.ShipmentItemInfo();
itemInfo02.AmazonFNSKU = "Z0000001";
itemInfo02.AmazonShipmentId = "BOBBIE2";
itemInfo02.QuantityReceived = 3;
itemInfo02.QuantityAllocated = 5;
itemInfo02.SKUNumber = "000292-10";
itemInfoList.Add(itemInfo02);
info.ShipmentItemInfoList = itemInfoList;
//foreach (var item in itemInfoList)
//{
// Console.WriteLine("Qty Allocated: " + item.SKUNumber);
// Console.WriteLine("Qty Allocated: " + item.QuantityAllocated);
// Console.WriteLine("Qty Received: " + item.QuantityReceived);
//}
var howto = new Data.Database.FBAInbound.SetShipmentInfo(sqlConnectionString);
howto.Excecute(info);
var testkkkk = new Data.Database.FBAInbound.GetShipmentPrimaryKey(sqlConnectionString);
int pknumber = testkkkk.ByAmazonShipmentId("FBA15CJCZ12");
Console.WriteLine("ShipmentPK: " + pknumber);
}
public void GetMWSInfo()
{
var request = new ListInboundShipmentsRequest();
request.LastUpdatedBefore = new DateTime(2019, 06, 21);
request.LastUpdatedAfter = new DateTime(2019, 01, 01);
var task = new Data.AmazonMWS.FBAInbound.ListInboundShipments();
task.LastUpdatedBefore = new DateTime(2019, 06, 25);
task.LastUpdatedAfter = new DateTime(2018, 01, 01);
var result = task.GetShipmentInfo();
}
public void Test()
{
var job = new Logic.AmazonFBAInbound.UpdateDatabaseShipmentInfo(sqlConnectionString);
job.GetNew();
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace bnhtrade.Core.Test
{
class InboundShipmentInfoSync
{
public InboundShipmentInfoSync(string sqlConnectionString)
{
//var request = new Logic.AmazonFBAInbound.ShipmentInfoUpdateDatabase(sqlConnectionString);
}
}
}

View File

@@ -0,0 +1,80 @@
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.Test
{
public class SQLLoop
{
public void Go(string sqlConnectionString)
{
using (TransactionScope scope = new TransactionScope())
{
using (SqlConnection conn = new SqlConnection(sqlConnectionString))
{
MiscFunction.ConsoleUpdate("Starting.....");
conn.Open();
int count = 0;
int total;
using (SqlCommand cmd = new SqlCommand(@"
SELECT COUNT(StockJournalID)
FROM tblStockJournal
", conn))
{
total = (int)cmd.ExecuteScalar();
}
var progress = new UI.Utility.ConsoleProgressBar(total, "Processing " + total + " records...");
using (SqlCommand cmd = new SqlCommand(@"
SELECT * FROM tblStockJournal
", conn))
{
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
count = count + 1;
//progress.Report(2677);
progress.Report(count);
int journalId = reader.GetInt32(0);
DateTime entryDate = DateTime.SpecifyKind(reader.GetDateTime(3), DateTimeKind.Utc);
DateTime modifiedDate = DateTime.SpecifyKind(reader.GetDateTime(5), DateTimeKind.Utc);
DateTime postDate = entryDate;
DateTime minPostDate = DateTime.SpecifyKind(new DateTime(2015, 06, 24), DateTimeKind.Utc);
if (modifiedDate < entryDate)
{ postDate = entryDate; }
if (postDate < minPostDate)
{ postDate = minPostDate; }
using (
SqlCommand updateCmd = new SqlCommand(@"
UPDATE tblStockJournal
SET PostDate = @postDate
WHERE StockJournalID = @journalId;
", conn))
{
updateCmd.Parameters.AddWithValue("@journalId", journalId);
updateCmd.Parameters.AddWithValue("@postDate", postDate.ToUniversalTime());
updateCmd.ExecuteNonQuery();
}
}
}
}
progress.Dispose();
scope.Complete();
}
}
}
}
}

View File

@@ -0,0 +1,125 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace bnhtrade.Core.UI.Utility
{
class ConsoleProgressBar : IDisposable, IProgress<int>
{
private int MaxProgress { get; set; }
private string PostfixMessge { get; set; }
private DateTime Started { get; set; }
private const int blockCount = 10;
private readonly TimeSpan animationInterval = TimeSpan.FromSeconds(1.0 / 8);
private const string animation = @"|/-\";
private readonly Timer timer;
private double currentProgress = 0;
private string currentText = string.Empty;
private bool disposed = false;
private int animationIndex = 0;
public ConsoleProgressBar(int maxProgress, string postfixMessge = "")
{
MaxProgress = maxProgress;
PostfixMessge = postfixMessge;
Started = DateTime.Now;
timer = new Timer(TimerHandler);
// A progress bar is only for temporary display in a console window.
// If the console output is redirected to a file, draw nothing.
// Otherwise, we'll end up with a lot of garbage in the target file.
if (!Console.IsOutputRedirected)
{
ResetTimer();
}
}
public void Report(int progress)
{
// Make sure value is in [0..1] range
double value = (double) progress / MaxProgress;
if (progress == 18739)
{
return;
}
value = Math.Max(0, Math.Min(1, value));
Interlocked.Exchange(ref currentProgress, value);
}
private void TimerHandler(object state)
{
lock (timer)
{
if (disposed) return;
int progressBlockCount = (int)(currentProgress * blockCount);
int percent = (int)(currentProgress * 100);
string text = string.Format("[{0}] [{1}{2}] {3,3}% {4} {5}",
Started.ToString("HH:mm:ss"),
new string('#', progressBlockCount),
new string('-', blockCount - progressBlockCount),
percent,
animation[animationIndex++ % animation.Length],
PostfixMessge
);
UpdateText(text);
ResetTimer();
// "[" + DateTime.Now.ToString("HH:mm:ss") + "] "
}
}
private void UpdateText(string text)
{
// Get length of common portion
int commonPrefixLength = 0;
int commonLength = Math.Min(currentText.Length, text.Length);
while (commonPrefixLength < commonLength && text[commonPrefixLength] == currentText[commonPrefixLength])
{
commonPrefixLength++;
}
// Backtrack to the first differing character
StringBuilder outputBuilder = new StringBuilder();
outputBuilder.Append('\b', currentText.Length - commonPrefixLength);
// Output new suffix
outputBuilder.Append(text.Substring(commonPrefixLength));
// If the new text is shorter than the old one: delete overlapping characters
int overlapCount = currentText.Length - text.Length;
if (overlapCount > 0)
{
outputBuilder.Append(' ', overlapCount);
outputBuilder.Append('\b', overlapCount);
}
Console.Write(outputBuilder);
currentText = text;
}
private void ResetTimer()
{
timer.Change(animationInterval, TimeSpan.FromMilliseconds(-1));
}
public void Dispose()
{
lock (timer)
{
disposed = true;
UpdateText(string.Empty);
}
}
}
}

View File

@@ -7,7 +7,7 @@
<ProjectGuid>{339D7413-3DA7-46EA-A55C-255A9A6B95EB}</ProjectGuid> <ProjectGuid>{339D7413-3DA7-46EA-A55C-255A9A6B95EB}</ProjectGuid>
<OutputType>Library</OutputType> <OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>bnhtradeDatabaseClient</RootNamespace> <RootNamespace>bnhtrade.Core</RootNamespace>
<AssemblyName>bnhtrade.Core</AssemblyName> <AssemblyName>bnhtrade.Core</AssemblyName>
<TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion> <TargetFrameworkVersion>v4.7.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
@@ -37,9 +37,6 @@
<StartupObject /> <StartupObject />
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="ABrain.AmazonMWS">
<HintPath>..\..\packages\ABrain.AmazonMWS.1.0.1.6\lib\ABrain.AmazonMWS.dll</HintPath>
</Reference>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.IO.Compression.FileSystem" /> <Reference Include="System.IO.Compression.FileSystem" />
@@ -52,6 +49,25 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Data\AmazonMWS\CredentialMws.cs" />
<Compile Include="Data\AmazonMWS\FBAInbound\ListInboundShipments.cs" />
<Compile Include="Data\AmazonMWS\FBAInbound\ListInboundShipmentItems.cs" />
<Compile Include="Data\AmazonMWS\CurrentDateTime.cs" />
<Compile Include="Data\Database\Connection.cs" />
<Compile Include="Data\Database\FBAInbound\GetShipmentHeaderInfo.cs" />
<Compile Include="Data\Database\FBAInbound\GetShipmentPrimaryKey.cs" />
<Compile Include="Data\Database\FBAInbound\SetShipmentInfo.cs" />
<Compile Include="Data\Database\Log\DateTimeLog.cs" />
<Compile Include="Logic\AmazonFBAInbound\UpdateDatabaseShipmentInfo.cs" />
<Compile Include="Test\InboundShipmentInfo.cs" />
<Compile Include="Data\AmazonMWS\Service.cs" />
<Compile Include="Logic\AmazonFBAInbound\ShipmentAddByFNSKU.cs" />
<Compile Include="Test\InboundShipmentInfoSync.cs" />
<Compile Include="Test\SQLLoop.cs" />
<Compile Include="Model\AmazonFBAInbound\ShipmentInfo.cs" />
<Compile Include="Model\SKU\SKUInfo.cs" />
<Compile Include="UI\Utility\ConsoleProgressBar.cs" />
<Compile Include="Model\AmazonFBAInbound\ShipmentItemInfo.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs"> <Compile Include="Properties\Settings.Designer.cs">
@@ -59,7 +75,8 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon> <DependentUpon>Settings.settings</DependentUpon>
</Compile> </Compile>
<Compile Include="SQL Connection.cs" /> <Compile Include="Logic\Sku\GetSkuIdByType.cs" />
<Compile Include="Data\Database\SKU\GetSKUId.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="App.config" /> <None Include="App.config" />
@@ -70,6 +87,28 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup /> <ItemGroup />
<ItemGroup>
<ProjectReference Include="..\..\..\..\AmazonMWSCsClient\src\FBAInboundServiceMWS\FBAInboundServiceMWS.csproj">
<Project>{9c7d6775-4f06-4881-87a0-b9514f2f3033}</Project>
<Name>FBAInboundServiceMWS</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\AmazonMWSCsClient\src\MarketplaceWebServiceProducts\MarketplaceWebServiceProducts.csproj">
<Project>{fe2fe872-f92e-4b47-bcc2-e41b9c10eb96}</Project>
<Name>MarketplaceWebServiceProducts</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\AmazonMWSCsClient\src\MarketplaceWebService\MarketplaceWebService.csproj">
<Project>{52b09e65-f1b4-4b99-b8e2-4a0b2e3201c2}</Project>
<Name>MarketplaceWebService</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\AmazonMWSCsClient\src\MWSClientCsRuntime\MWSClientCsRuntime.csproj">
<Project>{bde52371-cad4-4809-b8f7-9a218ee02464}</Project>
<Name>MWSClientCsRuntime</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\AmazonMWSCsClient\src\MWSFinancesService\MWSFinancesService.csproj">
<Project>{1fe13ef5-aabf-4080-b790-990b9069c634}</Project>
<Name>MWSFinancesService</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.

View File

@@ -5,10 +5,10 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Core;
using Core.Stock;
using System.Configuration; using System.Configuration;
using System.Transactions; using System.Transactions;
using bnhtrade.Core;
using bnhtrade.Core.Stock;
namespace bnhtradeScheduledTasks namespace bnhtradeScheduledTasks
{ {
@@ -251,7 +251,7 @@ namespace bnhtradeScheduledTasks
Console.Clear(); Console.Clear();
//try //try
//{ //{
Core.Inventory.InventoryPricing.AmazonMinMaxTemp(sqlConnectionString); bnhtrade.Core.Inventory.InventoryPricing.AmazonMinMaxTemp(sqlConnectionString);
//} //}
//catch (Exception ex) //catch (Exception ex)
//{ //{
@@ -273,14 +273,15 @@ namespace bnhtradeScheduledTasks
Console.WriteLine(consoleHeader); Console.WriteLine(consoleHeader);
Console.WriteLine("Main Menu > Dev Funcions"); Console.WriteLine("Main Menu > Dev Funcions");
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("<1> Test Import of Amazon Settlement Data into Account Transaction Table"); Console.WriteLine("<1> Get Amazon UTC time");
Console.WriteLine("<2> Test Stock Journal Reallocate"); Console.WriteLine("<2> Test Stock Journal Reallocate");
Console.WriteLine("<3> test Product Update Amazon Estimate Fee"); Console.WriteLine("<3> test Product Update Amazon Estimate Fee");
Console.WriteLine("<4> Process Amazon Reimbursement Report (into transactiontable)"); Console.WriteLine("<4> Process Amazon Reimbursement Report (into transactiontable)");
Console.WriteLine("<5> Test Stock Table Delete"); Console.WriteLine("<5> Test Stock Table Delete");
Console.WriteLine("<6> Test Owner intro insert"); Console.WriteLine("<6> Test Owner intro insert");
Console.WriteLine("<7> Currency exchange rate insert"); Console.WriteLine("<7> Currency exchange rate insert");
Console.WriteLine("<8> Update Amazon Inventory Table"); Console.WriteLine("<8> SQL Loop function");
Console.WriteLine("<9> Inbound shipment test");
Console.WriteLine(); Console.WriteLine();
Console.WriteLine("<0> Back"); Console.WriteLine("<0> Back");
Console.WriteLine(""); Console.WriteLine("");
@@ -294,8 +295,10 @@ namespace bnhtradeScheduledTasks
else if (input == "1") else if (input == "1")
{ {
Console.Clear(); Console.Clear();
var task = new StockReconciliation();
task.WIP_ProcessAmazonSettlementData(sqlConnectionString); var task = new bnhtrade.Core.Data.AmazonMWS.CurrentDateTime();
task.GetUtc();
Console.WriteLine("Complete, press any key to continue..."); Console.WriteLine("Complete, press any key to continue...");
Console.ReadKey(); Console.ReadKey();
} }
@@ -383,19 +386,25 @@ namespace bnhtradeScheduledTasks
else if (input == "8") else if (input == "8")
{ {
Console.Clear(); Console.Clear();
try
{ var jjjj = new bnhtrade.Core.Test.InboundShipmentInfo(sqlConnectionString);
TempStuff.TempTasks.test_AmazonInventoryTableUpdate(); jjjj.GetMWSInfo();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
//Console.WriteLine(result.ToString()); //Console.WriteLine(result.ToString());
Console.WriteLine("Complete, press any key to continue..."); Console.WriteLine("Complete, press any key to continue...");
Console.ReadKey(); Console.ReadKey();
} }
else if (input == "9")
{
Console.Clear();
var bob = new bnhtrade.Core.Test.InboundShipmentInfo(sqlConnectionString);
bob.Test();
Console.WriteLine("Complete, press any key to continue...");
Console.ReadKey();
}
@@ -530,7 +539,7 @@ namespace TempStuff
DateTime entrdate = DateTime.Parse("07/09/2016 08:13:54"); DateTime entrdate = DateTime.Parse("07/09/2016 08:13:54");
//return bnhtradeDatabaseClient.Purchase.PurchaseQuery.WIP_PurchaseLineNetTransactionInsert(sqlConnectionString, 10164, "GBP", 138, 9.98m, entrdate); //return bnhtradeDatabaseClient.Purchase.PurchaseQuery.WIP_PurchaseLineNetTransactionInsert(sqlConnectionString, 10164, "GBP", 138, 9.98m, entrdate);
Core.Purchase.PurchaseQuery.WIP_PurchaseLineTransactionNetUpdate(sqlConnectionString, 10164, "GBP", 138, 100000); bnhtrade.Core.Purchase.PurchaseQuery.WIP_PurchaseLineTransactionNetUpdate(sqlConnectionString, 10164, "GBP", 138, 100000);
} }
public static void test_ProductUpdateAmazonEstimateFee() public static void test_ProductUpdateAmazonEstimateFee()
{ {
@@ -538,7 +547,7 @@ namespace TempStuff
list.Add(("B000MGVBG4", 1.99m)); list.Add(("B000MGVBG4", 1.99m));
Core.Product.ProductQuery.ProductUpdateAmazonEstimateFee(sqlConnectionString, list); bnhtrade.Core.Product.ProductQuery.ProductUpdateAmazonEstimateFee(sqlConnectionString, list);
} }
public static void test_AmazonInventoryTableUpdate() public static void test_AmazonInventoryTableUpdate()
{ {
@@ -548,14 +557,14 @@ namespace TempStuff
{ {
DateTime entrdate = DateTime.Parse("28/11/2018 08:13:54"); DateTime entrdate = DateTime.Parse("28/11/2018 08:13:54");
return Core.Stock.StockCreate.WIP_StockInsertOwnerIntroduced(sqlConnectionString, 0.01m, 7, 15374, 51, 16, entrdate, 51); return bnhtrade.Core.Stock.StockCreate.WIP_StockInsertOwnerIntroduced(sqlConnectionString, 0.01m, 7, 15374, 51, 16, entrdate, 51);
} }
public static int CurrencyExchangeInsert() public static int CurrencyExchangeInsert()
{ {
DateTime start = new DateTime(2019, 03, 01); DateTime start = new DateTime(2019, 03, 01);
DateTime finish = new DateTime(2019, 04, 01); DateTime finish = new DateTime(2019, 04, 01);
return Core.Account.AccountQuery.CurrencyExchangeRateInsert(sqlConnectionString, 1, "USD", 222m, start, finish, true ); return bnhtrade.Core.Account.AccountQuery.CurrencyExchangeRateInsert(sqlConnectionString, 1, "USD", 222m, start, finish, true );
} }
} }
} }