Exemple #1
0
        /// <summary>
        /// Déclenche le PrevPropagate sur l'ensemble des selectorInstances issus du SelectorConfig original.
        /// </summary>
        /// <param name="selectIns">SelectorInstance</param>
        /// <param name="wfInstance">Workflow instance</param>
        /// <returns>Message</returns>
        public async Task <HttpResponseMessageResult> PrevPropagate(SelectorInstance selectIns, WorkflowInstance wfInstance)
        {
            if ((selectIns == null) || (selectIns.SelectorConfig == null))
            {
                throw new SequenceException("Process.SelectorInstance.PrevPropagate: SelectorInstance or SelectorInstance.SelectorConfig is null.");
            }

            SelectorConfig selectConf = selectIns.SelectorConfig;

            // S'il y a d'autres SelectorConfig en PrevPropagate, on les lance avant
            if (selectConf.PrevPropagateId > 0)
            {
                SelectorConfig prevSelectConf = await UnitOfWork.GetDbContext()
                                                .SelectorConfig
                                                .Include(sc => sc.Criterias)
                                                .ThenInclude(c => c.Dimension)
                                                .Where(sc => sc.Id == selectConf.PrevPropagateId)
                                                .AsNoTracking()
                                                .ToAsyncEnumerable()
                                                .FirstOrDefault();

                if (prevSelectConf == null)
                {
                    throw new SequenceException("Process.SelectorConfig.Init: Bad PrevPropagate Id.");
                }

                HttpResponseMessageResult prevRes = await GenerateSelectorsInstances(prevSelectConf, wfInstance, selectIns);

                return(prevRes);
            }


            return(await NextStep(selectIns, wfInstance));
        }
Exemple #2
0
        /// <summary>
        /// Génére tous les SelectorInstance depuis les criteria donnés.
        /// </summary>
        /// <param name="selectConf">SelectorConfig cible</param>
        /// <param name="wfInstance">WorkflowInstance nouvellement démarré</param>
        /// <param name="parent">Eventuel SelectorInstance pouvant être à l'origine de la création de nouvelles instances</param>
        /// <returns>Message de résultat</returns>
        public async Task <HttpResponseMessageResult> GenerateSelectorsInstances(SelectorConfig selectConf, WorkflowInstance wfInstance, SelectorInstance parent = null)
        {
            if (selectConf == null)
            {
                throw new SequenceException("Process.SelectorConfig.Init: SelectorConfig are null.");
            }

            if (selectConf.Criterias == null)
            {
                throw new DataLoadingException("SelectorConfig : Criterias not loaded!");
            }

            // WOR-174 - Créer en chaine les SelectorInstance selon la liste de Criterias...
            // On passe directement les criteria valorisés dans la requête de sélection...
            IEnumerable <IEnumerable <CriteriaValues> > lstCV = await CriteriaDomain.ExtractAllCriteriaValues(selectConf.Criterias, wfInstance);

            IEnumerable <IEnumerable <CriteriaValues> > lstCrit = await GetValueObjectsFromCriteria(lstCV, wfInstance.DataSetId);

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

            foreach (IEnumerable <CriteriaValues> cvs in lstCrit)
            {
                SelectorInstance si = await SelectorInstanceDomain.Create(selectConf, cvs, parent, wfInstance);

                UnitOfWork.SelectorInstanceRepository.PrepareUpdateForObject(si);
                res.Append(await NextStep(si, wfInstance));
            }

            return(res);
        }
Exemple #3
0
        /// <summary>
        /// This method permits to initialize the modifcation part.
        /// </summary>
        /// <param name="selectorConfig"></param>
        /// <param name="workflowModifyTotal"></param>
        /// <param name="toDoTotal"></param>
        /// <param name="pendingValidationTotal"></param>
        /// <param name="validatedTotal"></param>
        /// <returns></returns>
        private List <DashBoardModificationActivityModel> SetModifications(SelectorConfig selectorConfig,
                                                                           ref long workflowModifyTotal,
                                                                           ref long toDoTotal,
                                                                           ref long pendingValidationTotal,
                                                                           ref long validatedTotal)
        {
            List <DashBoardModificationActivityModel> activities = new List <DashBoardModificationActivityModel>();

            foreach (SelectorInstance instance in selectorConfig.SelectorInstance)
            {
                ModificationStatusEnum activityStatus = ModificationStatusEnum.None;
                bool isRegistred = false;

                if (instance.Status == SelectorStateEnum.Init ||
                    instance.Status == SelectorStateEnum.Create ||
                    instance.Status == SelectorStateEnum.PrevPropagate)
                {
                    toDoTotal      = +1;
                    activityStatus = ModificationStatusEnum.ToDo;
                    isRegistred    = true;
                }

                if (instance.Status == SelectorStateEnum.Modify)
                {
                    workflowModifyTotal++;
                    pendingValidationTotal++;
                    activityStatus = ModificationStatusEnum.PendingValidation;
                    isRegistred    = true;
                }

                if (instance.Status == SelectorStateEnum.Act ||
                    instance.Status == SelectorStateEnum.Constraint)
                {
                    validatedTotal++;
                    activityStatus = ModificationStatusEnum.Validated;
                    isRegistred    = true;
                }

                if (isRegistred != false)
                {
                    activities.Add(new DashBoardModificationActivityModel()
                    {
                        Affected           = instance.ModificatorName,
                        LastAction         = instance.ModifiedDate.TimeAgo(),
                        Node               = instance.DimensionValueImportant,
                        Status             = activityStatus,
                        SelectorInstanceId = instance.Id
                    });
                }
            }

            return(activities);
        }
Exemple #4
0
        /// <summary>
        /// This method permits to initialize the validation part.
        /// </summary>
        /// <param name="selectorConfig"></param>
        /// <param name="workflowValidatedTotal"></param>
        /// <param name="notSubmitedTotal"></param>
        /// <param name="toBeValidated"></param>
        /// <param name="validatedTotal"></param>
        /// <returns></returns>
        private List <DashBoardValidationActivityModel> SetValidations(SelectorConfig selectorConfig,
                                                                       ref long workflowValidatedTotal,
                                                                       ref long notSubmitedTotal,
                                                                       ref long toBeValidated,
                                                                       ref long validatedTotal)
        {
            List <DashBoardValidationActivityModel> activities = new List <DashBoardValidationActivityModel>();

            foreach (SelectorInstance instance in selectorConfig.SelectorInstance)
            {
                ValidationStatusEnum activityStatus = ValidationStatusEnum.None;
                bool isRegistred = false;

                if (instance.Status == SelectorStateEnum.Act ||
                    instance.Status == SelectorStateEnum.Constraint)
                {
                    toBeValidated++;
                    notSubmitedTotal++;
                    activityStatus = ValidationStatusEnum.ToBeValidated;
                    isRegistred    = true;
                }

                if (instance.Status == SelectorStateEnum.Validate)
                {
                    workflowValidatedTotal++;
                    validatedTotal++;
                    notSubmitedTotal++;
                    activityStatus = ValidationStatusEnum.Validated;
                    isRegistred    = true;
                }

                if (isRegistred != false)
                {
                    activities.Add(new DashBoardValidationActivityModel()
                    {
                        Affected           = instance.ValidatorsNames,
                        LastAction         = instance.ModifiedDate.TimeAgo(),
                        Node               = instance.DimensionValueImportant,
                        Status             = activityStatus,
                        SelectorInstanceId = instance.Id
                    });
                }
            }

            return(activities);
        }
        /// <summary>
        /// Ajoute un criteria dans un SelectorConfig.
        /// </summary>
        /// <param name="criteria">Criteria à ajouter</param>
        /// <returns>Objet Criteria ajouter (id à jour).</returns>
        /// <remarks>L'objet Criteria doit contenir l'id du SelectorConfig dans lequel il faut l'ajouter. L'API retourne une erreur
        /// lorsque la dimension ou la valeur du Criteria n'est pas définie.
        /// Les valeurs possibles d'un Criteria sont '*', chaine-de-caractères, '{valeur1, valeur2, ..., valeurn}' </remarks>
        public override async Task <Criteria> Add(Criteria criteria)
        {
            // Vérifications
            if (criteria == null)
            {
                throw new WrongParameterException("SelectorConfig object is null!");
            }
            if (criteria.SelectorConfig == null)
            {
                throw new DataLoadingException("Criteria.SelectorConfig don't load!");
            }
            SelectorConfig selectConf = await SelectorConfigDomain.Get(criteria.SelectorConfig.Id);

            if (selectConf == null)
            {
                throw new WrongParameterException("SelectorConfig id doesn't exist!");
            }

            // Controle des valeurs
            if (!_regexCheckValues.IsMatch(criteria.Value))
            {
                throw new WrongParameterException("SelectorConfig value don't check rules!");
            }

            Criteria addedCriteria = null;

            if (criteria.Id == 0)
            {
                // Ajout
                addedCriteria = await UnitOfWork.CriteriaRepository.Insert(criteria);
            }
            else
            {
                // Mise à jour
                addedCriteria = await UnitOfWork.CriteriaRepository.Update(criteria);
            }

            if (addedCriteria == null)
            {
                throw new ManageDataException($"Criteria for SelectorConfig {criteria.SelectorConfig.Id} can't insert!");
            }

            return(addedCriteria);
        }
Exemple #6
0
        /// <summary>
        /// Permet d'instancier un nouvel SelectorInstance.
        /// </summary>
        /// <param name="selectConf">SelectorConfig à l'origine de l'instance</param>
        /// <param name="lstCriteriaValue">Liste des criteriaValue qui définissent la selection de données</param>
        /// <param name="parent">Eventuel SelectorInstance pouvant être à l'origine de la création</param>
        /// <returns>Instance du nouvel SelectorInstance</returns>
        public async Task <SelectorInstance> Create(SelectorConfig selectConf, IEnumerable <CriteriaValues> lstCriteriaValue, SelectorInstance parent, WorkflowInstance wfInstance)
        {
            if ((selectConf == null) || (wfInstance == null))
            {
                throw new WrongParameterException("Process.SelectorInstance.Create: SelectorConfig or WorkflowInstance is null.");
            }

            SelectorInstance si = new SelectorInstance();

            UnitOfWork.SelectorInstanceRepository.PrepareAddForObject(si);

            // TODO : Completer l'instantation
            si.Status              = SelectorStateEnum.Create;
            si.PreviousStatus      = SelectorStateEnum.Create;
            si.ChainNumberModifyer = -1; // Pas de modificateur sélectionné
            si.SelectorConfig      = selectConf;
            si.WorkflowInstance    = wfInstance;

            si.ParentSelectorInstanceId = 0;
            if (parent != null)
            {
                si.ParentSelectorInstanceId = parent.Id;
            }

            // Enregistrement des CriteriaValues
            si.CriteriaValues = new List <CriteriaValues>();
            foreach (CriteriaValues cv in lstCriteriaValue)
            {
                await UnitOfWork.CriteriaValuesRepository.Insert(cv);

                si.CriteriaValues.Add(cv);
            }


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

            return(si);
        }
        /// <summary>
        /// Duplique un WorkflowConfig, en laissant dans la copie l'id du WorkflowConfig d'origine.
        /// </summary>
        /// <param name="workflowConfig">WorkflowConfig à copier</param>
        /// <returns>WorkflowConfig dupliqué</returns>
        public async Task <WorkflowConfig> CopyForStatic(WorkflowConfig workflowConfig)
        {
            if (workflowConfig == null)
            {
                throw new WrongParameterException("WorkflowConfigDomain.CopyForStatic: WorkflowConfig source is null!");
            }
            if (workflowConfig.IdWorkflowConfigOriginal.HasValue)
            {
                throw new WrongParameterException("WorkflowConfigDomain.CopyForStatic: WorkflowConfig source isn't orignal!");
            }

            List <WorkflowConfig> lstSearch = await UnitOfWork.GetDbContext().WorkflowConfig
                                              .Where(wf => wf.Name.Contains(workflowConfig.Name) && wf.IdWorkflowConfigOriginal.HasValue)
                                              .AsNoTracking()
                                              .ToAsyncEnumerable()
                                              .ToList();

            int        lastNumber = 1;
            List <int> allNumbers = new List <int>();

            foreach (WorkflowConfig wf in lstSearch)
            {
                Match m = _regexSubstringName.Match(wf.Name);
                if (m.Success)
                {
                    string name = m.Groups["name"].Value;
                    if (name == workflowConfig.Name)
                    {
                        if (Int32.TryParse(m.Groups["number"].Value, out int number))
                        {
                            allNumbers.Add(number);
                        }
                    }
                }
            }

            if (allNumbers.Count > 0)
            {
                lastNumber = allNumbers.Max() + 1;
            }

            WorkflowConfig duplicat = new WorkflowConfig();

            UnitOfWork.WorkflowConfigRepository.PrepareAddForObject(duplicat);

            duplicat.Name = string.Format(Constant.POSTFIX_NAME_DUPLICATE_WORKFLOW_CONFIG, workflowConfig.Name, lastNumber);
            duplicat.IdWorkflowConfigOriginal = workflowConfig.Id;
            duplicat.ActionSequenceRef        = workflowConfig.ActionSequenceRef;
            duplicat.ConstraintSequenceRef    = workflowConfig.ConstraintSequenceRef;
            foreach (SelectorConfig sc in workflowConfig.SelectorConfig)
            {
                SelectorConfig scNew = await SelectorConfigDomain.CopyForStatic(sc);

                scNew.WorkflowConfig = duplicat;
                duplicat.SelectorConfig.Add(scNew);
            }
            foreach (WorkflowDimension wd in workflowConfig.WorkflowDimension)
            {
                WorkflowDimension wfNew = await WorkflowDimensionDomain.CopyForStatic(wd);

                wfNew.WorkflowConfig = duplicat;
                duplicat.WorkflowDimension.Add(wfNew);
            }
            List <GridConfig> lstGridConf = await UnitOfWork.GetDbContext().GridConfig
                                            .Where(gc => gc.WorkflowConfig.Id == workflowConfig.Id)
                                            .Include(gc => gc.ColumnDimensions)
                                            .ThenInclude(gd => gd.Values)
                                            .Include(gc => gc.RowDimensions)
                                            .ThenInclude(gd => gd.Values)
                                            .Include(gc => gc.FixedDimensions)
                                            .ThenInclude(gd => gd.Values)
                                            .AsNoTracking()
                                            .ToAsyncEnumerable()
                                            .ToList();

            GridConfig gridConf = lstGridConf.FirstOrDefault();

            if (gridConf != null)
            {
                GridConfig gridConfNew = await GridConfigurationDomain.CopyForStatic(gridConf);

                gridConfNew.WorkflowConfig = duplicat;
            }

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

            return(duplicat);
        }