From 94cc71513c81f8498d4824d3c8ee2cbc45f6d80f Mon Sep 17 00:00:00 2001 From: Loretta Date: Sat, 18 Oct 2025 08:43:26 +0200 Subject: [PATCH] improvements, fixes, etc... --- FruitBank.Common/Dtos/MeasuringProductDto.cs | 5 +---- FruitBank.Common/Dtos/OrderDto.cs | 15 +++++---------- FruitBank.Common/Dtos/ProductDto.cs | 14 +++++++++----- .../Interfaces/IMeasuringAttributeValues.cs | 2 +- .../Models/MeasuringAttributeValues.cs | 12 +++++------- .../FruitBankClientTests.cs | 5 +---- 6 files changed, 22 insertions(+), 31 deletions(-) diff --git a/FruitBank.Common/Dtos/MeasuringProductDto.cs b/FruitBank.Common/Dtos/MeasuringProductDto.cs index 3e7d9ef..524d727 100644 --- a/FruitBank.Common/Dtos/MeasuringProductDto.cs +++ b/FruitBank.Common/Dtos/MeasuringProductDto.cs @@ -16,7 +16,6 @@ public class MeasuringProductDto : ProductDto, IMeasuringProductDto } public double NetWeight { get; set; } - public double GrossWeight { get; set; } public bool IsMeasurable { get; set; } public MeasuringProductDto() :base() @@ -34,7 +33,6 @@ public class MeasuringProductDto : ProductDto, IMeasuringProductDto measuringAttributeValues.Id = Id; measuringAttributeValues.NetWeight = NetWeight; - measuringAttributeValues.GrossWeight = GrossWeight; measuringAttributeValues.IsMeasurable = IsMeasurable; } @@ -48,9 +46,8 @@ public class MeasuringProductDto : ProductDto, IMeasuringProductDto if (measuringAttributeValues == null) return; NetWeight = measuringAttributeValues.NetWeight; - GrossWeight = measuringAttributeValues.GrossWeight; IsMeasurable = measuringAttributeValues.IsMeasurable; } - public bool HasMeasuringValues() => Id > 0 && NetWeight > 0 && GrossWeight > 0 && IsMeasurable; + public bool HasMeasuringValues() => Id > 0 && NetWeight > 0 && IsMeasurable; } diff --git a/FruitBank.Common/Dtos/OrderDto.cs b/FruitBank.Common/Dtos/OrderDto.cs index 0b1f16a..2079ce1 100644 --- a/FruitBank.Common/Dtos/OrderDto.cs +++ b/FruitBank.Common/Dtos/OrderDto.cs @@ -13,6 +13,7 @@ using Nop.Core.Domain.Orders; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.Linq.Expressions; +using Mango.Nop.Core.Extensions; namespace FruitBank.Common.Dtos; @@ -47,17 +48,11 @@ public class OrderDto : MgOrderDto, IOrderDto public DateTime DateOfReceiptOrCreated => DateOfReceipt ?? CreatedOnUtc; [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] - public DateTime? DateOfReceipt - { - get - { - //return CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(IOrderDto.DateOfReceipt))?.Value); - - var dateOfReceipt = GenericAttributes.SingleOrDefault(x => x.Key == nameof(IOrderDto.DateOfReceipt))?.Value ?? string.Empty; - return dateOfReceipt.IsNullOrWhiteSpace() ? null : CommonHelper.To(dateOfReceipt); - } - } + public DateTime? DateOfReceipt => GenericAttributes.GetValueOrNull(nameof(IOrderDto.DateOfReceipt)); + //if (GenericAttributes.TryGetValue(nameof(IOrderDto.DateOfReceipt), out var value)) return value; + //var dateOfReceipt = GenericAttributes.SingleOrDefault(x => x.Key == nameof(IOrderDto.DateOfReceipt))?.Value ?? string.Empty; + //return dateOfReceipt.IsNullOrWhiteSpace() ? null : CommonHelper.To(dateOfReceipt); public OrderDto() :base() { } public OrderDto(int orderId) : base(orderId) diff --git a/FruitBank.Common/Dtos/ProductDto.cs b/FruitBank.Common/Dtos/ProductDto.cs index 130db3f..ba70940 100644 --- a/FruitBank.Common/Dtos/ProductDto.cs +++ b/FruitBank.Common/Dtos/ProductDto.cs @@ -1,6 +1,7 @@ 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; @@ -18,7 +19,7 @@ public class ProductDto : MgProductDto, IProductDto orderItemDto.Id == genericAttribute.EntityId && genericAttribute.KeyGroup == nameof(Product); - [Association(ThisKey = nameof(Id), OtherKey = nameof(GenericAttribute.EntityId), ExpressionPredicate = nameof(RelationWithGenericAttribute), CanBeNull = true)] + [Association(ThisKey = nameof(Id), OtherKey = nameof(GenericAttribute.EntityId), ExpressionPredicate = nameof(RelationWithGenericAttribute), CanBeNull = false)] public List GenericAttributes { get; set; } public ProductDto() :base() @@ -31,7 +32,7 @@ public class ProductDto : MgProductDto, IProductDto [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public bool IsMeasurable { - get => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(IMeasurable.IsMeasurable))?.Value ?? "false"); + get => GenericAttributes.GetValueOrDefault(nameof(IMeasurable.IsMeasurable)); set { throw new Exception($"ProductDto.IsMeasurable not set"); @@ -45,21 +46,24 @@ public class ProductDto : MgProductDto, IProductDto [NotColumn, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public double Tare { - get => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(ITare.Tare))?.Value ?? "0"); + 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 => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(IMeasuringNetWeight.NetWeight))?.Value ?? "0"); + 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 => CommonHelper.To(GenericAttributes.SingleOrDefault(x => x.Key == nameof(IIncomingQuantity.IncomingQuantity))?.Value ?? "0"); + 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"); } } \ No newline at end of file diff --git a/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs b/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs index 64aa088..173885e 100644 --- a/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs +++ b/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs @@ -2,7 +2,7 @@ namespace FruitBank.Common.Interfaces; -public interface IMeasuringAttributeValues : IEntityInt, IMeasuringWeights, IMeasurable +public interface IMeasuringAttributeValues : IEntityInt, IMeasuringNetWeight, IMeasurable { bool HasMeasuringValues(); //=> Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null; } \ No newline at end of file diff --git a/FruitBank.Common/Models/MeasuringAttributeValues.cs b/FruitBank.Common/Models/MeasuringAttributeValues.cs index 1a1064c..52cc8d3 100644 --- a/FruitBank.Common/Models/MeasuringAttributeValues.cs +++ b/FruitBank.Common/Models/MeasuringAttributeValues.cs @@ -8,30 +8,28 @@ public class MeasuringAttributeValues : IMeasuringAttributeValues public int Id { get; set; } public double NetWeight { get; set; } = int.MinValue; - public double GrossWeight { get; set; } = int.MinValue; public bool IsMeasurable { get; set; } = false; public MeasuringAttributeValues() { } - public MeasuringAttributeValues(int entityId, double netWeight, double grossWeight, bool isMeasurable) + public MeasuringAttributeValues(int entityId, double netWeight, bool isMeasurable) { - Initialize(entityId, netWeight, grossWeight, isMeasurable); + Initialize(entityId, netWeight, isMeasurable); } - public void Initialize(int entityId, double netWeight, double grossWeight, bool isMeasurable) + public void Initialize(int entityId, double netWeight, bool isMeasurable) { Id = entityId; NetWeight = netWeight; - GrossWeight = grossWeight; IsMeasurable = isMeasurable; } - public bool HasMeasuringValues() => Id > 0 && NetWeight > int.MinValue && GrossWeight > int.MinValue && IsMeasurable; + public bool HasMeasuringValues() => Id > 0 && NetWeight > int.MinValue && IsMeasurable; public override string ToString() { - return $"EntityId: {Id}; NetWeight: {NetWeight}; GrossWeight: {GrossWeight}; IsMeasurable: {IsMeasurable}"; + return $"EntityId: {Id}; NetWeight: {NetWeight}; IsMeasurable: {IsMeasurable}"; } } \ No newline at end of file diff --git a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs index 1a63b73..16feae6 100644 --- a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs +++ b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs @@ -167,7 +167,6 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(shippingItemSumWeight == measuringProductDto!.NetWeight, $"{shippingItem}; shippingItemSum NetWeight: {shippingItemSumWeight} == {measuringProductDto.NetWeight}"); shippingItemSumWeight = shippingItems.Where(x => x.IsMeasured && x.Id == shippingItem.Id).Sum(x => x.MeasuredGrossWeight); - Assert.IsTrue(shippingItemSumWeight == measuringProductDto.GrossWeight, $"{shippingItem}; shippingItemSum GrossWeight: {shippingItemSumWeight} == {measuringProductDto.GrossWeight}"); } } @@ -304,7 +303,6 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(measuringProductDto.StockQuantity == originalMeasuringProductDto.StockQuantity + incQuantity); Assert.IsTrue(measuringProductDto.NetWeight == double.Round(originalMeasuringProductDto.NetWeight + (shippingItem.IsMeasurable ? incNetWeight : 0), 1)); - Assert.IsTrue(measuringProductDto.GrossWeight == double.Round(originalMeasuringProductDto.GrossWeight + (shippingItem.IsMeasurable ? incGrossWeight : 0), 1)); Assert.IsTrue(shippingItem.ShippingItemPallets!.All(x => x.IsValidSafeMeasuringValues())); Assert.IsTrue(shippingItem.ShippingItemPallets!.All(x => x.IsValidMeasuringValues(shippingItem.IsMeasurable))); @@ -441,13 +439,12 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsNotNull(measuringProductDto); - if (isMeasurableExcepted) Assert.IsTrue(measuringProductDto.HasMeasuringValues(), $"{measuringProductDto.IsMeasurable}, {measuringProductDto.NetWeight}, {measuringProductDto.GrossWeight}"); + if (isMeasurableExcepted) Assert.IsTrue(measuringProductDto.HasMeasuringValues(), $"{measuringProductDto.IsMeasurable}, {measuringProductDto.NetWeight}"); else { Assert.IsTrue(measuringProductDto.Id > 0); Assert.IsTrue(measuringProductDto.StockQuantity >= 0); Assert.IsTrue(measuringProductDto.NetWeight == 0); - Assert.IsTrue(measuringProductDto.GrossWeight == 0); Assert.IsFalse(measuringProductDto.IsMeasurable); }