/// <summary>
            /// Adds or updates reason code lines.
            /// </summary>
            /// <param name="reasonCodeLinesToUpdate">The reason code lines to update.</param>
            /// <param name="reasonCodeLines">The reason code lines.</param>
            /// <param name="transactionId">The transaction id.</param>
            /// <param name="parentLineId">The parent line id.</param>
            /// <param name="reasonCodeLineType">The reason code line type.</param>
            internal static void AddOrUpdateReasonCodeLinesHelper(ICollection <ReasonCodeLine> reasonCodeLinesToUpdate, IEnumerable <ReasonCodeLine> reasonCodeLines, string transactionId, string parentLineId, ReasonCodeLineType reasonCodeLineType)
            {
                var reasonCodeLinesToUpdateById = reasonCodeLinesToUpdate.ToDictionary(r => r.ReasonCodeId);

                foreach (ReasonCodeLine reasonCodeLine in reasonCodeLines)
                {
                    // we cannot add two reason code lines with same reason code identifier
                    // in this case, it should be an update
                    if (string.IsNullOrWhiteSpace(reasonCodeLine.LineId) &&
                        !reasonCodeLinesToUpdateById.ContainsKey(reasonCodeLine.ReasonCodeId))
                    {
                        reasonCodeLine.LineId = Guid.NewGuid().ToString("N");

                        ReasonCodeLine newReasonCodeLine = new ReasonCodeLine();
                        newReasonCodeLine.CopyFrom(reasonCodeLine);
                        newReasonCodeLine.ParentLineId  = parentLineId;
                        newReasonCodeLine.TransactionId = transactionId;
                        newReasonCodeLine.LineType      = reasonCodeLineType;

                        // Add new reason code line to sales tranaction.
                        reasonCodeLinesToUpdate.Add(newReasonCodeLine);
                    }
                    else
                    {
                        // Update the corresponding reason code line if changed.
                        ReasonCodeLine reasonCodeLineToUpdate;
                        if (reasonCodeLinesToUpdateById.TryGetValue(reasonCodeLine.ReasonCodeId, out reasonCodeLineToUpdate))
                        {
                            reasonCodeLineToUpdate.CopyPropertiesFrom(reasonCodeLine);
                            reasonCodeLineToUpdate.IsChanged = true;
                        }
                    }
                }
            }
示例#2
0
            /// <summary>
            /// Gets the return reason code for the transaction or empty, if none.
            /// </summary>
            /// <param name="salesTransaction">The sales transaction to get the reason code from.</param>
            /// <param name="context">The request context.</param>
            /// <returns>The reason code for the transaction or empty if none.</returns>
            private static string GetReturnReasonCodeId(SalesTransaction salesTransaction, RequestContext context)
            {
                // transaction server expects only one reason code, so we just take it from the first line that has reason codes
                SalesLine firstLineWithReasonCode = salesTransaction.SalesLines.FirstOrDefault(sl => sl.ReasonCodeLines.Any());

                GetReturnOrderReasonCodesDataRequest getReturnOrderReasonCodesDataRequest = new GetReturnOrderReasonCodesDataRequest(QueryResultSettings.AllRecords);
                ReadOnlyCollection <ReasonCode>      returnOrderReasonCodes = context.Runtime.Execute <EntityDataServiceResponse <ReasonCode> >(getReturnOrderReasonCodesDataRequest, context).PagedEntityCollection.Results;

                ReasonCodeLine returnReasonCodeLine = firstLineWithReasonCode != null
                    ? firstLineWithReasonCode.ReasonCodeLines.FirstOrDefault(reasonCodeLine => returnOrderReasonCodes.Any(returnOrderReasonCode => returnOrderReasonCode.ReasonCodeId == reasonCodeLine.ReasonCodeId))
                    : null;

                return((returnReasonCodeLine != null && !string.IsNullOrWhiteSpace(returnReasonCodeLine.ReasonCodeId)) ? returnReasonCodeLine.ReasonCodeId : null);
            }