Example #1
0
        public bool TryChangeEntityState(int entityInfoId, int entityOrganizationId, int entityTransitionId, out EntityStateChangeViewModel entityStateChangeViewModel)
        {
            if (!TryChangeEntityState(entityInfoId, entityOrganizationId, entityTransitionId))
            {
                entityStateChangeViewModel = null;
                return(false);
            }

            EntityStateTransition entityStateTransition = _entityRepository.GetEntityStateTransition(entityTransitionId);
            EntityOrganization    entityOrganization    = _entityRepository.GetEntityOrganization(entityInfoId, entityOrganizationId);

            entityStateChangeViewModel = new EntityStateChangeViewModel
            {
                EntityInfoId       = entityOrganization.EntityInfoId,
                OrganizationId     = entityOrganization.OrganizationId,
                EntityTransitions  = GetAccesibleEntityTransitionsFrom(entityStateTransition.EntityStateToId, entityOrganization.EntityTypeId, entityOrganization.OrganizationId),
                EntityStateChanged = new EntityStateChangedViewModel
                {
                    EntityStateId   = entityStateTransition.EntityStateToId,
                    EntityStateName = _styleContext.GetTranslation(entityStateTransition.EntityStateTo.NameCode)
                }
            };

            _entityRepository.UnitOfWork.SaveChanges();
            return(true);
        }
Example #2
0
        private EntityStateTransition ChangeEntityState(EntityInfo entityInfo, int entityStateTransitionId, int?organizationId, int?userId)
        {
            EntityStateTransition actualTransition   = null;
            EntityOrganization    entityOrganization = GetEntityOrganization(entityInfo, organizationId);

            if (entityOrganization != null)
            {
                EntityState           entityState = _entityRepository.GetEntityState(entityOrganization.EntityStateId);
                EntityStateTransition transition  = entityState.TransitionsFrom.SingleOrDefault(t => t.EntityStateToId == entityStateTransitionId);
                if (userId == null && _userContext.IsAuthenticated)
                {
                    userId = _userContext.User.Id;
                }
                if (transition != null)
                {
                    AddEntityProgress(
                        entityInfo,
                        new EntityProgress
                    {
                        UserId              = userId,
                        DateTime            = DateTime.UtcNow,
                        OrganizationId      = entityOrganization.OrganizationId,
                        EntityStateBeforeId = transition.EntityStateFromId,
                        EntityStateAfterId  = transition.EntityStateToId
                    }
                        );
                    entityOrganization.EntityStateId = transition.EntityStateToId;

                    actualTransition = transition;
                }
            }
            return(actualTransition);
        }
Example #3
0
        public bool TryChangeEntityState(EntityOrganization entityOrganization, int entityTransitionId, int?userId = null)
        {
            EntityStateTransition entityTransition = _entityRepository.GetEntityStateTransition(entityTransitionId);

            if (entityOrganization == null ||
                entityTransition == null ||
                entityTransition.EntityStateFromId != entityOrganization.EntityStateId ||
                !_userContext.HasOrganizationStateTransitionAccess(entityOrganization.OrganizationId, entityOrganization.EntityTypeId, entityTransition.Id))
            {
                return(false);
            }

            entityOrganization.EntityStateId = entityTransition.EntityStateToId;

            if (userId == null && _userContext.IsAuthenticated)
            {
                userId = _userContext.User.Id;
            }

            _entityRepository.Add(new EntityProgress
            {
                EntityInfoId        = entityOrganization.EntityInfoId,
                OrganizationId      = entityOrganization.OrganizationId,
                UserId              = userId,
                DateTime            = DateTime.UtcNow,
                EntityStateBeforeId = entityTransition.EntityStateFromId,
                EntityStateAfterId  = entityTransition.EntityStateToId
            });

            return(true);
        }
Example #4
0
        private bool HasAccess(Access access, IDictionary <int, EntityTypeAccessExt> entityTypeAccess)
        {
            if (access.EntityTypeId == null)
            {
                return(false);
            }

            if (!entityTypeAccess.ContainsKey(access.EntityTypeId.Value))
            {
                return(false);
            }

            EntityTypeAccessExt entityTypeAccessExt = entityTypeAccess[access.EntityTypeId.Value];

            if (access.EntityStateId != null)
            {
                return(entityTypeAccessExt.EntityStateAccess.ContainsKey(access.EntityStateId.Value) &&
                       entityTypeAccessExt.EntityStateAccess[access.EntityStateId.Value] >= access.AccessTypeId);
            }
            if (access.EntityStateTransitionId != null)
            {
                EntityStateTransition transition = _entityRepository.GetEntityStateTransition(access.EntityStateTransitionId.Value);
                if (transition == null)
                {
                    return(false);
                }

                int entityStateId = transition.EntityStateFromId ?? transition.EntityStateToId;
                return(entityTypeAccessExt.EntityStateTransitionAccess.Contains(transition.Id) &&
                       entityTypeAccessExt.EntityStateAccess.ContainsKey(entityStateId) &&
                       entityTypeAccessExt.EntityStateAccess[entityStateId] == Dom.AccessType.ReadWrite);
            }
            if (access.AccessTypeId == Dom.AccessType.Create)
            {
                if (entityTypeAccessExt.AccessTypeId >= Dom.AccessType.ReadWrite)
                {
                    IEnumerable <EntityStateTransition> entityStateTransitions = _entityRepository.GetInitialEntityStateTransitions(access.EntityTypeId.Value);
                    foreach (EntityStateTransition entityStateTransition in entityStateTransitions)
                    {
                        if (entityTypeAccessExt.EntityStateTransitionAccess.Contains(entityStateTransition.Id) &&
                            entityTypeAccessExt.EntityStateAccess.ContainsKey(entityStateTransition.EntityStateToId) &&
                            entityTypeAccessExt.EntityStateAccess[entityStateTransition.EntityStateToId] == Dom.AccessType.ReadWrite)
                        {
                            return(true);
                        }
                    }
                }
            }
            else if (entityTypeAccessExt.AccessTypeId >= access.AccessTypeId)
            {
                return(true);
            }
            return(false);
        }