예제 #1
0
        protected override Fascicle BeforeCreate(Fascicle entity)
        {
            entity.FascicleFolders.Clear();
            if (entity.Contacts != null)
            {
                HashSet <Contact> contacts = new HashSet <Contact>();
                Contact           contact  = null;
                foreach (Contact item in entity.Contacts)
                {
                    contact = _unitOfWork.Repository <Contact>().Find(item.EntityId);
                    if (contact != null)
                    {
                        contacts.Add(contact);
                    }
                }
                entity.Contacts = contacts;
            }

            if (entity.FascicleDocuments != null && entity.FascicleDocuments.Count > 0)
            {
                _unitOfWork.Repository <FascicleDocument>().InsertRange(entity.FascicleDocuments);
            }

            if (entity.Category != null)
            {
                entity.Category = _unitOfWork.Repository <Category>().Find(entity.Category.EntityShortId);
            }

            if (entity.MetadataRepository != null)
            {
                entity.MetadataRepository = _unitOfWork.Repository <MetadataRepository>().Find(entity.MetadataRepository.UniqueId);
            }

            if (entity.Container != null)
            {
                entity.Container = _unitOfWork.Repository <Container>().Find(entity.Container.EntityShortId);
            }

            if (entity.FascicleTemplate != null)
            {
                entity.FascicleTemplate = _unitOfWork.Repository <ProcessFascicleTemplate>().Find(entity.FascicleTemplate.UniqueId);
            }

            entity.Number = -1;

            DateTimeOffset date = entity.StartDate;

            entity.StartDate = DateTimeOffset.UtcNow;

            if (CurrentInsertActionType.HasValue && CurrentInsertActionType.Value == InsertActionType.InsertPeriodicFascicle)
            {
                CategoryFascicle relatedCategoryFascicle = _unitOfWork.Repository <CategoryFascicle>().GetByEnvironment(entity.Category.EntityShortId, entity.DSWEnvironment.Value).FirstOrDefault();
                FasciclePeriod   period = _unitOfWork.Repository <FasciclePeriod>().Find(relatedCategoryFascicle.FasciclePeriod.UniqueId);
                entity.StartDate = PeriodHelper.GetCurrentPeriodStart(period.PeriodName, date);
                if (entity.FascicleObject.Contains(string.Concat(" - ", period.PeriodName)))
                {
                    entity.FascicleObject = entity.FascicleObject.Replace(entity.FascicleObject.Split('-').LastOrDefault(), "");
                }
                entity.FascicleObject = string.Concat(entity.FascicleObject, " - ", period.PeriodName, ", ",
                                                      period.PeriodName.Equals("Annuale", StringComparison.InvariantCultureIgnoreCase) ? entity.StartDate.Year.ToString() :
                                                      CultureInfo.CurrentCulture.TextInfo.ToTitleCase(CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(entity.StartDate.Month)));
            }

            entity.Year = Convert.ToInt16(entity.StartDate.Year);

            if (entity.Category != null)
            {
                int latestNumber = _unitOfWork.Repository <Fascicle>().GetLatestNumber(entity.Year, entity.Category.EntityShortId);
                entity.Number = ++latestNumber;

                IEnumerable <short> idCategories = entity.Category.FullIncrementalPath
                                                   .Split('|')
                                                   .Select(f => short.Parse(f));
                string categorySectionTitle = string.Join(".", _unitOfWork.Repository <Category>().Queryable(true)
                                                          .Where(f => idCategories.Contains(f.EntityShortId))
                                                          .OrderBy(f => f.EntityShortId)
                                                          .Where(f => f.Code > 0)
                                                          .Select(f => f.Code));

                entity.Title = $"{entity.Year}.{categorySectionTitle}-{entity.Number:0000000}";
            }

            if (entity.DossierFolders != null)
            {
                HashSet <DossierFolder> dossierFolders        = new HashSet <DossierFolder>();
                DossierFolder           dossierFolderParent   = null;
                DossierFolder           dossierFascicleFolder = null;
                foreach (DossierFolder dossierFolder in entity.DossierFolders)
                {
                    dossierFolderParent = _unitOfWork.Repository <DossierFolder>().GetIncludeDossier(dossierFolder.UniqueId);
                    if (dossierFolderParent != null)
                    {
                        dossierFolderParent.Status = DossierFolderStatus.Folder;
                        _unitOfWork.Repository <DossierFolder>().Update(dossierFolderParent);
                        dossierFascicleFolder = new DossierFolder()
                        {
                            UniqueId       = Guid.NewGuid(),
                            Fascicle       = entity,
                            Dossier        = dossierFolderParent.Dossier,
                            ParentInsertId = dossierFolderParent.UniqueId,
                            Name           = $"{entity.Title}-{entity.FascicleObject}",
                            Status         = DossierFolderStatus.Fascicle,
                            Category       = entity.Category
                        };
                        dossierFolders.Add(dossierFascicleFolder);
                    }
                }
                entity.DossierFolders = dossierFolders;
                _unitOfWork.Repository <DossierFolder>().InsertRange(entity.DossierFolders);
            }

            if (entity.FascicleRoles != null)
            {
                HashSet <FascicleRole> fascicleRoles = new HashSet <FascicleRole>();
                FascicleRole           fascicleRole;
                Role role;
                foreach (FascicleRole item in entity.FascicleRoles)
                {
                    fascicleRole = new FascicleRole();
                    role         = _unitOfWork.Repository <Role>().Find(item.Role.EntityShortId);
                    if (role != null && !fascicleRoles.Any(f => f.Role.EntityShortId == role.EntityShortId))
                    {
                        fascicleRole.Role     = role;
                        fascicleRole.Fascicle = entity;
                        fascicleRole.IsMaster = item.IsMaster;
                        fascicleRole.AuthorizationRoleType = item.AuthorizationRoleType;

                        switch (entity.FascicleType)
                        {
                        case FascicleType.Activity:
                        {
                            fascicleRole.AuthorizationRoleType = AuthorizationRoleType.Responsible;
                            break;
                        }

                        case FascicleType.Procedure:
                        case FascicleType.Period:
                        {
                            if (item.IsMaster)
                            {
                                fascicleRole.AuthorizationRoleType = AuthorizationRoleType.Responsible;
                            }
                            break;
                        }
                        }
                        fascicleRoles.Add(fascicleRole);
                    }
                }
                entity.FascicleRoles = fascicleRoles;
                _unitOfWork.Repository <FascicleRole>().InsertRange(entity.FascicleRoles);
            }

            if (!string.IsNullOrEmpty(entity.MetadataValues))
            {
                ICollection <MetadataValueModel>   metadataValueModels   = JsonConvert.DeserializeObject <ICollection <MetadataValueModel> >(entity.MetadataValues);
                MetadataDesignerModel              metadataDesignerModel = JsonConvert.DeserializeObject <MetadataDesignerModel>(entity.MetadataDesigner);
                ICollection <MetadataValue>        metadataValues        = new List <MetadataValue>();
                ICollection <MetadataValueContact> metadataContactValues = new List <MetadataValueContact>();
                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName)))
                {
                    metadataContactValues.Add(CreateMetadataContactValue(metadataValueModel, entity));
                }

                MetadataValue metadataValue;
                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => !metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName)))
                {
                    metadataValue          = MetadataValueService.CreateMetadataValue(metadataDesignerModel, metadataValueModel);
                    metadataValue.Fascicle = entity;
                    metadataValues.Add(metadataValue);
                }
                entity.SourceMetadataValues  = metadataValues;
                entity.MetadataValueContacts = metadataContactValues;
                _unitOfWork.Repository <MetadataValue>().InsertRange(entity.SourceMetadataValues);
                _unitOfWork.Repository <MetadataValueContact>().InsertRange(entity.MetadataValueContacts);
            }
            _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entity, FascicleLogType.Insert, "Inserimento nuovo fascicolo", CurrentDomainUser.Account));

            _unitOfWork.Repository <FascicleFolder>().Insert(new FascicleFolder
            {
                UniqueId = entity.UniqueId,
                Fascicle = entity,
                Name     = "Tutti i documenti",
                Category = null,
                Status   = FascicleFolderStatus.Active,
                Typology = FascicleFolderTypology.Root
            });
            return(base.BeforeCreate(entity));
        }
예제 #2
0
        protected override Dossier BeforeCreate(Dossier entity)
        {
            _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entity, null, DossierLogType.Insert, string.Concat("Nuovo dossier '", entity.Subject, "'"), CurrentDomainUser.Account));

            if (entity.Contacts != null)
            {
                HashSet <Contact> contacts = new HashSet <Contact>();
                Contact           contact  = null;
                foreach (Contact item in entity.Contacts)
                {
                    contact = _unitOfWork.Repository <Contact>().Find(item.EntityId);
                    if (contact != null)
                    {
                        contacts.Add(contact);
                    }
                }
                entity.Contacts = contacts;
            }

            if (entity.MetadataRepository != null)
            {
                entity.MetadataRepository = _unitOfWork.Repository <MetadataRepository>().Find(entity.MetadataRepository.UniqueId);
            }

            if (entity.Container != null)
            {
                entity.Container = _unitOfWork.Repository <Container>().Find(entity.Container.EntityShortId);
            }

            if (entity.DossierRoles != null)
            {
                HashSet <DossierRole> dossierRoles = new HashSet <DossierRole>();
                foreach (DossierRole item in entity.DossierRoles)
                {
                    dossierRoles.Add(CreateDossierRole(item, entity));
                }
                entity.DossierRoles = dossierRoles.Where(f => f != null).ToList();
                _unitOfWork.Repository <DossierRole>().InsertRange(entity.DossierRoles);
            }

            if (entity.DossierDocuments != null && entity.DossierDocuments.Count > 0)
            {
                _unitOfWork.Repository <DossierDocument>().InsertRange(entity.DossierDocuments);
            }

            if (!string.IsNullOrEmpty(entity.MetadataValues))
            {
                ICollection <MetadataValueModel>   metadataValueModels   = JsonConvert.DeserializeObject <ICollection <MetadataValueModel> >(entity.MetadataValues);
                MetadataDesignerModel              metadataDesignerModel = JsonConvert.DeserializeObject <MetadataDesignerModel>(entity.MetadataDesigner);
                ICollection <MetadataValue>        metadataValues        = new List <MetadataValue>();
                ICollection <MetadataValueContact> metadataContactValues = new List <MetadataValueContact>();
                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName)))
                {
                    metadataContactValues.Add(CreateMetadataContactValue(metadataValueModel, entity));
                }

                MetadataValue metadataValue;
                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => !metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName)))
                {
                    metadataValue         = MetadataValueService.CreateMetadataValue(metadataDesignerModel, metadataValueModel);
                    metadataValue.Dossier = entity;
                    metadataValues.Add(metadataValue);
                }
                entity.SourceMetadataValues  = metadataValues;
                entity.MetadataValueContacts = metadataContactValues;
                _unitOfWork.Repository <MetadataValue>().InsertRange(entity.SourceMetadataValues);
                _unitOfWork.Repository <MetadataValueContact>().InsertRange(entity.MetadataValueContacts);
            }

            if (entity.Category != null)
            {
                entity.Category = _unitOfWork.Repository <Category>().Find(entity.Category.EntityShortId);
            }
            else
            {
                UserLog userLog       = _unitOfWork.Repository <UserLog>().GetBySystemUser(CurrentDomainUser.Account);
                Tenant  currentTenant = _unitOfWork.Repository <Tenant>().GetByUniqueId(userLog.CurrentTenantId).FirstOrDefault();
                entity.Category = _unitOfWork.Repository <Category>().GetDefaultCategoryByTenantAOOId(currentTenant.TenantAOO.UniqueId);
            }

            entity.Status = DossierStatus.Open;

            entity.Year   = Convert.ToInt16(DateTime.UtcNow.Year);
            entity.Number = -1;
            int latestNumber = _unitOfWork.Repository <Dossier>().GetLatestNumber(entity.Year);

            entity.Number = ++latestNumber;

            DossierFolder rootNode = new DossierFolder
            {
                UniqueId = entity.UniqueId,
                Dossier  = entity,
                Name     = $"Dossier {entity.Year}/{entity.Number:0000000}"
                ,
                Status = DossierFolderStatus.InProgress,
            };

            _unitOfWork.Repository <DossierFolder>().Insert(rootNode);
            _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entity, rootNode, DossierLogType.FolderInsert, string.Concat("Creata cartella radice '", rootNode.Name, "'"), CurrentDomainUser.Account));

            return(base.BeforeCreate(entity));
        }
예제 #3
0
        protected override Fascicle BeforeUpdate(Fascicle entity, Fascicle entityTransformed)
        {
            if (entity.Category != null)
            {
                entityTransformed.Category = _unitOfWork.Repository <Category>().Find(entity.Category.EntityShortId);
            }

            if (entity.Contacts != null)
            {
                foreach (Contact item in entityTransformed.Contacts.Where(f => !entity.Contacts.Any(c => c.EntityId == f.EntityId)).ToList())
                {
                    entityTransformed.Contacts.Remove(item);
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Rimosso il contatto '", item.Description, "'"), CurrentDomainUser.Account));
                }
                foreach (Contact item in entity.Contacts.Where(f => !entityTransformed.Contacts.Any(c => c.EntityId == f.EntityId)))
                {
                    entityTransformed.Contacts.Add(_unitOfWork.Repository <Contact>().Find(item.EntityId));
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Aggiunto il contatto '", item.Description, "'"), CurrentDomainUser.Account));
                }
            }

            if (entity.FascicleDocuments != null && entity.FascicleDocuments.Count > 0)
            {
                foreach (FascicleDocument item in entity.FascicleDocuments.Where(x => !entityTransformed.FascicleDocuments.Any(f => f.UniqueId == x.UniqueId)))
                {
                    _unitOfWork.Repository <FascicleDocument>().Insert(item);
                    entityTransformed.FascicleDocuments.Add(item);
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.DocumentInsert, string.Concat("Inserimento documento con id catena ", item.IdArchiveChain), CurrentDomainUser.Account));
                }
            }

            if (entityTransformed.SourceMetadataValues != null && entityTransformed.MetadataValueContacts != null && !string.IsNullOrEmpty(entity.MetadataValues))
            {
                ICollection <MetadataValueModel> metadataValueModels   = JsonConvert.DeserializeObject <ICollection <MetadataValueModel> >(entity.MetadataValues);
                MetadataDesignerModel            metadataDesignerModel = JsonConvert.DeserializeObject <MetadataDesignerModel>(entityTransformed.MetadataDesigner);
                foreach (MetadataValue item in entityTransformed.SourceMetadataValues.Where(c => !metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    _unitOfWork.Repository <MetadataValue>().Delete(item);
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Rimosso il metadato '", item.Name, "'"), CurrentDomainUser.Account));
                }
                foreach (MetadataValueContact item in entityTransformed.MetadataValueContacts.Where(c => !metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    _unitOfWork.Repository <MetadataValueContact>().Delete(item);
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Rimosso il metadato '", item.Name, "'"), CurrentDomainUser.Account));
                }

                MetadataValueContact tmpContactValue;
                foreach (MetadataValueContact item in entityTransformed.MetadataValueContacts.Where(c => metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    tmpContactValue    = CreateMetadataContactValue(metadataValueModels.Single(x => x.KeyName == item.Name), entityTransformed);
                    item.Contact       = tmpContactValue.Contact;
                    item.ContactManual = tmpContactValue.ContactManual;
                    _unitOfWork.Repository <MetadataValueContact>().Update(item);
                }
                MetadataValue tmpMetadataValue;
                foreach (MetadataValue item in entityTransformed.SourceMetadataValues.Where(c => metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    tmpMetadataValue = MetadataValueService.CreateMetadataValue(metadataDesignerModel, metadataValueModels.Single(x => x.KeyName == item.Name));
                    _mapperUnitOfWork.Repository <IDomainMapper <MetadataValue, MetadataValue> >().Map(tmpMetadataValue, item);
                    _unitOfWork.Repository <MetadataValue>().Update(item);
                }

                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName) &&
                                                                                            !entityTransformed.MetadataValueContacts.Any(xx => xx.Name == x.KeyName)))
                {
                    _unitOfWork.Repository <MetadataValueContact>().Insert(CreateMetadataContactValue(metadataValueModel, entityTransformed));
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Creato il metadato '", metadataValueModel.KeyName, "'"), CurrentDomainUser.Account));
                }
                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => !metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName) &&
                                                                                            !entityTransformed.SourceMetadataValues.Any(xx => xx.Name == x.KeyName)))
                {
                    tmpMetadataValue          = MetadataValueService.CreateMetadataValue(metadataDesignerModel, metadataValueModel);
                    tmpMetadataValue.Fascicle = entityTransformed;
                    _unitOfWork.Repository <MetadataValue>().Insert(tmpMetadataValue);
                    _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Creato il metadato '", metadataValueModel.KeyName, "'"), CurrentDomainUser.Account));
                }
            }

            if (CurrentUpdateActionType == UpdateActionType.AssociatedProcessDossierFolderToFascicle)
            {
                InsertProcessDossierFolder(entity, entityTransformed);
            }
            else
            {
                UpdateFascicleDossierFolders(entity, entityTransformed);
            }

            string log = string.Concat(entity.EndDate.HasValue ? "Chiusura" : "Modifica", " del fascicolo");

            if (CurrentUpdateActionType.HasValue && CurrentUpdateActionType == UpdateActionType.OpenFascicleClosed)
            {
                entityTransformed.EndDate = null;
                log = "Riapertura del fascicolo";
            }
            _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, entity.EndDate.HasValue ? FascicleLogType.Close : FascicleLogType.Modify, log, CurrentDomainUser.Account));

            if (CurrentUpdateActionType == UpdateActionType.ChangeFascicleType)
            {
                entityTransformed.FascicleType = FascicleType.Procedure;
                _unitOfWork.Repository <FascicleLog>().Insert(CreateLog(entityTransformed, FascicleLogType.Modify, string.Concat("Trasforma in fascicolo di procedimento."), CurrentDomainUser.Account));
            }

            return(base.BeforeUpdate(entity, entityTransformed));
        }
예제 #4
0
        protected override Dossier BeforeUpdate(Dossier entity, Dossier entityTransformed)
        {
            if (entity.Contacts != null)
            {
                foreach (Contact item in entityTransformed.Contacts.Where(f => !entity.Contacts.Any(c => c.EntityId == f.EntityId)).ToList())
                {
                    entityTransformed.Contacts.Remove(item);
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.Modify, string.Concat("Rimosso il contatto '", item.Description, "'"), CurrentDomainUser.Account));
                }
                foreach (Contact item in entity.Contacts.Where(f => !entityTransformed.Contacts.Any(c => c.EntityId == f.EntityId)))
                {
                    entityTransformed.Contacts.Add(_unitOfWork.Repository <Contact>().Find(item.EntityId));
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.Modify, string.Concat("Aggiunto il contatto '", item.Description, "'"), CurrentDomainUser.Account));
                }
            }

            if (entity.DossierDocuments != null && entity.DossierDocuments.Any())
            {
                foreach (DossierDocument item in entity.DossierDocuments.Where(x => !entityTransformed.DossierDocuments.Any(f => f.UniqueId == x.UniqueId)))
                {
                    _unitOfWork.Repository <DossierDocument>().Insert(item);
                    entityTransformed.DossierDocuments.Add(item);
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.DocumentInsert, string.Concat("Inserimento documento con id catena ", item.IdArchiveChain), CurrentDomainUser.Account));
                }
            }
            if (entity.Container != null)
            {
                entityTransformed.Container = _unitOfWork.Repository <Container>().Find(entity.Container.EntityShortId);
            }

            if (entityTransformed.SourceMetadataValues != null && entityTransformed.MetadataValueContacts != null && !string.IsNullOrEmpty(entity.MetadataValues))
            {
                ICollection <MetadataValueModel> metadataValueModels   = JsonConvert.DeserializeObject <ICollection <MetadataValueModel> >(entity.MetadataValues);
                MetadataDesignerModel            metadataDesignerModel = JsonConvert.DeserializeObject <MetadataDesignerModel>(entityTransformed.MetadataDesigner);
                foreach (MetadataValue item in entityTransformed.SourceMetadataValues.Where(c => !metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    _unitOfWork.Repository <MetadataValue>().Delete(item);
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.Modify,
                                                                                                            string.Concat("Rimosso il metadato '", item.Name, "'"), CurrentDomainUser.Account));
                }
                foreach (MetadataValueContact item in entityTransformed.MetadataValueContacts.Where(c => !metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    _unitOfWork.Repository <MetadataValueContact>().Delete(item);
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.Modify,
                                                                                                            string.Concat("Rimosso il metadato '", item.Name, "'"), CurrentDomainUser.Account));
                }

                MetadataValueContact tmpContactValue;
                foreach (MetadataValueContact item in entityTransformed.MetadataValueContacts.Where(c => metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    tmpContactValue    = CreateMetadataContactValue(metadataValueModels.Single(x => x.KeyName == item.Name), entityTransformed);
                    item.Contact       = tmpContactValue.Contact;
                    item.ContactManual = tmpContactValue.ContactManual;
                    _unitOfWork.Repository <MetadataValueContact>().Update(item);
                }
                MetadataValue tmpMetadataValue;
                foreach (MetadataValue item in entityTransformed.SourceMetadataValues.Where(c => metadataValueModels.Any(x => x.KeyName == c.Name)).ToList())
                {
                    tmpMetadataValue = MetadataValueService.CreateMetadataValue(metadataDesignerModel, metadataValueModels.Single(x => x.KeyName == item.Name));
                    _mapperUnitOfWork.Repository <IDomainMapper <MetadataValue, MetadataValue> >().Map(tmpMetadataValue, item);
                    _unitOfWork.Repository <MetadataValue>().Update(item);
                }

                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName) &&
                                                                                            !entityTransformed.MetadataValueContacts.Any(xx => xx.Name == x.KeyName)))
                {
                    _unitOfWork.Repository <MetadataValueContact>().Insert(CreateMetadataContactValue(metadataValueModel, entityTransformed));
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.Modify,
                                                                                                            string.Concat("Creato il metadato '", metadataValueModel.KeyName, "'"), CurrentDomainUser.Account));
                }
                foreach (MetadataValueModel metadataValueModel in metadataValueModels.Where(x => !metadataDesignerModel.ContactFields.Any(xx => xx.KeyName == x.KeyName) &&
                                                                                            !entityTransformed.SourceMetadataValues.Any(xx => xx.Name == x.KeyName)))
                {
                    tmpMetadataValue         = MetadataValueService.CreateMetadataValue(metadataDesignerModel, metadataValueModel);
                    tmpMetadataValue.Dossier = entityTransformed;
                    _unitOfWork.Repository <MetadataValue>().Insert(tmpMetadataValue);
                    _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, DossierLogType.Modify,
                                                                                                            string.Concat("Creato il metadato '", metadataValueModel.KeyName, "'"), CurrentDomainUser.Account));
                }
            }

            _unitOfWork.Repository <DossierLog>().Insert(BaseDossierService <DossierLog> .CreateLog(entityTransformed, null, entity.EndDate.HasValue ? DossierLogType.Close : DossierLogType.Modify,
                                                                                                    string.Concat(entity.EndDate.HasValue ? "Chiusura" : "Modifica", " del Dossier"), CurrentDomainUser.Account));

            return(base.BeforeUpdate(entity, entityTransformed));
        }