* Added Miscs to ScheduleOrder view

* Added few fields to ScheduleOrderDetailDto
* Map GetScheduleOrder by ID from API
This commit is contained in:
2025-02-20 17:38:45 +01:00
parent 9b8d621f42
commit 0bc80c589d
4 changed files with 232 additions and 101 deletions

View File

@@ -13,6 +13,10 @@ namespace FaKrosnoEfDataModel.Dtos
public string Sh_productCode { get; set; }
public int? Price { get; set; }
public string? OrderNumber {get; set;}
public string? RecipientName {get; set;}
public string? RecipientCode {get; set;}
public string? PurchaserName {get; set;}
public IList<ScheduleOrderDetailDetailDto> ScheduleOrderDetailDetails { get; set; }
public IList<ScheduleOrderDetailMiscDto>? ScheduleOrderDetailMiscs { get; set; }
}

View File

@@ -3,8 +3,25 @@
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Lists
@inject ScheduleOrderDetailsService ScheduleOrderDetailsService
@inject ScheduleOrderService ScheduleOrderService
<div class="h-100 d-flex flex-column">
<h5>Zamówienie DELFOR nr @ScheduleOrderDto?.PONum</h5>
<SfListView Id="ScheduleOrderMiscs"
DataSource="@ScheduleOrderDto?.ScheduleOrderMiscs"
ShowHeader="false"
CssClass="e-list-template">
<ListViewFieldSettings TValue="ScheduleOrderMiscDto" Id="ScheduleOrderMiscListId"
Text="Text"></ListViewFieldSettings>
<ListViewTemplates Context="item" TValue="ScheduleOrderMiscDto">
<Template>
<span
class="e-list-content"><b>@item.Label:</b>@item.Value
</span>
</Template>
</ListViewTemplates>
</SfListView>
<br/>
<h5>Indeksy</h5>
<SfGrid AllowFiltering="true"
AllowPaging="true"
@@ -17,38 +34,22 @@
<DetailTemplate>
@{
IList<ScheduleOrderDetailMiscDto>? scheduleOrderDetailMiscs = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailMiscs;
IList<ScheduleOrderDetailDetailDto>? scheduleOrderDetailDetails = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailDetails;
<SfListView Id="List"
<SfListView Id="ScheduleOrderDetailMiscs"
DataSource="@scheduleOrderDetailMiscs"
ShowHeader="false"
CssClass="e-list-template">
<ListViewFieldSettings TValue="ScheduleOrderDetailMiscDto" Id="Id"
<ListViewFieldSettings TValue="ScheduleOrderDetailMiscDto" Id="ScheduleOrderDetailMiscListId"
Text="Text"></ListViewFieldSettings>
<ListViewTemplates Context="item" TValue="ScheduleOrderDetailMiscDto">
<Template>
<span
class="e-list-content"><b>@item.Label</b>@item.Value
class="e-list-content"><b>@item.Label:</b>@item.Value
</span>
</Template>
</ListViewTemplates>
</SfListView>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode) HeaderText="Pozycja"
Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sh_productCode) HeaderText="Pozycja Klienta"
Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="ScheduleOrderDetailDto" RowSelected="OnSelectedLineRow"
DetailsExpanding="OnDetailsExpanding"></GridEvents>
</SfGrid>
@if (_isVisible)
{
<br/>
<h5>Harmonogramy</h5>
<SfGrid AllowFiltering="true"
@@ -56,25 +57,26 @@
AllowSorting="true"
AllowSelection="true"
TValue="ScheduleOrderDetailDetailDto"
DataSource="@_scheduleOrderDetailsDetails"
DataSource="@scheduleOrderDetailDetails"
EnableAdaptiveUI="true"
AdaptiveUIMode="AdaptiveMode.Both">
<GridEvents TValue="ScheduleOrderDetailDetailDto" RowDataBound="OnRowDataBound" />
<GridTemplates>
<GridEvents TValue="ScheduleOrderDetailDetailDto" RowDataBound="OnRowDataBound"/>
<GridTemplates Context="detailDetail">
<DetailTemplate>
@{
IList<ScheduleOrderDetailDetailMiscDto>? scheduleOrderDetailDetailMiscs = (@context as ScheduleOrderDetailDetailDto)?.ScheduleOrderDetailDetailMiscs;
IList<ScheduleOrderDetailDetailMiscDto>? scheduleOrderDetailDetailMiscs = (@detailDetail as ScheduleOrderDetailDetailDto)?.ScheduleOrderDetailDetailMiscs;
<SfListView Id="List"
<SfListView Id="ScheduleOrderDetailDetailMiscs"
DataSource="@scheduleOrderDetailDetailMiscs"
ShowHeader="false"
CssClass="e-list-template">
<ListViewFieldSettings TValue="ScheduleOrderDetailDetailMiscDto" Id="Id"
<ListViewFieldSettings TValue="ScheduleOrderDetailDetailMiscDto"
Id="ScheduleOrderDetailDetailMiscListId"
Text="Text"></ListViewFieldSettings>
<ListViewTemplates Context="item" TValue="ScheduleOrderDetailDetailMiscDto">
<Template>
<span
class="e-list-content"><b>@item.Label</b>@item.Value
class="e-list-content"><b>@item.Label:</b>@item.Value
</span>
</Template>
</ListViewTemplates>
@@ -99,45 +101,55 @@
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
</SfGrid>
}
</DetailTemplate>
</GridTemplates>
<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.Sh_productCode) HeaderText="Pozycja"
Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode) HeaderText="Pozycja Klienta"
Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
</SfGrid>
</div>
@code {
[Parameter] public int ScheduleOrderId { get; set; }
private bool _isVisible;
private IEnumerable<ScheduleOrderDetailDto>? _scheduleOrderDetails;
private IEnumerable<ScheduleOrderDetailDetailDto>? _scheduleOrderDetailsDetails;
private ScheduleOrderDto? ScheduleOrderDto { get; set; }
protected override async Task OnInitializedAsync()
{
_scheduleOrderDetails = await ScheduleOrderDetailsService.GetScheduleOrderDetails(ScheduleOrderId) ?? new List<ScheduleOrderDetailDto>();
ScheduleOrderDto = await ScheduleOrderService.GetScheduleOrderAsync(ScheduleOrderId);
_scheduleOrderDetails = ScheduleOrderDto?.ScheduleOrderDetails;
if (ScheduleOrderDto is not null && _scheduleOrderDetails is not null)
{
foreach (ScheduleOrderDetailDto scheduleOrderDetailDto in _scheduleOrderDetails)
{
scheduleOrderDetailDto.OrderNumber = ScheduleOrderDto?.PONum;
scheduleOrderDetailDto.RecipientCode = ScheduleOrderDto?.RecipientCode;
scheduleOrderDetailDto.RecipientName = ScheduleOrderDto?.RecipientName;
scheduleOrderDetailDto.PurchaserName = ScheduleOrderDto?.PurchaserCode;
}
}
StateHasChanged();
}
private void OnSelectedLineRow(RowSelectEventArgs<ScheduleOrderDetailDto> obj)
{
ScheduleOrderDetailDto? scheduleOrderDetail = obj.Data;
SelectOrderDetail(scheduleOrderDetail);
}
private void SelectOrderDetail(ScheduleOrderDetailDto? scheduleOrderDetail)
{
_isVisible = scheduleOrderDetail != null;
if (scheduleOrderDetail == null) return;
_scheduleOrderDetailsDetails = scheduleOrderDetail.ScheduleOrderDetailDetails.ToList();
}
private void OnDetailsExpanding(DetailsExpandingEventArgs<ScheduleOrderDetailDto> obj)
{
ScheduleOrderDetailDto? scheduleOrderDetail = obj.Data;
SelectOrderDetail(scheduleOrderDetail);
}
private void OnRowDataBound(RowDataBoundEventArgs<ScheduleOrderDetailDetailDto> args)
{
if (args.Data.QtyType == "83" || args.Data.QtyType == "84")
@@ -145,4 +157,5 @@
args.Row.AddClass(["highlight-red"]);
}
}
}

View File

@@ -2,8 +2,10 @@
@using Syncfusion.Blazor.Grids
@inherits LayoutComponentBase
@inject ScheduleOrderService ScheduleOrderService
<div class="h-100 d-flex flex-column">
<SfGrid @ref="_grid"
<SfGrid @ref="Grid"
TValue="ScheduleOrderDto"
AllowFiltering="true"
AllowPaging="true"
@@ -18,11 +20,18 @@
QueryCellInfo="OnQueryCellInfo"
RowSelected="OnRowSelected">
<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.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>
<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>
@@ -38,19 +47,69 @@
EnableAdaptiveUI="true"
AdaptiveUIMode="AdaptiveMode.Both">
<GridColumns>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sc_productCode) HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(ScheduleOrderDetailDto.Sh_productCode) HeaderText="Pozycja Klienta" Width="100"></GridColumn>
<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>
<GridEvents TValue="ScheduleOrderDto" OnRecordDoubleClick="OnRowDoubleClick" />
<GridFilterSettings Type="FilterType.Excel" />
<GridPageSettings PageSize="PageSize" />
<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>
</div>
@@ -61,7 +120,9 @@
[Parameter] public required int PageSize { get; set; }
private SfGrid<ScheduleOrderDto> _grid { get; set; }
private ScheduleOrderDto? ScheduleOrderDto { get; set; }
private SfGrid<ScheduleOrderDto>? Grid { get; set; }
private IEnumerable<ScheduleOrderDto> _dataSource = [];
@@ -72,16 +133,63 @@
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
if (firstRender && Grid != null)
{
await PassGridRef(_grid);
await PassGridRef(Grid);
}
}
private void OnRowDoubleClick(RecordDoubleClickEventArgs<ScheduleOrderDto> obj)
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 (args.Data.QtyType == "83" || args.Data.QtyType == "84")
{
args.Row.AddClass(["highlight-red"]);
}
}
}

View File

@@ -8,5 +8,11 @@ namespace OrdersManagement.Services
{
return await httpClient.GetFromJsonAsync<IEnumerable<ScheduleOrderDto>>("api/ScheduleOrders");
}
public async Task<ScheduleOrderDto?> GetScheduleOrderAsync(int scheduleOrderId)
{
return await httpClient.GetFromJsonAsync<ScheduleOrderDto>(
$"api/ScheduleOrders/{scheduleOrderId}");
}
}
}