/// <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> /// 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); }