public async Task <IWriterResult> UpdateMarketItem(string userId, UpdateMarketModel model)
        {
            try
            {
                var currentUser = new Guid(userId);
                using (var context = ExchangeDataContextFactory.CreateContext())
                {
                    var user = await context.Users.FirstOrDefaultNoLockAsync(x => x.Id == currentUser);

                    if (user == null)
                    {
                        return(new WriterResult(false, "Unauthorized"));
                    }

                    var marketItem = await context.MarketItem
                                     .Include(m => m.Bids)
                                     .Include(m => m.Images)
                                     .Where(x => x.UserId == currentUser && x.Id == model.Id)
                                     .FirstOrDefaultNoLockAsync().ConfigureAwait(false);

                    if (marketItem == null)
                    {
                        return(new WriterResult(false, $"Market item #{model.Id} not found."));
                    }

                    if ((marketItem.Type == MarketItemType.Auction && !marketItem.Bids.IsNullOrEmpty()) ||
                        (marketItem.Type == MarketItemType.BuySell || marketItem.Type == MarketItemType.Wanted))
                    {
                        marketItem.Status       = MarketItemStatus.Active;
                        marketItem.CurrencyId   = model.CurrencyId;
                        marketItem.AskingPrice  = model.AskingPrice;
                        marketItem.ReservePrice = model.ReservePrice;
                    }

                    marketItem.CategoryId                   = model.CategoryId;
                    marketItem.Title                        = model.Title;
                    marketItem.Description                  = model.Description;
                    marketItem.LocationId                   = model.LocationId;
                    marketItem.MainImage                    = model.MainImage;
                    marketItem.Feature                      = MarketItemFeature.Normal; //request.Feature;
                    marketItem.LocationRegion               = model.LocationRegion ?? string.Empty;
                    marketItem.AllowPickup                  = model.AllowPickup;
                    marketItem.PickupOnly                   = model.PickupOnly;
                    marketItem.ShippingBuyerArrange         = model.ShippingBuyerArrange;
                    marketItem.ShippingNational             = model.ShippingNational;
                    marketItem.ShippingInternational        = model.ShippingInternational;
                    marketItem.ShippingNationalPrice        = model.ShippingNationalPrice;
                    marketItem.ShippingNationalDetails      = model.ShippingNationalDetails;
                    marketItem.ShippingInternationalPrice   = model.ShippingInternationalPrice;
                    marketItem.ShippingInternationalDetails = model.ShippingInternationalDetails;

                    if (model.IsRelist)
                    {
                        marketItem.CloseDate = model.CloseDate;
                    }

                    context.MarketItemImage.RemoveRange(marketItem.Images);
                    if (model.AlternateImages.Any())
                    {
                        foreach (var image in model.AlternateImages.Where(x => !string.IsNullOrEmpty(x)))
                        {
                            context.MarketItemImage.Add(new Entity.MarketItemImage
                            {
                                MarketItemId = marketItem.Id,
                                Image        = image
                            });
                        }
                    }

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

                    return(new WriterResult(true));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Esempio n. 2
0
        public async Task <ActionResult> UpdateMarketItem(EditMarketItemModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View("EditMarketItem", model));
            }

            if (string.IsNullOrEmpty(model.CurrentMainImage))
            {
                model.CurrentMainImage = await model.MainImage.SaveMarketItemImageToDiskAsync(true);
            }

            if (string.IsNullOrEmpty(model.CurrentAltImage1))
            {
                model.CurrentAltImage1 = await model.AltImage1.SaveMarketItemImageToDiskAsync(false);
            }

            if (string.IsNullOrEmpty(model.CurrentAltImage2))
            {
                model.CurrentAltImage2 = await model.AltImage2.SaveMarketItemImageToDiskAsync(false);
            }

            if (string.IsNullOrEmpty(model.CurrentAltImage3))
            {
                model.CurrentAltImage3 = await model.AltImage3.SaveMarketItemImageToDiskAsync(false);
            }

            if (string.IsNullOrEmpty(model.CurrentAltImage4))
            {
                model.CurrentAltImage4 = await model.AltImage4.SaveMarketItemImageToDiskAsync(false);
            }

            var marketItem = new UpdateMarketModel
            {
                Id = model.Id,
                // Type = MarketItemType.BuySell,
                CategoryId      = model.GetCategoryId(),
                Title           = model.Title,
                CurrencyId      = model.CurrencyId,
                MainImage       = model.CurrentMainImage,
                AlternateImages = new List <string> {
                    model.CurrentAltImage1, model.CurrentAltImage2, model.CurrentAltImage3, model.CurrentAltImage4
                },
                AskingPrice                  = model.Price,
                ReservePrice                 = model.ReservePrice,
                Description                  = model.Description,
                LocationRegion               = model.LocationRegion,
                AllowPickup                  = model.AllowPickup,
                PickupOnly                   = model.PickupOnly,
                LocationId                   = model.GetLocationId(),
                ShippingBuyerArrange         = model.ShippingBuyerArrange,
                ShippingNational             = model.ShippingNational,
                ShippingInternational        = model.ShippingInternational,
                ShippingNationalPrice        = model.ShippingNationalPrice,
                ShippingNationalDetails      = model.ShippingNationalDetails,
                ShippingInternationalPrice   = model.ShippingInternationalPrice,
                ShippingInternationalDetails = model.ShippingInternationalDetails,
                CloseDate = DateTime.UtcNow.AddDays(model.Type == MarketItemType.Auction ? Math.Max(3, model.AuctionDuration) : 14),
                IsRelist  = model.IsRelisting
            };

            var result = await MarketplaceWriter.UpdateMarketItem(User.Identity.GetUserId(), marketItem);

            if (!result.Success)
            {
                return(ViewMessage(new ViewMessageModel(ViewMessageType.Danger, Resources.Market.itemActionErrorMessageTitle, Resources.Market.createItemUpdateErrorMessage)));
            }

            return(RedirectToAction("MarketItem", new { marketItemId = model.Id }));
        }