Exemple #1
0
        public async Task <IActionResult> ClientGetOrderList()
        {
            // Get customer
            var customer = GetCustomer();

            if (customer == null)
            {
                return(Ok(ResponseDTO.BadRequest("Invalid customer's username.")));
            }

            // Get orders
            var orders      = customer.Orders;
            var listResults = new List <ClientOrderResponseDTO>();

            foreach (var order in orders)
            {
                // Get address
                var sendAddress = await _context.Addresses.FirstOrDefaultAsync(c => c.Id == (order.AddressId ?? 0));

                if (sendAddress == null)
                {
                    // return Ok(ResponseDTO.BadRequest("Invalid addrss for current order."));
                    continue;
                }

                // Response
                var orderItems = order.OrderItems;
                List <ClientOrder_CartItemDTO> cartItemDTOList = new List <ClientOrder_CartItemDTO>()
                {
                };
                foreach (var item in orderItems)
                {
                    var stock = await _context.Stocks.FirstOrDefaultAsync(s => s.Id == item.StockId);

                    var shoes = await _context.Shoes.FirstOrDefaultAsync(s => s.Id == stock.ShoesId);

                    var image = await _context.ShoesImages.FirstOrDefaultAsync(i => i.ShoesId == item.Stock.ShoesId);

                    var size = await _context.Sizes.FirstOrDefaultAsync(s => s.Id == stock.SizeId);

                    var cart = new ClientOrder_CartItemDTO
                    {
                        stockId  = item.Id,
                        shoesId  = shoes.Id,
                        name     = shoes.Name,
                        sizeName = size.Name,
                        quantity = item.Amount,
                        price    = item.Total,
                        image    = image != null ? image.ImagePath : ""
                    };
                    cartItemDTOList.Add(cart);
                }
                var responseDTO = new ClientOrderResponseDTO()
                {
                    id            = order.Id,
                    customerID    = customer.Id,
                    saleID        = 0,
                    city          = sendAddress.City,
                    orderDate     = order.OrderDate,
                    confirmDate   = order.ConfirmDate,
                    deliveryDate  = order.DeliveryDate,
                    total         = order.Total,
                    status        = order.Status,
                    paymentStatus = order.DeliveryDate.HasValue
                                    ? (int)PaymentStatus.Paid
                                    : (int)PaymentStatus.NotYet,
                    deliveryAddress      = order.DeliverAddress,
                    recipientName        = sendAddress.RecipientName,
                    recipientPhoneNumber = sendAddress.RecipientPhoneNumber,
                    cartItemDTOList      = cartItemDTOList
                                           // cartItemDTOList = orderItems.Select(c => new ClientOrder_CartItemDTO
                                           // {
                                           //     stockId = c.StockId,
                                           //     shoesId = c.Stock.ShoesId,
                                           //     name = c.Stock.Shoes.Name,
                                           //     sizeName = c.Stock.Size.Name,
                                           //     quantity = c.Amount,
                                           //     price = c.Total,
                                           //     image = c.Stock.Shoes.ShoesImages.FirstOrDefault().ImagePath
                                           // }).ToArray().ToList()
                };

                listResults.Add(responseDTO);
            }
            return(Ok(ResponseDTO.Ok(listResults)));
        }
Exemple #2
0
        public async Task <IActionResult> ClientProcessOrder([FromQuery(Name = "addressId")] int addressId)
        {
            // Get customer
            var customer = GetCustomer();

            if (customer == null)
            {
                return(BadRequest(ResponseDTO.BadRequest("Invalid customer's username.")));
            }

            // Check addressId
            var sendAddress = customer.Addresses.FirstOrDefault(o => o.Id == addressId);

            if (sendAddress == null ||
                string.IsNullOrEmpty(sendAddress.RecipientName) ||
                string.IsNullOrEmpty(sendAddress.RecipientPhoneNumber)
                )
            {
                return(BadRequest(ResponseDTO.BadRequest($"Invalid address for current customer: {customer.Username}.")));
            }

            // Check cart
            var cartItems = customer.Cart.CartItems;

            if (customer.Cart.CartItems.Count == 0)
            {
                return(BadRequest(ResponseDTO.BadRequest($"No items in cart for current customer: {customer.Username}")));
            }

            // Convert cart items to order items
            // 1: Create order
            var newOrder = new Order()
            {
                OrderDate            = DateTime.Now,
                Total                = 0,
                Status               = (int)OrderStatus.Waiting,
                DeliverAddress       = sendAddress.ToString(),
                ConfirmDate          = null,
                CancelDate           = null,
                BeginDelivery        = null,
                DeliveryDate         = null,
                Note                 = "",
                RecipientName        = sendAddress.RecipientName,
                RecipientPhoneNumber = sendAddress.RecipientPhoneNumber,
                CustomerId           = customer.Id,
                OrderItems           = new List <OrderItem>(),
                AddressId            = addressId
            };

            newOrder = await _repository.Add(newOrder);

            // 2: Create order items
            var   orderItems = new List <OrderItem>();
            float orderTotal = 0;

            foreach (var ci in cartItems)
            {
                var item = new OrderItem()
                {
                    Amount       = ci.Amount,
                    PricePerUnit = ci.Stock.Shoes.Price,
                    OrderId      = newOrder.Id,
                    StockId      = ci.StockId,
                    Total        = 0
                };

                var priceWithSale = item.PricePerUnit;
                var productSale   = await _context.SaleProducts
                                    .Include(c => c.Sale)
                                    .FirstOrDefaultAsync(c => c.Shoes.Id == ci.Stock.Shoes.Id);

                if (productSale != null && productSale.Sale.Status != 0)
                {
                    var sale = productSale.Sale;
                    priceWithSale -= sale.SaleType == 1
                        ? priceWithSale * (float)((float)sale.Amount / 100.0)
                        : sale.Amount;
                }
                item.Total  = item.Amount * priceWithSale;
                orderTotal += item.Total;

                // Update stock
                var stock = _context.Stocks.FirstOrDefault(c => c.Id == item.StockId);
                if (stock != null)
                {
                    // TODO: Check
                    stock.Instock -= item.Amount;
                }

                // Update cartItems in database
                _context.CartItems.Remove(ci);

                orderItems.Add(item);
            }
            newOrder.OrderItems = orderItems;
            newOrder.Total      = orderTotal;
            await _context.SaveChangesAsync();

            // Response
            var responseDTO = new ClientOrderResponseDTO()
            {
                id            = newOrder.Id,
                customerID    = customer.Id,
                saleID        = 0,
                city          = sendAddress.City,
                orderDate     = newOrder.OrderDate,
                confirmDate   = newOrder.ConfirmDate,
                deliveryDate  = newOrder.DeliveryDate,
                total         = newOrder.Total,
                status        = newOrder.Status,
                paymentStatus = newOrder.DeliveryDate.HasValue
                    ? (int)PaymentStatus.Paid
                    : (int)PaymentStatus.NotYet,
                deliveryAddress      = newOrder.DeliverAddress,
                recipientName        = sendAddress.RecipientName,
                recipientPhoneNumber = sendAddress.RecipientPhoneNumber,
                cartItemDTOList      = orderItems.Select(c => new ClientOrder_CartItemDTO
                {
                    stockId  = c.StockId,
                    shoesId  = c.Stock.ShoesId,
                    name     = c.Stock.Shoes.Name,
                    sizeName = c.Stock.Size.Name,
                    quantity = c.Amount,
                    price    = c.Total,
                    image    = c.Stock.Shoes.ShoesImages.FirstOrDefault().ImagePath
                }).ToList()
            };

            return(Ok(ResponseDTO.Ok(responseDTO)));
        }