using FruitBank.Common.Interfaces; using LinqToDB.Mapping; using Mango.Nop.Core.Dtos; using Mango.Nop.Core.Extensions; using Newtonsoft.Json; using Nop.Core; using Nop.Core.Domain.Catalog; using Nop.Core.Domain.Common; using Nop.Core.Domain.Orders; using System.Globalization; using System.Linq.Expressions; namespace FruitBank.Common.Dtos; public class ProductDto : MgProductDto, IProductDto { [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] private static Expression> RelationWithGenericAttribute => (orderItemDto, genericAttribute) => orderItemDto.Id == genericAttribute.EntityId && genericAttribute.KeyGroup == nameof(Product); [Association(ThisKey = nameof(Id), OtherKey = nameof(GenericAttribute.EntityId), ExpressionPredicate = nameof(RelationWithGenericAttribute), CanBeNull = false)] public List GenericAttributes { get; set; } public ProductDto() :base() { } public ProductDto(int productId) : base(productId) { } public ProductDto(Product product) : base(product) { } [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public bool IsMeasurable { get => GenericAttributes.GetValueOrDefault(nameof(IMeasurable.IsMeasurable)); set { throw new Exception($"ProductDto.IsMeasurable not set"); //Direkt legyen exception! - J. var ga = GenericAttributes.SingleOrDefault(x => x.Key == nameof(IMeasurable.IsMeasurable))!; ga.Value = value.ToString(); } } [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public double Tare { get => GenericAttributes.GetValueOrDefault(nameof(ITare.Tare)); //get => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(ITare.Tare))?.Value ?? "0"); set => throw new Exception($"ProductDto.Tare not set"); } [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public double NetWeight { get => GenericAttributes.GetValueOrDefault(nameof(IMeasuringNetWeight.NetWeight)); //get => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(IMeasuringNetWeight.NetWeight))?.Value ?? "0"); set => throw new Exception($"ProductDto.NetWeight not set"); } [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public int IncomingQuantity { get => GenericAttributes.GetValueOrDefault(nameof(IIncomingQuantity.IncomingQuantity)); //get => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(IIncomingQuantity.IncomingQuantity))?.Value ?? "0"); set => throw new Exception($"ProductDto.IncomingQuantity not set"); } public bool HasMeasuringValues() => Id > 0 && NetWeight != 0 && IsMeasurable; }