From d7e58e28f525f492a1f69456fc0d055741228344 Mon Sep 17 00:00:00 2001 From: Loretta Date: Tue, 30 Sep 2025 18:18:18 +0200 Subject: [PATCH] improvements, fixes, etc... --- FruitBank.Common/Dtos/MeasuringProductDto.cs | 45 +++++++++++++++++++ FruitBank.Common/FruitBank.Common.csproj | 4 -- .../IFruitBankDataControllerCommon.cs | 6 ++- .../Interfaces/IMeasuringAttributeValues.cs | 8 +++- .../Interfaces/IMeasuringProductDto.cs | 7 +++ .../Interfaces/MeasuringAttributeValues.cs | 33 -------------- .../Models/MeasuringAttributeValues.cs | 37 +++++++++++++++ FruitBank.Common/SignalRs/SignalRTags.cs | 3 ++ .../FruitBankClientTests.cs | 25 +++++++++++ .../Layout/MainLayout.razor | 9 +++- .../Pages/MeasuringIn.razor | 23 +++++----- .../Pages/MeasuringIn.razor.cs | 34 ++++++-------- .../SignalRs/FruitBankSignalRClient.cs | 8 ++++ 13 files changed, 169 insertions(+), 73 deletions(-) create mode 100644 FruitBank.Common/Dtos/MeasuringProductDto.cs create mode 100644 FruitBank.Common/Interfaces/IMeasuringProductDto.cs delete mode 100644 FruitBank.Common/Interfaces/MeasuringAttributeValues.cs create mode 100644 FruitBank.Common/Models/MeasuringAttributeValues.cs diff --git a/FruitBank.Common/Dtos/MeasuringProductDto.cs b/FruitBank.Common/Dtos/MeasuringProductDto.cs new file mode 100644 index 0000000..bb42a09 --- /dev/null +++ b/FruitBank.Common/Dtos/MeasuringProductDto.cs @@ -0,0 +1,45 @@ +using FruitBank.Common.Interfaces; +using Mango.Nop.Core.Dtos; +using Nop.Core.Domain.Catalog; + +namespace FruitBank.Common.Dtos; + +public class MeasuringProductDto : ProductDto, IMeasuringProductDto +{ + public double? NetWeight { get; set; } + public double? GrossWeight { get; set; } + public bool? IsMeasurable { get; set; } + + public MeasuringProductDto() :base() + { } + public MeasuringProductDto(int productId) : base(productId) + { } + public MeasuringProductDto(Product product, IMeasuringAttributeValues? measuringAttributeValues) + { + CopyEntityValuesToDto(product, measuringAttributeValues); + } + + public void CopyDtoValuesToEntity(Product entity, IMeasuringAttributeValues measuringAttributeValues) + { + base.CopyDtoValuesToEntity(entity); + + measuringAttributeValues.Id = Id; + measuringAttributeValues.NetWeight = NetWeight; + measuringAttributeValues.GrossWeight = GrossWeight; + measuringAttributeValues.IsMeasurable = IsMeasurable; + } + + public void CopyEntityValuesToDto(Product entity, IMeasuringAttributeValues? measuringAttributeValues) + { + if (measuringAttributeValues != null && entity.Id != measuringAttributeValues.Id) + throw new Exception($"MeasuringProductDto->CopyEntityValuesToDto(Product entity, IMeasuringAttributeValues measuringAttributeValues); entity.Id != measuringAttributeValues.Id; entityId: {entity.Id}; measuringAttributeValues.Id: {measuringAttributeValues.Id}"); + + base.CopyEntityValuesToDto(entity); + + NetWeight = measuringAttributeValues?.NetWeight; + GrossWeight = measuringAttributeValues?.GrossWeight; + IsMeasurable = measuringAttributeValues?.IsMeasurable; + } + + public bool HasValues() => Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null; +} diff --git a/FruitBank.Common/FruitBank.Common.csproj b/FruitBank.Common/FruitBank.Common.csproj index ee2c594..030b2d0 100644 --- a/FruitBank.Common/FruitBank.Common.csproj +++ b/FruitBank.Common/FruitBank.Common.csproj @@ -43,8 +43,4 @@ - - - - diff --git a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs index d274b88..2b70232 100644 --- a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs +++ b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs @@ -1,4 +1,5 @@ -using FruitBank.Common.Entities; +using FruitBank.Common.Dtos; +using FruitBank.Common.Entities; using FruitBank.Common.Models; using Mango.Nop.Core.Dtos; using Mango.Nop.Core.Models; @@ -44,6 +45,9 @@ public interface IFruitBankDataControllerCommon #region Product public Task?> GetProductDtos(); + public Task?> GetAllMeasuringProductDtos(); + public Task GetMeasuringProductDtoById(int productId); + #endregion Product Task LoginMeasuringUser(MgLoginModelRequest loginModelRequest); diff --git a/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs b/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs index 07dd864..ccced6a 100644 --- a/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs +++ b/FruitBank.Common/Interfaces/IMeasuringAttributeValues.cs @@ -1,9 +1,13 @@ -namespace FruitBank.Common.Interfaces; +using AyCode.Interfaces.Entities; -public interface IMeasuringAttributeValues +namespace FruitBank.Common.Interfaces; + +public interface IMeasuringAttributeValues : IEntityInt { double? NetWeight { get; set; } double? GrossWeight { get; set; } bool? IsMeasurable { get; set; } + + bool HasValues(); //=> Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null; } \ No newline at end of file diff --git a/FruitBank.Common/Interfaces/IMeasuringProductDto.cs b/FruitBank.Common/Interfaces/IMeasuringProductDto.cs new file mode 100644 index 0000000..87802c2 --- /dev/null +++ b/FruitBank.Common/Interfaces/IMeasuringProductDto.cs @@ -0,0 +1,7 @@ +using Mango.Nop.Core.Interfaces; + +namespace FruitBank.Common.Interfaces; + +public interface IMeasuringProductDto : IProductDto, IMeasuringAttributeValues +{ +} \ No newline at end of file diff --git a/FruitBank.Common/Interfaces/MeasuringAttributeValues.cs b/FruitBank.Common/Interfaces/MeasuringAttributeValues.cs deleted file mode 100644 index eebcffb..0000000 --- a/FruitBank.Common/Interfaces/MeasuringAttributeValues.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Runtime; - -namespace FruitBank.Common.Interfaces; - -public class MeasuringAttributeValues : IMeasuringAttributeValues -{ - public double? NetWeight { get; set; } - public double? GrossWeight { get; set; } - public bool? IsMeasurable { get; set; } - - public MeasuringAttributeValues() - { - } - - public MeasuringAttributeValues(double? netWeight, double? grossWeight, bool? isMeasurable) - { - Initialize(netWeight, grossWeight, isMeasurable); - } - - public void Initialize(double? netWeight, double? grossWeight, bool? isMeasurable) - { - NetWeight = netWeight; - GrossWeight = grossWeight; - IsMeasurable = isMeasurable; - } - - public bool HasValues() => NetWeight != null && GrossWeight != null && IsMeasurable != null; - - public override string ToString() - { - return $"NetWeight: {NetWeight}; GrossWeight: {GrossWeight}; IsMeasurable: {IsMeasurable}"; - } -} \ No newline at end of file diff --git a/FruitBank.Common/Models/MeasuringAttributeValues.cs b/FruitBank.Common/Models/MeasuringAttributeValues.cs new file mode 100644 index 0000000..ba9db14 --- /dev/null +++ b/FruitBank.Common/Models/MeasuringAttributeValues.cs @@ -0,0 +1,37 @@ +using FruitBank.Common.Interfaces; +using System.Runtime; + +namespace FruitBank.Common.Models; + +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 MeasuringAttributeValues() + { + } + + 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) + { + Id = entityId; + NetWeight = netWeight; + GrossWeight = grossWeight; + IsMeasurable = isMeasurable; + } + + public bool HasValues() => Id > 0 && NetWeight != null && GrossWeight != null && IsMeasurable != null; + + public override string ToString() + { + return $"EntityId: {Id}; NetWeight: {NetWeight}; GrossWeight: {GrossWeight}; IsMeasurable: {IsMeasurable}"; + } +} \ No newline at end of file diff --git a/FruitBank.Common/SignalRs/SignalRTags.cs b/FruitBank.Common/SignalRs/SignalRTags.cs index dd2894f..64827de 100644 --- a/FruitBank.Common/SignalRs/SignalRTags.cs +++ b/FruitBank.Common/SignalRs/SignalRTags.cs @@ -37,6 +37,9 @@ public class SignalRTags : AcSignalRTags public const int GetProductDtos = 80; public const int GetProductDtoById = 81; + public const int GetAllMeasuringProductDtos = 82; + public const int GetMeasuringProductDtoById = 83; + public const int AuthenticateUser = 160; public const int RefreshToken = 200; diff --git a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs index 3b1c742..28e921f 100644 --- a/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs +++ b/FruitBankHybrid.Shared.Tests/FruitBankClientTests.cs @@ -280,6 +280,31 @@ namespace FruitBankHybrid.Shared.Tests Assert.IsTrue(productDto.All(x => !x.Name.IsNullOrEmpty() && !x.Deleted)); } + [TestMethod] + public async Task GetAllMeasuringProductDtosTest() + { + var measuringProductDtos = await _signalRClient.GetAllMeasuringProductDtos(); + + Assert.IsNotNull(measuringProductDtos); + 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())); + } + + [TestMethod] + [DataRow(1)] + [DataRow(5)] + [DataRow(33)] + //[DataRow(3)] + public async Task GetMeasuringProductDtoByIdTest(int productId) + { + var measuringProductDto = await _signalRClient.GetMeasuringProductDtoById(productId); + + Assert.IsNotNull(measuringProductDto); + Assert.IsTrue(measuringProductDto.HasValues()); + //Assert.IsTrue(measuringProductDto.HasValues()); + } #endregion Product #region Login diff --git a/FruitBankHybrid.Shared/Layout/MainLayout.razor b/FruitBankHybrid.Shared/Layout/MainLayout.razor index b602d09..87e7256 100644 --- a/FruitBankHybrid.Shared/Layout/MainLayout.razor +++ b/FruitBankHybrid.Shared/Layout/MainLayout.razor @@ -10,8 +10,13 @@
@if (LoggedInModel.IsLoggedIn) { - - @* Kijelentkezés *@ +
+ @($"{LoggedInModel.CustomerDto!.FullName} [{string.Join(", ", LoggedInModel.CustomerRoles.Where(x=>x.SystemName.Contains("Measuring")).Select(x => x.Name))}]") +
+ +
+ +
}
diff --git a/FruitBankHybrid.Shared/Pages/MeasuringIn.razor b/FruitBankHybrid.Shared/Pages/MeasuringIn.razor index a8089bc..40e687d 100644 --- a/FruitBankHybrid.Shared/Pages/MeasuringIn.razor +++ b/FruitBankHybrid.Shared/Pages/MeasuringIn.razor @@ -109,23 +109,19 @@ + Caption="MeasuredQuantity:" ColSpanMd="2" BeginRow="false"> + Caption="MeasuredGrossWeight:" ColSpanMd="2"> + Caption="MeasuredNetWeight:" ColSpanMd="2"> - Nem végezhető el a mérés, nincs megadva a ProductId! Jelezze a vezetőségnek... - + _errorText = "Nem végezhető el a mérés, nincs megadva a ProductId! Jelezze a vezetőségnek..."; } + + @if (!_errorText.IsNullOrWhiteSpace()) + { + + HIBA! @_errorText + + //_errorText = string.Empty; + } + } diff --git a/FruitBankHybrid.Shared/Pages/MeasuringIn.razor.cs b/FruitBankHybrid.Shared/Pages/MeasuringIn.razor.cs index 0800832..bfcc642 100644 --- a/FruitBankHybrid.Shared/Pages/MeasuringIn.razor.cs +++ b/FruitBankHybrid.Shared/Pages/MeasuringIn.razor.cs @@ -1,10 +1,12 @@ using AyCode.Core.Loggers; using DevExpress.Blazor; using FruitBank.Common.Entities; +using FruitBank.Common.Interfaces; using FruitBank.Common.Models; using FruitBankHybrid.Shared.Services.Loggers; using FruitBankHybrid.Shared.Services.SignalRs; using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Web; using ILogger = Mango.Nop.Core.Loggers.ILogger; namespace FruitBankHybrid.Shared.Pages @@ -29,6 +31,7 @@ namespace FruitBankHybrid.Shared.Pages [Inject] public required LoggedInModel LoggedInModel { get; set; } private ILogger _logger = null!; + private string _errorText; private List NotMeasuredShippings { get; set; } = null!; private Shipping? SelectedShipping { get; set; } @@ -40,10 +43,6 @@ namespace FruitBankHybrid.Shared.Pages private List _shippingDates = null!; - private string _userName = "Partner name"; - private string _message = string.Empty; - private readonly List<(string User, string Text)> _messages = []; - protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); @@ -155,9 +154,7 @@ namespace FruitBankHybrid.Shared.Pages var updatedShippingItem = await FruitBankSignalRClient.UpdateMeasuredShippingItem(shippingItem); if (updatedShippingItem == null) { - _logger.Error($"Sikertelen volt a shippingItem mentése! Id: {shippingItem.Id}"); - //TODO: - J. - + LogErrorAndDisplayText($"Sikertelen volt a shippingItem mentése! Id: {shippingItem.Id}"); return; } @@ -202,24 +199,19 @@ namespace FruitBankHybrid.Shared.Pages break; } - if (SelectedShippingItem.IsValidMeasuringValues()) - BtnSaveEnabled = true; + BtnSaveEnabled = SelectedShippingItem.IsValidMeasuringValues(); } - private async Task GetPartner() + private void LogErrorAndDisplayText(string errorText, Exception? ex = null) { - var measuringModel = new MeasuringModel(); + _errorText = errorText; + _logger.Error($"{errorText}", ex); + //Nem végezhető el a mérés, nincs megadva a ProductId! Jelezze a vezetőségnek... + } - if (int.TryParse(_message, out var partnerId)) - { - _message = string.Empty; - - measuringModel.Name = (await FruitBankSignalRClient.GetPartnerById(partnerId))?.Name!; - //measuringModel.Name = (await FruitBankSignalRClient.GetMeasuringModelByShippingId(partnerId))?.Name!; - } - - _messages.Add((_userName, measuringModel?.Name ?? "ERROR")); - //StateHasChanged(); + protected void OnAnyMeasuringValueKeyDown(KeyboardEventArgs e) + { + BtnSaveEnabled = SelectedShippingItem?.IsValidMeasuringValues() ?? false; } } } diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs index bcb2c4f..58eef2c 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs @@ -3,6 +3,7 @@ using AyCode.Core.Loggers; using AyCode.Services.Server.SignalRs; using AyCode.Services.SignalRs; using FruitBank.Common; +using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Interfaces; using FruitBank.Common.Models; @@ -104,6 +105,13 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task?> GetProductDtos() => GetAllAsync>(SignalRTags.GetProductDtos); + + public Task?> GetAllMeasuringProductDtos() + => GetAllAsync>(SignalRTags.GetAllMeasuringProductDtos); + + public Task GetMeasuringProductDtoById(int productId) + => GetByIdAsync(SignalRTags.GetMeasuringProductDtoById, productId); + #endregion Product #region Authenticate