diff --git a/FruitBank.Common/Dtos/MeasuringProductDto.cs b/FruitBank.Common/Dtos/MeasuringProductDto.cs
index bb42a09..3e7d9ef 100644
--- a/FruitBank.Common/Dtos/MeasuringProductDto.cs
+++ b/FruitBank.Common/Dtos/MeasuringProductDto.cs
@@ -6,9 +6,18 @@ namespace FruitBank.Common.Dtos;
public class MeasuringProductDto : ProductDto, IMeasuringProductDto
{
- public double? NetWeight { get; set; }
- public double? GrossWeight { get; set; }
- public bool? IsMeasurable { get; set; }
+ ///
+ /// Reference to StockQuantity, always equals!
+ ///
+ public int Quantity
+ {
+ get => StockQuantity;
+ set => StockQuantity = value;
+ }
+
+ public double NetWeight { get; set; }
+ public double GrossWeight { get; set; }
+ public bool IsMeasurable { get; set; }
public MeasuringProductDto() :base()
{ }
@@ -36,10 +45,12 @@ public class MeasuringProductDto : ProductDto, IMeasuringProductDto
base.CopyEntityValuesToDto(entity);
- NetWeight = measuringAttributeValues?.NetWeight;
- GrossWeight = measuringAttributeValues?.GrossWeight;
- IsMeasurable = measuringAttributeValues?.IsMeasurable;
+ if (measuringAttributeValues == null) return;
+
+ NetWeight = measuringAttributeValues.NetWeight;
+ GrossWeight = measuringAttributeValues.GrossWeight;
+ IsMeasurable = measuringAttributeValues.IsMeasurable;
}
- public bool HasValues() => Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null;
+ public bool HasMeasuringValues() => Id > 0 && NetWeight > 0 && GrossWeight > 0 && IsMeasurable;
}
diff --git a/FruitBank.Common/Entities/ShippingItem.cs b/FruitBank.Common/Entities/ShippingItem.cs
index 3a3dd27..d35894d 100644
--- a/FruitBank.Common/Entities/ShippingItem.cs
+++ b/FruitBank.Common/Entities/ShippingItem.cs
@@ -22,26 +22,27 @@ public class ShippingItem : MgEntityBase, IShippingItem
public int ShippingDocumentId { get; set; }
public string Name { get; set; }
- public int Quantity { get; set; }
+ public int QuantityOnDocument { get; set; }
- [Column(DataType = DataType.DecFloat)] public double NetWeight { get; set; }
- [Column(DataType = DataType.DecFloat)] public double GrossWeight { get; set; }
+ [Column(DataType = DataType.DecFloat)] public double NetWeightOnDocument { get; set; }
+ [Column(DataType = DataType.DecFloat)] public double GrossWeightOnDocument { get; set; }
- [Nullable]
- [Column(CanBeNull = true)]
+ //[Nullable]
+ //[Column(CanBeNull = true)]
[Range(1, 100000, ErrorMessage = "The MeasuredQuantity value should be a number between 1 and 100,000.")]
- public int? MeasuredQuantity { get; set; }
+ public int MeasuredQuantity { get; set; }
- [Nullable]
- [Column(DataType = DataType.DecFloat, CanBeNull = true)]
+ //[Nullable]
+ [Column(DataType = DataType.DecFloat, CanBeNull = false)]
[Range(1, 100000, ErrorMessage = "The MeasuredNetWeight value should be a number between 1 and 100,000.")]
- public double? MeasuredNetWeight { get; set; }
+ public double MeasuredNetWeight { get; set; }
- [Nullable]
- [Column(DataType = DataType.DecFloat, CanBeNull = true)]
+ //[Nullable]
+ //Precision = 1
+ [Column(DataType = DataType.DecFloat, CanBeNull = false)]
[Range(1, 100000, ErrorMessage = "The MeasuredGrossWeight value should be a number between 1 and 100,000.")]
- public double? MeasuredGrossWeight { get; set; }
+ public double MeasuredGrossWeight { get; set; }
public bool IsMeasurable { get; set; }
public bool IsMeasured { get; set; }
@@ -52,6 +53,9 @@ public class ShippingItem : MgEntityBase, IShippingItem
[LinqToDB.Mapping.Association(ThisKey = nameof(ShippingDocumentId), OtherKey = nameof(ShippingDocument.Id), CanBeNull = true)]
public ShippingDocument? ShippingDocument { get; set; }
+ [LinqToDB.Mapping.Association(ThisKey = nameof(Id), OtherKey = nameof(ShippingItemPallet.ShippingItemId), CanBeNull = true)]
+ public List? ShippingItemPallets { get; set; }
+
[SkipValuesOnUpdate] public DateTime Created { get; set; }
public DateTime Modified { get; set; }
diff --git a/FruitBank.Common/Entities/ShippingItemPallet.cs b/FruitBank.Common/Entities/ShippingItemPallet.cs
new file mode 100644
index 0000000..21dae0f
--- /dev/null
+++ b/FruitBank.Common/Entities/ShippingItemPallet.cs
@@ -0,0 +1,45 @@
+using System.ComponentModel.DataAnnotations;
+using FruitBank.Common.Interfaces;
+using LinqToDB.Mapping;
+using Mango.Nop.Core.Entities;
+using DataType = LinqToDB.DataType;
+
+namespace FruitBank.Common.Entities;
+
+[Table(Name = FruitBankConstClient.ShippingItemPalletDbTableName)]
+[System.ComponentModel.DataAnnotations.Schema.Table(FruitBankConstClient.ShippingItemPalletDbTableName)]
+public class ShippingItemPallet : MgEntityBase, IShippingItemPallet
+{
+ public int ShippingItemId { get; set; }
+
+ //[Nullable]
+ //[Column(CanBeNull = true)]
+ [Range(1, 100000, ErrorMessage = "The Quantity value should be a number between 1 and 100,000.")]
+ public int Quantity { get; set; }
+
+ //[Nullable]
+ [Column(DataType = DataType.DecFloat, CanBeNull = false)]
+ [Range(1, 100000, ErrorMessage = "The NetWeight value should be a number between 1 and 100,000.")]
+ public double NetWeight { get; set; }
+
+ //[Nullable]
+ [Column(DataType = DataType.DecFloat, CanBeNull = false)]
+ [Range(1, 100000, ErrorMessage = "The GrossWeight value should be a number between 1 and 100,000.")]
+ public double GrossWeight { get; set; }
+
+ [LinqToDB.Mapping.Association(ThisKey = nameof(ShippingItemId), OtherKey = nameof(ShippingItem.Id), CanBeNull = true)]
+ public ShippingItem? ShippingItem { get; set; }
+
+ [SkipValuesOnUpdate]
+ public int? CreatorId { get; set; }
+ public int? ModifierId { get; set; }
+
+ [SkipValuesOnUpdate]
+ public DateTime Created { get; set; }
+ public DateTime Modified { get; set; }
+
+ public bool IsValidMeasuringValues()
+ {
+ return ShippingItemId > 0 && Quantity > 0 && NetWeight > 0 && GrossWeight > 0;
+ }
+}
\ No newline at end of file
diff --git a/FruitBank.Common/FruitBankConstClient.cs b/FruitBank.Common/FruitBankConstClient.cs
index 0fa419b..b04a461 100644
--- a/FruitBank.Common/FruitBankConstClient.cs
+++ b/FruitBank.Common/FruitBankConstClient.cs
@@ -18,6 +18,7 @@ public static class FruitBankConstClient
public const string PartnerDbTableName = "fbPartner";
public const string ShippingDbTableName = "fbShipping";
public const string ShippingItemDbTableName = "fbShippingItem";
+ public const string ShippingItemPalletDbTableName = "fbShippingItemPallet";
public const string ShippingDocumentDbTableName = "fbShippingDocument";
diff --git a/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs b/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs
index ccced6a..0a7185c 100644
--- a/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs
+++ b/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs
@@ -2,12 +2,9 @@
namespace FruitBank.Common.Interfaces;
-public interface IMeasuringAttributeValues : IEntityInt
+public interface IMeasuringAttributeValues : IMeasuringWeights, IEntityInt
{
- double? NetWeight { get; set; }
- double? GrossWeight { get; set; }
+ bool IsMeasurable { get; set; }
- bool? IsMeasurable { get; set; }
-
- bool HasValues(); //=> Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null;
+ bool HasMeasuringValues(); //=> Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null;
}
\ No newline at end of file
diff --git a/FruitBank.Common/Interfaces/IMeasuringValues.cs b/FruitBank.Common/Interfaces/IMeasuringValues.cs
new file mode 100644
index 0000000..5788d5a
--- /dev/null
+++ b/FruitBank.Common/Interfaces/IMeasuringValues.cs
@@ -0,0 +1,6 @@
+namespace FruitBank.Common.Interfaces;
+
+public interface IMeasuringValues : IMeasuringWeights
+{
+ int Quantity { get; set; }
+}
\ No newline at end of file
diff --git a/FruitBank.Common/Interfaces/IMeasuringWeights.cs b/FruitBank.Common/Interfaces/IMeasuringWeights.cs
new file mode 100644
index 0000000..c808efc
--- /dev/null
+++ b/FruitBank.Common/Interfaces/IMeasuringWeights.cs
@@ -0,0 +1,7 @@
+namespace FruitBank.Common.Interfaces;
+
+public interface IMeasuringWeights
+{
+ double NetWeight { get; set; }
+ double GrossWeight { get; set; }
+}
\ No newline at end of file
diff --git a/FruitBank.Common/Interfaces/IShippingItem.cs b/FruitBank.Common/Interfaces/IShippingItem.cs
index 1c1cd94..5b44761 100644
--- a/FruitBank.Common/Interfaces/IShippingItem.cs
+++ b/FruitBank.Common/Interfaces/IShippingItem.cs
@@ -11,19 +11,20 @@ public interface IShippingItem : IEntityInt, ITimeStampInfo
int? ProductId { get; set; }
string Name { get; set; }
- int Quantity { get; set; }
- double NetWeight { get; set; }
- double GrossWeight { get; set; }
+ int QuantityOnDocument { get; set; }
+ double NetWeightOnDocument { get; set; }
+ double GrossWeightOnDocument { get; set; }
- int? MeasuredQuantity { get; set; }
- double? MeasuredNetWeight { get; set; }
- double? MeasuredGrossWeight { get; set; }
+ int MeasuredQuantity { get; set; }
+ double MeasuredNetWeight { get; set; }
+ double MeasuredGrossWeight { get; set; }
bool IsMeasurable { get; set; }
bool IsMeasured { get; set; }
public Product? Product { get; set; }
public ShippingDocument? ShippingDocument { get; set; }
+ public List? ShippingItemPallets { get; set; }
public bool IsValidMeasuringValues();
}
\ No newline at end of file
diff --git a/FruitBank.Common/Interfaces/IShippingItemPallet.cs b/FruitBank.Common/Interfaces/IShippingItemPallet.cs
new file mode 100644
index 0000000..796d8d1
--- /dev/null
+++ b/FruitBank.Common/Interfaces/IShippingItemPallet.cs
@@ -0,0 +1,16 @@
+using AyCode.Interfaces.Entities;
+using AyCode.Interfaces.TimeStampInfo;
+using FruitBank.Common.Entities;
+
+namespace FruitBank.Common.Interfaces;
+
+public interface IShippingItemPallet : IEntityInt, IMeasuringValues, ITimeStampInfo
+{
+ int ShippingItemId { get; set; }
+ public ShippingItem? ShippingItem { get; set; }
+
+ public int? CreatorId { get; set; }
+ public int? ModifierId { get; set; }
+
+ public bool IsValidMeasuringValues();
+}
\ No newline at end of file
diff --git a/FruitBank.Common/Models/MeasuringAttributeValues.cs b/FruitBank.Common/Models/MeasuringAttributeValues.cs
index ba9db14..e2f6061 100644
--- a/FruitBank.Common/Models/MeasuringAttributeValues.cs
+++ b/FruitBank.Common/Models/MeasuringAttributeValues.cs
@@ -7,20 +7,20 @@ public class MeasuringAttributeValues : IMeasuringAttributeValues
{
public int Id { get; set; }
- public double? NetWeight { get; set; }
- public double? GrossWeight { get; set; }
- public bool? IsMeasurable { get; set; }
+ public double NetWeight { get; set; }
+ public double GrossWeight { get; set; }
+ public bool IsMeasurable { get; set; }
public MeasuringAttributeValues()
{
}
- public MeasuringAttributeValues(int entityId, double? netWeight, double? grossWeight, bool? isMeasurable)
+ public MeasuringAttributeValues(int entityId, double netWeight, double grossWeight, bool isMeasurable)
{
Initialize(entityId, netWeight, grossWeight, isMeasurable);
}
- public void Initialize(int entityId, double? netWeight, double? grossWeight, bool? isMeasurable)
+ public void Initialize(int entityId, double netWeight, double grossWeight, bool isMeasurable)
{
Id = entityId;
NetWeight = netWeight;
@@ -28,7 +28,7 @@ public class MeasuringAttributeValues : IMeasuringAttributeValues
IsMeasurable = isMeasurable;
}
- public bool HasValues() => Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null;
+ public bool HasMeasuringValues() => Id > 0 && NetWeight > 0 && GrossWeight > 0 && IsMeasurable;
public override string ToString()
{
diff --git a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs
index 28e921f..73c63c9 100644
--- a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs
+++ b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs
@@ -1,13 +1,15 @@
using AyCode.Core.Enums;
using AyCode.Core.Loggers;
using AyCode.Utils.Extensions;
+using FruitBank.Common;
+using FruitBank.Common.Dtos;
using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces;
using FruitBank.Common.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs;
using System.Diagnostics.CodeAnalysis;
using System.Runtime.InteropServices.JavaScript;
-using FruitBank.Common;
+// ReSharper disable CompareOfFloatsByEqualityOperator
namespace FruitBankHybrid.Shared.Tests
{
@@ -154,9 +156,9 @@ namespace FruitBankHybrid.Shared.Tests
Assert.IsNotNull(shippingItem.Product, $"shippingItem.Product == null; shippingItem.Id: {shippingItem.ProductId}");
Assert.IsTrue(shippingItem.Id == shippingItemId);
- Assert.IsTrue(shippingItem.Quantity > 0, "Quantity == 0");
- Assert.IsTrue(shippingItem.NetWeight > 0, "NetWeight == 0");
- Assert.IsTrue(shippingItem.GrossWeight > 0, "GrossWeight == 0");
+ Assert.IsTrue(shippingItem.QuantityOnDocument > 0, "QuantityOnDocument == 0");
+ Assert.IsTrue(shippingItem.NetWeightOnDocument > 0, "NetWeightOnDocument == 0");
+ Assert.IsTrue(shippingItem.GrossWeightOnDocument > 0, "GrossWeightOnDocument == 0");
return shippingItem;
}
@@ -164,39 +166,50 @@ namespace FruitBankHybrid.Shared.Tests
[DataTestMethod]
[DataRow(1)]
[DataRow(2)]
- //[DataRow(3)]
- //[DataRow(4)]
+ [DataRow(3)]
+ [DataRow(4)]
+ [DataRow(5)]
public async Task UpdateShippingItemTest(int shippingItemId)
{
+ const int incQuantity = 1;
+ var incNetWeight = 2.137563300001;
+ var incGrossWeight = 3.75238200001;
+
var originalShippingItem = await GetShippingItemByIdTest(shippingItemId);
- var newName = GetFixtureName(originalShippingItem.Name);
+ var originalMeasuringProductDto = await GetMeasuringProductDtoByIdTest(originalShippingItem.ProductId!.Value, originalShippingItem.IsMeasurable);
+
+ Assert.IsTrue(originalShippingItem.IsMeasurable == originalMeasuringProductDto.IsMeasurable);
var shippingItem = await GetShippingItemByIdTest(shippingItemId);
- shippingItem.Name = newName;
- //shippingItem.MeasuredGrossWeight = 5;
- shippingItem = await _signalRClient.UpdateShippingItem(shippingItem);
- Assert.IsNotNull(shippingItem);
- Assert.IsNotNull(shippingItem.Product);
- Assert.IsTrue(shippingItem.Name == newName);
- Assert.IsTrue(shippingItem.Product.StockQuantity == originalShippingItem.Product!.StockQuantity);
+ shippingItem.MeasuredQuantity += incQuantity;
+ shippingItem.MeasuredNetWeight += incNetWeight;
+ shippingItem.MeasuredGrossWeight += incGrossWeight;
- shippingItem = await GetShippingItemByIdTest(shippingItemId);
-
- Assert.IsTrue(shippingItem.Name == newName);
- Assert.IsTrue(shippingItem.Product!.StockQuantity == originalShippingItem.Product.StockQuantity);
- //Assert.IsTrue(shippingItem.MeasuredGrossWeight is 5);
-
- shippingItem.Name = GetOriginalName(shippingItem.Name);
shippingItem = await _signalRClient.UpdateShippingItem(shippingItem);
Assert.IsNotNull(shippingItem);
Assert.IsNotNull(shippingItem.Product);
- shippingItem = await GetShippingItemByIdTest(shippingItemId);
+ //incNetWeight = double.Round(incNetWeight, 1);
+ //incGrossWeight = double.Round(incGrossWeight, 1);
- Assert.IsTrue(shippingItem.Name == originalShippingItem.Name);
- Assert.IsTrue(shippingItem.Product!.StockQuantity == originalShippingItem.Product.StockQuantity);
+ Assert.IsTrue(shippingItem.IsMeasured);
+ Assert.IsTrue(shippingItem.Product.StockQuantity == originalShippingItem.Product!.StockQuantity + incQuantity);
+
+ Assert.IsTrue(shippingItem.IsMeasurable == originalMeasuringProductDto.IsMeasurable);
+ Assert.IsTrue(shippingItem.MeasuredQuantity == originalShippingItem.MeasuredQuantity + incQuantity);
+
+
+ var measuringProductDto = await GetMeasuringProductDtoByIdTest(originalShippingItem.ProductId!.Value, shippingItem.IsMeasurable);
+
+ Assert.IsTrue(measuringProductDto.StockQuantity == originalMeasuringProductDto.StockQuantity + incQuantity);
+
+ Assert.IsTrue(shippingItem.MeasuredNetWeight == double.Round(originalShippingItem.MeasuredNetWeight + (shippingItem.IsMeasurable ? incNetWeight : 0), 1));
+ Assert.IsTrue(shippingItem.MeasuredGrossWeight == double.Round(originalShippingItem.MeasuredGrossWeight + (shippingItem.IsMeasurable ? incGrossWeight : 0), 1));
+
+ 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));
}
#endregion ShippingItem
@@ -289,22 +302,31 @@ namespace FruitBankHybrid.Shared.Tests
Assert.IsTrue(measuringProductDtos.Count != 0);
Assert.IsTrue(measuringProductDtos.All(x => !x.Name.IsNullOrEmpty() && !x.Deleted));
- Assert.IsTrue(measuringProductDtos.All(x => !x.IsMeasurable.GetValueOrDefault(false) || x.HasValues()));
+ Assert.IsTrue(measuringProductDtos.All(x => !x.IsMeasurable || x.HasMeasuringValues()));
}
- [TestMethod]
- [DataRow(1)]
- [DataRow(5)]
- [DataRow(33)]
- //[DataRow(3)]
- public async Task GetMeasuringProductDtoByIdTest(int productId)
+ //[TestMethod]
+ //[DataRow(1)]
+ //[DataRow(5)]
+ //[DataRow(33)]
+ public async Task GetMeasuringProductDtoByIdTest(int productId, bool isMeasurableExcepted)
{
var measuringProductDto = await _signalRClient.GetMeasuringProductDtoById(productId);
Assert.IsNotNull(measuringProductDto);
- Assert.IsTrue(measuringProductDto.HasValues());
- //Assert.IsTrue(measuringProductDto.HasValues());
+
+ if (isMeasurableExcepted) Assert.IsTrue(measuringProductDto.HasMeasuringValues(), $"{measuringProductDto.IsMeasurable}, {measuringProductDto.NetWeight}, {measuringProductDto.GrossWeight}");
+ else
+ {
+ Assert.IsTrue(measuringProductDto.Id > 0);
+ Assert.IsTrue(measuringProductDto.StockQuantity > 0);
+ Assert.IsTrue(measuringProductDto.NetWeight == 0);
+ Assert.IsTrue(measuringProductDto.GrossWeight == 0);
+ }
+
+ return measuringProductDto;
}
+
#endregion Product
#region Login
diff --git a/FruitBankHybrid.Shared/Pages/MeasuringIn.razor b/FruitBankHybrid.Shared/Pages/MeasuringIn.razor
index 40e687d..83db8db 100644
--- a/FruitBankHybrid.Shared/Pages/MeasuringIn.razor
+++ b/FruitBankHybrid.Shared/Pages/MeasuringIn.razor
@@ -103,8 +103,8 @@
@* *@
-
-
+
+