235 lines
8.7 KiB
Plaintext
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;
|
|
}
|
|
} |