예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <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);
                }
            }
        }
예제 #3
0
        /// <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;
            }
        }
예제 #5
0
        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));
            }
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        /// <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);
        }