diff --git a/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/Dynamicweb.Ecommerce.DynamicwebLiveIntegration.csproj b/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/Dynamicweb.Ecommerce.DynamicwebLiveIntegration.csproj index 8365b8a..0e6cccb 100644 --- a/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/Dynamicweb.Ecommerce.DynamicwebLiveIntegration.csproj +++ b/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/Dynamicweb.Ecommerce.DynamicwebLiveIntegration.csproj @@ -1,6 +1,6 @@  - 10.4.35 + 10.4.36 1.0.0.0 Live Integration Live Integration diff --git a/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/OrderHandler.cs b/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/OrderHandler.cs index f1ab29e..e8c4323 100644 --- a/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/OrderHandler.cs +++ b/src/Dynamicweb.Ecommerce.DynamicwebLiveIntegration/OrderHandler.cs @@ -1,5 +1,6 @@ using Dynamicweb.Caching; using Dynamicweb.Core; +using Dynamicweb.Core.Helpers; using Dynamicweb.Ecommerce.DynamicwebLiveIntegration.Cache; using Dynamicweb.Ecommerce.DynamicwebLiveIntegration.Configuration; using Dynamicweb.Ecommerce.DynamicwebLiveIntegration.Connectors; @@ -131,8 +132,8 @@ private static ResponseCacheLevel GetOrderCacheLevel(Settings settings) // save this hash for next calls SaveOrderHash(settings, currentHash); - - XmlDocument response = GetResponse(settings, requestXml, order, createOrder, logger, out bool? requestCancelled, liveIntegrationSubmitType); + + XmlDocument response = GetResponse(settings, requestXml, order, createOrder, logger, out bool? requestCancelled, liveIntegrationSubmitType, out var errorMessage); if (response != null && !string.IsNullOrWhiteSpace(response.InnerXml)) { bool processResponseResult = ProcessResponse(settings, response, order, createOrder, successOrderStateId, failedOrderStateId, logger); @@ -144,7 +145,7 @@ private static ResponseCacheLevel GetOrderCacheLevel(Settings settings) // error occurred if (createOrder && (!requestCancelled.HasValue || !requestCancelled.Value)) { - HandleIntegrationFailure(settings, order, failedOrderStateId, orderId, null, logger); + HandleIntegrationFailure(settings, order, failedOrderStateId, orderId, null, logger, errorMessage); } Diagnostics.ExecutionTable.Current.Add("DynamicwebLiveIntegration.OrderHandler.UpdateOrder END"); @@ -265,10 +266,11 @@ private static OrderLine CreateOrderLine(Order order, string productNumber, Logg /// The order. /// if set to true [create order]. /// XmlDocument. - private static XmlDocument GetResponse(Settings settings, string requestXml, Order order, bool createOrder, Logger logger, out bool? requestCancelled, SubmitType submitType) + private static XmlDocument GetResponse(Settings settings, string requestXml, Order order, bool createOrder, Logger logger, out bool? requestCancelled, SubmitType submitType, out string? errorMessage) { XmlDocument response = null; - requestCancelled = null; + requestCancelled = null; + errorMessage = null; string orderIdentifier = Helpers.OrderIdentifier(order); @@ -287,10 +289,13 @@ private static XmlDocument GetResponse(Settings settings, string requestXml, Ord { response = Connector.CalculateOrder(settings, requestXml, order, createOrder, out Exception error, logger, submitType); - if (createOrder && error != null) + if (error is not null) { - string msg = !string.IsNullOrEmpty(error.Message) ? error.Message : error.ToString(); - Services.OrderDebuggingInfos.Save(order, $"ERP communication failed with error: {msg}", OrderErpCallFailed, DebuggingInfoType.Undefined); + errorMessage = !string.IsNullOrEmpty(error.Message) ? error.Message : error.ToString(); + if (createOrder) + { + Services.OrderDebuggingInfos.Save(order, $"ERP communication failed with error: {errorMessage}", OrderErpCallFailed, DebuggingInfoType.Undefined); + } } NotificationManager.Notify(Notifications.Order.OnAfterSendingOrderToErp, new Notifications.Order.OnAfterSendingOrderToErpArgs(order, createOrder, response, error, settings, logger)); @@ -320,7 +325,7 @@ private static XmlDocument GetResponse(Settings settings, string requestXml, Ord /// State of the failed. /// The order identifier. /// The discount order lines. - private static void HandleIntegrationFailure(Settings settings, Order order, string failedState, string orderId, OrderLineCollection discountOrderLines, Logger logger) + private static void HandleIntegrationFailure(Settings settings, Order order, string failedState, string orderId, OrderLineCollection discountOrderLines, Logger logger, string? errorMessage = null) { if (discountOrderLines != null && Global.EnableCartCommunication(settings, order.Complete)) { @@ -347,6 +352,11 @@ private static void HandleIntegrationFailure(Settings settings, Order order, str order.StateId = failedState; } + if (!string.IsNullOrEmpty(errorMessage)) + { + order.Comment += $"{DateTime.Now.ToString(DateHelper.DateFormatStringShort)}: ERP response: {errorMessage}{System.Environment.NewLine}"; + } + Services.Orders.Save(order); } @@ -652,7 +662,7 @@ private static void ProcessOrderLines(Settings settings, XmlDocument response, O { continue; } - linesToRemove.Add(orderLine); + linesToRemove.Add(orderLine); } foreach (var orderLine in linesToRemove) { @@ -1177,7 +1187,7 @@ private static void SetShippingWarning(Settings settings, Order order, XmlNode o var warning = node.InnerText; if (!string.IsNullOrEmpty(warning)) { - order.Comment = warning; + order.Comment += $"{DateTime.Now.ToString(DateHelper.DateFormatStringShort)}: {warning}.{System.Environment.NewLine} "; } } }