aboutsummaryrefslogtreecommitdiff
path: root/RhSolutions.ProductSku/Product.cs
blob: 5a6f5fa7347cd154e79848ca6442485f722138ce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using Newtonsoft.Json;

namespace RhSolutions.Models;
public class Product : IDisposable
{
	[JsonIgnore]
	public string Id 
	{
		get => ProductSku.Id;
		set
		{
			ProductSku = new(value);
		}
	}
	public string Name { get; set; } = string.Empty;
	public ProductSku ProductSku { get; set; }
	public List<ProductSku> DeprecatedSkus { get; set; } = new();
	public List<string> ProductLines { get; set; } = new();
	public bool IsOnWarehouse { get; set; } = false;
	public Measure ProductMeasure { get; set; }
	public double? DeliveryMakeUp { get; set; }
	public decimal Price { get; set; }
	
	[JsonConstructor]
	public Product(string id, 
		string name,
		ProductSku productSku, 
		ProductSku[] deprecatedSkus, 
		string[] productLines, 
		bool isOnWarehouse, 
		int productMeasure, 
		int deliveryMakeUp,
		decimal price)
		{
			Id = id;
			Name = name;
			ProductSku = productSku;
			DeprecatedSkus = deprecatedSkus.ToList();
			ProductLines = productLines.ToList();
			IsOnWarehouse = isOnWarehouse;
			ProductMeasure = (Measure)productMeasure;
			DeliveryMakeUp = deliveryMakeUp;
			Price = price;
		}
	public Product(string sku)
	{
		ProductSku = new(sku);
	}
	
	public Product(ProductSku productSku)
	{
		ProductSku = productSku;
	}

	public override bool Equals(object? obj)
	{
		return obj is Product product &&
			   Name == product.Name &&
			   EqualityComparer<ProductSku>.Default.Equals(ProductSku, product.ProductSku) &&
			   DeprecatedSkus.SequenceEqual(product.DeprecatedSkus) &&
			   ProductLines.SequenceEqual(product.ProductLines) &&
			   IsOnWarehouse == product.IsOnWarehouse &&
			   ProductMeasure == product.ProductMeasure &&
			   DeliveryMakeUp == product.DeliveryMakeUp &&
			   Price == product.Price;
	}

	public override int GetHashCode()
	{
		HashCode hash = new HashCode();
		hash.Add(Name);
		hash.Add(ProductSku);
		DeprecatedSkus.ForEach(x => hash.Add(x));
		ProductLines.ForEach(x => hash.Add(x));
		hash.Add(IsOnWarehouse);
		hash.Add(ProductMeasure);
		hash.Add(DeliveryMakeUp);
		hash.Add(Price);
		return hash.ToHashCode();
	}

	public override string ToString()
	{
		return $"({ProductSku}) {Name}";
	}

	public void Dispose()
	{

	}
}