//форма заявки, если передан параметр idClaim, то загружается инфа по заявки с этим id public ActionResult Index(int? claimId, int? cv) { var user = GetUser(); if (!UserHelper.IsController(user) && UserHelper.IsProductManager(user)) return RedirectToAction("Index", "Calc", 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) { var verList = DbEngine.GetCalcVersionList(claimId.Value); if (verList.Any()) { int lastVersion = verList.Last(); return RedirectToAction("Index", new {claimId = claimId, cv = lastVersion}); } else { cv = 0; } } //получения текущего юзера и проверка наличия у него доступа к странице ViewBag.Error = false.ToString().ToLower(); TempData["tenderClaimFileFormats"] = WebConfigurationManager.AppSettings["FileFormat4TenderClaimFile"]; ViewBag.UserName = user.Name; var isController = UserHelper.IsController(user); var isManager = UserHelper.IsManager(user); var isOperator = UserHelper.IsOperator(user); if (!isController && !isManager && !isOperator) { var dict = new RouteValueDictionary(); dict.Add("message", "У Вас нет доступа к этой странице"); return RedirectToAction("ErrorPage", "Auth", dict); } try { //получение необходимой инфы из БД и ActiveDirectory var managers = UserHelper.GetManagers(); ViewBag.Managers = managers; ViewBag.DateStart = DateTime.Now.ToString("dd.MM.yyyy"); var db = new DbEngine(); ViewBag.NextDateMin = DateTime.Now.DayOfWeek == DayOfWeek.Friday ? DateTime.Now.AddDays(4).ToShortDateString() : DateTime.Now.AddDays(2).ToShortDateString(); ViewBag.DealTypes = db.LoadDealTypes(); ViewBag.ClaimStatus = db.LoadClaimStatus(); var adProductManagers = UserHelper.GetProductManagers(); ViewBag.ProductManagers = adProductManagers; ViewBag.StatusHistory = new List<ClaimStatusHistory>(); ViewBag.Facts = db.LoadProtectFacts(); ViewBag.DeliveryTimes = db.LoadDeliveryTimes(); ViewBag.HasTransmissedPosition = false.ToString().ToLower(); ViewBag.Currencies = db.LoadCurrencies(); TenderClaim claim = null; var dealTypeString = String.Empty; var tenderStatus = String.Empty; if (claimId.HasValue && cv.HasValue) { claim = db.LoadTenderClaimById(claimId.Value); if (claim != null) { var allPositions = db.LoadSpecificationPositionsForTenderClaim(claimId.Value, cv.Value); var editablePosIds = new List<int>(); foreach (var position in allPositions) { if (position.State == 5) editablePosIds.Add(position.Id); } ViewBag.EditablePositions = editablePosIds; ViewBag.HasTransmissedPosition = db.HasTenderClaimTransmissedPosition(claimId.Value, cv.Value).ToString().ToLower(); //проверка наличия доступа к данной заявке if (!isController) { if (claim.Manager.Id == user.Id || claim.Author.Id == user.Id) { } else if (isManager) { var subs = Employee.GetSubordinates(user.Id).ToList(); if (!Employee.UserIsSubordinate(subs, claim.Manager.Id) && !Employee.UserIsSubordinate(subs, claim.Author.Id)) { var dict = new RouteValueDictionary(); dict.Add("message", "У Вас нет доступа к этой странице"); return RedirectToAction("ErrorPage", "Auth", dict); } } } 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 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; } //получение позиций по заявке и расчета к ним claim.Certs = db.LoadClaimCerts(claimId.Value); claim.Files = db.LoadTenderClaimFiles(claimId.Value); claim.Positions = db.LoadSpecificationPositionsForTenderClaim(claimId.Value, cv.Value); if (claim.Positions != null && claim.Positions.Any()) { var productManagers = claim.Positions.Select(x => x.ProductManager).ToList(); foreach (var productManager in productManagers) { var productManagerFromAd = adProductManagers.FirstOrDefault(x => x.Id == productManager.Id); if (productManagerFromAd != null) { productManager.Name = productManagerFromAd.Name; } } var calculations = db.LoadCalculateSpecificationPositionsForTenderClaim(claimId.Value, cv.Value); if (calculations != null && calculations.Any()) { foreach (var position in claim.Positions) { if (position.State == 1) continue; position.Calculations = calculations.Where(x => x.IdSpecificationPosition == position.Id).ToList(); position.Calculations.Reverse(); } } } ViewBag.StatusHistory = db.LoadStatusHistoryForClaim(claimId.Value); } } ViewBag.Claim = claim; ViewBag.DealType = dealTypeString; ViewBag.status = tenderStatus; } catch (Exception) { ViewBag.Error = true.ToString().ToLower(); } return View(); }