public ActionResult Add(string taxonId, int?nameCategoryId)
        {
            TaxonSearchResult searchResult = this.TaxonSearchManager.GetTaxon(taxonId);

            if (searchResult.NumberOfMatches != 1)
            {
                return(RedirectToSearch(taxonId)); //todo change revisionId
            }

            this.TaxonIdentifier = TaxonIdTuple.Create(taxonId, searchResult.Taxon.Id);
            ITaxon taxon = searchResult.Taxon;

            ViewBag.Taxon = taxon;
            //this.NavigateData = new NavigateData("TaxonName", "List");

            TaxonNameDetailsViewModel model = _taxonNameViewManager.GetTaxonNameDetailsViewModel(taxon);

            if (nameCategoryId.HasValue)
            {
                model.SelectedCategoryId = nameCategoryId.Value;
            }
            // Since taxonAdd and edit uses the same view we have to set no of references to 1, otherwise
            // client validation will not pass for TaxonName Add. TODO refactor Taxon name add and edit into two viewmodels
            model.NoOfTaxonNameReferences++;
            return(View("Add", model));
        }
        public ActionResult Edit(TaxonNameDetailsViewModel model)
        {
            int    taxonId = this.TaxonIdentifier.Id.Value;
            ITaxon taxon   = CoreData.TaxonManager.GetTaxon(GetCurrentUser(), model.TaxonId);

            _taxonNameViewManager.InitTaxonNameDetails(model, taxon);
            ValidateTaxon(GetCurrentUser(), taxonId);

            // Only Nomenclature: Correct, Provisional, PreliminarySuggestion or Informal names may have usage: Accepted.
            if (model.SelectedTaxonNameUsageId == (int)TaxonNameUsageId.Accepted &&
                !(model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.ApprovedNaming ||
                  model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.Provisional ||
                  model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.PreliminarySuggestion ||
                  model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.Informal))
            {
                ModelState.AddModelError("", Resources.DyntaxaResource.TaxonNameAddEditIncorrectNomencalture);
            }

            //// Only usage: Accepted may have Recommended: Yes.
            //if (!model.IsRecommended && model.SelectedTaxonNameUsageId == (int)TaxonNameUsageId.Accepted)
            //{
            //    ModelState.AddModelError("", "Only usage: Accepted may have Recommended: Yes.");
            //}

            if (ModelState.IsValid)
            {
                ITaxonName taxonName = _taxonNameViewManager.SaveTaxonNameDetailsChanges(model, taxonId, this.TaxonRevision);
                this.RedrawTree();
                // Must set new value since taxon name is updated for every save...
                return(RedirectToAction("Edit", new { @taxonId = model.TaxonId, @nameId = taxonName.Version.ToString() }));
            }
            else
            {
                return(View("Edit", model));
            }
        }
        public ActionResult Add(TaxonNameDetailsViewModel model)
        {
            ITaxon         taxon         = CoreData.TaxonManager.GetTaxon(GetCurrentUser(), model.TaxonId);
            ITaxonName     taxonName     = new TaxonName();
            ITaxonRevision taxonRevision = this.TaxonRevision;

            _taxonNameViewManager.InitTaxonNameDetails(model, taxon);

            // Only Nomenclature: Correct, Provisional, PreliminarySuggestion or Informal names may have usage: Accepted.
            if (model.SelectedTaxonNameUsageId == (int)TaxonNameUsageId.Accepted &&
                !(model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.ApprovedNaming ||
                  model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.Provisional ||
                  model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.PreliminarySuggestion ||
                  model.SelectedTaxonNameStatusId == (int)TaxonNameStatusId.Informal))
            {
                ModelState.AddModelError("", Resources.DyntaxaResource.TaxonNameAddEditIncorrectNomencalture);
            }

            if (!ModelState.IsValid)
            {
                return(View("Add", model));
            }
            IUserContext loggedInUser = GetLoggedInUser();

            // Creation of taxon name
            using (ITransaction transaction = loggedInUser.StartTransaction())
            {
                taxonName = _taxonNameViewManager.AddTaxonName(model, TaxonIdentifier.Id.Value, this.TaxonRevision);
                // Must set default reference, set from Revision..
                ReferenceRelationList referencesToAdd = ReferenceHelper.GetDefaultReferences(GetCurrentUser(), taxonName, taxonRevision, null);
                var referencesToRemove = new ReferenceRelationList();
                CoreData.ReferenceManager.CreateDeleteReferenceRelations(GetCurrentUser(), referencesToAdd, referencesToRemove);
                transaction.Commit();
            }
            return(RedirectToAction("Edit", new { @taxonId = model.TaxonId, @nameId = taxonName.Version }));
        }