Exemple #1
0
        public async Task <ActionFeedback> UpdateOrderAsync(OrderFormVm orderRequest)
        {
            if (orderRequest.OrderItems == null || !orderRequest.OrderItems.Any())
            {
                return(ActionFeedback.Fail("Shopping cart cannot be empty"));
            }

            var order = await _orderRepository.Query()
                        .Include(item => item.OrderItems).ThenInclude(item => item.Product)
                        .FirstOrDefaultAsync(item => item.Id == orderRequest.OrderId);

            if (order == null)
            {
                return(ActionFeedback.Fail($"Cannot find order with id {orderRequest.OrderId}"));
            }
            if (!CanEditOrder(order))
            {
                return(ActionFeedback.Fail($"Order has been completed already!"));
            }

            var feedback = await UpdateOrderDetailsAsync(order, orderRequest);

            if (!feedback.Success)
            {
                return(feedback);
            }

            await _orderRepository.SaveChangesAsync();

            return(ActionFeedback.Succeed());
        }
Exemple #2
0
        public async Task <ActionFeedback <long> > CreateOrderAsync(OrderFormVm orderRequest)
        {
            if (orderRequest.OrderItems == null || !orderRequest.OrderItems.Any())
            {
                return(ActionFeedback <long> .Fail("Shopping cart cannot be empty"));
            }

            var user = await _workContext.GetCurrentUser();

            var order = new Order()
            {
                CreatedById = user.Id
            };

            var feedback = await UpdateOrderDetailsAsync(order, orderRequest);

            if (!feedback.Success)
            {
                return(ActionFeedback <long> .Fail(feedback.ErrorMessage));
            }

            _orderRepository.Add(order);
            await _orderRepository.SaveChangesAsync();

            return(ActionFeedback <long> .Succeed(order.Id));
        }
Exemple #3
0
        public async Task <ActionFeedback <GetOrderVm> > GetOrderAsync(long orderId)
        {
            var order = await _orderRepository.QueryAsNoTracking()
                        .Include(item => item.OrderItems).ThenInclude(item => item.Product).ThenInclude(item => item.ThumbnailImage)
                        .FirstOrDefaultAsync(item => item.Id == orderId);

            if (order == null)
            {
                return(ActionFeedback <GetOrderVm> .Fail($"Cannot find order with id {orderId}"));
            }

            var user = await _workContext.GetCurrentUser();

            var result = new GetOrderVm
            {
                OrderStatus    = order.OrderStatus,
                CustomerId     = order.CustomerId,
                SubTotal       = order.SubTotal,
                SubTotalCost   = order.OrderItems.Sum(item => item.Quantity * item.Product.Cost),
                ShippingAmount = order.ShippingAmount,
                ShippingCost   = order.ShippingCost,
                Discount       = order.Discount,
                OrderTotal     = order.OrderTotal,
                OrderTotalCost = order.OrderTotalCost,
                TrackingNumber = order.TrackingNumber,
                CreatedById    = order.CreatedById,
                VendorId       = order.VendorId,
                Note           = order.Note,
                IsShopeeOrder  = order.IsShopeeOrder,
                OrderItems     = order.OrderItems
                                 .Select(item => new OrderItemVm
                {
                    Id            = item.Id,
                    ProductId     = item.ProductId,
                    ProductName   = item.Product.Name,
                    ProductSku    = item.Product.Sku,
                    ProductCost   = item.Product.Cost,
                    OriginalPrice = item.Product.Price,
                    ProductPrice  = item.ProductPrice,
                    Stock         = item.Product.Stock,
                    ProductImage  = _mediaService.GetThumbnailUrl(item.Product.ThumbnailImage),
                    Quantity      = item.Quantity
                })
                                 .OrderBy(item => item.Id).ToList(),
                PaymentProviderId   = order.PaymentProviderId,
                PaymentProviderList = (await _paymentProviderService.GetListAsync(true))
                                      .Select(item => new SelectListItem
                {
                    Value = item.Id.ToString(),
                    Text  = item.Description
                }).ToList(),
                CanEdit = CanEditOrder(order)
            };

            return(ActionFeedback <GetOrderVm> .Succeed(result));
        }
        public async Task <ActionFeedback <TResult> > RunImportAsync()
        {
            var fileStream = await RetrieveAsync();

            var parsingFeedback = Parse(fileStream);

            if (parsingFeedback.Success)
            {
                return(await ImportAsync(parsingFeedback.Result));
            }
            return(ActionFeedback <TResult> .Fail(parsingFeedback.ErrorMessage));
        }
        public ActionFeedback <IEnumerable <ImportingOrderDto> > Parse(Stream fileStream)
        {
            try
            {
                var result = new List <ImportingOrderDto>();

                using (var reader = ExcelReaderFactory.CreateReader(fileStream))
                {
                    var sheets = reader.AsDataSet();

                    if (!sheets.Tables.Cast <object>().Any())
                    {
                        return(ActionFeedback <IEnumerable <ImportingOrderDto> > .Succeed(result));
                    }

                    sheets.Tables[0].Rows.RemoveAt(0); // Remove header row
                    foreach (DataRow row in sheets.Tables[0].Rows)
                    {
                        var externalId = row[ColumnIndex.ExternalId].ToString();
                        if (externalId.HasValue())
                        {
                            var dto = new ImportingOrderDto
                            {
                                ExternalId      = externalId,
                                OrderedDate     = DateTime.Parse(row[ColumnIndex.OrderedDate].ToString()),
                                Status          = OrderStatusMapping[row[ColumnIndex.Status].ToString()],
                                TrackingNumber  = row[ColumnIndex.TrackingNumber].ToString(),
                                Sku             = row[ColumnIndex.Sku].ToString(),
                                Price           = decimal.Parse(row[ColumnIndex.Price].ToString()),
                                Quantity        = int.Parse(row[ColumnIndex.Quantity].ToString()),
                                ShippingCost    = decimal.Parse(row[ColumnIndex.ShippingCost].ToString()),
                                ShippingAmount  = decimal.Parse(row[ColumnIndex.ShippingAmount].ToString()),
                                OrderTotal      = decimal.Parse(row[ColumnIndex.OrderTotal].ToString()),
                                Username        = row[ColumnIndex.Username].ToString(),
                                Phone           = row[ColumnIndex.Phone].ToString(),
                                ShippingAddress = row[ColumnIndex.ShippingAddress].ToString()
                            };
                            result.Add(dto);
                        }
                    }
                }

                return(ActionFeedback <IEnumerable <ImportingOrderDto> > .Succeed(result));
            }
            catch (Exception exception)
            {
                _telemetry.TrackException(exception);

                return(ActionFeedback <IEnumerable <ImportingOrderDto> > .Fail(exception.Message));
            }
        }
Exemple #6
0
        public async Task <ActionFeedback> UpdateOrderStateAsync(OrderFormVm orderRequest)
        {
            var order = await _orderRepository.Query()
                        .Include(item => item.OrderItems).ThenInclude(item => item.Product)
                        .FirstOrDefaultAsync(item => item.Id == orderRequest.OrderId);

            if (order == null)
            {
                return(ActionFeedback.Fail($"Cannot find order with Id: {orderRequest.OrderId}"));
            }
            if (!CanEditOrder(order))
            {
                return(ActionFeedback.Fail($"Order has been completed already!"));
            }

            order.TrackingNumber    = orderRequest.TrackingNumber;
            order.PaymentProviderId = orderRequest.PaymentProviderId;
            await UpdateStatusAndOrderTotalAsync(order, orderRequest.OrderStatus);

            await _orderRepository.SaveChangesAsync();

            return(ActionFeedback.Succeed());
        }
Exemple #7
0
        public async Task <ActionFeedback> UpdateTrackingNumberAsync(long orderId, string trackingNumber)
        {
            var order = await _orderRepository.Query().FirstOrDefaultAsync(x => x.Id == orderId);

            if (order == null)
            {
                return(ActionFeedback.Fail($"Cannot find order with Id: {orderId}"));
            }
            if (!CanEditOrder(order))
            {
                return(ActionFeedback.Fail($"Order has been completed already!"));
            }

            var feedback = UpdateTrackingNumber(order, trackingNumber);

            if (!feedback.Success)
            {
                return(feedback);
            }

            await _orderRepository.SaveChangesAsync();

            return(ActionFeedback.Succeed());
        }