DevExpress Fluent theme: grid/info panel refactor

Major refactor for DevExpress Fluent theme compatibility:
- InfoPanel templates now use strongly-typed context (`InfoPanelContext`)
- Unified grid layout with `MgGridWithInfoPanel` wrapper
- CSS updated to use Fluent theme variables and container queries
- App-wide CSS cleanup and formatting improvements
- `.editorconfig` added for modern CSS support
- Improved InfoPanel instance resolution for nested grids
- Codebase is cleaner, more maintainable, and ready for further customization
This commit is contained in:
Loretta 2025-12-21 08:24:40 +01:00
parent e8d38f0038
commit 271868b4d5
9 changed files with 459 additions and 436 deletions

View File

@ -74,7 +74,6 @@
</ToolbarTemplate> </ToolbarTemplate>
</GridProductDto> </GridProductDto>
@code { @code {
[Inject] public required DatabaseClient Database { get; set; } [Inject] public required DatabaseClient Database { get; set; }

View File

@ -15,78 +15,80 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient @inject FruitBankSignalRClient FruitBankSignalRClient
<GridShippingItemBase @ref="Grid" ParentDataItem="ParentDataItem" DataSource="ShippingItems" AutoSaveLayoutName="GridShippingItem" <MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
SignalRClient="FruitBankSignalRClient" Logger="_logger" <GridContent>
CssClass="@GridCss" ValidationEnabled="false" CustomizeElement="Grid_CustomizeElement" <GridShippingItemBase @ref="Grid" ParentDataItem="ParentDataItem" DataSource="ShippingItems" AutoSaveLayoutName="GridShippingItem"
OnGridFocusedRowChanged="Grid_FocusedRowChanged"> SignalRClient="FruitBankSignalRClient" Logger="_logger"
<Columns> CssClass="@GridCss" ValidationEnabled="false" CustomizeElement="Grid_CustomizeElement"
<DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<DxGridDataColumn FieldName="ShippingDocumentId" Caption="ShippingDocument" <Columns>
Visible="@(!ParentDataItemIsShippingDocument)" ReadOnly="@(ParentDataItemIsShippingDocument)"> <DxGridDataColumn FieldName="Id" Caption="oiId" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<EditSettings> <DxGridDataColumn FieldName="ShippingDocumentId" Caption="ShippingDocument"
<DxComboBoxSettings Data="ShippingDocuments" Visible="@(!ParentDataItemIsShippingDocument)" ReadOnly="@(ParentDataItemIsShippingDocument)">
ValueFieldName="Id" <EditSettings>
TextFieldName="@nameof(ShippingDocument.PdfFileName)" <DxComboBoxSettings Data="ShippingDocuments"
DropDownBodyCssClass="dd-body-class" ValueFieldName="Id"
ListRenderMode="ListRenderMode.Entire" TextFieldName="@nameof(ShippingDocument.PdfFileName)"
SearchMode="ListSearchMode.AutoSearch" DropDownBodyCssClass="dd-body-class"
SearchFilterCondition="ListSearchFilterCondition.Contains" ListRenderMode="ListRenderMode.Entire"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"> SearchMode="ListSearchMode.AutoSearch"
<Columns> SearchFilterCondition="ListSearchFilterCondition.Contains"
<DxListEditorColumn FieldName="@nameof(ShippingDocument.Id)" /> ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto">
<DxListEditorColumn FieldName="@nameof(ShippingDocument.DocumentIdNumber)" /> <Columns>
<DxListEditorColumn FieldName="@nameof(ShippingDocument.PdfFileName)" /> <DxListEditorColumn FieldName="@nameof(ShippingDocument.Id)" />
<DxListEditorColumn FieldName="@("Partner.Name")" /> <DxListEditorColumn FieldName="@nameof(ShippingDocument.DocumentIdNumber)" />
</Columns> <DxListEditorColumn FieldName="@nameof(ShippingDocument.PdfFileName)" />
</DxComboBoxSettings> <DxListEditorColumn FieldName="@("Partner.Name")" />
</EditSettings> </Columns>
</DxGridDataColumn> </DxComboBoxSettings>
</EditSettings>
</DxGridDataColumn>
<DxGridDataColumn FieldName="@("ShippingDocument.Partner.Name")" Caption="Patner" Width="125" ReadOnly="true" Visible="@(!ParentDataItemIsShippingDocument)" /> <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>
<DxComboBoxSettings Data="ProductDtos" <DxComboBoxSettings Data="ProductDtos"
ValueFieldName="Id" ValueFieldName="Id"
TextFieldName="Name" TextFieldName="Name"
DropDownBodyCssClass="dd-body-class" DropDownBodyCssClass="dd-body-class"
ListRenderMode="ListRenderMode.Entire" ListRenderMode="ListRenderMode.Entire"
SearchMode="ListSearchMode.AutoSearch" SearchMode="ListSearchMode.AutoSearch"
SearchFilterCondition="ListSearchFilterCondition.Contains" SearchFilterCondition="ListSearchFilterCondition.Contains"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"> ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto">
<Columns> <Columns>
<DxListEditorColumn FieldName="@nameof(ProductDto.Id)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.Id)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.Name)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.Name)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.AvailableQuantity)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.AvailableQuantity)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.StockQuantity)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.StockQuantity)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.IncomingQuantity)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.IncomingQuantity)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.NetWeight)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.NetWeight)" />
<DxListEditorColumn FieldName="@nameof(ProductDto.IsMeasurable)" /> <DxListEditorColumn FieldName="@nameof(ProductDto.IsMeasurable)" />
</Columns> </Columns>
</DxComboBoxSettings> </DxComboBoxSettings>
</EditSettings> </EditSettings>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="NameOnDocument" MinWidth="120" Caption="Name(OnDoc)" /> <DxGridDataColumn FieldName="NameOnDocument" MinWidth="120" Caption="Name(OnDoc)" />
<DxGridDataColumn FieldName="Name" MinWidth="120" Caption="Name" Visible="false" /> <DxGridDataColumn FieldName="Name" MinWidth="120" Caption="Name" Visible="false" />
<DxGridDataColumn FieldName="PalletsOnDocument" Caption="Raklap(OnDoc)" /> <DxGridDataColumn FieldName="PalletsOnDocument" Caption="Raklap(OnDoc)" />
<DxGridDataColumn FieldName="QuantityOnDocument" Caption="Mennyiség(OnDoc)" /> <DxGridDataColumn FieldName="QuantityOnDocument" Caption="Mennyiség(OnDoc)" />
<DxGridDataColumn FieldName="NetWeightOnDocument" Caption="Net.súly(OnDoc)" /> <DxGridDataColumn FieldName="NetWeightOnDocument" Caption="Net.súly(OnDoc)" />
<DxGridDataColumn FieldName="GrossWeightOnDocument" Caption="Br.súly(OnDoc)" /> <DxGridDataColumn FieldName="GrossWeightOnDocument" Caption="Br.súly(OnDoc)" />
<DxGridDataColumn FieldName="MeasuringCount" Caption="Mérések száma" /> <DxGridDataColumn FieldName="MeasuringCount" Caption="Mérések száma" />
<DxGridDataColumn FieldName="MeasuredQuantity" Name="MeasuredQuantity" Caption="Mért mennyiség" ReadOnly="true" /> <DxGridDataColumn FieldName="MeasuredQuantity" Name="MeasuredQuantity" Caption="Mért mennyiség" ReadOnly="true" />
<DxGridDataColumn FieldName="MeasuredNetWeight" Name="MeasuredNetWeight" Caption="Mért net.súly(kg)" ReadOnly="true" /> <DxGridDataColumn FieldName="MeasuredNetWeight" Name="MeasuredNetWeight" Caption="Mért net.súly(kg)" ReadOnly="true" />
<DxGridDataColumn FieldName="MeasuredGrossWeight" Name="MeasuredGrossWeight" Caption="Mért br.súly(kg)" ReadOnly="true" /> <DxGridDataColumn FieldName="MeasuredGrossWeight" Name="MeasuredGrossWeight" Caption="Mért br.súly(kg)" ReadOnly="true" />
<DxGridDataColumn FieldName="IsMeasurable" ReadOnly="true" /> <DxGridDataColumn FieldName="IsMeasurable" ReadOnly="true" />
<DxGridDataColumn FieldName="IsMeasured" ReadOnly="true" /> <DxGridDataColumn FieldName="IsMeasured" ReadOnly="true" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" /> <DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" /> <DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
@* <DataColumnCellDisplayTemplate> @* <DataColumnCellDisplayTemplate>
@{ @{
if (context.DataColumn.FieldName == nameof(ShippingItem.ShippingDocumentId)) if (context.DataColumn.FieldName == nameof(ShippingItem.ShippingDocumentId))
{ {
@ -100,30 +102,31 @@
} }
</DataColumnCellDisplayTemplate> </DataColumnCellDisplayTemplate>
*@ <DetailRowTemplate> *@ <DetailRowTemplate>
@{ @{
var shippingItemPallets = ((ShippingItem)context.DataItem).ShippingItemPallets; var shippingItemPallets = ((ShippingItem)context.DataItem).ShippingItemPallets;
<GridShippingItemPallets ShippingItemPallets="shippingItemPallets" IsMasterGrid="false"></GridShippingItemPallets> <GridShippingItemPallets ShippingItemPallets="shippingItemPallets" IsMasterGrid="false"></GridShippingItemPallets>
} }
</DetailRowTemplate> </DetailRowTemplate>
<ToolbarTemplate> <ToolbarTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
<GroupSummary> <GroupSummary>
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum" <DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredQuantity" FieldName="MeasuredQuantity"
FooterColumnName="Quantity" /> FooterColumnName="Quantity" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum" <DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredGrossWeight" FieldName="MeasuredGrossWeight"
FooterColumnName="GrossWeight" /> FooterColumnName="GrossWeight" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum" <DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredNetWeight" FieldName="MeasuredNetWeight"
FooterColumnName="NetWeight" /> FooterColumnName="NetWeight" />
</GroupSummary> </GroupSummary>
</GridShippingItemBase> </GridShippingItemBase>
@* </MgGridBase> *@ </GridContent>
</MgGridWithInfoPanel>
@code { @code {
//[Inject] public required ObjectLock ObjectLock { get; set; } //[Inject] public required ObjectLock ObjectLock { get; set; }

View File

@ -15,32 +15,36 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient @inject FruitBankSignalRClient FruitBankSignalRClient
<GridGenericAttributeBase @ref="Grid" DataSource="GenericAttributes" AutoSaveLayoutName="GridGenericAttribute" SignalRClient="FruitBankSignalRClient" Logger="_logger" <MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
ParentDataItem="@ParentDataItem" CssClass="@GridCss" ValidationEnabled="false" OnGridFocusedRowChanged="Grid_FocusedRowChanged"> <GridContent>
<Columns> <GridGenericAttributeBase @ref="Grid" DataSource="GenericAttributes" AutoSaveLayoutName="GridGenericAttribute" SignalRClient="FruitBankSignalRClient" Logger="_logger"
<DxGridDataColumn FieldName="@nameof(GenericAttribute.Id)" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> ParentDataItem="@ParentDataItem" CssClass="@GridCss" ValidationEnabled="false" OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="@nameof(GenericAttribute.Id)" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="@nameof(GenericAttribute.KeyGroup)" ReadOnly="true" /> <DxGridDataColumn FieldName="@nameof(GenericAttribute.KeyGroup)" ReadOnly="true" />
<DxGridDataColumn FieldName="@nameof(GenericAttribute.Key)" /> <DxGridDataColumn FieldName="@nameof(GenericAttribute.Key)" />
<DxGridDataColumn FieldName="@nameof(GenericAttribute.Value)" /> <DxGridDataColumn FieldName="@nameof(GenericAttribute.Value)" />
<DxGridDataColumn FieldName="@nameof(GenericAttribute.EntityId)" ReadOnly="true" /> <DxGridDataColumn FieldName="@nameof(GenericAttribute.EntityId)" ReadOnly="true" />
<DxGridDataColumn FieldName="@nameof(GenericAttribute.StoreId)" ReadOnly="true" /> <DxGridDataColumn FieldName="@nameof(GenericAttribute.StoreId)" ReadOnly="true" />
<DxGridDataColumn FieldName="@nameof(GenericAttribute.CreatedOrUpdatedDateUTC)" ReadOnly="true" /> <DxGridDataColumn FieldName="@nameof(GenericAttribute.CreatedOrUpdatedDateUTC)" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
<ToolbarTemplate> <ToolbarTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
</GridGenericAttributeBase> </GridGenericAttributeBase>
</GridContent>
</MgGridWithInfoPanel>
@code { @code {
[Inject] public required DatabaseClient Database { get; set; } [Inject] public required DatabaseClient Database { get; set; }
[Parameter] public AcObservableCollection<GenericAttributeDto>? GenericAttributes{ get; set; } [Parameter] public AcObservableCollection<GenericAttributeDto>? GenericAttributes { get; set; }
//[Parameter] public object[]? ContextIds { get; set; } //[Parameter] public object[]? ContextIds { get; set; }
[Parameter] public IId<int>? ParentDataItem { get; set; } [Parameter] public IId<int>? ParentDataItem { get; set; }

View File

@ -13,62 +13,66 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient @inject FruitBankSignalRClient FruitBankSignalRClient
<GridPartnerBase @ref="Grid" <MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
DataSource="Partners" <GridContent>
AutoSaveLayoutName="GridPartner" <GridPartnerBase @ref="Grid"
SignalRClient="FruitBankSignalRClient" DataSource="Partners"
Logger="_logger" AutoSaveLayoutName="GridPartner"
CssClass="@GridCss" SignalRClient="FruitBankSignalRClient"
ValidationEnabled="false" Logger="_logger"
ShowInfoPanel="true" CssClass="@GridCss"
OnGridFocusedRowChanged="Grid_FocusedRowChanged"> ValidationEnabled="false"
<Columns> ShowInfoPanel="true"
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="Name" /> <DxGridDataColumn FieldName="Name" />
<DxGridDataColumn FieldName="TaxId" /> <DxGridDataColumn FieldName="TaxId" />
<DxGridDataColumn FieldName="CertificationNumber" /> <DxGridDataColumn FieldName="CertificationNumber" />
<DxGridDataColumn FieldName="PostalCode" /> <DxGridDataColumn FieldName="PostalCode" />
<DxGridDataColumn FieldName="@nameof(Partner.Country)" /> <DxGridDataColumn FieldName="@nameof(Partner.Country)" />
<DxGridDataColumn FieldName="State" /> <DxGridDataColumn FieldName="State" />
<DxGridDataColumn FieldName="County" /> <DxGridDataColumn FieldName="County" />
<DxGridDataColumn FieldName="City" /> <DxGridDataColumn FieldName="City" />
<DxGridDataColumn FieldName="Street" /> <DxGridDataColumn FieldName="Street" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" /> <DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" /> <DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
var partner = ((Partner)context.DataItem); var partner = ((Partner)context.DataItem);
var shippingDocuments = partner?.ShippingDocuments ?? []; var shippingDocuments = partner?.ShippingDocuments ?? [];
<DxTabs> <DxTabs>
<DxTabPage Text="Szállítólevelek"> <DxTabPage Text="Szállítólevelek">
@{ @{
var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments); var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments);
<GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@partner" Partners="@Partners"></GridShippingDocument> <GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@partner" Partners="@Partners"></GridShippingDocument>
} }
</DxTabPage> </DxTabPage>
<DxTabPage Text="Szállítmány tételek"> <DxTabPage Text="Szállítmány tételek">
@{ @{
var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? [])); var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? []));
<GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@partner" /> <GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@partner" />
} }
</DxTabPage> </DxTabPage>
</DxTabs> </DxTabs>
} }
</DetailRowTemplate> </DetailRowTemplate>
<ToolbarTemplate> <ToolbarTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
</GridPartnerBase> </GridPartnerBase>
</GridContent>
</MgGridWithInfoPanel>
@code { @code {
//[Inject] public required ObjectLock ObjectLock { get; set; } //[Inject] public required ObjectLock ObjectLock { get; set; }

View File

@ -11,45 +11,47 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient @inject FruitBankSignalRClient FruitBankSignalRClient
<GridStockQuantityHistoryDtoBase @ref="Grid" ContextIds="ContextIds" ParentDataItem="ParentDataItem" DataSource="StockQuantityHistoryDtos" <MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
AutoSaveLayoutName="GridStockQuantityHistoryDto" SignalRClient="FruitBankSignalRClient" Logger="_logger" <GridContent>
CssClass="@GridCss" ValidationEnabled="false"> <GridStockQuantityHistoryDtoBase @ref="Grid" ContextIds="ContextIds" ParentDataItem="ParentDataItem" DataSource="StockQuantityHistoryDtos"
<Columns> AutoSaveLayoutName="GridStockQuantityHistoryDto" SignalRClient="FruitBankSignalRClient" Logger="_logger"
<DxGridDataColumn FieldName="Id" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> CssClass="@GridCss" ValidationEnabled="false">
<Columns>
<DxGridDataColumn FieldName="Id" Width="125" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="ProductId" ReadOnly="true" Visible="@IsMasterGrid"> <DxGridDataColumn FieldName="ProductId" ReadOnly="true" Visible="@IsMasterGrid">
<EditSettings> <EditSettings>
<DxComboBoxSettings Data="ProductDtos" <DxComboBoxSettings Data="ProductDtos"
ValueFieldName="Id" ValueFieldName="Id"
TextFieldName="Name" TextFieldName="Name"
DropDownBodyCssClass="dd-body-class" DropDownBodyCssClass="dd-body-class"
ListRenderMode="ListRenderMode.Entire" ListRenderMode="ListRenderMode.Entire"
SearchMode="ListSearchMode.AutoSearch" SearchMode="ListSearchMode.AutoSearch"
SearchFilterCondition="ListSearchFilterCondition.Contains" SearchFilterCondition="ListSearchFilterCondition.Contains"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto" /> ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto" />
</EditSettings> </EditSettings>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="QuantityAdjustment" Width="135" Caption="Adj. Quantity" ReadOnly="true" /> <DxGridDataColumn FieldName="QuantityAdjustment" Width="135" Caption="Adj. Quantity" ReadOnly="true" />
<DxGridDataColumn FieldName="StockQuantity" Width="135" ReadOnly="true" /> <DxGridDataColumn FieldName="StockQuantity" Width="135" ReadOnly="true" />
<DxGridDataColumn FieldName="StockQuantityHistoryId" Width="135" Caption="SqhId" ReadOnly="true" Visible="false" /> <DxGridDataColumn FieldName="StockQuantityHistoryId" Width="135" Caption="SqhId" ReadOnly="true" Visible="false" />
<DxGridDataColumn FieldName="NetWeightAdjustment" Width="135" Caption="Adj. NetWeight(kg)" ReadOnly="true" /> <DxGridDataColumn FieldName="NetWeightAdjustment" Width="135" Caption="Adj. NetWeight(kg)" ReadOnly="true" />
<DxGridDataColumn FieldName="NetWeight" Width="135" Caption="Net Weight(kg)" ReadOnly="true" /> <DxGridDataColumn FieldName="NetWeight" Width="135" Caption="Net Weight(kg)" ReadOnly="true" />
<DxGridDataColumn FieldName="Message" ReadOnly="true" /> <DxGridDataColumn FieldName="Message" ReadOnly="true" />
<DxGridDataColumn FieldName="IsInconsistent" Width="105" Caption="Inconsistent" ReadOnly="true" /> <DxGridDataColumn FieldName="IsInconsistent" Width="105" Caption="Inconsistent" ReadOnly="true" />
<DxGridDataColumn FieldName="CombinationId" Width="125" ReadOnly="true" Visible="false" /> <DxGridDataColumn FieldName="CombinationId" Width="125" ReadOnly="true" Visible="false" />
<DxGridDataColumn FieldName="WarehouseId" Width="125" ReadOnly="true" Visible="false" /> <DxGridDataColumn FieldName="WarehouseId" Width="125" ReadOnly="true" Visible="false" />
<DxGridDataColumn FieldName="CreatedOnUtc" Width="150" Caption="Created" ReadOnly="true" DisplayFormat="g" /> <DxGridDataColumn FieldName="CreatedOnUtc" Width="150" Caption="Created" ReadOnly="true" DisplayFormat="g" />
</Columns> </Columns>
<ToolbarTemplate> <ToolbarTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
@* <GroupSummary> @* <GroupSummary>
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum" <DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="MeasuredQuantity" FieldName="MeasuredQuantity"
FooterColumnName="Quantity" /> FooterColumnName="Quantity" />
@ -60,7 +62,9 @@
FieldName="MeasuredNetWeight" FieldName="MeasuredNetWeight"
FooterColumnName="NetWeight" /> FooterColumnName="NetWeight" />
</GroupSummary> *@ </GroupSummary> *@
</GridStockQuantityHistoryDtoBase> </GridStockQuantityHistoryDtoBase>
</GridContent>
</MgGridWithInfoPanel>
@code { @code {
[Inject] public required DatabaseClient Database { get; set; } [Inject] public required DatabaseClient Database { get; set; }

View File

@ -5,15 +5,15 @@
@inject IJSRuntime JS @inject IJSRuntime JS
<MgGridInfoPanel OnDataItemChanged="OnDataItemChangedAsync"> <MgGridInfoPanel OnDataItemChanged="OnDataItemChangedAsync">
@* <HeaderTemplate Context="dataItem"> @* <HeaderTemplate Context="ctx">
<div class="dxbl-grid-header-panel px-3 py-2 border-bottom d-flex align-items-center"> <div class="dxbl-grid-header-panel px-3 py-2 border-bottom d-flex align-items-center">
<span class="me-2">??</span> <span class="me-2">??</span>
<span class="fw-semibold">Szállítólevél részletei</span> <span class="fw-semibold">Szállítólevél részletei</span>
</div> </div>
</HeaderTemplate> *@ </HeaderTemplate> *@
@* <BeforeColumnsTemplate Context="dataItem"> @* <BeforeColumnsTemplate Context="ctx">
@if (dataItem is ShippingDocument doc) @if (ctx.DataItem is ShippingDocument doc)
{ {
<div class="alert alert-info mb-2 py-1 px-2 small"> <div class="alert alert-info mb-2 py-1 px-2 small">
<strong>Partner:</strong> @doc.Partner?.Name <strong>Partner:</strong> @doc.Partner?.Name
@ -21,8 +21,8 @@
} }
</BeforeColumnsTemplate> *@ </BeforeColumnsTemplate> *@
<AfterColumnsTemplate Context="dataItem"> <AfterColumnsTemplate Context="ctx">
@if (dataItem is ShippingDocument doc) @if (ctx is { IsEditMode: false, DataItem: ShippingDocument doc })
{ {
<table class="table table-sm table-bordered table-striped" style="margin-top: 35px;"> <table class="table table-sm table-bordered table-striped" style="margin-top: 35px;">
<colgroup> <colgroup>
@ -73,7 +73,7 @@
} }
</AfterColumnsTemplate> </AfterColumnsTemplate>
@* <FooterTemplate Context="dataItem"> @* <FooterTemplate Context="ctx">
<div class="p-2 border-top d-flex gap-2"> <div class="p-2 border-top d-flex gap-2">
<DxButton Text="Nyomtatás" IconCssClass="dx-icon dx-icon-print" RenderStyle="ButtonRenderStyle.Light" /> <DxButton Text="Nyomtatás" IconCssClass="dx-icon dx-icon-print" RenderStyle="ButtonRenderStyle.Light" />
<DxButton Text="Export" IconCssClass="dx-icon dx-icon-export" RenderStyle="ButtonRenderStyle.Light" /> <DxButton Text="Export" IconCssClass="dx-icon dx-icon-export" RenderStyle="ButtonRenderStyle.Light" />

View File

@ -15,50 +15,54 @@
@* <GridShippingBase @ref="Grid" Data="Shippings" AutoSaveLayoutName="GridShipping"> *@ @* <GridShippingBase @ref="Grid" Data="Shippings" AutoSaveLayoutName="GridShipping"> *@
<GridShippingBase @ref="Grid" DataSource="Shippings" AutoSaveLayoutName="GridShipping" SignalRClient="FruitBankSignalRClient" Logger="_logger" <MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
CssClass="@GridCss" ValidationEnabled="false" <GridContent>
OnGridFocusedRowChanged="Grid_FocusedRowChanged"> <GridShippingBase @ref="Grid" DataSource="Shippings" AutoSaveLayoutName="GridShipping" SignalRClient="FruitBankSignalRClient" Logger="_logger"
<Columns> CssClass="@GridCss" ValidationEnabled="false"
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="ShippingDate" /> <DxGridDataColumn FieldName="ShippingDate" />
<DxGridDataColumn FieldName="LicencePlate" /> <DxGridDataColumn FieldName="LicencePlate" />
<DxGridDataColumn FieldName="IsAllMeasured" ReadOnly="true" /> <DxGridDataColumn FieldName="IsAllMeasured" ReadOnly="true" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" /> <DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" /> <DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
var shipping = ((Shipping)context.DataItem); var shipping = ((Shipping)context.DataItem);
var shippingDocuments = shipping?.ShippingDocuments ?? []; var shippingDocuments = shipping?.ShippingDocuments ?? [];
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)"> <DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
<DxTabPage Text="Szállítólevelek"> <DxTabPage Text="Szállítólevelek">
@{ @{
var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments); var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments);
<GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@shipping" Partners="@Partners"></GridShippingDocument> <GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@shipping" Partners="@Partners"></GridShippingDocument>
} }
</DxTabPage> </DxTabPage>
<DxTabPage Text="Szállítmány tételek"> <DxTabPage Text="Szállítmány tételek">
@{ @{
var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? [])); var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? []));
<GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@shipping" /> <GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@shipping" />
} }
</DxTabPage> </DxTabPage>
</DxTabs> </DxTabs>
} }
</DetailRowTemplate> </DetailRowTemplate>
<ToolbarTemplate> <ToolbarTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
</GridShippingBase> </GridShippingBase>
</GridContent>
</MgGridWithInfoPanel>
@code { @code {
//[Inject] public required ObjectLock ObjectLock { get; set; } //[Inject] public required ObjectLock ObjectLock { get; set; }

View File

@ -13,43 +13,47 @@
@inject IEnumerable<IAcLogWriterClientBase> LogWriters @inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient @inject FruitBankSignalRClient FruitBankSignalRClient
<GridStockTakingItemBase @ref="Grid" AutoSaveLayoutName="GridStockTakingItem" SignalRClient="FruitBankSignalRClient" Logger="_logger" <MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
CssClass="@GridCss" ValidationEnabled="false" OnGridFocusedRowChanged="Grid_FocusedRowChanged"> <GridContent>
<Columns> <GridStockTakingItemBase @ref="Grid" AutoSaveLayoutName="GridStockTakingItem" SignalRClient="FruitBankSignalRClient" Logger="_logger"
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> CssClass="@GridCss" ValidationEnabled="false" OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.StockTakingId)" TextAlignment="GridTextAlignment.Left" Caption="Leltár időpontja"> <DxGridDataColumn FieldName="@nameof(StockTakingItem.StockTakingId)" TextAlignment="GridTextAlignment.Left" Caption="Leltár időpontja">
<CellDisplayTemplate> <CellDisplayTemplate>
<span>@(((StockTakingItem)context.DataItem)?.StockTaking?.StartDateTime.ToString("g") ?? "")</span> <span>@(((StockTakingItem)context.DataItem)?.StockTaking?.StartDateTime.ToString("g") ?? "")</span>
</CellDisplayTemplate> </CellDisplayTemplate>
</DxGridDataColumn> </DxGridDataColumn>
<DxGridDataColumn FieldName="Product.Name" /> <DxGridDataColumn FieldName="Product.Name" />
<DxGridDataColumn FieldName="OriginalStockQuantity" /> <DxGridDataColumn FieldName="OriginalStockQuantity" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.InProcessOrdersQuantity)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.InProcessOrdersQuantity)" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.TotalOriginalQuantity)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.TotalOriginalQuantity)" />
<DxGridDataColumn FieldName="MeasuredStockQuantity" /> <DxGridDataColumn FieldName="MeasuredStockQuantity" />
<DxGridDataColumn FieldName="OriginalNetWeight" /> <DxGridDataColumn FieldName="OriginalNetWeight" />
<DxGridDataColumn FieldName="MeasuredNetWeight" /> <DxGridDataColumn FieldName="MeasuredNetWeight" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.QuantityDiff)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.QuantityDiff)" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.NetWeightDiff)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.NetWeightDiff)" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.IsMeasurable)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.IsMeasurable)" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.IsMeasured)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.IsMeasured)" />
<DxGridDataColumn FieldName="@nameof(StockTakingItem.IsInvalid)" /> <DxGridDataColumn FieldName="@nameof(StockTakingItem.IsInvalid)" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" Visible="false" DisplayFormat="g" /> <DxGridDataColumn FieldName="Created" ReadOnly="true" Visible="false" DisplayFormat="g" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" DisplayFormat="g" /> <DxGridDataColumn FieldName="Modified" ReadOnly="true" DisplayFormat="g" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
<ToolbarTemplate> <ToolbarTemplate>
@if (IsMasterGrid) @if (IsMasterGrid)
{ {
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
</GridStockTakingItemBase> </GridStockTakingItemBase>
</GridContent>
</MgGridWithInfoPanel>
@code { @code {

File diff suppressed because one or more lines are too long