This commit is contained in:
2023-01-23 19:47:40 +00:00
parent 176f31c591
commit 82adb594ab
3 changed files with 54 additions and 34 deletions

View File

@@ -88,13 +88,20 @@ namespace Sockeye.Biz
}
internal static async Task<bool> ParseVendorNotificationData(VendorNotification vn, AyContext ct, ILogger log)
{
try
{
var jData = JObject.Parse(vn.VendorData);
#if (DEBUG)
if (vn.VendorData.Contains("coupon"))
{
//trying to find out where the coupon code key is located in the order
System.Diagnostics.Debugger.Break();
}
#endif
//It's a test purchase, no need to process it any further...or is there??
if (jData["order_notification"]["purchase"]["is_test"].Value<bool>() == true)
{
@@ -108,8 +115,6 @@ namespace Sockeye.Biz
throw new System.FormatException($"Vendor data unexpected format:{vn.VendorData}");
}
///////////////////////////////////////////////////////////////////////////////////////////
#region CUSTOMER MAKE OR LOCATED
///////////////////////////////////////////////////////////////////////////////////////////
@@ -172,6 +177,9 @@ namespace Sockeye.Biz
///////////////////////////////////////////////////////////////////////////////////////////
var salesOrderNumber = jData["order_notification"]["purchase"]["purchase_id"].Value<string>();
#warning Is this processing the date into UTC properly??
//https://www.newtonsoft.com/json/help/html/DatesInJSON.htm
var purchaseDate = jData["order_notification"]["purchase"]["purchase_date"].Value<DateTime>();
if (await ct.Purchase.AnyAsync(z => z.SalesOrderNumber == salesOrderNumber))
throw new System.ApplicationException($"Sales order already exists: {salesOrderNumber} will not be processed");
@@ -182,39 +190,29 @@ namespace Sockeye.Biz
foreach (JObject jPurchase in jaPurchaseList)
{
Purchase p = new Purchase();
p.PurchaseDate = purchaseDate;
p.CustomerId = customer.Id;
p.VendorId = vn.VendorId;
p.Notes = vn.VendorData;//redundantly keep it
p.SalesOrderNumber = salesOrderNumber;
p.Currency = jPurchase["currency"].Value<string>();
var pId = jPurchase["product_id"].Value<string>();
var product = await ct.Product.AsNoTracking().FirstOrDefaultAsync(z => z.VendorCode == pId) ?? throw new System.ArgumentOutOfRangeException($"Vendor product code:{pId} was not found in Sockeye Products, record not processed");
var SalesItemProductVendorCode = jPurchase["product_id"].Value<string>();
var product = await ct.Product.AsNoTracking().FirstOrDefaultAsync(z => z.VendorCode == SalesItemProductVendorCode) ?? throw new System.ArgumentOutOfRangeException($"Vendor product code:{SalesItemProductVendorCode} was not found in Sockeye Products, record not processed");
p.ProductId = product.Id;
p.PGroup = product.PGroup;
p.
if (p.ProductId == 0)
switch (p.PGroup)
{
case ProductGroup.Misc:
//not a licensed product, probably misc custom or some fee or etc
p.Processed = true;//flag no further processing is required
break;
case ProductGroup.AyaNova7:
break;
case ProductGroup.RavenPerpetual:
break;
case ProductGroup.RavenSubscription:
break;
default://not set or unrecognized
throw new System.NotSupportedException($"Product group {p.PGroup} not recognized or supported for processing into purchase");
}
p.Currency = jPurchase["accounting"]["currency"].Value<string>();
p.ProductNet = jPurchase["accounting"]["product_net"].Value<decimal>();
p.Discount = jPurchase["accounting"]["discount"].Value<decimal>();
p.VendorFee = jPurchase["accounting"]["margin_net"].Value<decimal>();
p.Revenue = jPurchase["accounting"]["your_revenue"].Value<decimal>();
p.CouponCode = "UNKNOWN WHERE IN VENDOR DATA CONTAINS COUPON CODE";
p.Quantity = jPurchase["quantity"].Value<int>();
p.VendorNotificationId = vn.Id;
PurchaseBiz pbiz = PurchaseBiz.GetBiz(ct);
p = await pbiz.CreateAsync(p);
if (p == null)
{
//did not save, throw an error
throw new System.ApplicationException($"Error creating purchase: {pbiz.GetErrorsAsString()} for product item: {SalesItemProductVendorCode} vendor data :{vn.VendorData}");
}
}
///////////////////////////////////////////////////////////////////////////////////////////
@@ -222,11 +220,12 @@ namespace Sockeye.Biz
}
catch (Exception ex)
{
var err = $"ParseVendorNotificationData: Purchase record {vn.Id}-{vn.Created} triggered exception, see log";
var err = $"ParseVendorNotificationData: VendorNotification record {vn.Id}-{vn.Created} triggered exception, see log";
await NotifyEventHelper.AddOpsProblemEvent(err);//notify, this is serious
log.LogError(ex, err);
return false;
}
return true; //successfully processed so vendor notification should be set to processed by caller
}
private static void UpdateCustomerFromVendorData(JObject jData, Customer c)
@@ -1183,6 +1182,7 @@ namespace Sockeye.Biz
#endregion sample vendor notifications
//order notification json schema on this page down
//actual schema: https://api.shareit.com/xml/2.4/ordernotification.xsd
//https://account.mycommerce.com/home/wiki/7479997 //json format
//https://account.mycommerce.com/home/wiki/7479805 //overall info