Skip to content

Commit cd90c46

Browse files
committed
Add sample code for VendorOrders functions.
1 parent 01ff140 commit cd90c46

File tree

1 file changed

+201
-0
lines changed

1 file changed

+201
-0
lines changed
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
using FikaAmazonAPI.Utils;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using FikaAmazonAPI.AmazonSpApiSDK.Models.VendorOrders;
8+
using FikaAmazonAPI.Parameter.VendorOrders;
9+
using System.Data;
10+
using Constants = FikaAmazonAPI.AmazonSpApiSDK.Models.VendorOrders.Constants;
11+
12+
namespace FikaAmazonAPI.SampleCode
13+
{
14+
public class VendorOrdersSample
15+
{
16+
AmazonConnection amazonConnection;
17+
18+
public VendorOrdersSample(AmazonConnection amazonConnection)
19+
{
20+
this.amazonConnection = amazonConnection;
21+
}
22+
23+
public void LoadNewPurchaseOrders()
24+
{
25+
// Load all new purchase orders not yet acknowledged.
26+
ParameterVendorOrdersGetPurchaseOrders filter = new ParameterVendorOrdersGetPurchaseOrders();
27+
filter.purchaseOrderState = Constants.PurchaseOrderState.New;
28+
LoadPurchaseOrders(filter);
29+
}
30+
31+
public void LoadPurchaseOrdersChangedAfter(DateTime changedAfter)
32+
{
33+
// Load all purchase orders changed after a certain date.
34+
ParameterVendorOrdersGetPurchaseOrders filter = new ParameterVendorOrdersGetPurchaseOrders();
35+
filter.changedAfter = changedAfter;
36+
LoadPurchaseOrders(filter);
37+
}
38+
39+
void LoadAcknowledgedPurchaseOrders()
40+
{
41+
// Load all purchase orders acknowledged but not closed.
42+
ParameterVendorOrdersGetPurchaseOrders filter = new ParameterVendorOrdersGetPurchaseOrders();
43+
filter.limit = 100;
44+
filter.purchaseOrderState = Constants.PurchaseOrderState.Acknowledged;
45+
LoadPurchaseOrders(filter);
46+
}
47+
48+
private void LoadPurchaseOrders(ParameterVendorOrdersGetPurchaseOrders filter)
49+
{
50+
var orders = amazonConnection.VendorOrders.GetPurchaseOrders(filter);
51+
foreach (var order in orders)
52+
{
53+
OrderDetails details = order.OrderDetails;
54+
/* _log.LogInformation("PO {0}, {1}, date {2}, changed = {3}, stateChanged = {4}, buyer {5}, seller {6}, shipTo {7}, billTo {8}, shipStart {9}, shipEnd = {10}",
55+
order.PurchaseOrderNumber, order.PurchaseOrderState, details.PurchaseOrderDate, details.PurchaseOrderChangedDate, details.PurchaseOrderStateChangedDate,
56+
details.BuyingParty.PartyId, details.SellingParty.PartyId, details.ShipToParty.PartyId, details.BillToParty.PartyId, details.ShipWindow.StartDate, details.ShipWindow.EndDate); */
57+
}
58+
}
59+
60+
public void LoadPurchaseOrdersWithStatusUpdates(DateTime? updatedAfter)
61+
{
62+
ParameterVendorOrdersGetPurchaseOrdersStatus filter = new ParameterVendorOrdersGetPurchaseOrdersStatus();
63+
filter.purchaseOrderStatus = Constants.PurchaseOrderStatus.OPEN;
64+
if (updatedAfter.HasValue)
65+
{
66+
filter.updatedAfter = updatedAfter;
67+
}
68+
var ordersStatus = amazonConnection.VendorOrders.GetPurchaseOrdersStatus(filter);
69+
foreach (OrderStatus orderStatus in ordersStatus)
70+
{
71+
/* _log.LogInformation("PO {0}, status {1}, poDate {2}, lastUpdatedDate {3}, seller {4}, shipTo {5}",
72+
orderStatus.PurchaseOrderNumber, orderStatus.PurchaseOrderStatus, orderStatus.PurchaseOrderDate, orderStatus.LastUpdatedDate, orderStatus.SellingParty.PartyId, orderStatus.ShipToParty.PartyId); */
73+
List<OrderItemStatus> items = orderStatus.ItemStatus;
74+
foreach (OrderItemStatus item in items)
75+
{
76+
foreach(OrderedQuantityDetails oqd in item.OrderedQuantity.OrderedQuantityDetails)
77+
{
78+
}
79+
if (item.AcknowledgementStatus.AcknowledgementStatusDetails != null)
80+
{
81+
foreach (AcknowledgementStatusDetails asd in item.AcknowledgementStatus.AcknowledgementStatusDetails)
82+
{
83+
}
84+
}
85+
/* _log.LogDebug("{0}: ASIN {1}, Sku {2}, cost {3}, list {4}, ordered {5} {6}, status {7}, accepted {8}, rejected {9} {10}, receiveStatus {11}, receivedQuantity {12}, lastReceive {13}",
86+
item.ItemSequenceNumber, item.BuyerProductIdentifier, item.VendorProductIdentifier, item.NetCost.Amount, item.ListPrice.Amount,
87+
item.OrderedQuantity.OrderedQuantity.Amount, details.ToString(),
88+
item.AcknowledgementStatus.ConfirmationStatus,
89+
item.AcknowledgementStatus.AcceptedQuantity != null ? item.AcknowledgementStatus.AcceptedQuantity.Amount : 0,
90+
item.AcknowledgementStatus.RejectedQuantity != null ? item.AcknowledgementStatus.RejectedQuantity.Amount : 0, ackDetails.ToString(),
91+
item.ReceivingStatus.ReceiveStatus, item.ReceivingStatus.ReceivedQuantity != null ? item.ReceivingStatus.ReceivedQuantity.Amount : 0,
92+
item.ReceivingStatus.LastReceiveDate); */
93+
}
94+
}
95+
}
96+
97+
public void LoadPurchaseOrder(string poNumber)
98+
{
99+
var order = amazonConnection.VendorOrders.GetPurchaseOrder(poNumber);
100+
}
101+
102+
public void AcknowledgePo(string poNumber, NewPo newPo)
103+
{
104+
// Acknowledge PO specified. Assumes details of which items to accept and which to reject have already been constructed in the NewPo object.
105+
SubmitAcknowledgementRequest request = new SubmitAcknowledgementRequest();
106+
request.Acknowledgements = new List<OrderAcknowledgement>();
107+
OrderAcknowledgement acknowledgement = new OrderAcknowledgement();
108+
acknowledgement.PurchaseOrderNumber = poNumber;
109+
PartyIdentification sellingParty = new PartyIdentification();
110+
sellingParty.PartyId = "XXXX";
111+
acknowledgement.SellingParty = sellingParty;
112+
acknowledgement.AcknowledgementDate = DateTime.UtcNow;
113+
acknowledgement.Items = new List<OrderAcknowledgementItem>();
114+
foreach (KeyValuePair<string, PoItem> kvp in newPo.PoItems)
115+
{
116+
string sku = kvp.Key;
117+
PoItem poItem = kvp.Value;
118+
bool obsolete = poItem.Obsolete;
119+
OrderAcknowledgementItem item = new OrderAcknowledgementItem();
120+
item.ItemAcknowledgements = new List<OrderItemAcknowledgement>();
121+
item.ItemSequenceNumber = "";
122+
item.AmazonProductIdentifier = poItem.AmazonAsin;
123+
item.VendorProductIdentifier = sku;
124+
item.NetCost = new FikaAmazonAPI.AmazonSpApiSDK.Models.ListingsItems.Money("USD", poItem.AcceptedPrice.ToString());
125+
item.ListPrice = new FikaAmazonAPI.AmazonSpApiSDK.Models.ListingsItems.Money("USD", poItem.ListPrice.ToString());
126+
item.DiscountMultiplier = "";
127+
ItemQuantity orderedQuantity = new ItemQuantity();
128+
orderedQuantity.Amount = poItem.QuantityOrdered;
129+
orderedQuantity.UnitOfMeasure = ItemQuantity.UnitOfMeasureEnum.Eaches;
130+
item.OrderedQuantity = orderedQuantity;
131+
OrderItemAcknowledgement itemAcknowledgement = new OrderItemAcknowledgement();
132+
itemAcknowledgement.AcknowledgementCode = poItem.QuantityConfirmed > 0 ? AcknowledgementCode.Accepted : AcknowledgementCode.Rejected;
133+
ItemQuantity acknowledgeQuantity = new ItemQuantity();
134+
acknowledgeQuantity.Amount = poItem.QuantityConfirmed;
135+
acknowledgeQuantity.UnitOfMeasure = ItemQuantity.UnitOfMeasureEnum.Eaches;
136+
itemAcknowledgement.AcknowledgedQuantity = acknowledgeQuantity;
137+
if (poItem.QuantityConfirmed == 0)
138+
{
139+
itemAcknowledgement.RejectionReason = obsolete ? RejectionReason.ObsoleteProduct : RejectionReason.TemporarilyUnavailable;
140+
}
141+
item.ItemAcknowledgements.Add(itemAcknowledgement);
142+
acknowledgement.Items.Add(item);
143+
}
144+
request.Acknowledgements.Add(acknowledgement);
145+
var transactionId = amazonConnection.VendorOrders.SubmitAcknowledgement(request);
146+
}
147+
148+
149+
150+
public class NewPo
151+
{
152+
public NewPo(DateTime orderDate, DateOnly shipWindowStartDate, DateOnly shipWindowEndDate, string fulfillmentCenter, bool fcKnown)
153+
{
154+
OrderDate = orderDate;
155+
ShipWindowStartDate = shipWindowStartDate;
156+
ShipWindowEndDate = shipWindowEndDate;
157+
FulfillmentCenter = fulfillmentCenter;
158+
FcKnown = fcKnown;
159+
PoItems = new Dictionary<string, PoItem>();
160+
}
161+
public DateTime OrderDate { get; set; }
162+
public DateOnly ShipWindowStartDate { get; set; }
163+
public DateOnly ShipWindowEndDate { get; set; }
164+
public string FulfillmentCenter { get; set; }
165+
public bool FcKnown { get; set; }
166+
public Dictionary<string, PoItem> PoItems { get; set; }
167+
public bool IsFutureOrder
168+
{
169+
get
170+
{
171+
bool isFutureOrder = false;
172+
if (ShipWindowStartDate >= DateOnly.FromDateTime(DateTime.UtcNow.AddDays(7)))
173+
{
174+
isFutureOrder = true;
175+
}
176+
return isFutureOrder;
177+
}
178+
}
179+
}
180+
181+
public class PoItem
182+
{
183+
public PoItem(string amazonAsin, int quantityOrdered, decimal acceptedPrice, decimal listPrice)
184+
{
185+
AmazonAsin = amazonAsin;
186+
QuantityOrdered = quantityOrdered;
187+
AcceptedPrice = acceptedPrice;
188+
ListPrice = listPrice;
189+
}
190+
public string AmazonAsin { get; set; }
191+
public int QuantityOrdered { get; set; }
192+
public decimal AcceptedPrice { get; set; }
193+
public decimal ListPrice { get; set; }
194+
public int QuantityConfirmed { get; set; }
195+
public bool Obsolete { get; set; } // Is this item obsolete (i.e. we don't sell it to Vendor Central anymore)?
196+
}
197+
198+
199+
200+
}
201+
}

0 commit comments

Comments
 (0)