public ActionResult CancelTrade(int?id)
        {
            if (!ParamsAreValid(id))
            {
                return(RedirectToAction("Profile", "Profile"));
            }

            var db = new FavorDbContext();

            var favorTradeModel = db.FavorTradeModels.Find(id);

            if (!ParamsAreValid(favorTradeModel))
            {
                return(RedirectToAction("Profile", "Profile"));
            }

            var userThatSendsCancelMessage = db.Users.FirstOrDefault(u => u.Id == favorTradeModel.SenderId);

            Message cancelMessage = new Message
            {
                ReceiverId  = favorTradeModel.RecieverId,
                SenderEmail = userThatSendsCancelMessage.Email,
                Title       = favorTradeModel.FavorTitle,
                Content     = "The trade favor with this title was canceled",
                Type        = MessageType.System
            };

            MessageController test = new MessageController();

            test.SendMessage(cancelMessage);

            db.FavorTradeModels.Remove(favorTradeModel);

            db.SaveChanges();

            return(RedirectToAction("Profile", "Profile"));
        }
        public ActionResult AcceptTrade(int?id)
        {
            if (!ParamsAreValid(id))
            {
                return(RedirectToAction("Profile", "Profile"));
            }

            var db = new FavorDbContext();

            var favorTradeModel = db.FavorTradeModels.Find(id);
            var fullFavor       = db.Favors.Find(favorTradeModel.FavorId);

            if (!ParamsAreValid(favorTradeModel, fullFavor))
            {
                return(RedirectToAction("Profile", "Profile"));
            }

            var receiverUser = db.Users.Include(u => u.PendingFavors).Include(u => u.AccomplishedFavors).FirstOrDefault(u => u.Id == favorTradeModel.RecieverId);
            var senderUser   = db.Users.Include(u => u.SentFavors).Include(u => u.AccomplishedFavors).FirstOrDefault(u => u.Id == favorTradeModel.SenderId);

            var accomplishedTradeModelForTheReceiver = new AccomplishedTradeModel
            {
                FavorTitle       = favorTradeModel.FavorTitle,
                FavorContent     = favorTradeModel.FavorContent,
                TradeOff         = favorTradeModel.TradeOff,
                SenderId         = favorTradeModel.SenderId,
                SenderFullName   = favorTradeModel.SenderFullName,
                ReceiverId       = favorTradeModel.RecieverId,
                ReceiverFullName = favorTradeModel.RecieverFullName
            };

            var accomplishedTradeForTheSender = AccomplishedTradeModel.ToAccomplishedTradeModel(accomplishedTradeModelForTheReceiver);

            if (!ParamsAreValid(receiverUser, senderUser))
            {
                return(RedirectToAction("Profile", "Profile"));
            }

            List <FavorTradeModel> allFavorTradeModels = db.FavorTradeModels
                                                         .Where(ftm => ftm.FavorId == favorTradeModel.FavorId &&
                                                                ftm.SenderId != favorTradeModel.SenderId)
                                                         .ToList();

            MessageController test = new MessageController();

            for (int currFavorTradeModel = 0; currFavorTradeModel < allFavorTradeModels.Count; currFavorTradeModel++)
            {
                var user = db.Users.Find(allFavorTradeModels[currFavorTradeModel].RecieverId);

                Message cancelMessage = new Message
                {
                    ReceiverId  = allFavorTradeModels[currFavorTradeModel].SenderId,
                    SenderEmail = user.Email,
                    Title       = favorTradeModel.FavorTitle,
                    Content     = "The trade favor with this title was canceled",
                    Type        = MessageType.System
                };

                test.SendMessage(cancelMessage);

                db.FavorTradeModels.Remove(allFavorTradeModels[currFavorTradeModel]);
            }

            receiverUser.AccomplishedFavors.Add(accomplishedTradeModelForTheReceiver);
            senderUser.AccomplishedFavors.Add(accomplishedTradeForTheSender);

            Message successMessage = new Message
            {
                ReceiverId  = receiverUser.Id,
                SenderEmail = senderUser.Email,
                Title       = accomplishedTradeForTheSender.FavorTitle,
                Content     = "The trade favor with this title was accepted!!!",
                Type        = MessageType.System
            };

            test.SendMessage(successMessage);

            allFavorTradeModels = db.FavorTradeModels
                                  .Where(ftm => ftm.FavorId == favorTradeModel.FavorId)
                                  .ToList();

            for (int currFavorTradeModel = 0; currFavorTradeModel < allFavorTradeModels.Count; currFavorTradeModel++)
            {
                db.FavorTradeModels.Remove(allFavorTradeModels[currFavorTradeModel]);
            }

            db.Favors.Remove(fullFavor);

            db.SaveChanges();

            return(RedirectToAction("Profile", "Profile"));
        }