FruitBankHybridApp/FruitBankHybrid.Shared/Components/GridShippingItemTemplate.razor

243 lines
9.3 KiB
Plaintext

@using AyCode.Core.Loggers;
@using AyCode.Core.Extensions
@using AyCode.Core.Helpers
@using AyCode.Core.Interfaces
@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBank.Common.Interfaces
@using FruitBankHybrid.Shared.Components.Grids.ShippingItems
@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
@* 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"> *@
<Columns>
<DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" />
<DxGridDataColumn FieldName="ShippingDocumentId" Caption="ShippingDocument"
Visible="@(!ParentDataItemIsShippingDocument)" ReadOnly="@(ParentDataItemIsShippingDocument)">
<EditSettings>
<DxComboBoxSettings Data="ShippingDocuments"
ValueFieldName="Id"
TextFieldName="@nameof(ShippingDocument.PdfFileName)"
DropDownBodyCssClass="dd-body-class"
ListRenderMode="ListRenderMode.Entire"
SearchMode="ListSearchMode.AutoSearch"
SearchFilterCondition="ListSearchFilterCondition.Contains"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto">
<Columns>
<DxListEditorColumn FieldName="@nameof(ShippingDocument.Id)" />
<DxListEditorColumn FieldName="@nameof(ShippingDocument.DocumentIdNumber)" />
<DxListEditorColumn FieldName="@nameof(ShippingDocument.PdfFileName)" />
<DxListEditorColumn FieldName="@("Partner.Name")" />
</Columns>
</DxComboBoxSettings>
</EditSettings>
</DxGridDataColumn>
<DxGridDataColumn FieldName="@("ShippingDocument.Partner.Name")" Caption="Patner" Width="125" ReadOnly="true" Visible="@(!ParentDataItemIsShippingDocument)" />
<DxGridDataColumn FieldName="ProductId" Caption="Product">
<EditSettings>
<DxComboBoxSettings Data="ProductDtos"
ValueFieldName="Id"
TextFieldName="Name"
DropDownBodyCssClass="dd-body-class"
ListRenderMode="ListRenderMode.Entire"
SearchMode="ListSearchMode.AutoSearch"
SearchFilterCondition="ListSearchFilterCondition.Contains"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto">
<Columns>
<DxListEditorColumn FieldName="@nameof(ProductDto.Id)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.Name)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.AvailableQuantity)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.StockQuantity)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.IncomingQuantity)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.NetWeight)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.IsMeasurable)" />
</Columns>
</DxComboBoxSettings>
</EditSettings>
</DxGridDataColumn>
<DxGridDataColumn FieldName="NameOnDocument" MinWidth="120" Caption="Name(OnDoc)" />
<DxGridDataColumn FieldName="Name" MinWidth="120" Caption="Name" Visible="false" />
<DxGridDataColumn FieldName="PalletsOnDocument" Caption="Raklap(OnDoc)" />
<DxGridDataColumn FieldName="QuantityOnDocument" Caption="Mennyiség(OnDoc)" />
<DxGridDataColumn FieldName="NetWeightOnDocument" Caption="Net.súly(OnDoc)" />
<DxGridDataColumn FieldName="GrossWeightOnDocument" Caption="Br.súly(OnDoc)" />
<DxGridDataColumn FieldName="MeasuringCount" Caption="Mérések száma" />
<DxGridDataColumn FieldName="MeasuredQuantity" Caption="Mért mennyiség" ReadOnly="true" />
<DxGridDataColumn FieldName="MeasuredNetWeight" Caption="Mért net.súly(kg)" ReadOnly="true" />
<DxGridDataColumn FieldName="MeasuredGrossWeight" Caption="Mért br.súly(kg)" ReadOnly="true" />
<DxGridDataColumn FieldName="IsMeasurable" ReadOnly="true" />
<DxGridDataColumn FieldName="IsMeasured" ReadOnly="true" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns>
@* <DataColumnCellDisplayTemplate>
@{
if (context.DataColumn.FieldName == nameof(ShippingItem.ShippingDocumentId))
{
<span>@(String.Format("{0:P2}", context.Value))</span>
// format the value as percentage
}
else
{
<span>@context.DisplayText</span>
}
}
</DataColumnCellDisplayTemplate>
*@ <DetailRowTemplate>
@{
var shippingItemPallets = ((ShippingItem)context.DataItem).ShippingItemPallets;
<GridShippingItemPallets ShippingItemPallets="shippingItemPallets" IsMasterGrid="false"></GridShippingItemPallets>
}
</DetailRowTemplate>
<ToolbarTemplate>
@if (IsMasterGrid)
{
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
}
</ToolbarTemplate>
<GroupSummary>
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredQuantity"
FooterColumnName="Quantity" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredGrossWeight"
FooterColumnName="GrossWeight" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredNetWeight"
FooterColumnName="NetWeight" />
</GroupSummary>
</GridShippingItem>
@* </MgGridBase> *@
@code {
//[Inject] public required ObjectLock ObjectLock { get; set; }
[Inject] public required DatabaseClient Database { get; set; }
//[Parameter] public int GetAllMessageTag { get; set; }
[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; }
public bool IsMasterGrid => ParentDataItem == null;
public bool ParentDataItemIsShippingDocument => (ParentDataItem is ShippingDocument);
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
const string ExportFileName = "ExportResult";
string _localStorageKey = "GridShippingItem_";
string GridSearchText = "";
bool EditItemsEnabled { get; set; } = true;
int FocusedRowVisibleIndex { get; set; }
public GridShippingItem Grid { get; set; }
private LoggerClient<GridShippingItemTemplate> _logger;
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<GridShippingItemTemplate>(LogWriters.ToArray());
await ReloadDataFromDb(false);
}
public async Task ReloadDataFromDb(bool forceReload = false)
{
using (await ObjectLock.GetSemaphore<ProductDto>().UseWaitAsync())
{
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())
{
if (ShippingDocuments == null)
{
ShippingDocuments = [];
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
}
else if (ShippingDocuments.Count == 0 || forceReload)
{
ShippingDocuments.Replace(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
}
}
if (Grid == null) return;
using (await ObjectLock.GetSemaphore<ShippingItem>().UseWaitAsync())
if (forceReload) await Grid.ReloadDataSourceAsync();
if (forceReload)
Grid.Reload();
}
async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args)
{
if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow())
await Grid.SaveChangesAsync();
FocusedRowVisibleIndex = args.VisibleIndex;
EditItemsEnabled = true;
}
async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e)
{
}
async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e)
{
ShippingItem? resultShippingItem = null;
if (!e.IsNew)
{
resultShippingItem = await FruitBankSignalRClient.UpdateShippingItem((ShippingItem)e.EditModel);
}
else
{
resultShippingItem = await FruitBankSignalRClient.AddShippingItem((ShippingItem)e.EditModel);
EditItemsEnabled = true;
}
// if (resultShippingItem != null)
// ShippingItems!.UpdateCollection(resultShippingItem, false);
EditItemsEnabled = true;
}
private void EditModelSaving(GridEditModelSavingEventArgs obj)
{
//obj.
}
}