108 lines
3.8 KiB
C#
108 lines
3.8 KiB
C#
using System;
|
|
|
|
namespace Props.Shop.Framework
|
|
{
|
|
public class Filters
|
|
{
|
|
public Currency Currency { get; set; } = Currency.CAD;
|
|
private float minRatingNormalized = 0.8f;
|
|
public int MinRating
|
|
{
|
|
get
|
|
{
|
|
return (int)(minRatingNormalized * 100f);
|
|
}
|
|
set
|
|
{
|
|
if (value < 0 || value > 100) return;
|
|
minRatingNormalized = value / 100f;
|
|
}
|
|
}
|
|
public bool KeepUnrated { get; set; } = true;
|
|
public bool EnableUpperPrice { get; set; } = false;
|
|
private int upperPrice;
|
|
|
|
public int UpperPrice
|
|
{
|
|
get
|
|
{
|
|
return upperPrice;
|
|
}
|
|
set
|
|
{
|
|
if (EnableUpperPrice) upperPrice = value;
|
|
}
|
|
}
|
|
public int LowerPrice { get; set; }
|
|
public int MinPurchases { get; set; }
|
|
public bool KeepUnknownPurchaseCount { get; set; } = true;
|
|
public int MinReviews { get; set; }
|
|
public bool KeepUnknownReviewCount { get; set; } = true;
|
|
public bool EnableMaxShipping { get; set; }
|
|
private int maxShippingFee;
|
|
|
|
public int MaxShippingFee
|
|
{
|
|
get
|
|
{
|
|
return maxShippingFee;
|
|
}
|
|
set
|
|
{
|
|
if (EnableMaxShipping) maxShippingFee = value;
|
|
}
|
|
}
|
|
public bool KeepUnknownShipping { get; set; } = true;
|
|
|
|
public override bool Equals(object obj)
|
|
{
|
|
if (obj == null || GetType() != obj.GetType())
|
|
{
|
|
return false;
|
|
}
|
|
Filters other = (Filters)obj;
|
|
return
|
|
Currency == other.Currency &&
|
|
MinRating == other.MinRating &&
|
|
KeepUnrated == other.KeepUnrated &&
|
|
EnableUpperPrice == other.EnableUpperPrice &&
|
|
UpperPrice == other.UpperPrice &&
|
|
LowerPrice == other.LowerPrice &&
|
|
MinPurchases == other.MinPurchases &&
|
|
KeepUnknownPurchaseCount == other.KeepUnknownPurchaseCount &&
|
|
MinReviews == other.MinReviews &&
|
|
KeepUnknownReviewCount == other.KeepUnknownReviewCount &&
|
|
EnableMaxShipping == other.EnableMaxShipping &&
|
|
MaxShippingFee == other.MaxShippingFee &&
|
|
KeepUnknownShipping == other.KeepUnknownShipping;
|
|
|
|
}
|
|
|
|
public override int GetHashCode()
|
|
{
|
|
return HashCode.Combine(
|
|
Currency,
|
|
MinRating,
|
|
UpperPrice,
|
|
LowerPrice,
|
|
MinPurchases,
|
|
MinReviews,
|
|
MaxShippingFee);
|
|
}
|
|
public Filters Copy()
|
|
{
|
|
return (Filters)this.MemberwiseClone();
|
|
}
|
|
|
|
public bool Validate(ProductListing listing)
|
|
{
|
|
if (listing.Shipping == null && !KeepUnknownShipping || (EnableMaxShipping && listing.Shipping > MaxShippingFee)) return false;
|
|
float shippingDifference = listing.Shipping != null ? listing.Shipping.Value : 0;
|
|
if (!(listing.LowerPrice + shippingDifference >= LowerPrice && (!EnableUpperPrice || listing.UpperPrice + shippingDifference <= UpperPrice))) return false;
|
|
if ((listing.Rating == null && !KeepUnrated) && MinRating > (listing.Rating == null ? 0 : listing.Rating)) return false;
|
|
if ((listing.PurchaseCount == null && !KeepUnknownPurchaseCount) || MinPurchases > (listing.PurchaseCount == null ? 0 : listing.PurchaseCount)) return false;
|
|
if ((listing.ReviewCount == null && !KeepUnknownReviewCount) || MinReviews > (listing.ReviewCount == null ? 0 : listing.ReviewCount)) return false;
|
|
return true;
|
|
}
|
|
}
|
|
} |