Files
bnhtrade/src/bnhtrade.Core/Data/Amazon/Feeds/SampleFeeds.cs
T
Bobbie Hodgetts 29f9fae508 Added invoice export function and started implementation of unitofwork pattern (#43)
* complete read invoices from db

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* wip

* updated nuget package spapi

* WIP

* wip, now test

* wip, jut need to fix tax inclusive line amounts not supported

* wip

* wip, before I f everything up

* no, it complies now, this is the one before I f everything up

* wip

* wip

* wip, logic ready for testing

* wip it builds!!!!

* wip tested, working, need to complete the gui section

* wip

* wip

* wip - created export invoice data delete, time for testing

* wip testing phase

* wip - delete function fully tested and working

* wip on to sorting out the issue with settlement invoices not tallying

* wip

* wip

* wip

* wip

* wip before I complete change the ReadInvoiceLineItem sections

* that appears to have worked, on with the main quest

* no it's doesn't work, saving before i remove the confusing cache system (just use a dictionary!!)

* wipping picadilli

* wip

* wip

* implemented uow on inovice export, now for testing

* wip

* wip all tested do invoice currency convertion fearure

* wip

* pretty much done so long as xero accepts the exported invoices

* Complete!
2025-06-26 23:29:22 +01:00

451 lines
17 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using FikaAmazonAPI;
using FikaAmazonAPI.AmazonSpApiSDK.Models.Feeds;
using FikaAmazonAPI.ConstructFeed;
using FikaAmazonAPI.ConstructFeed.Messages;
using FikaAmazonAPI.Utils;
using static FikaAmazonAPI.ConstructFeed.BaseXML;
using static FikaAmazonAPI.Utils.Constants;
namespace bnhtrade.Core.Data.Amazon.Feeds
{
public class SampleFeeds
{
AmazonConnection amazonConnection;
public SampleFeeds(AmazonConnection amazonConnection)
{
this.amazonConnection = amazonConnection;
}
public void CallFlatfile()
{
string text = System.IO.File.ReadAllText(@"C:\Users\tareq\Downloads\Beispiel_Upload.txt");
var feedresultTXT = amazonConnection.Feed.SubmitFeed(text
, FeedType.POST_FLAT_FILE_INVLOADER_DATA
, new List<string>() { MarketPlace.UnitedArabEmirates.ID }
, null
, ContentType.TXT);
string pathURL = string.Empty;
while (pathURL == string.Empty)
{
Thread.Sleep(1000 * 30);
var feedOutput = amazonConnection.Feed.GetFeed(feedresultTXT);
if (feedOutput.ProcessingStatus == FikaAmazonAPI.AmazonSpApiSDK.Models.Feeds.Feed.ProcessingStatusEnum.DONE)
{
var outPut = amazonConnection.Feed.GetFeedDocument(feedOutput.ResultFeedDocumentId);
pathURL = outPut.Url;
}
}
}
public void GetFeeds()
{
var data = amazonConnection.Feed.GetFeeds(new FikaAmazonAPI.Parameter.Feed.ParameterGetFeed()
{
processingStatuses = ProcessingStatuses.DONE,
pageSize = 100,
feedTypes = new List<FeedType> { FeedType.POST_PRODUCT_PRICING_DATA },
createdSince = DateTime.UtcNow.AddDays(-6),
createdUntil = DateTime.UtcNow.AddDays(-1),
marketplaceIds = new List<string> { MarketPlace.UnitedArabEmirates.ID }
});
}
public void CreateFeedDocument()
{
var data = amazonConnection.Feed.CreateFeedDocument(ContentType.XML);
}
public void GetFeedDocument()
{
var data2 = amazonConnection.Feed.GetFeedDocument("amzn1.tortuga.3.92d8fd38-6ccf-49be-979f-6dc27375ea3e.T2DF7HINJ0NRA2");
}
public void GetFeed()
{
var data2 = amazonConnection.Feed.GetFeed("194146018872");
}
public void CancelFeed()
{
var data2 = amazonConnection.Feed.CancelFeed("194146018872");
}
public void SubmitFeedInventory()
{
ConstructFeedService createDocument = new ConstructFeedService("A3J37AJU4O9RHK", "1.02");
var list = new List<InventoryMessage>();
list.Add(new InventoryMessage()
{
SKU = "API.853038006021.20789.1001",
Quantity = 1
});
createDocument.AddInventoryMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_INVENTORY_AVAILABILITY_DATA);
GetFeedDetails(feedID);
}
/// <summary>
/// UnderTest
/// </summary>
public void SubmitFeedAddProductMessage(string ASIN, string SKU)
{
ConstructFeedService createDocument = new ConstructFeedService(amazonConnection.GetCurrentSellerID, "1.02");
var list = new List<ProductMessage>();
list.Add(new ProductMessage()
{
SKU = SKU,
StandardProductID = new FikaAmazonAPI.ConstructFeed.Messages.StandardProductID()
{
Type = "ASIN",
Value = ASIN
}
});
createDocument.AddProductMessage(list, OperationType.Update);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PRODUCT_DATA);
GetFeedDetails(feedID);
}
public void SubmitFeedDeleteAddProductMessage()
{
ConstructFeedService createDocument = new ConstructFeedService("A3J37AJU4O9RHK", "1.02");
var list = new List<ProductMessage>();
list.Add(new ProductMessage()
{
SKU = "8432225129778...."
});
createDocument.AddProductMessage(list, OperationType.Delete);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeedContent(xml, FeedType.POST_PRODUCT_DATA);
GetFeedDetails(feedID);
}
public void AddOfferMessageMessage()
{
ConstructFeedService createDocument = new ConstructFeedService("A3J37AJU4O9RHK", "1.02");
var list = new List<OfferMessage>();
list.Add(new OfferMessage()
{
SKU = "4049639414402_b"
});
createDocument.AddOfferMessage(list, OperationType.Delete);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PRODUCT_DATA);
GetFeedDetails(feedID);
}
public void SubmitFeedPRICING(decimal price, string SKU)
{
ConstructFeedService createDocument = new ConstructFeedService(amazonConnection.GetCurrentSellerID, "1.02");
var list = new List<PriceMessage>();
list.Add(new PriceMessage()
{
SKU = SKU,
StandardPrice = new StandardPrice()
{
currency = amazonConnection.GetCurrentMarketplace.CurrencyCode.ToString(),
Value = price
}
});
createDocument.AddPriceMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PRODUCT_PRICING_DATA);
GetFeedDetails(feedID);
}
public async void SubmitFeedPricingWithSalePrice(string sku, decimal price, decimal salePrice, DateTime startDate, DateTime endDate)
{
var currencyCode = amazonConnection.GetCurrentMarketplace.CurrencyCode.ToString();
var createDocument = new ConstructFeedService("A3J37AJU4O9RHK", "1.02");
var list = new List<PriceMessage>();
list.Add(new PriceMessage
{
SKU = sku,
StandardPrice = new StandardPrice
{
currency = currencyCode,
Value = price
},
Sale = new Sale
{
SalePrice = new StandardPrice
{
currency = currencyCode,
Value = salePrice
},
StartDate = startDate.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffK"),
EndDate = endDate.ToUniversalTime().ToString("yyyy-MM-dd'T'HH:mm:ss.fffK")
}
});
createDocument.AddPriceMessage(list);
var xml = createDocument.GetXML();
var feedId = await amazonConnection.Feed.SubmitFeedAsync(xml, FeedType.POST_PRODUCT_PRICING_DATA);
GetFeedDetails(feedId);
}
public void SubmitFeedSale(decimal price, string SKU)
{
ConstructFeedService createDocument = new ConstructFeedService("A3J37AJU4O9RHK", "1.02");
var list = new List<PriceMessage>();
list.Add(new PriceMessage()
{
SKU = SKU,
StandardPrice = new StandardPrice()
{
currency = amazonConnection.GetCurrentMarketplace.CurrencyCode.ToString(),
Value = price
},
Sale = new Sale()
{
StartDate = DateTime.UtcNow.AddDays(+1).ToString("yyyy-MM-dd'T'HH:mm:ss.fffK"),
EndDate = DateTime.UtcNow.AddDays(+2).ToString("yyyy-MM-dd'T'HH:mm:ss.fffK"),
SalePrice = new StandardPrice()
{
currency = amazonConnection.GetCurrentMarketplace.CurrencyCode.ToString(),
Value = price
}
}
});
createDocument.AddPriceMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PRODUCT_PRICING_DATA);
GetFeedDetails(feedID);
}
public void FeebPostOrderFullfillment()
{
ConstructFeedService createDocument = new ConstructFeedService("{sellerId}", "1.02");
var list = new List<OrderFulfillmentMessage>();
list.Add(new OrderFulfillmentMessage()
{
AmazonOrderID = "{orderId}",
FulfillmentDate = DateTime.Now.ToString("yyyy-MM-dd'T'HH:mm:ss.fffK"),
FulfillmentData = new FulfillmentData()
{
CarrierName = "Correos Express",
ShippingMethod = "ePaq",
ShipperTrackingNumber = "{trackingNumber}"
}
});
createDocument.AddOrderFulfillmentMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_ORDER_FULFILLMENT_DATA);
GetFeedDetails(feedID);
}
public void SubmitFeedOrderAcknowledgement()
{
ConstructFeedService createDocument = new ConstructFeedService("{sellerId}", "1.02");
var list = new List<OrderAcknowledgementMessage>();
list.Add(new OrderAcknowledgementMessage()
{
AmazonOrderID = "AMZ1234567890123",
MerchantOrderID = "12345678",
StatusCode = OrderAcknowledgementStatusCode.Success,
Item = new List<OrderAcknowledgementItem>() {
new OrderAcknowledgementItem() {
AmazonOrderItemCode = "52986411826454",
MerchantOrderItemID = "1"
}
}
});
createDocument.AddOrderAcknowledgementMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_ORDER_ACKNOWLEDGEMENT_DATA);
GetFeedDetails(feedID);
}
public void SubmitFeedOrderAdjustment()
{
ConstructFeedService createDocument = new ConstructFeedService("{sellerId}", "1.02");
var list = new List<OrderAdjustmentMessage>();
list.Add(new OrderAdjustmentMessage()
{
AmazonOrderID = "AMZ1234567890123",
ActionType = AdjustmentActionType.Refund,
AdjustedItem = new List<AdjustedItem>() {
new AdjustedItem() {
AmazonOrderItemCode = "52986411826454",
AdjustmentReason = AdjustmentReason.CustomerCancel,
DirectPaymentAdjustments = new List<DirectPaymentAdjustments>()
{
new DirectPaymentAdjustments()
{
Component = new List<DirectPaymentAdjustmentsComponent>()
{
new DirectPaymentAdjustmentsComponent() {
DirectPaymentType = "Credit Card Refund",
Amount = new CurrencyAmount() {
Value = 10.50M,
currency = amazonConnection.GetCurrentMarketplace.CurrencyCode
}
}
}
}
}
}
}
});
createDocument.AddOrderAdjustmentMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_PAYMENT_ADJUSTMENT_DATA);
GetFeedDetails(feedID);
}
public void CartonContentsRequestFeed()
{
ConstructFeedService createDocument2 = new ConstructFeedService("{SellerID}", "1.02");
var list22 = new List<CartonContentsRequest>();
list22.Add(new CartonContentsRequest()
{
ShipmentId = "FBA123456",
Carton = new List<Carton> {
new Carton() {
CartonId="1",
Item=new List<CartonItem>(){
new CartonItem() {
QuantityInCase=1,
QuantityShipped=1,
SKU="7004"
}
}
},
new Carton() {
CartonId="2",
Item=new List<CartonItem>(){
new CartonItem() {
QuantityInCase=12,
QuantityShipped=12,
SKU="4051",
ExpirationDate=DateTime.Now,
}
}
}
}
});
createDocument2.AddCartonContentsRequest(list22);
var xml222 = createDocument2.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml222, FeedType.POST_FBA_INBOUND_CARTON_CONTENTS);
GetFeedDetails(feedID);
}
public void SubmitFeedEasyShipDocument()
{
ConstructFeedService createDocument = new ConstructFeedService("{sellerId}", "1.02");
var list = new List<EasyShipDocumentMessage>();
list.Add(new EasyShipDocumentMessage()
{
AmazonOrderID = "AMZ1234567890123",
DocumentTypes = new List<EasyShipDocumentType>() {
EasyShipDocumentType.ShippingLabel
}
});
createDocument.AddEasyShipDocumentMessage(list);
var xml = createDocument.GetXML();
var feedID = amazonConnection.Feed.SubmitFeed(xml, FeedType.POST_EASYSHIP_DOCUMENTS);
GetFeedDetails(feedID);
}
public void GetFeedDetails(string feedID)
{
string ResultFeedDocumentId = string.Empty;
while (string.IsNullOrEmpty(ResultFeedDocumentId))
{
var feedOutput = amazonConnection.Feed.GetFeed(feedID);
if (feedOutput.ProcessingStatus == Feed.ProcessingStatusEnum.DONE)
{
var outPut = amazonConnection.Feed.GetFeedDocument(feedOutput.ResultFeedDocumentId);
var reportOutput = outPut.Url;
var processingReport = amazonConnection.Feed.GetFeedDocumentProcessingReport(outPut);
DisplayProcessingReportMessage(processingReport);
break;
}
if (!(feedOutput.ProcessingStatus == Feed.ProcessingStatusEnum.INPROGRESS ||
feedOutput.ProcessingStatus == Feed.ProcessingStatusEnum.INQUEUE))
break;
else Thread.Sleep(10000);
}
}
private void DisplayProcessingReportMessage(ProcessingReportMessage processingReport)
{
Console.WriteLine("MessagesProcessed=" + processingReport.ProcessingSummary.MessagesProcessed);
Console.WriteLine("MessagesSuccessful= " + processingReport.ProcessingSummary.MessagesSuccessful);
Console.WriteLine("MessagesWithError=" + processingReport.ProcessingSummary.MessagesWithError);
Console.WriteLine("MessagesWithWarning=" + processingReport.ProcessingSummary.MessagesWithWarning);
if (processingReport.Result != null && processingReport.Result.Count > 0)
{
foreach (var itm in processingReport.Result)
{
Console.WriteLine("ResultDescription=" + (itm.AdditionalInfo?.SKU ?? string.Empty) + " > " + itm.ResultDescription);
}
}
}
}
}