Пример #1
0
        public async Task <IActionResult> PlaceOrder([FromBody] OrderForCreateDto orderForCreateDto)
        {
            var order = _mapper.Map <Order>(orderForCreateDto);

            if (Request.Headers.ContainsKey("id"))
            {
                var user = await _repo.GetUserById(int.Parse(Request.Headers["id"].First()));

                user.Orders.Add(order);
            }

            foreach (var item in orderForCreateDto.ListOfOrderDetailDto)
            {
                var orderDetail = new OrderDetail();
                var product     = await _repo.GetProductById(item.ProductId);

                orderDetail.PricePerUnit     = item.PricePerUnit;
                orderDetail.Quantity         = item.Quantity;
                orderDetail.Product          = product;
                orderDetail.ProductShortName = item.ProductShortName;
                order.OrderDetails.Add(orderDetail);
            }

            _repo.Add(order);
            if (await _repo.SaveAll())
            {
                return(CreatedAtRoute(nameof(GetOrderById), new { controller = "Order", id = order.Id }, order));
            }

            throw new Exception($"Error, cannot create your order");
        }
Пример #2
0
        private Order Map(OrderForCreateDto orderForCreateDto)
        {
            var order = new Order
            {
                CartId      = orderForCreateDto.CartId,
                CreatedAt   = orderForCreateDto.CreatedAt,
                Item        = orderForCreateDto.Item,
                OrderStatus = orderForCreateDto.OrderStatus,
                Products    = orderForCreateDto.Products,
                UserId      = orderForCreateDto.UserId
            };

            return(order);
        }
Пример #3
0
        public async Task <ActionResult <Order> > CreateOrder(OrderForCreateDto orderDto)
        {
            var email = HttpContext.User?.RetrieveEmail();

            var address = _mapper.Map <Address>(orderDto.ShipToAddress);

            var order = await _orderService.CreateOrderAsync(email, orderDto.DeliveryMethodId, orderDto.BasketId, address);

            if (order == null)
            {
                return(ApiResponse.BadRequest("Failed to create order"));
            }

            return(Ok(order));
        }
Пример #4
0
        public async Task <IActionResult> PlaceOrder(OrderForCreateDto orderForCreate)
        {
            if (ModelState.IsValid)
            {
                var bookId = Guid.Parse(orderForCreate.BookId);

                var book = await _booksRepository.GetItemByIdAsync(bookId);

                var user = await _userManager.FindByNameAsync(orderForCreate.UserName);

                var existingOrder = _repository.FindItemAsync(
                    o => o.UserId == user.Id &&
                    o.BookId == bookId &&
                    o.OrderDate.ToShortDateString() == DateTime.Today.ToShortDateString());

                if (existingOrder != null)
                {
                    _logger.LogWarning($"This user {user.Id} has already order book with id {bookId} today.");
                }

                var order = new Order
                {
                    Id             = GuidCreator.CreateGuid(),
                    BookId         = book.Id,
                    UserId         = user.Id,
                    OrderCost      = book.Cost,
                    OrderDate      = DateTime.UtcNow,
                    DeliveryAdress = $"city:{user.City}, adress(post office #): {user.DeliveryAdress}."
                };

                var result = await _repository.AddItemAsync(order);

                if (result > 0)
                {
                    _logger.LogInformation($"New book with id {order.Id} successfully created.");

                    return(Ok());
                }

                _logger.LogError($"Failed to place new order, order info: bookId {book.Id}, userId {user.Id}.");

                return(StatusCode(500));
            }

            _logger.LogError("Invalid request model, some fields are missed or have invalid format.");

            return(BadRequest(ModelState.Values));
        }
Пример #5
0
        public async Task <IActionResult> CreateOrder([FromBody] OrderForCreateDto order)
        {
            if (!ModelState.IsValid)
            {
                _logger.LogError($"Invalid model state for the OrderForCreateDto object");
                return(UnprocessableEntity(ModelState));
            }
            if (order == null)
            {
                _logger.LogError("OrderForCreateDto object sent from client is null. ");
                return(BadRequest("OrderForCreateDto object is null"));
            }
            var orderEntity = _mapper.Map <Order>(order);
            await _serviceManager.Order.CreateOrderAsync(orderEntity);

            await _serviceManager.SaveAsync();

            var orderToReturn = _mapper.Map <OrderDto>(orderEntity);

            return(CreatedAtRoute("OrderById", new { id = orderToReturn.Id }, orderToReturn));
        }
Пример #6
0
        // [ValidateAntiForgeryToken]
        public async Task <IActionResult> CreateOrder(int productId, OrderForCreateDto orderForCreateDto)
        {
            var userFromRepo = await _repo.GetUser(int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value));

            if (userFromRepo.Id != int.Parse(User.FindFirst(ClaimTypes.NameIdentifier).Value))
            {
                return(Unauthorized());
            }

            orderForCreateDto.UserId = userFromRepo.Id;

            var orderToCreate = _mapper.Map <Order>(orderForCreateDto);

            orderToCreate.OrderDate = DateTime.Now;
            orderToCreate.Status    = "Pending";
            orderToCreate.ToAddress = userFromRepo.Address;

            userFromRepo.Orders.Add(orderToCreate);
            await _repo.SaveAll();

            return(Ok());
        }
Пример #7
0
        public async Task <IActionResult> PlaceOrder(OrderForCreateDto orderForCreateDto, int userId)
        {
            var currentLoggedInUser = Convert.ToInt32(User.FindFirst(ClaimTypes.NameIdentifier).Value);
            var userFromRepo        = await _unitOfWork.UserRepository.GetUser(currentLoggedInUser);

            if (currentLoggedInUser != userId)
            {
                return(Unauthorized());
            }

            var notAvaibleProducts = await _unitOfWork.ProductRepository.
                                     GetProductQuantityLessThanZero(orderForCreateDto.Products);

            if (notAvaibleProducts != null)
            {
                var notAvaiableProductNames = _unitOfWork.ProductRepository
                                              .GetNotAviableProductNames(ref notAvaibleProducts);
                return(StatusCode(424, new { Message, notAvaiableProductNames, notAvaibleProducts }));
            }
            var order = Map(orderForCreateDto);

            try
            {
                order.Products = orderForCreateDto.Products;
                await _unitOfWork.GenericOrderRepository.Create(order);

                userFromRepo.Orders.Add(order);
                await _unitOfWork.UserRepository.UpdateUserInfo(userFromRepo, currentLoggedInUser);

                await _unitOfWork.SaveChangesAysnc();

                return(StatusCode(201));
            }
            catch (Exception)
            {
                throw;
            }
        }
Пример #8
0
        public async Task <IActionResult> CreateOrder(OrderForCreateDto orderForCreate)
        {
            var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

            var user = await _userManager.FindByIdAsync(userId);

            float totalPrice = 0;

            var order = new Order
            {
                NumberOfItems = orderForCreate.OrderProducts.Count,
                UserId        = user.Id
            };

            _productService.Add(order);
            await _productService.SaveAll();

            for (int i = 0; i < orderForCreate.OrderProducts.Count; i++)
            {
                var orderProduct = new OrderProducts
                {
                    OrderId   = order.OrderId,
                    ProductId = orderForCreate.OrderProducts[i].Product.ProductId,
                    Quantity  = orderForCreate.OrderProducts[i].Quantity,
                };
                totalPrice += orderForCreate.OrderProducts[i].Product.UnitPrice * orderForCreate.OrderProducts[i].Quantity;
                _productService.Add(orderProduct);
            }

            order.TotalPrice = totalPrice;

            if (await _productService.SaveAll())
            {
                return(CreatedAtRoute("GetOrder", new { controller = "Orders", id = order.OrderId }, order));
            }

            return(BadRequest($"Error while saving {order.OrderId}"));
        }
Пример #9
0
 public PlaceNewOrderCommand(OrderForCreateDto order)
 {
     OrderToCreateDto = order;
 }
Пример #10
0
        public async Task <ActionResult <OrderDto> > CreateOrderForCustomer(int customerID, OrderForCreateDto orderForCreateDto)
        {
            //Change status to waiting for treatment of order
            orderForCreateDto.StatusID = 1;
            _orm.OpenConn();
            if (!await _orm.CustomerExist(customerID))
            {
                return(NotFound());
            }
            Order orderFromDB = _mapper.Map <Order>(orderForCreateDto);

            orderFromDB.CustomerID = customerID;
            Order result = await _orm.CreateOrderAndOrderLines(orderFromDB);

            OrderDto orderDto = _mapper.Map <OrderDto>(result);
            await _orm.CloseConn();

            return(CreatedAtRoute("GetOrder", new { customerID = customerID, orderID = orderDto.Ordernumber }, orderDto));
        }
Пример #11
0
        public async Task <IActionResult> CreateOrder(OrderForCreateDto orderForCreateDto)
        {
            var result = await Mediator.Send(new PlaceNewOrderCommand(orderForCreateDto));

            return(HandleResult(result));
        }