private void amzQueryToken(DateTime stDate, DateTime endDate, int res, string amzNowToken, int statusIndex, bool dataModifica, bool prime, LavClass.TipoOperatore tp, UtilityMaietta.genSettings s) { string nexttoken, errore; ArrayList lista; lista = AmazonOrder.GetOrdersToken(amzSettings, aMerchant, amzNowToken, out nexttoken, out errore); if (lista == null || errore != "") { Response.Write("Impossibile contattare amazon, riprova più tardi!<br />Errore: " + errore); return; } AmazonOrder.Order.OrderComparer comparer = new AmazonOrder.Order.OrderComparer(); comparer.ComparisonMethod = (AmazonOrder.Order.OrderComparer.ComparisonType) int.Parse(dropOrdina.SelectedValue.ToString()); lista.Sort(comparer); imbNextPag.PostBackUrl = "amzShipDownload.aspx?token=" + Request.QueryString["token"].ToString() + "&merchantId=" + Request.QueryString["merchantId"].ToString() + "&amzToken=" + HttpUtility.UrlEncode(nexttoken); if (res > lista.Count || nexttoken == null || nexttoken == "") { imbNextPag.Visible = false; } else { imbNextPag.Visible = true; } //gvShips.Columns.Clear(); //gvShips.DataSource = null; //gvShips.DataBind(); //addFirstRow(tp, s); //createGrid(lista, false, tp, s); fillGrid(int.Parse(dropVett.SelectedValue), amzSettings, lista); //, true); }
public void Delete(AmazonOrder item) { _amazonLogService.Add(AmazonLogType.Orders, AmazonLogStatus.Delete, null, null, null, null, item, null, null, "Amazon Order #" + item.AmazonOrderId); _session.Transact(session => session.Delete(item)); }
public OrderFulfillment GetOrderFulfillment(AmazonOrder amazonOrder) { var orderFulfillment = new OrderFulfillment() { Item = amazonOrder.AmazonOrderId, ItemElementName = ItemChoiceType2.AmazonOrderID, FulfillmentData = new OrderFulfillmentFulfillmentData() { Item = "Other", ShippingMethod = "Standard" }, Item1 = new OrderFulfillmentItemCollection() }; orderFulfillment.FulfillmentDate = amazonOrder.Order.ShippingDate.HasValue ? amazonOrder.Order.ShippingDate.Value.ToUniversalTime().AddMinutes(-15) : DateTime.UtcNow.AddMinutes(-15); //-15 because server times differ foreach (var amazonOrderItem in amazonOrder.Items) { var item = new OrderFulfillmentItem() { Item = amazonOrderItem.AmazonOrderItemId, ItemElementName = ItemChoiceType3.AmazonOrderItemCode, Quantity = decimal.ToInt32(amazonOrderItem.QuantityOrdered).ToString() }; orderFulfillment.Item1.Add(item); } return(orderFulfillment); }
public AmazonLog Add(AmazonLogType type, AmazonLogStatus status, Exception elmahError, MarketplaceWebService.Model.Error amazonError, AmazonApiSection?apiSection, string apiOperation, AmazonOrder amazonOrder, AmazonListing amazonListing, AmazonListingGroup amazonListingGroup, string message = "", string details = "") { var log = new AmazonLog { LogType = type, LogStatus = status, AmazonOrder = amazonOrder, ApiSection = apiSection, ApiOperation = !String.IsNullOrWhiteSpace(apiOperation) ? apiOperation : null, AmazonListing = amazonListing, AmazonListingGroup = amazonListingGroup, Message = !String.IsNullOrWhiteSpace(message) ? message : null, Detail = !String.IsNullOrWhiteSpace(details) ? details : null, Site = CurrentRequestData.CurrentSite }; log.SetGuid(Guid.NewGuid()); if (elmahError != null) { log.Message = elmahError.Message; log.Detail = elmahError.StackTrace; } if (amazonError != null) { log.ErrorCode = amazonError.Code; log.ErrorType = amazonError.Type; log.Message = amazonError.Message; log.Detail = amazonError.Detail.ToString(); } return(Save(log)); }
public ActionResult Details(AmazonOrder amazonOrder) { if (amazonOrder != null) { return(View(amazonOrder)); } return(RedirectToAction("Index")); }
public bool Update(AmazonOrder amazonOrder, Order order) { if (amazonOrder.Status == AmazonOrderStatus.Unshipped) { var shippingAddress = _validateAmazonOrderService.GetAmazonOrderAddress(order); _validateAmazonOrderService.SetShippingAddress(amazonOrder, shippingAddress); } return(true); }
public void SaveOrUpdate(AmazonOrder amazonOrder) { var orderId = amazonOrder.AmazonOrderId; var id = amazonOrder.Id; _session.Transact(session => session.SaveOrUpdate(amazonOrder)); _amazonLogService.Add(AmazonLogType.Orders, id > 0?AmazonLogStatus.Update:AmazonLogStatus.Insert, null, null, null, null, amazonOrder, null, null, "Amazon Order #" + orderId); }
public void AmazonOrderPlaced(AmazonOrder order) { var items = GetAll <IOnAmazonOrderPlaced>(); if (items.Any()) { items.ForEach(placed => placed.OnAmazonOrderPlaced(order)); } }
public void AmazonOrderService_Get_ShouldReturnPersistedEntryFromSession() { var item = new AmazonOrder(); Session.Transact(session => session.Save(item)); var results = _amazonOrderService.Get(1); results.As <AmazonOrder>().Id.Should().Be(1); }
public void AmazonOrderService_Delete_ShouldRemoveItemFromTheSession() { var item = new AmazonOrder(); Session.Transact(session => session.Save(item)); _amazonOrderService.Delete(item); Session.QueryOver <AmazonOrder>().RowCount().Should().Be(0); }
public decimal GetNumberOfShippedProducts(DateTime from, DateTime to) { AmazonOrder amazonOrderAlias = null; AmazonOrderItem amazonOrderItemAlias = null; return(_session.QueryOver(() => amazonOrderItemAlias) .JoinAlias(() => amazonOrderItemAlias.AmazonOrder, () => amazonOrderAlias) .Where(() => amazonOrderAlias.PurchaseDate >= from && amazonOrderAlias.PurchaseDate <= to) .Cacheable().List().Sum(x => x.QuantityShipped)); }
public bool Update(AmazonOrder amazonOrder, Order order) { if (amazonOrder.Status == AmazonOrderStatus.Unshipped && order.OrderStatus == OrderStatusEnum.Canceled) { amazonOrder.Status = AmazonOrderStatus.Canceled; _amazonOrderService.Update(amazonOrder); _orderService.Cancel(amazonOrder.Order); } return(true); }
public void AmazonOrderService_Update_ShouldUpdateInSession() { var item = new AmazonOrder(); Session.Transact(session => session.Save(item)); item.BuyerName = "T1"; _amazonOrderService.Update(item); Session.Evict(item); Session.Get <AmazonOrder>(1).BuyerName.Should().Be("T1"); }
public bool Update(AmazonOrder amazonOrder, Order order) { if (amazonOrder.Id == 0 || (amazonOrder.Status != AmazonOrderStatus.Shipped && amazonOrder.Status != AmazonOrderStatus.Canceled)) { var shippingAddress = _validateAmazonOrderService.GetAmazonOrderAddress(order); _validateAmazonOrderService.GetAmazonOrderDetails(order, ref amazonOrder, shippingAddress); } amazonOrder.NumberOfItemsShipped = order.NumberOfItemsShipped; amazonOrder.Status = order.OrderStatus.GetEnumByValue <AmazonOrderStatus>(); return(true); }
private static int CreateAmazonOrder(IContainer container, int customerMarketPlaceId, int marketPlaceHistoryId) { AmazonOrder order = new AmazonOrder { Created = DateTime.UtcNow, CustomerMarketPlaceId = customerMarketPlaceId, CustomerMarketPlaceUpdatingHistoryRecordId = marketPlaceHistoryId }; var amazonOrdersQueries = container.GetInstance <IAmazonOrdersQueries>(); int orderId = (int)amazonOrdersQueries.SaveOrder(order); Assert.IsTrue(orderId > 0, "error inserting order id"); return(orderId); }
public void AmazonOrderService_Delete_ShouldCallAddLog() { var item = new AmazonOrder() { AmazonOrderId = "1" }; Session.Transact(session => session.Save(item)); _amazonOrderService.Delete(item); A.CallTo(() => _amazonLogService.Add(AmazonLogType.Orders, AmazonLogStatus.Delete, null, null, null, null, item, null, null, "Amazon Order #" + item.AmazonOrderId, string.Empty)).MustHaveHappened(); }
/// <summary> /// Saves the order. /// </summary> /// <param name="order">The order.</param> /// <returns></returns> public Optional <int> SaveOrder(AmazonOrder order) { using (var connection = GetOpenedSqlConnection2()) { var cmd = new MultiInsertCommandGenerator <AmazonOrder>() .WithOptionalConnection(connection.SqlConnection()) .WithTableName(Tables.AmazonOrder) .WithModels(order.ToEnumerable()) .WithSkipColumns(o => o.Id) .WithOutputColumns(o => o.Id) .Verify().GenerateCommands().First(); using (var sqlCommand = cmd) { return(ExecuteScalarAndLog <int>(sqlCommand)); } } }
public void SetAmazonOrderItem(ref AmazonOrder amazonOrder, OrderItem rawOrderItem) { AmazonOrderItem item = amazonOrder.Items.SingleOrDefault(x => x.AmazonOrderItemId == rawOrderItem.OrderItemId); if (item != null) { item.QuantityShipped = rawOrderItem.QuantityShipped; } else { AmazonOrderItem orderItem = GetAmazonOrderItem(amazonOrder, rawOrderItem); amazonOrder.Items.Add(orderItem); } }
public void AmazonOrder_ShippingTotal_ShouldBeSumOShippingAmountShippingTaxMinusShippingDiscountAmount() { var item1 = A.Fake <AmazonOrderItem>(); A.CallTo(() => item1.ShippingPriceAmount).Returns(10); A.CallTo(() => item1.ShippingTaxAmount).Returns(10); A.CallTo(() => item1.ShippingDiscountAmount).Returns(10); var amazonOrder = new AmazonOrder() { Items = new List <AmazonOrderItem> { item1 } }; var result = amazonOrder.ShippingTotal; result.Should().Be(10); }
public void AmazonOrder_ItemAmount_ShouldBeSumOfItemPriceAmount() { var item1 = A.Fake <AmazonOrderItem>(); var item2 = A.Fake <AmazonOrderItem>(); A.CallTo(() => item1.ItemPriceAmount).Returns(10); A.CallTo(() => item2.ItemPriceAmount).Returns(20); var amazonOrder = new AmazonOrder() { Items = new List <AmazonOrderItem> { item1, item2 } }; var result = amazonOrder.ItemAmount; result.Should().Be(30); }
public Ecommerce.Entities.Orders.Order GetOrder(AmazonOrder amazonOrder) { Ecommerce.Entities.Orders.Order order = amazonOrder.Order ?? new Ecommerce.Entities.Orders.Order(); if (order.Id == 0) { order = GetOrderDetails(amazonOrder); Ecommerce.Entities.Orders.Order order1 = order; _session.Transact(session => session.Save(order1)); GetOrderLines(amazonOrder, ref order); _setTax.SetTax(ref order, amazonOrder.Tax); } order.ShippingStatus = amazonOrder.Status.GetEnumByValue <ShippingStatus>(); return(order); }
public void AmazonOrder_ShippingTax_ShouldBeSumOfShippingTaxAmount() { var item1 = A.Fake <AmazonOrderItem>(); var item2 = A.Fake <AmazonOrderItem>(); A.CallTo(() => item1.ShippingTaxAmount).Returns(10); A.CallTo(() => item2.ShippingTaxAmount).Returns(20); var amazonOrder = new AmazonOrder() { Items = new List <AmazonOrderItem> { item1, item2 } }; var result = amazonOrder.ShippingTax; result.Should().Be(30); }
public bool Update(AmazonOrder amazonOrder, Order order) { if (amazonOrder.Items.Any()) { return(true); } try { var orderItems = _amazonOrdersApiService.ListOrderItems(amazonOrder.AmazonOrderId); _importAmazonOrderService.SetAmazonOrderItems(orderItems, amazonOrder); return(true); } catch (Exception exception) { CurrentRequestData.ErrorSignal.Raise(exception); return(false); } }
public void AmazonOrder_Tax_ShouldBeSumOfItemTaxShippingTaxGiftWrapTax() { var item1 = A.Fake <AmazonOrderItem>(); A.CallTo(() => item1.ItemTaxAmount).Returns(10); A.CallTo(() => item1.ShippingTaxAmount).Returns(10); A.CallTo(() => item1.GiftWrapTaxAmount).Returns(10); var amazonOrder = new AmazonOrder() { Items = new List <AmazonOrderItem> { item1 } }; var result = amazonOrder.Tax; result.Should().Be(30); }
private Ecommerce.Entities.Orders.Order GetOrderDetails(AmazonOrder amazonOrder) { return(new Ecommerce.Entities.Orders.Order { ShippingAddress = amazonOrder.ShippingAddress, BillingAddress = amazonOrder.ShippingAddress, PaymentMethod = amazonOrder.PaymentMethod.GetDescription(), PaidDate = amazonOrder.PurchaseDate, Total = amazonOrder.OrderTotalAmount, TotalPaid = amazonOrder.OrderTotalAmount, Subtotal = amazonOrder.ItemAmount, DiscountAmount = amazonOrder.ItemDiscountAmount, ShippingTax = amazonOrder.ShippingTax, ShippingTotal = amazonOrder.ShippingTotal, OrderEmail = amazonOrder.BuyerEmail, IsCancelled = false, SalesChannel = AmazonApp.SalesChannel, PaymentStatus = PaymentStatus.Paid, OrderDate = amazonOrder.PurchaseDate.HasValue ? amazonOrder.PurchaseDate : CurrentRequestData.Now }); }
private void GetOrderLines(AmazonOrder amazonOrder, ref Ecommerce.Entities.Orders.Order order) { foreach (AmazonOrderItem amazonOrderItem in amazonOrder.Items) { var orderLine = new OrderLine { Order = order, UnitPrice = amazonOrderItem.QuantityOrdered > 0 ? (amazonOrderItem.ItemPriceAmount / amazonOrderItem.QuantityOrdered) : 0, Price = amazonOrderItem.ItemPriceAmount, Name = amazonOrderItem.Title, Tax = amazonOrderItem.ItemTaxAmount, Discount = amazonOrderItem.PromotionDiscountAmount, Quantity = Decimal.ToInt32(amazonOrderItem.QuantityOrdered), SKU = amazonOrderItem.SellerSKU }; order.OrderLines.Add(orderLine); _session.Transact(session => session.Save(orderLine)); } }
private bool ProcessOrder(Order order, ref AmazonOrder amazonOrder, bool newOrder) { foreach (var update in _amazonUpdates.OrderBy(updates => updates.Order)) { if (!update.Update(amazonOrder, order)) { return(false); } } _amazonOrderService.SaveOrUpdate(amazonOrder); if (newOrder) { foreach (var orderPlaced in _onAmazonOrderPlaceds) { orderPlaced.OnAmazonOrderPlaced(amazonOrder); } } return(true); }
public void GetAmazonOrderDetails(Order rawOrder, ref AmazonOrder order, AddressData shippingAddress) { order.AmazonOrderId = !String.IsNullOrWhiteSpace(rawOrder.AmazonOrderId) ? rawOrder.AmazonOrderId : String.Empty; order.BuyerEmail = !String.IsNullOrWhiteSpace(rawOrder.BuyerEmail) ? rawOrder.BuyerEmail : String.Empty; order.BuyerName = !String.IsNullOrWhiteSpace(rawOrder.BuyerName) ? rawOrder.BuyerName : String.Empty; order.PurchaseDate = TimeZoneInfo.ConvertTime(rawOrder.PurchaseDate, TimeZoneInfo.Utc, CurrentRequestData.TimeZoneInfo); order.PaymentMethod = rawOrder.PaymentMethod.GetEnumByValue <AmazonPaymentMethod>(); order.SalesChannel = !String.IsNullOrWhiteSpace(rawOrder.SalesChannel) ? rawOrder.SalesChannel : String.Empty; order.OrderType = !String.IsNullOrWhiteSpace(rawOrder.OrderType) ? rawOrder.OrderType : String.Empty; order.OrderTotalAmount = (rawOrder.OrderTotal != null && rawOrder.OrderTotal.Amount != null) ? Decimal.Parse(rawOrder.OrderTotal.Amount, (new CultureInfo("en-GB", false))) : 0; order.OrderCurrency = (rawOrder.OrderTotal != null && rawOrder.OrderTotal.Amount != null) ? rawOrder.OrderTotal.CurrencyCode : String.Empty; order.MarketplaceId = !String.IsNullOrWhiteSpace(rawOrder.MarketplaceId) ? rawOrder.MarketplaceId : String.Empty; order.ShipServiceLevel = !String.IsNullOrWhiteSpace(rawOrder.ShipServiceLevel) ? rawOrder.ShipServiceLevel : String.Empty; order.ShipmentServiceLevelCategory = !String.IsNullOrWhiteSpace(rawOrder.ShipmentServiceLevelCategory) ? rawOrder.ShipmentServiceLevelCategory : String.Empty; SetShippingAddress(order, shippingAddress); order.NumberOfItemsUnshipped = rawOrder.NumberOfItemsUnshipped; order.NumberOfItemsShipped = rawOrder.NumberOfItemsShipped; order.FulfillmentChannel = rawOrder.FulfillmentChannel.GetEnumByValue <AmazonFulfillmentChannel>(); order.LastUpdatedDate = TimeZoneInfo.ConvertTime(rawOrder.LastUpdateDate, TimeZoneInfo.Utc, CurrentRequestData.TimeZoneInfo); }
/// <summary> /// Creates an incoming payment. /// </summary> /// <param name="cardCode">The BP's CardCode.</param> /// <param name="salesOrderNo">The salesOrder's DocNum</param> /// <param name="order">The Amazon order object</param> /// <returns>Payment DocNum on success, -1 on error.</returns> public string CreatePayment(string cardCode, string salesOrderNo, AmazonOrder order) { Recordset rs; string DocEntry = null, DocNum = null, q; try { // If incoming payment exists with AmzOrderId, log and return q = "usp_MarketplaceGetIncomingPaymentByAmazonOrderID '" + order.AmazonOrderId + "'"; rs = (Recordset)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.BoRecordset); rs.DoQuery(q); if (!(rs.EoF)) // Invoice exists { _amazonOrderLogRepository.LogEvent( order.AmazonOrderId, "Incoming Payment #" + rs.Fields.Item(0).Value.ToString() + " already exists in SAP.", nameof(LogEventLevel.Information), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); return(rs.Fields.Item(0).Value.ToString()); } rs = null; DIAPI_Objects.Payment = (Payments)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.oIncomingPayments); DIAPI_Objects.Payment.Series = 12; DIAPI_Objects.Payment.CardCode = cardCode; // Mandatory DIAPI_Objects.Payment.CashSum = 0; // Mandatory (DocTotal Invoice) DIAPI_Objects.Payment.DocDate = DateTime.Now; DIAPI_Objects.Payment.Remarks = order.AmazonOrderId; DIAPI_Objects.Payment.CounterReference = salesOrderNo; // Bank Transfer DIAPI_Objects.Payment.TransferAccount = "_SYS00000001076"; DIAPI_Objects.Payment.TransferDate = DateTime.Now; DIAPI_Objects.Payment.TransferReference = order.AmazonOrderId; // if shipping state is CA, use OrderTotal (includes tax and freight). if (string.Equals(order.StateOrRegion, "ca", StringComparison.OrdinalIgnoreCase) || string.Equals(order.StateOrRegion, "california", StringComparison.OrdinalIgnoreCase)) { DIAPI_Objects.Payment.TransferSum = Decimal.ToDouble(order.OrderTotal); } else // Non-CA, so omit tax. Generate order total from the sum of totalItemPrice + totalShipCost { double totalItemPrice = 0, totalShipCost = 0; foreach (var l in order.OrderItems) { totalItemPrice += Decimal.ToDouble(l.ItemPrice); totalShipCost += Decimal.ToDouble(l.ShippingPrice); } DIAPI_Objects.Payment.TransferSum = totalItemPrice + totalShipCost; } RetCode = DIAPI_Objects.Payment.Add(); if (RetCode != 0) { DIAPI_Objects.Company.GetLastError(out errCode, out errMsg); _amazonOrderLogRepository.LogEvent( order.AmazonOrderId, errCode + " - " + errMsg + " - Incoming payment was not created.", nameof(LogEventLevel.Critical), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); DocNum = RetCode.ToString(); // return err num } else { // return DocEntry of new payment DIAPI_Objects.Company.GetNewObjectCode(out DocEntry); // NOTE: pass DocEntry to proc to get payment DocNum for log q = "usp_MarketplaceGetDocNum " + DocEntry + ", 'Pmt'"; rs = (Recordset)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.BoRecordset); rs.DoQuery(q); if (!(rs.EoF)) { DocNum = rs.Fields.Item(0).Value.ToString(); } _amazonOrderLogRepository.LogEvent( order.AmazonOrderId, String.Format("Incoming Payment {0} was created.", DocNum), nameof(LogEventLevel.Information), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); rs = null; } _unitOfWorkMarketplace.Commit(); return(DocNum); } catch (Exception ex) { _amazonOrderLogRepository.LogEvent( order.AmazonOrderId, ex.GetType().Name + " - " + ex.Message + " - Incoming payment was not created.", nameof(LogEventLevel.Critical), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); return("-1"); // error } }
/// <summary> /// Create SAP Sales Order /// </summary> /// <param name="cardCode">The CardCode for the BP.</param> /// <param name="o">The Amazon order object</param> /// <returns>Dictionary with DocEntry and DocNum of the sales order.</returns> public Dictionary <string, string> CreateSalesOrder(string cardCode, AmazonOrder o) { double totalItemPrice = 0, totalItemTax = 0, totalShipCost = 0, totalShipTax = 0; string DocEntry = null, q; int DocNum = 0; Dictionary <string, string> SalesOrderNums = new Dictionary <string, string>(); Recordset rs; try { // If sales order exists with AmzOrderId, log and return q = "usp_MarketplaceGetOrderDocNumByAmazonOrderID '" + o.AmazonOrderId + "'"; rs = (Recordset)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.BoRecordset); rs.DoQuery(q); if (!(rs.EoF)) // sales order exists { _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, "Invoice #" + rs.Fields.Item(0).Value.ToString() + " already exists in SAP.", nameof(LogEventLevel.Warning), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); SalesOrderNums.Add("DocNum", rs.Fields.Item(0).Value.ToString()); SalesOrderNums.Add("DocEntry", rs.Fields.Item(1).Value.ToString()); // Check if sales order total matches Amazon order total var validInvTotal = Decimal.TryParse(rs.Fields.Item(2).Value.ToString(), out decimal invTotal); if (Decimal.Compare(invTotal, o.OrderTotal) != 0) { bool shipToWA = false; if (o.StateOrRegion == "WA" || o.StateOrRegion == "Washington") { shipToWA = true; } _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, (shipToWA ? "Shipped to WA: " : "") + "Sales order total $" + invTotal.ToString() + " doesn't equal Amazon-order total of $" + o.OrderTotal.ToString() + ". Please verify that this isn't an error.", nameof(LogEventLevel.Warning), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); } _unitOfWorkMarketplace.Commit(); return(SalesOrderNums); } rs = null; DIAPI_Objects.Order = (Documents)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.oOrders); DIAPI_Objects.Order.CardCode = cardCode; DIAPI_Objects.Order.NumAtCard = o.AmazonOrderId.Trim(); DIAPI_Objects.Order.HandWritten = BoYesNoEnum.tNO; DIAPI_Objects.Order.DocDate = DateTime.Now; DIAPI_Objects.Order.DocDueDate = DateTime.Now; DIAPI_Objects.Order.DocCurrency = "$"; DIAPI_Objects.Order.SalesPersonCode = 68; // Amazon slpcode DIAPI_Objects.Order.UserFields.Fields.Item("U_LeadSource").Value = "29"; // Calculate shipping foreach (var l in o.OrderItems) { totalShipCost += Decimal.ToDouble(l.ShippingPrice); //totalShipTax += Decimal.ToDouble(l.ShippingTax); } DIAPI_Objects.Order.Expenses.ExpenseCode = 1; DIAPI_Objects.Order.Expenses.LineTotal = totalShipCost; DIAPI_Objects.Order.Expenses.Add(); bool partFound = false; foreach (var line in o.OrderItems) { q = "usp_findPartBySKU '" + line.VendorSKU + "'"; rs = (Recordset)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.BoRecordset); rs.DoQuery(q); if (!(rs.EoF)) { DIAPI_Objects.Order.Lines.ItemCode = rs.Fields.Item(0).Value.ToString(); DIAPI_Objects.Order.Lines.Quantity = Decimal.ToDouble(line.QuantityOrdered); DIAPI_Objects.Order.Lines.WarehouseCode = "DS1"; // Set tax // flag "Shipping to CA, but no sales tax charged" if ((string.Equals(o.StateOrRegion, "ca", StringComparison.OrdinalIgnoreCase) || string.Equals(o.StateOrRegion, "california", StringComparison.OrdinalIgnoreCase)) && line.ItemTax == 0) { DIAPI_Objects.Order.Lines.TaxCode = "Exempt"; DIAPI_Objects.Order.Lines.TaxTotal = 0; _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, "Adding " + line.VendorSKU + " - Shipping address is CA, but no sales tax was charged.", nameof(LogEventLevel.Information), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); } else if (!string.Equals(o.StateOrRegion, "ca", StringComparison.OrdinalIgnoreCase) && !string.Equals(o.StateOrRegion, "california", StringComparison.OrdinalIgnoreCase)) { // no tax outside of california DIAPI_Objects.Order.Lines.TaxCode = "Exempt"; DIAPI_Objects.Order.Lines.TaxTotal = 0; } else // California { // Set tax DIAPI_Objects.Order.Lines.TaxCode = "CA"; DIAPI_Objects.Order.Lines.TaxTotal = Decimal.ToDouble(line.ItemTax); } totalItemPrice += Decimal.ToDouble(line.ItemPrice); // add ItemPrice to total // Amazon ItemPrice = Quantity * ItemPrice DIAPI_Objects.Order.Lines.LineTotal = Decimal.ToDouble(line.ItemPrice); DIAPI_Objects.Order.Lines.Add(); partFound = true; _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, String.Format("{0} was added to sales order", line.VendorSKU), nameof(LogEventLevel.Information), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); } else // SKU not found { // update return Dictionary with 'ActionRequired' flag if (!SalesOrderNums.ContainsKey("ActionRequired")) { SalesOrderNums.Add("ActionRequired", "true"); } else { SalesOrderNums["ActionRequired"] = "true"; } _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, String.Format("{0} was not found. Please add manually", line.VendorSKU), nameof(LogEventLevel.Error), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); } } rs = null; if (!partFound) { DIAPI_Objects.Order.Lines.ItemCode = "PLCHLDR"; DIAPI_Objects.Order.Lines.ItemDescription = "Placeholder"; DIAPI_Objects.Order.Lines.Quantity = 1; DIAPI_Objects.Order.Lines.UnitPrice = 0; DIAPI_Objects.Order.Lines.Add(); _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, "Unable to find SKUs for sales order, so a placeholder was added.", nameof(LogEventLevel.Error), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); } // Override OrderTotal // if shipping state is not CA, ignore tax and generate order total from the sum of all totalItemPrice + totalShipCost if (string.Equals(o.StateOrRegion, "ca", StringComparison.OrdinalIgnoreCase) || string.Equals(o.StateOrRegion, "california", StringComparison.OrdinalIgnoreCase)) { DIAPI_Objects.Order.DocTotal = Decimal.ToDouble(o.OrderTotal); } else { DIAPI_Objects.Order.DocTotal = totalItemPrice + totalShipCost; } RetCode = DIAPI_Objects.Order.Add(); if (RetCode != 0) { DIAPI_Objects.Company.GetLastError(out errCode, out errMsg); _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, errCode + " - " + errMsg + " - Sales order was not created.", nameof(LogEventLevel.Critical), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); if (!SalesOrderNums.ContainsKey("ActionRequired")) { SalesOrderNums.Add("ActionRequired", "true"); } else { SalesOrderNums["ActionRequired"] = "true"; } DocEntry = RetCode.ToString(); // return err num } else { // return DocEntry of new Invoice DIAPI_Objects.Company.GetNewObjectCode(out DocEntry); // NOTE: pass DocEntry to proc to get sales-order DocNum for log, but return DocEntry q = "usp_MarketplaceGetDocNum " + DocEntry + ", 'SO'"; rs = (Recordset)DIAPI_Objects.Company.GetBusinessObject(BoObjectTypes.BoRecordset); rs.DoQuery(q); if (!(rs.EoF)) { DocNum = Convert.ToInt32(rs.Fields.Item(0).Value); } SalesOrderNums.Add("DocEntry", DocEntry); SalesOrderNums.Add("DocNum", DocNum.ToString()); _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, String.Format("Sales order {0} was created. Please verify addresses, pricing, warehouses and shipping.", DocNum), nameof(LogEventLevel.Information), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); rs = null; } _unitOfWorkMarketplace.Commit(); // return Dictionary with sales-order DocNum and DocEntry return(SalesOrderNums); } catch (Exception ex) { _amazonOrderLogRepository.LogEvent( o.AmazonOrderId, String.Format("{0} - Sales order was not created.", ex.GetType().Name + " - " + ex.Message), nameof(LogEventLevel.Critical), "Bast", "DIAPI_Services", StackExtensions.GetCurrentMethod(), "HAL 9000"); if (!SalesOrderNums.ContainsKey("ActionRequired")) { SalesOrderNums.Add("ActionRequired", "true"); } else { SalesOrderNums["ActionRequired"] = "true"; } rs = null; return(SalesOrderNums); } }