Beispiel #1
0
        public (bool, int) AddOrders(OrdersRequestModel ordersRequestModel, string?IPAddress)
        {
            bool isValidResult = false;
            int  orderID       = 0;

            using (TransactionScope ts = new TransactionScope())
            {
                try
                {
                    if (ordersRequestModel.isValid())
                    {
                        Order order = ordersRequestModel.toEntity(IPAddress);
                        _dbContext.Orders.Add(order);
                        _dbContext.SaveChanges();
                        _dbContext.OrderItems.AddRange(ordersRequestModel.ordersDetails.Select(x => x.toEntity(IPAddress, order.ID)));
                        _dbContext.SaveChanges();
                        ts.Complete();
                        orderID       = order.ID;
                        isValidResult = true;
                    }
                }
                catch (Exception ex)
                {
                    Trace.WriteLine(ex.Message);
                    isValidResult = false;
                    orderID       = 0;
                }
                ts.Dispose();
            }
            return(isValidResult, orderID);
        }
Beispiel #2
0
        public (bool, FileResponseModel) GetReciptByID(int id)
        {
            try
            {
                OrdersRequestModel orders = (from order in _dbContext.Orders
                                             join items in _dbContext.OrderItems on order.ID equals items.OrderID
                                             where order.ID.Equals(id)
                                             select new OrdersRequestModel()
                {
                    Address = order.Address,
                    CompanyName = order.CompanyName,
                    MerchantID = order.MerchantID,
                    PhoneNumber = order.PhoneNumber,
                    OrderNo = order.OrderNo,
                    ordersDetails = _dbContext.OrderItems.Where(x => x.OrderID == id).Select(x => new OrdersDetailRequestModel()
                    {
                        Name = x.Name,
                        Price = x.Price,
                        Quantity = x.Quantity,
                    }).ToList()
                }).FirstOrDefault();

                return(true, new PdfHelper().CreateFileFromModel(orders));
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message);
                return(false, null);
            }
        }
Beispiel #3
0
        public async Task <ActionResult> Purchase(
            OrdersRequestModel model)
        {
            var userId = this.currentUser.UserId;

            var id = await this.orders.PurchaseAsync(model, userId);

            return(Created(nameof(this.Purchase), id));
        }
Beispiel #4
0
        public ActionResult Post([FromBody] OrdersRequestModel ordersRequest)
        {
            IPAddress remoteIpAddress = Request.HttpContext.Connection.RemoteIpAddress;

            (bool isValid, int OrderID)ordersResponse = _orderService.AddOrders(ordersRequest, remoteIpAddress.ToString());
            if (ordersResponse.isValid)
            {
                return(Ok($"{BaseURL}/{ordersResponse.OrderID}"));
            }
            else
            {
                return(BadRequest());
            }
        }
        public async Task <OrdersResponseModel> GetOrdersForAdmin(OrdersRequestModel requestModel)
        {
            OrderRequestParameters parameters = requestModel.MapToRequestParameters();

            (List <Order> orders, int count) = await _orderRepository.GetByParmeters(parameters);

            List <OrderModel> orderModels = orders.Select(item => new OrderModel(item)).ToList();

            OrdersResponseModel response = new OrdersResponseModel()
            {
                OrderModels = orderModels, Count = count
            };

            return(response);
        }
Beispiel #6
0
        public FileResponseModel CreateFileFromModel(OrdersRequestModel ordersRequestModel)
        {
            AddElementtoDoc(ordersRequestModel.CompanyName, TextAlignment.CENTER, 12);
            AddElementtoDoc(ordersRequestModel.Address, TextAlignment.CENTER, 10);
            AddElementtoDoc($"Phone: {ordersRequestModel.PhoneNumber}", TextAlignment.CENTER, 10);
            AddElementtoDoc($"-----------------------------------------------------", TextAlignment.CENTER, 10);
            AddTable(ordersRequestModel.ordersDetails);
            AddElementtoDoc($"-----------------------------------------------------", TextAlignment.CENTER, 10);
            AddElementtoDoc($"Discount:{ordersRequestModel.OverallDiscount}", TextAlignment.RIGHT, 10, 0, 0, 0, 0);
            AddElementtoDoc($"Tax:{ordersRequestModel.Tax}", TextAlignment.RIGHT, 10, 0, 0, 0, 0);
            AddElementtoDoc($"Total:{ordersRequestModel.ordersDetails.Select(x => x.Price).Sum()}", TextAlignment.RIGHT, 10, 0, 0, 0, 0);
            PdfDocument.Close();
            Document.Close();

            return(new FileResponseModel(File.ReadAllBytes(FullPath), FullPath));
        }
Beispiel #7
0
        public static Order toEntity(this OrdersRequestModel requestModel, string IPAddress)
        {
            Order order = new Order
            {
                Address     = requestModel.Address,
                IpAddress   = IPAddress,
                PhoneNumber = requestModel.PhoneNumber,
                MerchantID  = requestModel.MerchantID,
                OrderNo     = requestModel.OrderNo,
                CompanyName = requestModel.CompanyName,
                CreatedDate = DateTime.Now,
                Discount    = requestModel.OverallDiscount,
                Tax         = requestModel.Tax
            };

            return(order);
        }
Beispiel #8
0
        public async Task <string> PurchaseAsync(
            OrdersRequestModel model, string userId)
        {
            var order = new Order
            {
                UserId            = userId,
                DeliveryAddressId = model.AddressId
            };

            var shoppingCartProducts = await this
                                       .Data
                                       .ShoppingCartsProducts
                                       .Where(sc => sc.ShoppingCart.UserId == userId)
                                       .ToListAsync();

            var orderProducts = new List <OrderProduct>();

            foreach (var shoppingCartProduct in shoppingCartProducts)
            {
                var productId       = shoppingCartProduct.ProductId;
                var requestQuantity = shoppingCartProduct.Quantity;

                var orderProduct = new OrderProduct
                {
                    Order     = order,
                    ProductId = productId,
                    Quantity  = requestQuantity
                };

                orderProducts.Add(orderProduct);

                await this.ReduceProductQuantity(productId, requestQuantity);
            }

            this.Data.RemoveRange(shoppingCartProducts);

            await this.Data.AddRangeAsync(orderProducts);

            await this.Data.SaveChangesAsync();

            return(order.Id);
        }
Beispiel #9
0
        public static bool isValid(this OrdersRequestModel requestModel)
        {
            bool _modelValidated = true;

            if (string.IsNullOrEmpty(requestModel.MerchantID))
            {
                _modelValidated = false;
            }
            if (requestModel.ordersDetails is null || requestModel.ordersDetails.Count.Equals(0))
            {
                _modelValidated = false;
            }
            if (requestModel.OrderNo == 0)
            {
                _modelValidated = false;
            }
            if (string.IsNullOrEmpty(requestModel.CompanyName))
            {
                _modelValidated = false;
            }
            if (string.IsNullOrEmpty(requestModel.Address))
            {
                _modelValidated = false;
            }
            requestModel.ordersDetails.ForEach(item =>
            {
                if (string.IsNullOrEmpty(item.Name))
                {
                    _modelValidated = false;
                }
                if (item.Price.Equals(0))
                {
                    _modelValidated = false;
                }
                if (item.Quantity.Equals(0))
                {
                    _modelValidated = false;
                }
            });
            return(_modelValidated);
        }
Beispiel #10
0
        public async Task <OrdersResponseModel> GetOrdersForAdmin([FromBody] OrdersRequestModel requestModel)
        {
            OrdersResponseModel responseModel = await _orderService.GetOrdersForAdmin(requestModel);

            return(responseModel);
        }
 public async Task <ActionResult <string> > Create(OrdersRequestModel model)
 {
     return(await _ordersService
            .CreateOrders(model, _currentUser.UserId)
            .ToActionResult());
 }
        public async Task <Result> CreateOrders(OrdersRequestModel model, string userId)
        {
            var order = new Order
            {
                UserId     = userId,
                AddressId  = model.AddressId,
                DeliveryId = model.DeliveryId,
                PaymentId  = model.PaymentId,
                Status     = OrderStatus.Pay
            };

            await Data.AddAsync(order)
            .ConfigureAwait(false);

            var productsAttributes = await Data
                                     .CartItem
                                     .Where(x => x.UserId == userId)
                                     .ToListAsync()
                                     .ConfigureAwait(false);

            if (productsAttributes.Count == 0)
            {
                return(EmptyCart);
            }


            var payment = await Data.Payment.FindAsync(order.PaymentId);

            var delivery = await Data.Delivery.FindAsync(order.DeliveryId);

            var tax = await TotalTax(productsAttributes.Select(x => x.ProductAttributeId)).ConfigureAwait(false);

            if (payment.Percentage > 0)
            {
                tax += tax * (decimal)payment.Percentage / 100;
            }
            tax += delivery.Price;

            order.TotalTax = tax;

            var products = new List <OrderItem>();

            foreach (var orderModel in productsAttributes)
            {
                var guidId = orderModel.ProductAttributeId;

                var orderItem = new OrderItem
                {
                    Order = order,
                    ProductAttributeId = guidId,
                    Quantity           = orderModel.Quantity
                };

                products.Add(orderItem);

                await ReduceProductQuantity(guidId, orderModel.Quantity)
                .ConfigureAwait(false);
            }

            Data.RemoveRange(productsAttributes);

            await Data.OrderItem.AddRangeAsync(products)
            .ConfigureAwait(false);

            await Data.SaveChangesAsync()
            .ConfigureAwait(false);

            return(Result.Success);
        }