public ActionResult Edit(ReferenceTermViewModel model)
        {
            try
            {
                var referenceTerm = ImsiClient.Get <ReferenceTerm>(model.Id, null) as ReferenceTerm;

                if (referenceTerm == null)
                {
                    TempData["error"] = Locale.ReferenceTermNotFound;

                    return(RedirectToAction("Index"));
                }

                referenceTerm.CreationTime = DateTimeOffset.Now;
                referenceTerm.Mnemonic     = model.Mnemonic;

                var result = this.ImsiClient.Update(referenceTerm);

                TempData["success"] = Locale.ReferenceTermUpdatedSuccessfully;

                return(RedirectToAction("ViewReferenceTerm", "ReferenceTerm", new { id = result.Key }));
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to retrieve entity: { e }");
            }

            TempData["error"] = Locale.UnableToUpdateReferenceTerm;

            return(RedirectToAction("ViewReferenceTerm", "ReferenceTerm", new { id = model.Id }));
        }
        public ActionResult ViewReferenceTerm(Guid id)
        {
            try
            {
                var bundle = this.ImsiClient.Query <ReferenceTerm>(r => r.Key == id && r.ObsoletionTime == null, 0, null, true);

                bundle.Reconstitute();

                var referenceTerm = bundle.Item.OfType <ReferenceTerm>().FirstOrDefault(r => r.Key == id && r.ObsoletionTime == null);

                if (referenceTerm == null)
                {
                    TempData["error"] = Locale.ReferenceTermNotFound;

                    return(RedirectToAction("Index"));
                }

                var conceptsBundle = this.ImsiClient.Query <Concept>(c => c.ReferenceTerms.Any(r => r.ReferenceTermKey == referenceTerm.Key) && c.ObsoletionTime == null);

                conceptsBundle.Reconstitute();

                var concepts = conceptsBundle.Item.OfType <Concept>().Where(c => c.ReferenceTerms.Any(r => r.ReferenceTermKey == referenceTerm.Key) && c.ObsoletionTime == null);

                foreach (var concept in concepts)
                {
                    concept.LoadProperty <ConceptClass>(nameof(Concept.Class));
                }

                var viewModel = new ReferenceTermViewModel(referenceTerm)
                {
                    Concepts = concepts.Select(c => new ConceptViewModel(c)).ToList()
                };


                return(View(viewModel));
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to retrieve reference term: {e}");
                this.TempData["error"] = Locale.UnexpectedErrorMessage;
            }

            return(RedirectToAction("Index"));
        }