/// <summary>
		/// Constructs the filter
		/// </summary>
		/// <param name="dataValue">
		/// DataValue used to link the local with the foreign DataObject
		/// </param>
		/// <param name="valueToCompare">
		/// Foreign DataObject
		/// </param>
		public ForeignKeyFilter(DataType dtype, System.Reflection.MemberInfo member, object valueToCompare)
		{
			if (dtype == null)
			{
				throw new ArgumentNullException(nameof(dtype));
			}

			if (member == null)
			{
				throw new ArgumentNullException(nameof(member));
			}

			DataType = dtype;
			Member = member;
			ValueToCompare = valueToCompare;

			foreach (DataMember pk in dtype.PrimaryKey)
			{
				ValueCompareFilter pkFilter = new ValueCompareFilter();
				pkFilter.Member = pk;
				pkFilter.ValueToCompare = (IComparable) pk.Member.GetValue(ValueToCompare);

				base.InnerFilters.Add(pkFilter);
			}
		}
Ejemplo n.º 2
0
		/// <summary>
		/// Constructs the filter
		/// <para xml:lang="es">
		/// Construye el filtro
		/// </para>
		/// </summary>
		/// <param name="dataValue">
		/// DataValue used to link the local with the foreign DataObject
		/// <para xml:lang="es">
		/// Valor de datos utilizado para vincular el local con el DataObject externo
		/// </para>
		/// </param>
		/// <param name="valueToCompare">
		/// Foreign DataObject
		/// <para xml:lang="es">
		/// DataObject foraneo
		/// </para>
		/// </param>
		public ForeignKeyFilter(DataType dtype, System.Reflection.MemberInfo member, object valueToCompare)
		{
			if (dtype == null)
			{
				throw new ArgumentNullException(nameof(dtype));
			}

			if (member == null)
			{
				throw new ArgumentNullException(nameof(member));
			}

			DataType = dtype;
			Member = member;
			ValueToCompare = valueToCompare;

			DataType foreignKeyType = Data.Validation.MemberExpression.GetReturnType(member);

			foreach (DataMember pk in foreignKeyType.PrimaryKey)
			{
				ValueCompareFilter pkFilter = new ValueCompareFilter();
				pkFilter.Member = dtype[member.Name + "." + pk.Expression];
				pkFilter.ValueToCompare = (IComparable) pk.Expression.GetValue(ValueToCompare);

				Container.InnerFilters.Add(pkFilter);
			}
		}
Ejemplo n.º 3
0
        /// <summary>
        /// Constructs the filter
        /// </summary>
        /// <param name="dataValue">
        /// DataValue used to link the local with the foreign DataObject
        /// </param>
        /// <param name="valueToCompare">
        /// Foreign DataObject
        /// </param>
        public ForeignKeyFilter(DataType dtype, System.Reflection.MemberInfo member, object valueToCompare)
        {
            if (dtype == null)
            {
                throw new ArgumentNullException(nameof(dtype));
            }

            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }

            DataType       = dtype;
            Member         = member;
            ValueToCompare = valueToCompare;

            foreach (DataMember pk in dtype.PrimaryKey)
            {
                ValueCompareFilter pkFilter = new ValueCompareFilter();
                pkFilter.Member         = pk;
                pkFilter.ValueToCompare = (IComparable)pk.Member.GetValue(ValueToCompare);

                base.InnerFilters.Add(pkFilter);
            }
        }
Ejemplo n.º 4
0
		/// <summary>
		/// Copies all values entered by the user to a DavaValueInstance collection
		/// </summary>
		/// <param name="members">Collection where values will be copied to</param>
		public Filter GetFilter(MemberInfo member)
		{
			//validate arguments
			if (member == null) throw new ArgumentNullException(nameof(member));

			//filters
			Filter filter = null;

			DataType dtype = member.DeclaringType;
			Type returnType = MemberExpression.GetReturnType(member);

			//is this a single value member? (not a foreign key?)
			if (dtype.IsMapped(member.Name))
			{
				DataMember dmember = dtype[member.Name];

				#region Range filter

				//if it's a datetime or a numeric field, create range filter
				if (returnType.Equals(typeof(DateTime)) || returnType.IsNumeric())
				{
					//realted fields
					FormField fieldMin = null, fieldMax = null;

					//search corresponding field for this DataValueInstance
					foreach (FormField f in Fields)
					{
						if (f.Name == member.Name + "_0") fieldMin = f;
						if (f.Name == member.Name + "_1") fieldMax = f;
					}

					//if no controls where found, return no filter
					if (fieldMin == null && fieldMax == null)
					{
						return null;
					}

					//if no value was set, return no filter
					if (!RequiredValidator.HasValue(fieldMin.Value) && !RequiredValidator.HasValue(fieldMax.Value))
					{
						return null;
					}

					//if both values are set, create range filter
					if (RequiredValidator.HasValue(fieldMin.Value) && RequiredValidator.HasValue(fieldMax.Value))
					{
						filter = new RangeFilter(dmember, (IComparable) fieldMin.Value, (IComparable) fieldMax.Value);
					}

					//only min value is defined
					else if (RequiredValidator.HasValue(fieldMin.Value))
					{
						filter = new ValueCompareFilter(dmember, (IComparable) fieldMin.Value, CompareOperator.GreaterThanEqual);
					}

					//only max value is defined
					else if (RequiredValidator.HasValue(fieldMax.Value))
					{
						filter = new ValueCompareFilter(dmember, (IComparable) fieldMax.Value, CompareOperator.LessThanEqual);
					}
				}

				#endregion

				#region Single value filter

				//create single value filter
				else
				{
					//realted fields
					FormField field = Fields.Where(f => f.Name == member.Name).SingleOrDefault();

					//if field not found, return no filter
					if (field == null)
					{
						return null;
					}

					//if no value was set, return no filter
					if (!RequiredValidator.HasValue(field.Value))
					{
						return null;
					}

					//if its a string, make a LIKE filter
					else if (field.ValueType.Equals(typeof(string)))
					{
						filter = new LikeFilter(dmember, "%" + field.Value + "%");
					}

					//otherwise create a compare filter
					else
					{
						filter = new ValueCompareFilter(dmember, (IComparable) field.Value, CompareOperator.Equal);
					}
				}

				#endregion
			}
			//this is a foreign key
			else if (DataType.IsMapped(returnType) && dtype.IsForeignKey(member))
			{
				//realted fields
				FormField field = Fields.Where(f => f.Name == member.Name).SingleOrDefault();
				
				//if field not found, return no filter
				if (field == null)
				{
					return null;
				}

				//if no value was set, return no filter
				if (!RequiredValidator.HasValue(field.Value))
				{
					return null;
				}

				filter = new ForeignKeyFilter(dtype, member, field.Value);
			}

			return filter;
		}