protected PublicOrder PrepareOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = new PublicOrder() { OrderItems = new PublicOrderItem[0], CustomData = new PublicOrderCustomData[0] }; foreach (var handler in orderDataHandlers) { newOrder = handler.AmendOrder(newOrder, publicOrderContext); if (newOrder == null) { throw new InvalidOperationException("OrderDataHandler must return a non-null order from AmendOrder."); } } newOrder.PaymentMethod = paymentHandler.PaymentMethodType; // Only run the selected payment handler. newOrder = paymentHandler.AmendOrder(newOrder, publicOrderContext.PaymentData); if (newOrder == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null order from AmendOrder."); } return newOrder; }
/// <summary> /// Amend order with "IpAddress" custom attribute for IP the order was placed from. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var request = orderContext.ExtraData.OfType <HttpRequestBase>().FirstOrDefault(); if (request != null) { var ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!String.IsNullOrEmpty(ip)) { var ipRange = ip.Split(','); var trueIp = ipRange[0]; Add(order, new PublicOrderCustomData { Name = "IpAddress", Value = trueIp }); } else { ip = request.ServerVariables["REMOTE_ADDR"]; Add(order, new PublicOrderCustomData { Name = "IpAddress", Value = ip }); } } return(order); }
private void AddContactData(PublicOrder order, ContactModel billingContact) { order.BillingEmail = Normalize(billingContact.Email); order.BillingFirstName = Normalize(billingContact.FirstName); order.BillingLastName = Normalize(billingContact.LastName); order.BillingAddress = Normalize(billingContact.Address); order.BillingAddress2 = Normalize(billingContact.Address2); order.BillingZip = Normalize(billingContact.Zip); order.BillingCity = Normalize(billingContact.City); order.BillingCountry = Normalize(billingContact.Country); var fax = FormattingHelper.FormatPhoneNumber(billingContact.Fax, billingContact.Country); order.BillingFax = Normalize(fax); var phone = FormattingHelper.FormatPhoneNumber(billingContact.Phone, billingContact.Country); order.BillingPhone = Normalize(phone); if (billingContact.CustomerType == "individual" && billingContact.IndividualInfo != null) { order.BillingCompanyNumber = Normalize(billingContact.IndividualInfo.IdentityNumber); } else if (billingContact.CustomerType == "company" && billingContact.CompanyInfo != null) { order.BillingCompany = Normalize(billingContact.CompanyInfo.CompanyName); order.BillingCompanyNumber = Normalize(billingContact.CompanyInfo.IdentityNumber); } }
/// <summary> /// Amends the order with the package group id whene the multipackage is enabled /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (_packageProvider.IsMultiPackageEnabled()) { var packageGroupId = Guid.NewGuid().ToString(); foreach (var item in order.OrderItems) { var packageGroupIdArray = new PublicOrderItemProperty[1] { new PublicOrderItemProperty { Name = "PackageGroupId", Value = packageGroupId } }; if (item.CustomData == null) { item.CustomData = packageGroupIdArray; continue; } item.CustomData = item.CustomData.Concat(packageGroupIdArray).ToArray(); } } return(order); }
protected PublicOrder PrepareOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { var newOrder = new PublicOrder() { OrderItems = new PublicOrderItem[0], CustomData = new PublicOrderCustomData[0] }; foreach (var handler in orderDataHandlers) { newOrder = handler.AmendOrder(newOrder, publicOrderContext); if (newOrder == null) { throw new InvalidOperationException("OrderDataHandler must return a non-null order from AmendOrder."); } } newOrder.PaymentMethod = paymentHandler.PaymentMethodType; // Only run the selected payment handler. newOrder = paymentHandler.AmendOrder(newOrder, publicOrderContext.PaymentData); if (newOrder == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null order from AmendOrder."); } return(newOrder); }
/// <summary> /// Set order currency from customer's currency preference /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var currency = currencyPreferenceProvider.GetCurrentCurrency(); order.Currency = currency.Code; return(order); }
/// <summary> /// Helper to add custom attribute to order. /// </summary> /// <param name="order">The order to add custom attribute to</param> /// <param name="customData">The custom attribute to add.</param> protected void Add(PublicOrder order, PublicOrderCustomData customData) { var customAttributes = new List<PublicOrderCustomData>(order.CustomData); customAttributes.Add(customData); order.CustomData = customAttributes.ToArray(); }
/// <summary> /// Set order currency from customer's currency preference /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var currency = currencyPreferenceProvider.GetCurrentCurrency(); order.Currency = currency.Code; return order; }
/// <summary> /// Set order reseller id from current reseller /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var resellerId = resellerProvider.GetReseller().Id; order.ResellerId = resellerId; return(order); }
/// <summary> /// Add item to order. /// </summary> /// <param name="order">The order to add item to</param> /// <param name="item">The item to add</param> protected void Add(PublicOrder order, PublicOrderItem item) { var orderItems = new List<PublicOrderItem>(order.OrderItems); orderItems.Add(item); order.OrderItems = orderItems.ToArray(); }
/// <summary> /// Add item to order. /// </summary> /// <param name="order">The order to add item to</param> /// <param name="item">The item to add</param> protected void Add(PublicOrder order, PublicOrderItem item) { var orderItems = new List <PublicOrderItem>(order.OrderItems); orderItems.Add(item); order.OrderItems = orderItems.ToArray(); }
/// <summary> /// Add custom attribute to order. /// </summary> /// <param name="order">The order to add custom attribute to</param> /// <param name="item">The custom attribute to add</param> protected void Add(PublicOrder order, PublicOrderCustomData customData) { var customAttributes = new List <PublicOrderCustomData>(order.CustomData); customAttributes.Add(customData); order.CustomData = customAttributes.ToArray(); }
/// <summary> /// Set order reseller id from current reseller /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var resellerId = resellerProvider.GetReseller().Id; order.ResellerId = resellerId; return order; }
/// <summary> /// Amends order based on how subclass overrides virtual methods /// </summary> public sealed override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var domainItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); foreach (var domainItem in domainItems) { var customData = new List<PublicOrderItemProperty>(); var domainName = GetDomainName(domainItem); var connectedItem = GetConnectedItem(orderContext.ItemData, domainItem, domainName); customData.Add(new PublicOrderItemProperty { Name = "DomainName", Value = domainName }); if (connectedItem != null) { var atomiaService = GetAtomiaService(connectedItem); customData.Add(new PublicOrderItemProperty { Name = "AtomiaService", Value = atomiaService }); var extraProperties = GetAtomiaServiceExtraProperties(domainItem); if (!String.IsNullOrEmpty(extraProperties)) { customData.Add(new PublicOrderItemProperty { Name = "AtomiaServiceExtraProperties", Value = extraProperties }); } } else { customData.Add(new PublicOrderItemProperty { Name = "AtomiaService", Value = DefaultAtomiaService }); } var domainRegContactProvider = new DomainRegContactProvider(orderContext); if (!string.IsNullOrEmpty(domainRegContactProvider.DomainRegContactData)) { customData.Add(new PublicOrderItemProperty { Name = "DomainRegContact", Value = domainRegContactProvider.DomainRegContactData }); } foreach(var extraData in GetExtraCustomData(domainItem)) { customData.Add(extraData); } var orderItem = new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = domainItem.ArticleNumber, Quantity = 1, RenewalPeriodId = domainItem.RenewalPeriodId, CustomData = customData.ToArray() }; Add(order, orderItem); } return order; }
/// <summary> /// Create PublicPaymentTransaction and call MakePayment in Atomia Billing Public Service. /// </summary> /// <param name="publicOrderContext">Order data</param> /// <param name="order">The order object returned from CreateOrder call in Atomia Billing Public Service</param> /// <param name="paymentHandler">Handler for customer's selected payment method</param> /// <returns>URL to redirect to for finishing or seeing result of payment transaction.</returns> public string CreatePaymentTransaction(PublicOrderContext publicOrderContext, PublicOrder order, PaymentDataHandler paymentHandler) { var paymentTransaction = new PublicPaymentTransaction { GuiPluginName = paymentHandler.Id, Attributes = new AttributeData[0], CurrencyCode = order.Currency, TransactionReference = order.Number, Amount = order.Total }; paymentTransaction = paymentHandler.AmendPaymentTransaction(paymentTransaction, publicOrderContext.PaymentData); if (paymentTransaction == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null payment transaction from AmendTransaction."); } foreach (var handler in transactionDataHandlers) { paymentTransaction = handler.AmendPaymentTransaction(paymentTransaction, publicOrderContext); if (paymentTransaction == null) { throw new InvalidOperationException("ExtraTransactionDataHandlers must return a non-null payment transaction from AmendTransaction."); } } PublicPaymentTransaction createdTransaction; try { createdTransaction = BillingApi.MakePayment(paymentTransaction); } catch (SoapException ex) { logger.LogException(ex, "MakePayment failed."); return urlProvider.FailureUrl; } if (createdTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(createdTransaction.RedirectUrl)) { return createdTransaction.RedirectUrl; } else if (createdTransaction.Status.ToUpper() == "OK") { return urlProvider.SuccessUrl; } else if (createdTransaction.Status.ToUpper() == "FRAUD_DETECTED" || createdTransaction.Status.ToUpper() == "FAILED") { return urlProvider.FailureUrl; } else { return createdTransaction.ReturnUrl; } }
/// <summary> /// Amend order with "Language" custom attribute from customer's language preference. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var language = languagePreferenceProvider.GetCurrentLanguage(); Add(order, new PublicOrderCustomData { Name = "Language", Value = language.Tag }); return order; }
/// <summary> /// Amend order with "Language" custom attribute from customer's language preference. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var language = languagePreferenceProvider.GetCurrentLanguage(); Add(order, new PublicOrderCustomData { Name = "Language", Value = language.Tag }); return(order); }
/// <summary> /// Amend order with "CampaignCode" custom attribute /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (!String.IsNullOrEmpty(orderContext.Cart.CampaignCode)) { Add(order, new PublicOrderCustomData { Name = "CampaignCode", Value = orderContext.Cart.CampaignCode }); } return order; }
/// <summary> /// Amend order with "CampaignCode" custom attribute /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (!String.IsNullOrEmpty(orderContext.Cart.CampaignCode)) { Add(order, new PublicOrderCustomData { Name = "CampaignCode", Value = orderContext.Cart.CampaignCode }); } return(order); }
private void AddCustomAttributes(PublicOrder newOrder) { var customAttributes = new List <PublicOrderCustomData>(newOrder.CustomData); customAttributes.Add(new PublicOrderCustomData { Name = "ImmediateProvisioning", Value = "true" }); customAttributes.Add(new PublicOrderCustomData { Name = "ShowHcpLandingPage", Value = "true" }); newOrder.CustomData = customAttributes.ToArray(); }
public override PublicOrder AmendOrder(PublicOrder order, PaymentData paymentData) { var form = paymentData.PaymentForm as PayWithInvoiceForm; Add(order, new PublicOrderCustomData { Name = "PayByInvoice", Value = "true" }); if (form.SelectedInvoiceType == "post") { Add(order, new PublicOrderCustomData { Name = "SendInvoiceByPost", Value = "true" }); } return order; }
/// <summary> /// Remove invalid VAT number from order. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (!string.IsNullOrEmpty(order.LegalNumber)) { var validationResult = vatNumberValidator.ValidateCustomerVatNumber(); if (!validationResult.Valid) { order.LegalNumber = String.Empty; } } return(order); }
/// <summary> /// Remove invalid VAT number from order. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (!string.IsNullOrEmpty(order.LegalNumber)) { var validationResult = vatNumberValidator.ValidateCustomerVatNumber(); if (!validationResult.Valid) { order.LegalNumber = String.Empty; } } return order; }
/// <summary> /// Amend order with custom attributes from cart /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (orderContext.Cart.CustomAttributes != null) { foreach (var attr in orderContext.Cart.CustomAttributes) { Add(order, new PublicOrderCustomData { Name = attr.Name, Value = attr.Value }); } } return(order); }
public override PublicOrder CreateOrder(PublicOrderContext publicOrderContext, PaymentDataHandler paymentHandler) { PublicOrder order = null; var existingCustomerData = existingCustomerProvider.GetContactData(); if (existingCustomerData != null) { order = existingCustomerOrderCreator.CreateOrder(publicOrderContext, paymentHandler); } else { order = simpleOrderCreator.CreateOrder(publicOrderContext, paymentHandler); } return(order); }
/// <summary> /// Amend order with custom attributes from cart /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { if (orderContext.Cart.CustomAttributes != null) { foreach (var attr in orderContext.Cart.CustomAttributes) { Add(order, new PublicOrderCustomData { Name = attr.Name, Value = attr.Value }); } } return order; }
/// <summary> /// Add any setup fees to order /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var setupFeeItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); foreach (var item in setupFeeItems) { Add(order, new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = item.ArticleNumber, RenewalPeriodId = item.RenewalPeriodId, Quantity = 1 }); } return(order); }
/// <summary> /// Amend order with any items that have not been added to order yet. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var unprocessedItems = orderContext.ItemData.Where(i => !OrderItemsContain(order, i)); foreach (var item in unprocessedItems) { Add(order, new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = item.ArticleNumber, RenewalPeriodId = item.RenewalPeriodId, Quantity = item.Quantity }); } return(order); }
public override PublicOrder AmendOrder(PublicOrder order, PaymentData paymentData) { var form = paymentData.PaymentForm as PayWithInvoiceForm; Add(order, new PublicOrderCustomData { Name = "PayByInvoice", Value = "true" }); if (form.SelectedInvoiceType == "post") { Add(order, new PublicOrderCustomData { Name = "SendInvoiceByPost", Value = "true" }); } return(order); }
/// <summary> /// Amend order with any items that have not been added to order yet. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var unprocessedItems = orderContext.ItemData.Where(i => !OrderItemsContain(order, i)); foreach (var item in unprocessedItems) { Add(order, new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = item.ArticleNumber, RenewalPeriodId = item.RenewalPeriodId, Quantity = item.Quantity }); } return order; }
/// <summary> /// Add any setup fees to order /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var setupFeeItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); foreach (var item in setupFeeItems) { Add(order, new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = item.ArticleNumber, RenewalPeriodId = item.RenewalPeriodId, Quantity = 1 }); } return order; }
/// <summary> /// Amend order with main contact data collected from customer. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var mainContact = orderContext.ContactData.OfType <MainContactModel>().First(); order.Email = Normalize(mainContact.Email); order.FirstName = Normalize(mainContact.FirstName); order.LastName = Normalize(mainContact.LastName); order.Address = Normalize(mainContact.Address); order.Address2 = Normalize(mainContact.Address2); order.Zip = Normalize(mainContact.Zip); order.City = Normalize(mainContact.City); order.Country = Normalize(mainContact.Country); var fax = FormattingHelper.FormatPhoneNumber(mainContact.Fax, mainContact.Country); order.Fax = Normalize(fax); var phone = FormattingHelper.FormatPhoneNumber(mainContact.Phone, mainContact.Country); order.Phone = Normalize(phone); if (mainContact.CustomerType == "individual" && mainContact.IndividualInfo != null) { order.CompanyNumber = Normalize(mainContact.IndividualInfo.IdentityNumber); } else if (mainContact.CustomerType == "company" && mainContact.CompanyInfo != null) { order.Company = Normalize(mainContact.CompanyInfo.CompanyName); order.CompanyNumber = Normalize(mainContact.CompanyInfo.IdentityNumber); order.LegalNumber = Normalize(mainContact.CompanyInfo.VatNumber); } if (AtomiaCommon.Instance.SeparateUsernameAndEmail) { var customAttributes = new List <PublicOrderCustomData>(order.CustomData); customAttributes.Add(new PublicOrderCustomData { Name = "Username", Value = Normalize(mainContact.Username) }); order.CustomData = customAttributes.ToArray(); } return(order); }
/// <summary> /// Remove any item with category "PostOrder" from order items. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var postOrderItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); var orderItems = new List <PublicOrderItem>(order.OrderItems); foreach (var postOrderItem in postOrderItems) { var existingItem = ExistingOrderItem(order, postOrderItem); if (existingItem != null) { orderItems.Remove(existingItem); } } order.OrderItems = orderItems.ToArray(); return(order); }
/// <summary> /// Amend order with billing contact data collected from customer, falling back to collected main contact data. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var billingContact = orderContext.ContactData.OfType <BillingContactModel>().First(); // Email is a required field on BillingContactModel, // so if it is not present it means no separate billing contact was provided. if (String.IsNullOrWhiteSpace(billingContact.Email)) { var mainContact = orderContext.ContactData.OfType <MainContactModel>().First(); AddContactData(order, mainContact); } else { AddContactData(order, billingContact); } return(order); }
/// <summary> /// Remove any item with category "PostOrder" from order items. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var postOrderItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); var orderItems = new List<PublicOrderItem>(order.OrderItems); foreach (var postOrderItem in postOrderItems) { var existingItem = ExistingOrderItem(order, postOrderItem); if (existingItem != null) { orderItems.Remove(existingItem); } } order.OrderItems = orderItems.ToArray(); return order; }
/// <summary> /// Amend order with billing contact data collected from customer, falling back to collected main contact data. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var billingContact = orderContext.ContactData.OfType<BillingContactModel>().First(); // Email is a required field on BillingContactModel, // so if it is not present it means no separate billing contact was provided. if (String.IsNullOrWhiteSpace(billingContact.Email)) { var mainContact = orderContext.ContactData.OfType<MainContactModel>().First(); AddContactData(order, mainContact); } else { AddContactData(order, billingContact); } return order; }
/// <summary> /// Amend order with main contact data collected from customer. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var mainContact = orderContext.ContactData.OfType<MainContactModel>().First(); order.Email = Normalize(mainContact.Email); order.FirstName = Normalize(mainContact.FirstName); order.LastName = Normalize(mainContact.LastName); order.Address = Normalize(mainContact.Address); order.Address2 = Normalize(mainContact.Address2); order.Zip = Normalize(mainContact.Zip); order.City = Normalize(mainContact.City); order.Country = Normalize(mainContact.Country); var fax = FormattingHelper.FormatPhoneNumber(mainContact.Fax, mainContact.Country); order.Fax = Normalize(fax); var phone = FormattingHelper.FormatPhoneNumber(mainContact.Phone, mainContact.Country); order.Phone = Normalize(phone); if (mainContact.CustomerType == "individual" && mainContact.IndividualInfo != null) { order.CompanyNumber = Normalize(mainContact.IndividualInfo.IdentityNumber); } else if (mainContact.CustomerType == "company" && mainContact.CompanyInfo != null) { order.Company = Normalize(mainContact.CompanyInfo.CompanyName); order.CompanyNumber = Normalize(mainContact.CompanyInfo.IdentityNumber); order.LegalNumber = Normalize(mainContact.CompanyInfo.VatNumber); } if (AtomiaCommon.Instance.SeparateUsernameAndEmail) { var customAttributes = new List<PublicOrderCustomData>(order.CustomData); customAttributes.Add(new PublicOrderCustomData { Name = "Username", Value = Normalize(mainContact.Username) }); order.CustomData = customAttributes.ToArray(); } return order; }
/// <summary> /// Get matching item if it exists in order already. /// Must match all of the following: article number, renewal period and "DomainName" custom attributes if it exists. /// </summary> /// <param name="order">The order to check</param> /// <param name="item">The item to check for match in order</param> /// <returns>The matching order item or null</returns> protected PublicOrderItem ExistingOrderItem(PublicOrder order, ItemData item) { PublicOrderItem existingOrderItem = null; var domainAttr = item.CartItem.CustomAttributes.FirstOrDefault(ca => ca.Name == "DomainName"); if (domainAttr != null) { existingOrderItem = order.OrderItems.FirstOrDefault(orderItem => orderItem.ItemNumber == item.ArticleNumber && orderItem.RenewalPeriodId == item.RenewalPeriodId && orderItem.CustomData.Any(x => x.Name == "DomainName" && x.Value == domainAttr.Value)); } else { existingOrderItem = order.OrderItems.FirstOrDefault(orderItem => orderItem.ItemNumber == item.ArticleNumber && orderItem.RenewalPeriodId == item.RenewalPeriodId); } return existingOrderItem; }
/// <summary> /// Get matching item if it exists in order already. /// Must match all of the following: article number, renewal period and "DomainName" custom attributes if it exists. /// </summary> /// <param name="order">The order to check</param> /// <param name="item">The item to check for match in order</param> /// <returns>The matching order item or null</returns> protected PublicOrderItem ExistingOrderItem(PublicOrder order, ItemData item) { PublicOrderItem existingOrderItem = null; var domainAttr = item.CartItem.CustomAttributes.FirstOrDefault(ca => ca.Name == "DomainName"); if (domainAttr != null) { existingOrderItem = order.OrderItems.FirstOrDefault(orderItem => orderItem.ItemNumber == item.ArticleNumber && orderItem.RenewalPeriodId == item.RenewalPeriodId && orderItem.CustomData.Any(x => x.Name == "DomainName" && x.Value == domainAttr.Value)); } else { existingOrderItem = order.OrderItems.FirstOrDefault(orderItem => orderItem.ItemNumber == item.ArticleNumber && orderItem.RenewalPeriodId == item.RenewalPeriodId); } return(existingOrderItem); }
/// <summary> /// Amend order with "IpAddress" custom attribute for IP the order was placed from. /// </summary> public override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var request = orderContext.ExtraData.OfType<HttpRequestBase>().FirstOrDefault(); if (request != null) { var ip = request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (!String.IsNullOrEmpty(ip)) { var ipRange = ip.Split(','); var trueIp = ipRange[0]; Add(order, new PublicOrderCustomData { Name = "IpAddress", Value = trueIp }); } else { ip = request.ServerVariables["REMOTE_ADDR"]; Add(order, new PublicOrderCustomData { Name = "IpAddress", Value = ip }); } } return order; }
public virtual PublicOrder CalculateOrder(PublicOrder publicOrder) { return service.CalculateOrder(publicOrder); }
/// <summary> /// Check if a matching item exists in order already. /// </summary> /// <param name="order">The order to check</param> /// <param name="item">The item to match</param> /// <returns>true if item matches, false otherwise</returns> protected bool OrderItemsContain(PublicOrder order, ItemData item) { return(ExistingOrderItem(order, item) != null); }
/// <summary> /// Amend order with data from context /// </summary> /// <param name="order">The order to amend</param> /// <param name="orderContext">The order data</param> /// <returns>The amended order</returns> public abstract PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext);
public virtual PublicOrder CreateOrderWithLoginToken(PublicOrder order, string resellerRootDomain, out string token) { return service.CreateOrderWithLoginToken(order, resellerRootDomain, out token); }
/// <summary> /// Amends order based on how subclass overrides virtual methods /// </summary> public sealed override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var domainItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); var jsemail = new JavaScriptSerializer(); var mailOnOrderSettings = LocalConfigurationHelper.GetMailOnOrderSettings(); foreach (var domainItem in domainItems) { var customData = new List <PublicOrderItemProperty>(); var domainName = GetDomainName(domainItem); var domainRegSpecificAttrs = GetDomainRegistrySpecificAttributes(domainItem); var connectedItem = GetConnectedItem(orderContext.ItemData, domainItem, domainName); customData.Add(new PublicOrderItemProperty { Name = "DomainName", Value = domainName }); if (!string.IsNullOrEmpty(domainRegSpecificAttrs)) { customData.Add(new PublicOrderItemProperty { Name = "DomainRegistrySpecificAttributes", Value = domainRegSpecificAttrs }); var mailOnOrderElement = mailOnOrderSettings.FirstOrDefault(e => e.ProductId == domainItem.ArticleNumber); if (mailOnOrderElement != null) { Dictionary <string, string> emailProps = new Dictionary <string, string>(); Dictionary <string, string> domainSpecific = jsemail.Deserialize <Dictionary <string, string> >(domainRegSpecificAttrs); emailProps.Add("Type", mailOnOrderElement.Email); emailProps.Add("Domain", domainName ?? ""); emailProps.Add("Name", domainSpecific.FirstOrDefault(v => v.Key == "AcceptName").Value ?? ""); emailProps.Add("Time", domainSpecific.FirstOrDefault(v => v.Key == "AcceptDate").Value ?? ""); emailProps.Add("Orgnum", order.CompanyNumber); emailProps.Add("Company", order.Company); emailProps.Add("Version", domainSpecific.FirstOrDefault(v => v.Key == "AcceptVersion").Value ?? ""); emailProps.Add("Ccc", mailOnOrderElement.CccEmail); customData.Add(new PublicOrderItemProperty { Name = "MailOnOrder", Value = jsemail.Serialize(emailProps) }); } } if (connectedItem != null) { var atomiaService = GetAtomiaService(connectedItem); customData.Add(new PublicOrderItemProperty { Name = "AtomiaService", Value = atomiaService }); var extraProperties = GetAtomiaServiceExtraProperties(domainItem); if (!String.IsNullOrEmpty(extraProperties)) { customData.Add(new PublicOrderItemProperty { Name = "AtomiaServiceExtraProperties", Value = extraProperties }); } } else { customData.Add(new PublicOrderItemProperty { Name = "AtomiaService", Value = DefaultAtomiaService }); } var domainRegContactProvider = new DomainRegContactProvider(orderContext); if (!string.IsNullOrEmpty(domainRegContactProvider.DomainRegContactData)) { customData.Add(new PublicOrderItemProperty { Name = "DomainRegContact", Value = domainRegContactProvider.DomainRegContactData }); } foreach (var extraData in GetExtraCustomData(domainItem)) { customData.Add(extraData); } var orderItem = new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = domainItem.ArticleNumber, Quantity = 1, RenewalPeriodId = domainItem.RenewalPeriodId, CustomData = customData.ToArray() }; Add(order, orderItem); } return(order); }
/// <summary> /// Check if a matching item exists in order already. /// </summary> /// <param name="order">The order to check</param> /// <param name="item">The item to match</param> /// <returns>true if item matches, false otherwise</returns> protected bool OrderItemsContain(PublicOrder order, ItemData item) { return ExistingOrderItem(order, item) != null; }
private void AddCustomAttributes(PublicOrder newOrder) { var customAttributes = new List<PublicOrderCustomData>(newOrder.CustomData); customAttributes.Add(new PublicOrderCustomData { Name = "ImmediateProvisioning", Value = "true" }); customAttributes.Add(new PublicOrderCustomData { Name = "ShowHcpLandingPage", Value = "true" }); newOrder.CustomData = customAttributes.ToArray(); }
public virtual PublicOrder CreateOrder(PublicOrder order) { return service.CreateOrder(order); }
public virtual PublicOrder CreateOrderWithLoginToken(PublicOrder order, string resellerRootDomain, out string token) { return(service.CreateOrderWithLoginToken(order, resellerRootDomain, out token)); }
public virtual PublicOrder CreateOrder(PublicOrder order) { return(service.CreateOrder(order)); }
public virtual PublicOrder CalculateOrder(PublicOrder publicOrder) { return(service.CalculateOrder(publicOrder)); }
/// <summary> /// Amend order with payment method specific attributes. /// </summary> /// <param name="order">The order to amend.</param> public virtual PublicOrder AmendOrder(PublicOrder order, PaymentData paymentData) { return order; }
/// <summary> /// Create PublicPaymentTransaction and call MakePayment in Atomia Billing Public Service. /// </summary> /// <param name="publicOrderContext">Order data</param> /// <param name="order">The order object returned from CreateOrder call in Atomia Billing Public Service</param> /// <param name="paymentHandler">Handler for customer's selected payment method</param> /// <returns>URL to redirect to for finishing or seeing result of payment transaction.</returns> public string CreatePaymentTransaction(PublicOrderContext publicOrderContext, PublicOrder order, PaymentDataHandler paymentHandler) { var paymentTransaction = new PublicPaymentTransaction { GuiPluginName = paymentHandler.Id, Attributes = new AttributeData[0], CurrencyCode = order.Currency, TransactionReference = order.Number, Amount = order.Total }; paymentTransaction = paymentHandler.AmendPaymentTransaction(paymentTransaction, publicOrderContext.PaymentData); if (paymentTransaction == null) { throw new InvalidOperationException("PaymentDataHandler must return a non-null payment transaction from AmendTransaction."); } foreach (var handler in transactionDataHandlers) { paymentTransaction = handler.AmendPaymentTransaction(paymentTransaction, publicOrderContext); if (paymentTransaction == null) { throw new InvalidOperationException("ExtraTransactionDataHandlers must return a non-null payment transaction from AmendTransaction."); } } PublicPaymentTransaction createdTransaction; try { createdTransaction = BillingApi.MakePayment(paymentTransaction); } catch (SoapException ex) { logger.LogException(ex, "MakePayment failed."); return(urlProvider.FailureUrl); } if (createdTransaction.Status.ToUpper() == "IN_PROGRESS" && !string.IsNullOrEmpty(createdTransaction.RedirectUrl)) { return(createdTransaction.RedirectUrl); } else if (createdTransaction.Status.ToUpper() == "OK") { return(urlProvider.SuccessUrl); } else if (createdTransaction.Status.ToUpper() == "FRAUD_DETECTED" || createdTransaction.Status.ToUpper() == "FAILED") { return(urlProvider.FailureUrl); } else { return(createdTransaction.ReturnUrl); } }
/// <summary> /// Amends order based on how subclass overrides virtual methods /// </summary> public sealed override PublicOrder AmendOrder(PublicOrder order, PublicOrderContext orderContext) { var domainItems = orderContext.ItemData.Where(i => this.HandledCategories.Intersect(i.Categories.Select(c => c.Name)).Count() > 0); foreach (var domainItem in domainItems) { var customData = new List <PublicOrderItemProperty>(); var domainName = GetDomainName(domainItem); var domainRegSpecificAttrs = GetDomainRegistrySpecificAttributes(domainItem); var connectedItem = GetConnectedItem(orderContext.ItemData, domainItem, domainName); customData.Add(new PublicOrderItemProperty { Name = "DomainName", Value = domainName }); if (!string.IsNullOrEmpty(domainRegSpecificAttrs)) { customData.Add(new PublicOrderItemProperty { Name = "DomainRegistrySpecificAttributes", Value = domainRegSpecificAttrs }); } if (connectedItem != null) { var atomiaService = GetAtomiaService(connectedItem); customData.Add(new PublicOrderItemProperty { Name = "AtomiaService", Value = atomiaService }); var extraProperties = GetAtomiaServiceExtraProperties(domainItem); if (!String.IsNullOrEmpty(extraProperties)) { customData.Add(new PublicOrderItemProperty { Name = "AtomiaServiceExtraProperties", Value = extraProperties }); } } else { customData.Add(new PublicOrderItemProperty { Name = "AtomiaService", Value = DefaultAtomiaService }); } var domainRegContactProvider = new DomainRegContactProvider(orderContext); if (!string.IsNullOrEmpty(domainRegContactProvider.DomainRegContactData)) { customData.Add(new PublicOrderItemProperty { Name = "DomainRegContact", Value = domainRegContactProvider.DomainRegContactData }); } foreach (var extraData in GetExtraCustomData(domainItem)) { customData.Add(extraData); } var orderItem = new PublicOrderItem { ItemId = Guid.Empty, ItemNumber = domainItem.ArticleNumber, Quantity = 1, RenewalPeriodId = domainItem.RenewalPeriodId, CustomData = customData.ToArray() }; Add(order, orderItem); } return(order); }
/// <summary> /// Amend order with payment method specific attributes. /// </summary> /// <param name="order">The order to amend.</param> public virtual PublicOrder AmendOrder(PublicOrder order, PaymentData paymentData) { return(order); }