public override int SaveChanges()
        {
            DoBusinessRules();
            ObjectContext           ctx = ((IObjectContextAdapter)this).ObjectContext;
            List <ObjectStateEntry> objectStateEntryList =
                ctx.ObjectStateManager.GetObjectStateEntries(EntityState.Added
                                                             | EntityState.Modified
                                                             | EntityState.Deleted)
                .ToList();
            EntityState      state            = new EntityState();
            ObjectStateEntry objectStateEntry = null;

            if (objectStateEntryList.Count > 0)
            {
                objectStateEntry = objectStateEntryList.Where(p => p.Entity is BusinessRule).ToList()[0];
                state            = objectStateEntry.State;
            }
            SetDisplayValue(objectStateEntryList, state);
            if (objectStateEntry != null && state == EntityState.Modified)
            {
                var id = objectStateEntry.EntityKey.EntityKeyValues[0].Value.ToString();
                MakeUpdateJournalEntry(id, objectStateEntry.State.ToString(), objectStateEntryList.Where(p => p.Entity is BusinessRule).ToList()[0]);
            }
            if (objectStateEntry != null && state == EntityState.Deleted)
            {
                var id = objectStateEntry.EntityKey.EntityKeyValues[0].Value.ToString();
                ConditionContext brconditions = new ConditionContext();
                long?            longid       = Convert.ToInt64(id);
                var condlist = brconditions.Conditions.Where(p => p.RuleConditionsID.Value == longid);
                foreach (var cond in condlist)
                {
                    brconditions.Conditions.Remove(cond);
                }
                brconditions.SaveChanges();
                RuleActionContext brActions = new RuleActionContext();
                ActionArgsContext brArgs    = new ActionArgsContext();
                var actionlist = brActions.RuleActions.Where(p => p.RuleActionID.Value == longid);
                foreach (var action in actionlist)
                {
                    brActions.RuleActions.Remove(action);
                    var argslist = brArgs.ActionArgss.Where(p => p.ActionArgumentsID == action.Id);
                    foreach (var args in argslist)
                    {
                        brArgs.ActionArgss.Remove(args);
                    }
                    brArgs.SaveChanges();
                }
                brActions.SaveChanges();
            }
            var result = base.SaveChanges();

            if (objectStateEntryList.Count > 0)
            {
                if (objectStateEntry != null && state == EntityState.Added)
                {
                    var id = objectStateEntry.EntityKey.EntityKeyValues[0].Value.ToString();
                    MakeAddJournalEntry(id, state.ToString(), objectStateEntryList.Where(p => p.Entity is BusinessRule).ToList()[0]);
                }
            }
            return(result);
        }
        public static List <ActionArgs> GetActionArguments(List <long> ActionIds)
        {
            ActionArgsContext aac = new ActionArgsContext();

            return(aac.ActionArgss.Where(p => ActionIds.Contains(p.ActionArgumentsID.Value)).ToList());
        }
Esempio n. 3
0
        public IQueryable <T> FilterDropdown <T>(IUser User, IQueryable <T> list, string EntityName, string caller)
        {
            IQueryable <T> rejectedList     = list;
            bool           flag             = false;
            bool           flagIsElseAction = false;
            var            br = User.businessrules.Where(p => p.EntityName == EntityName);

            if (br != null && br.Count() > 0)
            {
                var ruleactiondb = new RuleActionContext();
                foreach (var _rule in br)
                {
                    foreach (var act in ruleactiondb.RuleActions.Where(p => p.RuleActionID == _rule.Id && p.AssociatedActionTypeID == 5))
                    {
                        ActionArgsContext actionargs = new ActionArgsContext();
                        var ruleconditionsdb         = new ConditionContext();
                        var arg = actionargs.ActionArgss.FirstOrDefault(p => p.ActionArgumentsID == act.Id && (p.ParameterName == caller || p.ParameterName == "All"));
                        if (arg != null)
                        {
                            foreach (var condition in ruleconditionsdb.Conditions.Where(p => p.RuleConditionsID == _rule.Id))
                            {
                                var PropName        = condition.PropertyName;
                                var EntityInfo      = ModelReflector.Entities.FirstOrDefault(p => p.Name == EntityName);
                                var PropInfo        = EntityInfo.Properties.FirstOrDefault(p => p.Name == PropName);
                                var AssociationInfo = EntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == PropName);

                                if (PropName.StartsWith("[") && PropName.EndsWith("]"))
                                {
                                    PropName = PropName.TrimStart("[".ToArray()).TrimEnd("]".ToArray());
                                    if (PropName.Contains("."))
                                    {
                                        var targetProperties = PropName.Split(".".ToCharArray());
                                        if (targetProperties.Length > 1)
                                        {
                                            AssociationInfo = EntityInfo.Associations.FirstOrDefault(p => p.AssociationProperty == targetProperties[0]);
                                            if (AssociationInfo != null)
                                            {
                                                EntityInfo = ModelReflector.Entities.FirstOrDefault(p => p.Name == AssociationInfo.Target);
                                                PropInfo   = EntityInfo.Properties.FirstOrDefault(p => p.Name == targetProperties[1]);
                                                PropName   = targetProperties[0];
                                            }
                                        }
                                    }
                                }

                                string         DataType   = PropInfo.DataType;
                                PropertyInfo[] properties = (typeof(T)).GetProperties().Where(p => p.PropertyType.FullName.StartsWith("System")).ToArray();
                                var            Property   = properties.FirstOrDefault(p => p.Name == PropName);
                                if (AssociationInfo != null)
                                {
                                    Type   controller                 = Type.GetType("GeneratorBase.MVC.Controllers." + AssociationInfo.Target + "Controller");
                                    object objController              = Activator.CreateInstance(controller, null);
                                    System.Reflection.MethodInfo mc   = controller.GetMethod("GetIdFromPropertyValue");
                                    object[]            MethodParams  = new object[] { PropInfo.Name, condition.Value };
                                    var                 obj           = mc.Invoke(objController, MethodParams);
                                    object              PropValue     = obj;
                                    IQueryable          query         = list;
                                    Type[]              exprArgTypes  = { query.ElementType };
                                    string              propToWhere   = condition.PropertyName;// filterCriteria.DropdownProperty;
                                    ParameterExpression p1            = Expression.Parameter(typeof(T), "p");
                                    MemberExpression    member        = Expression.PropertyOrField(p1, PropName);
                                    Type                targetType    = typeof(System.Int64?);
                                    dynamic             PropertyValue = PropValue;//Convert.ChangeType(PropValue, targetType);

                                    dynamic expr1 = Expression.Equal(member, Expression.Convert(Expression.Constant(PropertyValue), targetType));

                                    LambdaExpression     lambda     = Expression.Lambda <Func <T, bool> >(expr1, p1);
                                    MethodCallExpression methodCall = Expression.Call(typeof(Queryable), "Where", exprArgTypes, query.Expression, lambda);
                                    IQueryable           q          = query.Provider.CreateQuery(methodCall);
                                    //finalList = ((IQueryable<T>)q);
                                    rejectedList = rejectedList.Except((IQueryable <T>)q);
                                    flag         = true;
                                }
                                else
                                {
                                    object              PropValue    = condition.Value;// filterCriteria.PropertyValue;
                                    IQueryable          query        = list;
                                    Type[]              exprArgTypes = { query.ElementType };
                                    string              propToWhere  = condition.PropertyName;// filterCriteria.DropdownProperty;
                                    ParameterExpression p1           = Expression.Parameter(typeof(T), "p");
                                    MemberExpression    member       = Expression.PropertyOrField(p1, propToWhere);
                                    Type    targetType    = Property.PropertyType;
                                    dynamic PropertyValue = null;

                                    if (targetType.GetGenericArguments().Count() > 0)
                                    {
                                        if (targetType.GetGenericArguments()[0].Name == "DateTime" && condition.Value.ToLower().Contains("today"))
                                        {
                                            PropValue = ApplyRule.EvaluateDateTime("", condition.Value);
                                        }
                                    }

                                    if (targetType.IsGenericType && targetType.GetGenericTypeDefinition() == typeof(Nullable <>))
                                    {
                                        if (String.IsNullOrEmpty(Convert.ToString(PropValue)))
                                        {
                                            PropertyValue = null;
                                        }
                                        else
                                        {
                                            PropertyValue = Convert.ChangeType(PropValue, targetType.GetGenericArguments()[0]);
                                        }
                                    }
                                    else
                                    {
                                        PropertyValue = Convert.ChangeType(PropValue, targetType);
                                    }
                                    LambdaExpression lambda = Expression.Lambda <Func <T, bool> >(Expression.Equal(member, Expression.Convert(Expression.Constant(PropertyValue), targetType)), p1);
                                    if (condition.Operator == ">")
                                    {
                                        lambda = Expression.Lambda <Func <T, bool> >(Expression.GreaterThan(member, Expression.Convert(Expression.Constant(PropertyValue), targetType)), p1);
                                    }
                                    if (condition.Operator == "<")
                                    {
                                        lambda = Expression.Lambda <Func <T, bool> >(Expression.LessThan(member, Expression.Convert(Expression.Constant(PropertyValue), targetType)), p1);
                                    }
                                    if (condition.Operator == "<=")
                                    {
                                        lambda = Expression.Lambda <Func <T, bool> >(Expression.LessThanOrEqual(member, Expression.Convert(Expression.Constant(PropertyValue), targetType)), p1);
                                    }
                                    if (condition.Operator == ">=")
                                    {
                                        lambda = Expression.Lambda <Func <T, bool> >(Expression.GreaterThanOrEqual(member, Expression.Convert(Expression.Constant(PropertyValue), targetType)), p1);
                                    }
                                    if (condition.Operator == "!=")
                                    {
                                        lambda = Expression.Lambda <Func <T, bool> >(Expression.NotEqual(member, Expression.Convert(Expression.Constant(PropertyValue), targetType)), p1);
                                    }
                                    MethodCallExpression methodCall = Expression.Call(typeof(Queryable), "Where", exprArgTypes, query.Expression, lambda);
                                    IQueryable           q          = query.Provider.CreateQuery(methodCall);
                                    //finalList = ((IQueryable<T>)q);
                                    rejectedList = rejectedList.Except((IQueryable <T>)q);
                                    flag         = true;
                                }
                            }
                        }
                        if (act.IsElseAction)
                        {
                            flagIsElseAction = true;
                        }
                    }
                }
            }
            if (flag)
            {
                if (flagIsElseAction)
                {
                    return(rejectedList);
                }
                return(list.Except(rejectedList));
            }
            else
            {
                return(list);
            }
        }