private string GetEntityConnectionColumnName(EntitySchema activitySchema, EntityActivitiesOwnerInfo entityOwnerInfo) { string entityPrimaryColumnName = activitySchema.Columns .FirstOrDefault(column => column.IsLookupType && !column.UsageType.Equals(EntitySchemaColumnUsageType.Advanced) && column.ReferenceSchema.Name == entityOwnerInfo.EntitySchemaName && column.ColumnValueName.Contains(entityOwnerInfo.EntitySchemaName))?.ColumnValueName; return(entityPrimaryColumnName); }
/// <summary> /// <see cref="IEntityEventAsyncOperation.Execute"/> /// <remarks>Executes operation by transfering activities of entity owner to the new entity owner.</remarks> /// </summary> public void Execute(UserConnection userConnection, EntityEventAsyncOperationArgs arguments) { var operationArgs = (EntityOwnerEventAsyncOperationArgs)arguments; var ownerEntityInfo = new EntityActivitiesOwnerInfo { EntityId = operationArgs.EntityId, NewOwnerId = operationArgs.EntityColumnValues.GetTypedValue <Guid>(operationArgs.OwnerColumnName), OldOwnerId = operationArgs.OldEntityColumnValues.GetTypedValue <Guid>(operationArgs.OwnerColumnName), EntitySchemaName = operationArgs.EntitySchemaName }; new EntityActivitiesOwner(userConnection).Change(ownerEntityInfo); }
/// <summary> /// Changes owner of entity activities. /// <param name="entityOwnerInfo">Information about entity and owners of activities.</param> /// </summary> public virtual void Change(EntityActivitiesOwnerInfo entityOwnerInfo) { EntitySchema activitySchema = _userConnection.EntitySchemaManager.GetInstanceByName(_activityEntitySchemaName); string entityPrimaryColumnName = GetEntityConnectionColumnName(activitySchema, entityOwnerInfo); if (entityPrimaryColumnName.IsNotNullOrEmpty()) { Entity activityEntity = activitySchema.CreateEntity(_userConnection); activityEntity.UseAdminRights = false; foreach (var activityId in GetEntityOwnerActivitiesId(entityPrimaryColumnName, entityOwnerInfo)) { if (activityEntity.FetchFromDB(activityId)) { activityEntity.SetColumnValue("OwnerId", entityOwnerInfo.NewOwnerId); activityEntity.Save(false); DenyActivityManagingRights(activityId, GetUserIdByContact(entityOwnerInfo.OldOwnerId)); } } } }
private List <Guid> GetEntityOwnerActivitiesId(string entityPrimaryColumnName, EntityActivitiesOwnerInfo entityOwnerInfo) { Select select = GetEntityOwnerActivitiesSelect(entityPrimaryColumnName, entityOwnerInfo); return(select.ExecuteEnumerable(reader => reader.GetColumnValue <Guid>("Id")).ToList()); }
private Select GetEntityOwnerActivitiesSelect(string entityPrimaryColumnName, EntityActivitiesOwnerInfo entityOwnerInfo) { return(new Select(_userConnection) .Column("Id") .From("Activity") .Where("OwnerId") .IsEqual(Column.Parameter(entityOwnerInfo.OldOwnerId)) .And(entityPrimaryColumnName) .IsEqual(Column.Parameter(entityOwnerInfo.EntityId)) .And("TypeId") .IsNotEqual(Column.Parameter(ActivityConsts.EmailTypeUId)) .And("StatusId") .IsNotEqual(Column.Parameter(ActivityConsts.CanceledStatusUId)) .And("StatusId") .IsNotEqual(Column.Parameter(ActivityConsts.CompletedStatusUId)) as Select); }