public void ProcessRequest(HttpContext context) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Start"); var dataAdapterDependencies = new PortalConfigurationDataAdapterDependencies(PortalName, context.Request.RequestContext); Tuple <Guid, string> quoteAndReturnUrl; if (!TryGetQuoteAndReturnUrl(context.Request, dataAdapterDependencies, out quoteAndReturnUrl)) { throw new HttpException((int)HttpStatusCode.BadRequest, "Unable to determine quote from request."); } try { var validation = ValidatePayment(context, dataAdapterDependencies, quoteAndReturnUrl); LogPaymentRequest(context, dataAdapterDependencies, quoteAndReturnUrl, validation); if (!validation.Success) { ADXTrace.Instance.TraceError(TraceCategory.Application, "Start"); HandleUnsuccessfulPayment(context, quoteAndReturnUrl, validation.ErrorMessage); return; } ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Payment sucessful."); string receiptNumber; if (!TryGetReceiptNumber(context, out receiptNumber)) { ADXTrace.Instance.TraceInfo(TraceCategory.Application, "Failed to get receipt number."); } var quoteid = quoteAndReturnUrl.Item1; var serviceContext = dataAdapterDependencies.GetServiceContext(); var salesorder = serviceContext.CreateQuery("salesorder") .FirstOrDefault( s => s.GetAttributeValue <EntityReference>("quoteid") != null && s.GetAttributeValue <EntityReference>("quoteid").Equals(new EntityReference("quote", quoteid))); if (salesorder == null) { ConvertQuoteToOrder(context, dataAdapterDependencies, quoteid, receiptNumber); } HandleSuccessfulPayment(context, quoteAndReturnUrl); } catch (Exception e) { LogPaymentRequest(context, dataAdapterDependencies, quoteAndReturnUrl, e); throw; } }
protected void Page_Load(object sender, EventArgs e) { Target = GetTargetEntityReference(); if (Target == null) { Payment.Visible = false; GeneralErrorMessage.Visible = true; return; } Guid quoteId; if (IsPostBack && Guid.TryParse(QuoteId.Value, out quoteId)) { WebForm.CurrentSessionHistory.QuoteId = quoteId; } var dataAdapterDependencies = new Adxstudio.Xrm.Commerce.PortalConfigurationDataAdapterDependencies(PortalName, Request.RequestContext); var dataAdapter = CreatePurchaseDataAdapter(Target, CurrentStepEntityPrimaryKeyLogicalName); Purchasable = dataAdapter.Select(); if (Purchasable == null) { Payment.Visible = false; GeneralErrorMessage.Visible = true; return; } // If the session quote is not the purchase quote, update and persist the session, as // there won't necessarily be a postback to save the session later. if (WebForm.CurrentSessionHistory.QuoteId != Purchasable.Quote.Id) { WebForm.CurrentSessionHistory.QuoteId = Purchasable.Quote.Id; WebForm.SaveSessionHistory(dataAdapterDependencies.GetServiceContext()); } QuoteId.Value = Purchasable.Quote.Id.ToString(); if (Purchasable.TotalAmount == 0) { var portal = PortalCrmConfigurationManager.CreatePortalContext(PortalName); var context = dataAdapterDependencies.GetServiceContext(); var quote = context.CreateQuery("quote").First(q => q.GetAttributeValue <Guid>("quoteid") == Purchasable.Quote.Id); var adapter = new CoreDataAdapter(portal, context); var status = quote.GetAttributeValue <OptionSetValue>("statecode").Value; if (status != (int)QuoteState.Active) { adapter.SetState(quote.ToEntityReference(), (int)QuoteState.Active, (int)QuoteStatusCode.InProgressActive); } if (status != (int)QuoteState.Won) { adapter.WinQuote(quote.ToEntityReference()); } adapter.CovertQuoteToSalesOrder(quote.ToEntityReference()); dataAdapter.CompletePurchase(); SetAttributeValuesAndSave(); MoveToNextStep(); return; } if (Paid) { dataAdapter.CompletePurchase(); SetAttributeValuesAndSave(); MoveToNextStep(); return; } Payment.Visible = true; GeneralErrorMessage.Visible = false; if (IsPaymentError) { SetErrorFields(); } SetMerchantShippingFields(ServiceContext.CreateQuery("quote").FirstOrDefault(q => q.GetAttributeValue <Guid>("quoteid") == Purchasable.Quote.Id)); if (IsPaymentAuthorizeNet || IsPaymentDemo) { CreditCardPaymentPanel.Visible = true; PayPalPaymentPanel.Visible = false; SetMerchantFields(); PopulateContactInfo(Contact); EnableTestMode(TestModeEnabled); PurchaseDiscounts.DataSource = Purchasable.Discounts; PurchaseDiscounts.DataBind(); PurchaseItems.DataSource = Purchasable.Items.Where(item => item.IsSelected && item.Quantity > 0); PurchaseItems.DataBind(); } else if (IsPaymentPaypal) { PayPalPaymentPanel.Visible = true; CreditCardPaymentPanel.Visible = false; PayPalPurchaseDiscounts.DataSource = Purchasable.Discounts; PayPalPurchaseDiscounts.DataBind(); PayPalPurchaseItems.DataSource = Purchasable.Items.Where(item => item.IsSelected && item.Quantity > 0); PayPalPurchaseItems.DataBind(); } }