Example #1
0
        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));
            }
        }
Example #2
0
        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);
        }
Example #3
0
        /// <summary>
        /// Экспорт квартир в базу.
        /// </summary>
        public static void Export(List <Apartment> apartments)
        {
            //TestInfoApartmentstoDb(apartments);
            if (apartments.Count == 0)
            {
                return;
            }

            using (entities = ConnectEntities())
            {
                //entities.Configuration.AutoDetectChangesEnabled = false;
                //entities.Configuration.ValidateOnSaveEnabled = false;

                // Загрузка последних квартир
                var flatsBD = entities.F_R_Flats.GroupBy(g => g.WORKNAME).
                              Select(s => s.OrderByDescending(o => o.REVISION).First()).ToList();
                // Загрузка последних модулей
                var modulesBD = entities.F_R_Modules.GroupBy(g => g.NAME_MODULE).
                                Select(s => s.OrderByDescending(o => o.REVISION).First());
                entities.F_nn_FlatModules.Load();
                entities.F_nn_ElementParam_Value.Load();
                entities.F_nn_Elements_Modules.Load();
                entities.F_S_Elements.Load();
                entities.F_S_FamilyInfos.Load();
                entities.F_S_Categories.Load();
                entities.F_nn_Category_Parameters.Load();

                try
                {
                    // Элементы дверей и их стены - для обновления параметрв idWall
                    doorsAndHostWall = new List <Tuple <F_nn_Elements_Modules, List <F_nn_Elements_Modules> > >();

                    // Модули - новые или с изменениями
                    var modules = apartments.SelectMany(a => a.Modules)
                                  .Where(m => !m.BaseStatus.HasFlag(EnumBaseStatus.Error) &&
                                         (
                                             m.BaseStatus.HasFlag(EnumBaseStatus.Changed) ||
                                             m.BaseStatus.HasFlag(EnumBaseStatus.New)
                                         )
                                         )
                                  .GroupBy(g => g.Name).Select(g => g.First());

                    using (var progress = new ProgressMeter())
                    {
                        progress.SetLimit(modules.Count());
                        progress.Start("Запись модулей в базу...");

                        foreach (var module in modules)
                        {
                            progress.MeterProgress();
                            // поиск модуля
                            var moduleEnt = defineModuleEnt(module, modulesBD);
                        }
                        progress.Stop();
                    }

                    using (var progress = new ProgressMeter())
                    {
                        progress.SetLimit(modules.Count());
                        progress.Start("Запись квартир в базу...");

                        // Определение квартир и привязка модулей
                        foreach (Apartment apart in apartments)
                        {
                            progress.MeterProgress();
                            // Определение квартиры
                            var flatEnt = defineFlatEnt(apart);
                        }
                        progress.Stop();
                    }

                    // Сохранение изменений
                    entities.SaveChanges();

                    // обновление параметра стен для дверей
                    if (doorsAndHostWall.Count > 0)
                    {
                        foreach (var doorAndHostWall in doorsAndHostWall)
                        {
                            F_nn_Elements_Modules doorEmEnt = doorAndHostWall.Item1;
                            string hostWallsValue           = string.Join(";", doorAndHostWall.Item2.Select(w => w.ID_ELEMENT_IN_MODULE.ToString()));
                            // Запись id стены в параметр
                            // Поиск параметра IdWall для заполнения
                            var paramHostWall = doorEmEnt.F_S_Elements.F_nn_ElementParam_Value.Single(p =>
                                                                                                      p.F_nn_Category_Parameters.F_S_Parameters.NAME_PARAMETER
                                                                                                      .Equals(Options.Instance.DoorHostWallParameter, StringComparison.OrdinalIgnoreCase));
                            paramHostWall.PARAMETER_VALUE = hostWallsValue;// wallEmEnt.ID_ELEMENT_IN_MODULE.ToString();
                        }
                    }
                    entities.SaveChanges();
                }
                catch (System.Exception ex)
                {
                    Inspector.AddError(ex.Message, icon: System.Drawing.SystemIcons.Error);
                }
            }
            return;
        }
 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;
 }
 public DoorElement(Module module, F_nn_Elements_Modules emEnt)
     : base(module, emEnt)
 {
 }