public ActionResult Create(Guid id, Guid?versionId)
        {
            try
            {
                var concept = this.GetConcept(id, versionId);

                if (concept == null)
                {
                    TempData["error"] = Locale.ConceptNotFound;
                    return(RedirectToAction("Index", "Concept"));
                }

                var model = new ConceptNameViewModel(concept)
                {
                    LanguageList = this.RemoveExistingLanguages(LanguageUtil.GetLanguageList().ToSelectList("DisplayName", "TwoLetterCountryCode").ToList(), concept.ConceptNames)
                };

                // if the concept has no names which are in english, we want to default the list to english
                if (concept.ConceptNames.All(c => c.Language != "en"))
                {
                    model.TwoLetterCountryCode = Locale.EN;
                }

                return(View(model));
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to retrieve entity: { e }");
            }

            TempData["error"] = Locale.ConceptNotFound;

            return(RedirectToAction("Index", "Concept"));
        }
        public ActionResult Edit(ConceptNameViewModel model)
        {
            try
            {
                var concept = this.GetConcept(model.ConceptId.Value, model.ConceptVersionKey.Value);

                if (concept == null)
                {
                    TempData["error"] = Locale.ConceptNotFound;
                    return(RedirectToAction("Index", "Concept"));
                }

                concept.ConceptSetsXml = this.LoadConceptSets(model.ConceptId.Value);

                var index = concept.ConceptNames.FindIndex(c => c.Language == model.Language && c.Name == model.Name);

                if (index < 0)
                {
                    TempData["error"] = Locale.LanguageCodeNotFound;
                    return(RedirectToAction("Edit", "Concept", new { id = model.ConceptId, versionKey = model.ConceptVersionKey }));
                }

                concept.ConceptNames[index].Language = model.TwoLetterCountryCode;
                concept.ConceptNames[index].Name     = model.DisplayName;

                concept.CreationTime = DateTimeOffset.Now;
                concept.VersionKey   = null;

                var result = this.ImsiClient.Update <Concept>(concept);

                TempData["success"] = Locale.ConceptNameUpdatedSuccessfully;

                return(RedirectToAction("Edit", "Concept", new { id = result.Key, versionId = result.VersionKey }));
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to retrieve concept: { e }");
            }

            TempData["error"] = Locale.UnableToUpdateConcept;

            return(RedirectToAction("ViewConcept", "Concept", new { id = model.ConceptId, model.ConceptVersionKey }));
        }
        public ActionResult Edit(Guid id, Guid versionId, Guid?langId, string langCode, string displayName)
        {
            Concept concept = null;

            try
            {
                concept = this.GetConcept(id, versionId);

                if (concept == null)
                {
                    TempData["error"] = Locale.ConceptNotFound;
                    return(RedirectToAction("Index", "Concept"));
                }

                var model = new ConceptNameViewModel(langCode, displayName, concept)
                {
                    LanguageList = this.RemoveExistingLanguages(LanguageUtil.GetLanguageList().ToSelectList("DisplayName", "TwoLetterCountryCode", c => c.TwoLetterCountryCode == langCode, true).ToList(), concept.ConceptNames)
                };

                // if the concept has no names which are in english, we want to default the list to english
                if (concept.ConceptNames.All(c => c.Language != "en"))
                {
                    model.TwoLetterCountryCode = Locale.EN;
                }

                return(View(model));
            }
            catch (Exception e)
            {
                Trace.TraceError($"Unable to update concept name: {e}");
            }

            TempData["error"] = Locale.UnableToUpdateLanguage;

            if (concept != null)
            {
                return(RedirectToAction("ViewConcept", "Concept", new { id = concept.Key, concept.VersionKey }));
            }

            return(RedirectToAction("Index", "Concept"));
        }
        public ActionResult Create(ConceptNameViewModel model)
        {
            try
            {
                var concept = this.GetConcept(model.ConceptId.Value, model.ConceptVersionKey);

                if (concept == null)
                {
                    TempData["error"] = Locale.ConceptNotFound;
                    return(RedirectToAction("Index", "Concept"));
                }

                concept.ConceptSetsXml = this.LoadConceptSets(model.ConceptId.Value);

                concept.CreationTime = DateTimeOffset.Now;
                concept.VersionKey   = null;

                concept.ConceptNames.Add(new ConceptName
                {
                    Language = model.TwoLetterCountryCode,
                    Name     = model.DisplayName
                });

                var result = this.ImsiClient.Update <Concept>(concept);

                TempData["success"] = Locale.ConceptNameUpdatedSuccessfully;

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

            model.LanguageList = LanguageUtil.GetLanguageList().ToSelectList("DisplayName", "TwoLetterCountryCode").ToList();

            TempData["error"] = Locale.UnableToAddConceptName;

            return(RedirectToAction("Index", "Concept"));
        }