private void EmailConfirmations(CheckoutViewModel checkout)
 {
     var fromBody = string.Format("from {0} {1} at {2}", checkout.FirstName, checkout.LastName, checkout.Email);
     var settings = GetEmailSettings();
     using (
         var client = new SmtpClient(settings.Server, settings.Port)
         {
             Credentials = new NetworkCredential(settings.Username, settings.Password),
             EnableSsl = settings.EnableSsl
         })
     {
         if (!string.IsNullOrEmpty(checkout.Money))
         {
             client.Send(settings.From, settings.Money, "New Money Gift", string.Format("${0} {1}", checkout.Money, fromBody));
         }
         if (!string.IsNullOrEmpty(checkout.Time))
         {
             client.Send(settings.From, settings.Time, "New Time Gift", string.Format("{0} hours {1}", checkout.Time, fromBody));
         }
         if (!string.IsNullOrEmpty(checkout.Talent))
         {
             client.Send(settings.From, settings.Talent, "New Talent Gift", string.Format("{0} talent {1}", checkout.Talent, fromBody));
         }
         if (!string.IsNullOrEmpty(checkout.InKind))
         {
             client.Send(settings.From, settings.Time, "New In Kind Gift", string.Format("{0} in kind {1}", checkout.InKind, fromBody));
         }
         client.Send(settings.From, checkout.Email, settings.Subject, settings.Body);
     }
 }
 private Braintree.CustomerRequest GetCustomer(CheckoutViewModel checkout)
 {
     return new Braintree.CustomerRequest
     {
         FirstName = checkout.FirstName ?? "",
         LastName = checkout.LastName ?? "",
         Email = checkout.Email ?? "",
         Phone = checkout.Phone ?? "",
         CustomFields = new Dictionary<string, string>
         {
             { "inkind", checkout.InKind ?? "none" } ,
             { "talent", checkout.Talent ?? "none" },
             { "hours", checkout.Time ?? "none" }
         }
     };
 }
        public void Submit(CheckoutViewModel checkout)
        {
            var success = Process(checkout);
            try
            {
                EmailConfirmations(checkout);
            }
            catch
            {

            }

            if (!success)
            {
                throw new Exception("Processing failed.");
            }
        }
        private bool Process(CheckoutViewModel checkout)
        {
            var gateway = new BraintreeGateway
            {
                Environment = Braintree.Environment.SANDBOX,
                MerchantId = "h4gbd8c59p853zbh",
                PublicKey = "kwjdpvcx2hm45m87",
                PrivateKey = "682fb59e2a75daebdcf0326a57fc08d9"
            };

            if (string.IsNullOrEmpty(checkout.Money))
            {
                var request = GetCustomer(checkout);
                var result = gateway.Customer.Create(request);
                return result.IsSuccess();
            }
            else
            {
                // I don't know why, but custo fields in a customer in a transaction is throwing exceptions.  adding the customer separately for now
                var crequest = GetCustomer(checkout);
                var cresult = gateway.Customer.Create(crequest);

                if (cresult.IsSuccess())
                {
                    var request = GetTransaction(checkout);
                    request.Customer.CustomFields = null;
                    var result = gateway.Transaction.Sale(request);
                    return result.IsSuccess();

                }
                //if we made it here, the customer request failed...spit back fail...sorry for teh mess...we're running out of time.
                return false;
            }
        }
 private Braintree.TransactionRequest GetTransaction(CheckoutViewModel checkout)
 {
     return new Braintree.TransactionRequest
     {
         Amount = decimal.Parse(checkout.Money),
         CreditCard = new TransactionCreditCardRequest
         {
             Number = checkout.CreditCard ?? "",
             ExpirationMonth = checkout.ExpyMonth ?? "",
             ExpirationYear = checkout.ExpyYear ?? "",
             CVV = checkout.VerificationCode ?? "",
             CardholderName = string.Format("{0} {1}", checkout.FirstName ?? "", checkout.LastName ?? ""),
         },
         Customer = GetCustomer(checkout),
         Options = new TransactionOptionsRequest
         {
             StoreInVault = true
         }
     };
 }