void ValidateCreporderDetails_VM(CreporderDetails_VM model, ModelStateDictionary state) { state.Clear(); //дата обнаружения неисправности //должна быть введена, должна иметь правильный формат, не должна быть позже текущей даты, не должна быть раньше 2-х лет DateTime tempDate; try { if (model.RevealedDate != null) { tempDate = DateTime.Parse(model.RevealedDate); //если ввели некоректные данные, то не распарсит if (tempDate>DateTime.Now) { state.AddModelError("", "Дата обнаружения неисправности позже текущей даты!"); } else if(tempDate<DateTime.Now.AddYears(-2)) { state.AddModelError("", "Неисправность не должна быть обнаружена более 2-х лет назад!"); } } else { state.AddModelError("", "Пожалуйста введите дату обнаружения неисправности!"); } } catch { //нераспарсил state.AddModelError("DateError", "Пожалуйста введить дату обнаружения неисправности в формате ДД.ММ.ГГГГ"); } //описание неисправности: обязательно, не более 1000 символов if (model.ReporderDescription==null) { state.AddModelError("", "Пожалуйста введите описание неисправности!"); } else if (model.ReporderDescription.Length>1000) { state.AddModelError("", "Описание неисправности слишком длинное!"); } //адрес местонахождения: проверяем только если пользователь снял галку "установлен на тепловом пункте" //обязательно должен быть введен, должен быть не более 300 символов if(!model.Mounted) { if (model.EquipLocation==null) { state.AddModelError("", "Пожалуйста укажите адрес местонахождения (или выберите 'находится в ТП')!"); } else if(model.EquipLocation.Length>300) { state.AddModelError("", "Адрес установки слишком длинный!"); } } //срок выполнения работ, если введен, то должен быть не более 200 символов if(model.ExpectedRepairTerm!=null && model.ExpectedRepairTerm.Length>200) { state.AddModelError("", "Срок выполнения работ слишком длинный!"); } //контакт: должен быть отмечен по крайней мере 1 контакт и не более 5; int count = 0; if(model.ContactsChoice!=null) { foreach (var contact in model.ContactsChoice) { if (contact.Checked == true) count++; } } if (count==0) { state.AddModelError("", "Пожалуйста выберите контактных лиц!"); } else if (count>5) { state.AddModelError("", "Пожалуйста выберите не более 5 контактных лиц!"); } }
public ActionResult EditCRepOrder(CreporderDetails_VM model) { // валидация введенных пользователем данных ValidateCreporderDetails_VM(model, ModelState); if (ModelState.IsValid) { //валидация успешна, пробуем сохранить изменения в БД //1.если одорудование не находится в ТП, то введенный пользователем адрес установки сохраним в БД if (!model.Mounted) { UserSavedOption userOption = userRepository.GetUserOptions(System.Web.HttpContext.Current.User.Identity.Name); userOption.USO_СLastEquipLocation = model.EquipLocation; try { userRepository.SaveUserOptions(userOption); } catch (Exception e) { ModelState.AddModelError("", e.Message); } } } if (ModelState.IsValid) { //валидация успешна, и сохранены настройки пользователя, контроллер смонтирован: добавим в БД новую заявку CRepOrder tempRepOrder = repairRepository.CRepOrders.SingleOrDefault(cro=>cro.CRO_ID==model.ID); tempRepOrder.CRO_description = model.ReporderDescription; tempRepOrder.CRO_equipLocation = model.Mounted ? tempRepOrder.Heat_Station.HS_adress : model.EquipLocation; tempRepOrder.CRO_expectedRepairTerm = model.ExpectedRepairTerm; tempRepOrder.CRO_revealedDate = DateTime.Parse(model.RevealedDate); //добавим контакты List<ContactWCheck> ContsForCRepOrder = model.ContactsChoice.Where(c => c.Checked == true).ToList(); tempRepOrder.CRO_contact1 = ContsForCRepOrder[0].ContactID; if (ContsForCRepOrder.Count > 1) tempRepOrder.CRO_contact2 = ContsForCRepOrder[1].ContactID; else tempRepOrder.CRO_contact2 = null; if (ContsForCRepOrder.Count > 2) tempRepOrder.CRO_contact3 = ContsForCRepOrder[2].ContactID; else tempRepOrder.CRO_contact3 = null; if (ContsForCRepOrder.Count > 3) tempRepOrder.CRO_contact4 = ContsForCRepOrder[3].ContactID; else tempRepOrder.CRO_contact4 = null; if (ContsForCRepOrder.Count > 4) tempRepOrder.CRO_contact5 = ContsForCRepOrder[4].ContactID; else tempRepOrder.CRO_contact5 = null; try { repairRepository.SaveCRepOrder(tempRepOrder); } catch (Exception e) { ModelState.AddModelError("", e.Message); } } if (ModelState.IsValid) { //все операции успешны: переходим на окно просмотра карточки заявки return Redirect(model.ReturnURL); } else { //есть ошибки валидации - выведем их пользователю //добавим в модель недостающие данные if (model.ContactsChoice!=null) { foreach (var contact in model.ContactsChoice) { contact.Contact = userRepository.Contacts.SingleOrDefault(c => c.Cont_ID == contact.ContactID); } } else { model.AllContacts = userRepository.Contacts.Where(c => c.Cont_enterprise == model.EnterpriseNo && c.Cont_deletedBy == null); } model.Controller = dataRepository.Controllers.SingleOrDefault(c => c.C_ID == model.CID); model.HeatStation = dataRepository.HeatStations.SingleOrDefault(hs => hs.HS_ID == model.HSID); return View(model); } }
public ActionResult CreporderDetails(CreporderDetails_VM model) { // валидация введенных пользователем данных ValidateCreporderDetails_VM(model, ModelState); if (ModelState.IsValid) { //валидация успешна, пробуем сохранить изменения в БД //1.если одорудование не находится в ТП, то введенный пользователем адрес установки сохраним в БД if (!model.Mounted) { UserSavedOption userOption = userRepository.GetUserOptions(System.Web.HttpContext.Current.User.Identity.Name); userOption.USO_СLastEquipLocation = model.EquipLocation; try { userRepository.SaveUserOptions(userOption); } catch (Exception e) { ModelState.AddModelError("", e.Message); } } } //дополнительно убедимся, что контроллер смонтирован во избежание нулевых ссылок при создании model.Controller = dataRepository.Controllers.FirstOrDefault(c => c.C_ID == model.CID); if (!model.Controller.ASystems1.Any()) { ModelState.AddModelError ("","Невозможно создать заявку: контроллер демонтирован с объекта!"); } //дополнительно убедимся, что lдля контроллера указан год выпуска во избежание нулевых ссылок при создании if (model.Controller.C_prodDate==null) { ModelState.AddModelError("", "Невозможно создать заявку: для контроллера не указан год производства!"); } int newOrderID = 0; if (ModelState.IsValid) { //валидация успешна, и сохранены настройки пользователя, контроллер смонтирован: добавим в БД новую заявку CRepOrder newRepOrder = new CRepOrder { CRO_CID = model.CID, CRO_CprodDate = model.Controller.C_prodDate.Value, CRO_CmodelID = model.Controller.C_modelNo, CRO_createdDate = DateTime.Now, CRO_description = model.ReporderDescription, CRO_equipLocation = model.Mounted ? model.Controller.ASystems1.First().Heat_Station.HS_adress : model.EquipLocation, CRO_expectedRepairTerm = model.ExpectedRepairTerm, CRO_HSID = model.Controller.ASystems1.First().AS_Heat_Station, CRO_revealedDate = DateTime.Parse(model.RevealedDate) }; //добавим контакты List<ContactWCheck> ContsForCRepOrder = model.ContactsChoice.Where(c => c.Checked == true).ToList(); newRepOrder.CRO_contact1 = ContsForCRepOrder[0].ContactID; if (ContsForCRepOrder.Count > 1) newRepOrder.CRO_contact2 = ContsForCRepOrder[1].ContactID; if (ContsForCRepOrder.Count > 2) newRepOrder.CRO_contact3 = ContsForCRepOrder[2].ContactID; if (ContsForCRepOrder.Count > 3) newRepOrder.CRO_contact4 = ContsForCRepOrder[3].ContactID; if (ContsForCRepOrder.Count > 4) newRepOrder.CRO_contact5 = ContsForCRepOrder[4].ContactID; try { newOrderID = repairRepository.SaveCRepOrder(newRepOrder); } catch (Exception e) { ModelState.AddModelError("", e.Message); } } if (ModelState.IsValid) { //все операции успешны: переходим на окно просмотра карточки заявки return RedirectToAction("ViewCReporder", new { CRO_ID = newOrderID, returnURL = model.ReturnURL }); } else { //есть ошибки валидации - выведем их пользователю //добавим в модель недостающие данные if (model.ContactsChoice!=null) { foreach (var contact in model.ContactsChoice) { contact.Contact = userRepository.Contacts.SingleOrDefault(c => c.Cont_ID == contact.ContactID); } } else { model.AllContacts = userRepository.Contacts.Where(c => c.Cont_enterprise == model.EnterpriseNo && c.Cont_deletedBy == null); } return View(model); } }
public ActionResult EditCRepOrder(int ID, string returnURL) { CRepOrder tempCRO = repairRepository.CRepOrders.SingleOrDefault(cro => cro.CRO_ID == ID); HSA.Domain.BD.Controller tempC = dataRepository.Controllers.FirstOrDefault(c => c.C_ID == tempCRO.CRO_CID); Heat_Station tempHS = dataRepository.HeatStations.SingleOrDefault(hs=>hs.HS_ID == tempCRO.CRO_HSID); //определим номер предприятия для которого создается заявка: нужно для правильного определения списка выводимых в представление контактов int reporderEntNo; if (userRepository.Users.SingleOrDefault(u => u.Name == System.Web.HttpContext.Current.User.Identity.Name).Enterprise != 0) { //если заяавку создает пользователь кокого либо предпряития ,то предприятияе определяем по пользователю reporderEntNo = userRepository.Users.SingleOrDefault(u => u.Name == System.Web.HttpContext.Current.User.Identity.Name).Enterprise; } else if (tempC.ASystems1.Any()) { //заявку создает администратор и контроллер установлен на объекте - определяем по объекту reporderEntNo = tempC.ASystems1.First().Heat_Station.HS_Enterprise; } else { //заявку создает администратор и контроллер не установлен на объекте - определяем по контроллеру reporderEntNo = tempC.C_OwnerEnterprise.Value; } CreporderDetails_VM model = new CreporderDetails_VM { ID = tempCRO.CRO_ID, CID = tempCRO.CRO_CID, RevealedDate = tempCRO.CRO_revealedDate.ToShortDateString(), Controller = tempC, ReturnURL = returnURL, Mounted = string.Compare(tempCRO.CRO_equipLocation,tempHS.HS_adress)==0, EquipLocation = tempCRO.CRO_equipLocation, AllContacts = userRepository.Contacts.Where(c => c.Cont_enterprise == reporderEntNo && c.Cont_deletedBy == null), ReporderDescription = tempCRO.CRO_description, ExpectedRepairTerm = tempCRO.CRO_expectedRepairTerm, HeatStation = tempHS, HSID = tempHS.HS_ID, EnterpriseNo = reporderEntNo }; //отметим галочками нужные контакты foreach (var cwc in model.ContactsChoice) { //если в зяявке указан этот контакт (поля contact1 - contact5) то контакт будет отображатся как отмеченный if(tempCRO.CRO_contact1==cwc.ContactID || tempCRO.CRO_contact2==cwc.ContactID || tempCRO.CRO_contact3==cwc.ContactID || tempCRO.CRO_contact4==cwc.ContactID || tempCRO.CRO_contact5==cwc.ContactID ) { cwc.Checked=true; } } return View(model); }
public ActionResult CreporderDetails(int cID, string returnURL) { HSA.Domain.BD.Controller tempC = dataRepository.Controllers.FirstOrDefault(c=>c.C_ID==cID); //определим номер предприятия для которого создается заявка: нужно для правильного определения списка выводимых в представление контактов int reporderEntNo; if (userRepository.Users.SingleOrDefault(u=>u.Name==System.Web.HttpContext.Current.User.Identity.Name).Enterprise!=0) { //если заяавку создает пользователь кокого либо предпряития ,то предприятияе определяем по пользователю reporderEntNo = userRepository.Users.SingleOrDefault(u => u.Name == System.Web.HttpContext.Current.User.Identity.Name).Enterprise; } else if (tempC.ASystems1.Any()) { //заявку создает администратор и контроллер установлен на объекте - определяем по объекту reporderEntNo = tempC.ASystems1.First().Heat_Station.HS_Enterprise; } else { //заявку создает администратор и контроллер не установлен на объекте - определяем по контроллеру reporderEntNo = tempC.C_OwnerEnterprise.Value; } CreporderDetails_VM model = new CreporderDetails_VM { CID = cID, RevealedDate = DateTime.Now.ToShortDateString(), Controller = tempC, ReturnURL = returnURL, Mounted = true, EquipLocation = userRepository.GetUserOptions(System.Web.HttpContext.Current.User.Identity.Name).USO_СLastEquipLocation, AllContacts = userRepository.Contacts.Where(c=>c.Cont_enterprise==reporderEntNo && c.Cont_deletedBy==null), EnterpriseNo = reporderEntNo }; return View(model); }