324 lines
11 KiB
Plaintext
324 lines
11 KiB
Plaintext
@using AyCode.Utils.Extensions
|
|
@using FruitBank.Common.Dtos
|
|
@using FruitBank.Common.Entities
|
|
@using FruitBankHybrid.Shared.Components.FileUploads
|
|
@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 FruitBank.Common.Models
|
|
|
|
@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">
|
|
<Columns>
|
|
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" />
|
|
<DxGridDataColumn FieldName="PartnerId" Caption="Partner">
|
|
<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">
|
|
<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"></DxGridCommandColumn>
|
|
</Columns>
|
|
<DetailRowTemplate>
|
|
@if (IsMasterGrid)
|
|
{
|
|
var shippingDocument = ((ShippingDocument)context.DataItem);
|
|
|
|
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)">
|
|
<DxTabPage Text="Szállítmány tételek">
|
|
<GridShippingItemTemplate ShippingItems="shippingDocument.ShippingItems" 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)
|
|
{
|
|
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)">
|
|
<ToolbarItemsExtended>
|
|
<DxToolbarItem BeginGroup="true">
|
|
<Template Context="ctxToolbarItemFileUpload">
|
|
@* <DxUpload Name="myFile"
|
|
UploadMode="@UploadMode.Instant"
|
|
AllowMultiFileUpload="false"
|
|
ShowSelectButton="true"
|
|
MaxFileSize="15000000">
|
|
</DxUpload> *@
|
|
<FileUpload OnFileUploaded="OnFileUploaded"></FileUpload>
|
|
</Template>
|
|
</DxToolbarItem>
|
|
@* <DxToolbarItem BeginGroup="true">
|
|
<Template Context="toolbar_item_context">
|
|
<DxSearchBox @bind-Text="GridSearchText"
|
|
BindValueMode="BindValueMode.OnInput"
|
|
ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto"
|
|
aria-label="Search" />
|
|
</Template>
|
|
</DxToolbarItem>*@
|
|
</ToolbarItemsExtended>
|
|
</FruitBankToolbarTemplate>
|
|
}
|
|
</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 {
|
|
//EditRow dblClick
|
|
//https://supportcenter.devexpress.com/ticket/details/t1097648/datagrid-for-blazor-how-to-start-editing-a-row-and-save-changes-without-the-command-column
|
|
|
|
//[Inject] public required ObjectLock ObjectLock { get; set; }
|
|
[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 List<Partner>? Partners { get; set; }
|
|
[Parameter] public AcFastObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
|
|
|
|
[Parameter] public Func<List<Partner>?, Task>? OnUploadedFileParsed { get; set; }
|
|
|
|
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; }
|
|
|
|
private int _activeTabIndex;
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
{
|
|
_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() ?? [];
|
|
else if (Partners.Count == 0 || forceReload)
|
|
{
|
|
Partners.Clear();
|
|
Partners.AddRange(await FruitBankSignalRClient.GetPartners() ?? []);
|
|
}
|
|
}
|
|
|
|
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() ?? []);
|
|
}
|
|
}
|
|
|
|
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) 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);
|
|
//await InvokeAsync(StateHasChanged);
|
|
}
|
|
|
|
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)
|
|
{
|
|
// 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;
|
|
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;
|
|
// }
|
|
}
|
|
} |