/// <summary>
        /// Inserts or Updates a Clan War depending on the parameters received.
        /// </summary>
        /// <param name="clanWarViewModel">A ClanWarViewModel object, if its Id is NULL then do an Insert, else Updates.</param>
        public static int Upsert(ClanWarUpsertViewModel clanWarViewModel, int userId)
        {
            Enums.Action action  = Enums.Action.Create;
            ClanWar      clanWar = ClanWarManager.ConvertViewToModel(clanWarViewModel);

            using (var dbContext = new HouseOfClansEntities())
            {
                if (clanWarViewModel.Id == null)
                {
                    clanWar.addedOn = DateTime.Now;
                    dbContext.ClanWars.Add(clanWar);

                    if (dbContext.SaveChanges() > 0)
                    {
                        ActionLogManager.Log <ClanWarUpsertViewModel>(action, userId, null, null, string.Format("Clan War Id: {0}", clanWar.id));
                    }
                }
                else
                {
                    ClanWar original = ClanWarManager.SelectByClanWarId(clanWar.id);
                    action            = Enums.Action.Update;
                    clanWar.updatedOn = DateTime.Now;
                    dbContext.Entry(clanWar).State = EntityState.Modified;

                    if (dbContext.SaveChanges() > 0)
                    {
                        List <ActionLog> changes = GetChanges(clanWar, original);
                        ActionLogManager.Log <ClanWarUpsertViewModel>(action, userId, changes);
                    }
                }
            }

            return(clanWar.id);
        }
        public ActionResult Edit(ClanWarUpsertViewModel clanWar)
        {
            ActionResult result = View();

            try
            {
                ClanUser clanUser  = HttpContext.GetCurrentLoginInformation();
                int      clanWarId = ClanWarManager.Upsert(clanWar, clanUser.id);

                if (clanWarId > 0)
                {
                    //Insert member picks
                    //vv List<WarRanking> rankings = new List<WarRanking>();
                    List <ClanWarPickViewModel> picks       = new List <ClanWarPickViewModel>();
                    List <ClanUser>             clanMembers = ClanUserManager.SelectAllByClanId(clanWar.ClanId);
                    short i = 1;

                    foreach (ClanUser member in clanMembers)
                    {
                        WarRanking ranking = new WarRanking()
                        {
                            clanUserId = member.id,
                            clanWarId  = clanWarId
                        };

                        //vv rankings.Add(ranking);

                        ClanWarPickViewModel pick = new ClanWarPickViewModel()
                        {
                            ClanUserId            = member.id,
                            ClanMemberWarPosition = i,
                            ClanWarId             = clanWarId,
                            PickVS = i
                        };

                        picks.Add(pick);
                        i++;
                    }

                    //vv RankingsManager.Upsert(rankings);
                    ClanWarPicksManager.Upsert(picks);
                }
                //TODO //vv an Else here should display a message stating that the war was not inserted (and no exception apparently)

                result = RedirectToAction("Index");
            }
            catch
            {
                result = View(clanWar);
            }

            return(result);
        }
        public ActionResult Create()
        {
            ClanUser clanUser = HttpContext.GetCurrentLoginInformation();
            int      clanId   = clanUser.clanId != null ? (int)clanUser.clanId : 0;

            ClanWarUpsertViewModel clanWar = new ClanWarUpsertViewModel();

            clanWar.ClanId       = clanId;
            clanWar.WarStartedOn = DateTime.Now.AddDays(1);

            return(View("Edit", clanWar));
        }
        public ActionResult Details(int id, string warNote)
        {
            ActionResult           result      = View();
            ClanUser               clanUser    = HttpContext.GetCurrentLoginInformation();
            ClanWarUpsertViewModel clanWarInfo = ClanWarUpsertViewModel.Get(id);

            //The only updatable field when war started is the war notes.
            clanWarInfo.WarNote = warNote;
            ClanWarManager.Upsert(clanWarInfo, clanUser.id);
            result = RedirectToAction("Index");

            return(result);
        }
        private static ClanWar ConvertViewToModel(ClanWarUpsertViewModel viewModel)
        {
            ClanWar model = new ClanWar();

            model.id           = viewModel.Id ?? 0;
            model.warTypeId    = viewModel.WarTypeId;
            model.clanId       = viewModel.ClanId;
            model.clanVS       = viewModel.ClanVS;
            model.clanVSTag    = viewModel.ClanVSTag;
            model.note         = viewModel.Note;
            model.warStartedOn = viewModel.WarStartedOn;
            model.warNote      = viewModel.WarNote;
            model.isFinalized  = viewModel.IsFinalized;
            model.addedOn      = viewModel.AddedOn;
            model.updatedOn    = viewModel.UpdatedOn;

            return(model);
        }
        public ActionResult Edit(int id)
        {
            ClanWarUpsertViewModel clanWarInfo = ClanWarUpsertViewModel.Get(id);

            return(View(clanWarInfo));
        }