private static void addElementsToModule(Module module, F_R_Modules moduleEnt) { if (moduleEnt.F_nn_Elements_Modules.Count != 0) { // Непредвиденная ситуация. Не должно быть элементов в модуле //Logger.Log.Error("addElementsToModule() Непредвиденная ситуация. Не должно быть элементов в модуле"); entities.F_nn_Elements_Modules.RemoveRange(moduleEnt.F_nn_Elements_Modules); } // Элементы foreach (var elem in module.Elements) { // Определение элемента в базе var elemEnt = getElement(elem); // Добавление элемента в модуль var elemInModEnt = addElemToModule(elemEnt, moduleEnt, elem); } // Для дверей - найти стену в базе и сохранить в список doorsAndHostWall для записи реального idWall после первого обновления базы. var doors = module.Elements.OfType <DoorElement>(); foreach (var door in doors) { F_nn_Elements_Modules doorEmEnt = (F_nn_Elements_Modules)door.DBObject; List <F_nn_Elements_Modules> wallsHost = new List <F_nn_Elements_Modules>(); foreach (var item in door.HostWall) { F_nn_Elements_Modules wallEmEnt = (F_nn_Elements_Modules)item.DBObject; wallsHost.Add(wallEmEnt); } doorsAndHostWall.Add(new Tuple <F_nn_Elements_Modules, List <F_nn_Elements_Modules> >(item1: doorEmEnt, item2: wallsHost)); } }
private static F_nn_Elements_Modules addElemToModule(F_S_Elements elemEnt, F_R_Modules moduleEnt, Element elem) { var emEnt = new F_nn_Elements_Modules() { F_R_Modules = moduleEnt, F_S_Elements = elemEnt, DIRECTION = elem.Direction, LOCATION = elem.LocationPoint }; moduleEnt.F_nn_Elements_Modules.Add(emEnt); elem.DBObject = emEnt; return(emEnt); }
/// <summary> /// Поиск модуля, если он изменился, то создание ревизии (с обновлением квартир), если его нет, то создание /// </summary> private static F_R_Modules defineModuleEnt(Module module, List <F_R_Modules> modulesBD) { F_R_Modules moduleEnt = null; F_R_Modules modulePrevRev = null; int revision = 0; if (module.BaseStatus.HasFlag(EnumBaseStatus.Changed)) { // Последняя ревизия модуля modulePrevRev = modulesBD.Where(m => m.NAME_MODULE.Equals(module.Name, StringComparison.OrdinalIgnoreCase)).First(); var lastRevision = modulePrevRev.REVISION; revision = lastRevision + 1; } else { moduleEnt = modulesBD.Where(m => m.NAME_MODULE.Equals( module.Name, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); } if (moduleEnt == null) { //Logger.Log.Error($"\nНовая ревизия модуля {module.Name} - {revision}."); moduleEnt = entities.F_R_Modules.Add(new F_R_Modules() { NAME_MODULE = module.Name, REVISION = revision }); modulesBD.Add(moduleEnt); // Добавление элементов в модуль addElementsToModule(module, moduleEnt); // Если это новая ревизия модуля, то обновление модуля во всех квартиро-модулей if (revision != 0) { // квартиро-модули в которых есть пред ревизия модуля var fmsPrevRevM = entities.F_nn_FlatModules.Local.Where(fm => fm.ID_MODULE == modulePrevRev.ID_MODULE).ToList(); foreach (var fmPrevRevM in fmsPrevRevM) { entities.F_nn_FlatModules.Add(new F_nn_FlatModules() { F_R_Flats = fmPrevRevM.F_R_Flats, F_R_Modules = moduleEnt, LOCATION = fmPrevRevM.LOCATION, DIRECTION = fmPrevRevM.DIRECTION, ANGLE = fmPrevRevM.ANGLE }); } } } return(moduleEnt); }
private static F_nn_FlatModules getFMEnt(F_R_Flats flatEnt, F_R_Modules moduleEnt, Module module) { var fmEnt = flatEnt.F_nn_FlatModules.SingleOrDefault (fm => fm.F_R_Flats == flatEnt && fm.F_R_Modules == moduleEnt && fm.LOCATION.Equals(module.LocationPoint) && fm.DIRECTION.Equals(module.Direction) ); if (fmEnt == null) { fmEnt = new F_nn_FlatModules() { F_R_Flats = flatEnt, F_R_Modules = moduleEnt, LOCATION = module.LocationPoint, DIRECTION = module.Direction, ANGLE = module.Rotation }; flatEnt.F_nn_FlatModules.Add(fmEnt); } return(fmEnt); }
private static F_nn_FlatModules getFMEnt(F_R_Flats flatEnt, F_R_Modules moduleEnt, Module module) { var fmEnt = flatEnt.F_nn_FlatModules.SingleOrDefault (fm => fm.F_R_Flats == flatEnt && fm.F_R_Modules == moduleEnt && fm.LOCATION.Equals(module.LocationPoint) && fm.DIRECTION.Equals(module.Direction) ); if (fmEnt == null) { fmEnt = new F_nn_FlatModules() { F_R_Flats = flatEnt, F_R_Modules = moduleEnt, LOCATION = module.LocationPoint, DIRECTION = module.Direction, ANGLE = module.Rotation }; flatEnt.F_nn_FlatModules.Add(fmEnt); } return fmEnt; }
private static F_nn_Elements_Modules addElemToModule(F_S_Elements elemEnt, F_R_Modules moduleEnt, Element elem) { var emEnt = new F_nn_Elements_Modules() { F_R_Modules = moduleEnt, F_S_Elements = elemEnt, DIRECTION = elem.Direction, LOCATION = elem.LocationPoint }; moduleEnt.F_nn_Elements_Modules.Add(emEnt); elem.DBObject = emEnt; return emEnt; }
private static void addElementsToModule(Module module, F_R_Modules moduleEnt) { if (moduleEnt.F_nn_Elements_Modules.Count != 0) { // Непредвиденная ситуация. Не должно быть элементов в модуле //Logger.Log.Error("addElementsToModule() Непредвиденная ситуация. Не должно быть элементов в модуле"); entities.F_nn_Elements_Modules.RemoveRange(moduleEnt.F_nn_Elements_Modules); } // Элементы foreach (var elem in module.Elements) { // Определение элемента в базе var elemEnt = getElement(elem); // Добавление элемента в модуль var elemInModEnt = addElemToModule(elemEnt, moduleEnt, elem); } // Для дверей - найти стену в базе и сохранить в список doorsAndHostWall для записи реального idWall после первого обновления базы. var doors = module.Elements.OfType<DoorElement>(); foreach (var door in doors) { F_nn_Elements_Modules doorEmEnt = (F_nn_Elements_Modules)door.DBObject; List<F_nn_Elements_Modules> wallsHost = new List<F_nn_Elements_Modules>(); foreach (var item in door.HostWall) { F_nn_Elements_Modules wallEmEnt = (F_nn_Elements_Modules)item.DBObject; wallsHost.Add(wallEmEnt); } doorsAndHostWall.Add(new Tuple<F_nn_Elements_Modules, List<F_nn_Elements_Modules>>(item1: doorEmEnt, item2: wallsHost)); } }
/// <summary> /// Определение стены для двери в объектах созданных не из чертежа, а из базы /// </summary> public void SearchHostWallDB(F_R_Modules moduleEnt) { HostWall = new List<WallElement>(); // найти стену по id в параметре двери var paramIdWall = Parameters.Single(p => p.Name.Equals(Options.Instance.DoorHostWallParameter, StringComparison.OrdinalIgnoreCase)); var idsWall = paramIdWall.Value.Split(';'); foreach (var item in idsWall) { int idWall = Convert.ToInt32(item); // найти стену в элементах модуля var wall = this.Module.Elements.SingleOrDefault(e => ((F_nn_Elements_Modules)e.DBObject).ID_ELEMENT_IN_MODULE == idWall); HostWall.Add((WallElement)wall); } }