This commit is contained in:
Adam 2025-11-22 01:25:20 +01:00
commit ebb522ce5c
19 changed files with 471 additions and 385 deletions

View File

@ -21,11 +21,13 @@ public interface IFruitBankDataControllerCommon
public Task<List<Shipping>?> GetShippings();
Task<List<Shipping>?> GetNotMeasuredShippings();
public Task<Shipping?> GetShippingById(int id);
public Task<Shipping?> AddShipping(Shipping shipping);
public Task<Shipping?> UpdateShipping(Shipping shipping);
#endregion Shipping
#region ShippingItem
public Task<List<ShippingItem>?> GetShippingItems();
public Task<List<ShippingItem>?> GetShippingItemsByShippingId(int shippingId);
public Task<List<ShippingItem>?> GetShippingItemsByDocumentId(int shippingDocumentId);
public Task<ShippingItem?> GetShippingItemById(int id);
public Task<ShippingItem?> AddShippingItem(ShippingItem shippingItem);
@ -43,6 +45,9 @@ public interface IFruitBankDataControllerCommon
#region ShippingDocument
public Task<List<ShippingDocument>?> GetShippingDocuments();
public Task<ShippingDocument?> GetShippingDocumentById(int id);
public Task<List<ShippingDocument>?> GetShippingDocumentsByShippingId(int shippingId);
public Task<List<ShippingDocument>?> GetShippingDocumentsByProductId(int productId);
public Task<List<ShippingDocument>?> GetShippingDocumentsByPartnerId(int partnerId);
public Task<ShippingDocument?> AddShippingDocument(ShippingDocument shippingDocument);
public Task<ShippingDocument?> UpdateShippingDocument(ShippingDocument shippingDocument);
#endregion ShippingDocument

View File

@ -25,12 +25,16 @@ public class SignalRTags : AcSignalRTags
public const int GetShippingItems = 50;
public const int GetShippingItemById = 51;
public const int GetShippingItemsByDocumentId = 52;
public const int GetShippingItemsByShippingId = 53;
public const int AddShippingItem = 55;
public const int UpdateShippingItem = 56;
public const int UpdateMeasuredShippingItem = 57;
public const int GetShippingDocuments = 60;
public const int GetShippingDocumentById = 61;
public const int GetShippingDocumentsByShippingId = 62;
public const int GetShippingDocumentsByProductId = 63;
public const int GetShippingDocumentsByPartnerId = 64;
public const int AddShippingDocument = 65;
public const int UpdateShippingDocument = 66;

View File

@ -10,7 +10,7 @@
@inject FruitBankSignalRClient FruitBankSignalRClient
<MgGridBase @ref="Grid" Data="OrderItemDtos" IsMasterGrid="IsMasterGrid"
PageSize="@(IsMasterGrid ? 15 : 50)" ShowFilterRow="IsMasterGrid" ShowGroupPanel="IsMasterGrid"
PageSize="@(IsMasterGrid ? 20 : 50)" ShowFilterRow="IsMasterGrid" ShowGroupPanel="IsMasterGrid"
AutoExpandAllGroupRows="false" AutoSaveLayoutName="GridDetailOrderItemDto"
ColumnResizeMode="GridColumnResizeMode.NextColumn"
CssClass="@GridCss"
@ -94,43 +94,38 @@
private async Task ReloadDataFromDb(bool forceReload = false)
{
LoadingPanelVisibility.Visible = true;
//using (await ObjectLock.GetSemaphore<ProductDto>().UseWaitAsync())
using (await ObjectLock.GetSemaphore<ProductDto>().UseWaitAsync())
{
// if (ProductDtos == null || !ProductDtos.Any())
// {
// ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload);
// // Database.ProductDtoTable.LoadDataAsync(!forceReload).ContinueWith(x =>
// // {
// // ProductDtos = x.Result;
// // }).Forget();
// }
if (ProductDtos == null || !ProductDtos.Any() || forceReload) ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload);
}
if (!IsMasterGrid) return;
using (await ObjectLock.GetSemaphore<OrderItemDto>().UseWaitAsync())
if (IsMasterGrid)
{
if (OrderItemDtos == null) OrderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtos() ?? [];
else if (OrderItemDtos.Count == 0 || forceReload)
using (await ObjectLock.GetSemaphore<OrderItemDto>().UseWaitAsync())
{
OrderItemDtos.Clear();
OrderItemDtos.AddRange(await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []);
if (OrderItemDtos == null) OrderItemDtos = await FruitBankSignalRClient.GetAllOrderItemDtos() ?? [];
else if (OrderItemDtos.Count == 0 || forceReload)
{
OrderItemDtos.Clear();
OrderItemDtos.AddRange(await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []);
}
}
}
//if (forceReload)
// if (ProductDtos == null || !ProductDtos.Any() || forceReload)
// {
// //ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload);
// Database.ProductDtoTable.LoadDataAsync(!forceReload).ContinueWith(x =>
// {
// ProductDtos = x.Result;
// }).Forget();
// }
//if (forceReload)
Grid?.Reload();
if (ProductDtos == null || !ProductDtos.Any() || forceReload)
{
//ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload);
Database.ProductDtoTable.LoadDataAsync(!forceReload).ContinueWith(x =>
{
ProductDtos = x.Result;
}).Forget();
}
LoadingPanelVisibility.Visible = false;
}
}

View File

@ -12,7 +12,7 @@
@inject LoggedInModel LoggedInModel;
@inject FruitBankSignalRClient FruitBankSignalRClient
<GridProductDto @ref="Grid" Data="ProductDtos" IsMasterGrid="IsMasterGrid" FocusedRowChanged="OnFocusedRowChanged"
<GridProductDto @ref="Grid" DataSource="ProductDtos" IsMasterGrid="IsMasterGrid" FocusedRowChanged="OnFocusedRowChanged"
CssClass="@GridCss" AutoSaveLayoutName="GridProductDtoTemplate">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Ascending" />

View File

@ -1,183 +0,0 @@
@using AyCode.Core.Helpers
@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.SignalRs
@inject FruitBankSignalRClient FruitBankSignalRClient
<MgGridBase @ref="Grid" Data="Shippings" IsMasterGrid="IsMasterGrid" AutoSaveLayoutName="GridShipping"
EditOnKeyPress="true"
ValidationEnabled="false"
EditModelSaving="Grid_EditModelSaving">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" />
<DxGridDataColumn FieldName="ShippingDate" />
<DxGridDataColumn FieldName="LicencePlate" />
<DxGridDataColumn FieldName="IsAllMeasured" ReadOnly="true" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns>
<DetailRowTemplate>
@if (IsMasterGrid)
{
var shipping = ((Shipping)context.DataItem);
var shippingDocuments = new AcFastObservableCollection<ShippingDocument>();
shippingDocuments.AddRange(shipping?.ShippingDocuments ?? []);
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
<DxTabPage Text="Szállítólevelek">
@{
<GridShippingDocument IsMasterGrid="false" ShippingDocuments="shippingDocuments"></GridShippingDocument>
}
</DxTabPage>
<DxTabPage Text="Szállítmány tételek">
<GridShippingItemTemplate ShippingItems="shippingDocuments?.SelectMany(sd => sd.ShippingItems ?? [])?.ToList() ?? []" ParentDataItem="shipping" />
</DxTabPage>
</DxTabs>
}
</DetailRowTemplate>
<ToolbarTemplate>
<DxToolbar ItemRenderStyleMode="ToolbarRenderStyleMode.Plain">
<DxToolbarItem Text="New" Click="NewItem_Click" IconCssClass="grid-toolbar-new" />
<DxToolbarItem Text="Edit" Click="EditItem_Click" IconCssClass="grid-toolbar-edit" Enabled="EditItemsEnabled" />
<DxToolbarItem Text="Delete" Click="DeleteItem_Click" IconCssClass="grid-toolbar-delete" Enabled="EditItemsEnabled" />
<DxToolbarItem Text="Column Chooser" BeginGroup="true" Click="ColumnChooserItem_Click" IconCssClass="grid-toolbar-column-chooser" />
<DxToolbarItem Text="Export" IconCssClass="grid-toolbar-export">
<Items>
<DxToolbarItem Text="To CSV" Click="ExportCsvItem_Click" />
<DxToolbarItem Text="To XLSX" Click="ExportXlsxItem_Click" />
<DxToolbarItem Text="To XLS" Click="ExportXlsItem_Click" />
<DxToolbarItem Text="To PDF" Click="ExportPdfItem_Click" />
</Items>
</DxToolbarItem>
@* <DxToolbarItem BeginGroup="true">
<Template Context="toolbar_item_context">
<DxSearchBox @bind-Text="GridSearchText"
BindValueMode="BindValueMode.OnInput"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"
aria-label="Search" />
</Template>
</DxToolbarItem>
*@ </DxToolbar>
</ToolbarTemplate>
<GroupSummary>
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="Quantity"
FooterColumnName="Quantity" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="NetWeight"
FooterColumnName="NetWeight" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="PriceInclTax"
FooterColumnName="PriceInclTax" />
</GroupSummary>
</MgGridBase>
@code {
//[Inject] public required ObjectLock ObjectLock { get; set; }
[Inject] public required DatabaseClient Database { get; set; }
[Parameter] public bool IsMasterGrid { get; set; } = false;
//[Parameter] public OrderDto? OrderDto { get; set; }
[Parameter] public List<Shipping>? Shippings{ get; set; }
const string ExportFileName = "ExportResult";
string GridSearchText = "";
bool EditItemsEnabled { get; set; }
int FocusedRowVisibleIndex { get; set; }
public MgGridBase Grid { get; set; }
private int _activeTabIndex;
protected override async Task OnInitializedAsync()
{
await ReloadDataFromDb(false);
}
private async Task ReloadDataFromDb(bool forceReload = false)
{
if (!IsMasterGrid) return;
//ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? [];
//ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true);
using (await ObjectLock.GetSemaphore<Shipping>().UseWaitAsync())
{
if (Shippings == null) Shippings = await FruitBankSignalRClient.GetShippings() ?? [];
else if (Shippings.Count == 0 || forceReload)
{
Shippings.Clear();
Shippings.AddRange(await FruitBankSignalRClient.GetShippings() ?? []);
}
}
if (forceReload) Grid?.Reload();
}
async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) {
// await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
// await LoadGridDataAsync();
// if(Data.Length == 0)
// UpdateEditItemsEnabled(false);
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) {
// if(e.IsNew) {
// await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel);
// UpdateEditItemsEnabled(true);
// } else
// await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
// await LoadGridDataAsync();
}
async Task NewItem_Click() {
await Grid.StartEditNewRowAsync();
}
async Task EditItem_Click() {
await Grid.StartEditRowAsync(FocusedRowVisibleIndex);
}
void DeleteItem_Click() {
Grid.ShowRowDeleteConfirmation(FocusedRowVisibleIndex);
}
void ColumnChooserItem_Click(ToolbarItemClickEventArgs e) {
Grid.ShowColumnChooser();
}
async Task ExportXlsxItem_Click() {
await Grid.ExportToXlsxAsync(ExportFileName);
}
async Task ExportXlsItem_Click() {
await Grid.ExportToXlsAsync(ExportFileName);
}
async Task ExportCsvItem_Click() {
await Grid.ExportToCsvAsync(ExportFileName);
}
async Task ExportPdfItem_Click() {
await Grid.ExportToPdfAsync(ExportFileName);
}
protected async Task OnActiveTabChanged(int activeTabIndex)
{
_activeTabIndex = activeTabIndex;
return;
// switch (_activeTabIndex)
// {
// case 0:
// if(ProductDtos == null)
// ProductDtos = (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
// break;
// case 1:
// if(OrderDtos == null)
// OrderDtos = (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
// break;
// case 2:
// if (OrderItemDtos == null)
// OrderItemDtos = (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
// break;
// }
}
}

View File

@ -1,23 +1,25 @@
@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components.FileUploads
@using FruitBankHybrid.Shared.Components.Grids.ShippingDocuments
@using FruitBankHybrid.Shared.Components.Toolbars
@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.SignalRs
@using System.Text
@using AyCode.Core.Extensions
@using AyCode.Core.Helpers
@using AyCode.Core.Interfaces
@using AyCode.Core.Loggers
@using FruitBank.Common.Models
@using FruitBankHybrid.Shared.Services.Loggers
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient
<MgGridBase @ref="Grid" CssClass="@GridCss" Data="@ShippingDocuments" IsMasterGrid="@IsMasterGrid" AutoSaveLayoutName="GridShippingDocument"
ValidationEnabled="false" EditMode="GridEditMode.EditRow"
EditModelSaving="Grid_EditModelSaving"
FocusedRowChanged="Grid_FocusedRowChanged">
<GridShippingDocumentBase @ref="Grid" CssClass="@GridCss" DataSource="@ShippingDocuments" SignalRClient="FruitBankSignalRClient" AutoSaveLayoutName="GridShippingDocument"
ParentDataItem="@ParentDataItem" Logger="_logger" ValidationEnabled="false" EditMode="GridEditMode.EditRow" FocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" />
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="PartnerId" Caption="Partner">
<EditSettings>
<DxComboBoxSettings Data="Partners"
@ -36,7 +38,7 @@
</DxComboBoxSettings>
</EditSettings>
</DxGridDataColumn>
<DxGridDataColumn FieldName="ShippingId" Caption="Shipping">
<DxGridDataColumn FieldName="ShippingId" Caption="Shipping" Visible="@(!ParentDataItemIsShipping)" ReadOnly="@ParentDataItemIsShipping">
<EditSettings>
<DxComboBoxSettings Data="Shippings"
ValueFieldName="Id"
@ -65,7 +67,7 @@
<DxGridDataColumn FieldName="PdfFileName" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
<DxGridCommandColumn Visible="@(!IsMasterGrid)" Width="120"/>
</Columns>
<DetailRowTemplate>
@if (IsMasterGrid)
@ -74,12 +76,15 @@
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
<DxTabPage Text="Szállítmány tételek">
<GridShippingItemTemplate ShippingItems="shippingDocument.ShippingItems" ParentDataItem="@shippingDocument" />
@{
var observableShippingItem = new AcObservableCollection<ShippingItem>(shippingDocument?.ShippingItems ?? []);
<GridShippingItemTemplate ShippingItems="@observableShippingItem" ParentDataItem="@shippingDocument" />
}
</DxTabPage>
<DxTabPage Text="Mérések">
@{
var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? [];
<GridShippingItemPallets ShippingItemPallets="shippingItemPallets" IsMasterGrid="false" />
<GridShippingItemPallets ShippingItemPallets="@shippingItemPallets" IsMasterGrid="false" />
}
</DxTabPage>
@ -125,7 +130,7 @@
FieldName="PriceInclTax"
FooterColumnName="PriceInclTax" />
</GroupSummary>
</MgGridBase>
</GridShippingDocumentBase>
@code {
//EditRow dblClick
@ -135,39 +140,38 @@
[Inject] public required DatabaseClient Database { get; set; }
[Inject] public required LoggedInModel LoggedInModel { get; set; }
[Parameter] public bool IsMasterGrid { get; set; } = false;
[Parameter] public List<Shipping>? Shippings { get; set; }
[Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; }
[Parameter] public List<Partner>? Partners { get; set; }
[Parameter] public AcFastObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
[Parameter] public AcObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
[Parameter] public Func<List<Partner>?, Task>? OnUploadedFileParsed { get; set; }
[Parameter] public IId<int>? ParentDataItem { get; set; }
public bool IsMasterGrid => ParentDataItem == null;
public bool ParentDataItemIsShipping => (ParentDataItem is Shipping);
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
const string ExportFileName = "ExportResult";
string _localStorageKey = "GridShippingDocument_";
string GridSearchText = "";
bool EditItemsEnabled { get; set; } = true;
int FocusedRowVisibleIndex { get; set; }
public MgGridBase Grid { get; set; }
public GridShippingDocumentBase Grid { get; set; }
private LoggerClient<GridShippingDocument> _logger = null!;
private int _activeTabIndex;
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<GridShippingDocument>(LogWriters.ToArray());
_localStorageKey += LoggedInModel.CustomerDto!.Id;
await ReloadDataFromDb();
}
private async Task ReloadDataFromDb(bool forceReload = false)
{
if (!IsMasterGrid) return;
//ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? [];
//ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true);
using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync())
{
if (Partners == null) Partners = await FruitBankSignalRClient.GetPartners() ?? [];
@ -178,30 +182,27 @@
}
}
if (!IsMasterGrid)
{
if (Shippings == null && ParentDataItem is Shipping shippingParent) Shippings = [shippingParent];
return;
}
using (await ObjectLock.GetSemaphore<Shipping>().UseWaitAsync())
{
if (Shippings == null) Shippings = await FruitBankSignalRClient.GetShippings() ?? [];
if (Shippings == null) Shippings = new AcObservableCollection<Shipping>(await FruitBankSignalRClient.GetShippings() ?? []);
else if (Shippings.Count == 0 || forceReload)
{
Shippings.Clear();
Shippings.AddRange(await FruitBankSignalRClient.GetShippings() ?? []);
Shippings.Replace(await FruitBankSignalRClient.GetShippings() ?? []);
}
}
if (Grid == null) return;
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())
{
if (ShippingDocuments == null)
{
ShippingDocuments = [];
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
}
else if (ShippingDocuments.Count == 0 || forceReload)
{
ShippingDocuments.Replace(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
}
}
if (forceReload) await Grid.ReloadDataSourceAsync();
if (forceReload) Grid?.Reload();
if (forceReload) Grid.Reload();
}
private async Task OnFileUploaded(byte[] arg)
@ -233,73 +234,6 @@
EditItemsEnabled = true;
}
async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e)
{
// await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem);
// await LoadGridDataAsync();
// if(Data.Length == 0)
// UpdateEditItemsEnabled(false);
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
{
ShippingDocument? resultShippingDocument = null;
if (!e.IsNew)
{
resultShippingDocument = await FruitBankSignalRClient.UpdateShippingDocument((ShippingDocument)e.EditModel);
}
else
{
resultShippingDocument = await FruitBankSignalRClient.AddShippingDocument((ShippingDocument)e.EditModel);
EditItemsEnabled = true;
}
if (resultShippingDocument != null)
ShippingDocuments!.UpdateCollection(resultShippingDocument, false);
// if(e.IsNew) {
// await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel);
// } else
// await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
// await LoadGridDataAsync();
EditItemsEnabled = true;
}
async Task NewItem_Click()
{
EditItemsEnabled = false;
await Grid.StartEditNewRowAsync();
}
async Task EditItem_Click()
{
EditItemsEnabled = false;
await Grid.StartEditRowAsync(FocusedRowVisibleIndex);
}
void DeleteItem_Click()
{
EditItemsEnabled = false;
Grid.ShowRowDeleteConfirmation(FocusedRowVisibleIndex);
}
void ColumnChooserItem_Click(ToolbarItemClickEventArgs e)
{
Grid.ShowColumnChooser();
}
async Task ExportXlsxItem_Click()
{
await Grid.ExportToXlsxAsync(ExportFileName);
}
async Task ExportXlsItem_Click()
{
await Grid.ExportToXlsAsync(ExportFileName);
}
async Task ExportCsvItem_Click()
{
await Grid.ExportToCsvAsync(ExportFileName);
}
async Task ExportPdfItem_Click()
{
await Grid.ExportToPdfAsync(ExportFileName);
}
protected async Task OnActiveTabChanged(int activeTabIndex)
{
_activeTabIndex = activeTabIndex;

View File

@ -15,21 +15,12 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient
@* Data="ShippingItems" IsMasterGrid="IsMasterGrid" CssClass="@GridCss" AutoSaveLayoutName="GridShippingItem"
ValidationEnabled="false" EditMode="GridEditMode.EditRow"
EditModelSaving="Grid_EditModelSaving"
FocusedRowChanged="Grid_FocusedRowChanged" *@
<GridShippingItem @ref="Grid" ParentDataItem="ParentDataItem" KeyFieldNameToParentId="@nameof(ShippingItem.ShippingDocumentId)"
DataSource="ShippingItems" AutoSaveLayoutName="GridShippingItem" SignalRClient="FruitBankSignalRClient" Logger="_logger"
CssClass="@GridCss" ValidationEnabled="false" EditMode="GridEditMode.EditRow"
FocusedRowChanged="Grid_FocusedRowChanged" OnGridEditModelSaving="EditModelSaving">
@* <MgGridBase Data="ShippingItems" IsMasterGrid="IsMasterGrid" CssClass="@GridCss" AutoSaveLayoutName="GridShippingItem"
ValidationEnabled="false" EditMode="GridEditMode.EditRow"
EditModelSaving="Grid_EditModelSaving"
FocusedRowChanged="Grid_FocusedRowChanged"> *@
<GridShippingItemBase @ref="Grid" ParentDataItem="ParentDataItem" KeyFieldNameToParentId="@nameof(ShippingItem.ShippingDocumentId)"
DataSource="ShippingItems" AutoSaveLayoutName="GridShippingItem" SignalRClient="FruitBankSignalRClient" Logger="_logger"
CssClass="@GridCss" ValidationEnabled="false"
FocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" />
<DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="ShippingDocumentId" Caption="ShippingDocument"
Visible="@(!ParentDataItemIsShippingDocument)" ReadOnly="@(ParentDataItemIsShippingDocument)">
<EditSettings>
@ -95,7 +86,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns>
@* <DataColumnCellDisplayTemplate>
@* <DataColumnCellDisplayTemplate>
@{
if (context.DataColumn.FieldName == nameof(ShippingItem.ShippingDocumentId))
{
@ -131,7 +122,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
FieldName="MeasuredNetWeight"
FooterColumnName="NetWeight" />
</GroupSummary>
</GridShippingItem>
</GridShippingItemBase>
@* </MgGridBase> *@
@code {
@ -142,8 +133,8 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
[Parameter] public IId<int>? ParentDataItem { get; set; }
[Parameter] public IEnumerable<ProductDto>? ProductDtos { get; set; }
[Parameter] public List<ShippingItem>? ShippingItems { get; set; }
[Parameter] public AcFastObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
[Parameter] public AcObservableCollection<ShippingItem>? ShippingItems { get; set; }
[Parameter] public AcObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
public bool IsMasterGrid => ParentDataItem == null;
public bool ParentDataItemIsShippingDocument => (ParentDataItem is ShippingDocument);
@ -156,7 +147,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
bool EditItemsEnabled { get; set; } = true;
int FocusedRowVisibleIndex { get; set; }
public GridShippingItem Grid { get; set; }
public GridShippingItemBase Grid { get; set; }
private LoggerClient<GridShippingItemTemplate> _logger;
protected override async Task OnInitializedAsync()
@ -176,7 +167,6 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
if (!IsMasterGrid)
{
if (ShippingDocuments == null && ParentDataItem is ShippingDocument shippingDocumentParent) ShippingDocuments = [shippingDocumentParent];
return;
}
@ -184,8 +174,7 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
{
if (ShippingDocuments == null)
{
ShippingDocuments = [];
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
ShippingDocuments = new AcObservableCollection<ShippingDocument>(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
}
else if (ShippingDocuments.Count == 0 || forceReload)
{
@ -198,15 +187,14 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
using (await ObjectLock.GetSemaphore<ShippingItem>().UseWaitAsync())
if (forceReload) await Grid.ReloadDataSourceAsync();
if (forceReload)
Grid.Reload();
if (forceReload) Grid.Reload();
}
async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args)
{
if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow())
await Grid.SaveChangesAsync();
if ((args.Grid.IsEditing() || args.Grid.IsEditingNewRow()) && (args.DataItem as IId<int>).Id > 0)
await args.Grid.SaveChangesAsync();
FocusedRowVisibleIndex = args.VisibleIndex;
EditItemsEnabled = true;
}
@ -234,10 +222,4 @@ FocusedRowChanged="Grid_FocusedRowChanged" *@
EditItemsEnabled = true;
}
private void EditModelSaving(GridEditModelSavingEventArgs obj)
{
//obj.
}
}

View File

@ -14,7 +14,7 @@ namespace FruitBankHybrid.Shared.Components.Grids;
//var a = new GridDevExtremeDataSource(DataSource.AsQueryable().Where(x=>x.IsMeasurable));
public class FruitBankListGridBase<TDataItem> : MgGridBase<SignalRDataSourceList<TDataItem>, TDataItem, int, LoggerClient> where TDataItem : class, IId<int>
public class FruitBankGridBase<TDataItem> : MgGridBase<SignalRDataSourceObservable<TDataItem>, TDataItem, int, LoggerClient> where TDataItem : class, IId<int>
{
[Inject] public required LoggedInModel LoggedInModel { get; set; }
[Inject] public required IJSRuntime JSRuntime { get; set; }

View File

@ -1,24 +1,29 @@
using DevExpress.Blazor;
using FruitBank.Common.Dtos;
using FruitBank.Common.Interfaces;
using FruitBank.Common.SignalRs;
using Microsoft.AspNetCore.Components;
namespace FruitBankHybrid.Shared.Components.Grids.Products;
public class GridStockQuantityHistoryDto : FruitBankListGridBase<StockQuantityHistoryDto>, IGrid
public class GridStockQuantityHistoryDtoBase : FruitBankGridBase<StockQuantityHistoryDto>, IGrid
{
public GridStockQuantityHistoryDto() : base()
public GridStockQuantityHistoryDtoBase() : base()
{
GetAllMessageTag = IsMasterGrid ? SignalRTags.GetStockQuantityHistoryDtos : SignalRTags.GetStockQuantityHistoryDtosByProductId;
//AddMessageTag = SignalRTags.AddShippingItem;
//UpdateMessageTag = SignalRTags.UpdateShippingItem;
//RemoveMessageTag = SignalRTags.;
}
protected override async Task OnInitializedAsync()
{
GetAllMessageTag = IsMasterGrid ? SignalRTags.GetStockQuantityHistoryDtos : SignalRTags.GetStockQuantityHistoryDtosByProductId;
if (GetAllMessageTag > 0) return;
if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetStockQuantityHistoryDtos;
else
{
if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id];
if (ParentDataItem is IProductDto) GetAllMessageTag = SignalRTags.GetStockQuantityHistoryDtosByProductId;
//else if (ParentDataItem is IShipping) GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId;
}
await base.OnInitializedAsync();
}

View File

@ -11,11 +11,11 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient
<GridStockQuantityHistoryDto @ref="Grid" ContextIds="ContextIds" ParentDataItem="ParentDataItem" DataSource="StockQuantityHistoryDtos" AutoSaveLayoutName="GridStockQuantityHistoryDto"
SignalRClient="FruitBankSignalRClient" Logger="_logger"
CssClass="@GridCss" ValidationEnabled="false">
<GridStockQuantityHistoryDtoBase @ref="Grid" ContextIds="ContextIds" ParentDataItem="ParentDataItem" DataSource="StockQuantityHistoryDtos"
AutoSaveLayoutName="GridStockQuantityHistoryDto" SignalRClient="FruitBankSignalRClient" Logger="_logger"
CssClass="@GridCss" ValidationEnabled="false">
<Columns>
<DxGridDataColumn FieldName="Id" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" />
<DxGridDataColumn FieldName="Id" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="ProductId" Width="125" ReadOnly="true" Visible="false" />
<DxGridDataColumn FieldName="QuantityAdjustment" Width="135" Caption="Adj. Quantity" ReadOnly="true" />
@ -35,7 +35,7 @@
<ToolbarTemplate>
@if (IsMasterGrid)
{
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)"/>
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
}
</ToolbarTemplate>
@* <GroupSummary>
@ -49,7 +49,7 @@
FieldName="MeasuredNetWeight"
FooterColumnName="NetWeight" />
</GroupSummary> *@
</GridStockQuantityHistoryDto>
</GridStockQuantityHistoryDtoBase>
@code {
[Inject] public required DatabaseClient Database { get; set; }
@ -63,7 +63,7 @@
public bool IsMasterGrid => ParentDataItem == null;
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
public GridStockQuantityHistoryDto Grid { get; set; }
public GridStockQuantityHistoryDtoBase Grid { get; set; }
private LoggerClient<GridStockQuantityHistoryDtoTemplate> _logger = null!;
protected override async Task OnInitializedAsync()

View File

@ -0,0 +1,93 @@
using AyCode.Core.Interfaces;
using AyCode.Utils.Extensions;
using DevExpress.Blazor;
using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces;
using FruitBank.Common.SignalRs;
using FruitBankHybrid.Shared.Pages;
using Microsoft.AspNetCore.Components;
namespace FruitBankHybrid.Shared.Components.Grids.ShippingDocuments;
public class GridShippingDocumentBase : FruitBankGridBase<ShippingDocument>, IGrid
{
private bool _isFirstInitializeParameterCore;
private bool _isFirstInitializeParameters;
public GridShippingDocumentBase () : base()
{
AddMessageTag = SignalRTags.AddShippingDocument;
UpdateMessageTag = SignalRTags.UpdateShippingDocument;
//RemoveMessageTag = SignalRTags.;
}
protected override async Task OnInitializedAsync()
{
if (GetAllMessageTag > 0) return;
if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetShippingDocuments;
else
{
if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id];
switch (ParentDataItem)
{
case IShipping:
GetAllMessageTag = SignalRTags.GetShippingDocumentsByShippingId;
if (KeyFieldNameToParentId.IsNullOrWhiteSpace()) KeyFieldNameToParentId = nameof(ShippingDocument.ShippingId);
break;
case IProductDto:
AddMessageTag = 0;//SignalRTags.None;
GetAllMessageTag = SignalRTags.GetShippingDocumentsByProductId;
break;
case IPartner:
GetAllMessageTag = SignalRTags.GetShippingDocumentsByPartnerId;
if (KeyFieldNameToParentId.IsNullOrWhiteSpace()) KeyFieldNameToParentId = nameof(ShippingDocument.PartnerId);
break;
}
}
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;
//ShowGroupPanel = true;
//AllowSort = false;
//etc...
_isFirstInitializeParameterCore = false;
}
}
}

View File

@ -8,12 +8,12 @@ using Microsoft.AspNetCore.Components;
namespace FruitBankHybrid.Shared.Components.Grids.ShippingItems;
public class GridShippingItem : FruitBankListGridBase<ShippingItem>, IGrid
public class GridShippingItemBase : FruitBankGridBase<ShippingItem>, IGrid
{
private bool _isFirstInitializeParameterCore;
private bool _isFirstInitializeParameters;
public GridShippingItem () : base()
public GridShippingItemBase () : base()
{
AddMessageTag = SignalRTags.AddShippingItem;
UpdateMessageTag = SignalRTags.UpdateShippingItem;
@ -23,13 +23,24 @@ public class GridShippingItem : FruitBankListGridBase<ShippingItem>, IGrid
protected override async Task OnInitializedAsync()
{
if (GetAllMessageTag > 0) return;
if (IsMasterGrid) GetAllMessageTag = SignalRTags.GetShippingItems;
else
{
ContextIds = [ParentDataItem!.Id];
if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id];
if (ParentDataItem is IShippingDocument) GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
//else if (ParentDataItem is IShipping) GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId;
switch (ParentDataItem)
{
case IShippingDocument:
GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
break;
case IShipping:
AddMessageTag = 0;//SignalRTags.None;
GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId;
break;
}
}
await base.OnInitializedAsync();

View File

@ -0,0 +1,153 @@
@using System.Collections.ObjectModel
@using AyCode.Core.Helpers
@using AyCode.Core.Loggers
@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components.Grids.Shippings
@using FruitBankHybrid.Shared.Components.Toolbars
@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.Loggers
@using FruitBankHybrid.Shared.Services.SignalRs
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient
@* <GridShippingBase @ref="Grid" Data="Shippings" AutoSaveLayoutName="GridShipping"> *@
<GridShippingBase @ref="Grid" DataSource="Shippings" AutoSaveLayoutName="GridShipping" SignalRClient="FruitBankSignalRClient" Logger="_logger"
CssClass="@GridCss" ValidationEnabled="false"
FocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="ShippingDate" />
<DxGridDataColumn FieldName="LicencePlate" />
<DxGridDataColumn FieldName="IsAllMeasured" ReadOnly="true" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns>
<DetailRowTemplate>
@if (IsMasterGrid)
{
var shipping = ((Shipping)context.DataItem);
var shippingDocuments = shipping?.ShippingDocuments ?? [];
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
<DxTabPage Text="Szállítólevelek">
@{
var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments);
<GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@shipping" Partners="@Partners"></GridShippingDocument>
}
</DxTabPage>
<DxTabPage Text="Szállítmány tételek">
@{
var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? []));
<GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@shipping" />
}
</DxTabPage>
</DxTabs>
}
</DetailRowTemplate>
<ToolbarTemplate>
@if (IsMasterGrid)
{
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
}
</ToolbarTemplate>
<GroupSummary>
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="Quantity"
FooterColumnName="Quantity" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="NetWeight"
FooterColumnName="NetWeight" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="PriceInclTax"
FooterColumnName="PriceInclTax" />
</GroupSummary>
</GridShippingBase>
@code {
//[Inject] public required ObjectLock ObjectLock { get; set; }
[Inject] public required DatabaseClient Database { get; set; }
[Parameter] public bool IsMasterGrid { get; set; } = false;
[Parameter] public List<Partner>? Partners { get; set; }
[Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; }
const string ExportFileName = "ExportResult";
string GridSearchText = "";
bool EditItemsEnabled { get; set; }
int FocusedRowVisibleIndex { get; set; }
public GridShippingBase Grid { get; set; }
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
private int _activeTabIndex;
private LoggerClient<GridShipping> _logger;
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<GridShipping>(LogWriters.ToArray());
await ReloadDataFromDb(false);
}
private async Task ReloadDataFromDb(bool forceReload = false)
{
if (!IsMasterGrid) return;
using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync())
{
if (Partners == null) Partners = await FruitBankSignalRClient.GetPartners() ?? [];
else if (Partners.Count == 0 || forceReload)
{
Partners.Clear();
Partners.AddRange(await FruitBankSignalRClient.GetPartners() ?? []);
}
}
if (Grid == null) return;
using (await ObjectLock.GetSemaphore<Shipping>().UseWaitAsync())
if (forceReload) await Grid.ReloadDataSourceAsync();
if (forceReload) Grid.Reload();
}
async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args)
{
if (Grid == null) return;
if (Grid.IsEditing() && !Grid.IsEditingNewRow())
await Grid.SaveChangesAsync();
FocusedRowVisibleIndex = args.VisibleIndex;
EditItemsEnabled = true;
}
protected async Task OnActiveTabChanged(int activeTabIndex)
{
_activeTabIndex = activeTabIndex;
return;
// switch (_activeTabIndex)
// {
// case 0:
// if(ProductDtos == null)
// ProductDtos = (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
// break;
// case 1:
// if(OrderDtos == null)
// OrderDtos = (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
// break;
// case 2:
// if (OrderItemDtos == null)
// OrderItemDtos = (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
// break;
// }
}
}

View File

@ -0,0 +1,67 @@
using AyCode.Core.Interfaces;
using DevExpress.Blazor;
using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces;
using FruitBank.Common.SignalRs;
using FruitBankHybrid.Shared.Pages;
using Microsoft.AspNetCore.Components;
namespace FruitBankHybrid.Shared.Components.Grids.Shippings;
public class GridShippingBase: FruitBankGridBase<Shipping>, IGrid
{
private bool _isFirstInitializeParameterCore;
private bool _isFirstInitializeParameters;
public GridShippingBase() : base()
{
GetAllMessageTag = SignalRTags.GetShippings;
AddMessageTag = SignalRTags.AddShipping;
UpdateMessageTag = SignalRTags.UpdateShipping;
//RemoveMessageTag = SignalRTags.;
}
protected override async Task OnInitializedAsync()
{
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;
//ShowGroupPanel = true;
//AllowSort = false;
//etc...
_isFirstInitializeParameterCore = false;
}
}
}

View File

@ -56,7 +56,7 @@ public class ShippingItemTable : SignalRDataSourceList<ShippingItemTableItem>
}
}
public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcFastObservableCollection<ProductDtoTableItem>
public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcObservableCollection<ProductDtoTableItem>
{
private readonly SemaphoreSlim _semaphoreSlim = new(1);
public async Task<ProductDtoTable> LoadDataAsync(bool onlyIfEmpty = true)
@ -81,7 +81,7 @@ public class ProductDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : Ac
return this;
}
}
public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcFastObservableCollection<OrderDtoTableItem>
public class OrderDtoTable(FruitBankSignalRClient fruitBankSignalRClient) : AcObservableCollection<OrderDtoTableItem>
{
private readonly SemaphoreSlim _semaphoreSlim = new(1);

View File

@ -1,6 +1,8 @@
@page "/ShippingsAdmin"
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components
@using FruitBankHybrid.Shared.Components.Grids.Shippings
@using FruitBankHybrid.Shared.Databases
<h3>Szállítmányok - Adminisztrátor</h3>
@ -15,15 +17,15 @@
Text="Adatok szinkronizálása folyamatban...">
@* @bind-ActiveTabIndex="@ActiveTabIndex" *@
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)" RenderMode="TabsRenderMode.AllTabs" AllowTabReorder="true">
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)" RenderMode="TabsRenderMode.OnDemand" AllowTabReorder="true">
<DxTabPage Text="Termékek">
<GridProductDtoTemplate @ref="gridProductDtoTemplate" IsMasterGrid="true"></GridProductDtoTemplate>
</DxTabPage>
<DxTabPage Text="Szállítmányok">
<GridShipping @ref="gridShipping" Shippings="Shippings" IsMasterGrid="true"></GridShipping>
<GridShipping @ref="gridShipping" Shippings="@Shippings" Partners="@Partners" IsMasterGrid="true"></GridShipping>
</DxTabPage>
<DxTabPage Text="Szállítólevelek">
<GridShippingDocument @ref="gridShippingDocument" ShippingDocuments="ShippingDocuments" Shippings="Shippings" IsMasterGrid="true"></GridShippingDocument>
<GridShippingDocument @ref="gridShippingDocument" ShippingDocuments="ShippingDocuments" Shippings="Shippings" Partners="@Partners"></GridShippingDocument>
</DxTabPage>
<DxTabPage Text="Szállítólevél tételek">
<GridShippingItemTemplate @ref="gridShippingItemTemplate" ShippingItems="ShippingItems" ShippingDocuments="ShippingDocuments"></GridShippingItemTemplate>

View File

@ -8,6 +8,7 @@ using FruitBank.Common.Interfaces;
using FruitBank.Common.Models;
using FruitBankHybrid.Shared.Components;
using FruitBankHybrid.Shared.Components.Grids.ShippingItems;
using FruitBankHybrid.Shared.Components.Grids.Shippings;
using FruitBankHybrid.Shared.Databases;
using FruitBankHybrid.Shared.Services.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs;
@ -31,10 +32,11 @@ public partial class ShippingsAdmin : ComponentBase
private GridShippingItemTemplate gridShippingItemTemplate;
private GridShippingItemPallets gridShippingItemPallet;
public List<Shipping> Shippings { get; set; } = [];
public AcFastObservableCollection<ShippingDocument> ShippingDocuments { get; set; } = [];
public List<ShippingItem> ShippingItems { get; set; } = [];
public AcObservableCollection<Shipping> Shippings { get; set; } = [];
public AcObservableCollection<ShippingDocument> ShippingDocuments { get; set; } = [];
public AcObservableCollection<ShippingItem> ShippingItems { get; set; } = [];
public List<ShippingItemPallet> ShippingItemPallets { get; set; } = [];
public List<Partner> Partners { get; set; } = [];
public bool AutoCollapseDetailRow { get; set; }
@ -73,7 +75,7 @@ public partial class ShippingsAdmin : ComponentBase
{
case 0:
//await Database.ProductDtoTable.LoadDataAsync(true);
gridProductDtoTemplate.Grid.Reload();
//gridProductDtoTemplate.Grid.Reload();
break;
case 1:
if (Shippings.Count == 0)
@ -81,7 +83,7 @@ public partial class ShippingsAdmin : ComponentBase
//Shippings.AddRange((await FruitBankSignalRClient.GetShippings() ?? []).OrderByDescending(o => o.Id)); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();}
}
gridShipping.Grid.Reload();
//gridShipping.Grid.Reload();
break;
case 2:
@ -90,14 +92,14 @@ public partial class ShippingsAdmin : ComponentBase
//ShippingDocuments.AddRange((await FruitBankSignalRClient.GetShippingDocuments() ?? []).OrderByDescending(o => o.Id)); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
}
gridShippingDocument.Grid.Reload();
//gridShippingDocument.Grid.Reload();
break;
case 3:
gridShippingItemTemplate.Grid.Reload();
//gridShippingItemTemplate.Grid.Reload();
//if(ShippingItems.Count=0) ShippingItems.AddRange((await FruitBankSignalRClient.GetShippingItems() ?? []).OrderByDescending(o => o.Id)); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList();
break;
case 4:
gridShippingItemPallet.gridOrderItemPallet.Reload();
//gridShippingItemPallet.gridOrderItemPallet.Reload();
break;
}

View File

@ -83,6 +83,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<Shipping?> GetShippingById(int id)
=> GetByIdAsync<Shipping?>(SignalRTags.GetShippingById, id);
public Task<Shipping?> AddShipping(Shipping shipping)
=> PostDataAsync(SignalRTags.AddShipping, shipping);
public Task<Shipping?> UpdateShipping(Shipping shipping)
=> PostDataAsync(SignalRTags.UpdateShipping, shipping);
@ -99,6 +102,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<List<ShippingItem>?> GetShippingItemsByDocumentId(int shippingDocumentId)
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItemsByDocumentId, [shippingDocumentId]);
public Task<List<ShippingItem>?> GetShippingItemsByShippingId(int shippingId)
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItemsByShippingId, [shippingId]);
public Task<ShippingItem?> GetShippingItemById(int id)
=> GetByIdAsync<ShippingItem?>(SignalRTags.GetShippingItemById, id);
@ -136,6 +142,15 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<ShippingDocument?> GetShippingDocumentById(int id)
=> GetByIdAsync<ShippingDocument?>(SignalRTags.GetShippingDocumentById, id);
public Task<List<ShippingDocument>?> GetShippingDocumentsByShippingId(int shippingId)
=> GetAllAsync<List<ShippingDocument>>(SignalRTags.GetShippingDocumentsByShippingId, [shippingId]);
public Task<List<ShippingDocument>?> GetShippingDocumentsByProductId(int productId)
=> GetAllAsync<List<ShippingDocument>>(SignalRTags.GetShippingDocumentsByShippingId, [productId]);
public Task<List<ShippingDocument>?> GetShippingDocumentsByPartnerId(int partnerId)
=> GetAllAsync<List<ShippingDocument>>(SignalRTags.GetShippingDocumentsByShippingId, [partnerId]);
public Task<ShippingDocument?> AddShippingDocument(ShippingDocument shippingDocument)
=> PostDataAsync(SignalRTags.AddShippingDocument, shippingDocument);

View File

@ -3,6 +3,7 @@ using AyCode.Core.Interfaces;
using AyCode.Services.Server.SignalRs;
using AyCode.Services.SignalRs;
using System.Diagnostics;
using AyCode.Core.Helpers;
namespace FruitBankHybrid.Shared.Services.SignalRs;
@ -14,4 +15,4 @@ public class SignalRDataSourceList<TDataItem>(AcSignalRClientBase signalRClient,
[Serializable]
[DebuggerDisplay("Count = {Count}")]
public class SignalRDataSourceObservable<TDataItem>(AcSignalRClientBase signalRClient, SignalRCrudTags signalRCrudTags, params object[]? contextIds)
: AcSignalRDataSource<TDataItem, int, ObservableCollection<TDataItem>>(signalRClient, signalRCrudTags, contextIds) where TDataItem : class, IId<int>;
: AcSignalRDataSource<TDataItem, int, AcObservableCollection<TDataItem>>(signalRClient, signalRCrudTags, contextIds) where TDataItem : class, IId<int>;