Add stock taking close functionality and UI improvements
- Added CloseStockTaking method to IStockSignalREndpointCommon and implemented it in FruitBankSignalRClient. - Renamed IsEditable to Editable in PalletItemComponent.razor and updated all usages. - Updated StockTakingTemplate.razor: "Módosít" button is now always disabled, "Lezárás" button is enabled only when appropriate, and form layouts are disabled when stock taking is closed. - Improved async UI updates by using InvokeAsync(StateHasChanged). - Enhanced order note display and added warning state for invalid average weight in MeasuringOut.razor.
This commit is contained in:
parent
bba26c42da
commit
0368f0809a
|
|
@ -19,6 +19,7 @@ public interface IStockSignalREndpointCommon
|
|||
|
||||
public Task<List<StockTakingItemPallet>?> GetStockTakingItemPallets();
|
||||
public Task<List<StockTakingItemPallet>?> GetStockTakingItemPalletsByProductId(int productId);
|
||||
public Task<StockTaking?> CloseStockTaking(int stockTakingId);
|
||||
public Task<StockTakingItemPallet?> AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet);
|
||||
public Task<StockTakingItemPallet?> UpdateStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet);
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
@typeparam TPalletItem where TPalletItem : class, IMeasuringItemPalletBase
|
||||
|
||||
<DxFormLayout Context="ctxFromLayoutPallet" Data="@PalletItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100 measuring-form-layout"
|
||||
ItemUpdating="@((pair) => OnItemUpdating(pair.Key, pair.Value, PalletItem))" Enabled="IsEditable">
|
||||
ItemUpdating="@((pair) => OnItemUpdating(pair.Key, pair.Value, PalletItem))" Enabled="Editable">
|
||||
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1" BeginRow="true">
|
||||
<b>@(MeasuringIndex). MÉRÉS</b>
|
||||
|
|
@ -21,24 +21,24 @@
|
|||
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.PalletWeight)))"
|
||||
Field="@nameof(ShippingItemPallet.PalletWeight)"
|
||||
Enabled="@(IsEditable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
|
||||
Enabled="@(Editable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
|
||||
Caption="Rakl.súly(kg)" ColSpanMd="2" />
|
||||
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.TareWeight)))"
|
||||
Field="@nameof(ShippingItemPallet.TareWeight)"
|
||||
Enabled="@(IsEditable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
|
||||
Enabled="@(Editable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
|
||||
Caption="Tára(kg)" ColSpanMd="2" />
|
||||
|
||||
@* <DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1" /> *@
|
||||
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.TrayQuantity)))"
|
||||
Field="@nameof(ShippingItemPallet.TrayQuantity)"
|
||||
Enabled="@(IsEditable && ProductId > 0)"
|
||||
Enabled="@(Editable && ProductId > 0)"
|
||||
Caption="Rekesz/csomag" ColSpanMd="2" />
|
||||
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" CaptionCssClass="@(GetOrderItemPalletsCssClassNames(nameof(IMeasuringItemPalletBase.GrossWeight)))"
|
||||
Field="@nameof(ShippingItemPallet.GrossWeight)"
|
||||
Enabled="@(IsEditable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
|
||||
Enabled="@(Editable && IsMeasurable && ProductId > 0)" Visible="@(IsMeasurable)"
|
||||
Caption="Br.súly(kg)" ColSpanMd="2">
|
||||
</DxFormLayoutItem>
|
||||
|
||||
|
|
@ -48,13 +48,13 @@
|
|||
</DxFormLayoutItem>
|
||||
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="@(HasAuditButton ? 1 : 2)">
|
||||
<DxButton Enabled="@(IsEditable && BtnSaveEnabled)" Text="@(PalletItem.Id == 0 ? "Mentés" : "Módosít")" Click="() => PalletItemSaveClick()" CssClass="w-100" />
|
||||
<DxButton Enabled="@(Editable && BtnSaveEnabled)" Text="@(PalletItem.Id == 0 ? "Mentés" : "Módosít")" Click="() => PalletItemSaveClick()" CssClass="w-100" />
|
||||
</DxFormLayoutItem>
|
||||
|
||||
@if (HasAuditButton)
|
||||
{
|
||||
<DxFormLayoutItem Context="ctxFromLayoutItemPallet" ColSpanMd="1">
|
||||
<DxButton Enabled="@(IsEditable && OrderItemPallet!.IsMeasuredAndValid(IsMeasurable) && !OrderItemPallet.IsAudited && IsMaxTrayQuantityValid)"
|
||||
<DxButton Enabled="@(Editable && OrderItemPallet!.IsMeasuredAndValid(IsMeasurable) && !OrderItemPallet.IsAudited && IsMaxTrayQuantityValid)"
|
||||
Text="@(OrderItemPallet!.IsAudited ? "Jóváhagyva" : "Jóváhagy")" Click="() => PalletItemAuditedClick()" CssClass="w-100" />
|
||||
</DxFormLayoutItem>
|
||||
}
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
[Parameter] public int? AddOrUpdateSignalRTag { get; set; } = null;
|
||||
|
||||
[Parameter] public int? MaxTrayQuantity { get; set; } = null;
|
||||
[Parameter] public bool IsEditable { get; set; } = true;
|
||||
[Parameter] public bool Editable { get; set; } = true;
|
||||
|
||||
//[Parameter] public EventCallback OnPalletItemSaveClick { get; set; }
|
||||
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemSaved { get; set; }
|
||||
|
|
@ -81,7 +81,7 @@
|
|||
[Parameter] public Func<TPalletItem?, Task>? OnPalletItemAuditedClick { get; set; }
|
||||
|
||||
//public bool LoadingPanelVisible { get; set; } = false;
|
||||
//public bool IsEditable => !HasAuditButton || (OrderItemPallet.IsAudited);
|
||||
//public bool Editable => !HasAuditButton || (OrderItemPallet.IsAudited);
|
||||
public bool BtnSaveEnabled { get; set; }
|
||||
|
||||
|
||||
|
|
@ -93,7 +93,7 @@
|
|||
|
||||
private bool GetBtnSaveEnabled()
|
||||
{
|
||||
return IsEditable && PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured && IsMaxTrayQuantityValid;
|
||||
return Editable && PalletItem.IsValidMeasuringValues(IsMeasurable) && !PalletItem.IsMeasured && IsMaxTrayQuantityValid;
|
||||
}
|
||||
|
||||
private bool IsMaxTrayQuantityValid => (!MaxTrayQuantity.HasValue || PalletItem.TrayQuantity <= MaxTrayQuantity.Value);
|
||||
|
|
|
|||
|
|
@ -40,10 +40,10 @@
|
|||
<DxButton Text="Új" Enabled="@(_stockTakings.All(x => x.IsClosed))" Click="() => NewStockTakingClick()"></DxButton>
|
||||
</DxFormLayoutItem>
|
||||
<DxFormLayoutItem ColSpanMd="1">
|
||||
<DxButton Text="Módosít" Enabled="@(SelectedStockTaking?.IsClosed ?? false)" Click="() => UpdateStockTakingClick()"></DxButton>
|
||||
<DxButton Text="Módosít" Enabled="@((SelectedStockTaking?.IsClosed ?? false) && false)" Click="() => UpdateStockTakingClick()"></DxButton>
|
||||
</DxFormLayoutItem>
|
||||
<DxFormLayoutItem ColSpanMd="1">
|
||||
<DxButton Text="Lezárás" Enabled="@(SelectedStockTaking?.IsReadyForClose() ?? false)" Click="() => StockTakingCloseClick()"></DxButton>
|
||||
<DxButton Text="Lezárás" Enabled="@((!SelectedStockTaking?.IsClosed ?? false) && (SelectedStockTaking?.IsReadyForClose() ?? false))" Click="() => StockTakingCloseClick(SelectedStockTaking!.Id)"></DxButton>
|
||||
</DxFormLayoutItem>
|
||||
|
||||
</DxFormLayout>
|
||||
|
|
@ -61,7 +61,7 @@
|
|||
<span>@a</span>
|
||||
}
|
||||
</div>
|
||||
<DxFormLayout Data="@SelectedStockTakingItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100">
|
||||
<DxFormLayout Data="@SelectedStockTakingItem" CaptionPosition="CaptionPosition.Vertical" CssClass="w-100" Enabled="@((!SelectedStockTaking?.IsClosed ?? false))">
|
||||
<DxFormLayoutItem Context="ctxShippingItemFromLayoutItem" ColSpanMd="12">
|
||||
@for (var index = 0; index < (SelectedStockTakingItem?.StockTakingItemPallets?.Count ?? 0); index++)
|
||||
{
|
||||
|
|
@ -70,6 +70,7 @@
|
|||
|
||||
<PalletItemComponent IsMeasurable="@SelectedStockTakingItem!.IsMeasurable"
|
||||
MeasuringIndex="@localI"
|
||||
IsEditable="@(!SelectedStockTaking?.IsClosed ?? false)"
|
||||
PalletItem="@currentShippingItemPallet"
|
||||
ProductId="@SelectedStockTakingItem.Product!.Id"
|
||||
AddOrUpdateSignalRTag="SignalRTags.AddOrUpdateMeasuredStockTakingItemPallet"
|
||||
|
|
@ -142,16 +143,18 @@
|
|||
// if (resultStockTaking == null) return;
|
||||
|
||||
// _stockTakings.Add(resultStockTaking);
|
||||
StateHasChanged();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private async Task StockTakingCloseClick()
|
||||
private async Task StockTakingCloseClick(int stockTakingId)
|
||||
{
|
||||
// var resultStockTaking = await FruitBankSignalRClient.AddStockTaking(stockTaking);
|
||||
// if (resultStockTaking == null) return;
|
||||
var resultStockTaking = await FruitBankSignalRClient.CloseStockTaking(stockTakingId);
|
||||
if (resultStockTaking == null) return;
|
||||
|
||||
// _stockTakings.Add(resultStockTaking);
|
||||
StateHasChanged();
|
||||
_stockTakings.UpdateCollection(resultStockTaking, false);
|
||||
await StockTakingComboValueChanged(_stockTakings.FirstOrDefault(x => x.Id == resultStockTaking.Id));
|
||||
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private async Task StockTakingComboValueChanged(StockTaking? newValue)
|
||||
|
|
@ -163,7 +166,7 @@
|
|||
|
||||
SelectedStockTakingItem = _stockTakingItems.FirstOrDefault();
|
||||
|
||||
StateHasChanged();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
private void PrepareStockTakingItems(StockTaking? stockTaking)
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@
|
|||
else
|
||||
{
|
||||
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">
|
||||
<b> Megjegyzés: </b><span>@(orderNote) </span>
|
||||
|
|
@ -159,7 +159,8 @@
|
|||
var isValid = selectedOrderItemDto.IsValidMeasuringValues();
|
||||
var isValidAndMeasured = isValid && selectedOrderItemDto.IsMeasuredAndValid(); // && selectedOrderItemDto.;
|
||||
|
||||
if (isValidAndMeasured) cssClass = "text-success";
|
||||
if (isValid && !selectedOrderItemDto.AverageWeightIsValid) cssClass = "text-warning";
|
||||
else if (isValidAndMeasured) cssClass = "text-success";
|
||||
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ő!")}]";
|
||||
|
|
|
|||
|
|
@ -326,6 +326,10 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
|
|||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task<StockTaking?> CloseStockTaking(int stockTakingId)
|
||||
=> PostDataAsync<int, StockTaking?>(SignalRTags.CloseStockTaking, stockTakingId);
|
||||
|
||||
|
||||
public async Task<StockTakingItemPallet?> AddStockTakingItemPallet(StockTakingItemPallet stockTakingItemPallet)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
|
|
|
|||
Loading…
Reference in New Issue