//получение снабженцев из ActiveDirectory
        public static List<ProductManager> GetProductManagers()
        {
            //var man = new List<ProductManager>()
            //{
            //   new ProductManager(){Id = "dfsadfs", Name = "Гена", Roles = new List<Role>() { Role.Enter, Role.ProductManager}},
            //   new ProductManager(){Id = "fdbfgbv", Name = "Вася", Roles = new List<Role>() { Role.Enter, Role.ProductManager}},
            //   new ProductManager(){Id = "dfsdfvfdhadfs", Name = "Петр", Roles = new List<Role>() { Role.Enter, Role.ProductManager, Role.Manager}},
            //   new ProductManager(){Id = "dfsdwqedqwefefadfs", Name = "Олег", Roles = new List<Role>() { Role.Enter, Role.ProductManager, Role.Controller}},
            //   new ProductManager(){Id = "df45gfdgsadfs", Name = "Дима", Roles = new List<Role>() { Role.Enter, Role.ProductManager, Role.Operator}},
            //   new ProductManager(){Id = "dfsvdfgdfgdfbadfs", Name = "Alex", Roles = new List<Role>() { Role.Enter, Role.ProductManager}},
            //   new ProductManager(){Id = "khnhbfgbdf", Name = "Stan", Roles = new List<Role>() { Role.Enter, Role.ProductManager}}
            //};
            //man.ForEach((x) => x.ShortName = x.Name);
            //return man;
            using (WindowsImpersonationContextFacade impersonationContext
                = new WindowsImpersonationContextFacade(
                    nc))
            {
                var list = new List<ProductManager>();
                var domain = new PrincipalContext(ContextType.Domain);
                var group = GroupPrincipal.FindByIdentity(domain, IdentityType.Name,
                    _roles.First(x => x.Role == Role.ProductManager).Name);
                if (group != null)
                {
                    var members = group.GetMembers(true);
                    foreach (var principal in members)
                    {
                        var userPrincipal = UserPrincipal.FindByIdentity(domain, principal.Name);
                        if (userPrincipal != null)
                        {
                            var email = userPrincipal.EmailAddress;
                            var name = userPrincipal.DisplayName;
                            var sid = userPrincipal.Sid.Value;
                            var shortName = GetShortName(name);
                            var user = new ProductManager()
                            {
                                Id = sid,
                                Name = name,
                                Email = email,
                                ShortName = shortName,
                                Roles = new List<Role>() {Role.ProductManager}
                            };
                            list.Add(user);
                        }
                    }
                }

                list = list.OrderBy(m => m.ShortName).ToList();
                return list;
            }
        }
        public ActionResult ListOld()
        {
            //получение пользователя и через наличие у него определенных ролей, определяются настройки по
            //функциональности на странице
            var user = GetUser();
            if (user == null || !UserHelper.IsUserAccess(user))
            {
                var dict = new RouteValueDictionary();
                dict.Add("message", "У Вас нет доступа к приложению");
                return RedirectToAction("ErrorPage", "Auth", dict);
            }
            ViewBag.UserName = user.Name;
            var showCalculate = false;
            var showEdit = false;
            var changeTenderStatus = false;
            var filterProduct = string.Empty;
            var filterManager = string.Empty;
            var clickAction = string.Empty;
            var posibleAction = string.Empty;
            var userId = string.Empty;
            var author = string.Empty;
            var reportExcel = false;
            var deleteClaim = "none";
            var newClaim = "true";
            var filterClaimStatus = new List<int>();
            var isController = UserHelper.IsController(user);
            var isTenderStatus = UserHelper.IsTenderStatus(user);
            var isManager = UserHelper.IsManager(user);
            var isProduct = UserHelper.IsProductManager(user);
            var isOperator = UserHelper.IsOperator(user);
            if (isController)
            {
                showCalculate = true;
                showEdit = true;
                changeTenderStatus = true;
                clickAction = "editClaim";
                posibleAction = "all";
                reportExcel = true;
                deleteClaim = "true";
            }
            else
            {
                if (isTenderStatus)
                {
                    changeTenderStatus = true;
                    clickAction = "null";
                    posibleAction = "null";
                    newClaim = "false";
                    if (isOperator || isManager) newClaim = "true";
                }
                if (isManager)
                {
                    showEdit = true;
                    //filterManager = user.Id;
                    clickAction = "editClaim";
                    posibleAction = "editClaim";
                    userId = user.Id;
                    filterClaimStatus.AddRange(new[] { 1, 2, 3, 6, 7 });
                    deleteClaim = "self&manager";
                }
                if (isProduct)
                {
                    showCalculate = true;
                   // filterProduct = user.Id;
                    clickAction = "calculateClaim";
                    posibleAction = (isManager ? "all" : "calculateClaim");
                    userId = user.Id;
                    newClaim = "false";
                    if (isOperator || isManager) newClaim = "true";
                    if (!isManager) filterClaimStatus.AddRange(new[] { 2, 3, 6, 7 });
                }
                if (isOperator)
                {
                    showEdit = true;
                    clickAction = "editClaim";
                    posibleAction = (isProduct ? "all" : "editClaim");
                    author = user.Id;
                    deleteClaim = "self";
                }
            }
            ViewBag.Settings = new
            {
                showCalculate,
                showEdit,
                changeTenderStatus,
                filterProduct,
                filterManager,
                clickAction,
                posibleAction,
                userId,
                filterClaimStatus,
                author,
                reportExcel,
                deleteClaim,
                newClaim
            };
            ViewBag.Error = false.ToString().ToLower();
            ViewBag.ClaimCount = 0;
            try
            {
                //получение инфы по заявкам из БД
                var db = new DbEngine();
                var filter = new FilterTenderClaim()
                {
                    RowCount = 30,
                };
                var subsProduct = new List<KeyValuePair<string, string>>();
                var subsManagers = new List<KeyValuePair<string, string>>();
                if (!string.IsNullOrEmpty(filterManager)) filter.IdManager = filterManager;
                else
                {
                    if (isManager && !isController)
                    {
                        filter.IdManager = user.Id;
                        subsManagers = Employee.GetSubordinates(user.Id).ToList();
                        if (subsManagers.Any())
                        {
                            filter.IdManager = user.Id;// + ","+ String.Join(",", subsManagers);
                            foreach (var sub in subsManagers)
                            {
                                if (sub.Key != null)
                                {
                                    filter.IdManager += "," + sub.Key;
                                }
                            }
                        }
                    }
                }

                if (!string.IsNullOrEmpty(filterProduct)) filter.IdProductManager = filterProduct;
                else
                {

                    if (isProduct && !isController)
                    {
                        filter.IdProductManager = user.Id;
                        subsProduct = Employee.GetSubordinates(user.Id).ToList();
                        if (subsProduct.Any())
                        {
                            filter.IdProductManager = user.Id;// + "," + String.Join(",", subsProduct);
                            foreach (var sub in subsProduct)
                            {
                                if (sub.Key != null)
                                {
                                    filter.IdProductManager += "," + sub.Key;
                                }
                            }
                        }
                    }
                    //filter.IdProductManager = isProduct && !isController
                    //    ? String.Join(",", Employee.GetSubordinates(user.Id))
                    //    : String.Empty;
                }
                if (!string.IsNullOrEmpty(author)) filter.Author = author;
                if (filterClaimStatus.Any()) filter.ClaimStatus = filterClaimStatus;
                var claims = db.FilterTenderClaims(filter);
                //снабженцы и менеджеры из ActiveDirectory
                var prodManSelList = UserHelper.GetProductManagersSelectionList();

                var adProductManagers = new List<ProductManager>();

                adProductManagers = prodManSelList;

                if (!isController && isProduct)
                {
                    var subProds = Employee.GetSubordinateProductManagers(user.Id, subsProduct);
                    if (subProds.Any())
                    {
                        adProductManagers = subProds;
                    }
                    else
                    {
                        var curProd = new ProductManager() {Id = user.Id, ShortName = user.ShortName};
                        adProductManagers = new List<ProductManager>();
                        adProductManagers.Add(curProd);
                    }
                }
                var manSelList = UserHelper.GetManagersSelectionList();

                var managers = new List<Manager>();

                    managers = manSelList;

                if (!isController && isManager)
                {
                    var subMans = Employee.GetSubordinateManagers(user.Id, subsManagers);
                    if (subMans.Any())
                    {
                        managers = subMans;
                    }
                    else
                    {
                        var curMan = new Manager() { Id = user.Id, ShortName = user.ShortName };
                        managers = new List<Manager>();
                        managers.Add(curMan);
                    }
                }

                //var prodManSelList = UserHelper.Get();

                if (claims != null && claims.Any())
                {
                    db.SetProductManagersForClaims(claims);
                    var claimProductManagers = claims.SelectMany(x => x.ProductManagers).ToList();
                    foreach (var claimProductManager in claimProductManagers)
                    {
                        claimProductManager.ShortName = prodManSelList.FirstOrDefault(x=>x.Id== claimProductManager.Id)?.ShortName;
                        //var productUser = UserHelper.GetUserById(claimProductManager.Id);
                        //if (productUser != null)
                        //{
                        //    claimProductManager.Name = productUser.Name;
                        //    claimProductManager.Name = productUser.ShortName;
                        //}
                        //var managerFromAD = adProductManagers.FirstOrDefault(x => x.Id == claimProductManager.Id);
                        //if (managerFromAD != null)
                        //{
                        //    claimProductManager.Name = managerFromAD.Name;
                        //    claimProductManager.ShortName = managerFromAD.ShortName;
                        //}
                    }
                    //var authorsList = UserHelper.GetAuthorsSelectionList();
                    foreach (var claim in claims)
                    {
                        claim.Manager.ShortName = manSelList.FirstOrDefault(x => x.Id == claim.Manager.Id)?.ShortName;
                        //if (manager != null)
                        //{
                        //    claim.Manager.ShortName = manager.ShortName;
                        //}
                        //var auth = authorsList.SingleOrDefault(x => x.Key == claim.Author.Id);
                        claim.Author = UserHelper.GetUserById(claim.Author.Id);//new UserBase() { Id= auth.Key, ShortName = auth.Value};// UserHelper.GetUserById(claim.Author.Id);

                    }
                    db.SetStatisticsForClaims(claims);
                }
                ViewBag.Claims = claims;
                ViewBag.DealTypes = db.LoadDealTypes();
                ViewBag.ClaimStatus = db.LoadClaimStatus();
                ViewBag.ProductManagers = adProductManagers;
                ViewBag.Managers = managers;
                ViewBag.ClaimCount = db.GetCountFilteredTenderClaims(filter);
                ViewBag.TenderStatus = db.LoadTenderStatus();
            }
            catch (Exception ex)
            {
                ViewBag.Error = true.ToString().ToLower();
            }
            return View();
        }
 public void SetProductManagersForClaims(List<TenderClaim> claims)
 {
     using (var conn = new SqlConnection(_connectionString))
     {
         var cmd = conn.CreateCommand();
         cmd.CommandType = CommandType.StoredProcedure;
         cmd.CommandText = "GetProductsForClaims";
         cmd.Parameters.AddWithValue("@ids", string.Join(",", claims.Select(x => x.Id)));
         conn.Open();
         var rd = cmd.ExecuteReader();
         if (rd.HasRows)
         {
             while (rd.Read())
             {
                 var idClaim = rd.GetInt32(0);
                 var model = new ProductManager() {Id = rd.GetString(1)};
                 claims.First(x => x.Id == idClaim).ProductManagers.Add(model);
             }
         }
         rd.Dispose();
     }
 }
 public List<ProductManager> LoadProductManagersForClaim(int claimId, int version, int[] selIds = null, bool? getActualize = null)
 {
     if (version <= 0)version = 1;
     var list = new List<ProductManager>();
     using (var conn = new SqlConnection(_connectionString))
     {
         var cmd = conn.CreateCommand();
         cmd.CommandType = CommandType.StoredProcedure;
         cmd.CommandText = "LoadProductManagersForClaim";
         cmd.Parameters.AddWithValue("@idClaim", claimId);
         cmd.Parameters.AddWithValue("@version", version);
         cmd.Parameters.AddWithValue("@selIds", selIds != null ? String.Join(",",selIds) : null);
         cmd.Parameters.AddWithValue("@getActualize", getActualize);
         conn.Open();
         var rd = cmd.ExecuteReader();
         if (rd.HasRows)
         {
             while (rd.Read())
             {
                 var model = new ProductManager()
                 {
                     Id = rd.GetString(0)
                 };
                 list.Add(model);
             }
         }
         rd.Dispose();
     }
     return list;
 }
        /// <summary>
        /// Возвращает подчиненных владельца id как список продактов
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static List<ProductManager> GetSubordinateProductManagers(string id, List<KeyValuePair<string,string>> list = null)
        {
            var sidList = list ?? GetSubordinates(id);
            var subordinateList = new List<ProductManager>();

            foreach (var item in sidList)
            {
                if (!string.IsNullOrEmpty(item.Key))
                {
                    //var subordinate = UserHelper.GetUserById(sid);
                    var productManagerSubordinate = new ProductManager()
                    {
                        Id = item.Key,
                        //Name = subordinate.Name,
                        ShortName = item.Value,
                        //Roles = new List<Role>() { Role.ProductManager }
                    };
                    subordinateList.Add(productManagerSubordinate);
                }

            }
            subordinateList = subordinateList.OrderBy(m => m.ShortName).ToList();
            return subordinateList;
        }