public static List <ConstantState> BuildConstantListFromVersion(this Project iProject, List <ConstantState> iOriginalList, decimal iSpecificationVersion) { if (Math.Truncate(iSpecificationVersion) != Math.Truncate(iProject.GetProjectSettings().ProjectVersion)) { throw new Exception("La version majeure de début et de fin ne peuvent pas être différent"); } var deletedList = iProject.GetDeletedConstantList().Enum().Where(x => x.ProjectVersion <= iProject.GetProjectSettings().ProjectVersion).Enum().ToList().OrderBy(x => x.ProjectVersion).Enum().ToList(); var addedList = iProject.GetAddedConstantList().Enum().Where(x => x.ProjectVersion <= iProject.GetProjectSettings().ProjectVersion).Enum().ToList().OrderBy(x => x.ProjectVersion).Enum().ToList(); var messageList = new List <string>(); var groupAdded = addedList.Enum().Where(x => x.ProjectVersion > iSpecificationVersion && x.ProjectVersion <= iProject.GetProjectSettings().ProjectVersion).Enum().OrderBy(x => x.ProjectVersion).Enum().GroupBy(x => x.ProjectVersion); var groupDeleted = deletedList.Enum().Where(x => x.ProjectVersion > iSpecificationVersion && x.ProjectVersion <= iProject.GetProjectSettings().ProjectVersion).Enum().OrderBy(x => x.ProjectVersion).Enum().GroupBy(x => x.ProjectVersion); List <decimal> versionList = groupAdded.Select(x => x.First().ProjectVersion).ToList(); versionList.AddRange(groupDeleted.Select(x => x.First().ProjectVersion).ToList()); versionList = versionList.GetWithoutDuplicates(x => x).Enum().ToList().OrderBy(x => x).Enum().ToList(); //Bouclage sur toutes les versions possibles entre la version de sauvegarde et celle du config pour rejouer les modifications sans erreur foreach (var versionItem in versionList.Enum()) { //Création des nouveaux constantes d'abord si transfert supprimé vers nouveau var addedConstantList = addedList.Enum().Where(x => x.ProjectVersion == versionItem).Enum().ToList(); foreach (var addedItem in addedConstantList.Enum()) { if (iOriginalList.NotExists2(x => x.Name == addedItem.ConstantName)) { var newControlState = new ConstantState { Name = addedItem.ConstantName }; iOriginalList.Add(newControlState); } else { throw new Exception("La constante existe déjà, données corrompues, Contacter l'administrateur"); } } //Suppression des controles var deletedConstantList = deletedList.Enum().Where(x => x.ProjectVersion == versionItem).Enum().ToList(); foreach (var deletedItem in deletedConstantList.Enum()) { var theControlState = iOriginalList.Single(x => x.Name == deletedItem.ConstantName); if (deletedItem.TransfertConstantName.IsNotNullAndNotEmpty()) { var theTransfertControlState = iOriginalList.Single(x => x.Name == deletedItem.TransfertConstantName); theTransfertControlState.Value = theControlState.Value; } iOriginalList.Remove(theControlState); } } return(iOriginalList); }
/// <summary> /// Récupération des constantes du project en ignorant les paramètres d'entrée (commencant par paramètre, utilisé par le module intégration) /// </summary> /// <returns></returns> public List <ConstantState> GetCurrentConstantList() { var constants = _Project.Constants; var constantsList = new List <ConstantState>(); foreach (var item in constants.GetConstants().Enum()) { if (item.DisplayName.StartsWith("Parameter") == false) { var newConstant = new ConstantState(); newConstant.Name = item.DisplayName; newConstant.Value = item.Value.ToString(); } } return(constantsList); }