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 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 SetPositonRejected(List<int> positionsId, string comment, int idClaim, int cv) { var isComplete = false; ClaimStatusHistory model = null; try { var user = GetUser(); var db = new DbEngine(); isComplete = db.ChangePositionsState(positionsId, 3); var allPositions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); int claimStatus = 3; bool isSameCalculate = allPositions.Any(x => x.State == 2 || x.State == 4); if (isSameCalculate) claimStatus = 6; var status = db.LoadLastStatusHistoryForClaim(idClaim).Status.Id; //изменение статуса заявки и истроиии изменения статусов if (status != claimStatus) { var changeStatusComplete = DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = idClaim, ClaimStatus = claimStatus }); if (changeStatusComplete) { model = new ClaimStatusHistory() { Date = DateTime.Now, IdUser = user.Id, IdClaim = idClaim, Comment = comment, Status = new ClaimStatus() { Id = claimStatus } }; if (string.IsNullOrEmpty(model.Comment)) model.Comment = string.Empty; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); } } if (isComplete) { //>>>>Уведомления var claim = db.LoadTenderClaimById(idClaim); var productManagers = allPositions.Where(x => positionsId.Contains(x.Id)).Select(x => x.ProductManager).ToList(); if (productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); 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("Пользователь "); messageMail.Append(user.ShortName); messageMail.Append(" отклонил Ваш расчет позиции по заявке № " + claim.Id + "<br/>"); if (!string.IsNullOrEmpty(comment)) messageMail.Append("Комментарий: " + comment); messageMail.Append("<br/><br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<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 = 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 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 SendPositonOnWork(List<int> positionsId, string comment, int idClaim, int cv) { var isComplete = false; ClaimStatusHistory model = null; try { var user = GetUser(); var db = new DbEngine(); isComplete = db.ChangePositionsState(positionsId, 1); var lastStatus = db.LoadLastStatusHistoryForClaim(idClaim); int claimStatus; var allPositions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); if (lastStatus.Status.Id == 9) claimStatus = 2; else claimStatus = lastStatus.Status.Id; var productManagers = allPositions.Where(x => positionsId.Contains(x.Id)).Select(x => x.ProductManager).ToList(); 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 status = db.LoadLastStatusHistoryForClaim(idClaim).Status.Id; //изменение статуса заявки и истроиии изменения статусов var changeStatusComplete = true; if (lastStatus.Status.Id == 9) changeStatusComplete = DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = idClaim, ClaimStatus = 2 }); if (changeStatusComplete) { model = new ClaimStatusHistory() { Date = DateTime.Now, IdUser = user.Id, IdClaim = idClaim, Comment = "Переданы позиции для повторного расчета для:<br />" +string.Join("<br />", productManagers.Select(x => x.ShortName))+"<br /><br />", Status = new ClaimStatus() { Id = claimStatus} }; if (!string.IsNullOrEmpty(comment)) model.Comment += "Комментарий: " + comment + "<br />"; model.Comment += "Автор: " + user.ShortName; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); } if (isComplete) { //>>>>Уведомления var claim = db.LoadTenderClaimById(idClaim); productManagers = allPositions.Where(x => positionsId.Contains(x.Id)).Select(x => x.ProductManager).ToList(); if (productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); 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("Добрый день!<br/>"); messageMail.Append("В заявке № " + claim.Id + " вам вновь переданы позиции для расчета пользователем " + user.Name +"<br/>"); if (!string.IsNullOrEmpty(comment)) messageMail.Append("Комментарий: " + comment+"<br/>"); messageMail.Append("<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 = model }); }
//>>>>Уведомления //подтверждение позиций по заявке public JsonResult SetClaimAllPositonConfirmed(int idClaim, int cv) { var isComplete = false; ClaimStatusHistory model = null; var message = string.Empty; try { var user = GetUser(); var db = new DbEngine(); var positions = db.LoadSpecificationPositionsForTenderClaim(idClaim, cv); if (positions.Any()) { //все ли позиции имеют расчет var isReady = db.IsPositionsReadyToConfirm(positions); if (isReady) { //изменение статуса позиций, заявки и истории изменения статусов isComplete = db.ChangePositionsState(positions.Select(x => x.Id).ToList(), 4); if (isComplete) { DbEngine.ChangeTenderClaimClaimStatus(new TenderClaim() { Id = idClaim, ClaimStatus = 8 }); model = new ClaimStatusHistory() { Date = DateTime.Now, IdUser = user.Id, IdClaim = idClaim, Comment = string.Empty, Status = new ClaimStatus() { Id = 8 } }; db.SaveClaimStatusHistory(model); model.DateString = model.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления var claim = db.LoadTenderClaimById(idClaim); var productManagers = positions.Select(x => x.ProductManager).ToList(); if (productManagers.Any()) { var productManagersFromAd = UserHelper.GetProductManagers(); 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("Пользователь "); messageMail.Append(user.ShortName); messageMail.Append(" подтвердил Ваш расчет позиции по заявке № " + claim.Id + " - версия " + cv); messageMail.Append("<br/><br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<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} - версия {2} - {1} - Подтверждение расчета позиций заявки СпецРасчет", claim.TenderNumber, claim.Customer, cv)); } } } else { message = "Невозможно отправить позиции на подтверждение\rНе все позиции имеют расчет"; } } else { message = "Невозможно отправить позиции на подтверждение\rВ заявке нет позиций"; } } catch (Exception) { isComplete = false; } return Json(new { IsComplete = isComplete, Model = model, Message = message }, JsonRequestBehavior.AllowGet); }
public ActionResult NewClaim(TenderClaim model, string managerSid) { var manager = new EmployeeSm(managerSid); model.Manager = new Manager() { Id = manager.AdSid, ShortName = manager.DisplayName, SubDivision = manager.DepartmentName }; model.Author = GetUser(); model.RecordDate = DateTime.Now; model.ClaimStatus = 1; model.TenderStatus = 1; var db = new DbEngine(); var success = db.SaveTenderClaim(ref model); if (success) { string message = ""; if (Request.Files.Count > 0) { int idClaim = model.Id; if (idClaim != null && idClaim > 0) { for (int i = 0; i < Request.Files.Count; i++) { var file = Request.Files[i]; var fileFormats = WebConfigurationManager.AppSettings["FileFormat4TenderClaimFile"].Split(',').Select(s => s.ToLower()).ToArray(); byte[] fileData = null; if (Array.IndexOf(fileFormats, Path.GetExtension(file.FileName).ToLower()) > -1) { using (var br = new BinaryReader(file.InputStream)) { fileData = br.ReadBytes(file.ContentLength); } var claimFile = new TenderClaimFile() { IdClaim = idClaim, File = fileData, FileName = file.FileName }; db.SaveTenderClaimFile(ref claimFile); } else if (file.ContentLength > 0) message += String.Format("Файл {0} имеет недопустимое расширение.", file.FileName); } //} } } TempData["error"] = message; if (success) { //История изменения статуса var statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, IdClaim = model.Id, IdUser = model.Author.Id, Status = new ClaimStatus() { Id = model.ClaimStatus }, Comment = "Автор: " + model.Author.ShortName }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления if (model.Author.Id != model.Manager.Id) { var host = ConfigurationManager.AppSettings["AppHost"]; var emessage = new StringBuilder(); emessage.Append("Добрый день!"); //message.Append(manager.Name); emessage.Append("<br/>"); emessage.Append("Пользователь "); emessage.Append(model.Author.ShortName); emessage.Append(" создал заявку где Вы назначены менеджером."); emessage.Append("<br/><br />"); emessage.Append(GetClaimInfo(model)); emessage.Append("<br/>"); emessage.Append("Ссылка на заявку: "); emessage.Append("<a href='" + host + "/Claim/Index?claimId=" + model.Id + "'>" + host + "/Claim/Index?claimId=" + model.Id + "</a>"); //message.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(new List<UserBase>() { manager.GetUserBase(new List<Role>() { Role.Manager }) }, emessage.ToString(), String.Format("{0} - {1} - Новая заявка СпецРасчет", model.TenderNumber, model.Customer)); } } return RedirectToAction("Index", "Claim", new { claimId = model.Id }); } return RedirectToAction("NewClaim", "Claim", new { errorMessage = "при сохранении возникла ошибка" }); }
public JsonResult SaveClaim(TenderClaim model) { var isComplete = false; ClaimStatusHistory statusHistory = null; int? idClaim; string errorText = String.Empty; try { model.KPDeadline = DateTime.ParseExact(model.KPDeadlineString, "dd.MM.yyyy", CultureInfo.CurrentCulture); model.ClaimDeadline = DateTime.ParseExact(model.ClaimDeadlineString, "dd.MM.yyyy", CultureInfo.CurrentCulture); model.TenderStart = DateTime.ParseExact(model.TenderStartString, "dd.MM.yyyy", CultureInfo.CurrentCulture); if (!string.IsNullOrEmpty(model.DeliveryDateString)) model.DeliveryDate = DateTime.ParseExact(model.DeliveryDateString, "dd.MM.yyyy", CultureInfo.CurrentCulture); if (!string.IsNullOrEmpty(model.DeliveryDateEndString)) model.DeliveryDateEnd = DateTime.ParseExact(model.DeliveryDateEndString, "dd.MM.yyyy", CultureInfo.CurrentCulture); if (!string.IsNullOrEmpty(model.AuctionDateString)) model.AuctionDate = DateTime.ParseExact(model.AuctionDateString, "dd.MM.yyyy", CultureInfo.CurrentCulture); var modelValid = true; if (string.IsNullOrEmpty(model.Customer) || model.Sum < 0) modelValid = false; if (modelValid) { var user = GetUser(); var db = new DbEngine(); model.ClaimStatus = 1; model.TenderStatus = 1; model.Deleted = false; model.RecordDate = DateTime.Now; model.Author = UserHelper.GetUserById(user.Id); isComplete = db.SaveTenderClaim(ref model); if (model.DeliveryDateString == null) model.DeliveryDateString = string.Empty; if (model.DeliveryDateEndString == null) model.DeliveryDateEndString = string.Empty; if (model.AuctionDateString == null) model.AuctionDateString = string.Empty; if (model.DeliveryPlace == null) model.DeliveryPlace = string.Empty; if (isComplete) { //История изменения статуса statusHistory = new ClaimStatusHistory() { Date = DateTime.Now, IdClaim = model.Id, IdUser = user.Id, Status = new ClaimStatus() { Id = model.ClaimStatus }, Comment = "Автор: " + user.ShortName }; db.SaveClaimStatusHistory(statusHistory); statusHistory.DateString = statusHistory.Date.ToString("dd.MM.yyyy HH:mm"); //>>>>Уведомления if (model.Author.Id != model.Manager.Id) { var manager = UserHelper.GetUserById(model.Manager.Id); if (manager != null) { var host = ConfigurationManager.AppSettings["AppHost"]; var message = new StringBuilder(); message.Append("Добрый день!"); //message.Append(manager.Name); message.Append("<br/>"); message.Append("Пользователь "); message.Append(user.ShortName); message.Append(" создал заявку где Вы назначены менеджером."); message.Append("<br/><br />"); message.Append(GetClaimInfo(model)); message.Append("<br/>"); message.Append("Ссылка на заявку: "); message.Append("<a href='" + host + "/Claim/Index?claimId=" + model.Id + "'>" + host + "/Claim/Index?claimId=" + model.Id + "</a>"); //message.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(new List<UserBase>() { manager }, message.ToString(), String.Format("{0} - {1} - Новая заявка СпецРасчет", model.TenderNumber, model.Customer)); } } } } } catch (Exception ex) { isComplete = false; errorText = ex.Message; } return Json(new { IsComplete = isComplete, Model = model, StatusHistory = statusHistory, errorText = errorText }); }
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 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 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 ActionResult Index(int? claimId, int? cv) { var user = GetUser(); if (!UserHelper.IsController(user) && (UserHelper.IsManager(user) || UserHelper.IsOperator(user))) return RedirectToAction("Index", "Claim", new { claimId = claimId, cv = cv }); //проверка наличия доступа к странице if (user == null || !UserHelper.IsUserAccess(user)) { var dict = new RouteValueDictionary(); dict.Add("message", "У Вас нет доступа к приложению"); return RedirectToAction("ErrorPage", "Auth", dict); } if (claimId.HasValue && !cv.HasValue) { int lastVersion = DbEngine.GetCalcVersionList(claimId.Value).Last(); return RedirectToAction("Index", new { claimId = claimId, cv = lastVersion }); } ViewBag.UserName = user.Name; var isController = UserHelper.IsController(user); var isProduct = UserHelper.IsProductManager(user); if (!isController && !isProduct) { var dict = new RouteValueDictionary(); dict.Add("message", "У Вас нет доступа к этой странице"); return RedirectToAction("ErrorPage", "Auth", dict); } ViewBag.Error = false.ToString().ToLower(); ViewBag.DealType = string.Empty; ViewBag.Status = string.Empty; ViewBag.StatusHistory = new List<ClaimStatusHistory>(); var newClaim = true; if (!isController) newClaim = false; ViewBag.NewClaim = newClaim.ToString().ToLower(); try { //получение инфы по заявке и сопутствующих справочников var db = new DbEngine(); TenderClaim claim = null; var dealTypeString = string.Empty; var tenderStatus = string.Empty; ViewBag.ClaimStatus = db.LoadClaimStatus(); ViewBag.Currencies = db.LoadCurrencies(); ViewBag.DeliveryTimes = db.LoadDeliveryTimes(); if (claimId.HasValue) { claim = db.LoadTenderClaimById(claimId.Value); claim.Certs = db.LoadClaimCerts(claimId.Value); claim.Files = db.LoadTenderClaimFiles(claimId.Value); var adProductsManager = UserHelper.GetProductManagers(); if (claim != null) { //if (claim.ClaimStatus == 1) //{ // var dict = new RouteValueDictionary(); // dict.Add("message", "Статус заявки не позволяет производить расчет позиций"); // return RedirectToAction("ErrorPage", "Auth", dict); //} //позиции заявки, в зависимости от роли юзера if (!isController) { claim.Positions = db.LoadSpecificationPositionsForTenderClaimForProduct(claimId.Value, user.Id, cv.Value); } else { claim.Positions = db.LoadSpecificationPositionsForTenderClaim(claimId.Value, cv.Value); } if (claim.Positions != null && claim.Positions.Any()) { //изменение статуса в Работе если это первая загрузка для расчета по данной заявке if (claim.ClaimStatus == 2) { claim.ClaimStatus = 3; DbEngine.ChangeTenderClaimClaimStatus(claim); var statusHistory = new ClaimStatusHistory() { IdClaim = claim.Id, Date = DateTime.Now, Comment = string.Empty, Status = new ClaimStatus() { Id = claim.ClaimStatus }, IdUser = user.Id }; db.SaveClaimStatusHistory(statusHistory); } //менеджеры и снабженцы из ActiveDirectory var managerFromAd = UserHelper.GetUserById(claim.Manager.Id); claim.Manager.Name = managerFromAd.Name; claim.Manager.ShortName = managerFromAd.ShortName; claim.Manager.ChiefShortName = managerFromAd.ManagerName; //var managers = UserHelper.GetManagers(); //var managerFromAd = managers.FirstOrDefault(x => x.Id == claim.Manager.Id); //if (managerFromAd != null) //{ // claim.Manager.Name = managerFromAd.Name; // claim.Manager.ShortName = managerFromAd.ShortName; // claim.Manager.ChiefShortName = managerFromAd.ChiefShortName; //} var subordinateList = Employee.GetSubordinates(user.Id); var productManagers = claim.Positions.Select(x => x.ProductManager).ToList(); var prodManSelList = UserHelper.GetProductManagersSelectionList(); bool hasAccess = isController || claim.Positions.Any(x => x.ProductManager.Id == user.Id); foreach (var productManager in productManagers) { hasAccess = hasAccess || (subordinateList.Any() && Employee.UserIsSubordinate(subordinateList, productManager.Id));// subordinateList.ToList().Contains(productManager.Id); productManager.ShortName = prodManSelList.FirstOrDefault(x => x.Id == productManager.Id)?.ShortName; //var productUser = UserHelper.GetUserById(productManager.Id); //if (productUser != null) //{ // productManager.Name = productUser.Name; // productManager.ShortName = productUser.ShortName; //} //var productManagerFromAd = adProductsManager.First(x => x.Id == productManager.Id); //if (productManagerFromAd != null) //{ // productManager.Name = productManagerFromAd.Name; // productManager.ShortName = productManagerFromAd.ShortName; //} } if (!hasAccess) { var dict = new RouteValueDictionary(); dict.Add("message", "У Вас нет доступа к этой заявке, Вам не назначены позиции для расчета"); return RedirectToAction("ErrorPage", "Auth", dict); } //Расчет по позициям var calculations = db.LoadCalculateSpecificationPositionsForTenderClaim(claimId.Value, cv.Value); if (calculations != null && calculations.Any()) { foreach (var position in claim.Positions) { position.Calculations = calculations.Where(x => x.IdSpecificationPosition == position.Id).ToList(); position.Calculations.Reverse(); } } } else { if (isController) { var dict = new RouteValueDictionary(); dict.Add("message", "У заявки нет позиций"); return RedirectToAction("ErrorPage", "Auth", dict); } else { var dict = new RouteValueDictionary(); dict.Add("message", "У Вас нет доступа к этой заявке, Вам не назначены позиции для расчета"); return RedirectToAction("ErrorPage", "Auth", dict); } } var dealTypes = db.LoadDealTypes(); var dealType = dealTypes.FirstOrDefault(x => x.Id == claim.DealType); if (dealType != null) { dealTypeString = dealType.Value; } var tenderStatusList = db.LoadTenderStatus(); var status = tenderStatusList.FirstOrDefault(x => x.Id == claim.TenderStatus); if (status != null) { tenderStatus = status.Value; } ViewBag.StatusHistory = db.LoadStatusHistoryForClaim(claimId.Value); ViewBag.ProductManagers = adProductsManager; } } ViewBag.Claim = claim; ViewBag.DealType = dealTypeString; ViewBag.Status = tenderStatus; ViewBag.ProtectFacts = db.LoadProtectFacts(); } catch (Exception ex) { ViewBag.Error = true.ToString().ToLower(); } return View(); }
public JsonResult AddComment(int idClaim, string comment) { var isComplete = false; ClaimStatusHistory model = null; try { var user = GetUser(); var db = new DbEngine(); var lastHistory = db.LoadLastStatusHistoryForClaim(idClaim); if (lastHistory != null) { lastHistory.Date = DateTime.Now; lastHistory.Comment = user.ShortName + ": " + comment; lastHistory.IdUser = user.Id; isComplete = db.SaveClaimStatusHistory(lastHistory); if (isComplete) { //var productManagers = db.LoadProductManagersForClaim(idClaim); //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(GetUser().ShortName); messageMail.Append(" создал комментарий: " + comment); messageMail.Append("<br/>"); //messageMail.Append(GetClaimInfo(claim)); //messageMail.Append("<br/><br/>"); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); var author = UserHelper.GetUserById(claim.Author.Id); var manager = UserHelper.GetUserById(claim.Manager.Id); ; var to = new List<UserBase>(); to.Add(manager); if (author.Id != manager.Id) { to.Add(author); } Notification.SendNotification(to, messageMail.ToString(), String.Format("{0} - {1} - Комментарий к заявке СпецРасчет", claim.TenderNumber, claim.Customer)); } lastHistory.DateString = lastHistory.Date.ToString("dd.MM.yyyy HH:mm"); model = lastHistory; } } catch (Exception) { isComplete = false; } return Json(new { IsComplete = isComplete, 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); }
public JsonResult ChangePositionsProduct(List<int> ids, string productId, int idClaim) { var isComplete = false; ClaimStatusHistory model = null; var deleted = true; try { var user = GetUser(); if (UserHelper.IsController(user)) deleted = false; var newProduct = UserHelper.GetUserById(productId); var db = new DbEngine(); isComplete = db.ChangePositionsProduct(ids, productId); if (isComplete) { var comment = "Пользователь " + user.ShortName + " переназначил позиции (" + ids.Count() + " шт.) пользователю " + newProduct.ShortName; var status = db.LoadLastStatusHistoryForClaim(idClaim).Status.Id; 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 manager = UserHelper.GetUserById(claim.Manager.Id); //Сообщение менеджеру и автору var messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); //messageMail.Append(manager.Name); messageMail.Append("<br/>"); messageMail.Append("В заявке №" + claim.Id + " произошли изменения."); messageMail.Append("<br/>"); messageMail.Append(comment); messageMail.Append("<br/>"); //messageMail.Append(GetClaimInfo(claim)); messageMail.Append("Ссылка на заявку: "); messageMail.Append("<a href='" + host + "/Claim/Index?claimId=" + claim.Id + "'>" + host + "/Claim/Index?claimId=" + claim.Id + "</a>"); //messageMail.Append("<br/>Сообщение от системы Спец расчет"); Notification.SendNotification(new[] { manager }, messageMail.ToString(), String.Format("{0} - {1} - Переназначение позиций в заявке СпецРасчет", claim.TenderNumber, claim.Customer)); //Сообщение продакту messageMail = new StringBuilder(); messageMail.Append("Добрый день!"); //messageMail.Append(newProduct.Name); messageMail.Append("<br/>"); messageMail.Append("В заявке №" + claim.Id + " Вам переназначены позиции от пользователя " + user.ShortName + "<br/>"); messageMail.Append("Кол-во позиций: " + ids.Count()); 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(new[] { newProduct }, messageMail.ToString(), String.Format("{0} - {1} - Переназначение позиций в заявке СпецРасчет", claim.TenderNumber, claim.Customer)); } } catch (Exception) { isComplete = false; } return Json(new { IsComplete = isComplete, Model = model, Deleted = deleted }); }