public JsonResult AddCommentToClaim(string comment, int idClaim, int cv) { var isComplete = false; ClaimStatusHistory statusHistory = null; try { var user = GetUser(); var db = new DbEngine(); statusHistory = db.LoadLastStatusHistoryForClaim(idClaim); statusHistory.Date = DateTime.Now; statusHistory.IdUser = user.Id; statusHistory.Comment = comment; statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); isComplete = db.SaveClaimStatusHistory(statusHistory); if (isComplete) { var productManagers = db.LoadProductManagersForClaim(idClaim, cv); var productManagersFromAd = UserHelper.GetProductManagers(); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)).ToList(); var claim = db.LoadTenderClaimById(idClaim); var host = ConfigurationManager.AppSettings["AppHost"]; var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append("<br/>"); messageMail.Append("В заявке № " + idClaim + ", где Вам назначены позиции для расчета, пользователь "); messageMail.Append(user.ShortName); messageMail.Append(" создал комментарий: <br />" + comment); messageMail.Append("<br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<br/><br/>"); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Calc/Index?claimId=" + claim.Id + "'>" + host + "/Calc/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(productInClaim, messageMail.ToString(), String.Format("{0} - {1} - Комментарий к заявке СпецРасчет", claim.TenderNumber, claim.Customer)); } } catch (Exception) { isComplete = false; } return Json(new { IsComplete = isComplete, Model = statusHistory }, JsonRequestBehavior.AllowGet); }
public JsonResult SetClaimOnWork(int id, int? cv) { cv = cv ?? 0; var isComplete = false; var message = string.Empty; ClaimStatusHistory model = null; try { var db = new DbEngine(); var hasPosition = db.HasClaimPosition(id); if (hasPosition) { isComplete = DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = id, ClaimStatus = 2 }); var productManagers = db.LoadProductManagersForClaim(id, cv.Value); if (productManagers != null && productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); foreach (var productManager in productManagers) { var productManagerFromAd = productManagersFromAd.FirstOrDefault(x => x.Id == productManager.Id); if (productManagerFromAd != null) { productManager.ShortName = productManagerFromAd.ShortName; } } //истроия изменения статуса заявки var user = GetUser(); var comment = "Продакты/снабженцы:<br />"; comment += string.Join("<br />", productManagers.Select(x => x.ShortName)); comment += "<br />Автор: " + user.ShortName; model = new ClaimStatusHistory() { Date = DateTime.Now, IdClaim = id, IdUser = user.Id, Status = new ClaimStatus() { Id = 2 }, Comment = comment }; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления var claimPositions = db.LoadSpecificationPositionsForTenderClaim(id, cv.Value); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)).ToList(); var claim = db.LoadTenderClaimById(id); var host = ConfigurationManager.AppSettings["AppHost"]; foreach (var productManager in productInClaim) { var positionCount = claimPositions.Count(x => x.ProductManager.Id == productManager.Id); var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append(String.Format("<br/>На имя {0} назначена заявка в системе СпецРасчет.", productManager.ShortName)); //messageMail.Append("<br/>Пользователь "); //messageMail.Append(user.Name); //messageMail.Append( // " создал заявку где Вам назначены позиции для расчета. Количество назначенных позиций: " + // positionCount + "<br/>"); messageMail.Append("<br/><br />"); messageMail.Append(GetClaimInfo(claim)); messageMail.Append("<br />Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Calc/Index?claimId=" + claim.Id + "'>" + host + "/Calc/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(new[] { productManager }, messageMail.ToString(), String.Format("{0} - {1} - Новая заявка СпецРасчет", claim.TenderNumber, claim.Customer)); } } } else { message = "Невозможно передать заявку в работу без позиций спецификаций"; } } catch (Exception) { isComplete = false; } return Json(new { IsComplete = isComplete, Message = message, Model = model }, JsonRequestBehavior.AllowGet); }
public JsonResult SetClaimStopped(ClaimStatusHistory model) { var isComplete = false; try { var db = new DbEngine(); isComplete = DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = model.IdClaim, ClaimStatus = 4 }); if (isComplete) { model.Date = DateTime.Now; model.IdUser = GetUser().Id; model.Status = new ClaimStatus() { Id = 4 }; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления var claim = db.LoadTenderClaimById(model.IdClaim); var productManagers = db.LoadProductManagersForClaim(model.IdClaim, model.Version); if (productManagers != null && productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); var user = GetUser(); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)).ToList(); var host = ConfigurationManager.AppSettings["AppHost"]; var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append("<br/>Пользователь "); messageMail.Append(user.Name); messageMail.Append(" приостановил заявку где Вам назначены позиции для расчета."); //messageMail.Append("<br/><br />"); //messageMail.Append(GetClaimInfo(claim)); messageMail.Append("<br/><br />"); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Calc/Index?claimId=" + claim.Id + "'>" + host + "/Calc/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(productInClaim, messageMail.ToString(), String.Format("{0} - {1} - Приостановка заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } } } catch (Exception ex) { isComplete = false; } return Json(new { IsComplete = isComplete, Model = model }); }
public JsonResult SetClaimContinued(ClaimStatusHistory model) { var isComplete = false; try { var db = new DbEngine(); var statusHistory = db.LoadStatusHistoryForClaim(model.IdClaim); if (statusHistory.Count() > 1) { //var lastValueValid = statusHistory.Last().Status.Id; //if (lastValueValid == 4 || lastValueValid == 5) //{ var actualStatus = new ClaimStatusHistory() {Status = new ClaimStatus(){Id = 3}};//statusHistory[statusHistory.Count() - 2]; isComplete = DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = model.IdClaim, ClaimStatus = actualStatus.Status.Id }); if (isComplete) { model.Date = DateTime.Now; model.IdUser = GetUser().Id; model.Status = new ClaimStatus() { Id = actualStatus.Status.Id }; if (string.IsNullOrEmpty(model.Comment)) model.Comment = "Возобновление заявки" + "<br />Автор: " + GetUser().ShortName; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления var claim = db.LoadTenderClaimById(model.IdClaim); var productManagers = db.LoadProductManagersForClaim(model.IdClaim, model.Version); if (productManagers != null && productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); var user = GetUser(); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)).ToList(); var host = ConfigurationManager.AppSettings["AppHost"]; var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append("<br/>Пользователь "); messageMail.Append(user.Name); messageMail.Append(" возобновил заявку для работы где Вам назначены позиции для расчета."); messageMail.Append("<br/><br/>"); //messageMail.Append(GetClaimInfo(claim)); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Calc/Index?claimId=" + claim.Id + "'>" + host + "/Calc/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(productInClaim, messageMail.ToString(), String.Format("{0} - {1} - Возобновление заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } } //} } } catch (Exception ex) { isComplete = false; } return Json(new { IsComplete = isComplete, Model = model }); }
public JsonResult AskPositionReject(List<int> posIds, int idClaim, int cv) { var isComplete = false; var message = string.Empty; ClaimStatusHistory model = null; var user = GetUser(); var db = new DbEngine(); var positions = new List<SpecificationPosition>(); var positionIds = new List<int>(); if (posIds.Any()) { positionIds = posIds; } isComplete = db.ChangePositionsState(positionIds, 7); if (!isComplete) message = "Запрос не отправлен"; else { var allPositions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); var isAllRejected = allPositions.Count() == allPositions.Count(x => x.State == 7); var lastClaimStatus = db.LoadLastStatusHistoryForClaim(idClaim).Status.Id; var claimStatus = lastClaimStatus; //Изменение статуса заявки и истроии изменения статусов if (lastClaimStatus != claimStatus) { DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = idClaim, ClaimStatus = claimStatus }); var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, Comment = String.Format("Пользователь {0} запросил отклонение {1} из {2} позиций.<br/>", user.ShortName, positionIds.Count, allPositions.Count), IdClaim = idClaim, IdUser = user.Id, Status = new ClaimStatus() { Id = claimStatus } }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = statusHistory; } else { var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, Comment = String.Format("Пользователь {0} запросил отклонение {1} из {2} позиций.<br/>", user.ShortName, positionIds.Count, allPositions.Count), IdClaim = idClaim, IdUser = user.Id, Status = new ClaimStatus() { Id = lastClaimStatus } }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = statusHistory; } //инфа для уведомления var claim = db.LoadTenderClaimById(idClaim); var host = ConfigurationManager.AppSettings["AppHost"]; var productManagersFromAd = UserHelper.GetProductManagers(); var productManagers = db.LoadProductManagersForClaim(claim.Id, cv); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)) .ToList(); var manager = UserHelper.GetUserById(claim.Manager.Id); var author = UserHelper.GetUserById(claim.Author.Id); var to = new List<UserBase>(); to.Add(manager); if (author.Id != manager.Id) { to.Add(author); } //>>>>Уведомления if (isAllRejected) { var messageMail = new StringBuilder(); messageMail.Append("Добрый день!<br/>"); messageMail.Append("Запрос на отклонение позиций в заявке №" + claim.Id + " пльзователем " + user.Name + ".<br/>"); //messageMail.Append("Комментарий:<br/>"); //messageMail.Append(comment + "<br/>"); //messageMail.Append("Продакты/Снабженцы: <br/>"); //foreach (var productManager in productInClaim) //{ // messageMail.Append(productManager.Name + "<br/>"); //} messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - {1} - Запрос на отклонение позиций заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } //>>>>Уведомления if (!isAllRejected) { var noneRejectedPositionManagers = allPositions.Where(x => x.State == 1 || x.State == 3) .Select(x => x.ProductManager) .ToList(); if (noneRejectedPositionManagers.Any()) { var products = productManagersFromAd.Where( x => noneRejectedPositionManagers.Select(y => y.Id).Contains(x.Id)) .ToList(); var messageMail = new StringBuilder(); messageMail.Append("Добрый день!<br/>"); messageMail.Append("Запрос на отклонение позиций в заявке №" + claim.Id + " пльзователем " + user.Name + ".<br/>"); messageMail.Append("Отклонено позиций " + allPositions.Count(x => x.State == 5) + " из " + allPositions.Count + ".<br/>"); //messageMail.Append("<br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<br/>"); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - {1} - Запрос на отклонение позиций заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } } } return Json(new { IsComplete = isComplete, Message = message, Model = model }, JsonRequestBehavior.AllowGet); }
public ActionResult GoActual(int claimId, int cv, int[] selIds) { if (claimId <= 0)throw new ArgumentException("Не указана заявка"); if (cv<= 0) throw new ArgumentException("Не указана верия для актулизации"); int newClaimState = 10; bool isComplete = DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = claimId, ClaimStatus = newClaimState }); int newVersion = DbEngine.CopyPositionsForNewVersion(claimId, cv, GetUser().Id, selIds); var db = new DbEngine(); var productManagers = db.LoadProductManagersForClaim(claimId, newVersion, getActualize:true); if (productManagers != null && productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); foreach (var productManager in productManagers) { var productManagerFromAd = productManagersFromAd.FirstOrDefault(x => x.Id == productManager.Id); if (productManagerFromAd != null) { productManager.ShortName = productManagerFromAd.ShortName; } } //истроия изменения статуса заявки var user = GetUser(); var comment = "Продакты/снабженцы:<br />"; comment += string.Join("<br />", productManagers.Select(x => x.ShortName)); comment += "<br />Автор: " + user.ShortName; ClaimStatusHistory model = new ClaimStatusHistory() { Date = DateTime.Now, IdClaim = claimId, IdUser = user.Id, Status = new ClaimStatus() {Id = newClaimState }, Comment = comment }; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления var claimPositions = db.LoadSpecificationPositionsForTenderClaim(claimId, newVersion); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)).ToList(); var claim = db.LoadTenderClaimById(claimId); var host = ConfigurationManager.AppSettings["AppHost"]; foreach (var productManager in productInClaim) { var positionCount = claimPositions.Count(x => x.ProductManager.Id == productManager.Id); var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append(String.Format("<br/>На имя {0} назначена Актуализация расчета по заявке в системе СпецРасчет.", productManager.ShortName)); //messageMail.Append("<br/>Пользователь "); //messageMail.Append(user.Name); //messageMail.Append( // " создал заявку где Вам назначены позиции для расчета. Количество назначенных позиций: " + // positionCount + "<br/>"); messageMail.Append("<br/><br />"); messageMail.Append(GetClaimInfo(claim)); messageMail.Append("<br />Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Calc/Index?claimId=" + claim.Id + "'>" + host + "/Calc/Index?claimId=" + claim.Id + "&cv=" + newVersion + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(new[] {productManager}, messageMail.ToString(), String.Format("{0} - {1} - Актуализация расчета заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } } return Json(new { claimId = claimId, newVersion = newVersion }); //return RedirectToAction("Index", new {claimId = claimId, cv= newVersion }); }
public JsonResult SetPositionRejected(List<int> posIds, int idClaim, string comment, int cv) { var isComplete = false; var message = string.Empty; ClaimStatusHistory model = null; /* try {*/ var user = GetUser(); var db = new DbEngine(); //получение позиций для текущего юзера var positions = new List<SpecificationPosition>(); if (UserHelper.IsController(user)) { positions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); } else { if (UserHelper.IsProductManager(user)) { positions = db.LoadSpecificationPositionsForTenderClaimForProduct(idClaim, user.Id, cv); } } var positionIds = new List<int>(); //if (positions.Any()) if (posIds.Any()) { //Переделано для частичной передачи расчета positionIds = posIds; } //изменения статуса позиций на - отправлено else { foreach (var position in positions) { positionIds.Add(position.Id); } } isComplete = db.ChangePositionsState(positionIds,5); if (!isComplete) message = "Позиции не отклонены"; else { var allPositions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); var isAllRejected = allPositions.Count() == allPositions.Count(x => x.State == 5); var lastClaimStatus = db.LoadLastStatusHistoryForClaim(idClaim).Status.Id; var claimStatus = isAllRejected ? 9 : lastClaimStatus; //Изменение статуса заявки и истроии изменения статусов if (lastClaimStatus != claimStatus) { DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = idClaim, ClaimStatus = claimStatus }); var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, Comment = String.Format("Пользователь {0} отклонил {2} из {3} позиций.<br/>Комментарий: {1} ",user.ShortName,comment,positionIds.Count,allPositions.Count), IdClaim = idClaim, IdUser = user.Id, Status = new ClaimStatus() { Id = claimStatus } }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = statusHistory; } else { var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, Comment = String.Format("Пользователь {0} отклонил {2} из {3} позиций.<br/>Комментарий: {1} ", user.ShortName, comment, positionIds.Count, allPositions.Count), IdClaim = idClaim, IdUser = user.Id, Status = new ClaimStatus() { Id = lastClaimStatus } }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = statusHistory; } //инфа для уведомления var claim = db.LoadTenderClaimById(idClaim); var host = ConfigurationManager.AppSettings["AppHost"]; var productManagersFromAd = UserHelper.GetProductManagers(); var productManagers = db.LoadProductManagersForClaim(claim.Id, cv); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)) .ToList(); var manager = UserHelper.GetUserById(claim.Manager.Id); var author = UserHelper.GetUserById(claim.Author.Id); var to = new List<UserBase>(); to.Add(manager); if (author.Id != manager.Id) { to.Add(author); } //>>>>Уведомления if (claimStatus == 9) { var messageMail = new StringBuilder(); messageMail.Append("Добрый день!<br/>"); messageMail.Append("Позиции в заявке № " + claim.Id + " отклонены пользователем " + user.Name + ".<br/>"); messageMail.Append("Отклонены все позиции.<br/>"); messageMail.Append("Комментарий:<br/>"); messageMail.Append(comment+"<br/>"); //messageMail.Append("Продакты/Снабженцы: <br/>"); //foreach (var productManager in productInClaim) //{ // messageMail.Append(productManager.Name + "<br/>"); //} messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - {1} - Полное отклонение заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } //>>>>Уведомления if (claimStatus == lastClaimStatus) { var noneRejectedPositionManagers = allPositions.Where(x => x.State == 1 || x.State == 3) .Select(x => x.ProductManager) .ToList(); if (noneRejectedPositionManagers.Any()) { var products = productManagersFromAd.Where( x => noneRejectedPositionManagers.Select(y => y.Id).Contains(x.Id)) .ToList(); var messageMail = new StringBuilder(); messageMail.Append("Добрый день!<br/>"); messageMail.Append("Позиции в заявке №" + claim.Id + " отклонены пльзователем "+ user.Name+".<br/>"); messageMail.Append("Отклонено позиций "+allPositions.Count(x => x.State==5)+" из "+allPositions.Count+".<br/>"); //messageMail.Append("<br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<br/>"); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - {1} - Частичное отклонение заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } } } /* } else { message = "Невозможно отправить позиции на подтверждение\rНе все позиции имеют расчет"; } } else { message = "Выберите хотябы одну позицию!"; }*/ /* } catch (Exception) { isComplete = false; message = "Ошибка сервера"; }*/ return Json(new { IsComplete = isComplete, Message = message, Model = model }, JsonRequestBehavior.AllowGet); }
public JsonResult SetPositionToConfirm(List<int> posIds, int idClaim, string comment, int cv) { var isComplete = false; var message = string.Empty; ClaimStatusHistory model = null; try { var user = GetUser(); var db = new DbEngine(); //получение позиций для текущего юзера var positions = new List<SpecificationPosition>(); if (UserHelper.IsController(user)) { positions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); } else { if (UserHelper.IsProductManager(user)) { positions = db.LoadSpecificationPositionsForTenderClaimForProduct(idClaim, user.Id, cv); } } //if (positions.Any()) if (posIds.Any()) { //Переделано для частичной передачи расчета positions = new List<SpecificationPosition>(); foreach (int p in posIds) { positions.Add(new SpecificationPosition(){Id=p}); } // /> частичная передача //проверка наличия у позиций строк расчета var isReady = db.IsPositionsReadyToConfirm(positions); if (isReady) { //изменения статуса позиций на - отправлено isComplete = db.SetPositionsToConfirm(positions); if (!isComplete) message = "Позиции не отправлены"; else { var allPositions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); var isAllCalculate = allPositions.Count() == allPositions.Count(x => x.State == 2 || x.State == 4); var claimStatus = isAllCalculate ? 7 : 6; //Изменение статуса заявки и истроии изменения статусов var status = db.LoadLastStatusHistoryForClaim(idClaim).Status.Id; if (status != claimStatus) { DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = idClaim, ClaimStatus = claimStatus }); var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, Comment = comment, IdClaim = idClaim, IdUser = user.Id, Status = new ClaimStatus() {Id = claimStatus} }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = statusHistory; } else { var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, Comment = comment, IdClaim = idClaim, IdUser = user.Id, Status = new ClaimStatus() {Id = status} }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = statusHistory; } //инфа для уведомления var claim = db.LoadTenderClaimById(idClaim); var host = ConfigurationManager.AppSettings["AppHost"]; var productManagersFromAd = UserHelper.GetProductManagers(); var productManagers = db.LoadProductManagersForClaim(claim.Id, cv); var productInClaim = productManagersFromAd.Where(x => productManagers.Select(y => y.Id).Contains(x.Id)) .ToList(); var manager = UserHelper.GetUserById(claim.Manager.Id); var author = UserHelper.GetUserById(claim.Author.Id); var to = new List<UserBase>(); to.Add(manager); if (author.Id != manager.Id) { to.Add(author); } //>>>>Уведомления if (claimStatus == 7) { var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append("<br/>"); messageMail.Append("Заявка №" + claim.Id + " - версия " + cv + " - полностью расчитана."); //messageMail.Append("<br/><br />"); //messageMail.Append(GetClaimInfo(claim)); messageMail.Append("<br/>"); //messageMail.Append("Продакты/Снабженцы: <br/>"); //foreach (var productManager in productInClaim) //{ // messageMail.Append(productManager.Name + "<br/>"); //} messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - версия {2} - {1} - Полный расчет заявки СпецРасчет", claim.TenderNumber, claim.Customer, cv)); } //>>>>Уведомления if (claimStatus == 6) { var noneCalculatePositionManagers = allPositions.Where(x => x.State == 1 || x.State == 3) .Select(x => x.ProductManager) .ToList(); if (noneCalculatePositionManagers.Any()) { var products = productManagersFromAd.Where( x => noneCalculatePositionManagers.Select(y => y.Id).Contains(x.Id)) .ToList(); var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); messageMail.Append("<br/>"); messageMail.Append("Заявка №" + claim.Id + " частично расчитана."); messageMail.Append("Продакты/Снабженцы, у которых расчет еще в работе: <br/>"); foreach (var productManager in products) { messageMail.Append(productManager.Name + "<br/>"); } //messageMail.Append("<br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<br/>"); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - {1} - Частичный расчет заявки СпецРасчет", claim.TenderNumber, claim.Customer)); } } } } else { message = "Невозможно отправить позиции на подтверждение\rНе все позиции имеют расчет"; } } else { message = "Выберите хотябы одну позицию!"; } } catch (Exception) { isComplete = false; message = "Ошибка сервера"; } return Json(new { IsComplete = isComplete, Message = message, Model = model }, JsonRequestBehavior.AllowGet); }