public async Task <IActionResult> Create(IFormCollection collection)
        {
            var strListingId = collection["TradeOffer.TradeListingOneId"];
            var strCardId    = collection["Listing.CardId"];
            var strCashOffer = collection["Listing.CashOffer"];
            var desc         = collection["Listing.Description"];

            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

            if (string.IsNullOrWhiteSpace(userId))
            {
                return(RedirectToAction("Home", "Index"));
            }
            else
            {
                int    cardId;
                int    listingId;
                double cashOffer;
                if (int.TryParse(strListingId, out listingId))
                {
                    // Generate listing for offer
                    var tradeListing = new TradeListing();
                    tradeListing.ApplicationUserId = userId;
                    if (int.TryParse(strCardId, out cardId))
                    {
                        tradeListing.CardId = cardId;
                    }
                    if (double.TryParse(strCashOffer, out cashOffer))
                    {
                        tradeListing.CashOffer = cashOffer;
                    }
                    tradeListing.Description = desc;
                    tradeListing.TradeState  = TradeState.Offered;
                    var tradeListingData = await _DataAccess.TradeDataAccess.UpsertTradeListing(tradeListing);

                    var origTradeListingData = await _DataAccess.TradeDataAccess.GetTradeListing(listingId);

                    // create offer
                    var newOffer = new TradeOffer();
                    newOffer.TradeListingOne   = origTradeListingData;
                    newOffer.TradeListingOneId = listingId;
                    newOffer.TradeListingTwo   = tradeListingData;
                    newOffer.TradeListingTwoId = tradeListingData.Id;
                    newOffer.TradeState        = TradeState.PendingOffer;
                    var offer = await _DataAccess.TradeDataAccess.UpsertTradeOffer(newOffer);

                    if (offer != null && offer.Id > 0)
                    {
                        // because we were successful need to update original listing;
                        origTradeListingData.TradeState = TradeState.PendingOffer;
                        await _DataAccess.TradeDataAccess.UpsertTradeListing(origTradeListingData);
                    }
                    var model = new { id = offer.Id };
                    return(RedirectToAction("Details", model));
                }
            }
            return(RedirectToAction("Index", "TradeListings"));
        }
        public async Task <IActionResult> CreateTrade([Bind("TradeListingId,SellerId,TradeTitle,TradeDescription,TradeFor,TradeDate,TradeItemType,TradeQuantity,ImageFile, TradeLocation")] TradeListing tradeListing)
        {
            tradeListing.TradeDate = DateTime.Now;

            var info = await CityStateCountByIp("99.226.48.14");

            string userId = "";

            try
            {
                userId = HttpContext.Session.GetString("userId");
            }
            catch (Exception)
            {
                // Do nothing
            }

            var sellerAccountId = await _context.SellerAccounts
                                  .Include(s => s.Account)
                                  .FirstOrDefaultAsync(s => s.Account.AccountId.ToString() == userId);

            if (ModelState.IsValid)
            {
                try
                {
                    tradeListing.SellerId = sellerAccountId.SellerId;
                    if (tradeListing.ImageFile != null)
                    {
                        //Save image to wwwroot/images
                        string wwwRootPath = _hostEnvironment.WebRootPath;
                        string fileName    = Path.GetFileNameWithoutExtension(tradeListing.ImageFile.FileName);
                        string extension   = Path.GetExtension(tradeListing.ImageFile.FileName);
                        tradeListing.TradeImage = fileName = fileName + DateTime.Now.ToString("yymmssfff") + extension;
                        string path = Path.Combine(wwwRootPath + "/Images/", fileName);
                        using (var fileStream = new FileStream(path, FileMode.Create))
                        {
                            await tradeListing.ImageFile.CopyToAsync(fileStream);
                        }
                    }
                    else
                    {
                        tradeListing.TradeImage = "trade-icon.png";
                    }

                    _context.Add(tradeListing);
                    await _context.SaveChangesAsync();

                    return(RedirectToAction(nameof(Index)));
                }
                catch (Exception)
                {
                    return(RedirectToAction(nameof(Index)));
                }
            }
            ViewData["SellerId"] = new SelectList(_context.SellerAccounts, "SellerId", "SellerId", tradeListing.SellerId);
            return(View(tradeListing));
        }
        public async void CreateTrade_InputViableTradeData_ModelReturnsValid()
        {
            // Arrange
            MyListingsController controller = new MyListingsController(context, _hostEnvironment);
            TradeListing         list       = InitializeTradeListing();

            // Act
            await controller.CreateTrade(list);

            // Assert
            Assert.True(controller.ModelState.IsValid);
        }
        private async Task <TradeListing> PopulateListingData(TradeListing listing)
        {
            if (listing.CardId > 0)
            {
                listing.Card = _context.Cards.Find(listing.CardId);
            }
            var user = _context.Users.FirstOrDefault(x => x.Id == listing.ApplicationUserId);

            listing.Email      = user.Email;
            listing.UserRating = await GetUserRating(listing.ApplicationUserId);

            return(listing);
        }
        public async Task EditTrade_PassInTradeListingIdAndTradeListing_ModelIsValid()
        {
            // Assert
            MyListingsController controller = new MyListingsController(context, _hostEnvironment);
            TradeListing         list       = InitializeTradeListing();

            // Act
            context.Add(list);
            list.TradeDescription = "Hello";
            await controller.EditTrade(0, list);

            // Assert
            Assert.True(controller.ModelState.IsValid);
        }
        public async Task DeleteConfirmedTrade_PassInInitializedTradeId_ReturnRedirection()
        {
            // Assert
            MyListingsController controller = new MyListingsController(context, _hostEnvironment);
            TradeListing         list       = InitializeTradeListing();

            InitializeSeller();

            // Act
            context.Add(list);
            var result = await controller.DeleteConfirmedSelling(0);

            // Assert
            Assert.IsType <RedirectToActionResult>(result);
        }
 public void AddToTradeList(Player player, Field field)
 {
     if (player.NetworkPlayer == PhotonNetwork.LocalPlayer && myListings.Find(listing => listing.tradeField == field) == null)
     {
         TradeListing listing = myPool.TakeObject().GetComponent <TradeListing>();
         listing.Init(this, myPool, field);
         myListings.Add(listing);
     }
     if (player.NetworkPlayer != PhotonNetwork.LocalPlayer && theirListings.Find(listing => listing.tradeField == field) == null)
     {
         TradeListing listing = theirPool.TakeObject().GetComponent <TradeListing>();
         listing.Init(this, theirPool, field);
         theirListings.Add(listing);
     }
 }
        public async Task <IActionResult> Create(IFormCollection collection)
        {
            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

            if (string.IsNullOrWhiteSpace(userId))
            {
                return(RedirectToAction("Home", "Index"));
            }
            else
            {
                var totalListings = await _DataAccess.TradeDataAccess.GetActiveTradeListingCountByUser(userId);

                var listingLimit = await _DataAccess.TradeDataAccess.GetUserTradeListingLimit(userId);

                if (totalListings >= listingLimit)
                {
                    var parameters = new { source = collection["Source"] };

                    return(RedirectToAction("TradeLimitExceeded", parameters));
                }

                var strCardId = collection["TradeListing.CardId"];
                var desc      = collection["TradeListing.Description"];
                int cardId;
                if (int.TryParse(strCardId, out cardId))
                {
                    var tradeListing = new TradeListing();
                    tradeListing.ApplicationUserId = userId;
                    tradeListing.CardId            = cardId;
                    tradeListing.Description       = desc;
                    var tradeListingData = _DataAccess.TradeDataAccess.UpsertTradeListing(tradeListing);
                    var source           = collection["Source"];
                    if (source == "Dashboard")
                    {
                        return(RedirectToAction("Index", "Dashboard"));
                    }
                    else
                    {
                        return(RedirectToAction("Index"));
                    }
                }
            }
            return(RedirectToAction("Index"));
        }
        public TradeListing InitializeTradeListing()
        {
            context.Add(InitializeAccount());
            TradeListing listing = new TradeListing
            {
                Seller           = InitializeSeller(),
                SellerId         = 1,
                TradeTitle       = "Trade 1",
                TradeDescription = "This is the first trade",
                TradeFor         = "Water",
                TradeDate        = Convert.ToDateTime("2020-10-02"),
                TradeItemType    = "Game",
                TradeQuantity    = 3,
                TradeImage       = null,
                TradeLocation    = "Ontario"
            };

            return(listing);
        }
    private void FillReceiver(Player sender, List <Field> myBuildings, float myMoney, List <Field> theirBuildings, float theirMoney)
    {
        mainTitle.text       = lC.GetWord("OFFER_FROM") + " " + sender.GetName();
        theirTitle.text      = lC.GetWord("IN_EXCHANGE_FOR_BUILDINGS_OF") + " " + sender.GetName();
        myTitle.text         = lC.GetWord("MY_ITEMS");
        this.myMoney.text    = myMoney.ToString();
        this.theirMoney.text = theirMoney.ToString();
        myListings.ForEach((listing) => {
            listing.DeInit();
        });
        myListings.Clear();

        theirListings.ForEach((listing) => {
            listing.DeInit();
        });
        theirListings.Clear();

        myBuildings?.ForEach((building) =>
        {
            TradeListing t = myPool.TakeObject().GetComponent <TradeListing>();
            t.Init(this, myPool, building, true);
            myListings.Add(t);
        });

        theirBuildings?.ForEach((building) =>
        {
            TradeListing t = theirPool.TakeObject().GetComponent <TradeListing>();
            t.Init(this, theirPool, building, true);
            theirListings.Add(t);
        });


        this.myMoney.interactable    = false;
        this.theirMoney.interactable = false;
        closeButton.SetActive(false);
        addMyBuildingsButton.SetActive(false);
        addTheirBuildingsButton.SetActive(false);
        sendButton.SetActive(false);
        acceptDeclineGroup.SetActive(true);
        acceptDeclineGroup.GetComponentsInChildren <Button>()[0].interactable = true;
        acceptDeclineGroup.GetComponentsInChildren <Button>()[1].interactable = true;
    }
 public void RemoveFromTradeList(Player player, Field field)
 {
     if (player.NetworkPlayer == PhotonNetwork.LocalPlayer)
     {
         TradeListing tListing = myListings.Find(listing => listing.tradeField == field);
         tListing?.DeInit();
         if (tListing != null)
         {
             myListings.Remove(tListing);
         }
     }
     else
     {
         TradeListing tListing = theirListings.Find(listing => listing.tradeField == field);
         tListing?.DeInit();
         if (tListing != null)
         {
             theirListings.Remove(tListing);
         }
     }
 }
        public async Task <TradeListing> UpsertTradeListing(TradeListing tradeListing)
        {
            if (tradeListing.Id > 0)
            {
                var dataTradeListing = _context.TradeListings.Find(tradeListing.Id);
                if (dataTradeListing != null)
                {
                    dataTradeListing.CardId      = tradeListing.CardId;
                    dataTradeListing.CashOffer   = tradeListing.CashOffer;
                    dataTradeListing.Description = tradeListing.Description;
                    await _context.SaveChangesAsync();

                    dataTradeListing = await PopulateListingData(dataTradeListing);

                    return(dataTradeListing);
                }
                else
                {
                    _context.TradeListings.Add(tradeListing);
                    await _context.SaveChangesAsync();

                    tradeListing = await PopulateListingData(tradeListing);

                    return(tradeListing);
                }
            }
            else
            {
                try
                {
                    _context.TradeListings.Add(tradeListing);
                    _context.SaveChanges();
                    tradeListing = await PopulateListingData(tradeListing);
                }
                catch (Exception e)
                {
                }
                return(tradeListing);
            }
        }