Пример #1
0
 protected string SerializeReservation(FlowerOrder order)
 {
     return(JsonSerializer.Serialize(order, new JsonSerializerOptions
     {
         DefaultIgnoreCondition = System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
     }));
 }
        public FlowerOrder Update(FlowerOrder entity)
        {
            var flowerOrder = context.FlowerOrders.Attach(entity);

            flowerOrder.State = Microsoft.EntityFrameworkCore.EntityState.Modified;
            context.SaveChanges();
            return(entity);
        }
Пример #3
0
        // GET: Order/Details/5
        public ActionResult Details(int id)
        {
            FlowerOrderManager manager = new FlowerOrderManager();
            FlowerOrder        model   = manager.GetFlowerOrderById(id);

            IList <Flower> flowers = new FlowerManager().GetFlowers();

            model.OrderItems = manager.GetOrderItems(model.Id);
            foreach (OrderItem orderItem in model.OrderItems)
            {
                orderItem.Flower = flowers.First(f => f.Id == orderItem.FlowerId);
            }

            return(View(model));
        }
Пример #4
0
        public void CreateOrder(FlowerOrder order)
        {
            using (DbConnection conn = new SqlConnection(ConnectionStr))
            {
                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"udpCreateOrder";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.AddParameter("@customer_id", DbType.Int32, order.CustomerId);
                    cmd.AddParameter("@created_at", DbType.DateTime, order.CreatedAt);
                    cmd.AddParameter("@delivery_address", DbType.String, order.DeliveryAddress);
                    cmd.AddParameter("@delivery_phone", DbType.String, order.DeliveryPhone);
                    cmd.AddParameter("@process_status", DbType.Int32, order.ProcessStatus);

                    conn.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }
Пример #5
0
        public IList <FlowerOrder> GetFlowerOrdersByCustomer(int customerId)
        {
            IList <FlowerOrder> list = new List <FlowerOrder>();

            using (DbConnection conn = new SqlConnection(ConnectionStr))
            {
                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"SELECT [id]
                                                ,[customer_id]
                                                ,[created_at]
                                                ,[delivery_address]
                                                ,[delivery_phone]
                                                ,[process_status]

                                                FROM [dbo].[flower_order]
                                                WHERE [customer_id] = @customer_id
                                                ORDER BY [created_at] ASC";
                    conn.Open();
                    cmd.AddParameter("@customer_id", System.Data.DbType.Int32, customerId);
                    using (DbDataReader reader = cmd.ExecuteReader())
                    {
                        while (reader.Read())
                        {
                            FlowerOrder order = new FlowerOrder()
                            {
                                Id              = reader.GetInt32(0),
                                CustomerId      = reader.GetInt32(1),
                                CreatedAt       = reader.GetDateTime(2),
                                DeliveryAddress = reader.GetString(3),
                                DeliveryPhone   = reader.IsDBNull(4) ? null : reader.GetString(4),
                                ProcessStatus   = reader.GetInt32(5)
                            };
                            list.Add(order);
                        }
                    }
                }
            }
            return(list);
        }
Пример #6
0
        public FlowerOrder GetFlowerOrderById(int id)
        {
            FlowerOrder order = null;

            using (DbConnection conn = new SqlConnection(ConnectionStr))
            {
                using (DbCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = @"SELECT [id]
                                                ,[customer_id]
                                                ,[created_at]
                                                ,[delivery_address]
                                                ,[delivery_phone]
                                                ,[process_status]

                                        FROM [dbo].[flower_order]
                                        WHERE [id] = @id";
                    conn.Open();
                    cmd.AddParameter("@id", System.Data.DbType.Int32, id);
                    using (DbDataReader reader = cmd.ExecuteReader())
                    {
                        if (reader.Read())
                        {
                            order = new FlowerOrder()
                            {
                                Id              = reader.GetInt32(0),
                                CustomerId      = reader.GetInt32(1),
                                CreatedAt       = reader.GetDateTime(2),
                                DeliveryAddress = reader.GetString(3),
                                DeliveryPhone   = reader.IsDBNull(4) ? null : reader.GetString(4),
                                ProcessStatus   = reader.GetInt32(5)
                            };
                        }
                    }
                }
            }
            return(order);
        }
Пример #7
0
        public ActionResult Checkout(FlowerOrder order)
        {
            try
            {
                Customer            user         = this.getCustomer();
                ShoppingCartManager cartManager  = new ShoppingCartManager();
                FlowerOrderManager  orderManager = new FlowerOrderManager();
                order.CustomerId    = user.Id;
                order.CreatedAt     = DateTime.Now;
                order.ProcessStatus = FlowerOrder.UNDER_PROCESS;

                orderManager.CreateOrder(order);
                // refetching just created order from db,
                // since id property is required for the following logic
                order = orderManager.GetLastFlowerOrderFOrCustomer(user.Id);

                IList <ShoppingCartItem> cartItems = cartManager.GetItemsByCustomer(user.Id);
                foreach (ShoppingCartItem cartItem in cartItems)
                {
                    OrderItem orderItem = new OrderItem()
                    {
                        OrderId  = order.Id,
                        FlowerId = cartItem.FlowerId,
                        Quantity = cartItem.Quantity
                    };
                    orderManager.CreateOrderItem(orderItem);
                    // delete cart item afterwards
                    cartManager.DeleteItem(cartItem.Id, user.Id);
                }
                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
Пример #8
0
        public async Task <IActionResult> Index(CheckoutModel model, string nonce)
        {
            if (ModelState.IsValid)
            {
                FlowerOrder order = new FlowerOrder
                {
                    City             = model.City,
                    State            = model.State,
                    Email            = model.Email,
                    StreetAddress    = model.StreetAddress,
                    ZipCode          = model.ZipCode,
                    DateCreated      = DateTime.Now,
                    DateLastModified = DateTime.Now
                };
                FlowerCart cart = null;
                if (User.Identity.IsAuthenticated)
                {
                    var currentUser = _userManager.GetUserAsync(User).Result;
                    cart = _context.FlowerCarts.Include(x => x.FlowerCartProducts).ThenInclude(x => x.FlowerProduct).Single(x => x.ApplicationUserID == currentUser.Id);
                }
                else if (Request.Cookies.ContainsKey("cart_id"))
                {
                    int existingCartID = int.Parse(Request.Cookies["cart_id"]);
                    cart = _context.FlowerCarts.Include(x => x.FlowerCartProducts).ThenInclude(x => x.FlowerProduct).FirstOrDefault(x => x.ID == existingCartID);
                }
                foreach (var cartItem in cart.FlowerCartProducts)
                {
                    order.FlowerOrderProducts.Add(new FlowerOrderProduct
                    {
                        DateCreated        = DateTime.Now,
                        DateLastModified   = DateTime.Now,
                        Quantity           = cartItem.Quantity ?? 1,
                        ProductID          = cartItem.ID,
                        ProductDescription = cartItem.FlowerProduct.Description,
                        ProductName        = cartItem.FlowerProduct.Name,
                        ProductPrice       = cartItem.FlowerProduct.Price ?? 0
                    });
                }

                _context.FlowerCartProducts.RemoveRange(cart.FlowerCartProducts);
                _context.FlowerCarts.Remove(cart);

                if (Request.Cookies.ContainsKey("cart_id"))
                {
                    Response.Cookies.Delete("cart_id");
                }

                _context.FlowerOrders.Add(order);
                _context.SaveChanges();

                //await _braintreeGateway.Transaction.SaleAsync(new TransactionRequest
                //{
                //    Amount = (decimal)order.FlowerOrderProducts.Sum(x => x.Quantity * x.ProductPrice),    //You can also do 1m here
                //    CreditCard = new TransactionCreditCardRequest
                //    {
                //        CardholderName = "Test Cardholder",
                //        CVV = "123",
                //        ExpirationMonth = DateTime.Now.AddMonths(1).ToString("MM"),
                //        ExpirationYear = DateTime.Now.AddMonths(1).ToString("yyyy"),
                //        Number = "4111111111111111"
                //    }
                //});
                Customer c   = null;
                var      csr = new CustomerSearchRequest();
                csr.Email.Is(model.Email);
                var customerSearchResult = await _braintreeGateway.Customer.SearchAsync(csr);

                if (customerSearchResult.Ids.Any())
                {
                    c = customerSearchResult.FirstItem;
                }
                else
                {
                    var cusResult = await _braintreeGateway.Customer.CreateAsync(new CustomerRequest { Email = model.Email });

                    c = cusResult.Target;
                }



                var card = await _braintreeGateway.PaymentMethod.CreateAsync(new PaymentMethodRequest { PaymentMethodNonce = nonce, CustomerId = c.Id });


                if (card.IsSuccess())
                {
                    var result = await _braintreeGateway.Transaction.SaleAsync(new TransactionRequest
                    {
                        Amount             = (decimal)order.FlowerOrderProducts.Sum(x => x.Quantity *x.ProductPrice),
                        PaymentMethodToken = card.Target.Token
                    });

                    await _emailSender.SendEmailAsync(model.Email, "Your order " + order.ID, "Thanks for ordering!  You bought : " + String.Join(",", order.FlowerOrderProducts.Select(x => x.ProductName)));

                    //TODO: Save this information to the database so we can ship the order
                    return(RedirectToAction("Index", "Receipt", new { id = order.ID }));
                }
                else
                {
                    ModelState.AddModelError("CreditCard", "Problem with credit card");
                }
            }
            //TODO: we have an error!  Redisplay the form!
            return(View());
        }
 public FlowerOrder Add(FlowerOrder entity)
 {
     context.FlowerOrders.Add(entity);
     context.SaveChanges();
     return(entity);
 }