/// <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")); }