public static bool ChargeSingleOrder(HotcakesApplication app, Order o)
        {
            if (o == null)
            {
                return(false);
            }

            var payManager = new OrderPaymentManager(o, app);

            payManager.GiftCardCompleteAllGiftCards();
            app.OrderServices.Orders.Update(o);

            payManager = new OrderPaymentManager(o, app);
            payManager.CreditCardCompleteAllCreditCards();
            payManager.PayPalExpressCompleteAllPayments();
            if (o.PaymentStatus == OrderPaymentStatus.Paid ||
                o.PaymentStatus == OrderPaymentStatus.Overpaid)
            {
                if (o.ShippingStatus == OrderShippingStatus.FullyShipped)
                {
                    o.StatusCode = OrderStatusCode.Completed;
                    o.StatusName = "Completed";
                }
                else
                {
                    o.StatusCode = OrderStatusCode.ReadyForShipping;
                    o.StatusName = "Ready to Ship";
                }
                app.OrderServices.Orders.Update(o);
                return(true);
            }
            return(false);
        }
        public static void CollectPaymentAndShipPendingOrders(HotcakesApplication app)
        {
            var criteria = new OrderSearchCriteria();

            criteria.IsPlaced   = true;
            criteria.StatusCode = OrderStatusCode.ReadyForPayment;
            var pageSize   = 1000;
            var totalCount = 0;

            var orders = app.OrderServices.Orders.FindByCriteriaPaged(criteria, 1, pageSize, ref totalCount);

            if (orders != null)
            {
                foreach (var os in orders)
                {
                    var o          = app.OrderServices.Orders.FindForCurrentStore(os.bvin);
                    var payManager = new OrderPaymentManager(o, app);
                    payManager.GiftCardCompleteAllGiftCards();
                    payManager.CreditCardCompleteAllCreditCards();
                    payManager.PayPalExpressCompleteAllPayments();
                    if (o.PaymentStatus == OrderPaymentStatus.Paid ||
                        o.PaymentStatus == OrderPaymentStatus.Overpaid)
                    {
                        if (o.ShippingStatus == OrderShippingStatus.FullyShipped)
                        {
                            o.StatusCode = OrderStatusCode.Completed;
                            o.StatusName = "Completed";
                        }
                        else
                        {
                            o.StatusCode = OrderStatusCode.ReadyForShipping;
                            o.StatusName = "Ready for Shipping";
                        }
                        app.OrderServices.Orders.Update(o);
                    }
                }
            }
        }