public async Task<Order> CreateOrderAsync(string userId, ShoppingCart shoppingCart, Address shippingAddress, Address billingAddress, PaymentMethod paymentMethod, ShippingMethod shippingMethod) { Order order = new Order { UserId = userId, ShoppingCart = shoppingCart, ShippingAddress = shippingAddress, BillingAddress = billingAddress, PaymentMethod = paymentMethod, ShippingMethod = shippingMethod }; order.Id = await _orderService.CreateOrderAsync(order); return order; }
public async Task<int> CreateOrderAsync(Order order) { using (var orderClient = new HttpClient()) { orderClient.DefaultRequestHeaders.Add("Accept", "application/json"); // In order to meet the Windows 8 app certification requirements, // you cannot send Credit Card information to a Service in the clear. // The payment processing must meet the current PCI Data Security Standard (PCI DSS). // See http://go.microsoft.com/fwlink/?LinkID=288837 // and http://go.microsoft.com/fwlink/?LinkID=288839 // for more information. // Replace sensitive information with dummy values var orderToSend = new Order() { UserId = order.UserId, ShippingMethod = order.ShippingMethod, ShoppingCart = order.ShoppingCart, BillingAddress = order.BillingAddress, ShippingAddress = order.ShippingAddress, PaymentMethod = new PaymentMethod() { CardNumber = "**** **** **** ****", CardVerificationCode = "****", CardholderName = order.PaymentMethod.CardholderName, ExpirationMonth = order.PaymentMethod.ExpirationMonth, ExpirationYear = order.PaymentMethod.ExpirationYear, Phone = order.PaymentMethod.Phone } }; string requestUrl = _clientBaseUrl; var stringContent = new HttpStringContent(JsonConvert.SerializeObject(orderToSend), Windows.Storage.Streams.UnicodeEncoding.Utf8, "application/json"); var response = await orderClient.PostAsync(new Uri(requestUrl), stringContent); await response.EnsureSuccessWithValidationSupportAsync(); var responseContent = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<int>(responseContent); } }
public async Task CreateBasicOrderAsync(string userId, ShoppingCart shoppingCart, Address shippingAddress, Address billingAddress, PaymentMethod paymentMethod) { var basicShippingMethod = await _shippingMethodService.GetBasicShippingMethodAsync(); _currentOrder = await CreateOrderAsync(userId, shoppingCart, shippingAddress, billingAddress, paymentMethod, basicShippingMethod); _sessionStateService.SessionState[OrderKey] = _currentOrder; }
public override async void OnNavigatedTo(NavigatedToEventArgs e, Dictionary<string, object> viewModelState) { // Get latest shopping cart var shoppingCart = await _shoppingCartRepository.GetShoppingCartAsync(); _order = _orderRepository.CurrentOrder; _order.ShoppingCart = shoppingCart; // Populate the ShoppingCart items var shoppingCartItemVMs = _order.ShoppingCart.ShoppingCartItems.Select(item => new ShoppingCartItemViewModel(item, _resourceLoader)); ShoppingCartItemViewModels = new ReadOnlyCollection<ShoppingCartItemViewModel>(shoppingCartItemVMs.ToList()); // Populate the ShippingMethods and set the selected one var shippingMethods = await _shippingMethodService.GetShippingMethodsAsync(); ShippingMethods = new ReadOnlyCollection<ShippingMethod>(shippingMethods.ToList()); SelectedShippingMethod = _order.ShippingMethod != null ? ShippingMethods.FirstOrDefault(c => c.Id == _order.ShippingMethod.Id) : null; // Update order's address and payment information _order.ShippingAddress = await _checkoutDataRepository.GetShippingAddressAsync(_order.ShippingAddress.Id); _order.BillingAddress = await _checkoutDataRepository.GetBillingAddressAsync(_order.BillingAddress.Id); _order.PaymentMethod = await _checkoutDataRepository.GetPaymentMethodAsync(_order.PaymentMethod.Id); // Populate the CheckoutData items (Addresses & payment information) CheckoutDataViewModels = new ObservableCollection<CheckoutDataViewModel> { CreateCheckoutData(_order.ShippingAddress, Constants.ShippingAddress), CreateCheckoutData(_order.BillingAddress, Constants.BillingAddress), CreateCheckoutData(_order.PaymentMethod) }; base.OnNavigatedTo(e, viewModelState); if (e.NavigationMode == NavigationMode.Refresh) { // Restore the selected CheckoutData manually string selectedCheckoutData = RetrieveEntityStateValue<string>("selectedCheckoutData", viewModelState); if (!string.IsNullOrWhiteSpace(selectedCheckoutData)) { SelectedCheckoutData = CheckoutDataViewModels.FirstOrDefault(c => c.EntityId == selectedCheckoutData); } } }
public Task ProcessOrderAsync(Order order) { return ProcessOrderAsyncDelegate(order); }
public Task<int> CreateOrderAsync(Order order) { return CreateOrderAsyncDelegate(order); }
public void NavigatingToWhenNoShippingMethodSelected_RecalculatesOrder() { var shippingMethods = new List<ShippingMethod> { new ShippingMethod { Id = 1, Cost = 0 } }; var shoppingCartItems = new List<ShoppingCartItem> { new ShoppingCartItem { Quantity = 1, Currency = "USD", Product = new Product() } }; var order = new Order { ShoppingCart = new ShoppingCart(shoppingCartItems) { Currency = "USD", TotalPrice = 100 }, ShippingAddress = new Address { Id = "1"}, BillingAddress = new Address { Id = "1" }, PaymentMethod = new PaymentMethod() { CardNumber = "1234" }, ShippingMethod = null }; var shippingMethodService = new MockShippingMethodService { GetShippingMethodsAsyncDelegate = () => Task.FromResult<IEnumerable<ShippingMethod>>(shippingMethods) }; var orderRepository = new MockOrderRepository { CurrentOrder = order }; var shoppingCartRepository = new MockShoppingCartRepository { GetShoppingCartAsyncDelegate = () => Task.FromResult(order.ShoppingCart) }; var checkoutDataRepository = new MockCheckoutDataRepository(); checkoutDataRepository.GetShippingAddressAsyncDelegate = s => Task.FromResult(new Address()); checkoutDataRepository.GetBillingAddressAsyncDelegate = s => Task.FromResult(new Address()); checkoutDataRepository.GetPaymentMethodDelegate = s => Task.FromResult(new PaymentMethod { CardNumber = "1234" }); var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), new MockOrderService(), orderRepository, shippingMethodService, checkoutDataRepository, shoppingCartRepository, new MockAccountService(), new MockResourceLoader(), null, null); target.OnNavigatedTo(new NavigatedToEventArgs { Parameter = null, NavigationMode = NavigationMode.New }, null); Assert.AreEqual("$0.00", target.ShippingCost); Assert.AreEqual("$100.00", target.OrderSubtotal); Assert.AreEqual("$100.00", target.GrandTotal); }
public void SelectCheckoutData_Opens_AppBar() { var shippingMethods = new List<ShippingMethod>() { new ShippingMethod() { Id = 1, Cost = 0 } }; var shoppingCartItems = new List<ShoppingCartItem>() { new ShoppingCartItem() { Quantity = 1, Currency = "USD", Product = new Product() } }; var order = new Order() { ShoppingCart = new ShoppingCart(shoppingCartItems) { Currency = "USD", FullPrice = 100 }, ShippingAddress = new Address(), BillingAddress = new Address(), PaymentMethod = new PaymentMethod() { CardNumber = "1234" }, ShippingMethod = shippingMethods.First() }; var shippingMethodService = new MockShippingMethodService() { GetShippingMethodsAsyncDelegate = () => Task.FromResult<IEnumerable<ShippingMethod>>(shippingMethods) }; var orderRepository = new MockOrderRepository() { CurrentOrder = order}; var shoppingCartRepository = new MockShoppingCartRepository(); shoppingCartRepository.GetShoppingCartAsyncDelegate = () => Task.FromResult(order.ShoppingCart); var checkoutDataRepository = new MockCheckoutDataRepository(); checkoutDataRepository.GetShippingAddressAsyncDelegate = s => Task.FromResult(new Address()); checkoutDataRepository.GetBillingAddressAsyncDelegate = s => Task.FromResult(new Address()); checkoutDataRepository.GetPaymentMethodDelegate = s => Task.FromResult(new PaymentMethod { CardNumber = "1234" }); var target = new CheckoutSummaryPageViewModel(new MockNavigationService(), new MockOrderService(), orderRepository, shippingMethodService, checkoutDataRepository, shoppingCartRepository, new MockAccountService(), new MockResourceLoader(), null, null); target.OnNavigatedTo(new NavigatedToEventArgs { Parameter = null, NavigationMode = NavigationMode.New }, null); Assert.IsFalse(target.IsBottomAppBarOpened); target.SelectedCheckoutData = target.CheckoutDataViewModels.First(); Assert.IsTrue(target.IsBottomAppBarOpened); }