/// <summary> /// Метод, вызываемый вместе с сохранением документа /// </summary> private void SavePositionsCommonFolders(bool reloadPostions, List <DBCommand> cmds) { var positionCommonFolders0 = DocumentPosition <PositionCommonFolder> .LoadByDocId(int.Parse(Id)); positionCommonFolders0.ForEach(delegate(PositionCommonFolder p0) { var p = PositionCommonFolders.FirstOrDefault(x => x.Id == p0.Id); if (p == null) { p0.Delete(false); } }); PositionCommonFolders.ForEach(delegate(PositionCommonFolder p) { if (string.IsNullOrEmpty(p.Id)) { p.DocumentId = int.Parse(Id); p.Save(reloadPostions, cmds); return; } var p0 = positionCommonFolders0.FirstOrDefault(x => x.Id == p.Id && x.ChangedTime != p.ChangedTime); if (p0 != null) { p.Save(reloadPostions, cmds); } }); }
/// <summary> /// Сохранение позици ПозицииУказанийИТПапки /// </summary> /// <param name="folders">Список выбранных папок</param> /// <param name="reloadPostions">Перезапросить данные о позициях</param> public void SavePositionsCommonFoldersByDictionary(Dictionary <string, string> folders, bool reloadPostions) { //Удаляем те позиции, которых нет в списке var positionForClear = new List <PositionCommonFolder>(); foreach (var p in from p in PositionCommonFolders let f = folders.Where(x => x.Key == p.CommonFolderId.ToString()) .Select(x => (KeyValuePair <string, string>?)x) .FirstOrDefault() where f == null select p) { if (string.IsNullOrEmpty(p.Id)) { positionForClear.Add(p); } else { p.Delete(false); } } positionForClear.ForEach( delegate(PositionCommonFolder p) { PositionCommonFolders.RemoveAll(x => x.GuidId == p.GuidId); }); //получаем сохраненные позиции var cfSaved = DocumentPosition <PositionCommonFolder> .LoadByDocId(int.Parse(Id)); //сохраняем те выбранные элементы, для которых уже были созданы объекты PositionCommonFolders PositionCommonFolders.Where(x => string.IsNullOrEmpty(x.Id)).ToList().ForEach( delegate(PositionCommonFolder p) { if (cfSaved.Count > 0) { var cf = cfSaved.FirstOrDefault(x => x.CommonFolderId == p.CommonFolderId); if (cf != null) { return; } } p.DocumentId = int.Parse(Id); p.Save(false); }); //сохраняем те выбранные элементы, для которых не созданы объекты PositionCommonFolders foreach (var p in from f in folders let p = PositionCommonFolders.FirstOrDefault(x => x.CommonFolderId.ToString() == f.Key) where p == null select new PositionCommonFolder { DocumentId = int.Parse(Id), CommonFolderId = int.Parse(f.Key), CommonFolderName = f.Value }) { if (cfSaved.Count > 0) { var cf = cfSaved.FirstOrDefault(x => x.CommonFolderId == p.CommonFolderId); if (cf != null) { continue; } } p.Save(false); PositionCommonFolders.Add(p); } //удаляем те позиции, которых нет в PositionCommonFolders cfSaved.ForEach(delegate(PositionCommonFolder p) { var delP = PositionCommonFolders.FirstOrDefault(x => x.CommonFolderId == p.CommonFolderId); if (delP == null) { p.Delete(false); } }); if (reloadPostions) { LoadPositionCommonFolders(); } }