FruitBankHybridApp/FruitBankHybrid.Shared/Components/GridShippingDocument.razor

235 lines
8.7 KiB
Plaintext

@using AyCode.Blazor.Components.Components.Grids
@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components.Grids.ShippingDocuments
@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
<MgGridWithInfoPanel ShowInfoPanel="@IsMasterGrid">
<GridContent>
<GridShippingDocumentBase @ref="Grid" CssClass="@GridCss" DataSource="@ShippingDocuments" SignalRClient="FruitBankSignalRClient" AutoSaveLayoutName="GridShippingDocument"
ParentDataItem="@ParentDataItem" Logger="_logger" ValidationEnabled="false" EditMode="GridEditMode.EditRow" OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="PartnerId" Caption="Partner" Visible="@(!ParentDataItemIsPartner)" ReadOnly="@ParentDataItemIsPartner">
<EditSettings>
<DxComboBoxSettings Data="Partners"
ValueFieldName="Id"
TextFieldName="Name"
DropDownBodyCssClass="dd-body-class"
ListRenderMode="ListRenderMode.Entire"
SearchMode="ListSearchMode.AutoSearch"
SearchFilterCondition="ListSearchFilterCondition.Contains"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto">
<Columns>
<DxListEditorColumn FieldName="@nameof(Partner.Id)" />
<DxListEditorColumn FieldName="@nameof(Partner.Name)" />
<DxListEditorColumn FieldName="@nameof(Partner.TaxId)" />
</Columns>
</DxComboBoxSettings>
</EditSettings>
</DxGridDataColumn>
<DxGridDataColumn FieldName="ShippingId" Caption="Shipping" Visible="@(!ParentDataItemIsShipping)" ReadOnly="@ParentDataItemIsShipping">
<EditSettings>
<DxComboBoxSettings Data="Shippings"
ValueFieldName="Id"
TextFieldName="ShippingDate"
DropDownBodyCssClass="dd-body-class"
ListRenderMode="ListRenderMode.Entire"
SearchMode="ListSearchMode.AutoSearch"
SearchFilterCondition="ListSearchFilterCondition.Contains"
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto">
<Columns>
<DxListEditorColumn FieldName="@nameof(Shipping.Id)" />
<DxListEditorColumn FieldName="@nameof(Shipping.ShippingDate)" />
<DxListEditorColumn FieldName="@nameof(Shipping.LicencePlate)" />
</Columns>
</DxComboBoxSettings>
</EditSettings>
</DxGridDataColumn>
<DxGridDataColumn FieldName="DocumentIdNumber" />
<DxGridDataColumn FieldName="ShippingDate" />
<DxGridDataColumn FieldName="Country" />
<DxGridDataColumn FieldName="TotalPallets" />
<DxGridDataColumn FieldName="IsAllMeasured" ReadOnly="true" />
<DxGridDataColumn FieldName="Comment" />
<DxGridDataColumn FieldName="PdfFileName" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="@(!IsMasterGrid)" Width="120"/>
</Columns>
<DetailRowTemplate>
@if (IsMasterGrid)
{
var shippingDocument = ((ShippingDocument)context.DataItem);
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
<DxTabPage Text="Szállítmány tételek">
@{
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" />
}
</DxTabPage>
</DxTabs>
}
</DetailRowTemplate>
<ToolbarTemplate>
@if (IsMasterGrid)
{
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)">
<ToolbarItemsExtended>
<DxToolbarItem BeginGroup="true">
<Template Context="ctxToolbarItemFileUpload">
<FileUpload OnFileUploaded="OnFileUploaded"></FileUpload>
</Template>
</DxToolbarItem>
</ToolbarItemsExtended>
</MgGridToolbarTemplate>
}
</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>
</GridShippingDocumentBase>
</GridContent>
<ChildContent>
<GridShippingDocumentInfoPanel />
</ChildContent>
</MgGridWithInfoPanel>
@code {
[Inject] public required DatabaseClient Database { get; set; }
[Inject] public required LoggedInModel LoggedInModel { get; set; }
[Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; }
[Parameter] public AcObservableCollection<Partner>? Partners { 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);
public bool ParentDataItemIsPartner => (ParentDataItem is Partner);
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 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 (!ParentDataItemIsPartner)
{
using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync())
{
if (Partners == null) Partners = new AcObservableCollection<Partner>(await FruitBankSignalRClient.GetPartners() ?? []);
else if (Partners.Count == 0 || forceReload)
{
Partners.Replace(await FruitBankSignalRClient.GetPartners() ?? []);
}
}
}
if (!ParentDataItemIsShipping)
{
using (await ObjectLock.GetSemaphore<Shipping>().UseWaitAsync())
{
if (Shippings == null) Shippings = new AcObservableCollection<Shipping>(await FruitBankSignalRClient.GetShippings() ?? []);
else if (Shippings.Count == 0 || forceReload)
{
Shippings.Replace(await FruitBankSignalRClient.GetShippings() ?? []);
}
}
}
if (!IsMasterGrid)
{
if (Shippings == null && ParentDataItem is Shipping shippingParent) Shippings = [shippingParent];
if (Partners == null && ParentDataItem is Partner partnerParent) Partners = [partnerParent];
return;
}
if (Grid == null) return;
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())
if (forceReload) await Grid.ReloadDataSourceAsync();
if (forceReload) Grid.Reload();
}
private async Task OnFileUploaded(byte[] arg)
{
var utfString = Encoding.UTF8.GetString(arg, 0, arg.Length);
var result = await FruitBankSignalRClient.ProcessAndSaveFullShippingJson(utfString, LoggedInModel.CustomerDto!.Id);
if (result != null)
{
foreach (var shippingDocument in result.SelectMany(partner => partner.ShippingDocuments ?? []))
{
ShippingDocuments!.Add(shippingDocument);
}
}
Grid.Reload();
if (OnUploadedFileParsed != null)
await OnUploadedFileParsed(result);
}
async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args)
{
if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow())
await Grid.SaveChangesAsync();
FocusedRowVisibleIndex = args.VisibleIndex;
EditItemsEnabled = true;
}
protected async Task OnActiveTabChanged(int activeTabIndex)
{
_activeTabIndex = activeTabIndex;
}
}