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; } }
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 })); }