예제 #1
0
        internal override async Task <DocumentUnit> MappingInsertAsync(IContentBase entity, IIdentityContext identity)
        {
            DocumentUnit documentUnit = new DocumentUnit();

            try
            {
                UDSBuildModel udsBuildModel = (UDSBuildModel)entity;
                #region [ Base ]

                documentUnit.EntityId         = 0;
                documentUnit.UniqueId         = udsBuildModel.UniqueId;
                documentUnit.Environment      = udsBuildModel.UDSRepository.DSWEnvironment;
                documentUnit.Year             = udsBuildModel.Year.Value;
                documentUnit.Number           = udsBuildModel.Number.Value;
                documentUnit.RegistrationDate = udsBuildModel.RegistrationDate.Value;
                documentUnit.RegistrationUser = udsBuildModel.RegistrationUser;
                documentUnit.LastChangedDate  = null;
                documentUnit.LastChangedUser  = null;
                documentUnit.Subject          = udsBuildModel.Subject;
                documentUnit.Title            = string.Concat(udsBuildModel.Year.Value, "/", udsBuildModel.Number.Value.ToString("0000000"));
                documentUnit.DocumentUnitName = udsBuildModel.Title;
                documentUnit.Status           = DocumentUnitStatus.Active;
                #endregion

                #region [ Navigation Properties ]

                //TODO: Category, Container e Authorizations dovrebbero arrivare già completi di UniqueId. Va modificata l'UDS nella DSW.
                documentUnit.UDSRepository = MapUDSRepositoryModel(new UDSRepository(), udsBuildModel.UDSRepository);
                Category category = await _webApiClient.GetCategoryAsync(udsBuildModel.Category.IdCategory.Value);

                if (category.UniqueId != Guid.Empty)
                {
                    documentUnit.Category = category;
                }

                Container container = await _webApiClient.GetContainerAsync(udsBuildModel.Container.IdContainer.Value);

                if (container.UniqueId != Guid.Empty)
                {
                    documentUnit.Container = container;
                }

                documentUnit.Fascicle = await _webApiClient.GetFascicleAsync(udsBuildModel.UniqueId);

                foreach (RoleModel item in udsBuildModel.Roles)
                {
                    Role role = await _webApiClient.GetRoleAsync(item);

                    documentUnit.DocumentUnitRoles.Add(new DocumentUnitRole()
                    {
                        UniqueIdRole          = role.UniqueId,
                        RoleLabel             = item.RoleLabel,
                        RegistrationDate      = DateTimeOffset.UtcNow,
                        RegistrationUser      = identity.User,
                        AuthorizationRoleType = GetRoleType(string.Empty)
                    });
                }
                foreach (UserModel item in udsBuildModel.Users)
                {
                    documentUnit.DocumentUnitUsers.Add(new DocumentUnitUser()
                    {
                        Account           = item.Account,
                        RegistrationDate  = DateTimeOffset.UtcNow,
                        RegistrationUser  = identity.User,
                        AuthorizationType = AuthorizationRoleType.Accounted
                    });
                }

                foreach (UDSDocumentModel document in udsBuildModel.Documents)
                {
                    switch (document.DocumentType)
                    {
                    case UDSDocumentType.Document:
                        AddUDSDocumentUnitChain(documentUnit, document, ChainType.MainChain, identity);
                        break;

                    case UDSDocumentType.DocumentAttachment:
                        AddUDSDocumentUnitChain(documentUnit, document, ChainType.AttachmentsChain, identity);
                        break;

                    case UDSDocumentType.DocumentAnnexed:
                        AddUDSDocumentUnitChain(documentUnit, document, ChainType.AnnexedChain, identity);
                        break;

                    case UDSDocumentType.DocumentDematerialisation:
                        AddUDSDocumentUnitChain(documentUnit, document, ChainType.DematerialisationChain, identity);
                        break;
                    }
                }

                #endregion
            }
            catch (Exception ex)
            {
                _logger.WriteError(new LogMessage("UDS, MappingInsertAsync Error: "), ex, LogCategories);
                throw ex;
            }

            return(documentUnit);
        }