Order MakeRecurringCopy(Order order, int newQuantity) { var recurringOrder = new Order(order.Currency, order.VatCountry, order.Language); //recurringOrder.ForceCalculate = true; recurringOrder.LanguageId = order.LanguageId; recurringOrder.IsCart = true; recurringOrder.CheckoutPageId = order.CheckoutPageId; recurringOrder.ShopId = order.ShopId; recurringOrder.OrderContextId = order.OrderContextId; recurringOrder.CurrencyCode = order.CurrencyCode; recurringOrder.CurrencyRate = order.CurrencyRate; recurringOrder.CurrencyName = order.CurrencyName; recurringOrder.ShippingMethodId = order.ShippingMethodId; recurringOrder.PaymentMethodId = order.PaymentMethodId; recurringOrder.ShippingMethod = order.ShippingMethod; recurringOrder.PaymentMethod = order.PaymentMethod; recurringOrder.ShippingMethodDescription = order.ShippingMethodDescription; recurringOrder.PaymentMethodDescription = order.PaymentMethodDescription; recurringOrder.ShippingMethodCode = order.ShippingMethodCode; recurringOrder.ShippingMethodAgentCode = order.ShippingMethodAgentCode; recurringOrder.ShippingMethodAgentServiceCode = order.ShippingMethodAgentServiceCode; recurringOrder.PaymentMethodCode = order.PaymentMethodCode; recurringOrder.PaymentMethodTermsCode = order.PaymentMethodTermsCode; recurringOrder.SavedCardId = order.SavedCardId; //recurringOrder.RecalculateDiscountsNeeded = true; //recurringOrder.RecalculateTaxesNeeded = true; //recurringOrder.RecalculateLoyaltyPointRewardsNeeded = true; recurringOrder.RecurringOrderId = order.RecurringOrderId; recurringOrder.Errors = new ArrayList(); foreach (OrderLine orderLineToCopy in order.OrderLines.Where(ol => !ol.HasType(OrderLineType.Tax))) { var newOrderLine = orderLineToCopy.Clone(); newOrderLine.Id = ""; newOrderLine.Order = recurringOrder; newOrderLine.OrderLineType = orderLineToCopy.OrderLineType; newOrderLine.Modified = DateTime.Now; var orderLineFieldValues = new OrderLineFieldValueCollection(); orderLineFieldValues.Add(new OrderLineFieldValue("MaxQuantity", newQuantity.ToString())); newOrderLine.OrderLineFieldValues = orderLineFieldValues; recurringOrder.OrderLines.Add(newOrderLine); } // Remove non-active and non-existing products Dynamicweb.Ecommerce.Services.Orders.RemoveNoneActiveProducts(recurringOrder); // If order has no products return nothing if (recurringOrder.OrderLines.CountOnlyProducts == 0) { return null; } // ############################################ // Prepare Orderline prices. // ############################################ var prods = new Dictionary(); foreach (OrderLine ol in recurringOrder.OrderLines) { if (ol.HasType(OrderLineType.Product)) { if (!prods.ContainsKey(ol.Product)) { prods.Add(ol.Product, ol.Quantity); } } } Dynamicweb.Ecommerce.Prices.PriceManager.PreparePrices(prods); /* var orderFieldValues = new OrderFieldValueCollection(); foreach (OrderFieldValue orderField in order.OrderFieldValues) orderFieldValues.Add(new OrderFieldValue(orderField.OrderField, orderField.Value)); recurringOrder.OrderFieldValues = orderFieldValues; */ // ########################### // Customer // ########################### recurringOrder.CustomerRefId = order.CustomerRefId; recurringOrder.CustomerVatRegNumber = order.CustomerVatRegNumber; recurringOrder.CustomerCompany = order.CustomerCompany; recurringOrder.CustomerName = order.CustomerName; recurringOrder.CustomerAddress = order.CustomerAddress; recurringOrder.CustomerAddress2 = order.CustomerAddress2; recurringOrder.CustomerZip = order.CustomerZip; recurringOrder.CustomerCity = order.CustomerCity; recurringOrder.CustomerCountry = order.CustomerCountry; recurringOrder.CustomerCountryCode = order.CustomerCountryCode; recurringOrder.CustomerEan = order.CustomerEan; recurringOrder.CustomerPhone = order.CustomerPhone; recurringOrder.CustomerFax = order.CustomerFax; recurringOrder.CustomerCell = order.CustomerCell; recurringOrder.CustomerEmail = order.CustomerEmail; recurringOrder.CustomerComment = order.CustomerComment; recurringOrder.CustomerNumber = order.CustomerNumber; recurringOrder.CustomerRegion = order.CustomerRegion; recurringOrder.CustomerAccessUserId = order.CustomerAccessUserId; recurringOrder.CustomerAccessUserUserName = order.CustomerAccessUserUserName; recurringOrder.SecondaryUserId = order.SecondaryUserId; // ########################### // Delivery // ########################### recurringOrder.DeliveryCompany = order.DeliveryCompany; recurringOrder.DeliveryName = order.DeliveryName; recurringOrder.DeliveryAddress = order.DeliveryAddress; recurringOrder.DeliveryAddress2 = order.DeliveryAddress2; recurringOrder.DeliveryZip = order.DeliveryZip; recurringOrder.DeliveryCity = order.DeliveryCity; recurringOrder.DeliveryCountry = order.DeliveryCountry; recurringOrder.DeliveryCountryCode = order.DeliveryCountryCode; recurringOrder.DeliveryPhone = order.DeliveryPhone; recurringOrder.DeliveryFax = order.DeliveryFax; recurringOrder.DeliveryCell = order.DeliveryCell; recurringOrder.DeliveryEmail = order.DeliveryEmail; recurringOrder.DeliveryRegion = order.DeliveryRegion; recurringOrder.Complete = false; //Dynamicweb.Ecommerce.Cart.Frontend.HandleDiscountAndTaxes(recurringOrder, true); Dynamicweb.Ecommerce.Services.Orders.ForcePriceRecalculation(recurringOrder); Dynamicweb.Ecommerce.Services.Orders.Save(recurringOrder); Dynamicweb.Ecommerce.Common.Context.SetCart(recurringOrder); //recurringOrder.StateId = GetDefaultState(recurringOrder).Id; //Response.Write("StateId:" + recurringOrder.StateId + "
\n"); return recurringOrder; }