/// <summary> /// Ajoute une configuration de valeur à une configuration de dimension existante. /// </summary> /// <param name="gridValueConfig">Nouvelle configuration de valeur</param> /// <param name="gridDimensionConfigId">Id de la configuration de dimension cible.</param> /// <returns>Message de retour</returns> public async Task <GridValueConfig> Add(GridValueConfig gridValueConfig, long gridDimensionConfigId) { if (gridValueConfig == null) { throw new WrongParameterException("GridConfigurationDomain.Add : GridValueConfig is null."); } GridDimensionConfig gridDimensionConfig = await UnitOfWork.GetDbContext().GridDimensionConfig .Where(gdc => gdc.Id == gridDimensionConfigId) .FirstOrDefaultAsync(); if (gridDimensionConfig == null) { throw new WrongParameterException($"GridConfigurationDomain.Add : GridDimensionConfig don't exist with id = {gridDimensionConfigId}."); } UnitOfWork.GridDimensionConfigRepository.PrepareUpdateForObject(gridDimensionConfig); UnitOfWork.GridValueConfigRepository.PrepareAddForObject(gridValueConfig); gridDimensionConfig.Values.Add(gridValueConfig); gridValueConfig.GridDimensionConfig = gridDimensionConfig; int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync(); if (nbr <= 0) { throw new DatabaseException("GridConfigurationDomain.Add : impossible to save GridValueConfig."); } return(gridValueConfig); }
/// <summary> /// Méthode récursive pour la distribution des dimensions/valeurs /// </summary> /// <param name="outList">Liste de sortie</param> /// <param name="dimensions">Liste des dimensions ordonnée à distribuer</param> /// <param name="indexDim">Indexe courant dans la liste des dimensions</param> /// <param name="current">Noeud courant temporaire</param> private void RecursiveDistribution(List <DistributionDimensionGrid> outList, IEnumerable <GridDimensionConfig> dimensions, int indexDim, DistributionDimensionGrid current) { if ((indexDim < 0) || (indexDim > dimensions.Count() - 1)) { return; } GridDimensionConfig dim = dimensions.ElementAt(indexDim); foreach (GridValueConfig val in dim.Values.OrderBy(v => v.Order)) { DistributionDimensionGrid ddg = new DistributionDimensionGrid(); if (current != null) { ddg.CopyInSelection(current.Selection); } if (ddg.Selection.ContainsKey(dim.InternalName)) { continue; } ddg.Selection.Add(dim.InternalName, val.Value); if (indexDim == (dimensions.Count() - 1)) { outList.Add(ddg); } else { RecursiveDistribution(outList, dimensions, indexDim + 1, ddg); } } }
/// <summary> /// Duplique un GridDimensionConfig pour l'instance d'un WorkflowConfig. /// </summary> /// <param name="gridDimensionConfig">GridDimensionConfig original</param> /// <returns>Duplicat du GridDimensionConfig original</returns> public async Task <GridDimensionConfig> CopyForStatic(GridDimensionConfig gridDimensionConfig) { if (gridDimensionConfig == null) { throw new WrongParameterException("GridConfigurationDomain.CopyForStatic: GridDimensionConfig source is null!"); } GridDimensionConfig duplicat = new GridDimensionConfig(); UnitOfWork.GridDimensionConfigRepository.PrepareAddForObject(duplicat); duplicat.DisplayName = gridDimensionConfig.DisplayName; duplicat.InternalName = gridDimensionConfig.InternalName; duplicat.Order = gridDimensionConfig.Order; foreach (GridValueConfig gvc in gridDimensionConfig.Values) { GridValueConfig gvcNew = await CopyForStatic(gvc); gvcNew.GridDimensionConfig = duplicat; duplicat.Values.Add(gvcNew); } int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync(); return(duplicat); }
/// <summary> /// /// </summary> /// <param name="columns"></param> /// <param name="currentIndex"></param> /// <param name="parent"></param> private void recursiveBuildTree(IEnumerable <GridDimensionConfig> columns, int currentIndex, NodeDimensionValue parent) { GridDimensionConfig col = columns.ElementAt(currentIndex); foreach (string value in col.Values.OrderBy(o => o.Order).Select(s => s.Value).ToList()) { NodeDimensionValue child = new NodeDimensionValue(); child.NamedValue = new AtomicValue(col.InternalName, col.DisplayName, value); if (currentIndex < columns.Count() - 1) { recursiveBuildTree(columns, (currentIndex + 1), child); } parent.Childs.Add(child); child.Parent = parent; } }
public async Task <IActionResult> AddGridDimensionConfig([FromBody] GridDimensionConfig gridDimensionConfig, long?gcColumnId = null, long?gcRowId = null, long?gcFixedId = null) { try { HttpResponseMessageResult res = new HttpResponseMessageResult() { IsSuccess = true }; gridDimensionConfig = await Adapter.Add(gridDimensionConfig, gcColumnId, gcRowId, gcFixedId); res.GetObjectForJson(gridDimensionConfig); return(Ok(res)); } catch (Exception ex) { Logger.LogError(LoggingEvents.PROCESS_ERROR, ex, ex.Message); return(StatusCode(500, ex.Message)); } }
/// <summary> /// Duplique un GridConfig pour l'instance d'un WorkflowConfig. /// </summary> /// <param name="gridConfig">GridConfig original</param> /// <returns>Duplicat du GridConfig original</returns> public async Task <GridConfig> CopyForStatic(GridConfig gridConfig) { if (gridConfig == null) { throw new WrongParameterException("GridConfigurationDomain.CopyForStatic: GridConfig source is null!"); } GridConfig duplicat = new GridConfig(); UnitOfWork.GridConfigRepository.PrepareAddForObject(duplicat); duplicat.Name = string.Format(Constant.POSTFIX_NAME_DUPLICATE_WORKFLOW_CONFIG, gridConfig.Name, 1); foreach (GridDimensionConfig gdc in gridConfig.ColumnDimensions) { GridDimensionConfig gdcNew = await CopyForStatic(gdc); gdcNew.GridColumn = duplicat; duplicat.ColumnDimensions.Add(gdcNew); } foreach (GridDimensionConfig gdc in gridConfig.RowDimensions) { GridDimensionConfig gdcNew = await CopyForStatic(gdc); gdcNew.GridRow = duplicat; duplicat.RowDimensions.Add(gdcNew); } foreach (GridDimensionConfig gdc in gridConfig.FixedDimensions) { GridDimensionConfig gdcNew = await CopyForStatic(gdc); gdcNew.GridFixed = duplicat; duplicat.FixedDimensions.Add(gdcNew); } int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync(); return(duplicat); }
/// <summary> /// Ajoute une configuration de dimension à une configuration de grid existante. /// </summary> /// <param name="gridDimensionConfig">Nouvelle configuration de dimension</param> /// <param name="gcColumnId">Facultatif : id de la config grid lorsque la config dimension est en colonne</param> /// <param name="gcRowId">Facultatif : id de la config grid lorsque la config dimension est en ligne</param> /// <param name="gcFixedId">Facultatif : id de la config grid lorsque la config dimension est fixée en dehors de la grid</param> /// <returns>Message de retour</returns> /// <remarks>On ne peut pas avoir les 3 id de GridConfig réglés en même temps.</remarks> public async Task <GridDimensionConfig> Add(GridDimensionConfig gridDimensionConfig, long?gcColumnId = null, long?gcRowId = null, long?gcFixedId = null) { if (gridDimensionConfig == null) { throw new WrongParameterException("GridConfigurationDomain.Add : GridDimensionConfig is null."); } int nbrId = gcColumnId.HasValue ? 1 : 0; nbrId += gcRowId.HasValue ? 1 : 0; nbrId += gcFixedId.HasValue ? 1 : 0; if (nbrId == 0) { throw new WrongParameterException("GridConfigurationDomain.Add : No GridConfig id."); } if (nbrId > 1) { throw new WrongParameterException("GridConfigurationDomain.Add : Too many much GridConfig id."); } long idGridConf = gcColumnId ?? gcRowId ?? gcFixedId ?? -1; if (idGridConf < 0) // Normalement impossible, mais on ne sait jamais { throw new WrongParameterException("GridConfigurationDomain.Add : No GridConfig id."); } GridConfig gridConfig = await UnitOfWork.GetDbContext().GridConfig .Where(gc => gc.Id == idGridConf) .FirstOrDefaultAsync(); if (gridConfig == null) { throw new WrongParameterException($"GridConfigurationDomain.Add : GridConfig don't exist for id ({idGridConf})."); } UnitOfWork.GridConfigRepository.PrepareUpdateForObject(gridConfig); UnitOfWork.GridDimensionConfigRepository.PrepareAddForObject(gridDimensionConfig); if (gcColumnId.HasValue) { gridConfig.ColumnDimensions.Add(gridDimensionConfig); gridDimensionConfig.GridColumn = gridConfig; } if (gcRowId.HasValue) { gridConfig.RowDimensions.Add(gridDimensionConfig); gridDimensionConfig.GridRow = gridConfig; } if (gcFixedId.HasValue) { gridConfig.FixedDimensions.Add(gridDimensionConfig); gridDimensionConfig.GridFixed = gridConfig; } int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync(); if (nbr <= 0) { throw new DatabaseException("GridConfigurationDomain.Add : impossible to save GridDimensionConfig."); } return(gridDimensionConfig); }