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); } }
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); } }