Пример #1
0
        /// <summary>
        /// This function permits to do a MODIFY action.
        /// </summary>
        /// <param name="selectorInstance">SelectorInstance</param>
        /// <param name="wfInstance">Workflow instance</param>
        /// <param name="values">Valeurs à modifier</param>
        /// <returns>Message</returns>
        public async Task <HttpResponseMessageResult> Modify(SelectorInstance selectorInstance, WorkflowInstance wfInstance, IEnumerable <KeyValuePair <long, double> > values)
        {
            // Mise à jour de la table ValueObject
            IEnumerable <long> idsUpdated = values.Select(v => v.Key);
            List <ValueObject> lstVO      = await UnitOfWork.GetDbContext().ValueObject
                                            .Where(vo => idsUpdated.Contains(vo.Id))
                                            .ToAsyncEnumerable()
                                            .ToList();

            Dictionary <long, double> dicVO = values.ToDictionary(k => k.Key, v => v.Value);

            foreach (ValueObject vo in lstVO)
            {
                if (!dicVO.ContainsKey(vo.Id))
                {
                    continue;
                }
                UnitOfWork.ValueObjectRepository.PrepareUpdateForObject(vo);
                vo.FutureValue = dicVO[vo.Id];
            }
            int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync();

            // Mise à jour de la table temporaire
            HttpResponseMessageResult res = await GridConfigurationDomain.SaveDataInTemporyTable(selectorInstance, selectorInstance.WorkflowInstance, values);

            return(res);
        }
Пример #2
0
        /// <summary>
        /// Récupére l'entité désignée par l'id en paramétre.
        /// </summary>
        /// <param name="id">Id de l'entité</param>
        /// <returns>Message de retour avec l'entité</returns>
        public async Task <DTO.GridConfig> GetById(long id)
        {
            ENT.GridConfig gridConfig = await GridConfigurationDomain.Get(id);

            DTO.GridConfig dtoGridConfig = null;
            if (gridConfig != null)
            {
                dtoGridConfig = Mapper.Map <ENT.GridConfig, DTO.GridConfig>(gridConfig);
            }

            return(dtoGridConfig);
        }
Пример #3
0
        /// <summary>
        /// Récupére toutes les entités DTO existantes.
        /// </summary>
        /// <returns>Message de retour avec la liste en json</returns>
        public async Task <IEnumerable <DTO.GridConfig> > GetAll()
        {
            IEnumerable <ENT.GridConfig> gridConfigs = await GridConfigurationDomain.Get();

            IEnumerable <DTO.GridConfig> dtoGridConfigs = null;

            if (gridConfigs != null)
            {
                dtoGridConfigs = Mapper.Map <IEnumerable <ENT.GridConfig>, IEnumerable <DTO.GridConfig> >(gridConfigs);
            }
            else
            {
                dtoGridConfigs = new List <DTO.GridConfig>();
            }

            return(dtoGridConfigs);
        }
Пример #4
0
        /// <summary>
        /// Récupére la configuration d'une grid selon un SelectorInstance
        /// </summary>
        /// <param name="selectorInstanceId">Id du SelectorInstance</param>
        /// <returns>Configuration de la grid</returns>
        public async Task <DTO.GridConfig> GetBySelectorInstanceId(long selectorInstanceId)
        {
            ENT.GridConfig gridEntity = await GridConfigurationDomain.GetBySelectorInstanceId(selectorInstanceId);

            return(Mapper.Map <ENT.GridConfig, DTO.GridConfig>(gridEntity));
        }
Пример #5
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 <DTO.GridValueConfig> Add(DTO.GridValueConfig gridValueConfig, long gridDimensionConfigId)
        {
            ENT.GridValueConfig entGridValueConfig = Mapper.Map <DTO.GridValueConfig, ENT.GridValueConfig>(gridValueConfig);

            return(Mapper.Map <ENT.GridValueConfig, DTO.GridValueConfig>(await GridConfigurationDomain.Add(entGridValueConfig, gridDimensionConfigId)));
        }
Пример #6
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 <DTO.GridDimensionConfig> Add(DTO.GridDimensionConfig gridDimensionConfig, long?gcColumnId = null, long?gcRowId = null, long?gcFixedId = null)
        {
            ENT.GridDimensionConfig entGridDimensionConfig = Mapper.Map <DTO.GridDimensionConfig, ENT.GridDimensionConfig>(gridDimensionConfig);

            return(Mapper.Map <ENT.GridDimensionConfig, DTO.GridDimensionConfig>(await GridConfigurationDomain.Add(entGridDimensionConfig, gcColumnId, gcRowId, gcFixedId)));
        }
Пример #7
0
        /// <summary>
        /// Ajoute un configuration de grid.
        /// </summary>
        /// <param name="gridConfig">Nouvelle configuration de grid</param>
        /// <param name="workflowConfigId">Id du workflowConfig auquel lier la nouvelle configuration de grid</param>
        /// <returns>Message de retour</returns>
        public async Task <DTO.GridConfig> Add(long workflowConfigId, DTO.GridConfig gridConfig)
        {
            ENT.GridConfig entGridConfig = Mapper.Map <DTO.GridConfig, ENT.GridConfig>(gridConfig);

            return(Mapper.Map <ENT.GridConfig, DTO.GridConfig>(await GridConfigurationDomain.Add(workflowConfigId, entGridConfig)));
        }
Пример #8
0
        /// <summary>
        /// This function permits to do a INIT action.
        /// </summary>
        /// <param name="selectorInstance">SelectorInstance</param>
        /// <param name="wfInstance">Workflow instance</param>
        /// <returns>Message</returns>
        public async Task <HttpResponseMessageResult> Init(SelectorInstance selectorInstance, WorkflowInstance wfInstance)
        {
            if ((selectorInstance == null) || (wfInstance == null))
            {
                throw new WrongParameterException("Process.SelectorInstance.Init: SelectorInstance or WorkflowInstance are null!");
            }

            HttpResponseMessageResult res = new HttpResponseMessageResult()
            {
                IsSuccess = true
            };

            // Sélection des données et enregistrement des liaisons (subset)
            ICollection <CriteriaValues>        lstCv  = selectorInstance.CriteriaValues;
            Dictionary <long, DataSetDimension> dimIds = await DataSetDimensionDomain.GetDimensionColumns(wfInstance.DataSetId);

            List <Expression <Func <ValueObject, bool> > > where = new List <Expression <Func <ValueObject, bool> > >();

            res.Append(ValueObjectDomain.BuildFilterRequest(where, new List <IEnumerable <CriteriaValues> >()
            {
                lstCv
            }, dimIds, true));

            IQueryable <ValueObject> dbQuery = UnitOfWork.GetDbContext().Set <ValueObject>();
            // Vérification que le SelectorInstance n'utilise pas les données d'un autre SelectorInstance.
            int nbrLinkVoSi = await where
                              .Aggregate(dbQuery, (current, predicate) => current.Where(predicate))
                              .Include(vo => vo.SelectorInstanceValueObject)
                              .Where(vo => vo.SelectorInstanceValueObject.Count > 0)
                              .AsNoTracking()
                              .CountAsync();

            if (nbrLinkVoSi > 0)
            {
                throw new SequenceException($"SelecotrEngine.Init: Can't allocate data for SelectorInstance (from {selectorInstance?.SelectorConfig?.Name}) because there are already SelectorInstance for data.");
            }

            IEnumerable <ValueObject> lstValueObject = await where
                                                       .Aggregate(dbQuery, (current, predicate) => current.Where(predicate))
                                                       .Include(vo => vo.DataSet)
                                                       .Where(vo => vo.DataSet.Id == wfInstance.DataSetId)
                                                       //.AsNoTracking()
                                                       .ToAsyncEnumerable()
                                                       .ToList();

            selectorInstance.SelectorInstanceValueObject = new List <SelectorInstanceValueObject>();
            foreach (ValueObject vo in lstValueObject)
            {
                vo.FutureValue = null;
                SelectorInstanceValueObject sivo = new SelectorInstanceValueObject()
                {
                    SelectorInstance = selectorInstance,
                    ValueObject      = vo
                };
                sivo.InitDatesAndUser("");

                selectorInstance.SelectorInstanceValueObject.Add(sivo);
                vo.SelectorInstanceValueObject.Add(sivo);
                vo.Status = ValueObjectStatusEnum.Modify;
            }
            int nbr = await UnitOfWork.GetDbContext().SaveChangesAsync();

            // Création de la table temporaire de données...
            res.Append(await GridConfigurationDomain.CreateDataTableDB(selectorInstance, wfInstance));

            // Recherche des modificateurs
            res.Append(await SelectorInstanceDomain.FindModificator(selectorInstance, wfInstance));

            // Recherche des validateurs
            res.Append(await SelectorInstanceDomain.FindValidators(selectorInstance, wfInstance));

            // On régle les données modifiables
            res.Append(await SelectorInstanceDomain.SetModifyData(selectorInstance, wfInstance, dimIds));

            return(res);
        }