Exemplo n.º 1
0
        /// <summary>
        /// Saves as purchase order. This method should be called when recurring payment is processed. So for instance if it is a monthly plan,
        /// call this method on monthly basis.
        /// </summary>
        public virtual PurchaseOrder SaveAsPurchaseOrder()
        {
            Guid customerId   = this.CustomerId;
            int  orderGroupId = this.OrderGroupId;

            using (TransactionScope scope = new TransactionScope())
            {
                // Clone the object
                // need to set meta data context before cloning
                MetaDataContext.DefaultCurrent = OrderContext.MetaDataContext;
                PaymentPlan plan = (PaymentPlan)this.Clone();
                plan.SetParent(plan);

                // Second: create new purchase order
                PurchaseOrder purchaseOrder = (PurchaseOrder)OrderContext.Current.PurchaseOrderClassInfo.CreateInstance();

                // Third: migrate order group
                purchaseOrder.Initialize((OrderGroup)plan);

                // relate purchase order to this payment plan
                purchaseOrder.ParentOrderGroupId = orderGroupId;

                // Set tracking number
                if (this.OrderNumberMethod == null)
                {
                    this.OrderNumberMethod = new CreateOrderNumber(GenerateOrderNumber);
                }

                purchaseOrder.TrackingNumber = OrderNumberMethod(this);
                purchaseOrder.Status         = OrderConfiguration.Instance.NewOrderStatus;

                // Save the new purchase order
                purchaseOrder.AcceptChanges();

                orderGroupId = purchaseOrder.OrderGroupId;

                scope.Complete();
            }

            return(OrderContext.Current.GetPurchaseOrder(customerId, orderGroupId));
        }