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