예제 #1
0
        public async Task <ActionResult> SubmitMarketItem(CreateMarketItemModel model)
        {
            if (!ModelState.IsValid)
            {
                model.Currencies = await CurrencyReader.GetCurrencies();

                model.Categories = await MarketplaceReader.GetMarketCategories();

                return(View("CreateMarketItem", model));
            }

            var mainImage = await model.MainImage.SaveMarketItemImageToDiskAsync(true);

            var altimage1 = await model.AltImage1.SaveMarketItemImageToDiskAsync(false);

            var altimage2 = await model.AltImage2.SaveMarketItemImageToDiskAsync(false);

            var altimage3 = await model.AltImage3.SaveMarketItemImageToDiskAsync(false);

            var altimage4 = await model.AltImage4.SaveMarketItemImageToDiskAsync(false);

            var marketItem = new CreateMarketModel
            {
                Type            = model.Type,
                CategoryId      = model.GetCategoryId(),
                Title           = model.Title,
                CurrencyId      = model.CurrencyId,
                MainImage       = mainImage,
                AlternateImages = new List <string> {
                    altimage1, altimage2, altimage3, altimage4
                },
                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)
            };


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

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

            return(RedirectToAction("MarketItem", new { marketItemId = result.Result }));
        }
        public async Task <IWriterResult <int> > CreateMarketItem(string userId, CreateMarketModel 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 <int>(false, "Unauthorized"));
                    }

                    var newItem = new Entity.MarketItem
                    {
                        CategoryId                   = model.CategoryId,
                        UserId                       = user.Id,
                        Title                        = model.Title,
                        Description                  = model.Description,
                        CurrencyId                   = model.CurrencyId,
                        AskingPrice                  = model.AskingPrice,
                        ReservePrice                 = model.ReservePrice,
                        CloseDate                    = model.CloseDate,
                        Created                      = DateTime.UtcNow,
                        LocationId                   = model.LocationId,
                        MainImage                    = model.MainImage,
                        Type                         = model.Type,
                        Feature                      = MarketItemFeature.Normal,    //request.Feature;
                        Status                       = MarketItemStatus.Active,
                        LocationRegion               = model.LocationRegion ?? string.Empty,
                        AllowPickup                  = model.AllowPickup,
                        PickupOnly                   = model.PickupOnly,
                        ShippingBuyerArrange         = model.ShippingBuyerArrange,
                        ShippingNational             = model.ShippingNational,
                        ShippingInternational        = model.ShippingInternational,
                        ShippingNationalPrice        = model.ShippingNationalPrice,
                        ShippingNationalDetails      = model.ShippingNationalDetails,
                        ShippingInternationalPrice   = model.ShippingInternationalPrice,
                        ShippingInternationalDetails = model.ShippingInternationalDetails,
                        Images                       = new List <Entity.MarketItemImage>()
                    };

                    if (model.AlternateImages.Any())
                    {
                        foreach (var image in model.AlternateImages.Where(x => !string.IsNullOrEmpty(x)))
                        {
                            newItem.Images.Add(new Entity.MarketItemImage {
                                Image = image
                            });
                        }
                    }

                    context.MarketItem.Add(newItem);
                    await context.SaveChangesAsync().ConfigureAwait(false);

                    return(new WriterResult <int>(true, newItem.Id));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }