//метод: сохраняет или обновляет в БД заявку на ремонт контроллера
        public int SaveCRepOrder(CRepOrder repOrder)
        {
            CRepOrder dbEntry = dataDBContext.CRepOrders.SingleOrDefault(ro => ro.CRO_ID==repOrder.CRO_ID);
            if (dbEntry==null)
            {
                //нет в БД, добавим
                //удалим лишние пробельчики
                TrimCReporderFields(repOrder);
                dataDBContext.CRepOrders.InsertOnSubmit(repOrder);
            }
            else
            {
                //есть в БД: обновим
                dbEntry.CRO_billedDate = repOrder.CRO_billedDate;
                dbEntry.CRO_CID = repOrder.CRO_CID;
                dbEntry.CRO_closedDate = repOrder.CRO_closedDate;
                dbEntry.CRO_CmodelID = repOrder.CRO_CmodelID;
                dbEntry.CRO_contact1 = repOrder.CRO_contact1;
                dbEntry.CRO_contact2 = repOrder.CRO_contact2;
                dbEntry.CRO_contact3 = repOrder.CRO_contact3;
                dbEntry.CRO_contact4 = repOrder.CRO_contact4;
                dbEntry.CRO_contact5 = repOrder.CRO_contact5;
                dbEntry.CRO_createdDate = repOrder.CRO_createdDate;
                dbEntry.CRO_description = repOrder.CRO_description;
                dbEntry.CRO_equipLocation = repOrder.CRO_equipLocation;
                dbEntry.CRO_examinedDate = repOrder.CRO_examinedDate;
                dbEntry.CRO_expectedRepairTerm = repOrder.CRO_expectedRepairTerm;
                dbEntry.CRO_HSID = repOrder.CRO_HSID;
                dbEntry.CRO_repairCost = repOrder.CRO_repairCost;
                dbEntry.CRO_comment = repOrder.CRO_comment;
                dbEntry.CRO_repairResult = repOrder.CRO_repairResult;
                dbEntry.CRO_revealedDate = repOrder.CRO_revealedDate;
                dbEntry.CRO_sendedDate = repOrder.CRO_sendedDate;
                dbEntry.CRO_CprodDate = repOrder.CRO_CprodDate;
                dbEntry.CRO_repairContractor = repOrder.CRO_repairContractor;
                dbEntry.CRO_verdict = repOrder.CRO_verdict;
                dbEntry.CRO_No = repOrder.CRO_No;

                //удалим лишние пробельчики
                TrimCReporderFields(dbEntry);
            }
            dataDBContext.SubmitChanges();
            return repOrder.CRO_ID;
        }
        string _itemType; //c = контроллер

        #endregion Fields

        #region Constructors

        //конструкторы - для каждого вида заявки свой
        public HSRepairHistoryItem(CRepOrder order)
        {
            _cOrder = order;
            _itemType = "c";
        }
 //методы обрезкки лишних введенных пробелов в начале и конце текстовых полей
 void TrimCReporderFields(CRepOrder repOrder)
 {
     if(repOrder.CRO_description!=null) repOrder.CRO_description = repOrder.CRO_description.Trim();
        if (repOrder.CRO_expectedRepairTerm != null) repOrder.CRO_expectedRepairTerm = repOrder.CRO_expectedRepairTerm.Trim();
        if (repOrder.CRO_equipLocation != null) repOrder.CRO_equipLocation = repOrder.CRO_equipLocation.Trim();
        if (repOrder.CRO_No != null) repOrder.CRO_No = repOrder.CRO_No.Trim();
 }
        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 CRepOrderWordDoc(CRepOrder order)
 {
     _order = order;
 }