public ActionResult ManageAutoOrder(int id, ManageAutoOrderViewModel viewModel) { var customerID = Identity.Customer.CustomerID; var apiRequests = new List <ApiRequest>(); var customer = Exigo.GetCustomer(customerID); var market = GlobalSettings.Markets.AvailableMarkets.Where(c => c.Countries.Contains(Identity.Customer.Country)).FirstOrDefault(); var configuration = market.GetConfiguration().AutoOrders; var warehouseID = configuration.WarehouseID; var isExistingAutoOrder = id != 0; var paymentMethods = Exigo.GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest() { CustomerID = Identity.Customer.CustomerID, ExcludeIncompleteMethods = true }); // Remove all items that have no quantity. viewModel.AutoOrder.Details = viewModel.AutoOrder.Details.Where(d => d.Quantity > 0).ToList(); if (!viewModel.AutoOrder.Details.Any()) { ModelState.AddModelError("Result", "Please select at least one product for your Auto Order."); } if (ModelState.Keys.Contains("Result")) { InflateManageAutoOrderViewModel(customerID, market, configuration, ref viewModel); return(View(viewModel)); } // Save New Credit Card var isUsingNewCard = viewModel.AutoOrder.AutoOrderPaymentTypeID == 0; var hasPrimaryCard = paymentMethods.Where(v => v.IsComplete).Count() > 0; if (isUsingNewCard) { var saveCCRequest = new SetAccountCreditCardTokenRequest(viewModel.NewCreditCard); // If there is one or more available payment type, save the card in the secondary card slot if (hasPrimaryCard) { saveCCRequest.CreditCardAccountType = AccountCreditCardType.Secondary; viewModel.AutoOrder.AutoOrderPaymentTypeID = AutoOrderPaymentTypes.SecondaryCreditCardOnFile; } else { viewModel.AutoOrder.AutoOrderPaymentTypeID = AutoOrderPaymentTypes.PrimaryCreditCardOnFile; } saveCCRequest.CustomerID = customerID; apiRequests.Add(saveCCRequest); } // Prepare the auto order var autoOrder = viewModel.AutoOrder; var createAutoOrderRequest = new CreateAutoOrderRequest(autoOrder) { PriceType = configuration.PriceTypeID, WarehouseID = warehouseID, Notes = !string.IsNullOrEmpty(autoOrder.Notes) ? autoOrder.Notes : string.Format("Created with the API Auto-Delivery manager at \"{0}\" on {1:u} at IP {2} using {3} {4} ({5}).", Request.Url.AbsoluteUri, DateTime.Now.ToUniversalTime(), GlobalUtilities.GetClientIP(), HttpContext.Request.Browser.Browser, HttpContext.Request.Browser.Version, HttpContext.Request.Browser.Platform), CustomerID = customerID }; apiRequests.Add(createAutoOrderRequest); try { // Process the transaction var transaction = new TransactionalRequest { TransactionRequests = apiRequests.ToArray() }; var response = Exigo.WebService().ProcessTransaction(transaction); return(RedirectToAction("AutoOrderList", new { success = "1" })); } catch (Exception ex) { ModelState.AddModelError("Result", "We were unable to save your Auto-Delivery: " + ex.Message); InflateManageAutoOrderViewModel(customerID, market, configuration, ref viewModel); return(View(viewModel)); } }
/// <remarks/> public void ProcessTransactionAsync(TransactionalRequest TransactionalRequest, object userState) { if ((this.ProcessTransactionOperationCompleted == null)) { this.ProcessTransactionOperationCompleted = new System.Threading.SendOrPostCallback(this.OnProcessTransactionOperationCompleted); } this.InvokeAsync("ProcessTransaction", new object[] { TransactionalRequest}, this.ProcessTransactionOperationCompleted, userState); }
private TransactionalRequest Request_AutoshipTransaction() { TransactionalRequest request = new TransactionalRequest(); List<ApiRequest> details = new List<ApiRequest>(); // Add the request to create an order details.Add(Request_SaveAutoship()); // Add the requests that handle the payment method for the order switch (Autoship.PropertyBag.PaymentType) { case AutoshipCartPropertyBag.PaymentMethodType.NewCreditCard: details.Add(Request_SaveNewCreditCardToAccount(Autoship.PropertyBag.CreditCardType)); break; case AutoshipCartPropertyBag.PaymentMethodType.NewBankAccount: details.Add(Request_SaveNewBankAccountToAccount()); break; } request.TransactionRequests = details.ToArray(); return request; }
public ActionResult RenewSubscription(CreditCard creditcard) { var shipMethodID = OrderConfiguration.DefaultShipMethodID; // Will call or free option, since this is a virtual order var customerID = CurrentCustomerID; var requests = new List <ApiRequest>(); var items = new List <ShoppingCartItem>(); var paymonthly = true; var card = new CreditCard(); if (creditcard.Type != CreditCardType.New) { card = Exigo.GetCustomerPaymentMethods(new GetCustomerPaymentMethodsRequest { CustomerID = Identity.Current.CustomerID, ExcludeIncompleteMethods = true, ExcludeInvalidMethods = true }).Where(c => c is CreditCard && ((CreditCard)c).Type == creditcard.Type).FirstOrDefault().As <CreditCard>(); } else { card = creditcard; } try { // Determine which items we need to add to the order we are creating and assemble our order request if (paymonthly) { items.Add(new ShoppingCartItem { ItemCode = GlobalSettings.Backoffices.MonthlySubscriptionItemCode, Quantity = 1 }); } // We pull the customer's addresses first, if there are none we calculate with the corp address var customerAddresses = Exigo.GetCustomerAddresses(CurrentCustomerID); var address = (customerAddresses.Count() > 0 && customerAddresses.Where(c => c.IsComplete).Count() > 0) ? customerAddresses.Where(c => c.IsComplete).FirstOrDefault().As <ShippingAddress>() : new ShippingAddress(GlobalSettings.Company.Address); var OrderRequest = new CreateOrderRequest(OrderConfiguration, shipMethodID, items, address) { CustomerID = customerID }; requests.Add(OrderRequest); // Then next step is adding the credit card payment and account update request if (!card.IsTestCreditCard && !Request.IsLocal) { if (card.Type == CreditCardType.New) { requests.Add(new ChargeCreditCardTokenRequest(card)); requests.Add(new SetAccountCreditCardTokenRequest(card) { CustomerID = customerID, CreditCardAccountType = AccountCreditCardType.Primary }); } else { requests.Add(new ChargeCreditCardTokenOnFileRequest(card)); } } else { OrderRequest.OrderStatus = OrderStatusType.Shipped; } // Process the transaction var transactionRequest = new TransactionalRequest(); transactionRequest.TransactionRequests = requests.ToArray(); var transactionResponse = Exigo.WebService().ProcessTransaction(transactionRequest); if (transactionResponse.Result.Status != ResultStatus.Success) { //throw new Exception(transactionResponse.Result.Errors.ToString()); throw new Exception("Transaction failed"); } else { var httpContext = System.Web.HttpContext.Current; var cookie = httpContext.Request.Cookies[GlobalSettings.Backoffices.MonthlySubscriptionCookieName]; if (cookie != null) { cookie.Expires = DateTime.Now.AddMinutes(30); Response.Cookies.Set(cookie); } else { cookie = new HttpCookie(GlobalSettings.Backoffices.MonthlySubscriptionCookieName); cookie.Value = "true"; cookie.Expires = DateTime.Now.AddMinutes(30); Response.Cookies.Add(cookie); httpContext.Response.Cookies.Add(cookie); //Invalidate the customer subscription cache HttpRuntime.Cache.Remove(string.Format("exigo.customersubscriptions.{0}-{1}", customerID, Subscriptions.BackofficeFeatures)); } } return(new JsonNetResult(new { success = true })); } catch (Exception ex) { return(new JsonNetResult(new { success = false, message = ex.Message })); } }
/// <remarks/> public void ProcessTransactionAsync(TransactionalRequest TransactionalRequest) { this.ProcessTransactionAsync(TransactionalRequest, null); }
public ActionResult SubmitCheckout() { if (!PropertyBag.IsSubmitting) { PropertyBag.IsSubmitting = true; _propertyBag = ExigoDAL.PropertyBags.Update(PropertyBag); try { // Start creating the API requests var apiRequests = new List <ApiRequest>(); // Create the customer var customerRequest = new CreateCustomerRequest(PropertyBag.Customer) { InsertEnrollerTree = true, EnrollerID = PropertyBag.EnrollerID, CustomerType = CustomerTypes.Distributor, EntryDate = DateTime.Now.ToCST(), CustomerStatus = CustomerStatuses.Active, CanLogin = true, DefaultWarehouseID = OrderConfiguration.WarehouseID, Notes = "Distributor was entered by Distributor #{0}. Created by the API Enrollment at ".FormatWith(Identity.Owner.CustomerID) + HttpContext.Request.Url.Host + HttpContext.Request.Url.LocalPath + " on " + DateTime.Now.ToCST().ToString("dddd, MMMM d, yyyy h:mmtt") + " CST at IP " + Common.GlobalUtilities.GetClientIP() + " using " + HttpContext.Request.Browser.Browser + " " + HttpContext.Request.Browser.Version + " (" + HttpContext.Request.Browser.Platform + ")." }; ///IF Unilevel Place in Sponsor Tree Now, Binary will be placed post transactional envelope if (!GlobalSettings.Exigo.UseBinary) { customerRequest.InsertUnilevelTree = true; customerRequest.SponsorID = customerRequest.EnrollerID; } apiRequests.Add(customerRequest); // Set a few variables up for our shippping address, order/auto order items and the default auto order payment type var shippingAddress = PropertyBag.ShippingAddress; var orderItems = ShoppingCart.Items.Where(i => i.Type == ShoppingCartItemType.Order || i.Type == ShoppingCartItemType.EnrollmentPack).ToList(); var autoOrderItems = ShoppingCart.Items.Where(i => i.Type == ShoppingCartItemType.AutoOrder || i.Type == ShoppingCartItemType.EnrollmentAutoOrderPack).ToList(); var autoOrderPaymentType = AutoOrderPaymentType.PrimaryCreditCard; // Create initial order var orderRequest = new CreateOrderRequest(OrderConfiguration, PropertyBag.ShipMethodID, orderItems, shippingAddress); // Add order request now if we need to do any testing with the accepted functionality apiRequests.Add(orderRequest); if (PropertyBag.PaymentMethod.CanBeParsedAs <BankAccount>()) { var bankAccount = PropertyBag.PaymentMethod.As <BankAccount>(); if (bankAccount.Type == ExigoService.BankAccountType.New) { apiRequests.Add(new DebitBankAccountRequest(bankAccount)); } else { apiRequests.Add(new DebitBankAccountOnFileRequest(bankAccount)); } } // Create subscription autoorder if an autoorder has been chosen if (autoOrderItems != null && autoOrderItems.Count() > 0) { var autoOrderRequest = new CreateAutoOrderRequest(AutoOrderConfiguration, autoOrderPaymentType, DateTime.Now.AddMonths(1).ToCST(), PropertyBag.ShipMethodID, autoOrderItems, shippingAddress); autoOrderRequest.Frequency = FrequencyType.Monthly; apiRequests.Add(autoOrderRequest); } // Create customer site var customerSiteRequest = new SetCustomerSiteRequest(PropertyBag.Customer); apiRequests.Add(customerSiteRequest); // Add the new credit card to the customer's record and charge it for the current order if (PropertyBag.PaymentMethod.CanBeParsedAs <CreditCard>()) { var creditCard = PropertyBag.PaymentMethod.As <CreditCard>(); if (!creditCard.IsTestCreditCard && !Request.IsLocal) { var saveCCRequest = new SetAccountCreditCardTokenRequest(creditCard); apiRequests.Add(saveCCRequest); var chargeCCRequest = new ChargeCreditCardTokenRequest(creditCard); apiRequests.Add(chargeCCRequest); } else { orderRequest.OrderStatus = GlobalUtilities.GetDefaultOrderStatusType(); } } // Process the transaction var transaction = new TransactionalRequest { TransactionRequests = apiRequests.ToArray() }; var response = ExigoDAL.WebService().ProcessTransaction(transaction); var newcustomerid = 0; var neworderid = 0; var newautoorderid = 0; if (response.Result.Status == ResultStatus.Success) { foreach (var apiresponse in response.TransactionResponses) { if (apiresponse.CanBeParsedAs <CreateCustomerResponse>()) { newcustomerid = apiresponse.As <CreateCustomerResponse>().CustomerID; } if (apiresponse.CanBeParsedAs <CreateOrderResponse>()) { neworderid = apiresponse.As <CreateOrderResponse>().OrderID; } if (apiresponse.CanBeParsedAs <CreateAutoOrderResponse>()) { newautoorderid = apiresponse.As <CreateAutoOrderResponse>().AutoOrderID; } } } ///If Binary Place Node Now if (GlobalSettings.Exigo.UseBinary) { var placeNodeRequest = new PlaceBinaryNodeRequest { CustomerID = newcustomerid, ToParentID = PropertyBag.EnrollerID, PlacementType = BinaryPlacementType.EvenFill }; ExigoDAL.WebService().PlaceBinaryNode(placeNodeRequest); } PropertyBag.NewCustomerID = newcustomerid; PropertyBag.NewOrderID = neworderid; PropertyBag.NewAutoOrderID = newautoorderid; _propertyBag = ExigoDAL.PropertyBags.Update(PropertyBag); // If the transaction was successful, then send the customer an email that will allow them to confirm thier opt in choice if (PropertyBag.Customer.IsOptedIn) { ExigoDAL.SendEmailVerification(newcustomerid, PropertyBag.Customer.Email); } var token = Security.Encrypt(new { CustomerID = newcustomerid, OrderID = neworderid, AutoOrderID = newautoorderid }); // Enrollment complete, now delete the Property Bag ExigoDAL.PropertyBags.Delete(PropertyBag); ExigoDAL.PropertyBags.Delete(ShoppingCart); return(new JsonNetResult(new { success = true, token = token })); } catch (Exception exception) { PropertyBag.OrderException = exception.Message; PropertyBag.IsSubmitting = false; _propertyBag = ExigoDAL.PropertyBags.Update(PropertyBag); return(new JsonNetResult(new { success = false, message = exception.Message })); } } else { if (PropertyBag.NewCustomerID > 0) { var token = Security.Encrypt(new { CustomerID = PropertyBag.NewCustomerID, OrderID = PropertyBag.NewOrderID, AutoOrderID = PropertyBag.NewAutoOrderID }); return(new JsonNetResult(new { success = true, token = token })); } else { return(new JsonNetResult(new { success = false, message = Resources.Common.YourOrderIsSubmitting })); } } }
private TransactionalRequest Request_OrderTransaction() { TransactionalRequest request = new TransactionalRequest(); List<ApiRequest> details = new List<ApiRequest>(); // Add the request to create an order details.Add(Request_CreateOrder()); // Add the requests that handle the payment method for the order switch (Shopping.PropertyBag.PaymentType) { case ShoppingCartPropertyBag.PaymentMethodType.NewCreditCard: if (!IsTestCreditCard(Shopping.PropertyBag.CreditCardNumber)) { details.Add(Request_SaveNewCreditCardToAccount()); details.Add(Request_ChargeNewCreditCard()); } break; case ShoppingCartPropertyBag.PaymentMethodType.PrimaryCreditCard: details.Add(Request_ChargeCreditCardOnFile(AccountCreditCardType.Primary)); break; case ShoppingCartPropertyBag.PaymentMethodType.SecondaryCreditCard: details.Add(Request_ChargeCreditCardOnFile(AccountCreditCardType.Secondary)); break; case ShoppingCartPropertyBag.PaymentMethodType.NewBankAccount: if (!IsTestBankAccountAccountNumber(Shopping.PropertyBag.BankAccountAccountNumber)) { details.Add(Request_SaveNewBankAccountToAccount()); details.Add(Request_ChargeNewBankAccount()); } break; case ShoppingCartPropertyBag.PaymentMethodType.BankAccountOnFile: details.Add(Request_ChargeBankAccountOnFile()); break; } request.TransactionRequests = details.ToArray(); return request; }
public ActionResult SubmitCheckout() { if (!PropertyBag.IsSubmitting) { PropertyBag.IsSubmitting = true; _propertyBag = Exigo.PropertyBags.Update(PropertyBag); try { // Start creating the API requests var details = new List <ApiRequest>(); var orderRequest = new CreateOrderRequest(OrderConfiguration, PropertyBag.ShipMethodID, ShoppingCart.Items, PropertyBag.ShippingAddress) { CustomerID = Identity.Current.CustomerID }; details.Add(orderRequest); // Create the payment request if (PropertyBag.PaymentMethod is CreditCard) { var card = PropertyBag.PaymentMethod as CreditCard; if (card.Type == CreditCardType.New) { if (!card.IsTestCreditCard && !Request.IsLocal) { details.Add(new ChargeCreditCardTokenRequest(card)); } else { // Test Credit Card, so no need to charge card ((CreateOrderRequest)details.Where(c => c is CreateOrderRequest).FirstOrDefault()).OrderStatus = GlobalUtilities.GetDefaultOrderStatusType(); } } else { details.Add(new ChargeCreditCardTokenOnFileRequest(card)); } } if (PropertyBag.PaymentMethod is BankAccount) { var account = PropertyBag.PaymentMethod as BankAccount; if (account.Type == ExigoService.BankAccountType.New) { details.Add(new DebitBankAccountRequest(account)); } else { details.Add(new DebitBankAccountOnFileRequest(account)); } } // Process the transaction var transactionRequest = new TransactionalRequest(); transactionRequest.TransactionRequests = details.ToArray(); var transactionResponse = Exigo.WebService().ProcessTransaction(transactionRequest); var newOrderID = 0; if (transactionResponse.Result.Status == ResultStatus.Success) { foreach (var response in transactionResponse.TransactionResponses) { if (response is CreateOrderResponse) { var orderResponse = (CreateOrderResponse)response; newOrderID = orderResponse.OrderID; // Create a cookie to store our newest Order ID to ensure it shows on the Order History page var orderIDCookie = new System.Web.HttpCookie("NewOrder_{0}".FormatWith(Identity.Current.CustomerID), newOrderID.ToString()); orderIDCookie.Expires = DateTime.UtcNow.AddMinutes(5); Response.Cookies.Add(orderIDCookie); } } } PropertyBag.NewOrderID = newOrderID; _propertyBag = Exigo.PropertyBags.Update(PropertyBag); return(new JsonNetResult(new { success = true })); } catch (Exception exception) { PropertyBag.OrderException = exception.Message; PropertyBag.IsSubmitting = false; _propertyBag = Exigo.PropertyBags.Update(PropertyBag); return(new JsonNetResult(new { success = false, message = exception.Message })); } } else { if (PropertyBag.NewOrderID > 0) { return(new JsonNetResult(new { success = true })); } else { return(new JsonNetResult(new { success = false, message = Resources.Common.YourOrderIsSubmitting })); } } }
public ActionResult SubmitCheckout() { if (!PropertyBag.IsSubmitting) { PropertyBag.IsSubmitting = true; _propertyBag = Exigo.PropertyBags.Update(PropertyBag); try { // Start creating the API requests var details = new List <ApiRequest>(); // Create the order request, if applicable var orderItems = ShoppingCart.Items.Where(c => c.Type == ShoppingCartItemType.Order); var hasOrder = orderItems.Count() > 0; if (hasOrder) { var orderRequest = new CreateOrderRequest(OrderConfiguration, PropertyBag.ShipMethodID, orderItems, PropertyBag.ShippingAddress) { CustomerID = Identity.Current.CustomerID }; details.Add(orderRequest); } // Create the autoorder request, if applicable var autoOrderItems = ShoppingCart.Items.Where(c => c.Type == ShoppingCartItemType.AutoOrder); var hasAutoOrder = autoOrderItems.Count() > 0; if (hasAutoOrder) { var autoOrderRequest = new CreateAutoOrderRequest(AutoOrderConfiguration, Exigo.GetAutoOrderPaymentType(PropertyBag.PaymentMethod), PropertyBag.AutoOrderStartDate, PropertyBag.ShipMethodID, autoOrderItems, PropertyBag.ShippingAddress) { CustomerID = Identity.Current.CustomerID, Frequency = PropertyBag.AutoOrderFrequencyType }; details.Add(autoOrderRequest); } // Create the payment request if (PropertyBag.PaymentMethod is CreditCard) { var card = PropertyBag.PaymentMethod as CreditCard; if (card.Type == CreditCardType.New) { if (hasAutoOrder) { card = Exigo.SaveNewCustomerCreditCard(Identity.Current.CustomerID, card); ((CreateAutoOrderRequest)details.Where(c => c is CreateAutoOrderRequest).FirstOrDefault()).PaymentType = Exigo.GetAutoOrderPaymentType(card); } if (hasOrder) { if (!card.IsTestCreditCard && !Request.IsLocal) { details.Add(new ChargeCreditCardTokenRequest(card)); } else { // Test Credit Card, so no need to charge card ((CreateOrderRequest)details.Where(c => c is CreateOrderRequest).FirstOrDefault()).OrderStatus = GlobalUtilities.GetDefaultOrderStatusType(); } } } else { if (hasOrder && !Request.IsLocal) { details.Add(new ChargeCreditCardTokenOnFileRequest(card)); } } } if (PropertyBag.PaymentMethod is BankAccount) { var account = PropertyBag.PaymentMethod as BankAccount; if (account.Type == ExigoService.BankAccountType.New) { if (hasAutoOrder) { account = Exigo.SaveNewCustomerBankAccount(Identity.Current.CustomerID, account); ((CreateAutoOrderRequest)details.Where(c => c is CreateAutoOrderRequest).FirstOrDefault()).PaymentType = Exigo.GetAutoOrderPaymentType(account); } if (hasOrder) { details.Add(new DebitBankAccountRequest(account)); } } else { if (hasOrder) { details.Add(new DebitBankAccountOnFileRequest(account)); } } } // Process the transaction var transactionRequest = new TransactionalRequest(); transactionRequest.TransactionRequests = details.ToArray(); var transactionResponse = Exigo.WebService().ProcessTransaction(transactionRequest); var newOrderID = 0; var newAutoOrderID = 0; if (transactionResponse.Result.Status == ResultStatus.Success) { foreach (var response in transactionResponse.TransactionResponses) { if (response is CreateOrderResponse) { newOrderID = ((CreateOrderResponse)response).OrderID; } if (response is CreateAutoOrderResponse) { newAutoOrderID = ((CreateAutoOrderResponse)response).AutoOrderID; } } } PropertyBag.NewOrderID = newOrderID; PropertyBag.NewAutoOrderID = newAutoOrderID; _propertyBag = Exigo.PropertyBags.Update(PropertyBag); return(new JsonNetResult(new { success = true })); } catch (Exception exception) { PropertyBag.OrderException = exception.Message; PropertyBag.IsSubmitting = false; _propertyBag = Exigo.PropertyBags.Update(PropertyBag); return(new JsonNetResult(new { success = false, message = exception.Message })); } } else { if (PropertyBag.NewOrderID > 0 || PropertyBag.NewAutoOrderID > 0) { return(new JsonNetResult(new { success = true })); } else { return(new JsonNetResult(new { success = false, message = Resources.Common.OrderSubmittingMessage })); } } }
////Not being used anymore...just here for reference //public void CreateCustomerRecruitingRewards(int customerId) //{ // var api = Exigo.WebService(); // var reward = new RecruitingRewardDiscount(); // //Set start and expiry dates. // var startDate = DateTime.Now; // reward.CompletionDate = startDate.AddDays(60); // //customerId = 1022; // const int extendedGroupId = (int)CustomerExtendedGroup.RecruitingRewards; // //Get Discount amount and check validity. // reward.RewardAmount = Convert.ToDecimal(GetRecruitingReward(customerId)); // if (reward.DiscountAmount <= 0) return; // //Check if the reward has already been added for the customer // var customerEx = Exigo.GetCustomerExtendedDetails(customerId, extendedGroupId).Where(x => Convert.ToDateTime(x.Field2) == reward.CompletionDate); // if (customerEx.Any()) return; // var response = api.CreateCustomerExtended(new CreateCustomerExtendedRequest() // { // CustomerID = customerId, // ExtendedGroupID = extendedGroupId, // Field1 = reward.ItemCode, //Item Code // Field2 = reward.CompletionDate.ToString(CultureInfo.InvariantCulture), //Completion Date // Field4 = Convert.ToString(reward.RewardAmount, CultureInfo.InvariantCulture), //RewardAmount // Field3 = 0.ToString(CultureInfo.InvariantCulture) //Redeemed // }); //} ////Also not being use at this time. //public decimal GetRecruitingReward(int customerId) //{ // var request = new GetPointAccountRequest() // { // CustomerID = customerId, // PointAccountID = PointAccounts.RecruitingRewards // }; // var rewardAmount = Exigo.GetRecruitingReward(request); // return rewardAmount; //} //public IList<RecruitingRewardDiscount> GetCustomerRecruitingRewardDiscounts(int customerId) //{ // var details = Exigo.GetCustomerExtendedDetails(customerId, (int)CustomerExtendedGroup.RecruitingRewards /* Recruiting Rewards Extended Group ID */); // var recruitingReward = (from d in details // select new RecruitingRewardDiscount() // { // CustomerExtendedDetailId = d.CustomerExtendedDetailID, // CompletionDate = DateTime.Parse(d.Field2), // ItemCode = d.Field1, // HasBeenRedeemed = (d.Field3 == "1"), // RewardAmount = Convert.ToDecimal(d.Field4) // } // ); // return recruitingReward.ToList(); //} #endregion Recruiting-Reward #region Enrollee-Reward //public void CreateCustomerEnrolleeRewards(int customerId) //{ // var api = Exigo.WebService(); // var reward = new EnrolleeRewardDiscount(); // //Set start and expiry dates. // var startDate = DateTime.Now; // reward.CompletionDate = startDate.AddDays(60); // //customerId = 1022; // const int extendedGroupId = (int)CustomerExtendedGroup.EnrolleeRewards; // //Get Discount amount and check validity. // reward.RewardAmount = Convert.ToDecimal(GetEnrolleeReward(customerId)); // if (reward.DiscountAmount <= 0) return; // //Check if the reward has already been added for the customer // var customerEx = Exigo.GetCustomerExtendedDetails(customerId, extendedGroupId).Where(x => Convert.ToDateTime(x.Field2) == reward.CompletionDate); // if (customerEx.Any()) return; // var response = api.CreateCustomerExtended(new CreateCustomerExtendedRequest() // { // CustomerID = customerId, // ExtendedGroupID = extendedGroupId, // Field1 = reward.CompletionDate.ToString(CultureInfo.InvariantCulture), //Completion Date // Field2 = Convert.ToString(reward.RewardAmount), //RewardAmount // Field3 = 0.ToString(CultureInfo.InvariantCulture) //Redeemed // }); //} //public decimal GetEnrolleeReward(int customerId) //{ // var request = new GetPointAccountRequest() // { // CustomerID = customerId, // PointAccountID = PointAccounts.EnrolleeRewards // }; // var rewardAmount = Exigo.GetEnrolleeReward(request); // return rewardAmount; //} //public IList<EnrolleeRewardDiscount> GetCustomerEnrolleeRewardDiscounts(int customerId) //{ // var details = Exigo.GetCustomerExtendedDetails(customerId, (int)CustomerExtendedGroup.EnrolleeRewards /* Recruiting Rewards Extended Group ID */); // var enrolleeReward = (from d in details // select new EnrolleeRewardDiscount() // { // CustomerExtendedDetailId = d.CustomerExtendedDetailID, // CompletionDate = DateTime.Parse(d.Field2), // ItemCode = d.Field3, // HasBeenRedeemed = (d.Field5 == "1") // } // ); // return enrolleeReward.ToList(); //} #endregion Enrollee-Reward public int CreateRewardsAutoOrder(string itemCode, int customerId, int ExtendedGroupID, int phase) { ShoppingCart.Items.Clear(); try { Api = Exigo.WebService(); CustomerExtendedDetails customerEx = Exigo.GetCustomerExtendedDetails(customerId, ExtendedGroupID).FirstOrDefault(x => x.Field3 == itemCode && x.Field1 == phase.ToString()); if (customerEx != null) { return(0); } var customer = Exigo.GetCustomer(customerId); // Start creating the API requests var details = new List <ApiRequest>(); // Create the order request, if applicable ShoppingCartItem cartItem = ShoppingCartItem.Create(); cartItem.ItemCode = itemCode; cartItem.Quantity = 1; cartItem.PriceEachOverride = 0; cartItem.PriceTypeID = PriceTypes.Wholesale; cartItem.Type = ShoppingCartItemType.Order; ShoppingCart.Items.Add(cartItem); if (string.IsNullOrEmpty(itemCode)) { _log.TraceEvent(TraceEventType.Warning, 1, "IRewardService.CreateBonusKickerAutoOrder( String, int ): Entering method and ShoppingCart.Items is {0}.", (ShoppingCart.Items == null) ? "null" : "empty"); _nlog.Warn("IRewardService.CreateBonusKickerAutoOrder( String, int ): Entering method and ShoppingCart.Items is {0}.", (ShoppingCart.Items == null) ? "null" : "empty"); } else { _log.TraceEvent(TraceEventType.Information, 1, "IRewardService.CreateBonusKickerAutoOrder( String, int ): Entering method and ShoppingCart.Items is {0}.", ShoppingCart.Items.Count); _nlog.Info("IOrderService.PlaceOrder( Shop, String ): Entering method with {0} products.", ShoppingCart.Items.Count); } // Create the autoorder request, if applicable var autoOrderRequest = new CreateOrderRequest( AutoOrderConfiguration, (int)ShipMethods.Standard, string.Empty, ShoppingCart.Items, new ShippingAddress { Address1 = string.IsNullOrEmpty(customer.MainAddress.Address1) ? customer.MailingAddress.Address1 : customer.MainAddress.Address1, Address2 = string.IsNullOrEmpty(customer.MainAddress.Address2) ? customer.MailingAddress.Address2 : customer.MainAddress.Address2, AddressType = AddressType.Mailing, City = string.IsNullOrEmpty(customer.MainAddress.City) ? customer.MailingAddress.City : customer.MainAddress.City, Country = string.IsNullOrEmpty(customer.MainAddress.Country) ? customer.MailingAddress.Country : customer.MainAddress.Country, CustomerID = customer.CustomerID, Email = customer.Email, LastName = customer.LastName, FirstName = customer.FirstName, Phone = customer.MobilePhone, State = string.IsNullOrEmpty(customer.MainAddress.State) ? customer.MailingAddress.State : customer.MainAddress.State, Zip = string.IsNullOrEmpty(customer.MainAddress.Zip) ? customer.MailingAddress.Zip : customer.MainAddress.Zip, }, shippingOverride: 0, taxOverride: 0); autoOrderRequest.TaxRateOverride = 0M; autoOrderRequest.ShippingAmountOverride = 0M; autoOrderRequest.CustomerID = customerId; autoOrderRequest.Other15 = "1"; details.Add(autoOrderRequest); // Process the transaction var transactionRequest = new TransactionalRequest { TransactionRequests = details.ToArray() }; var transactionResponse = Exigo.WebService().ProcessTransaction(transactionRequest); if (transactionResponse == null) { _log.TraceEvent(TraceEventType.Error, 1, "There was no CreateOrderResponse."); } else { _log.TraceEvent(TraceEventType.Information, 1, "ProcessTransaction.Result.TransactionKey = {0}", transactionResponse.Result.TransactionKey); _log.TraceEvent(TraceEventType.Information, 1, "ProcessTransaction.Result.Reponse = {0}", transactionResponse.Result.Status); if ((transactionResponse.Result.Errors != null) && (transactionResponse.Result.Errors.Length > 0)) { _log.TraceEvent(TraceEventType.Error, 1, "ProcessTransaction.Result.Errors.Length = {0}", transactionResponse.Result.Errors.Length); for (int i = 0; i < transactionResponse.Result.Errors.Length; i++) { _log.TraceEvent(TraceEventType.Error, 1, "ProcessTransaction.Result.Errors[{0}] = {1}", i, transactionResponse.Result.Errors[i]); } } } var newOrderId = 0; //process the response if (transactionResponse.Result.Status == ResultStatus.Success) { foreach (var orderResponse in transactionResponse.TransactionResponses.OfType <CreateOrderResponse>()) { newOrderId = orderResponse.OrderID; var request = Api.CreateCustomerExtended(new CreateCustomerExtendedRequest() { CustomerID = customer.CustomerID, ExtendedGroupID = ExtendedGroupID, Field1 = phase.ToString(), // phase # for bonus kicker or module for training Field2 = DateTime.Now.ToString(CultureInfo.InvariantCulture), Field3 = itemCode, //ItemCode Field4 = 100.ToString(), //Discount Percent Field5 = 1.ToString(CultureInfo.InvariantCulture), //Redeemed Field6 = newOrderId.ToString() // orderid }); } var updateOrder = Api.ChangeOrderStatus(new ChangeOrderStatusRequest() { OrderID = newOrderId, OrderStatus = OrderStatusType.Accepted }); } return(newOrderId); } catch (Exception ex) { return(0); } }