public List <Package> GetAllowedPackagesForMainTask(MainTask iMainTask) { var result = new List <Package>(); var affectedPackageIsLocked = false; if (iMainTask != null) { //Package déjà affecté à la tâche var originalMainTask = GetMainTaskById(iMainTask.MainTaskId, GranularityEnum.Nude); if (originalMainTask.PackageId != null) { var affectedPackage = GetPackageById((long)originalMainTask.PackageId, GranularityEnum.Full); result.Add(affectedPackage); if (affectedPackage.IsLocked) { affectedPackageIsLocked = true; } } } if (affectedPackageIsLocked) { //Retourne seulement le package affecté locké return(result); } else { //Récupération des packages non ouvert déverrouillé var unopenUnlockPackages = DBReleaseDataService.GetQuery <T_E_Package>(null).Where(x => !x.IsLocked && x.StatusRef == (short)PackageStatusEnum.Waiting).Enum().ToList().Select(x => GetPackageById(x.PackageId, GranularityEnum.Full)).Enum().ToList(); result.AddRange(unopenUnlockPackages.Enum()); } if (iMainTask != null) { //Récupération des packages ouvert déverrouillé var openUnlockPackages = DBReleaseDataService.GetQuery <T_E_Package>(null).Where(x => !x.IsLocked && x.StatusRef == (short)PackageStatusEnum.Developpement).Enum().ToList().Select(x => GetPackageById(x.PackageId, GranularityEnum.Full)).Enum().ToList(); //Garde les packages ouvert dont les projets sont commun var packageWithCommonProject = new List <Package>(); foreach (var item in openUnlockPackages.Enum()) { if (item.SubTasks.Exists(x => iMainTask.SubTasks.Exists(y => y.ProjectGUID == x.ProjectGUID))) { packageWithCommonProject.Add(item); } } //Si un seul projet alors seule solution if (packageWithCommonProject.Count == 1) { result.Add(packageWithCommonProject.Single()); } //Si aucun package de projet en commun alors tous les projets sont possibles else if (packageWithCommonProject.Count == 0) { result.AddRange(openUnlockPackages.Enum()); } } else { var openUnlockPackages = DBReleaseDataService.GetQuery <T_E_Package>(null).Where(x => !x.IsLocked && x.StatusRef == (short)PackageStatusEnum.Developpement).Enum().ToList().Select(x => GetPackageById(x.PackageId, GranularityEnum.Full)).Enum().ToList(); result.AddRange(openUnlockPackages.Enum()); } //Suppression des doublons return(result.Enum().GroupBy(x => x.PackageId).Select(x => x.First()).ToList()); }
public List <Package> GetPackageList(PackageStatusSearchEnum iPackageEnvironmentSearch, PackageOrderByEnum iPackageOrderBy) { var theQuery = DBReleaseDataService.GetQuery <T_E_Package>(null); //Status if (iPackageEnvironmentSearch == PackageStatusSearchEnum.Developpement) { theQuery = theQuery.Where(x => x.StatusRef == (short)PackageStatusEnum.Developpement).AsQueryable(); } else if (iPackageEnvironmentSearch == PackageStatusSearchEnum.Production) { theQuery = theQuery.Where(x => x.StatusRef == (short)PackageStatusEnum.Production).AsQueryable(); } else if (iPackageEnvironmentSearch == PackageStatusSearchEnum.Staging) { theQuery = theQuery.Where(x => x.StatusRef == (short)PackageStatusEnum.Staging).AsQueryable(); } else if (iPackageEnvironmentSearch == PackageStatusSearchEnum.InProgress) { theQuery = theQuery.Where(x => x.StatusRef == (short)PackageStatusEnum.Developpement || x.StatusRef == (short)PackageStatusEnum.Staging).AsQueryable(); } else if (iPackageEnvironmentSearch == PackageStatusSearchEnum.All) { //ne filtre rien } else if (iPackageEnvironmentSearch == PackageStatusSearchEnum.NotCompleted) { theQuery = theQuery.Where(x => x.StatusRef == (short)PackageStatusEnum.Developpement || x.StatusRef == (short)PackageStatusEnum.Staging || x.StatusRef == (short)PackageStatusEnum.Waiting).AsQueryable(); } else { throw new Exception(iPackageEnvironmentSearch.ToStringWithEnumName()); } var packageList = theQuery.Enum().ToList(); var result = new List <Package>(); //OrderBy if (iPackageOrderBy == PackageOrderByEnum.Priority) { packageList = packageList.OrderByDescending(x => x.Priority.HasValue).ThenBy(x => x.Priority).ToList(); } else if (iPackageOrderBy == PackageOrderByEnum.PackageId) { packageList = packageList.OrderBy(x => x.PackageId).ToList(); } else if (iPackageOrderBy == PackageOrderByEnum.DateObjectif) { packageList = packageList.OrderByDescending(x => x.DeployementObjectifDate.HasValue).ThenBy(x => x.DeployementObjectifDate).ToList(); } else { throw new Exception(iPackageOrderBy.ToStringWithEnumName()); } foreach (var item in packageList.Enum()) { result.Add(GetPackageById(item.PackageId, GranularityEnum.Full)); } return(result); }