public Order() { CreatedOn = DateTime.UtcNow; OrderLines = new OrderLineCollection(); Courses = new CourseCollection(); Guests = new GuestCollection(); }
private static void ProcessOrderLines(XmlDocument response, Order order, OrderLineCollection discountOrderLines) { Logger.Instance.Log(ErrorLevel.DebugInfo, "ProcessOrderLines..."); // TODO: removeee XmlNode orderNode = response.SelectSingleNode("//item [@table='EcomOrders']"); var orderCreated = bool.Parse(orderNode.SelectSingleNode("column [@columnName='OrderCreated']").InnerText); XmlNodeList orderLinesNodes = response.SelectNodes("//item [@table='EcomOrderLines']"); if (orderLinesNodes != null && orderLinesNodes.Count > 0)//Process OrderLines { List <string> orderlineIDs = new List <string>(); List <OrderLine> orderLines = order.OrderLines.ToList(); foreach (XmlNode orderLineNode in orderLinesNodes) { XmlNode xnOrderLineType = orderLineNode.SelectSingleNode("column [@columnName='OrderLineType']"); if (xnOrderLineType == null) { xnOrderLineType = orderLineNode.SelectSingleNode("column [@columnName='OrderLineTypeId']"); } string orderLineType = xnOrderLineType.InnerText; if (orderLineType == "0" || string.IsNullOrWhiteSpace(orderLineType)) { Logger.Instance.Log(ErrorLevel.DebugInfo, "ProcessOrderLines 0 type..."); // TODO: removeee ProcessProductOrderLines(order, orderlineIDs, orderLines, orderLineNode, orderCreated); } if (orderLineType == "1" || orderLineType == "3") //1=order discount, 3=Product Discount { Logger.Instance.Log(ErrorLevel.DebugInfo, "ProcessOrderLines 1, 3 type..."); // TODO: removeee ProcessDiscountOrderLines(order, discountOrderLines, orderLineNode, orderLineType, orderCreated); } } // Remove deleted OrderLines for (int i = order.OrderLines.Count - 1; i >= 0; i--) { var orderLine = order.OrderLines[i]; if (string.IsNullOrWhiteSpace(orderLine.Id)) { continue; } if (orderLine.Type == "1" || orderLine.Type == "3") //1=order discount, 3=Product Discount { continue; } if (!orderlineIDs.Contains(orderLine.Id)) { order.OrderLines.Remove(orderLine); orderLine.Delete(); } } } }
public Order() { CreatedOn = DateTime.UtcNow; OrderLines = new OrderLineCollection(); }
private static void ProcessDiscountOrderLines(Order order, OrderLineCollection discountOrderLines, XmlNode orderLineNode, string orderLineType, bool orderCreated) { Logger.Instance.Log(ErrorLevel.DebugInfo, "ProcessDiscountOrderLines..."); // TODO: removeee string orderLineId = orderLineNode.SelectSingleNode("column [@columnName='OrderLineId']")?.InnerText; string orderLineParentId = orderLineNode.SelectSingleNode("column [@columnName='OrderLineParentLineID']")?.InnerText; try { //parent id //discount name //discount quantity //discount "price" with vat // discount "price without vat double?dAux; var orderLine = new OrderLine { Order = order, OrderId = order.Id, Modified = DateTime.Now, DiscountId = (string.IsNullOrEmpty(orderLineId) ? orderLineParentId : orderLineId), Quantity = 1, Type = orderLineType, ProductName = Settings.Instance.TextForDiscounts }; double multiplier = 1; if (orderLineType == "3") //1=order discount, 3=Product Discount { //string parentProductId = orderLineNode.SelectSingleNode("column [@columnName='OrderLineProductNumber']").InnerText; //foreach (var prod uctOrderLine in order.OrderLines) //{ // if (productOrderLine.ProductId == parentProductId) // { // orderLine.ParentLineId = productOrderLine.Id; // } //} string parentProductNumber = orderLineNode.SelectSingleNode("column [@columnName='OrderLineProductNumber']").InnerText; foreach (var productOrderLine in order.OrderLines) { if (string.Equals(productOrderLine.ProductNumber, parentProductNumber, StringComparison.OrdinalIgnoreCase)) { orderLine.ParentLineId = productOrderLine.Id; //orderLine.ProductId = productOrderLine.ProductId; //orderLine.ProductVariantId = productOrderLine.ProductVariantId; //orderLine.ProductNumber = productOrderLine.ProductNumber; // if the order is created in NAV, the price the comes back already has the multiplier in it if (!orderCreated) { multiplier = productOrderLine.Product?.GetUnitPriceMultiplier() ?? 1; } } } } dAux = ReadDouble(orderLineNode, "column [@columnName='OrderLineQuantity']"); if (dAux.HasValue) { orderLine.Quantity = dAux.Value; } double priceWithoutVAT = ReadDouble(orderLineNode, "column [@columnName='OrderLinePriceWithoutVAT']").Value *multiplier; double priceWithVAT = ReadDouble(orderLineNode, "column [@columnName='OrderLinePriceWithVAT']").Value *multiplier; orderLine.UnitPrice.PriceWithoutVAT = -Math.Abs(priceWithoutVAT / Math.Max(1, orderLine.Quantity)); orderLine.UnitPrice.PriceWithVAT = -Math.Abs(priceWithVAT / Math.Max(1, orderLine.Quantity)); orderLine.Price.PriceWithoutVAT = -Math.Abs(priceWithoutVAT); orderLine.Price.PriceWithVAT = -Math.Abs(priceWithVAT); //orderLine.Price.PriceWithVAT = // -Helpers.ParseDouble( // orderLineNode.SelectSingleNode("column [@columnName='OrderLineUnitPriceWithVAT']"). // InnerText); discountOrderLines.Add(orderLine); } catch (Exception anyError) { Logger.Instance.Log(ErrorLevel.Error, string.Format("Error processing order line. Error: '{0}' OrderLineId = {1}.", anyError, orderLineId)); throw; } }
private static void HandleIntegrationFailure(Order order, string failedState, string orderId, OrderLineCollection discountOrderLines) { if (Global.EnableCartCommunication(order.Complete)) { RemoveDiscounts(order); order.OrderLines.Add(discountOrderLines); } Logger.Instance.Log(ErrorLevel.Error, string.Format("Order with ID '{0}' was not created in the ERP system.", orderId)); HttpContext.Current.Session["LiveIntegration.OrderExportFailed"] = true; HttpContext.Current.Session["LiveIntegration.FailedOrderId"] = order.Id; if (!Settings.Instance.QueueOrdersToExport) { order.DowngradeToCart(); Dynamicweb.Ecommerce.Common.Context.SetCart(order); order.CartV2StepIndex = --order.CartV2StepIndex; order.Complete = false; } if (!string.IsNullOrWhiteSpace(failedState)) { order.StateId = failedState; } order.Save(); }
private static bool ProcessResponse(XmlDocument response, Order order, bool createOrder, string successState, string failedState) { // var orderParser = new OrderXmlParser(response); Logger.Instance.Log(ErrorLevel.DebugInfo, "Process response..."); // TODO: removeee var orderId = order == null ? "is null" : order.Id ?? "ID is null"; if (response == null || order == null) { if (createOrder) { // if must create order and no response or invalid order fail to sync Logger.Instance.Log(ErrorLevel.Error, string.Format("Response CreateOrder is null. Order = {0}", orderId)); return(false); } // nothing to do so work done return(true); } try { XmlNode orderNode = response.SelectSingleNode("//item [@table='EcomOrders']"); if (Global.EnableCartCommunication(order.Complete)) { // Set Order prices //order.AllowOverridePrices = true; try { //SetPrices(order, orderNode); SetCustomerNumber(order, orderNode); } catch (Exception ex) { Logger.Instance.Log(ErrorLevel.Error, string.Format("Exception setting prices: {0} Order = {1}", ex.Message, orderId)); } } SetCustomOrderFields(order, orderNode); var discountOrderLines = new OrderLineCollection(); if (Global.EnableCartCommunication(order.Complete)) { ProcessOrderLines(response, order, discountOrderLines); //order.OrderLines.Add(discountOrderLines); } if (createOrder) { AssignIntegrationOrderId(order, orderNode); var orderCreatedSuccessfully = bool.Parse(orderNode.SelectSingleNode("column [@columnName='OrderCreated']").InnerText); if (!orderCreatedSuccessfully) { HandleIntegrationFailure(order, failedState, orderId, discountOrderLines); } else { HandleIntegrationSuccess(order, successState); } } //else //{ // order.Save(); //} if (Global.EnableCartCommunication(order.Complete)) { //add discount orderlines to cache, to be added by the discountProvider HttpContext.Current.Session["LiveIntegrationDiscounts" + order.Id] = discountOrderLines; } } catch (Exception e) { Logger.Instance.Log(ErrorLevel.Error, string.Format("Error processing response. Error: '{0}' Order = {1}.", e, orderId)); return(false); } return(true); }