Exemple #1
0
        /// <summary>
        /// protocol cat = faccicle cat || protocol cat contine fasscicle cat
        /// </summary>
        /// <param name="objectToValidate"></param>
        protected override void ValidateObject(FascicleDocumentUnitValidator objectToValidate)
        {
            if (objectToValidate.ReferenceType != ReferenceType.Fascicle)
            {
                return;
            }

            bool result = false;

            FascicleFolder fascicleFolder = objectToValidate.FascicleFolder == null ? null : CurrentUnitOfWork.Repository <FascicleFolder>().GetByFolderId(objectToValidate.FascicleFolder.UniqueId);
            DocumentUnit   documentUnit   = objectToValidate.DocumentUnit == null ? null : CurrentUnitOfWork.Repository <DocumentUnit>().GetById(objectToValidate.DocumentUnit.UniqueId).FirstOrDefault();
            Fascicle       fascicle       = objectToValidate.Fascicle == null ? null : CurrentUnitOfWork.Repository <Fascicle>().GetByUniqueId(objectToValidate.Fascicle.UniqueId);
            ICollection <CategoryFascicleTableValuedModel> categoryFascicles = CurrentUnitOfWork.Repository <CategoryFascicle>().GetCategorySubFascicles(fascicle.Category.EntityShortId);

            if (documentUnit != null && documentUnit.Category != null && fascicle != null && fascicle.Category != null &&
                (documentUnit.Category.UniqueId == fascicle.Category.UniqueId || (categoryFascicles.Any() && categoryFascicles.Any(c => c.IdCategory == documentUnit.Category.EntityShortId))))
            {
                result = true;
            }

            if (!result)
            {
                GenerateInvalidateResult();
            }
        }
        protected override void ValidateObject(DossierFolderValidator objectToValidate)
        {
            Fascicle temp = objectToValidate.Fascicle == null ? null : CurrentUnitOfWork.Repository <Fascicle>().GetByUniqueId(objectToValidate.Fascicle.UniqueId);

            if (temp != null && temp.Category != null && objectToValidate.Category != null && objectToValidate.Category.UniqueId != temp.Category.UniqueId)
            {
                GenerateInvalidateResult();
            }
        }
        protected override void ValidateObject(FascicleDocumentUnitValidator objectToValidate)
        {
            Fascicle     localFascicle = objectToValidate.Fascicle == null ? null : CurrentUnitOfWork.Repository <Fascicle>().GetByUniqueId(objectToValidate.Fascicle.UniqueId);
            DocumentUnit documentUnit  = objectToValidate.DocumentUnit == null ? null : CurrentUnitOfWork.Repository <DocumentUnit>().GetById(objectToValidate.DocumentUnit.UniqueId).SingleOrDefault();

            if (documentUnit != null && localFascicle != null && !((documentUnit.Environment).Equals(localFascicle.DSWEnvironment)) && objectToValidate.ReferenceType == ReferenceType.Fascicle && localFascicle.FascicleType == FascicleType.Period)
            {
                GenerateInvalidateResult();
            }
        }
Exemple #4
0
        public async Task ExecuteAsync(ICommandUpdateFascicleData command)
        {
            _logger.WriteInfo(new LogMessage($"{command.CommandName} is arrived"), LogCategories);

            FascicleBuildModel fascicleBuildModel = command.ContentType.ContentTypeValue;
            FascicleModel      fascicleModel      = fascicleBuildModel.Fascicle;

            try
            {
                if (RetryPolicyEvaluation != null && !string.IsNullOrEmpty(RetryPolicyEvaluation.ReferenceModel))
                {
                    _logger.WriteDebug(new LogMessage("Load reference model from RetryPolicyEvaluation"), LogCategories);
                    fascicleModel = JsonConvert.DeserializeObject <FascicleModel>(RetryPolicyEvaluation.ReferenceModel, _serializerSettings);
                }
                else
                {
                    _logger.WriteDebug(new LogMessage("Generate new RetryPolicyEvaluation model"), LogCategories);
                    RetryPolicyEvaluation = new EvaluationModel();
                }
                _logger.WriteInfo(new LogMessage($"Cancel requested for fascicle {fascicleModel.Title}/{fascicleModel.UniqueId}-{fascicleModel.FascicleObject}"), LogCategories);
                _logger.WriteDebug(new LogMessage($"Cancel requested from WorkflowName {fascicleBuildModel.WorkflowName} and IdWorkflowActivity {fascicleBuildModel.IdWorkflowActivity}"), LogCategories);

                if (!RetryPolicyEvaluation.Steps.Any(f => f.Name == "ENTITY_UPDATED"))
                {
                    Fascicle updatedFascicle = await UpdateData(fascicleBuildModel, fascicleModel);

                    _logger.WriteInfo(new LogMessage($"Fascicle {updatedFascicle.GetTitle()} has been updated"), LogCategories);
                    RetryPolicyEvaluation.Steps.Add(new StepModel()
                    {
                        Name           = "ENTITY_UPDATED",
                        LocalReference = JsonConvert.SerializeObject(fascicleModel, _serializerSettings)
                    });
                    _logger.WriteDebug(new LogMessage("Set ENTITY_UPDATED RetryPolicyEvaluation"), LogCategories);
                }
                else
                {
                    StepModel fascicleStatus = RetryPolicyEvaluation.Steps.First(f => f.Name == "ENTITY_UPDATED");
                    fascicleModel = JsonConvert.DeserializeObject <FascicleModel>(fascicleStatus.LocalReference);
                    _logger.WriteDebug(new LogMessage("Load fascicle entity from RetryPolicyEvaluation ENTITY_UPDATED"), LogCategories);
                }
            }
            catch (Exception ex)
            {
                RetryPolicyEvaluation.ReferenceModel = JsonConvert.SerializeObject(fascicleModel, _serializerSettings);
                _logger.WriteError(ex, LogCategories);
                throw new ServiceBusEvaluationException(RetryPolicyEvaluation);
            }
        }
 private void GenerateFascicleReference(Fascicle fascicle, Guid uniqueIdProtocol)
 {
     if (fascicle != null && this.CurrentTenantConfiguration.Dao.FindProtocolInFascicle(uniqueIdProtocol, fascicle.UniqueId) == null)
     {
         FascicleProtocol fascicleProtocol = new FascicleProtocol()
         {
             DocumentUnit = new Entity.Protocols.Protocol()
             {
                 UniqueId = uniqueIdProtocol
             },
             Fascicle      = fascicle,
             ReferenceType = ReferenceType.Reference
         };
         Save(fascicleProtocol);
     }
 }
        protected override void ValidateObject(FascicleDocumentUnitValidator objectToValidate)
        {
            if (objectToValidate.ReferenceType == ReferenceType.Reference)
            {
                return;
            }

            int      count         = 0;
            Fascicle localFascicle = objectToValidate.Fascicle == null || objectToValidate.DocumentUnit == null ? null : CurrentUnitOfWork.Repository <Fascicle>().GetByUniqueId(objectToValidate.Fascicle.UniqueId);

            count = localFascicle == null || localFascicle.Category == null ? 0 :
                    CurrentUnitOfWork.Repository <CategoryFascicle>().CountByEnvironment(localFascicle.Category.EntityShortId, objectToValidate.DocumentUnit.Environment);

            if (count == 0)
            {
                GenerateInvalidateResult();
            }
        }
        protected override Process BeforeUpdate(Process entity, Process entityTransformed)
        {
            entityTransformed.ProcessType = ProcessType.Defined;
            if (entity.Category != null)
            {
                entityTransformed.Category = _unitOfWork.Repository <Category>().Find(entity.Category.EntityShortId);
            }

            if (entity.Roles != null)
            {
                foreach (Role item in entityTransformed.Roles.Where(f => !entity.Roles.Any(c => c.EntityShortId == f.EntityShortId)).ToList())
                {
                    foreach (DossierFolder df in entityTransformed.Dossier.DossierFolders)
                    {
                        if (df.DossierFolderRoles.Count() != 0)
                        {
                            DossierFolderRole role = df.DossierFolderRoles.FirstOrDefault(x => x.Role.EntityShortId == item.EntityShortId);
                            if (role != null)
                            {
                                _unitOfWork.Repository <DossierFolderRole>().Delete(role);
                                _unitOfWork.Repository <TableLog>().Insert(TableLogService.CreateLog(entityTransformed.UniqueId, null, TableLogEvent.DELETE, string.Concat("Rimosso il settore '", item.Name, "' da volumi '", df.Name, "'"), typeof(TenantConfiguration).Name, CurrentDomainUser.Account));
                            }
                        }

                        if (df.FascicleTemplates.Count() != 0)
                        {
                            foreach (ProcessFascicleTemplate pft in df.FascicleTemplates)
                            {
                                if (pft.JsonModel != null && !String.IsNullOrEmpty(pft.JsonModel))
                                {
                                    Fascicle     fascicle = JsonConvert.DeserializeObject <Fascicle>(pft.JsonModel);
                                    FascicleRole role     = fascicle.FascicleRoles.FirstOrDefault(x => x.Role.EntityShortId == item.EntityShortId);
                                    if (role != null && role.IsMaster)
                                    {
                                        fascicle.FascicleRoles.Remove(role);
                                        pft.JsonModel = JsonConvert.SerializeObject(fascicle);
                                        _unitOfWork.Repository <ProcessFascicleTemplate>().Update(pft);
                                        _unitOfWork.Repository <TableLog>().Insert(TableLogService.CreateLog(entityTransformed.UniqueId, null, TableLogEvent.DELETE, string.Concat("Rimosso il settore '", item.Name, "' da modello di fascicolo '", pft.Name, "'"), typeof(TenantConfiguration).Name, CurrentDomainUser.Account));
                                    }
                                }
                            }
                        }
                    }

                    entityTransformed.Roles.Remove(item);
                    _unitOfWork.Repository <TableLog>().Insert(TableLogService.CreateLog(entityTransformed.UniqueId, null, TableLogEvent.DELETE, string.Concat("Rimosso il settore '", item.Name, "'"), typeof(TenantConfiguration).Name, CurrentDomainUser.Account));
                }
                foreach (Role item in entity.Roles.Where(f => !entityTransformed.Roles.Any(c => c.EntityShortId == f.EntityShortId)))
                {
                    foreach (DossierFolder df in entityTransformed.Dossier.DossierFolders)
                    {
                        DossierFolderRole role = new DossierFolderRole
                        {
                            Role = _unitOfWork.Repository <Role>().Find(item.EntityShortId),
                            AuthorizationRoleType = AuthorizationRoleType.Accounted,
                            IsMaster      = true,
                            DossierFolder = _unitOfWork.Repository <DossierFolder>().Find(df.UniqueId),
                            Status        = DossierRoleStatus.Active
                        };

                        if (!df.DossierFolderRoles.Any(x => x.Role.EntityId == item.EntityShortId))
                        {
                            _unitOfWork.Repository <DossierFolderRole>().Insert(role);
                            _unitOfWork.Repository <TableLog>().Insert(TableLogService.CreateLog(entityTransformed.UniqueId, null, TableLogEvent.INSERT, string.Concat("Aggiunto il settore '", item.Name, "' da volumi '", df.Name, "'"), typeof(TenantConfiguration).Name, CurrentDomainUser.Account));
                        }
                    }
                    entityTransformed.Roles.Add(_unitOfWork.Repository <Role>().Find(item.EntityShortId));
                    _unitOfWork.Repository <TableLog>().Insert(TableLogService.CreateLog(entityTransformed.UniqueId, null, TableLogEvent.INSERT, string.Concat("Aggiunto il settore '", item.Name, "'"), typeof(TenantConfiguration).Name, CurrentDomainUser.Account));
                }
            }

            _unitOfWork.Repository <TableLog>().Insert(TableLogService.CreateLog(entityTransformed.UniqueId, null, TableLogEvent.UPDATE, $"Modificata raccolta dei procedimenti {entity.Name} con ID {entity.UniqueId}", typeof(Process).Name, CurrentDomainUser.Account));

            return(base.BeforeUpdate(entity, entityTransformed));
        }
        public static IQueryable <FascicleLink> GetByFascicleLink(this IRepository <FascicleLink> repository, Fascicle fascicle, Fascicle fascicleLinked)
        {
            IQueryable <FascicleLink> temp = repository.Query(x => x.Fascicle.UniqueId == fascicle.UniqueId && x.FascicleLinked.UniqueId == fascicleLinked.UniqueId)
                                             .Include(i => i.Fascicle)
                                             .Include(i => i.FascicleLinked)
                                             .SelectAsQueryable();

            return(temp);
        }
 public static ICollection <ContactTableValuedModel> GetContacts(this IRepository <Fascicle> repository, Fascicle fascicle)
 {
     return(repository.ExecuteModelFunction <ContactTableValuedModel>(CommonDefinition.SQL_FX_Fascicle_GetFascicleContactModels,
                                                                      new QueryParameter(CommonDefinition.SQL_Param_Fascicle_IdFascicle, fascicle.UniqueId)));
 }
Exemple #10
0
        public static ICollection <DocumentUnitTableValuedModel> GetFascicleDocumentUnitsPrivate(this IRepository <DocumentUnit> repository, Fascicle fascicle, Guid?idFascicleFolder, Guid?idTenantAOO)
        {
            QueryParameter fascicleFolderParameter = new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_IdFascicleFolder, DBNull.Value);
            QueryParameter idTenantAooParameter    = new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_IdTenantAOO, DBNull.Value);

            if (idFascicleFolder.HasValue)
            {
                fascicleFolderParameter = new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_IdFascicleFolder, idFascicleFolder.Value);
            }
            if (idTenantAOO.HasValue)
            {
                idTenantAooParameter = new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_IdTenantAOO, idTenantAOO.Value);
            }

            return(repository.ExecuteModelFunction <DocumentUnitTableValuedModel>(CommonDefinition.SQL_FX_DocumentUnit_FascicleDocumentUnitsPrivate,
                                                                                  new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_FascicleId, fascicle.UniqueId), fascicleFolderParameter, idTenantAooParameter));
        }
Exemple #11
0
 public static bool CanBeFascicolable(this IRepository <DocumentUnit> repository, Fascicle fascicle, DocumentUnit documentUnit)
 {
     return(repository.ExecuteModelScalarFunction <bool>(CommonDefinition.SQL_FX_DocumentUnits_CanBeFascicolable,
                                                         new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_FascicleIdCategory, fascicle.Category.EntityShortId),
                                                         new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_FascicleEnvironment, fascicle.DSWEnvironment.HasValue ? fascicle.DSWEnvironment.Value : 0),
                                                         new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_FascicleType, (short)fascicle.FascicleType),
                                                         new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_IdDocumentUnit, documentUnit.UniqueId),
                                                         new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_Environment, documentUnit.Environment),
                                                         new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_CategoryId, documentUnit.Category.EntityShortId)));
 }
Exemple #12
0
 public static ICollection <DocumentUnitTableValuedModel> GetFascicleDocumentUnitsPublic(this IRepository <DocumentUnit> repository, Fascicle fascicle, string filter)
 {
     return(repository.ExecuteModelFunction <DocumentUnitTableValuedModel>(CommonDefinition.SQL_FX_DocumentUnit_FascicleDocumentUnitsPublic,
                                                                           new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_FascicleId, fascicle.UniqueId),
                                                                           new QueryParameter(CommonDefinition.SQL_Param_DocumentUnit_FilterNameTitle, string.IsNullOrEmpty(filter) ? string.Empty : filter)));
 }
Exemple #13
0
        public async Task ExecuteAsync(ICommandBuildFascicle command)
        {
            Fascicle           fascicle           = new Fascicle();
            FascicleBuildModel fascicleBuildModel = command.ContentType.ContentTypeValue;
            FascicleModel      fascicleModel      = fascicleBuildModel.Fascicle;

            IdWorkflowActivity = fascicleBuildModel.IdWorkflowActivity;
            List <DossierFolderModel> dossierFolderDoAction = new List <DossierFolderModel>();
            string fascicleInsertActionType;

            if (!fascicleModel.FascicleType.HasValue || !_fascicleTypeInsertActionDescription.TryGetValue(fascicleModel.FascicleType.Value, out fascicleInsertActionType))
            {
                _logger.WriteError(new LogMessage($"Undefined or unsupported fascicle type {fascicleModel.FascicleType}"), LogCategories);

                throw new ServiceBusEvaluationException(new EvaluationModel {
                    CommandName = nameof(command), CorrelationId = command.CorrelationId
                });
            }

            try
            {
                if (RetryPolicyEvaluation != null && !string.IsNullOrEmpty(RetryPolicyEvaluation.ReferenceModel))
                {
                    fascicleModel = JsonConvert.DeserializeObject <FascicleModel>(RetryPolicyEvaluation.ReferenceModel, _serializerSettings);
                }
                else
                {
                    RetryPolicyEvaluation = new EvaluationModel();
                }

                //Attraverso le WebAPI comunicando col verbo POST col controller Rest Fascicle creare l'entità Fascicle
                #region [ Creazione Fascicle ]

                if (!RetryPolicyEvaluation.Steps.Any(f => f.Name == "ENTITY"))
                {
                    if (!fascicleModel.Category.IdCategory.HasValue)
                    {
                        throw new ArgumentNullException("fascicleModel.Category.IdCategory", "IdCategory must be defined");
                    }

                    if (fascicleModel.UniqueId == Guid.Empty)
                    {
                        throw new ArgumentException("fascicleModel.UniqueId", $"Invalid FascicleModel UniqueId {fascicleModel.UniqueId}");
                    }

                    fascicle.MetadataValues   = fascicleModel.MetadataValues;
                    fascicle.UniqueId         = fascicleModel.UniqueId;
                    fascicle.Rack             = fascicleModel.Rack;
                    fascicle.Note             = fascicleModel.Note;
                    fascicle.Manager          = fascicleModel.Manager;
                    fascicle.FascicleObject   = fascicleModel.FascicleObject;
                    fascicle.MetadataDesigner = fascicleModel.MetadataDesigner;

                    if (fascicleModel.FascicleTemplate != null)
                    {
                        fascicle.FascicleTemplate = new ProcessFascicleTemplate
                        {
                            JsonModel        = fascicleModel.FascicleTemplate.JsonModel,
                            Name             = fascicleModel.FascicleTemplate.Name,
                            UniqueId         = fascicleModel.FascicleTemplate.UniqueId ?? Guid.NewGuid(),
                            StartDate        = fascicleModel.FascicleTemplate.StartDate,
                            EndDate          = fascicleModel.FascicleTemplate.EndDate,
                            RegistrationDate = fascicleModel.FascicleTemplate.RegistrationDate,
                            RegistrationUser = fascicleModel.FascicleTemplate.RegistrationUser
                        };
                    }

                    if (fascicleModel.MetadataRepository != null)
                    {
                        fascicle.MetadataRepository = new MetadataRepository()
                        {
                            UniqueId = fascicleModel.MetadataRepository.Id
                        };
                    }

                    if (fascicleModel.FascicleType != null)
                    {
                        fascicle.FascicleType = (DocSuiteWeb.Entity.Fascicles.FascicleType)fascicleModel.FascicleType.Value;
                    }

                    if (fascicleModel.VisibilityType != null)
                    {
                        fascicle.VisibilityType = (DocSuiteWeb.Entity.Fascicles.VisibilityType)fascicleModel.VisibilityType.Value;
                    }

                    if (fascicleModel.Conservation != null)
                    {
                        fascicle.Conservation = fascicleModel.Conservation.Value;
                    }

                    if (fascicleModel.DossierFolders.Any())
                    {
                        dossierFolderDoAction.AddRange(fascicleModel.DossierFolders.Where(f => f.Status == DocSuiteWeb.Model.Entities.Dossiers.DossierFolderStatus.DoAction));
                        List <DossierFolder> dossierFolders = new List <DossierFolder>();
                        DossierFolder        folder;
                        foreach (DossierFolderModel dossierFolderModel in fascicleModel.DossierFolders.Where(f => f.Status != DocSuiteWeb.Model.Entities.Dossiers.DossierFolderStatus.DoAction))
                        {
                            if (dossierFolderModel.Status == DocSuiteWeb.Model.Entities.Dossiers.DossierFolderStatus.Fascicle || dossierFolderModel.Status == DocSuiteWeb.Model.Entities.Dossiers.DossierFolderStatus.FascicleClose)
                            {
                                _logger.WriteWarning(new LogMessage($"Fascicle {fascicle.GetTitle()} has wrong dossierfolder({dossierFolderModel.UniqueId}) reference type and it going to replace with parent association"), LogCategories);
                                folder = await _webApiClient.GetDossierFolderParentAsync(dossierFolderModel.UniqueId);

                                folder.Category = new Category()
                                {
                                    EntityShortId = (short)fascicleModel.Category.IdCategory.Value
                                };
                                if (folder == null)
                                {
                                    _logger.WriteError(new LogMessage($"DossierFolder {dossierFolderModel.UniqueId} doesn't have parent. it will be skip"), LogCategories);
                                    continue;
                                }
                                dossierFolders.Add(folder);
                            }
                            else
                            {
                                dossierFolders.Add(new DossierFolder()
                                {
                                    UniqueId = dossierFolderModel.UniqueId,
                                    Status   = (VecompSoftware.DocSuiteWeb.Entity.Dossiers.DossierFolderStatus)dossierFolderModel.Status,
                                    Category = dossierFolderModel.IdCategory.HasValue ? new Category()
                                    {
                                        EntityShortId = dossierFolderModel.IdCategory.Value
                                    } : null
                                });
                            }
                        }
                        fascicle.DossierFolders = dossierFolders;
                    }

                    fascicle.Contacts = new List <Contact>();
                    if (fascicleModel.Contacts != null && fascicleModel.Contacts.Count > 0)
                    {
                        foreach (ContactModel contact in fascicleModel.Contacts.Where(f => f.EntityId.HasValue))
                        {
                            fascicle.Contacts.Add(new Contact()
                            {
                                EntityId = contact.EntityId.Value
                            });
                        }
                    }

                    fascicle.Category = new Category()
                    {
                        EntityShortId = (short)fascicleModel.Category.IdCategory.Value
                    };

                    fascicle.FascicleRoles = new List <FascicleRole>();
                    if (fascicleModel.FascicleRoles != null && fascicleModel.FascicleRoles.Count > 0)
                    {
                        fascicle.FascicleRoles = fascicleModel.FascicleRoles.Where(x => x.Role.IdRole.HasValue).Select(s =>
                                                                                                                       new FascicleRole()
                        {
                            Role = new Role()
                            {
                                EntityShortId = s.Role.IdRole.Value
                            },
                            IsMaster = s.IsMaster,
                            AuthorizationRoleType = (AuthorizationRoleType)s.AuthorizationRoleType
                        }).ToList();
                    }

                    RetryPolicyEvaluation.Steps.Add(new StepModel()
                    {
                        Name           = "ENTITY",
                        LocalReference = JsonConvert.SerializeObject(fascicle, _serializerSettings)
                    });
                }
                else
                {
                    StepModel messageStatus = RetryPolicyEvaluation.Steps.First(f => f.Name == "ENTITY");
                    fascicle = JsonConvert.DeserializeObject <Fascicle>(messageStatus.LocalReference);
                }

                if (!RetryPolicyEvaluation.Steps.Any(f => f.Name == "ENTITY_CREATED"))
                {
                    fascicle.WorkflowName         = fascicleBuildModel.WorkflowName;
                    fascicle.IdWorkflowActivity   = fascicleBuildModel.IdWorkflowActivity;
                    fascicle.WorkflowAutoComplete = fascicleBuildModel.WorkflowAutoComplete;
                    foreach (IWorkflowAction workflowAction in fascicleBuildModel.WorkflowActions)
                    {
                        fascicle.WorkflowActions.Add(workflowAction);
                    }

                    _logger.WriteDebug(new LogMessage(JsonConvert.SerializeObject(fascicle, _serializerSettings)), LogCategories);
                    fascicle = await _webApiClient.PostEntityAsync(fascicle, fascicleInsertActionType);

                    _logger.WriteInfo(new LogMessage($"Fascicle {fascicle.GetTitle()} has been created"), LogCategories);
                    DossierFolder dossierFolder;
                    foreach (DossierFolderModel item in dossierFolderDoAction)
                    {
                        dossierFolder = await _webApiClient.PutEntityAsync(new DossierFolder()
                        {
                            UniqueId = item.UniqueId,
                            Category = new Category()
                            {
                                EntityShortId = fascicle.Category.EntityShortId
                            },
                            Fascicle     = fascicle,
                            JsonMetadata = item.JsonMetadata,
                            Name         = item.Name,
                            Status       = DocSuiteWeb.Entity.Dossiers.DossierFolderStatus.Fascicle
                        });

                        _logger.WriteInfo(new LogMessage($"DoAction DossierFolder {item.Name} update to new fascicle"), LogCategories);
                        fascicle.DossierFolders.Add(dossierFolder);
                    }
                    RetryPolicyEvaluation.Steps.Add(new StepModel()
                    {
                        Name           = "ENTITY_CREATED",
                        LocalReference = JsonConvert.SerializeObject(fascicle, _serializerSettings)
                    });
                }
                else
                {
                    StepModel messageStatus = RetryPolicyEvaluation.Steps.First(f => f.Name == "ENTITY_CREATED"); //Posso fare first direttamente perche sono nell else
                    fascicle = JsonConvert.DeserializeObject <Fascicle>(messageStatus.LocalReference);
                }
                #endregion

                #region [ Creazione FascicleFolders ]
                if (!RetryPolicyEvaluation.Steps.Any(f => f.Name == "FASCICLE_FOLDERS"))
                {
                    if (fascicleModel.FascicleFolders.Count > 0)
                    {
                        FascicleFolder defaultFolder = await _webApiClient.GetDefaultFascicleFolderAsync(fascicle.UniqueId);

                        FascicleFolder fascicleFolder;
                        foreach (FascicleFolderModel fascicleFolderModel in fascicleModel.FascicleFolders)
                        {
                            fascicleFolder = new FascicleFolder()
                            {
                                UniqueId       = fascicleFolderModel.UniqueId,
                                Fascicle       = fascicle,
                                ParentInsertId = defaultFolder.UniqueId,
                                Name           = fascicleFolderModel.Name,
                                Status         = (DocSuiteWeb.Entity.Fascicles.FascicleFolderStatus)fascicleFolderModel.Status,
                                Typology       = (DocSuiteWeb.Entity.Fascicles.FascicleFolderTypology)fascicleFolderModel.Typology
                            };
                            await _webApiClient.PostEntityAsync(fascicleFolder);

                            _logger.WriteInfo(new LogMessage($"Fascicle folder {fascicleFolder.Name} has been created"), LogCategories);
                        }
                    }
                    RetryPolicyEvaluation.Steps.Add(new StepModel()
                    {
                        Name           = "FASCICLE_FOLDERS",
                        LocalReference = JsonConvert.SerializeObject(fascicle, _serializerSettings)
                    });
                }
                else
                {
                    StepModel messageStatus = RetryPolicyEvaluation.Steps.First(f => f.Name == "FASCICLE_FOLDERS");
                    fascicle = JsonConvert.DeserializeObject <Fascicle>(messageStatus.LocalReference);
                }
                #endregion

                //Attraverso le WebAPI comunicando col verbo POST col controller Rest FascicleDocument e inserire tutti gli inserti inseriti in Biblos popolando la navigation property FascicleDocuments (FascicleDocument table) coi relativi identificativi Guid di Biblos
                #region [ Creazione FascicleDocument ]
                if (!RetryPolicyEvaluation.Steps.Any(f => f.Name == "FASCICLE"))
                {
                    foreach (FascicleDocumentModel model in fascicleModel.FascicleDocuments)
                    {
                        fascicle.FascicleDocuments.Add(new FascicleDocument
                        {
                            UniqueId         = model.UniqueId,
                            ChainType        = (DocSuiteWeb.Entity.DocumentUnits.ChainType)model.ChainType,
                            IdArchiveChain   = model.IdArchiveChain,
                            RegistrationUser = model.RegistrationUser,
                            RegistrationDate = model.RegistrationDate.Value,
                            LastChangedUser  = model.LastChangedUser
                        });
                    }
                    RetryPolicyEvaluation.Steps.Add(new StepModel()
                    {
                        Name           = "FASCICLE",
                        LocalReference = JsonConvert.SerializeObject(fascicle, _serializerSettings)
                    });
                }
                else
                {
                    StepModel messageStatus = RetryPolicyEvaluation.Steps.First(f => f.Name == "FASCICLE");
                    fascicle = JsonConvert.DeserializeObject <Fascicle>(messageStatus.LocalReference);
                }

                if (!RetryPolicyEvaluation.Steps.Any(f => f.Name == "FASCICLE_CREATED"))
                {
                    fascicle = await _webApiClient.PutEntityAsync(fascicle, fascicle.FascicleType == DocSuiteWeb.Entity.Fascicles.FascicleType.Activity?UpdateActionType.ActivityFascicleUpdate.ToString() : string.Empty);

                    RetryPolicyEvaluation.Steps.Add(new StepModel()
                    {
                        Name           = "FASCICLE_CREATED",
                        LocalReference = JsonConvert.SerializeObject(fascicle, _serializerSettings)
                    });
                }
                else
                {
                    StepModel messageStatus = RetryPolicyEvaluation.Steps.First(f => f.Name == "FASCICLE_CREATED");
                    fascicle = JsonConvert.DeserializeObject <Fascicle>(messageStatus.LocalReference);
                }
                #endregion

                //Attraverso le WebAPI comunicando col verbo POST inviare l'evento EventoCompleteFascicleBuild
                #region [ EventoCompleteFascicleBuild ]

                fascicleModel.RegistrationDate = fascicle.RegistrationDate;
                fascicleModel.RegistrationUser = fascicle.RegistrationUser;
                fascicleModel.Year             = fascicle.Year;
                fascicleModel.Title            = fascicle.Title;
                fascicleModel.StartDate        = fascicle.StartDate;
                fascicleModel.Number           = fascicle.Number;
                fascicleBuildModel.Fascicle    = fascicleModel;
                IEventCompleteFascicleBuild eventCompleteFascicleBuild = new EventCompleteFascicleBuild(Guid.NewGuid(), command.CorrelationId ?? fascicleBuildModel.UniqueId,
                                                                                                        command.TenantName, command.TenantId, command.TenantAOOId, command.Identity, fascicleBuildModel, null);

                if (!await _webApiClient.PushEventAsync(eventCompleteFascicleBuild))
                {
                    _logger.WriteError(new LogMessage($"EventCompleteFascicleBuild {fascicle.GetTitle()} has not been sended"), LogCategories);
                    throw new Exception("IEventCompleteFascicleBuild not sended");
                }
                _logger.WriteInfo(new LogMessage($"EventCompleteFascicleBuild {eventCompleteFascicleBuild.Id} has been sended"), LogCategories);

                #endregion
            }
            catch (Exception ex)
            {
                RetryPolicyEvaluation.ReferenceModel = JsonConvert.SerializeObject(fascicleModel, _serializerSettings);

                _logger.WriteError(ex, LogCategories);
                throw new ServiceBusEvaluationException(RetryPolicyEvaluation);
            }
        }