From 3ce49ab578a16144ee24841b5e98e42238efadd3 Mon Sep 17 00:00:00 2001 From: Loretta Date: Sat, 4 Oct 2025 07:17:14 +0200 Subject: [PATCH] improvements, fixes, etc... --- FruitBank.Common/DocumentType.cs | 10 +++ FruitBank.Common/Entities/Files.cs | 19 ++++ FruitBank.Common/Entities/Partner.cs | 1 - FruitBank.Common/Entities/ShippingDocument.cs | 3 + .../Entities/ShippingDocumentToFiles.cs | 25 ++++++ FruitBank.Common/FruitBankConstClient.cs | 3 + FruitBank.Common/Interfaces/IFiles.cs | 11 +++ .../Interfaces/IShippingDocumentToFiles.cs | 16 ++++ .../Models/MeasuringAttributeValues.cs | 8 +- .../FruitBankClientTests.cs | 90 +++++++++++++------ 10 files changed, 154 insertions(+), 32 deletions(-) create mode 100644 FruitBank.Common/DocumentType.cs create mode 100644 FruitBank.Common/Entities/Files.cs create mode 100644 FruitBank.Common/Entities/ShippingDocumentToFiles.cs create mode 100644 FruitBank.Common/Interfaces/IFiles.cs create mode 100644 FruitBank.Common/Interfaces/IShippingDocumentToFiles.cs diff --git a/FruitBank.Common/DocumentType.cs b/FruitBank.Common/DocumentType.cs new file mode 100644 index 0000000..8193f34 --- /dev/null +++ b/FruitBank.Common/DocumentType.cs @@ -0,0 +1,10 @@ +namespace FruitBank.Common; + +public enum DocumentType : byte +{ + NotSet = 0, + Unknown = 5, + ShippingDocument = 10, + OrderForm = 15, + +} \ No newline at end of file diff --git a/FruitBank.Common/Entities/Files.cs b/FruitBank.Common/Entities/Files.cs new file mode 100644 index 0000000..34d626a --- /dev/null +++ b/FruitBank.Common/Entities/Files.cs @@ -0,0 +1,19 @@ +using FruitBank.Common.Interfaces; +using LinqToDB.Mapping; +using Mango.Nop.Core.Entities; + +namespace FruitBank.Common.Entities; + +[Table(Name = FruitBankConstClient.FilesDbTableName)] +[System.ComponentModel.DataAnnotations.Schema.Table(FruitBankConstClient.FilesDbTableName)] +public class Files : MgEntityBase, IFiles +{ + public string FileName { get; set; } + public string FileExtension { get; set; } + public string RawText { get; set; } + + + [SkipValuesOnUpdate] + public DateTime Created { get; set; } + public DateTime Modified { get; set; } +} \ No newline at end of file diff --git a/FruitBank.Common/Entities/Partner.cs b/FruitBank.Common/Entities/Partner.cs index ccc6f6e..be56228 100644 --- a/FruitBank.Common/Entities/Partner.cs +++ b/FruitBank.Common/Entities/Partner.cs @@ -23,7 +23,6 @@ public class Partner : MgEntityBase, IPartner public List? ShippingDocuments { get; set; } - [SkipValuesOnUpdate] public DateTime Created { get; set; } public DateTime Modified { get; set; } diff --git a/FruitBank.Common/Entities/ShippingDocument.cs b/FruitBank.Common/Entities/ShippingDocument.cs index bf98e52..2cf429e 100644 --- a/FruitBank.Common/Entities/ShippingDocument.cs +++ b/FruitBank.Common/Entities/ShippingDocument.cs @@ -27,6 +27,9 @@ public class ShippingDocument : MgEntityBase, IShippingDocument [Association(ThisKey = nameof(Id), OtherKey = nameof(ShippingItem.ShippingDocumentId), CanBeNull = true)] public List? ShippingItems { get; set; } + [Association(ThisKey = nameof(Id), OtherKey = nameof(FruitBank.Common.Entities.ShippingDocumentToFiles.ShippingDocumentId), CanBeNull = true)] + public List? ShippingDocumentToFiles { get; set; } + [SkipValuesOnUpdate] public DateTime Created { get; set; } diff --git a/FruitBank.Common/Entities/ShippingDocumentToFiles.cs b/FruitBank.Common/Entities/ShippingDocumentToFiles.cs new file mode 100644 index 0000000..d89574f --- /dev/null +++ b/FruitBank.Common/Entities/ShippingDocumentToFiles.cs @@ -0,0 +1,25 @@ +using FruitBank.Common.Interfaces; +using LinqToDB.Mapping; +using Mango.Nop.Core.Entities; + +namespace FruitBank.Common.Entities; + +[Table(Name = FruitBankConstClient.ShippingDocumentToFilesDbTableName)] +[System.ComponentModel.DataAnnotations.Schema.Table(FruitBankConstClient.ShippingDocumentToFilesDbTableName)] +public class ShippingDocumentToFiles : MgEntityBase, IShippingDocumentToFiles +{ + public int FilesId { get; set; } + public int ShippingDocumentId { get; set; } + public DocumentType DocumentType { get; set; } + + + [Association(ThisKey = nameof(FilesId), OtherKey = nameof(Files.Id), CanBeNull = true)] + public Files? ShippingDocumentFile { get; set; } + + [Association(ThisKey = nameof(ShippingDocumentId), OtherKey = nameof(ShippingDocument.Id), CanBeNull = true)] + public ShippingDocument? ShippingDocument { get; set; } + + + [SkipValuesOnUpdate] public DateTime Created { get; set; } + public DateTime Modified { get; set; } +} \ No newline at end of file diff --git a/FruitBank.Common/FruitBankConstClient.cs b/FruitBank.Common/FruitBankConstClient.cs index b04a461..2cb95e3 100644 --- a/FruitBank.Common/FruitBankConstClient.cs +++ b/FruitBank.Common/FruitBankConstClient.cs @@ -15,11 +15,14 @@ public static class FruitBankConstClient public static string DefaultHubName = "fbHub"; public static string LoggerHubName = "loggerHub"; + public const string FilesDbTableName = "fbFiles"; 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"; + public const string ShippingDocumentToFilesDbTableName = "fbShippingDocumentToFiles"; + //public static Guid[] DevAdminIds = new Guid[2] { Guid.Parse("dcf451d2-cc4c-4ac2-8c1f-da00041be1fd"), Guid.Parse("4cbaed43-2465-4d99-84f1-c8bc6b7025f7") }; diff --git a/FruitBank.Common/Interfaces/IFiles.cs b/FruitBank.Common/Interfaces/IFiles.cs new file mode 100644 index 0000000..9ff7cfc --- /dev/null +++ b/FruitBank.Common/Interfaces/IFiles.cs @@ -0,0 +1,11 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; + +namespace FruitBank.Common.Interfaces; + +public interface IFiles: IEntityInt, ITimeStampInfo +{ + public string FileName { get; set; } + public string FileExtension { get; set; } + public string RawText { get; set; } +} \ No newline at end of file diff --git a/FruitBank.Common/Interfaces/IShippingDocumentToFiles.cs b/FruitBank.Common/Interfaces/IShippingDocumentToFiles.cs new file mode 100644 index 0000000..9d97263 --- /dev/null +++ b/FruitBank.Common/Interfaces/IShippingDocumentToFiles.cs @@ -0,0 +1,16 @@ +using AyCode.Interfaces.Entities; +using AyCode.Interfaces.TimeStampInfo; +using FruitBank.Common.Entities; +using LinqToDB.DataProvider.SapHana; + +namespace FruitBank.Common.Interfaces; + +public interface IShippingDocumentToFiles : IEntityInt, ITimeStampInfo +{ + int FilesId { get; set; } + int ShippingDocumentId { get; set; } + DocumentType DocumentType { get; set; } + + Files? ShippingDocumentFile { get; set; } + ShippingDocument? ShippingDocument { get; set; } +} \ No newline at end of file diff --git a/FruitBank.Common/Models/MeasuringAttributeValues.cs b/FruitBank.Common/Models/MeasuringAttributeValues.cs index e2f6061..1a1064c 100644 --- a/FruitBank.Common/Models/MeasuringAttributeValues.cs +++ b/FruitBank.Common/Models/MeasuringAttributeValues.cs @@ -7,9 +7,9 @@ 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; } = int.MinValue; + public double GrossWeight { get; set; } = int.MinValue; + public bool IsMeasurable { get; set; } = false; public MeasuringAttributeValues() { @@ -28,7 +28,7 @@ public class MeasuringAttributeValues : IMeasuringAttributeValues IsMeasurable = isMeasurable; } - public bool HasMeasuringValues() => Id > 0 && NetWeight > 0 && GrossWeight > 0 && IsMeasurable; + public bool HasMeasuringValues() => Id > 0 && NetWeight > int.MinValue && GrossWeight > int.MinValue && IsMeasurable; public override string ToString() { diff --git a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs index 0b0f286..f3475f0 100644 --- a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs +++ b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs @@ -151,10 +151,25 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(shippingItems.All(si=>si.Product?.Id == si.ProductId), "shippingItem.Product == null"); } - //[TestMethod] - //[DataRow(1)] + [TestMethod] + [DataRow(1, true)] + [DataRow(2, true)] + [DataRow(3, false)] + [DataRow(4, false)] + public async Task GetShippingItemByIdTest(int shippingItemId, bool shippingDocumentFileExcepted) + { + var shippingItem = await GetShippingItemByIdAsync(shippingItemId); + + if (shippingDocumentFileExcepted) Assert.IsTrue(shippingItem.ShippingDocument?.ShippingDocumentToFiles?.FirstOrDefault()?.ShippingDocumentFile?.Id == 1); + else + { + Assert.IsNotNull(shippingItem.ShippingDocument); + Assert.IsTrue(shippingItem.ShippingDocument.ShippingDocumentToFiles?.Count == 0); + } + } + [return: NotNull] - public async Task GetShippingItemByIdTest(int shippingItemId) + public async Task GetShippingItemByIdAsync(int shippingItemId) { var shippingItem = await _signalRClient.GetShippingItemById(shippingItemId); @@ -170,23 +185,19 @@ namespace FruitBankHybrid.Shared.Tests } [DataTestMethod] - [DataRow(1)] - [DataRow(2)] - [DataRow(3)] - [DataRow(4)] - [DataRow(5)] - public async Task UpdateShippingItemTest(int shippingItemId) + [DataRow(1, -1, -2.137563300001, -3.75238200001)] + [DataRow(2, -1, -2.137563300001, 3.75238200001)] + [DataRow(3, 1, 2.137563300001, -3.75238200001)] + [DataRow(4, -1, 2.137563300001, 3.75238200001)] + [DataRow(5, 1, 2.137563300001, 3.75238200001)] + public async Task UpdateShippingItemTest(int shippingItemId, int incQuantity, double incNetWeight, double incGrossWeight) { - const int incQuantity = 1; - var incNetWeight = 2.137563300001; - var incGrossWeight = 3.75238200001; - - var originalShippingItem = await GetShippingItemByIdTest(shippingItemId); - var originalMeasuringProductDto = await GetMeasuringProductDtoByIdTest(originalShippingItem.ProductId!.Value, originalShippingItem.IsMeasurable); + var originalShippingItem = await GetShippingItemByIdAsync(shippingItemId); + var originalMeasuringProductDto = await GetMeasuringProductDtoByIdAsync(originalShippingItem.ProductId!.Value, originalShippingItem.IsMeasurable); Assert.IsTrue(originalShippingItem.IsMeasurable == originalMeasuringProductDto.IsMeasurable); - var shippingItem = await GetShippingItemByIdTest(shippingItemId); + var shippingItem = await GetShippingItemByIdAsync(shippingItemId); shippingItem.MeasuredQuantity += incQuantity; shippingItem.MeasuredNetWeight += incNetWeight; @@ -207,7 +218,7 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(shippingItem.MeasuredQuantity == originalShippingItem.MeasuredQuantity + incQuantity); - var measuringProductDto = await GetMeasuringProductDtoByIdTest(originalShippingItem.ProductId!.Value, shippingItem.IsMeasurable); + var measuringProductDto = await GetMeasuringProductDtoByIdAsync(originalShippingItem.ProductId!.Value, shippingItem.IsMeasurable); Assert.IsTrue(measuringProductDto.StockQuantity == originalMeasuringProductDto.StockQuantity + incQuantity); @@ -229,11 +240,26 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsNotNull(shippingDocuments); Assert.IsTrue(shippingDocuments.Count != 0); + Assert.IsTrue(shippingDocuments.Any(x => x.ShippingDocumentToFiles?.Count > 0)); } - //[TestMethod] - //[DataRow(2)] - public async Task GetShippingDocumentByIdTest(int shippingDocumentId) + [TestMethod] + [DataRow(2, true)] + [DataRow(3, false)] + [DataRow(4, false)] + public async Task GetShippingDocumentByIdTest(int shippingDocumentId, bool shippingDocumentFileExcepted) + { + var shippingDocument = await GetShippingDocumentByIdAsync(shippingDocumentId); + + if (shippingDocumentFileExcepted) Assert.IsTrue(shippingDocument.ShippingDocumentToFiles?.FirstOrDefault()?.ShippingDocumentFile?.Id == 1); + else + { + Assert.IsTrue(shippingDocument.ShippingDocumentToFiles?.Count == 0); + } + } + + [return: NotNull] + public async Task GetShippingDocumentByIdAsync(int shippingDocumentId) { var shippingDocument = await _signalRClient.GetShippingDocumentById(shippingDocumentId); @@ -247,14 +273,16 @@ namespace FruitBankHybrid.Shared.Tests [DataRow(2)] public async Task UpdateShippingDocumentTest(int shippingDocumentId) { - var shippingDocument = await GetShippingDocumentByIdTest(shippingDocumentId); + var shippingDocument = await GetShippingDocumentByIdAsync(shippingDocumentId); var newCountry = GetFixtureName(shippingDocument.Country); shippingDocument.Country = newCountry; await _signalRClient.UpdateShippingDocument(shippingDocument); - shippingDocument = await GetShippingDocumentByIdTest(shippingDocumentId); + shippingDocument = await GetShippingDocumentByIdAsync(shippingDocumentId); + Assert.IsTrue(shippingDocument.Country == newCountry); + Assert.IsTrue(shippingDocument!.ShippingDocumentToFiles?.FirstOrDefault()?.ShippingDocumentFile?.Id == 1); shippingDocument.Country = GetOriginalName(shippingDocument.Country); await _signalRClient.UpdateShippingDocument(shippingDocument); @@ -311,11 +339,17 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(measuringProductDtos.All(x => !x.IsMeasurable || x.HasMeasuringValues())); } - //[TestMethod] - //[DataRow(1)] - //[DataRow(5)] - //[DataRow(33)] - public async Task GetMeasuringProductDtoByIdTest(int productId, bool isMeasurableExcepted) + [TestMethod] + [DataRow(1, true)] + [DataRow(5, true)] + [DataRow(6, false)] + [DataRow(33, true)] + public async Task GetMeasuringProductDtoByIdTest(int productId, bool isMeasurableExcepted) + { + await GetMeasuringProductDtoByIdAsync(productId, isMeasurableExcepted); + } + + public async Task GetMeasuringProductDtoByIdAsync(int productId, bool isMeasurableExcepted) { var measuringProductDto = await _signalRClient.GetMeasuringProductDtoById(productId); @@ -328,6 +362,8 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(measuringProductDto.StockQuantity > 0); Assert.IsTrue(measuringProductDto.NetWeight == 0); Assert.IsTrue(measuringProductDto.GrossWeight == 0); + + Assert.IsFalse(measuringProductDto.IsMeasurable); } return measuringProductDto;