286 lines
14 KiB
Plaintext
286 lines
14 KiB
Plaintext
@inject NavigationManager NavigationManager
|
|
@using System.Text.Json
|
|
@using Syncfusion.Blazor.Grids
|
|
@using Syncfusion.Blazor.Cards
|
|
@using Syncfusion.Blazor.Data
|
|
@using FilterType = Syncfusion.Blazor.Grids.FilterType
|
|
@using Syncfusion.Blazor.Navigations
|
|
@inherits LayoutComponentBase
|
|
|
|
@inject ScheduleOrderService ScheduleOrderService
|
|
@inject IJSRuntime JSRuntime
|
|
|
|
<div class="h-100 d-flex justify-content-center align-items-start">
|
|
<SfCard CssClass="shadow" style="width: 100%; max-width: 1200px;">
|
|
<CardHeader>
|
|
<h3 class="text-primary">Zamówienia DELFOR</h3>
|
|
</CardHeader>
|
|
<CardContent>
|
|
<SfGrid @ref="Grid"
|
|
TValue="ScheduleOrderDto"
|
|
AllowFiltering="true"
|
|
AllowPaging="true"
|
|
AllowSorting="true"
|
|
AllowSelection="true"
|
|
DataSource="@_dataSource"
|
|
EnableAdaptiveUI="true"
|
|
EnablePersistence="true"
|
|
AdaptiveUIMode="AdaptiveMode.Both"
|
|
AllowRowClick="true"
|
|
SelectionMode="GridSelectionMode.Single"
|
|
QueryCellInfo="OnQueryCellInfo"
|
|
RowSelected="OnRowSelected">
|
|
<SfToolbar>
|
|
<ToolbarItems>
|
|
<ToolbarItem Type="ItemType.Button" Text="Zapisz Filtry" Id="SaveButton"
|
|
PrefixIcon="e-icons e-save" OnClick="SaveFilters"/>
|
|
<ToolbarItem Type="ItemType.Button" Id="DeleteButton" PrefixIcon="e-icons e-delete"
|
|
Text="Usuń Zapisane Filtry" OnClick="DeleteFilters"/>
|
|
</ToolbarItems>
|
|
</SfToolbar>
|
|
<GridColumns>
|
|
<GridColumn Field=@nameof(ScheduleOrderDto.PONum) HeaderText="Zamówienie Klienta" Width="150"
|
|
AllowFiltering="true"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDto.PurchaserCode) HeaderText="Klient" Width="100"
|
|
AllowFiltering="true"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientName) HeaderText="Odbiorca" Width="100"
|
|
AllowFiltering="true"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDto.RecipientCode) HeaderText="Kod odbiorcy" Width="100"
|
|
AllowFiltering="true"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDto.LastUpdateDate) HeaderText="Data Utworzenia" Format="d"
|
|
Type="ColumnType.Date" Width="130" AllowFiltering="true"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDto.DocType) HeaderText="Typ Dokumentu" Width="100"
|
|
AllowFiltering="true"></GridColumn>
|
|
</GridColumns>
|
|
<GridTemplates>
|
|
<DetailTemplate>
|
|
@{
|
|
IList<ScheduleOrderDetailDto>? scheduleOrderDetails = (@context as ScheduleOrderDto)?.ScheduleOrderDetails;
|
|
<SfGrid AllowFiltering="true"
|
|
AllowPaging="true"
|
|
AllowSorting="true"
|
|
AllowSelection="true"
|
|
TValue="ScheduleOrderDetailDto"
|
|
DataSource="@scheduleOrderDetails"
|
|
EnablePersistence="true"
|
|
EnableAdaptiveUI="true"
|
|
AdaptiveUIMode="AdaptiveMode.Both">
|
|
<GridColumns>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.OrderNumber)
|
|
HeaderText="Numer Zamówienia" Width="100"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.PurchaserName) HeaderText="Klient"
|
|
Width="100"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientName)
|
|
HeaderText="Odbiorca" Width="100"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.RecipientCode)
|
|
HeaderText="Kod odbiorcy" Width="100"
|
|
AllowFiltering="true"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode)
|
|
HeaderText="Pozycja" Width="100"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sh_productCode)
|
|
HeaderText="Pozycja Klienta" Width="100"></GridColumn>
|
|
</GridColumns>
|
|
<GridTemplates>
|
|
<DetailTemplate Context="detail">
|
|
@{
|
|
IList<ScheduleOrderDetailDetailDto>? scheduleOrderDetailsDetails = (@detail as ScheduleOrderDetailDto)?.ScheduleOrderDetailDetails;
|
|
<SfGrid AllowFiltering="true"
|
|
AllowPaging="true"
|
|
AllowSorting="true"
|
|
AllowSelection="true"
|
|
TValue="ScheduleOrderDetailDetailDto"
|
|
DataSource="@scheduleOrderDetailsDetails"
|
|
EnableAdaptiveUI="true"
|
|
AdaptiveUIMode="AdaptiveMode.Both">
|
|
<GridColumns>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateFrom)
|
|
HeaderText="Data Od" Width="100"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.DateTo)
|
|
HeaderText="Data Do" Width="100"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.Qty)
|
|
TextAlign="TextAlign.Right" HeaderText="Ilość Sztuk"
|
|
Width="50"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyType)
|
|
TextAlign="TextAlign.Right" HeaderText="Typ Qty"
|
|
Width="50"></GridColumn>
|
|
<GridColumn Field=@nameof(ScheduleOrderDetailDetailDto.QtyDesc)
|
|
HeaderText="Opis Typu" Width="100"></GridColumn>
|
|
</GridColumns>
|
|
<GridFilterSettings Type="FilterType.Excel"/>
|
|
<GridPageSettings PageSize="10"/>
|
|
<GridSelectionSettings Mode="SelectionMode.Row"
|
|
Type="SelectionType.Single"/>
|
|
<GridEvents TValue="ScheduleOrderDetailDetailDto"
|
|
OnRecordDoubleClick="OnScheduleOrderDetailDetailRowDoubleClick"
|
|
RowDataBound="OnRowDataBound"/>
|
|
</SfGrid>
|
|
}
|
|
</DetailTemplate>
|
|
</GridTemplates>
|
|
<GridFilterSettings Type="FilterType.Excel"/>
|
|
<GridPageSettings PageSize="10"/>
|
|
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
|
|
<GridEvents TValue="ScheduleOrderDetailDto"
|
|
OnRecordDoubleClick="OnScheduleOrderDetailRowDoubleClick"/>
|
|
</SfGrid>
|
|
}
|
|
</DetailTemplate>
|
|
</GridTemplates>
|
|
<GridEvents TValue="ScheduleOrderDto" OnRecordDoubleClick="OnScheduleOrderRowDoubleClick" DetailsExpanding="OnDetailsExpanding"/>
|
|
<GridFilterSettings Type="FilterType.Excel"/>
|
|
<GridPageSettings PageSize="@PageSize"/>
|
|
</SfGrid>
|
|
</CardContent>
|
|
<CardFooter>
|
|
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
|
|
</CardFooter>
|
|
</SfCard>
|
|
</div>
|
|
|
|
@code {
|
|
[Parameter] public required IEnumerable<ScheduleOrderDto> GridData { get; set; }
|
|
|
|
[Parameter] public required Func<SfGrid<ScheduleOrderDto>, Task> PassGridRef { get; set; }
|
|
|
|
[Parameter] public required int PageSize { get; set; }
|
|
|
|
private ScheduleOrderDto? ScheduleOrderDto { get; set; }
|
|
|
|
private SfGrid<ScheduleOrderDto>? Grid { get; set; }
|
|
|
|
private IEnumerable<ScheduleOrderDto> _dataSource = [];
|
|
|
|
protected override void OnParametersSet()
|
|
{
|
|
_dataSource = GridData;
|
|
}
|
|
|
|
protected override async Task OnAfterRenderAsync(bool firstRender)
|
|
{
|
|
if (firstRender && Grid != null)
|
|
{
|
|
await PassGridRef(Grid);
|
|
}
|
|
}
|
|
|
|
private void OnScheduleOrderRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDto> obj)
|
|
{
|
|
int scheduleOrderId = obj.RowData.ID;
|
|
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
|
}
|
|
|
|
private void OnScheduleOrderDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDto> obj)
|
|
{
|
|
int? scheduleOrderId = ScheduleOrderDto?.ID;
|
|
|
|
if (scheduleOrderId is not null)
|
|
{
|
|
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
|
}
|
|
}
|
|
|
|
private void OnScheduleOrderDetailDetailRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDetailDetailDto> obj)
|
|
{
|
|
int? scheduleOrderId = ScheduleOrderDto?.ID;
|
|
|
|
if (scheduleOrderId is not null)
|
|
{
|
|
NavigationManager.NavigateTo($"/ScheduleOrder/{scheduleOrderId}");
|
|
}
|
|
}
|
|
|
|
private async Task OnDetailsExpanding(DetailsExpandingEventArgs<ScheduleOrderDto> obj)
|
|
{
|
|
ScheduleOrderDto = obj.Data;
|
|
|
|
if (ScheduleOrderDto != null)
|
|
{
|
|
ScheduleOrderDto? scheduleOrder = await ScheduleOrderService.GetScheduleOrderAsync(ScheduleOrderDto.ID);
|
|
ScheduleOrderDto.ScheduleOrderDetails = scheduleOrder?.ScheduleOrderDetails ?? [];
|
|
|
|
foreach (ScheduleOrderDetailDto scheduleOrderDetailDto in ScheduleOrderDto.ScheduleOrderDetails)
|
|
{
|
|
scheduleOrderDetailDto.OrderNumber = scheduleOrder?.PONum;
|
|
scheduleOrderDetailDto.RecipientCode = scheduleOrder?.RecipientCode;
|
|
scheduleOrderDetailDto.RecipientName = scheduleOrder?.RecipientName;
|
|
scheduleOrderDetailDto.PurchaserName = scheduleOrder?.PurchaserCode;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void OnRowDataBound(RowDataBoundEventArgs<ScheduleOrderDetailDetailDto> args)
|
|
{
|
|
if (new[] { "54", "83", "84" }.Any(x => x == args.Data.QtyType))
|
|
{
|
|
args.Row.AddClass(["highlight-red"]);
|
|
}
|
|
}
|
|
|
|
public async Task RestoreFilterFromLocalStorage()
|
|
{
|
|
var filterJson = await JSRuntime.InvokeAsync<string>("localStorage.getItem", "gridFilter");
|
|
if (!string.IsNullOrEmpty(filterJson))
|
|
{
|
|
var options = new JsonSerializerOptions
|
|
{
|
|
PropertyNameCaseInsensitive = true
|
|
};
|
|
var filters = JsonSerializer.Deserialize<List<WhereFilter>>(filterJson, options);
|
|
|
|
await Grid.ClearFilteringAsync();
|
|
|
|
if (filters != null && filters.Any())
|
|
{
|
|
foreach (var filter in filters.GroupBy(x => x.Field))
|
|
{
|
|
IList<object> values = filter.Select(x => GetValueFromJsonElement((JsonElement)x.value)).ToList();
|
|
|
|
await Grid.FilterByColumnAsync(filter.Key, filter.First().Operator.ToLower(), values);
|
|
}
|
|
|
|
await Grid.Refresh();
|
|
}
|
|
}
|
|
}
|
|
|
|
private object GetValueFromJsonElement(JsonElement element)
|
|
{
|
|
switch (element.ValueKind)
|
|
{
|
|
case JsonValueKind.String:
|
|
return element.GetString();
|
|
case JsonValueKind.Number:
|
|
if (element.TryGetInt32(out int intValue)) return intValue;
|
|
if (element.TryGetDouble(out double doubleValue)) return doubleValue;
|
|
break;
|
|
case JsonValueKind.True:
|
|
return true;
|
|
case JsonValueKind.False:
|
|
return false;
|
|
case JsonValueKind.Null:
|
|
return null;
|
|
default:
|
|
Console.WriteLine($"Nieobsługiwany typ JsonElement: {element.ValueKind}");
|
|
return null;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
private async Task SaveFilters()
|
|
{
|
|
var filterSettings = Grid.FilterSettings.Columns;
|
|
if (filterSettings != null && filterSettings.Any())
|
|
{
|
|
string filterJson = JsonSerializer.Serialize(filterSettings);
|
|
await JSRuntime.InvokeVoidAsync("localStorage.setItem", "gridFilter", filterJson);
|
|
}
|
|
}
|
|
|
|
private async Task DeleteFilters()
|
|
{
|
|
await JSRuntime.InvokeVoidAsync("localStorage.removeItem", "gridFilter");
|
|
await Grid.ClearFilteringAsync();
|
|
}
|
|
|
|
} |