Ejemplo n.º 1
0
        /// <summary>
        /// Does the express checkout.
        /// </summary>
        /// <param name="order">The order.</param>
        /// <param name="authorizeOnly">if set to <c>true</c> [authorize only].</param>
        /// <param name="userName">Name of the user.</param>
        /// <returns></returns>
        public static Transaction DoExpressCheckout(Order order, bool authorizeOnly, string userName)
        {
            PaymentService paymentService = new PaymentService();
            Transaction    transaction    = paymentService.DoExpressCheckout(order, authorizeOnly);

            order.OrderStatusDescriptorId = (int)OrderStatus.ReceivedPaymentProcessingOrder;
            order.Save(userName);

            try {
                //Adjust the Inventory
                Sku sku;
                foreach (OrderItem orderItem in order.OrderItemCollection)
                {
                    sku           = new Sku(SKU, orderItem.Sku);
                    sku.Inventory = sku.Inventory - orderItem.Quantity;
                    sku.Save(SYSTEM);
                    ProductCache.RemoveSKUFromCache(orderItem.Sku);
                }
                //Send out the messages
                MessageService messageService = new MessageService();
                messageService.SendOrderReceivedNotificationToCustomer(order);
                messageService.SendOrderReceivedNotificationToMerchant(order);
            }
            catch (Exception ex) {
                //swallow the exception here because the transaction is saved
                //and, while this is an inconvenience, it's not critical
                Logger.Error(typeof(OrderController).Name + ".DoExpressCheckout", ex);
            }
            return(transaction);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Refunds the specified transaction.
        /// </summary>
        /// <param name="transaction">The transaction.</param>
        /// <param name="refundedOrder">The order the refund should be applied to.</param>
        /// <param name="userName">Name of the user.</param>
        public static void Refund(Transaction transaction, Order refundedOrder, string userName)
        {
            Order          order             = new Order(transaction.OrderId);
            PaymentService paymentService    = new PaymentService();
            Transaction    refundTransaction = paymentService.Refund(transaction, refundedOrder);

            refundedOrder.Save(userName);
            //set the orderid for the refund
            foreach (OrderItem orderItem in refundedOrder.OrderItemCollection)
            {
                orderItem.OrderId = refundedOrder.OrderId;
            }
            refundedOrder.OrderItemCollection.SaveAll(userName);
            //set the orderId to the refunded orderId
            refundTransaction.OrderId = refundedOrder.OrderId;
            refundTransaction.Save(userName);
            Guid userGuid = new Guid(Membership.GetUser(order.UserName).ProviderUserKey.ToString());

            foreach (OrderItem orderItem in refundedOrder.OrderItemCollection)
            {
                new Product(orderItem.ProductId);
                //put the stock back
                Sku sku = new Sku(Sku.Columns.SkuX, orderItem.Sku);
                sku.Inventory = sku.Inventory + orderItem.Quantity;
                sku.Save(userName);
                ProductCache.RemoveSKUFromCache(orderItem.Sku);
                //remove the access control
                DownloadCollection downloadCollection = new ProductController().FetchAssociatedDownloadsByProductIdAndForPurchase(orderItem.ProductId);
                if (downloadCollection.Count > 0)
                {
                    foreach (Download download in downloadCollection)
                    {
                        new DownloadAccessControlController().Delete(userGuid, download.DownloadId);
                    }
                }
            }
            if (refundedOrder.Total == order.Total)
            {
                order.OrderStatusDescriptorId = (int)OrderStatus.OrderFullyRefunded;
            }
            else
            {
                order.OrderStatusDescriptorId = (int)OrderStatus.OrderPartiallyRefunded;
            }
            order.Save(userName);
            //Add an OrderNote
            OrderNote orderNote = new OrderNote();

            orderNote.OrderId = order.OrderId;
            orderNote.Note    = Strings.ResourceManager.GetString(ORDER_REFUNDED);
            orderNote.Save(userName);
            //send off the notifications
            MessageService messageService = new MessageService();

            messageService.SendOrderRefundToCustomer(refundedOrder);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Commits the standard transaction.
        /// </summary>
        /// <param name="order">The order.</param>
        /// <param name="transactionId">The transaction id.</param>
        /// <param name="grossAmount">The gross amount.</param>
        /// <returns></returns>
        public static Transaction CommitStandardTransaction(Order order, string transactionId, decimal grossAmount)
        {
            order.OrderStatusDescriptorId = (int)OrderStatus.ReceivedPaymentProcessingOrder;
            order.Save(SYSTEM);
            Transaction transaction = new Transaction();

            transaction.OrderId = order.OrderId;
            transaction.TransactionTypeDescriptorId = (int)TransactionType.Charge;
            transaction.PaymentMethod        = PAYPAL;
            transaction.GatewayName          = PAYPAL_STANDARD;
            transaction.GatewayResponse      = SUCCESS;
            transaction.GatewayTransactionId = transactionId;
            transaction.GrossAmount          = grossAmount;
            transaction.TransactionDate      = DateTime.UtcNow;
            transaction.Save(SYSTEM);

            try {
                //Adjust the Inventory
                Sku sku;
                foreach (OrderItem orderItem in order.OrderItemCollection)
                {
                    sku           = new Sku("Sku", orderItem.Sku);
                    sku.Inventory = sku.Inventory - orderItem.Quantity;
                    sku.Save("System");
                    ProductCache.RemoveSKUFromCache(orderItem.Sku);
                }
                //Send out the messages
                MessageService messageService = new MessageService();
                messageService.SendOrderReceivedNotificationToCustomer(order);
                messageService.SendOrderReceivedNotificationToMerchant(order);
            }
            catch (Exception ex) {
                //swallow the exception here because the transaction is saved
                //and, while this is an inconvenience, it's not critical
                Logger.Error(typeof(OrderController).Name + ".CommitStandardTransaction", ex);
            }
            return(transaction);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Charges the specified order.
        /// </summary>
        /// <param name="order">The order.</param>
        /// <param name="userName">Name of the user.</param>
        /// <returns></returns>
        public static Transaction Charge(Order order, string userName)
        {
            //update the order with IP
            order.IPAddress = HttpContext.Current.Request.UserHostAddress == "::1" || HttpContext.Current.Request.UserHostAddress == "127.0.0.1" ? "127.0.0.1" : HttpContext.Current.Request.UserHostAddress;
            PaymentService paymentService = new PaymentService();
            Transaction    transaction    = paymentService.Charge(order);

            order.OrderStatusDescriptorId = (int)OrderStatus.ReceivedPaymentProcessingOrder;
            order.OrderTypeId             = (int)OrderType.Purchase;
            order.Save(userName);
            Guid userGuid = new Guid(Membership.GetUser(userName).ProviderUserKey.ToString());

            try {
                //Add an OrderNote
                OrderNote orderNote = new OrderNote();
                orderNote.OrderId = order.OrderId;
                orderNote.Note    = Strings.ResourceManager.GetString(ORDER_CHARGED);
                orderNote.Save(userName);
                Sku sku;
                DownloadCollection downloadCollection;
                DownloadAccessControlCollection downloadAccessControlCollection;
                DownloadAccessControl           downloadAccessControl;
                foreach (OrderItem orderItem in order.OrderItemCollection)
                {
                    //Adjust the Inventory
                    sku           = new Sku(SKU, orderItem.Sku);
                    sku.Inventory = sku.Inventory - orderItem.Quantity;
                    sku.Save(SYSTEM);
                    ProductCache.RemoveSKUFromCache(orderItem.Sku);
                    //Add access control for orderitems
                    downloadCollection = new ProductController().FetchAssociatedDownloadsByProductIdAndForPurchase(orderItem.ProductId);
                    if (downloadCollection.Count > 0)
                    {
                        foreach (Download download in downloadCollection)
                        {
                            Query query = new Query(DownloadAccessControl.Schema).
                                          AddWhere(DownloadAccessControl.Columns.UserId, Comparison.Equals, userGuid).
                                          AddWhere(DownloadAccessControl.Columns.DownloadId, Comparison.Equals, download.DownloadId);
                            downloadAccessControlCollection = new DownloadAccessControlController().FetchByQuery(query);
                            if (downloadAccessControlCollection.Count == 0)
                            {
                                downloadAccessControl            = new DownloadAccessControl();
                                downloadAccessControl.DownloadId = download.DownloadId;
                                downloadAccessControl.UserId     = userGuid;
                                downloadAccessControl.Save(SYSTEM);
                            }
                        }
                    }
                }

                //Send out the messages
                //Send these last in case something happens with the email
                MessageService messageService = new MessageService();
                messageService.SendOrderReceivedNotificationToCustomer(order);
                messageService.SendOrderReceivedNotificationToMerchant(order);
            }
            catch (Exception ex) {
                //swallow the exception here because the transaction is saved
                //and, while this is an inconvenience, it's not critical
                Logger.Error(typeof(OrderController).Name + ".Charge", ex);
            }
            return(transaction);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Refunds the specified transaction.
        /// </summary>
        /// <param name="transaction">The transaction.</param>
        /// <param name="refundedOrder">The refunded order.</param>
        /// <param name="userName">Name of the user.</param>
        public static void RefundStandard(Transaction transaction, Order refundedOrder, string userName)
        {
            Order       order             = new Order(transaction.OrderId);
            Transaction refundTransaction = new Transaction();

            //refundTransaction.OrderId = transaction.OrderId;
            refundTransaction.TransactionTypeDescriptorId = (int)TransactionType.Refund;
            refundTransaction.PaymentMethod        = PAYPAL;
            refundTransaction.GatewayName          = PAYPAL_STANDARD;
            refundTransaction.GatewayResponse      = SUCCESS;
            refundTransaction.GatewayTransactionId = CoreUtility.GenerateRandomString(16);
            refundTransaction.GrossAmount          = refundedOrder.Total;
            refundTransaction.NetAmount            = 0.00M;
            refundTransaction.FeeAmount            = 0.00M;
            refundTransaction.TransactionDate      = DateTime.Now;
            //refundTransaction.Save(userName);
            refundedOrder.Save(userName);

            //set the orderid for the refund
            foreach (OrderItem orderItem in refundedOrder.OrderItemCollection)
            {
                orderItem.OrderId = refundedOrder.OrderId;
            }
            refundedOrder.OrderItemCollection.SaveAll(userName);
            //set the orderId to the refunded orderId
            refundTransaction.OrderId = refundedOrder.OrderId;
            refundTransaction.Save(userName);
            Guid userGuid = new Guid(Membership.GetUser(order.UserName).ProviderUserKey.ToString());
            DownloadCollection downloadCollection;

            foreach (OrderItem orderItem in refundedOrder.OrderItemCollection)
            {
                //put the stock back
                Sku sku = new Sku(Sku.Columns.SkuX, orderItem.Sku);
                sku.Inventory = sku.Inventory + orderItem.Quantity;
                sku.Save(userName);
                ProductCache.RemoveSKUFromCache(orderItem.Sku);
                //remove the access control
                downloadCollection = new ProductController().FetchAssociatedDownloadsByProductIdAndForPurchase(orderItem.ProductId);
                if (downloadCollection.Count > 0)
                {
                    foreach (Download download in downloadCollection)
                    {
                        new DownloadAccessControlController().Delete(userGuid, download.DownloadId);
                    }
                }
            }
            if (refundedOrder.Total == order.Total)
            {
                order.OrderStatusDescriptorId = (int)OrderStatus.OrderFullyRefunded;
            }
            else
            {
                order.OrderStatusDescriptorId = (int)OrderStatus.OrderPartiallyRefunded;
            }
            order.Save(userName);
            //Add an OrderNote
            OrderNote orderNote = new OrderNote();

            orderNote.OrderId = order.OrderId;
            orderNote.Note    = Strings.ResourceManager.GetString(ORDER_REFUNDED);
            orderNote.Save(userName);
            //send off the notifications
            MessageService messageService = new MessageService();

            messageService.SendOrderRefundToCustomer(refundedOrder);
        }