Ejemplo n.º 1
0
        public ActionResult DemountController(int aSystemID,int controllerID, string returnURL)
        {
            //готовим модель
            //список систем, на которых установлен контроллер
            IEnumerable<ASystem> aSystems = repositorie.Asystems.Where(aS => aS.AS_Controller == controllerID).OrderBy(aS=>aS.ASystem_Type.AST_sortOrder);
            List<ASystemWCheck> sys4model= new List<ASystemWCheck>(); //мой класс с булевским свойством
            foreach (var system in aSystems)
            {
                ASystemWCheck item = new ASystemWCheck
                {
                    System = system,
                    SystemID = system.AS_ID,
                    WasChecked = system.AS_ID == aSystemID //если система та, из которой был вызов, то в представлении она булет по умолчанию отмечена
                };
                sys4model.Add(item);
            }

            DemountController_VM model = new DemountController_VM
            {
                returnURL = returnURL,
                system = repositorie.Asystems.FirstOrDefault(aSys => aSys.AS_ID == aSystemID),
                Controller = repositorie.Controllers.SingleOrDefault(c=>c.C_ID == controllerID),
                SystemsControllerInstalledOn = sys4model
            };
            return View(model);
        }
        public ActionResult MountController_System(string hsID, int controllerID, string returnURL, string noFilter, string adrFilter)
        {
            //прореверим, что пользователь отметил в окне нужный ТП
            if (hsID == null)
            {
                return RedirectToAction("MountControllerHSFilter", "Infrastructure", new { returnURL = returnURL, controllerID = controllerID, HS_No_Filter = noFilter, HS_Adress_Filter = adrFilter, modelError = "Не выбран объект" });
            }

            //если ТП выбран, то переходим на шаг 2
            //готовим список доступных систем (в список доступных систем включаем системы, на которых уже установлен контроллер, если необходимо редактирования списка систем)
            List<ASystemWCheck> avaliableSystems = new List<ASystemWCheck>();
            IEnumerable<ASystem> systems = repositorie.Asystems.Where(s => (s.AS_Heat_Station == hsID) && (s.AS_Controller == null||s.AS_Controller==controllerID)).OrderBy(s=>s.ASystem_Type.AST_sortOrder);

            foreach (var system in systems)
            {
                ASystemWCheck tempS = new ASystemWCheck
                {
                    System = system,
                    SystemID = system.AS_ID,
                    WasChecked = system.AS_Controller!=null
                };
                avaliableSystems.Add(tempS);
            }

            MountController_System_VM model = new MountController_System_VM
            {
                HeatStation = repositorie.HeatStations.SingleOrDefault(hs => hs.HS_ID == hsID),
                Controller = repositorie.Controllers.SingleOrDefault(c => c.C_ID == controllerID),
                ReturnURL = returnURL,
                AvaliableSystems = avaliableSystems,
                BusySystems = repositorie.Asystems.Where(s => s.AS_Heat_Station == hsID && s.AS_Controller != null&&s.AS_Controller!=controllerID).OrderBy(s => s.ASystem_Type.AST_sortOrder)
            };
            return View(model);
        }
        public ActionResult MountController_Check(MountController_System_VM model, string hsID, int controllerID, string returnURL)
        {
            ModelState.Clear();

            //проверка, что пользователь отметил хотя бы одну систему, и обработка ошибок триггеров сервера
            int count = 0;
            try
            {
                foreach (var system in model.AvaliableSystems) //пробежимся по коллекции и внесем в БД изменения по системам отмеченным галочкой
                {
                    if (system.WasChecked)
                    {
                        count++;
                        ASystem aSystem = repositorie.Asystems.SingleOrDefault(s => s.AS_ID == system.SystemID);
                        aSystem.AS_Controller = controllerID; //всем отмеченным системам привязываем контроллер
                        repositorie.SaveASystem(aSystem);

                    }
                    else
                    {
                        ASystem aSystem = repositorie.Asystems.SingleOrDefault(s => s.AS_ID == system.SystemID);
                        aSystem.AS_Controller = null; //всем не отмеченным системам отвязываем контроллер
                        repositorie.SaveASystem(aSystem);
                    }
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError("err", e.Message);
            }

            //т.к. это окно используется также для редактирования списков систем на которые установлен контроллер, то
            //мы не должны выводить ошибку  если пользователь не отметил галочкой ни одну из систем и контроллер уже привязан к одной из них

            HSA.Domain.BD.Controller tempC = repositorie.Controllers.SingleOrDefault(c => c.C_ID == controllerID);
            if (count==0&&!tempC.ASystems1.Any())
            {
                ModelState.AddModelError("aSystemID", "Не выбраны системы");
            }

            //если не получилось, то возвращаемся на шаг 2 и отображаем ошибки модели
            if (!ModelState.IsValid)
            {
                List<ASystemWCheck> avaliableSystems = new List<ASystemWCheck>();
                IEnumerable<ASystem> systems = repositorie.Asystems.Where(s => s.AS_Heat_Station == hsID && s.AS_Controller == null).OrderBy(s => s.ASystem_Type.AST_sortOrder);

                foreach (var system in systems)
                {
                    ASystemWCheck tempS = new ASystemWCheck
                    {
                        System = system,
                        SystemID = system.AS_ID,
                        WasChecked = false
                    };
                    avaliableSystems.Add(tempS);
                }

                MountController_System_VM vModel = new MountController_System_VM
                {
                    HeatStation = repositorie.HeatStations.SingleOrDefault(hs => hs.HS_ID == hsID),
                    Controller = repositorie.Controllers.SingleOrDefault(c => c.C_ID == controllerID),
                    ReturnURL = returnURL,
                    AvaliableSystems = avaliableSystems,
                    BusySystems = repositorie.Asystems.Where(s => s.AS_Heat_Station == hsID && s.AS_Controller != null).OrderBy(s => s.ASystem_Type.AST_sortOrder)
                };
                return View("MountController_System", vModel);

            }
            else//все нормально
            {
                return Redirect(returnURL);
            }
        }
Ejemplo n.º 4
0
        public ActionResult DemountController(DemountController_VM model, int AS_ID, int controllerID, string ReturnURL, bool DemFromAllSystems)
        {
            ModelState.Clear();
            //присваиваем контроллеру номер предприятия
            //для того чтобы контроллер правильно отбражался в перечне резервных
            //контроллеров нужно убедится что правильно определены принадлежность контроллера к предприятию
            try
            {
                HSA.Domain.BD.Controller tempC = repositorie.Controllers.SingleOrDefault(c => c.C_ID == controllerID); //ищем контроллер
                tempC.C_OwnerEnterprise = repositorie.Asystems.SingleOrDefault(aSys => aSys.AS_ID == AS_ID).Heat_Station.HS_Enterprise; //определяем нужный номер предприятия (какому предприятию принадлежит адрес, с которого демонтируют)
                repositorie.SaveController(tempC);
            }
            catch(Exception e)
            {
                ModelState.AddModelError("CChangeError", e.Message);
            }

            if (ModelState.IsValid) //идем нормально, редактируем системы (обнуляем ссылки на контроллер)
            {
                if (DemFromAllSystems)//если согласно внешнего вызова нужно демонтировать со всех систем
                {
                    try
                    {
                        repositorie.DemountController(controllerID);
                    }
                    catch (Exception e)
                    {
                        ModelState.AddModelError("SQLError", e.Message);
                    }

                }
                else //демонируем со всех систем отмеченных галкой
                {
                    int count = 0;
                    if (model.SystemsControllerInstalledOn !=null) //нул вылезает если обновляем окно и при этом контроллер уже демонтирован со всех систем
                    {
                        foreach (var system in model.SystemsControllerInstalledOn)
                        {
                            if (system.WasChecked)
                            {
                                count++;
                                try
                                {
                                    repositorie.DemountController(controllerID, system.SystemID);
                                }
                                catch (Exception e)
                                {
                                    ModelState.AddModelError("SQLError", e.Message);
                                }
                            }
                        }
                    }
                    if (count == 0) ModelState.AddModelError("SQLError", "Не выбраны системы");
                }
            }

            if (ModelState.IsValid) //все завершили нормально, возврат на окно из которого запрашивали демонтаж
            {
                return Redirect(ReturnURL);
            }
            else //есть ошибки, отобразим их пользователю
            {
                IEnumerable<ASystem> aSystems = repositorie.Asystems.Where(aS => aS.AS_Controller == controllerID).OrderBy(aS => aS.ASystem_Type.AST_sortOrder);
                List<ASystemWCheck> sys4model = new List<ASystemWCheck>(); //мой класс с булевским свойством
                foreach (var system in aSystems)
                {
                    ASystemWCheck item = new ASystemWCheck
                    {
                        System = system,
                        SystemID = system.AS_ID,
                        WasChecked = system.AS_ID == AS_ID //если система та, из которой был вызов, то в представлении она булет по умолчанию отмечена
                    };
                    sys4model.Add(item);
                }

                DemountController_VM vModel = new DemountController_VM
                {
                    returnURL = ReturnURL,
                    system = repositorie.Asystems.FirstOrDefault(aSys => aSys.AS_ID == AS_ID),
                    Controller = repositorie.Controllers.SingleOrDefault(c => c.C_ID == controllerID),
                    SystemsControllerInstalledOn = sys4model
                };
                return View(vModel);
            }
        }