public RequestResult UpdateDictionary(DictionaryViewModel newDictionary) { if (newDictionary.DictionaryItems.Any(p => string.IsNullOrEmpty(p.Name))) return new RequestResult(1, "Невозможно сохранить пустой термин"); //проверяем уникальность if (newDictionary.DictionaryItems.Select(p => p.Name.ToLower().Replace(" ", "")).Distinct().Count() != newDictionary.DictionaryItems.Count) return new RequestResult(1, "Значения в справочниках должны быть уникальны"); //проверка на то что справочник используется в системе (придумать крутую) var databaseDictionaries = DataProvider.Dictionaries.Filter(p => p.DictionaryTypeId == newDictionary.Id).ToArray(); var oldItems = databaseDictionaries.Where(p => !newDictionary.DictionaryItems.Select(c => c.Id).Contains(p.Id)); #region удаляем старые термины foreach (var olditem in oldItems) { DataProvider.Dictionaries.Delete(olditem); } try { DataProvider.Save(); } catch (Exception) { return new RequestResult(1, "Ошибка удаления стрых терминов в справочнике"); } #endregion #region обновляем и добавляем новые foreach (var itemForUpdate in newDictionary.DictionaryItems) { Dictionary dbDictionaryItem = databaseDictionaries.FirstOrDefault(p => p.Id == itemForUpdate.Id) ?? new Dictionary(); dbDictionaryItem.Name = itemForUpdate.Name; dbDictionaryItem.DictionaryTypeId = newDictionary.Id; if (itemForUpdate.Id == 0) DataProvider.Dictionaries.Add(dbDictionaryItem); } try { DataProvider.Save(); } catch (Exception) { return new RequestResult(1, "Ошибка обновления терминов в справочнике"); } finally { ServiceCache.Remove(DictionaryCacheKey); } #endregion return RequestResult.Ok; }
public static DictionaryViewModel ToDictionaryViewModel(DictionaryType item) { var dictionary = new DictionaryViewModel { Id = item.Id, Name = item.Name, IsSystem = item.IsSystem, DictionaryItems = item.Dictionary.Select(p => new DictionaryItemViewModel { Id = p.Id, DictionaryType = p.DictionaryTypeId, Name = p.Name }).ToList() }; return dictionary; }
public static DictionaryMetaViewModel ToDictionaryViewModel(DictionaryViewModel item) { var dictionary = new DictionaryMetaViewModel(item.Id, item.Name); return dictionary; }
public ActionResult Save(DictionaryViewModel dictionary) { var rs = Request.IsAjaxRequest(); var updateResult = _dictionaryService.UpdateDictionary(dictionary); return Json(updateResult.Equals(RequestResult.Ok) ? new { type = "success", message = "Справочник успешно сохранен" } : new { type = "error", message = updateResult.RequestMessage }); }