Compare commits

..

No commits in common. "328f906a3040463986c083a7a1b5e20707bbe764" and "677a33c706f1d96e76960f477ee186ef04fb9bf1" have entirely different histories.

10 changed files with 48 additions and 74 deletions

View File

@ -9,7 +9,6 @@ namespace FruitBank.Common.Entities;
public class Files : MgEntityBase, IFiles public class Files : MgEntityBase, IFiles
{ {
public string FileName { get; set; } public string FileName { get; set; }
public string FileSubPath { get; set; }
public string FileExtension { get; set; } public string FileExtension { get; set; }
public string RawText { get; set; } public string RawText { get; set; }
public string FileHash { get; set; } public string FileHash { get; set; }

View File

@ -6,9 +6,6 @@ namespace FruitBank.Common.Interfaces;
public interface IFiles: IEntityInt, ITimeStampInfo public interface IFiles: IEntityInt, ITimeStampInfo
{ {
public string FileName { get; set; } public string FileName { get; set; }
public string FileSubPath { get; set; }
public string FileExtension { get; set; } public string FileExtension { get; set; }
public string RawText { get; set; } public string RawText { get; set; }
public string FileHash { get; set; }
public bool IsCompressed { get; set; }
} }

View File

@ -19,7 +19,6 @@ public interface IStockSignalREndpointCommon
public Task<List<StockTakingItemPallet>?> GetStockTakingItemPallets(); public Task<List<StockTakingItemPallet>?> GetStockTakingItemPallets();
public Task<List<StockTakingItemPallet>?> GetStockTakingItemPalletsByProductId(int productId); public Task<List<StockTakingItemPallet>?> GetStockTakingItemPalletsByProductId(int productId);
public Task<StockTaking?> CloseStockTaking(int stockTakingId);
public Task<StockTakingItemPallet?> AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet); public Task<StockTakingItemPallet?> AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet);
public Task<StockTakingItemPallet?> UpdateStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet); public Task<StockTakingItemPallet?> UpdateStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet);
} }

View File

@ -107,22 +107,19 @@
private async Task ReloadDataFromDb(bool forceReload = false) private async Task ReloadDataFromDb(bool forceReload = false)
{ {
LoadingPanelVisibility.Visible = true; LoadingPanelVisibility.Visible = true;
using (await ObjectLock.GetSemaphore<OrderDto>().UseWaitAsync())
if (IsMasterGrid)
{ {
using (await ObjectLock.GetSemaphore<OrderDto>().UseWaitAsync()) if (OrderDtos == null) OrderDtos = await FruitBankSignalRClient.GetAllOrderDtos() ?? [];
else if (OrderDtos.Count == 0 || forceReload)
{ {
if (OrderDtos == null) OrderDtos = await FruitBankSignalRClient.GetAllOrderDtos() ?? []; OrderDtos.Clear();
else if (OrderDtos.Count == 0 || forceReload) OrderDtos.AddRange(await FruitBankSignalRClient.GetAllOrderDtos() ?? []);
{
OrderDtos.Clear();
OrderDtos.AddRange(await FruitBankSignalRClient.GetAllOrderDtos() ?? []);
}
} }
//if (forceReload)
Grid?.Reload();
} }
//if (forceReload)
Grid?.Reload();
LoadingPanelVisibility.Visible = false; LoadingPanelVisibility.Visible = false;
} }

View File

@ -179,11 +179,11 @@
var productDto = (ProductDto)e.DataItem; var productDto = (ProductDto)e.DataItem;
// if (e.Grid.IsDetailRowExpanded(e.VisibleIndex)) if (e.Grid.IsDetailRowExpanded(e.VisibleIndex))
// { {
// _currentOrderDtos = null; _currentOrderDtos = null;
// _currentOrderDtos = productDto != null ? await GetOrderDtosFromDbAsync(productDto.Id) : []; _currentOrderDtos = productDto != null ? await GetOrderDtosFromDbAsync(productDto.Id) : [];
// } }
} }
protected async Task OnActiveTabChanged(int activeTabIndex, int productId) protected async Task OnActiveTabChanged(int activeTabIndex, int productId)
@ -192,11 +192,11 @@
switch (_activeTabIndex) switch (_activeTabIndex)
{ {
case 1: case 0:
_currentOrderDtos = null; //_currentOrderDtos = null;
_currentOrderDtos = await GetOrderDtosFromDbAsync(productId); _currentOrderDtos = await GetOrderDtosFromDbAsync(productId);
break; break;
case 2: case 1:
_currentOrderItemDtos = null; _currentOrderItemDtos = null;
_currentOrderItemDtos = await GetOrderItemDtosFromDbAsync(productId); _currentOrderItemDtos = await GetOrderItemDtosFromDbAsync(productId);
break; break;

View File

@ -94,7 +94,7 @@
{ {
private readonly string[] _pdfFiles = private readonly string[] _pdfFiles =
[ [
"1_Albaran_AH25007715.pdf", "1_Albaran_AH25007715.pdf",
"2_BANK FRA.pdf", "2_BANK FRA.pdf",
"3_BP-30M35_20251113_163816.pdf" "3_BP-30M35_20251113_163816.pdf"
]; ];
@ -110,26 +110,16 @@
private async Task OnDataItemChangedAsync(object? dataItem) private async Task OnDataItemChangedAsync(object? dataItem)
{ {
if (dataItem is not ShippingDocument && dataItem is not ShippingItem) return; @if (dataItem is not ShippingDocument && dataItem is not ShippingItem) return;
ShippingDocument? shippingDocument = null; // Store the PDF to render
_randomPdf = _pdfFiles[Random.Shared.Next(_pdfFiles.Length)];
_currentPdfToRender = $"_content/FruitBankHybrid.Shared/uploads/{_randomPdf}";
if (dataItem is ShippingItem shippingItem) shippingDocument = shippingItem.ShippingDocument; // If MgLazyLoadContent is already visible, render the PDF immediately
else shippingDocument = dataItem as ShippingDocument; if (_lazyContentRef is { IsVisible: true })
if (shippingDocument == null) return;
if (shippingDocument.ShippingDocumentToFiles?.Count > 0)
{ {
// Store the PDF to render await _lazyContentRef.TriggerContentVisibleAsync();
_randomPdf = _pdfFiles[Random.Shared.Next(_pdfFiles.Length)];
_currentPdfToRender = $"_content/FruitBankHybrid.Shared/uploads/{_randomPdf}";
// If MgLazyLoadContent is already visible, render the PDF immediately
if (_lazyContentRef is { IsVisible: true })
{
await _lazyContentRef.TriggerContentVisibleAsync();
}
} }
} }

View File

@ -12,7 +12,7 @@
@typeparam TPalletItem where TPalletItem : class, IMeasuringItemPalletBase @typeparam TPalletItem where TPalletItem : class, IMeasuringItemPalletBase
<DxFormLayout Context="ctxFromLayoutPallet" Data="@PalletItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100 measuring-form-layout" <DxFormLayout Context="ctxFromLayoutPallet" Data="@PalletItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100 measuring-form-layout"
ItemUpdating="@((pair) => OnItemUpdating(pair.Key, pair.Value, PalletItem))" Enabled="Editable"> ItemUpdating="@((pair) => OnItemUpdating(pair.Key, pair.Value, PalletItem))" Enabled="IsEditable">
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1" BeginRow="true"> <DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1" BeginRow="true">
<b>@(MeasuringIndex). MÉRÉS</b> <b>@(MeasuringIndex). MÉRÉS</b>
@ -21,24 +21,24 @@
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.PalletWeight)))" <DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.PalletWeight)))"
Field="@nameof(ShippingItemPallet.PalletWeight)" Field="@nameof(ShippingItemPallet.PalletWeight)"
Enabled="@(Editable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)" Enabled="@(IsEditable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
Caption="Rakl.súly(kg)" ColSpanMd="2" /> Caption="Rakl.súly(kg)" ColSpanMd="2" />
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.TareWeight)))" <DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.TareWeight)))"
Field="@nameof(ShippingItemPallet.TareWeight)" Field="@nameof(ShippingItemPallet.TareWeight)"
Enabled="@(Editable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)" Enabled="@(IsEditable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
Caption="Tára(kg)" ColSpanMd="2" /> Caption="Tára(kg)" ColSpanMd="2" />
@* <DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1" /> *@ @* <DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1" /> *@
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.TrayQuantity)))" <DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.TrayQuantity)))"
Field="@nameof(ShippingItemPallet.TrayQuantity)" Field="@nameof(ShippingItemPallet.TrayQuantity)"
Enabled="@(Editable && ProductId > 0)" Enabled="@(IsEditable && ProductId > 0)"
Caption="Rekesz/csomag" ColSpanMd="2" /> Caption="Rekesz/csomag" ColSpanMd="2" />
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.GrossWeight)))" <DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.GrossWeight)))"
Field="@nameof(ShippingItemPallet.GrossWeight)" Field="@nameof(ShippingItemPallet.GrossWeight)"
Enabled="@(Editable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)" Enabled="@(IsEditable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
Caption="Br.súly(kg)" ColSpanMd="2"> Caption="Br.súly(kg)" ColSpanMd="2">
</DxFormLayoutItem> </DxFormLayoutItem>
@ -48,13 +48,13 @@
</DxFormLayoutItem> </DxFormLayoutItem>
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="@(HasAuditButton ? 1 : 2)"> <DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="@(HasAuditButton ? 1 : 2)">
<DxButton Enabled="@(Editable && BtnSaveEnabled)" Text="@(PalletItem.Id == 0 ? "Mentés" : "Módosít")" Click="() => PalletItemSaveClick()" CssClass="w-100" /> <DxButton Enabled="@(IsEditable && BtnSaveEnabled)" Text="@(PalletItem.Id == 0 ? "Mentés" : "Módosít")" Click="() => PalletItemSaveClick()" CssClass="w-100" />
</DxFormLayoutItem> </DxFormLayoutItem>
@if (HasAuditButton) @if (HasAuditButton)
{ {
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1"> <DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1">
<DxButton Enabled="@(Editable && OrderItemPallet!.IsMeasuredAndValid(IsMeasurable) && !OrderItemPallet.IsAudited && IsMaxTrayQuantityValid)" <DxButton Enabled="@(IsEditable && OrderItemPallet!.IsMeasuredAndValid(IsMeasurable) && !OrderItemPallet.IsAudited && IsMaxTrayQuantityValid)"
Text="@(OrderItemPallet!.IsAudited ? "Jóváhagyva" : "Jóváhagy")" Click="() => PalletItemAuditedClick()" CssClass="w-100" /> Text="@(OrderItemPallet!.IsAudited ? "Jóváhagyva" : "Jóváhagy")" Click="() => PalletItemAuditedClick()" CssClass="w-100" />
</DxFormLayoutItem> </DxFormLayoutItem>
} }
@ -73,7 +73,7 @@
[Parameter] public int? AddOrUpdateSignalRTag { get; set; } = null; [Parameter] public int? AddOrUpdateSignalRTag { get; set; } = null;
[Parameter] public int? MaxTrayQuantity { get; set; } = null; [Parameter] public int? MaxTrayQuantity { get; set; } = null;
[Parameter] public bool Editable { get; set; } = true; [Parameter] public bool IsEditable { get; set; } = true;
//[Parameter] public EventCallback OnPalletItemSaveClick { get; set; } //[Parameter] public EventCallback OnPalletItemSaveClick { get; set; }
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemSaved { get; set; } [Parameter] public Func<TPalletItem?, Task>? OnPalletItemSaved { get; set; }
@ -81,7 +81,7 @@
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemAuditedClick { get; set; } [Parameter] public Func<TPalletItem?, Task>? OnPalletItemAuditedClick { get; set; }
//public bool LoadingPanelVisible { get; set; } = false; //public bool LoadingPanelVisible { get; set; } = false;
//public bool Editable => !HasAuditButton || (OrderItemPallet.IsAudited); //public bool IsEditable => !HasAuditButton || (OrderItemPallet.IsAudited);
public bool BtnSaveEnabled { get; set; } public bool BtnSaveEnabled { get; set; }
@ -93,7 +93,7 @@
private bool GetBtnSaveEnabled() private bool GetBtnSaveEnabled()
{ {
return Editable && PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured && IsMaxTrayQuantityValid; return IsEditable && PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured && IsMaxTrayQuantityValid;
} }
private bool IsMaxTrayQuantityValid => (!MaxTrayQuantity.HasValue || PalletItem.TrayQuantity <= MaxTrayQuantity.Value); private bool IsMaxTrayQuantityValid => (!MaxTrayQuantity.HasValue || PalletItem.TrayQuantity <= MaxTrayQuantity.Value);

View File

@ -40,10 +40,10 @@
<DxButton Text="Új" Enabled="@(_stockTakings.All(x => x.IsClosed))" Click="() => NewStockTakingClick()"></DxButton> <DxButton Text="Új" Enabled="@(_stockTakings.All(x => x.IsClosed))" Click="() => NewStockTakingClick()"></DxButton>
</DxFormLayoutItem> </DxFormLayoutItem>
<DxFormLayoutItem ColSpanMd="1"> <DxFormLayoutItem ColSpanMd="1">
<DxButton Text="Módosít" Enabled="@((SelectedStockTaking?.IsClosed ?? false) && false)" Click="() => UpdateStockTakingClick()"></DxButton> <DxButton Text="Módosít" Enabled="@(SelectedStockTaking?.IsClosed ?? false)" Click="() => UpdateStockTakingClick()"></DxButton>
</DxFormLayoutItem> </DxFormLayoutItem>
<DxFormLayoutItem ColSpanMd="1"> <DxFormLayoutItem ColSpanMd="1">
<DxButton Text="Lezárás" Enabled="@((!SelectedStockTaking?.IsClosed ?? false) && (SelectedStockTaking?.IsReadyForClose() ?? false))" Click="() => StockTakingCloseClick(SelectedStockTaking!.Id)"></DxButton> <DxButton Text="Lezárás" Enabled="@(SelectedStockTaking?.IsReadyForClose() ?? false)" Click="() => StockTakingCloseClick()"></DxButton>
</DxFormLayoutItem> </DxFormLayoutItem>
</DxFormLayout> </DxFormLayout>
@ -61,7 +61,7 @@
<span>@a</span> <span>@a</span>
} }
</div> </div>
<DxFormLayout Data="@SelectedStockTakingItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100" Enabled="@((!SelectedStockTaking?.IsClosed ?? false))"> <DxFormLayout Data="@SelectedStockTakingItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100">
<DxFormLayoutItem Context="ctxShippingItemFromLayoutItem" ColSpanMd="12"> <DxFormLayoutItem Context="ctxShippingItemFromLayoutItem" ColSpanMd="12">
@for (var index = 0; index < (SelectedStockTakingItem?.StockTakingItemPallets?.Count ?? 0); index++) @for (var index = 0; index < (SelectedStockTakingItem?.StockTakingItemPallets?.Count ?? 0); index++)
{ {
@ -70,7 +70,6 @@
<PalletItemComponent IsMeasurable="@SelectedStockTakingItem!.IsMeasurable" <PalletItemComponent IsMeasurable="@SelectedStockTakingItem!.IsMeasurable"
MeasuringIndex="@localI" MeasuringIndex="@localI"
Editable="@(!SelectedStockTaking?.IsClosed ?? false)"
PalletItem="@currentShippingItemPallet" PalletItem="@currentShippingItemPallet"
ProductId="@SelectedStockTakingItem.Product!.Id" ProductId="@SelectedStockTakingItem.Product!.Id"
AddOrUpdateSignalRTag="SignalRTags.AddOrUpdateMeasuredStockTakingItemPallet" AddOrUpdateSignalRTag="SignalRTags.AddOrUpdateMeasuredStockTakingItemPallet"
@ -143,18 +142,16 @@
// if (resultStockTaking == null) return; // if (resultStockTaking == null) return;
// _stockTakings.Add(resultStockTaking); // _stockTakings.Add(resultStockTaking);
await InvokeAsync(StateHasChanged); StateHasChanged();
} }
private async Task StockTakingCloseClick(int stockTakingId) private async Task StockTakingCloseClick()
{ {
var resultStockTaking = await FruitBankSignalRClient.CloseStockTaking(stockTakingId); // var resultStockTaking = await FruitBankSignalRClient.AddStockTaking(stockTaking);
if (resultStockTaking == null) return; // if (resultStockTaking == null) return;
_stockTakings.UpdateCollection(resultStockTaking, false); // _stockTakings.Add(resultStockTaking);
await StockTakingComboValueChanged(_stockTakings.FirstOrDefault(x => x.Id == resultStockTaking.Id)); StateHasChanged();
await InvokeAsync(StateHasChanged);
} }
private async Task StockTakingComboValueChanged(StockTaking? newValue) private async Task StockTakingComboValueChanged(StockTaking? newValue)
@ -166,7 +163,7 @@
SelectedStockTakingItem = _stockTakingItems.FirstOrDefault(); SelectedStockTakingItem = _stockTakingItems.FirstOrDefault();
await InvokeAsync(StateHasChanged); StateHasChanged();
} }
private void PrepareStockTakingItems(StockTaking? stockTaking) private void PrepareStockTakingItems(StockTaking? stockTaking)

View File

@ -127,7 +127,7 @@
else else
{ {
string? orderNote; string? orderNote;
if (!(orderNote = SelectedOrder?.OrderNotes.LastOrDefault(x => x.Note.StartsWith('*'))?.Note).IsNullOrWhiteSpace()) if (!(orderNote = SelectedOrder?.OrderNotes.LastOrDefault(x=>x.Note.StartsWith('*'))?.Note).IsNullOrWhiteSpace())
{ {
<div class="container-fluid p-0" style="margin-top: 20px"> <div class="container-fluid p-0" style="margin-top: 20px">
<b> Megjegyzés: </b><span>@(orderNote) </span> <b> Megjegyzés: </b><span>@(orderNote) </span>
@ -159,8 +159,7 @@
var isValid = selectedOrderItemDto.IsValidMeasuringValues(); var isValid = selectedOrderItemDto.IsValidMeasuringValues();
var isValidAndMeasured = isValid && selectedOrderItemDto.IsMeasuredAndValid(); // && selectedOrderItemDto.; var isValidAndMeasured = isValid && selectedOrderItemDto.IsMeasuredAndValid(); // && selectedOrderItemDto.;
if (isValid && !selectedOrderItemDto.AverageWeightIsValid) cssClass = "text-warning"; if (isValidAndMeasured) cssClass = "text-success";
else if (isValidAndMeasured) cssClass = "text-success";
else if (isValid) cssClass = string.Empty; else if (isValid) cssClass = string.Empty;
var displayText = $"{selectedOrderItemDto.ProductName} - [{trayQuantity}/{selectedOrderItemDto.Quantity} rekesz, {(selectedOrderItemDto.IsMeasurable ? "net.súly: " + selectedOrderItemDto.NetWeight + "kg." : "nem mérendő!")}]"; var displayText = $"{selectedOrderItemDto.ProductName} - [{trayQuantity}/{selectedOrderItemDto.Quantity} rekesz, {(selectedOrderItemDto.IsMeasurable ? "net.súly: " + selectedOrderItemDto.NetWeight + "kg." : "nem mérendő!")}]";
@ -185,7 +184,7 @@
<PalletItemComponent IsMeasurable="@selectedOrderItem.IsMeasurable" <PalletItemComponent IsMeasurable="@selectedOrderItem.IsMeasurable"
MeasuringIndex="@localI" MeasuringIndex="@localI"
Editable="@(!currentOrderItemPallet.IsAudited && !(SelectedOrder?.IsComplete ?? false))" IsEditable="@(!currentOrderItemPallet.IsAudited && !(SelectedOrder?.IsComplete ?? false))"
PalletItem="@currentOrderItemPallet" PalletItem="@currentOrderItemPallet"
ProductId="@selectedOrderItem.ProductId" ProductId="@selectedOrderItem.ProductId"
MaxTrayQuantity="@selectedOrderItem.Quantity" MaxTrayQuantity="@selectedOrderItem.Quantity"

View File

@ -326,10 +326,6 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
throw new NotImplementedException(); throw new NotImplementedException();
} }
public Task<StockTaking?> CloseStockTaking(int stockTakingId)
=> PostDataAsync<int, StockTaking?>(SignalRTags.CloseStockTaking, stockTakingId);
public async Task<StockTakingItemPallet?> AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet) public async Task<StockTakingItemPallet?> AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet)
{ {
throw new NotImplementedException(); throw new NotImplementedException();