public void AddItem(ChineseTeaShopEntities dbContext, TeaProduct product, decimal finalPrice, int quantity, string userId)
        {
            //Search whether cart has desired product
            ShRecord record = recordCollection.FirstOrDefault(m => m.TeaProduct == product);

            if (record == null || record.IsCompleted == true)
            {
                ShRecord updateRecord = new ShRecord {
                    ProductId = product.ID, TeaProduct = product, FinalPrice = finalPrice, Quantity = quantity, AddTime = DateTime.Now, UserId = userId
                };

                //update database
                dbContext.ShRecords.Add(updateRecord);
                dbContext.SaveChanges();

                //update shopping cart
                recordCollection.Add(updateRecord);
            }
            else if (record.IsCompleted == false)
            {
                record.Quantity              += quantity;
                record.FinalPrice            += finalPrice;
                dbContext.Entry(record).State = System.Data.Entity.EntityState.Modified;
                dbContext.SaveChanges();
            }
        }
        public void ProcessOrder(ChineseTeaShopEntities dbContext, string userId, ShippingDetails shippingInfo)
        {
            ShoppingRecordViewModel cart   = new ShoppingRecordViewModel();
            List <ShRecord>         shList = dbContext.ShRecords.Where(m => m.UserId == userId).ToList();

            cart.recordCollection = shList;

            using (var smtpClient = new SmtpClient())
            {
                smtpClient.EnableSsl             = emailSettings.UseSsl;
                smtpClient.Host                  = emailSettings.SeverName;
                smtpClient.Port                  = emailSettings.ServerPort;
                smtpClient.UseDefaultCredentials = false;
                smtpClient.Credentials           = new NetworkCredential(emailSettings.Username, emailSettings.Password);

                StringBuilder body = new StringBuilder()
                                     .AppendLine("A new order has been submitted")
                                     .AppendLine("---")
                                     .AppendLine("Items:");

                foreach (var line in cart.recordCollection)
                {
                    var subtotal = line.TeaProduct.Price * line.Quantity;
                    body.AppendFormat("{0} * {1} (subtotal: {2:c})",
                                      line.Quantity,
                                      line.TeaProduct.Name,
                                      subtotal);
                }

                body.AppendFormat("Total order value: {0:c}",
                                  cart.ComputeTotalValue())
                .AppendLine("---")
                .AppendLine("Ship to:")
                .AppendLine(shippingInfo.Name)
                .AppendLine(shippingInfo.Line1)
                .AppendLine(shippingInfo.City)
                .AppendLine(shippingInfo.State ?? "")
                .AppendLine(shippingInfo.Country)
                .AppendLine(shippingInfo.Zip)
                .AppendLine("---")
                .AppendFormat("Gift wrap: {0}", shippingInfo.GiftWrap ? "Yes" : "No");

                MailMessage mailMessage = new MailMessage(
                    emailSettings.MailFromAddress,
                    emailSettings.MailToAddress,
                    "New order submitted!",
                    body.ToString());

                smtpClient.Send(mailMessage);
            }
        }