improvements, fixes
This commit is contained in:
parent
4fb643bcdc
commit
5c6aa6a80f
|
|
@ -26,6 +26,7 @@ public interface IFruitBankDataControllerCommon
|
||||||
|
|
||||||
#region ShippingItem
|
#region ShippingItem
|
||||||
public Task<List<ShippingItem>?> GetShippingItems();
|
public Task<List<ShippingItem>?> GetShippingItems();
|
||||||
|
public Task<List<ShippingItem>?> GetShippingItemsByDocumentId(int shippingDocumentId);
|
||||||
public Task<ShippingItem?> GetShippingItemById(int id);
|
public Task<ShippingItem?> GetShippingItemById(int id);
|
||||||
public Task<ShippingItem?> AddShippingItem(ShippingItem shippingItem);
|
public Task<ShippingItem?> AddShippingItem(ShippingItem shippingItem);
|
||||||
public Task<ShippingItem?> UpdateShippingItem(ShippingItem shippingItem);
|
public Task<ShippingItem?> UpdateShippingItem(ShippingItem shippingItem);
|
||||||
|
|
|
||||||
|
|
@ -1,152 +0,0 @@
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.ObjectModel;
|
|
||||||
using System.Collections.Specialized;
|
|
||||||
using System.ComponentModel;
|
|
||||||
|
|
||||||
namespace FruitBank.Common
|
|
||||||
{
|
|
||||||
public interface IMgFastObservableCollection
|
|
||||||
{
|
|
||||||
public void AddRange(IEnumerable other);
|
|
||||||
public void Replace(IEnumerable other);
|
|
||||||
public void RemoveRange(IEnumerable other);
|
|
||||||
public void Synchronize(NotifyCollectionChangedEventArgs args);
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface IMgFastObservableCollection<T> : IMgFastObservableCollection
|
|
||||||
{
|
|
||||||
public void Replace(IEnumerable<T> other);
|
|
||||||
public void Sort(IComparer<T> comparer);
|
|
||||||
public void SortAndReplace(IEnumerable<T> other, IComparer<T> comparer);
|
|
||||||
}
|
|
||||||
|
|
||||||
public class MgObservableCollection<T> : ObservableCollection<T>, IMgFastObservableCollection<T>
|
|
||||||
{
|
|
||||||
private bool _suppressChangedEvent;
|
|
||||||
|
|
||||||
public void Replace(IEnumerable<T> other)
|
|
||||||
{
|
|
||||||
_suppressChangedEvent = true;
|
|
||||||
|
|
||||||
Clear();
|
|
||||||
AddRange(other);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Replace(IEnumerable other)
|
|
||||||
{
|
|
||||||
_suppressChangedEvent = true;
|
|
||||||
|
|
||||||
Clear();
|
|
||||||
foreach (T item in other) Add(item);
|
|
||||||
|
|
||||||
_suppressChangedEvent = false;
|
|
||||||
|
|
||||||
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
|
||||||
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void AddRange(IEnumerable other)
|
|
||||||
{
|
|
||||||
_suppressChangedEvent = true;
|
|
||||||
|
|
||||||
foreach (var item in other)
|
|
||||||
{
|
|
||||||
if (item is T tItem) Add(tItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
_suppressChangedEvent = false;
|
|
||||||
|
|
||||||
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
|
||||||
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void RemoveRange(IEnumerable other)
|
|
||||||
{
|
|
||||||
_suppressChangedEvent = true;
|
|
||||||
|
|
||||||
foreach (var item in other)
|
|
||||||
{
|
|
||||||
if (item is T tItem) Remove(tItem);
|
|
||||||
}
|
|
||||||
|
|
||||||
_suppressChangedEvent = false;
|
|
||||||
|
|
||||||
OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
|
|
||||||
OnPropertyChanged(new PropertyChangedEventArgs(nameof(Count)));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SortAndReplace(IEnumerable<T> other, IComparer<T> comparer)
|
|
||||||
{
|
|
||||||
List<T> values = new(other);
|
|
||||||
|
|
||||||
values.Sort(comparer);
|
|
||||||
Replace(values);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Sort(IComparer<T> comparer)
|
|
||||||
{
|
|
||||||
List<T> values = new(this);
|
|
||||||
|
|
||||||
values.Sort(comparer);
|
|
||||||
Replace(values);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Synchronize(NotifyCollectionChangedEventArgs args)
|
|
||||||
{
|
|
||||||
switch (args.Action)
|
|
||||||
{
|
|
||||||
case NotifyCollectionChangedAction.Add when args.NewItems != null:
|
|
||||||
AddRange(args.NewItems);
|
|
||||||
break;
|
|
||||||
case NotifyCollectionChangedAction.Remove when args.OldItems != null:
|
|
||||||
RemoveRange(args.OldItems);
|
|
||||||
break;
|
|
||||||
case NotifyCollectionChangedAction.Reset:
|
|
||||||
Clear();
|
|
||||||
break;
|
|
||||||
case NotifyCollectionChangedAction.Replace:
|
|
||||||
case NotifyCollectionChangedAction.Move:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new ArgumentOutOfRangeException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnPropertyChanged(PropertyChangedEventArgs e)
|
|
||||||
{
|
|
||||||
if (_suppressChangedEvent)
|
|
||||||
return;
|
|
||||||
|
|
||||||
base.OnPropertyChanged(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
|
|
||||||
{
|
|
||||||
if (_suppressChangedEvent)
|
|
||||||
return;
|
|
||||||
|
|
||||||
base.OnCollectionChanged(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
//protected override void ClearItems()
|
|
||||||
//{
|
|
||||||
// base.ClearItems();
|
|
||||||
//}
|
|
||||||
|
|
||||||
//protected override void InsertItem(int index, T item)
|
|
||||||
//{
|
|
||||||
// base.InsertItem(index, item);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//protected override void MoveItem(int oldIndex, int newIndex)
|
|
||||||
//{
|
|
||||||
// base.MoveItem(oldIndex, newIndex);
|
|
||||||
//}
|
|
||||||
|
|
||||||
//public override event NotifyCollectionChangedEventHandler? CollectionChanged
|
|
||||||
//{
|
|
||||||
// add => base.CollectionChanged += value;
|
|
||||||
// remove => base.CollectionChanged -= value;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -24,6 +24,7 @@ public class SignalRTags : AcSignalRTags
|
||||||
|
|
||||||
public const int GetShippingItems = 50;
|
public const int GetShippingItems = 50;
|
||||||
public const int GetShippingItemById = 51;
|
public const int GetShippingItemById = 51;
|
||||||
|
public const int GetShippingItemsByDocumentId = 52;
|
||||||
public const int AddShippingItem = 55;
|
public const int AddShippingItem = 55;
|
||||||
public const int UpdateShippingItem = 56;
|
public const int UpdateShippingItem = 56;
|
||||||
public const int UpdateMeasuredShippingItem = 57;
|
public const int UpdateMeasuredShippingItem = 57;
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@
|
||||||
//var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? [];
|
//var orderItemDtos = _orderItemDtos?.Where(oi => oi.ProductId == productId).ToList() ?? [];
|
||||||
|
|
||||||
var contextIds = new[] { (object)((ProductDto)(context.DataItem)).Id };
|
var contextIds = new[] { (object)((ProductDto)(context.DataItem)).Id };
|
||||||
<GridStockQuantityHistoryDtoTemplate ContextIds="@(contextIds)" IsMasterGrid="false" />
|
<GridStockQuantityHistoryDtoTemplate ContextIds="@(contextIds)" ParentDataItem="@((ProductDto)(context.DataItem))" />
|
||||||
}
|
}
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
</DxTabs>
|
</DxTabs>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
@using AyCode.Utils.Extensions
|
@using AyCode.Core.Helpers
|
||||||
|
@using AyCode.Utils.Extensions
|
||||||
@using FruitBank.Common.Dtos
|
@using FruitBank.Common.Dtos
|
||||||
@using FruitBank.Common.Entities
|
@using FruitBank.Common.Entities
|
||||||
@using FruitBankHybrid.Shared.Databases
|
@using FruitBankHybrid.Shared.Databases
|
||||||
|
|
@ -25,7 +26,8 @@
|
||||||
@if (IsMasterGrid)
|
@if (IsMasterGrid)
|
||||||
{
|
{
|
||||||
var shipping = ((Shipping)context.DataItem);
|
var shipping = ((Shipping)context.DataItem);
|
||||||
var shippingDocuments = shipping?.ShippingDocuments?.ToList() ?? [];
|
var shippingDocuments = new AcFastObservableCollection<ShippingDocument>();
|
||||||
|
shippingDocuments.AddRange(shipping?.ShippingDocuments ?? []);
|
||||||
|
|
||||||
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
|
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
|
||||||
<DxTabPage Text="Szállítólevelek">
|
<DxTabPage Text="Szállítólevelek">
|
||||||
|
|
@ -36,7 +38,7 @@
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
|
|
||||||
<DxTabPage Text="Szállítmány tételek">
|
<DxTabPage Text="Szállítmány tételek">
|
||||||
<GridShippingItemTemplate ShippingItems="shippingDocuments?.SelectMany(sd => sd.ShippingItems ?? [])?.ToList() ?? []" IsMasterGrid="false" />
|
<GridShippingItemTemplate ShippingItems="shippingDocuments?.SelectMany(sd => sd.ShippingItems ?? [])?.ToList() ?? []" ParentDataItem="shipping" />
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
</DxTabs>
|
</DxTabs>
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
@using FruitBankHybrid.Shared.Services.SignalRs
|
@using FruitBankHybrid.Shared.Services.SignalRs
|
||||||
@using System.Text
|
@using System.Text
|
||||||
@using AyCode.Core.Extensions
|
@using AyCode.Core.Extensions
|
||||||
|
@using AyCode.Core.Helpers
|
||||||
@using FruitBank.Common.Models
|
@using FruitBank.Common.Models
|
||||||
|
|
||||||
@inject FruitBankSignalRClient FruitBankSignalRClient
|
@inject FruitBankSignalRClient FruitBankSignalRClient
|
||||||
|
|
@ -73,12 +74,12 @@
|
||||||
|
|
||||||
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
|
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
|
||||||
<DxTabPage Text="Szállítmány tételek">
|
<DxTabPage Text="Szállítmány tételek">
|
||||||
<GridShippingItemTemplate ShippingItems="shippingDocument.ShippingItems" IsMasterGrid="false" />
|
<GridShippingItemTemplate ShippingItems="shippingDocument.ShippingItems" ParentDataItem="@shippingDocument" />
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
<DxTabPage Text="Mérések">
|
<DxTabPage Text="Mérések">
|
||||||
@{
|
@{
|
||||||
var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? [];
|
var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? [];
|
||||||
<GridShippingItemPallets OrderItemPallets="shippingItemPallets" IsMasterGrid="false" />
|
<GridShippingItemPallets ShippingItemPallets="shippingItemPallets" IsMasterGrid="false" />
|
||||||
}
|
}
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
|
|
||||||
|
|
@ -127,6 +128,9 @@
|
||||||
</MgGridBase>
|
</MgGridBase>
|
||||||
|
|
||||||
@code {
|
@code {
|
||||||
|
//EditRow dblClick
|
||||||
|
//https://supportcenter.devexpress.com/ticket/details/t1097648/datagrid-for-blazor-how-to-start-editing-a-row-and-save-changes-without-the-command-column
|
||||||
|
|
||||||
//[Inject] public required ObjectLock ObjectLock { get; set; }
|
//[Inject] public required ObjectLock ObjectLock { get; set; }
|
||||||
[Inject] public required DatabaseClient Database { get; set; }
|
[Inject] public required DatabaseClient Database { get; set; }
|
||||||
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
||||||
|
|
@ -135,7 +139,7 @@
|
||||||
|
|
||||||
[Parameter] public List<Shipping>? Shippings { get; set; }
|
[Parameter] public List<Shipping>? Shippings { get; set; }
|
||||||
[Parameter] public List<Partner>? Partners { get; set; }
|
[Parameter] public List<Partner>? Partners { get; set; }
|
||||||
[Parameter] public List<ShippingDocument>? ShippingDocuments { get; set; }
|
[Parameter] public AcFastObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
|
||||||
|
|
||||||
[Parameter] public Func<List<Partner>?, Task>? OnUploadedFileParsed { get; set; }
|
[Parameter] public Func<List<Partner>?, Task>? OnUploadedFileParsed { get; set; }
|
||||||
|
|
||||||
|
|
@ -186,11 +190,14 @@
|
||||||
|
|
||||||
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())
|
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())
|
||||||
{
|
{
|
||||||
if (ShippingDocuments == null) ShippingDocuments = await FruitBankSignalRClient.GetShippingDocuments() ?? [];
|
if (ShippingDocuments == null)
|
||||||
|
{
|
||||||
|
ShippingDocuments = [];
|
||||||
|
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
|
||||||
|
}
|
||||||
else if (ShippingDocuments.Count == 0 || forceReload)
|
else if (ShippingDocuments.Count == 0 || forceReload)
|
||||||
{
|
{
|
||||||
ShippingDocuments.Clear();
|
ShippingDocuments.Replace(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
|
||||||
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
@using AyCode.Core.Loggers;
|
@using AyCode.Core.Loggers;
|
||||||
@using AyCode.Core.Extensions
|
@using AyCode.Core.Extensions
|
||||||
@using AyCode.Core.Helpers
|
@using AyCode.Core.Helpers
|
||||||
|
@using AyCode.Core.Interfaces
|
||||||
@using AyCode.Utils.Extensions
|
@using AyCode.Utils.Extensions
|
||||||
@using FruitBank.Common.Dtos
|
@using FruitBank.Common.Dtos
|
||||||
@using FruitBank.Common.Entities
|
@using FruitBank.Common.Entities
|
||||||
|
@using FruitBank.Common.Interfaces
|
||||||
@using FruitBankHybrid.Shared.Components.Grids.ShippingItems
|
@using FruitBankHybrid.Shared.Components.Grids.ShippingItems
|
||||||
@using FruitBankHybrid.Shared.Components.Toolbars
|
@using FruitBankHybrid.Shared.Components.Toolbars
|
||||||
@using FruitBankHybrid.Shared.Databases
|
@using FruitBankHybrid.Shared.Databases
|
||||||
|
|
@ -18,17 +20,18 @@ ValidationEnabled="false" EditMode="GridEditMode.EditRow"
|
||||||
EditModelSaving="Grid_EditModelSaving"
|
EditModelSaving="Grid_EditModelSaving"
|
||||||
FocusedRowChanged="Grid_FocusedRowChanged" *@
|
FocusedRowChanged="Grid_FocusedRowChanged" *@
|
||||||
|
|
||||||
<GridShippingItem @ref="Grid" IsMasterGrid="IsMasterGrid" DataSource="ShippingItems" AutoSaveLayoutName="GridShippingItem"
|
<GridShippingItem @ref="Grid" ParentDataItem="ParentDataItem" KeyFieldNameToParentId="@nameof(ShippingItem.ShippingDocumentId)"
|
||||||
SignalRClient="FruitBankSignalRClient" Logger="_logger"
|
DataSource="ShippingItems" AutoSaveLayoutName="GridShippingItem" SignalRClient="FruitBankSignalRClient" Logger="_logger"
|
||||||
CssClass="@GridCss" ValidationEnabled="false" EditMode="GridEditMode.EditRow"
|
CssClass="@GridCss" ValidationEnabled="false" EditMode="GridEditMode.EditRow"
|
||||||
FocusedRowChanged="Grid_FocusedRowChanged">
|
FocusedRowChanged="Grid_FocusedRowChanged" OnGridEditModelSaving="EditModelSaving">
|
||||||
@* <MgGridBase Data="ShippingItems" IsMasterGrid="IsMasterGrid" CssClass="@GridCss" AutoSaveLayoutName="GridShippingItem"
|
@* <MgGridBase Data="ShippingItems" IsMasterGrid="IsMasterGrid" CssClass="@GridCss" AutoSaveLayoutName="GridShippingItem"
|
||||||
ValidationEnabled="false" EditMode="GridEditMode.EditRow"
|
ValidationEnabled="false" EditMode="GridEditMode.EditRow"
|
||||||
EditModelSaving="Grid_EditModelSaving"
|
EditModelSaving="Grid_EditModelSaving"
|
||||||
FocusedRowChanged="Grid_FocusedRowChanged"> *@
|
FocusedRowChanged="Grid_FocusedRowChanged"> *@
|
||||||
<Columns>
|
<Columns>
|
||||||
<DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" />
|
<DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" />
|
||||||
<DxGridDataColumn FieldName="ShippingDocumentId" Caption="ShippingDocument">
|
<DxGridDataColumn FieldName="ShippingDocumentId" Caption="ShippingDocument"
|
||||||
|
Visible="@(!ParentDataItemIsShippingDocument)" ReadOnly="@(ParentDataItemIsShippingDocument)">
|
||||||
<EditSettings>
|
<EditSettings>
|
||||||
<DxComboBoxSettings Data="ShippingDocuments"
|
<DxComboBoxSettings Data="ShippingDocuments"
|
||||||
ValueFieldName="Id"
|
ValueFieldName="Id"
|
||||||
|
|
@ -48,7 +51,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
|
||||||
</EditSettings>
|
</EditSettings>
|
||||||
</DxGridDataColumn>
|
</DxGridDataColumn>
|
||||||
|
|
||||||
<DxGridDataColumn FieldName="@("ShippingDocument.Partner.Name")" Caption="Patner" Width="125" ReadOnly="true" />
|
<DxGridDataColumn FieldName="@("ShippingDocument.Partner.Name")" Caption="Patner" Width="125" ReadOnly="true" Visible="@(!ParentDataItemIsShippingDocument)" />
|
||||||
|
|
||||||
<DxGridDataColumn FieldName="ProductId" Caption="Product">
|
<DxGridDataColumn FieldName="ProductId" Caption="Product">
|
||||||
<EditSettings>
|
<EditSettings>
|
||||||
|
|
@ -135,12 +138,15 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
|
||||||
//[Inject] public required ObjectLock ObjectLock { get; set; }
|
//[Inject] public required ObjectLock ObjectLock { get; set; }
|
||||||
[Inject] public required DatabaseClient Database { get; set; }
|
[Inject] public required DatabaseClient Database { get; set; }
|
||||||
|
|
||||||
[Parameter] public bool IsMasterGrid { get; set; } = false;
|
//[Parameter] public int GetAllMessageTag { get; set; }
|
||||||
|
[Parameter] public IId<int>? ParentDataItem { get; set; }
|
||||||
|
|
||||||
[Parameter] public IEnumerable<ProductDto>? ProductDtos { get; set; }
|
[Parameter] public IEnumerable<ProductDto>? ProductDtos { get; set; }
|
||||||
[Parameter] public List<ShippingItem>? ShippingItems { get; set; }
|
[Parameter] public List<ShippingItem>? ShippingItems { get; set; }
|
||||||
[Parameter] public List<ShippingDocument>? ShippingDocuments { get; set; }
|
[Parameter] public AcFastObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
|
||||||
|
|
||||||
|
public bool IsMasterGrid => ParentDataItem == null;
|
||||||
|
public bool ParentDataItemIsShippingDocument => (ParentDataItem is ShippingDocument);
|
||||||
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
|
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
|
||||||
|
|
||||||
const string ExportFileName = "ExportResult";
|
const string ExportFileName = "ExportResult";
|
||||||
|
|
@ -162,20 +168,28 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
|
||||||
|
|
||||||
public async Task ReloadDataFromDb(bool forceReload = false)
|
public async Task ReloadDataFromDb(bool forceReload = false)
|
||||||
{
|
{
|
||||||
if (!IsMasterGrid) return;
|
|
||||||
|
|
||||||
using (await ObjectLock.GetSemaphore<ProductDto>().UseWaitAsync())
|
using (await ObjectLock.GetSemaphore<ProductDto>().UseWaitAsync())
|
||||||
{
|
{
|
||||||
if (ProductDtos == null || !ProductDtos.Any() || forceReload) ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload);
|
if (ProductDtos == null || !ProductDtos.Any() || forceReload) ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!IsMasterGrid)
|
||||||
|
{
|
||||||
|
if (ShippingDocuments == null && ParentDataItem is ShippingDocument shippingDocumentParent) ShippingDocuments = [shippingDocumentParent];
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())
|
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())
|
||||||
{
|
{
|
||||||
if (ShippingDocuments == null) ShippingDocuments = await FruitBankSignalRClient.GetShippingDocuments() ?? [];
|
if (ShippingDocuments == null)
|
||||||
|
{
|
||||||
|
ShippingDocuments = [];
|
||||||
|
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
|
||||||
|
}
|
||||||
else if (ShippingDocuments.Count == 0 || forceReload)
|
else if (ShippingDocuments.Count == 0 || forceReload)
|
||||||
{
|
{
|
||||||
ShippingDocuments.Clear();
|
ShippingDocuments.Replace(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
|
||||||
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -220,4 +234,10 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
|
||||||
|
|
||||||
EditItemsEnabled = true;
|
EditItemsEnabled = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void EditModelSaving(GridEditModelSavingEventArgs obj)
|
||||||
|
{
|
||||||
|
//obj.
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -19,7 +19,7 @@ public class FruitBankListGridBase<TDataItem> : MgGridBase<SignalRDataSourceList
|
||||||
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
[Inject] public required LoggedInModel LoggedInModel { get; set; }
|
||||||
[Inject] public required IJSRuntime JSRuntime { get; set; }
|
[Inject] public required IJSRuntime JSRuntime { get; set; }
|
||||||
|
|
||||||
[Parameter] public bool IsMasterGrid { get; set; } = false;
|
//[Parameter] public bool IsMasterGrid { get; set; } = false;
|
||||||
[Parameter] public string AutoSaveLayoutName { get; set; }
|
[Parameter] public string AutoSaveLayoutName { get; set; }
|
||||||
|
|
||||||
private bool _isFirstInitializeParameterCore;
|
private bool _isFirstInitializeParameterCore;
|
||||||
|
|
@ -31,7 +31,7 @@ public class FruitBankListGridBase<TDataItem> : MgGridBase<SignalRDataSourceList
|
||||||
// throw new NotImplementedException();
|
// throw new NotImplementedException();
|
||||||
//}
|
//}
|
||||||
|
|
||||||
protected void OnCustomizeElement(GridCustomizeElementEventArgs e)
|
protected void OnCustomizeElement(GridCustomizeElementEventArgs e)
|
||||||
{
|
{
|
||||||
//if (!IsMasterGrid) e.CssClass = "hideDetailButton";
|
//if (!IsMasterGrid) e.CssClass = "hideDetailButton";
|
||||||
|
|
||||||
|
|
@ -40,9 +40,9 @@ public class FruitBankListGridBase<TDataItem> : MgGridBase<SignalRDataSourceList
|
||||||
e.CssClass = " alt-item";
|
e.CssClass = " alt-item";
|
||||||
}
|
}
|
||||||
|
|
||||||
if(e.ElementType == GridElementType.DataRow && !LoggedInModel.IsDeveloper)
|
if (e.ElementType == GridElementType.DataRow && !LoggedInModel.IsDeveloper)
|
||||||
{
|
{
|
||||||
e.CssClass = "hideDetailButton";
|
e.CssClass = "hideDetailButton";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.ElementType == GridElementType.HeaderCell)
|
if (e.ElementType == GridElementType.HeaderCell)
|
||||||
|
|
@ -105,11 +105,10 @@ public class FruitBankListGridBase<TDataItem> : MgGridBase<SignalRDataSourceList
|
||||||
//VirtualScrollingEnabled = IsMasterGrid;
|
//VirtualScrollingEnabled = IsMasterGrid;
|
||||||
PageSizeSelectorVisible = true;
|
PageSizeSelectorVisible = true;
|
||||||
|
|
||||||
if (!AutoSaveLayoutName.IsNullOrWhiteSpace())
|
if (AutoSaveLayoutName.IsNullOrWhiteSpace()) AutoSaveLayoutName = $"Grid{typeof(TDataItem).Name}";
|
||||||
{
|
|
||||||
LayoutAutoLoading = Grid_LayoutAutoLoading;
|
LayoutAutoLoading = Grid_LayoutAutoLoading;
|
||||||
LayoutAutoSaving = Grid_LayoutAutoSaving;
|
LayoutAutoSaving = Grid_LayoutAutoSaving;
|
||||||
}
|
|
||||||
|
|
||||||
_isFirstInitializeParameters = true;
|
_isFirstInitializeParameters = true;
|
||||||
}
|
}
|
||||||
|
|
@ -124,18 +123,18 @@ public class FruitBankListGridBase<TDataItem> : MgGridBase<SignalRDataSourceList
|
||||||
//PreRendered = true;
|
//PreRendered = true;
|
||||||
//StateHasChanged();
|
//StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async Task Grid_LayoutAutoLoading(GridPersistentLayoutEventArgs e)
|
async Task Grid_LayoutAutoLoading(GridPersistentLayoutEventArgs e)
|
||||||
{
|
{
|
||||||
var masterDetailName = IsMasterGrid ? "Master" : "Detail";
|
var masterDetailName = IsMasterGrid ? "Master" : ParentDataItem!.GetType().Name;
|
||||||
e.Layout = await LoadLayoutFromLocalStorageAsync($"{AutoSaveLayoutName}_{masterDetailName}_AutoSave_{LoggedInModel.CustomerDto?.Id ?? 0}");
|
e.Layout = await LoadLayoutFromLocalStorageAsync($"{AutoSaveLayoutName}_{masterDetailName}_AutoSave_{LoggedInModel.CustomerDto?.Id ?? 0}");
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task Grid_LayoutAutoSaving(GridPersistentLayoutEventArgs e)
|
private async Task Grid_LayoutAutoSaving(GridPersistentLayoutEventArgs e)
|
||||||
{
|
{
|
||||||
var masterDetailName = IsMasterGrid ? "Master" : "Detail";
|
var masterDetailName = IsMasterGrid ? "Master" : ParentDataItem!.GetType().Name;
|
||||||
await SaveLayoutToLocalStorageAsync(e.Layout, $"{AutoSaveLayoutName}_{masterDetailName}_AutoSave_{LoggedInModel.CustomerDto?.Id ?? 0}");
|
await SaveLayoutToLocalStorageAsync(e.Layout, $"{AutoSaveLayoutName}_{masterDetailName}_AutoSave_{LoggedInModel.CustomerDto?.Id ?? 0}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,17 @@ public class GridStockQuantityHistoryDto : FruitBankListGridBase<StockQuantityHi
|
||||||
//RemoveMessageTag = SignalRTags.;
|
//RemoveMessageTag = SignalRTags.;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected override async Task OnInitializedAsync()
|
||||||
|
{
|
||||||
|
GetAllMessageTag = IsMasterGrid ? SignalRTags.GetStockQuantityHistoryDtos : SignalRTags.GetStockQuantityHistoryDtosByProductId;
|
||||||
|
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
protected override Task SetParametersAsyncCore(ParameterView parameters)
|
protected override Task SetParametersAsyncCore(ParameterView parameters)
|
||||||
{
|
{
|
||||||
|
return base.SetParametersAsyncCore(parameters);
|
||||||
|
|
||||||
if (!IsFirstInitializeParameters)
|
if (!IsFirstInitializeParameters)
|
||||||
{
|
{
|
||||||
//ShowFilterRow = true;
|
//ShowFilterRow = true;
|
||||||
|
|
@ -26,7 +35,5 @@ public class GridStockQuantityHistoryDto : FruitBankListGridBase<StockQuantityHi
|
||||||
|
|
||||||
//etc...
|
//etc...
|
||||||
}
|
}
|
||||||
|
|
||||||
return base.SetParametersAsyncCore(parameters);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
@using AyCode.Core.Loggers;
|
@using AyCode.Core.Interfaces
|
||||||
|
@using AyCode.Core.Loggers;
|
||||||
@using AyCode.Utils.Extensions
|
@using AyCode.Utils.Extensions
|
||||||
@using FruitBank.Common.Dtos
|
@using FruitBank.Common.Dtos
|
||||||
@using FruitBankHybrid.Shared.Components.Grids.ShippingItems
|
@using FruitBankHybrid.Shared.Components.Grids.ShippingItems
|
||||||
|
|
@ -10,7 +11,7 @@
|
||||||
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
|
||||||
@inject FruitBankSignalRClient FruitBankSignalRClient
|
@inject FruitBankSignalRClient FruitBankSignalRClient
|
||||||
|
|
||||||
<GridStockQuantityHistoryDto @ref="Grid" ContextIds="ContextIds" IsMasterGrid="IsMasterGrid" DataSource="StockQuantityHistoryDtos" AutoSaveLayoutName="GridStockQuantityHistoryDto"
|
<GridStockQuantityHistoryDto @ref="Grid" ContextIds="ContextIds" ParentDataItem="ParentDataItem" DataSource="StockQuantityHistoryDtos" AutoSaveLayoutName="GridStockQuantityHistoryDto"
|
||||||
SignalRClient="FruitBankSignalRClient" Logger="_logger"
|
SignalRClient="FruitBankSignalRClient" Logger="_logger"
|
||||||
CssClass="@GridCss" ValidationEnabled="false">
|
CssClass="@GridCss" ValidationEnabled="false">
|
||||||
<Columns>
|
<Columns>
|
||||||
|
|
@ -54,11 +55,12 @@
|
||||||
[Inject] public required DatabaseClient Database { get; set; }
|
[Inject] public required DatabaseClient Database { get; set; }
|
||||||
|
|
||||||
[Parameter] public object[]? ContextIds { get; set; }
|
[Parameter] public object[]? ContextIds { get; set; }
|
||||||
[Parameter] public bool IsMasterGrid { get; set; }
|
[Parameter] public IId<int>? ParentDataItem { get; set; }
|
||||||
|
|
||||||
[Parameter] public IEnumerable<ProductDto>? ProductDtos { get; set; }
|
[Parameter] public IEnumerable<ProductDto>? ProductDtos { get; set; }
|
||||||
[Parameter] public List<StockQuantityHistoryDto>? StockQuantityHistoryDtos { get; set; }
|
[Parameter] public List<StockQuantityHistoryDto>? StockQuantityHistoryDtos { get; set; }
|
||||||
|
|
||||||
|
public bool IsMasterGrid => ParentDataItem == null;
|
||||||
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
|
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
|
||||||
|
|
||||||
public GridStockQuantityHistoryDto Grid { get; set; }
|
public GridStockQuantityHistoryDto Grid { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using AyCode.Core.Interfaces;
|
using AyCode.Core.Interfaces;
|
||||||
using DevExpress.Blazor;
|
using DevExpress.Blazor;
|
||||||
using FruitBank.Common.Entities;
|
using FruitBank.Common.Entities;
|
||||||
|
using FruitBank.Common.Interfaces;
|
||||||
using FruitBank.Common.SignalRs;
|
using FruitBank.Common.SignalRs;
|
||||||
using FruitBankHybrid.Shared.Pages;
|
using FruitBankHybrid.Shared.Pages;
|
||||||
using Microsoft.AspNetCore.Components;
|
using Microsoft.AspNetCore.Components;
|
||||||
|
|
@ -9,25 +10,66 @@ namespace FruitBankHybrid.Shared.Components.Grids.ShippingItems;
|
||||||
|
|
||||||
public class GridShippingItem : FruitBankListGridBase<ShippingItem>, IGrid
|
public class GridShippingItem : FruitBankListGridBase<ShippingItem>, IGrid
|
||||||
{
|
{
|
||||||
|
private bool _isFirstInitializeParameterCore;
|
||||||
|
private bool _isFirstInitializeParameters;
|
||||||
|
|
||||||
public GridShippingItem () : base()
|
public GridShippingItem () : base()
|
||||||
{
|
{
|
||||||
GetAllMessageTag = SignalRTags.GetShippingItems;
|
|
||||||
AddMessageTag = SignalRTags.AddShippingItem;
|
AddMessageTag = SignalRTags.AddShippingItem;
|
||||||
UpdateMessageTag = SignalRTags.UpdateShippingItem;
|
UpdateMessageTag = SignalRTags.UpdateShippingItem;
|
||||||
|
|
||||||
//RemoveMessageTag = SignalRTags.;
|
//RemoveMessageTag = SignalRTags.;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override Task SetParametersAsyncCore(ParameterView parameters)
|
protected override async Task OnInitializedAsync()
|
||||||
{
|
{
|
||||||
if (!IsFirstInitializeParameters)
|
if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetShippingItems;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
|
ContextIds = [ParentDataItem!.Id];
|
||||||
|
|
||||||
|
if (ParentDataItem is IShippingDocument) GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
|
||||||
|
//else if (ParentDataItem is IShipping) GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId;
|
||||||
|
}
|
||||||
|
|
||||||
|
await base.OnInitializedAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnParametersSet()
|
||||||
|
{
|
||||||
|
base.OnParametersSet();
|
||||||
|
|
||||||
|
if (!_isFirstInitializeParameters)
|
||||||
|
{
|
||||||
|
//if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0))
|
||||||
|
//{
|
||||||
|
// ContextIds = [ParentDataItem!.Id];
|
||||||
|
// GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
|
||||||
|
//}
|
||||||
|
|
||||||
|
_isFirstInitializeParameters = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override async Task SetParametersAsyncCore(ParameterView parameters)
|
||||||
|
{
|
||||||
|
await base.SetParametersAsyncCore(parameters);
|
||||||
|
|
||||||
|
if (!_isFirstInitializeParameterCore)
|
||||||
|
{
|
||||||
|
//if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0))
|
||||||
|
//{
|
||||||
|
// ContextIds = [ParentDataItem!.Id];
|
||||||
|
// GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
|
||||||
|
//}
|
||||||
|
|
||||||
//ShowFilterRow = true;
|
//ShowFilterRow = true;
|
||||||
//ShowGroupPanel = true;
|
//ShowGroupPanel = true;
|
||||||
//AllowSort = false;
|
//AllowSort = false;
|
||||||
|
|
||||||
//etc...
|
//etc...
|
||||||
}
|
|
||||||
|
|
||||||
return base.SetParametersAsyncCore(parameters);
|
_isFirstInitializeParameterCore = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -15,6 +15,7 @@ using Nop.Core.Domain.Orders;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using System.Collections.ObjectModel;
|
using System.Collections.ObjectModel;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
|
using AyCode.Core.Helpers;
|
||||||
|
|
||||||
namespace FruitBankHybrid.Shared.Databases;
|
namespace FruitBankHybrid.Shared.Databases;
|
||||||
|
|
||||||
|
|
@ -55,7 +56,7 @@ public class ShippingItemTable : SignalRDataSourceList<ShippingItemTableItem>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : MgObservableCollection<ProductDtoTableItem>
|
public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcFastObservableCollection<ProductDtoTableItem>
|
||||||
{
|
{
|
||||||
private readonly SemaphoreSlim _semaphoreSlim = new(1);
|
private readonly SemaphoreSlim _semaphoreSlim = new(1);
|
||||||
public async Task<ProductDtoTable> LoadDataAsync(bool onlyIfEmpty = true)
|
public async Task<ProductDtoTable> LoadDataAsync(bool onlyIfEmpty = true)
|
||||||
|
|
@ -80,7 +81,7 @@ public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : Mg
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : MgObservableCollection<OrderDtoTableItem>
|
public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcFastObservableCollection<OrderDtoTableItem>
|
||||||
{
|
{
|
||||||
private readonly SemaphoreSlim _semaphoreSlim = new(1);
|
private readonly SemaphoreSlim _semaphoreSlim = new(1);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@
|
||||||
<GridShippingDocument @ref="gridShippingDocument" ShippingDocuments="ShippingDocuments" Shippings="Shippings" IsMasterGrid="true"></GridShippingDocument>
|
<GridShippingDocument @ref="gridShippingDocument" ShippingDocuments="ShippingDocuments" Shippings="Shippings" IsMasterGrid="true"></GridShippingDocument>
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
<DxTabPage Text="Szállítólevél tételek">
|
<DxTabPage Text="Szállítólevél tételek">
|
||||||
<GridShippingItemTemplate @ref="gridShippingItemTemplate" ShippingItems="ShippingItems" ShippingDocuments="ShippingDocuments" IsMasterGrid="true"></GridShippingItemTemplate>
|
<GridShippingItemTemplate @ref="gridShippingItemTemplate" ShippingItems="ShippingItems" ShippingDocuments="ShippingDocuments"></GridShippingItemTemplate>
|
||||||
</DxTabPage>
|
</DxTabPage>
|
||||||
<DxTabPage Text="Mérések">
|
<DxTabPage Text="Mérések">
|
||||||
<GridShippingItemPallets @ref="gridShippingItemPallet" IsMasterGrid="true" ShippingItemPallets="ShippingItemPallets"></GridShippingItemPallets>
|
<GridShippingItemPallets @ref="gridShippingItemPallet" IsMasterGrid="true" ShippingItemPallets="ShippingItemPallets"></GridShippingItemPallets>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
using AyCode.Core.Loggers;
|
using AyCode.Core.Helpers;
|
||||||
|
using AyCode.Core.Loggers;
|
||||||
using DevExpress.Blazor;
|
using DevExpress.Blazor;
|
||||||
using DevExpress.ClipboardSource.SpreadsheetML;
|
using DevExpress.ClipboardSource.SpreadsheetML;
|
||||||
using FruitBank.Common.Dtos;
|
using FruitBank.Common.Dtos;
|
||||||
|
|
@ -31,7 +32,7 @@ public partial class ShippingsAdmin : ComponentBase
|
||||||
private GridShippingItemPallets gridShippingItemPallet;
|
private GridShippingItemPallets gridShippingItemPallet;
|
||||||
|
|
||||||
public List<Shipping> Shippings { get; set; } = [];
|
public List<Shipping> Shippings { get; set; } = [];
|
||||||
public List<ShippingDocument> ShippingDocuments { get; set; } = [];
|
public AcFastObservableCollection<ShippingDocument> ShippingDocuments { get; set; } = [];
|
||||||
public List<ShippingItem> ShippingItems { get; set; } = [];
|
public List<ShippingItem> ShippingItems { get; set; } = [];
|
||||||
public List<ShippingItemPallet> ShippingItemPallets { get; set; } = [];
|
public List<ShippingItemPallet> ShippingItemPallets { get; set; } = [];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,6 +96,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
|
||||||
public Task<List<ShippingItem>?> GetShippingItems()
|
public Task<List<ShippingItem>?> GetShippingItems()
|
||||||
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItems);
|
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItems);
|
||||||
|
|
||||||
|
public Task<List<ShippingItem>?> GetShippingItemsByDocumentId(int shippingDocumentId)
|
||||||
|
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItemsByDocumentId, [shippingDocumentId]);
|
||||||
|
|
||||||
public Task<ShippingItem?> GetShippingItemById(int id)
|
public Task<ShippingItem?> GetShippingItemById(int id)
|
||||||
=> GetByIdAsync<ShippingItem?>(SignalRTags.GetShippingItemById, id);
|
=> GetByIdAsync<ShippingItem?>(SignalRTags.GetShippingItemById, id);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue