Exemple #1
0
        private async Task <Fascicle> UpdateData(FascicleBuildModel fascicleBuildModel, FascicleModel entity)
        {
            Fascicle entityTransformed;

            try
            {
                entityTransformed = await _webApiClient.GetFascicleByIdAsync(entity.UniqueId);

                if (entityTransformed == null)
                {
                    _logger.WriteError(new LogMessage($"Fascicle with id {entity.UniqueId} not found"), LogCategories);
                    throw new Exception("Fascicle not found");
                }

                entityTransformed.WorkflowName         = fascicleBuildModel.WorkflowName;
                entityTransformed.IdWorkflowActivity   = fascicleBuildModel.IdWorkflowActivity;
                entityTransformed.WorkflowAutoComplete = fascicleBuildModel.WorkflowAutoComplete;
                foreach (IWorkflowAction workflowAction in fascicleBuildModel.WorkflowActions)
                {
                    entityTransformed.WorkflowActions.Add(workflowAction);
                }

                entityTransformed.Name           = entity.Name;
                entityTransformed.Note           = entity.Note;
                entityTransformed.Rack           = entity.Rack;
                entityTransformed.FascicleObject = entity.FascicleObject;
                if (entityTransformed.FascicleType == DocSuiteWeb.Entity.Fascicles.FascicleType.Legacy)
                {
                    entityTransformed.Manager = entity.Manager;
                }
                if (entityTransformed.FascicleType != DocSuiteWeb.Entity.Fascicles.FascicleType.Activity && entity.Contacts != null)
                {
                    foreach (Contact item in entityTransformed.Contacts.Where(f => !entity.Contacts.Any(c => c.EntityId == f.EntityId)).ToList())
                    {
                        entityTransformed.Contacts.Remove(item);
                    }
                    foreach (ContactModel item in entity.Contacts.Where(f => !entityTransformed.Contacts.Any(c => c.EntityId == f.EntityId)))
                    {
                        entityTransformed.Contacts.Add(new Contact()
                        {
                            EntityId = item.EntityId.Value
                        });
                    }
                }
                if (entity.FascicleDocuments != null && entity.FascicleDocuments.Count > 0)
                {
                    Archive fascicleMiscellaneaArchive = _biblosArchives.Single(f => f.Name.Equals(_fascicleLocation.ProtocolArchive, StringComparison.InvariantCultureIgnoreCase));
                    List <BiblosDS.BiblosDS.Attribute> miscellaneaAttributes = _biblosClient.Document.GetAttributesDefinition(fascicleMiscellaneaArchive.Name);
                    DocumentModel    documentInserted;
                    FascicleFolder   fascicleFolder;
                    FascicleDocument currentFascicleDocument;
                    foreach (FascicleDocumentModel item in entity.FascicleDocuments.Where(f => !entityTransformed.FascicleDocuments.Any(c => c.UniqueId == f.UniqueId)))
                    {
                        if (item.Document == null || !item.Document.DocumentToStoreId.HasValue)
                        {
                            _logger.WriteError(new LogMessage($"Document not defined for fascicle document {item.UniqueId}."), LogCategories);
                            continue;
                        }
                        fascicleFolder = null;
                        if (item.FascicleFolder != null)
                        {
                            fascicleFolder = await _webApiClient.GetFascicleFolderAsync(item.FascicleFolder.UniqueId);
                        }
                        if (fascicleFolder == null)
                        {
                            fascicleFolder = await _webApiClient.GetDefaultFascicleFolderAsync(entityTransformed.UniqueId);
                        }
                        _logger.WriteInfo(new LogMessage($"Adding document {item.Document.FileName} into fascicle folder {fascicleFolder.Name}({fascicleFolder.UniqueId})."), LogCategories);
                        currentFascicleDocument = await _webApiClient.GetFascicleDocumentByFolderAsync(fascicleFolder.UniqueId);

                        item.Document.ChainId = currentFascicleDocument?.IdArchiveChain;
                        documentInserted      = ArchiveFascicleMiscellanea(item, fascicleMiscellaneaArchive, miscellaneaAttributes);
                        if (currentFascicleDocument == null)
                        {
                            entityTransformed.FascicleDocuments.Add(new FascicleDocument()
                            {
                                IdArchiveChain = documentInserted.ChainId.Value,
                                ChainType      = DocSuiteWeb.Entity.DocumentUnits.ChainType.Miscellanea,
                                FascicleFolder = fascicleFolder
                            });
                        }
                    }
                }
                if (!string.IsNullOrEmpty(entity.MetadataDesigner))
                {
                    entityTransformed.MetadataDesigner = entity.MetadataDesigner;
                }
                if (!string.IsNullOrEmpty(entity.MetadataValues))
                {
                    entityTransformed.MetadataValues = entity.MetadataValues;
                }

                entityTransformed = await _webApiClient.PutEntityAsync(entityTransformed);
            }
            catch (Exception ex)
            {
                _logger.WriteError(ex, LogCategories);
                throw ex;
            }
            return(entityTransformed);
        }