/// <summary>
        /// Ajoute un DataSetDimension à un DataSet.
        /// </summary>
        /// <param name="dataSetDimension">DataSetDimension</param>
        /// <param name="dataSetId">Id du DataSet cible</param>
        /// <param name="dimensionId">Id de la dimension à associer</param>
        /// <returns>Message de retour</returns>
        public async Task <DataSetDimension> AddDataSetDimension(DataSetDimension dataSetDimension, long dataSetId, long dimensionId)
        {
            if (dataSetDimension == null)
            {
                throw new WrongParameterException($"DataSetDomain.AddDataSetDimension : DataSetDimension is null.");
            }
            DataSet dataSet = await UnitOfWork.DataSetRepository.GetById(dataSetId);

            if (dataSet == null)
            {
                throw new WrongParameterException($"DataSetDomain.AddDataSetDimension : DataSet (id = {dataSetId}) don't exist.");
            }
            Dimension dimension = await UnitOfWork.DimensionRepository.GetById(dimensionId);

            if (dimension == null)
            {
                throw new WrongParameterException($"DataSetDomain.AddDataSetDimension : Dimension (id = {dimensionId}) don't exist.");
            }

            UnitOfWork.DataSetDimensionRepository.PrepareAddForObject(dataSetDimension);
            dataSetDimension.DataSet   = dataSet;
            dataSetDimension.Dimension = dimension;

            int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync();

            if (nbr <= 0)
            {
                throw new DatabaseException("DataSetDomain.AddDataSetDimension : impossible to save DataSetDimension.");
            }

            return(dataSetDimension);
        }
        /// <summary>
        /// Remplie la liste where donnée en paramétre d'expression permettant de filtrer la table ValueObject selon les listes de CriteriaValues.
        /// </summary>
        /// <param name="where">Liste d'expression qui va recevoir les filtres (Sortie)</param>
        /// <param name="lstCriteriaValues">Listes des CriteriaValues utilisées pour les filtres</param>
        /// <param name="idsDimensionDS">Dictionnaire des DimensionDataSet par Id.</param>
        /// <param name="isLargeSearch">Créé une recherche stricte ou large (dans le cas d'arbre notamment)</param>
        /// <returns>Message de retour</returns>
        public HttpResponseMessageResult BuildFilterRequest(List <Expression <Func <ValueObject, bool> > > where, IEnumerable <IEnumerable <CriteriaValues> > lstCriteriaValues, Dictionary <long, DataSetDimension> idsDimensionDS, bool isLargeSearch)
        {
            HttpResponseMessageResult res = new HttpResponseMessageResult()
            {
                IsSuccess = true
            };

            Dictionary <long, IEnumerable <CriteriaValues> > dico = CriteriaValuesDomain.GetCriteriaValuesByDimension(lstCriteriaValues);

            foreach (long dimensionId in dico.Keys)
            {
                DataSetDimension dsd = idsDimensionDS.Where(k => k.Value.Dimension.Id == dimensionId).Select(k => k.Value).FirstOrDefault();
                if (dsd == null)
                {
                    res.Message  += $"ValueObjectDomain:BuildFilterRequest: Error, no Dimension column for this id ({dimensionId})!";
                    res.IsSuccess = false;
                    continue;
                }

                string nomDimension         = idsDimensionDS[dsd.Id].ColumnName;
                IEnumerable <string> values = dico[dimensionId].Select(cv => cv.Value);

                if (isLargeSearch && (idsDimensionDS[dsd.Id].Dimension.TypeDimension == DimensionTypeEnum.Tree))
                {
                    if (values.Count() > 1)
                    {
                        where.Add(HelperGetFilterByTreeDimension(nomDimension, values));
                    }
                    else
                    if (values.Count() == 1)
                    {
                        where.Add(HelperGetFilterByTreeDimension(nomDimension, values.ElementAt(0)));
                    }
                }
                else
                {
                    if (values.Count() > 1)
                    {
                        where.Add(HelperGetFilterByDimension(nomDimension, values));
                    }
                    else
                    if (values.Count() == 1)
                    {
                        where.Add(HelperGetFilterByDimension(nomDimension, values.ElementAt(0)));
                    }
                }
            }

            return(res);
        }
        private async Task <long> GetIdDimensionTree(string nomDimension, string parameterName, WorkflowInstance wfInstance)
        {
            DataSetDimension dsd = await UnitOfWork.GetDbContext().DataSetDimension
                                   .Include(d => d.DataSet)
                                   .Include(d => d.Dimension)
                                   .Where(d => d.DataSet.Id == wfInstance.DataSetId && d.ColumnName == nomDimension && d.Dimension.TypeDimension == DimensionTypeEnum.Tree)
                                   .AsNoTracking()
                                   .FirstOrDefaultAsync();

            if (dsd == null)
            {
                throw new WrongParameterException($"Action.CheckIsDimensionTree : Parameter {parameterName} = [{nomDimension}] doen't exist or isn't a tree dimension!");
            }

            return(dsd.Dimension.Id);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> AddDataSetDimension([FromBody] DataSetDimension dataSetDimension, long dataSetId, long dimensionId)
        {
            try
            {
                HttpResponseMessageResult res = new HttpResponseMessageResult()
                {
                    IsSuccess = true
                };
                dataSetDimension = await Adapter.AddDataSetDimension(dataSetDimension, dataSetId, dimensionId);

                res.GetObjectForJson(dataSetDimension);

                return(Ok(res));
            }
            catch (Exception ex)
            {
                Logger.LogError(LoggingEvents.CRITICAL_ERROR, ex, ex.Message);
                return(StatusCode(500, ex.Message));
            }
        }