/// <summary> /// Déclenche le PrevPropagate sur l'ensemble des selectorInstances issus du SelectorConfig original. /// </summary> /// <param name="selectIns">SelectorInstance</param> /// <param name="wfInstance">Workflow instance</param> /// <returns>Message</returns> public async Task <HttpResponseMessageResult> PrevPropagate(SelectorInstance selectIns, WorkflowInstance wfInstance) { if ((selectIns == null) || (selectIns.SelectorConfig == null)) { throw new SequenceException("Process.SelectorInstance.PrevPropagate: SelectorInstance or SelectorInstance.SelectorConfig is null."); } SelectorConfig selectConf = selectIns.SelectorConfig; // S'il y a d'autres SelectorConfig en PrevPropagate, on les lance avant if (selectConf.PrevPropagateId > 0) { SelectorConfig prevSelectConf = await UnitOfWork.GetDbContext() .SelectorConfig .Include(sc => sc.Criterias) .ThenInclude(c => c.Dimension) .Where(sc => sc.Id == selectConf.PrevPropagateId) .AsNoTracking() .ToAsyncEnumerable() .FirstOrDefault(); if (prevSelectConf == null) { throw new SequenceException("Process.SelectorConfig.Init: Bad PrevPropagate Id."); } HttpResponseMessageResult prevRes = await GenerateSelectorsInstances(prevSelectConf, wfInstance, selectIns); return(prevRes); } return(await NextStep(selectIns, wfInstance)); }
/// <summary> /// Génére tous les SelectorInstance depuis les criteria donnés. /// </summary> /// <param name="selectConf">SelectorConfig cible</param> /// <param name="wfInstance">WorkflowInstance nouvellement démarré</param> /// <param name="parent">Eventuel SelectorInstance pouvant être à l'origine de la création de nouvelles instances</param> /// <returns>Message de résultat</returns> public async Task <HttpResponseMessageResult> GenerateSelectorsInstances(SelectorConfig selectConf, WorkflowInstance wfInstance, SelectorInstance parent = null) { if (selectConf == null) { throw new SequenceException("Process.SelectorConfig.Init: SelectorConfig are null."); } if (selectConf.Criterias == null) { throw new DataLoadingException("SelectorConfig : Criterias not loaded!"); } // WOR-174 - Créer en chaine les SelectorInstance selon la liste de Criterias... // On passe directement les criteria valorisés dans la requête de sélection... IEnumerable <IEnumerable <CriteriaValues> > lstCV = await CriteriaDomain.ExtractAllCriteriaValues(selectConf.Criterias, wfInstance); IEnumerable <IEnumerable <CriteriaValues> > lstCrit = await GetValueObjectsFromCriteria(lstCV, wfInstance.DataSetId); HttpResponseMessageResult res = new HttpResponseMessageResult() { IsSuccess = true }; foreach (IEnumerable <CriteriaValues> cvs in lstCrit) { SelectorInstance si = await SelectorInstanceDomain.Create(selectConf, cvs, parent, wfInstance); UnitOfWork.SelectorInstanceRepository.PrepareUpdateForObject(si); res.Append(await NextStep(si, wfInstance)); } return(res); }
/// <summary> /// This method permits to initialize the modifcation part. /// </summary> /// <param name="selectorConfig"></param> /// <param name="workflowModifyTotal"></param> /// <param name="toDoTotal"></param> /// <param name="pendingValidationTotal"></param> /// <param name="validatedTotal"></param> /// <returns></returns> private List <DashBoardModificationActivityModel> SetModifications(SelectorConfig selectorConfig, ref long workflowModifyTotal, ref long toDoTotal, ref long pendingValidationTotal, ref long validatedTotal) { List <DashBoardModificationActivityModel> activities = new List <DashBoardModificationActivityModel>(); foreach (SelectorInstance instance in selectorConfig.SelectorInstance) { ModificationStatusEnum activityStatus = ModificationStatusEnum.None; bool isRegistred = false; if (instance.Status == SelectorStateEnum.Init || instance.Status == SelectorStateEnum.Create || instance.Status == SelectorStateEnum.PrevPropagate) { toDoTotal = +1; activityStatus = ModificationStatusEnum.ToDo; isRegistred = true; } if (instance.Status == SelectorStateEnum.Modify) { workflowModifyTotal++; pendingValidationTotal++; activityStatus = ModificationStatusEnum.PendingValidation; isRegistred = true; } if (instance.Status == SelectorStateEnum.Act || instance.Status == SelectorStateEnum.Constraint) { validatedTotal++; activityStatus = ModificationStatusEnum.Validated; isRegistred = true; } if (isRegistred != false) { activities.Add(new DashBoardModificationActivityModel() { Affected = instance.ModificatorName, LastAction = instance.ModifiedDate.TimeAgo(), Node = instance.DimensionValueImportant, Status = activityStatus, SelectorInstanceId = instance.Id }); } } return(activities); }
/// <summary> /// This method permits to initialize the validation part. /// </summary> /// <param name="selectorConfig"></param> /// <param name="workflowValidatedTotal"></param> /// <param name="notSubmitedTotal"></param> /// <param name="toBeValidated"></param> /// <param name="validatedTotal"></param> /// <returns></returns> private List <DashBoardValidationActivityModel> SetValidations(SelectorConfig selectorConfig, ref long workflowValidatedTotal, ref long notSubmitedTotal, ref long toBeValidated, ref long validatedTotal) { List <DashBoardValidationActivityModel> activities = new List <DashBoardValidationActivityModel>(); foreach (SelectorInstance instance in selectorConfig.SelectorInstance) { ValidationStatusEnum activityStatus = ValidationStatusEnum.None; bool isRegistred = false; if (instance.Status == SelectorStateEnum.Act || instance.Status == SelectorStateEnum.Constraint) { toBeValidated++; notSubmitedTotal++; activityStatus = ValidationStatusEnum.ToBeValidated; isRegistred = true; } if (instance.Status == SelectorStateEnum.Validate) { workflowValidatedTotal++; validatedTotal++; notSubmitedTotal++; activityStatus = ValidationStatusEnum.Validated; isRegistred = true; } if (isRegistred != false) { activities.Add(new DashBoardValidationActivityModel() { Affected = instance.ValidatorsNames, LastAction = instance.ModifiedDate.TimeAgo(), Node = instance.DimensionValueImportant, Status = activityStatus, SelectorInstanceId = instance.Id }); } } return(activities); }
/// <summary> /// Ajoute un criteria dans un SelectorConfig. /// </summary> /// <param name="criteria">Criteria à ajouter</param> /// <returns>Objet Criteria ajouter (id à jour).</returns> /// <remarks>L'objet Criteria doit contenir l'id du SelectorConfig dans lequel il faut l'ajouter. L'API retourne une erreur /// lorsque la dimension ou la valeur du Criteria n'est pas définie. /// Les valeurs possibles d'un Criteria sont '*', chaine-de-caractères, '{valeur1, valeur2, ..., valeurn}' </remarks> public override async Task <Criteria> Add(Criteria criteria) { // Vérifications if (criteria == null) { throw new WrongParameterException("SelectorConfig object is null!"); } if (criteria.SelectorConfig == null) { throw new DataLoadingException("Criteria.SelectorConfig don't load!"); } SelectorConfig selectConf = await SelectorConfigDomain.Get(criteria.SelectorConfig.Id); if (selectConf == null) { throw new WrongParameterException("SelectorConfig id doesn't exist!"); } // Controle des valeurs if (!_regexCheckValues.IsMatch(criteria.Value)) { throw new WrongParameterException("SelectorConfig value don't check rules!"); } Criteria addedCriteria = null; if (criteria.Id == 0) { // Ajout addedCriteria = await UnitOfWork.CriteriaRepository.Insert(criteria); } else { // Mise à jour addedCriteria = await UnitOfWork.CriteriaRepository.Update(criteria); } if (addedCriteria == null) { throw new ManageDataException($"Criteria for SelectorConfig {criteria.SelectorConfig.Id} can't insert!"); } return(addedCriteria); }
/// <summary> /// Permet d'instancier un nouvel SelectorInstance. /// </summary> /// <param name="selectConf">SelectorConfig à l'origine de l'instance</param> /// <param name="lstCriteriaValue">Liste des criteriaValue qui définissent la selection de données</param> /// <param name="parent">Eventuel SelectorInstance pouvant être à l'origine de la création</param> /// <returns>Instance du nouvel SelectorInstance</returns> public async Task <SelectorInstance> Create(SelectorConfig selectConf, IEnumerable <CriteriaValues> lstCriteriaValue, SelectorInstance parent, WorkflowInstance wfInstance) { if ((selectConf == null) || (wfInstance == null)) { throw new WrongParameterException("Process.SelectorInstance.Create: SelectorConfig or WorkflowInstance is null."); } SelectorInstance si = new SelectorInstance(); UnitOfWork.SelectorInstanceRepository.PrepareAddForObject(si); // TODO : Completer l'instantation si.Status = SelectorStateEnum.Create; si.PreviousStatus = SelectorStateEnum.Create; si.ChainNumberModifyer = -1; // Pas de modificateur sélectionné si.SelectorConfig = selectConf; si.WorkflowInstance = wfInstance; si.ParentSelectorInstanceId = 0; if (parent != null) { si.ParentSelectorInstanceId = parent.Id; } // Enregistrement des CriteriaValues si.CriteriaValues = new List <CriteriaValues>(); foreach (CriteriaValues cv in lstCriteriaValue) { await UnitOfWork.CriteriaValuesRepository.Insert(cv); si.CriteriaValues.Add(cv); } int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync(); return(si); }
/// <summary> /// Duplique un WorkflowConfig, en laissant dans la copie l'id du WorkflowConfig d'origine. /// </summary> /// <param name="workflowConfig">WorkflowConfig à copier</param> /// <returns>WorkflowConfig dupliqué</returns> public async Task <WorkflowConfig> CopyForStatic(WorkflowConfig workflowConfig) { if (workflowConfig == null) { throw new WrongParameterException("WorkflowConfigDomain.CopyForStatic: WorkflowConfig source is null!"); } if (workflowConfig.IdWorkflowConfigOriginal.HasValue) { throw new WrongParameterException("WorkflowConfigDomain.CopyForStatic: WorkflowConfig source isn't orignal!"); } List <WorkflowConfig> lstSearch = await UnitOfWork.GetDbContext().WorkflowConfig .Where(wf => wf.Name.Contains(workflowConfig.Name) && wf.IdWorkflowConfigOriginal.HasValue) .AsNoTracking() .ToAsyncEnumerable() .ToList(); int lastNumber = 1; List <int> allNumbers = new List <int>(); foreach (WorkflowConfig wf in lstSearch) { Match m = _regexSubstringName.Match(wf.Name); if (m.Success) { string name = m.Groups["name"].Value; if (name == workflowConfig.Name) { if (Int32.TryParse(m.Groups["number"].Value, out int number)) { allNumbers.Add(number); } } } } if (allNumbers.Count > 0) { lastNumber = allNumbers.Max() + 1; } WorkflowConfig duplicat = new WorkflowConfig(); UnitOfWork.WorkflowConfigRepository.PrepareAddForObject(duplicat); duplicat.Name = string.Format(Constant.POSTFIX_NAME_DUPLICATE_WORKFLOW_CONFIG, workflowConfig.Name, lastNumber); duplicat.IdWorkflowConfigOriginal = workflowConfig.Id; duplicat.ActionSequenceRef = workflowConfig.ActionSequenceRef; duplicat.ConstraintSequenceRef = workflowConfig.ConstraintSequenceRef; foreach (SelectorConfig sc in workflowConfig.SelectorConfig) { SelectorConfig scNew = await SelectorConfigDomain.CopyForStatic(sc); scNew.WorkflowConfig = duplicat; duplicat.SelectorConfig.Add(scNew); } foreach (WorkflowDimension wd in workflowConfig.WorkflowDimension) { WorkflowDimension wfNew = await WorkflowDimensionDomain.CopyForStatic(wd); wfNew.WorkflowConfig = duplicat; duplicat.WorkflowDimension.Add(wfNew); } List <GridConfig> lstGridConf = await UnitOfWork.GetDbContext().GridConfig .Where(gc => gc.WorkflowConfig.Id == workflowConfig.Id) .Include(gc => gc.ColumnDimensions) .ThenInclude(gd => gd.Values) .Include(gc => gc.RowDimensions) .ThenInclude(gd => gd.Values) .Include(gc => gc.FixedDimensions) .ThenInclude(gd => gd.Values) .AsNoTracking() .ToAsyncEnumerable() .ToList(); GridConfig gridConf = lstGridConf.FirstOrDefault(); if (gridConf != null) { GridConfig gridConfNew = await GridConfigurationDomain.CopyForStatic(gridConf); gridConfNew.WorkflowConfig = duplicat; } int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync(); return(duplicat); }