Ejemplo n.º 1
0
        /// <summary>
        /// Called after the user reviews their order on our side right and wishes to finalize the purchase
        /// </summary>
        /// <returns></returns>
        public ActionResult FinalCheckout()
        {
            SiteContext.RecordPageView("Ecommerce_FinalCheckout");

            try
            {
                PurchaseOrderDetails PayPalPurchaseOrder = SiteContext.PayPalPurchaseOrder;

                if (PayPalPurchaseOrder != null && !string.IsNullOrWhiteSpace(PayPalPurchaseOrder.PayPalOrderDetails.PaypalInfo.Token))
                {
                    List <SettingGroup> SettingGroupList = SettingGroupDAO.LoadByMultipleGroupNames(new List <string> {
                        SettingGroupKeys.TEMPLATE_CUSTOM_SETTINGS, SettingGroupKeys.EMAIL_SETTINGS, SettingGroupKeys.ECOMMERCE_SETTINGS, SettingGroupKeys.PAYPAL_PURCHASE_SETTINGS
                    });

                    SettingGroup PayPalSettings = SettingGroupList.Where(e => e.GroupKey.Equals(SettingGroupKeys.PAYPAL_PURCHASE_SETTINGS)).FirstOrDefault();

                    //create auth header obj
                    AuthHeader PayPalAuthHeader = Chimera.Core.PurchaseOrders.PayPalAuthHeader.GetAuthHeaderFromSetting(PayPalSettings);

                    OrderDetails FinalOrderDetails = CompanyCommons.Ecommerce.PayPal.Functions.Execute.FinalConfirmedAuthorization(PayPalAuthHeader, PayPalPurchaseOrder.PayPalOrderDetails);

                    if (FinalOrderDetails != null)
                    {
                        PayPalPurchaseOrder.PayPalOrderDetails = FinalOrderDetails;

                        //generate a new id so we can give the user a confirmation #
                        PayPalPurchaseOrder.Id = ObjectId.GenerateNewId().ToString();

                        //save to the database as an order
                        PurchaseOrderDetailsDAO.Save(PayPalPurchaseOrder);

                        //clear session cart
                        SiteContext.ClearShoppingCart();

                        //subtract stock from current products
                        Chimera.Core.PurchaseOrders.ProductStock.ProcessNewOrderStockLevels(PayPalSettings, PayPalPurchaseOrder);

                        //send emails
                        Chimera.Core.PurchaseOrders.Email.SendNewEcommerceOrderEmails(SettingGroupList, PayPalPurchaseOrder);

                        //add admin notification
                        Chimera.Core.Notifications.PurchaseOrder.ProcessNewPurchaseOrder(PayPalPurchaseOrder);

                        //return view
                        SettingGroup EcommerceSettings = SettingGroupList.Where(e => e.GroupKey.Equals(SettingGroupKeys.ECOMMERCE_SETTINGS)).FirstOrDefault();

                        ViewBag.ConfirmationNumber = PayPalPurchaseOrder.Id.ToString();
                        ViewBag.ViewType           = EcommerceSettings.GetSettingVal(ECommerceSettingKeys.CheckoutFinishedPage);

                        return(View("FinalCheckout", String.Format("~/Templates/{0}/Views/Shared/Template.Master", Models.ChimeraTemplate.TemplateName)));
                    }
                }
            }
            catch (Exception e)
            {
                CompanyCommons.Logging.WriteLog("ChimeraWebsite.Controllers.OrderController.FinalCheckout() " + e.Message);
            }

            //TODO: return 404 page instead?
            return(RedirectToAction("Index", "Home"));
        }