public void ChargeCard(PaymentDetails paymentDetails, Cart cart) { using (var paymentGateway = new PaymentGateway()) { try { paymentGateway.Credentials = "account credentials"; paymentGateway.CardNumber = paymentDetails.CreditCardNumber; paymentGateway.ExpiresMonth = paymentDetails.ExpiresMonth; paymentGateway.ExpiresYear = paymentDetails.ExpiresYear; paymentGateway.NameOnCard = paymentDetails.CardholderName; paymentGateway.AmountToCharge = cart.TotalAmount; paymentGateway.Charge(); } catch (AvsMismatchException ex) { throw new OrderException("The card gateway rejected the card based on the address provided.", ex); } catch (Exception ex) { throw new OrderException("There was a problem with your card.", ex); } } }
public void NotFailWithNoItemsNotificationNoCreditCard() { var order = new Order(); var cart = new Cart() { CustomerEmail = "*****@*****.**" }; var paymentDetails = new PaymentDetails() { PaymentMethod = PaymentMethod.Cash }; bool shouldNotifyCustomer = true; order.Checkout(cart, paymentDetails, shouldNotifyCustomer); // if I got here, I guess it worked... }
public void Checkout(Cart cart, PaymentDetails paymentDetails, bool notifyCustomer) { if (paymentDetails.PaymentMethod == PaymentMethod.CreditCard) { ChargeCard(paymentDetails, cart); } ReserveInventory(cart); if (notifyCustomer) { NotifyCustomer(cart); } }
public void ReserveInventory(Cart cart) { foreach (OrderItem item in cart.Items) { try { var inventorySystem = new InventorySystem(); inventorySystem.Reserve(item.Sku, item.Quantity); } catch (InsufficientInventoryException ex) { throw new OrderException("Insufficient inventory for item " + item.Sku, ex); } catch (Exception ex) { throw new OrderException("Problem reserving inventory", ex); } } }
public void NotifyCustomer(Cart cart) { string customerEmail = cart.CustomerEmail; if (!String.IsNullOrEmpty(customerEmail)) { using (var message = new MailMessage("*****@*****.**", customerEmail)) using (var client = new SmtpClient("localhost")) { message.Subject = "Your order placed on " + DateTime.Now; message.Body = "Your order details: \n " + cart; try { client.Send(message); } catch (Exception ex) { Logger.Error("Problem sending notification email", ex); throw; } } } }