Ejemplo n.º 1
0
            /// <summary>
            /// Cancels a customer order on the headquarters.
            /// </summary>
            /// <param name="request">The save customer order request.</param>
            /// <returns>The customer order service default response.</returns>
            private static Response SaveCancellationOrder(SaveCustomerOrderRealtimeRequest request)
            {
                Response             response;
                SalesTransaction     salesTransaction     = request.SalesTransaction;
                ChannelConfiguration channelConfiguration = request.ChannelConfiguration;

                // Keep all charge line references
                List <ChargeLine> chargeLines = new List <ChargeLine>(salesTransaction.ChargeLines);

                if (!string.IsNullOrWhiteSpace(channelConfiguration.CancellationChargeCode))
                {
                    // Get all cancellation charges
                    var cancellationChargeLines = salesTransaction.ChargeLines
                                                  .Where(chargeLine => channelConfiguration.CancellationChargeCode.Equals(chargeLine.ChargeCode, StringComparison.OrdinalIgnoreCase))
                                                  .ToArray();

                    // Remove all non-cancellation charges from header - since AX will blindly use the charges to header as cancellation charges
                    salesTransaction.ChargeLines.Clear();
                    salesTransaction.ChargeLines.AddRange(cancellationChargeLines);
                }

                // Cancels order in headquarters
                response = CustomerOrderService.SaveCustomerOrderInHeadquarter(request);

                // Restore charge lines
                salesTransaction.ChargeLines.Clear();
                salesTransaction.ChargeLines.AddRange(chargeLines);

                return(response);
            }
Ejemplo n.º 2
0
            /// <summary>
            /// Processes a save customer order request.
            /// </summary>
            /// <param name="request">The save customer order request.</param>
            /// <returns>The customer order service default response.</returns>
            private static Response SaveCustomerOrder(SaveCustomerOrderRealtimeRequest request)
            {
                if (request == null)
                {
                    throw new ArgumentNullException("request");
                }

                if (request.SalesTransaction == null)
                {
                    throw new ArgumentException("SalesTransaction is not set in request", "request");
                }

                if (request.ChannelConfiguration == null)
                {
                    throw new ArgumentException("ChannelConfiguration is not set in request", "request");
                }

                SalesTransaction salesTransaction = request.SalesTransaction;

                if (salesTransaction.CustomerOrderMode == CustomerOrderMode.Cancellation)
                {
                    return(CustomerOrderService.SaveCancellationOrder(request));
                }

                return(SaveCustomerOrderInHeadquarter(request));
            }
Ejemplo n.º 3
0
            /// <summary>
            /// Processes a save customer order request in headquarter.
            /// </summary>
            /// <param name="request">The save customer order request.</param>
            /// <returns>The customer order service default response.</returns>
            private static Response SaveCustomerOrderInHeadquarter(SaveCustomerOrderRealtimeRequest request)
            {
                string                      xmlRequest;
                SalesTransaction            salesTransaction;
                ReadOnlyCollection <object> resultCollection;

                salesTransaction = request.SalesTransaction;

                // Converts transaction into xml request blob
                xmlRequest = SalesTransactionSerializationHelper.ConvertSalesTransactionToXml(
                    salesTransaction,
                    request.CardTokenInfo,
                    request.CardAuthorizationTokenResponseXml ?? string.Empty,
                    request.RequestContext);

                // Calls TS API
                resultCollection = new TransactionServiceClient(request.RequestContext).SaveCustomerOrder(
                    salesTransaction.SalesId,
                    salesTransaction.CustomerOrderType,
                    salesTransaction.CustomerOrderMode,
                    xmlRequest);

                switch (salesTransaction.CustomerOrderMode)
                {
                case CustomerOrderMode.QuoteCreateOrEdit:
                case CustomerOrderMode.CustomerOrderCreateOrEdit:
                case CustomerOrderMode.Return:
                    // Sets Sales Id for the order on the transaction
                    salesTransaction.SalesId           = (string)resultCollection[0];
                    salesTransaction.CustomerOrderType = salesTransaction.CustomerOrderMode == CustomerOrderMode.QuoteCreateOrEdit
                            ? CustomerOrderType.Quote
                            : CustomerOrderType.SalesOrder;
                    break;

                // no return value for pick up and cancellation
                case CustomerOrderMode.Cancellation:
                case CustomerOrderMode.Pickup:
                    break;

                default:
                    throw new NotSupportedException(salesTransaction.CustomerOrderMode + " type for customer order is not supported.");
                }

                return(new NullResponse());
            }