Files
FA_WEB/OrdersManagement/Components/Pages/CustomerOrder.razor
Piotr Kus 695478fbd1 * Changed theme to material.css
* Changed Grid to SyncFusion in CO details and SO details
* Changed Main template to Syncfusion
2025-02-04 20:39:53 +01:00

369 lines
20 KiB
Plaintext

@page "/CustomerOrder/{CustomerOrderId:guid}"
@inject CustomerOrderService CustomerOrderService
@inject ScheduleOrderService ScheduleOrderService
@using SytelineSaAppEfDataModel.Dtos
@using OrdersManagement.Components.Pages.Shared
@using Syncfusion.Blazor.Grids
@inherits LayoutComponentBase
<h3>Zamówienie klienta nr @CustomerOrders.FirstOrDefault()?.CoNum</h3>
<br/>
<div class="row">
<div class="col">
<SortableList TItem="CustomerOrderDto" Data="CustomerOrders" Class="bg-light">
<ItemTemplate>
<u>Numer Zamówienia:</u> <b>@context.CoNum</b><br/>
<u>Numer Zamówienia Klienta:</u> <b>@context.CustPo</b><br/>
<u>Klient:</u> <b>@context.CustNum</b><br/>
<u>Numer Odbiorcy:</u> <b>@context.CustSeq</b><br/>
<u>Kontakt:</u> <b>@context.Contact</b><br/>
<u>Telefon:</u> <b>@context.Phone</b><br/>
<u>Data Zamówienia:</u> <b>@context.OrderDate.ToString("yyyy-MM-dd HH:mm:ss")</b><br/>
<u>Warunki:</u> <b>@context.TermsCode</b><br/>
<u>Wartość Brutto:</u> <b>@(context.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u> <b>@context.TranslatedStatus</b><br/>
</ItemTemplate>
</SortableList>
</div>
<div class="col">
<SortableList TItem="CustomerOrderDto" Data="CustomerOrders" Class="bg-light">
<ItemTemplate>
<u>Magazyn:</u> <b>@context.Whse</b><br/>
<u>VAT:</u> <b>@context.FrtTaxCode1</b><br/>
<u>Typ Odbiorcy:</u> <b>@context.EndUserType</b><br/>
<u>Kurs Wymiany:</u> <b>@(context.ExchRate?.ToString("F4") ?? "N/A")</b><br/>
<u>Gate:</u> <b>@context.Uf_FKR_EDI_Gate</b><br/>
<u>RecipientCode:</u> <b>@context.Uf_FKR_EDI_RecipientCode</b><br/>
<u>SelletCode:</u> <b>@context.Uf_FKR_EDI_SellerCode</b><br/>
<u>SenderCode:</u> <b>@context.Uf_FKR_EDI_SenderCode</b><br/>
<u>BuyerCode:</u> <b>@context.Uf_FKR_EDI_BuyerCode</b><br/>
<u>Typ Dokumentu:</u> <b>@context.Uf_DocType</b><br/>
</ItemTemplate>
</SortableList>
</div>
</div>
<br/>
<div class="row">
<div class="col-md-12">
<Button Color="ButtonColor.Primary" @onclick="ShowLastDelfors">@_text</Button>
</div>
</div>
<br/>
@if (_isVisible)
{
<div class="row">
<h3>Zamówienie DELFOR do zamówienia @CustomerOrders.FirstOrDefault()?.CoNum</h3>
</div>
<br/>
<div class="row">
<ScheduleOrdersGrid PageSize="5" PassGridRef="SetGridRef" GridData="_scheduleOrders"></ScheduleOrdersGrid>
</div>
<br/>
}
<div class="row">
<h3>Indeksy</h3>
</div>
<div class="row">
@* <Grid @ref="_customerOrderLinesGrid" *@
@* TItem="CustomerOrderLineDto" *@
@* Class="table table-hover table-bordered table-striped" *@
@* Data="_customerOrderLines" *@
@* AllowFiltering="true" *@
@* Responsive="true" *@
@* AllowPaging="true" *@
@* PageSize="10" *@
@* AllowSelection="true" *@
@* AllowRowClick="true" *@
@* SelectionMode="GridSelectionMode.Single" *@
@* SelectedItemsChanged="SelectedCustomerOrderLineChanged"> *@
@* <Syncfusion.Blazor.Grids.GridColumns> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Linia" PropertyName="CoLine"> *@
@* @context.CoLine *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Pozycja" PropertyName="Item"> *@
@* @context.Item *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Pozycja Klienta" PropertyName="CustItem"> *@
@* @context.CustItem *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Opis" PropertyName="Description"> *@
@* @context.Description *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Ilość" TextAlignment="Alignment.End" *@
@* PropertyName="BlanketQty"> *@
@* @context.BlanketQty *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="J/M" PropertyName="UM"> *@
@* @context.UM *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Cena" PropertyName="ContPrice"> *@
@* @context.ContPrice *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineDto" HeaderText="Status" PropertyName="TranslatedStatus"> *@
@* @context.TranslatedStatus *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* </Syncfusion.Blazor.Grids.GridColumns> *@
@* </Grid> *@
<SfGrid AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
DataSource="@_customerOrderLines"
EnableAdaptiveUI="true">
<Syncfusion.Blazor.Grids.GridColumns>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.CoLine) HeaderText="Linia" Width="70"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.Item) HeaderText="Pozycja" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.CustItem) HeaderText="Pozycja Klienta" Width="120"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.Description) HeaderText="Opis" Width="200"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.BlanketQty) HeaderText="Ilość" TextAlign="TextAlign.Right" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.UM) HeaderText="J/M" Width="50"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.ContPrice) HeaderText="Cena" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineDto.TranslatedStatus) HeaderText="Status" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
</Syncfusion.Blazor.Grids.GridColumns>
<GridFilterSettings Type="FilterType.Excel" />
<GridPageSettings PageSize="10" />
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single" />
<GridEvents TValue="CustomerOrderLineDto" RowSelected="OnSelectedLineRow"></GridEvents>
</SfGrid>
</div>
@if (_isVisibleCustomerOrderLine)
{
<div class="row">
<h3>Szczegóły</h3>
</div>
@* <div class="row"> *@
@* <div class="col"> *@
@* <SortableList TItem="CustomerOrderLineDto" Data="_selectedCustomerOrderLine"> *@
@* <ItemTemplate> *@
@* <u>Numer zamówienia:</u>&emsp;<b>@context.CoNum</b><br/> *@
@* <u>Linia:</u>&emsp;<b>@context.CoLine</b><br/> *@
@* <u>Pozycja:</u>&emsp;<b>@context.Item</b><br/> *@
@* <u>Pozycja Klienta:</u>&emsp;<b>@context.CustItem</b><br/> *@
@* <u>Opis:</u>&emsp;<b>@context.Description</b><br/> *@
@* <u>Łączna Ilość:</u>&emsp;<b>@context.BlanketQty.ToString("F2")</b><br/> *@
@* <u>Status:</u>&emsp;<b>@context.TranslatedStatus</b><br/> *@
@* </ItemTemplate> *@
@* </SortableList> *@
@* </div> *@
@* <div class="col"> *@
@* <SortableList TItem="CustomerOrderLineDto" Data="_selectedCustomerOrderLine"> *@
@* <ItemTemplate> *@
@* <u>Cena:</u>&emsp;<b>@(context.ContPrice?.ToString("F2") ?? "N/A")</b><br/> *@
@* <u>Ważne Od:</u>&emsp;<b>@(context.EffDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/> *@
@* <u>J/M:</u>&emsp;<b>@context.UM</b><br/> *@
@* <u>BoxType:</u>&emsp;<b>@context.Uf_FKR_EDI_BLN_BoxType</b><br/> *@
@* <u>Address:</u>&emsp;<b>@context.Uf_FKR_EDI_BLN_Address</b><br/> *@
@* <u>FinalDestination:</u>&emsp;<b>@context.Uf_FKR_EDI_BLN_FinalDestination</b><br/> *@
@* <u>QtyPerBox:</u>&emsp;<b>@(context.Uf_FKR_EDI_BLN_QtyPerBox?.ToString() ?? "N/A")</b> *@
@* </ItemTemplate> *@
@* </SortableList> *@
@* </div> *@
@* </div> *@
<br/>
<h3>Harmonogramy</h3>
<div class="row">
@* <Grid @ref="_customerOrderLineItemsGrid" *@
@* TItem="CustomerOrderLineItemDto" *@
@* Class="table table-hover table-bordered table-striped" *@
@* Data="_customerOrderLineItems" *@
@* AllowFiltering="true" *@
@* Responsive="true" *@
@* AllowPaging="true" *@
@* PageSize="10" *@
@* AllowSelection="true" *@
@* AllowRowClick="true" *@
@* SelectionMode="GridSelectionMode.Single" *@
@* SelectedItemsChanged="SelectedCustomerOrderLineItemChanged"> *@
@* <Syncfusion.Blazor.Grids.GridColumns> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Linia" PropertyName="CustomerOrderLine"> *@
@* @context.CoLine *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Zwolnienie" *@
@* PropertyName="CustomerOrderRelease"> *@
@* @context.CoRelease *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Pozycja" PropertyName="Item"> *@
@* @context.Item *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Pozycja" PropertyName="CustomerItem"> *@
@* @context.CustItem *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Łączna Ilość" TextAlignment="Alignment.End" *@
@* PropertyName="QtyOrdered"> *@
@* @context.QtyOrdered *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Data Wykonania" PropertyName="DueDate"> *@
@* @context.DueDate?.ToString("dd.MM.yyyy") *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* <Syncfusion.Blazor.Grids.GridColumn TItem="CustomerOrderLineItemDto" HeaderText="Status" PropertyName="TranslatedStatus"> *@
@* @context.TranslatedStatus *@
@* </Syncfusion.Blazor.Grids.GridColumn> *@
@* </Syncfusion.Blazor.Grids.GridColumns> *@
@* </Grid> *@
<SfGrid @ref="_customerOrderLineItemsGrid"
TValue="CustomerOrderLineItemDto"
DataSource="@_customerOrderLineItems"
AllowFiltering="true"
AllowPaging="true"
AllowSelection="true"
AllowSorting="true"
SelectionMode="Syncfusion.Blazor.Grids.SelectionMode.Single"
SelectedItemsChanged="SelectedCustomerOrderLineItemChanged">
<Syncfusion.Blazor.Grids.GridColumns>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.CoLine) HeaderText="Linia" Width="70" />
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.CoRelease) HeaderText="Zwolnienie" Width="70" />
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.Item) HeaderText="Pozycja" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.CustItem) HeaderText="Pozycja" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.QtyOrdered) HeaderText="Łączna Ilość" TextAlign="TextAlign.Right" Width="120"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.DueDate) HeaderText="Data Wykonania" Width="100" />
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(CustomerOrderLineItemDto.TranslatedStatus) HeaderText="Status" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
</Syncfusion.Blazor.Grids.GridColumns>
<GridFilterSettings Type="FilterType.Excel" />
<GridPageSettings PageSize="10" />
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single" />
<GridEvents TValue="CustomerOrderLineItemDto" RowSelected="OnSelectedLineItemRow"></GridEvents>
</SfGrid>
</div>
@if (_isVisibleCustomerOrderLineItem)
{
<div class="row">
<h3>Szczegóły</h3>
</div>
@* <div class="row"> *@
@* <div class="col"> *@
@* <SortableList TItem="CustomerOrderLineItemDto" Data="_selectedCustomerOrderLineItem"> *@
@* <ItemTemplate> *@
@* <u>Numer Zamówienia:</u>&emsp;<b>@context.CoNum</b><br/> *@
@* <u>Linia:</u>&emsp;<b>@context.CoLine</b><br/> *@
@* <u>Zwolnienie:</u>&emsp;<b>@context.CoRelease</b><br/> *@
@* <u>Pozycja:</u>&emsp;<b>@context.Item</b><br/> *@
@* <u>Pozycja Klienta:</u>&emsp;<b>@context.CustItem</b><br/> *@
@* <u>Łączna Ilość Sztuk:</u>&emsp;<b>@(context.QtyOrdered.ToString("F2") ?? "N/A")</b><br/> *@
@* <u>Cena:</u>&emsp;<b>@(context.Price.ToString("F2") ?? "N/A")</b><br/> *@
@* <u>Data Wykonania:</u>&emsp;<b>@(context.DueDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/> *@
@* <u>Data *@
@* Rejestracji:</u>&emsp;<b>@(context.ReleaseDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/> *@
@* <u>Magazyn:</u>&emsp;<b>@context.Whse</b><br/> *@
@* <u>Typ Documentu:</u>&emsp;<b>@context.Uf_FKR_EDI_ITEM_DocumentType</b><br/> *@
@* </ItemTemplate> *@
@* </SortableList> *@
@* </div> *@
@* <div class="col"> *@
@* <SortableList TItem="CustomerOrderLineItemDto" Data="_selectedCustomerOrderLineItem"> *@
@* <ItemTemplate> *@
@* <u>Kod VAT:</u>&emsp;<b>@context.TaxCode1</b><br/> *@
@* <u>J/M:</u>&emsp;<b>@context.UM</b><br/> *@
@* <u>Numer Klienta:</u>&emsp;<b>@context.CoCustNum</b><br/> *@
@* <u>Opis:</u>&emsp;<b>@context.Description</b><br/> *@
@* <u>Status:</u>&emsp;<b>@context.TranslatedStatus</b><br/> *@
@* <u>RoutingCode:</u>&emsp;<b>@context.Uf_FKR_EDI_ITEM_RoutingCode</b><br/> *@
@* <u>DeliveryCallNumber:</u>&emsp;<b>@context.Uf_FKR_EDI_ITEM_DeliveryCallNum</b><br/> *@
@* <u>UnloadingPoint:</u>&emsp;<b>@context.Uf_LOC_11_UnloadingPoint</b><br/> *@
@* <u>DestinationPoint:</u>&emsp;<b>@context.Uf_LOC_159_DestinationPoint</b><br/> *@
@* <u>PalletCode:</u>&emsp;<b>@context.Uf_FKR_EDI_ITEM_PalletCode</b><br/> *@
@* </ItemTemplate> *@
@* </SortableList> *@
@* </div> *@
@* </div> *@
}
}
@code {
[Parameter] public Guid CustomerOrderId { get; set; }
private List<CustomerOrderDto> CustomerOrders { get; set; } = [];
private List<CustomerOrderLineDto> _customerOrderLines = [];
private List<CustomerOrderLineItemDto> _customerOrderLineItems = [];
private IEnumerable<ScheduleOrderDto>? _scheduleOrders;
CustomerOrderLineDto? _selectedCustomerOrderLine;
CustomerOrderLineItemDto? _selectedCustomerOrderLineItem;
private SfGrid<CustomerOrderLineDto>? _customerOrderLinesGrid;
private SfGrid<CustomerOrderLineItemDto>? _customerOrderLineItemsGrid;
private bool _isVisibleCustomerOrderLine;
private bool _isVisibleCustomerOrderLineItem;
private SfGrid<ScheduleOrderDto> _gridRef = new();
private bool _isVisible = true;
private string _text = "Pokaż powiązane zamówienia DELFOR";
protected override async Task OnInitializedAsync()
{
CustomerOrderDto? customerOrder = await CustomerOrderService.GetCustomerOrderAsync(CustomerOrderId);
if (customerOrder != null)
{
CustomerOrders = [customerOrder];
_customerOrderLines = customerOrder.CustomerOrderLines.ToList() ?? [];
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await SetGridRef(_gridRef);
StateHasChanged();
_isVisible = false;
}
}
private async Task ShowLastDelfors()
{
if (_isVisible)
{
_isVisible = false;
_text = "Pokaż powiązane zamówienia DELFOR";
_scheduleOrders = [];
}
else
{
_scheduleOrders = await FetchScheduleOrdersAsync();
await _gridRef.Refresh();
StateHasChanged();
_isVisible = true;
_text = "Ukryj";
}
}
private async Task SetGridRef(SfGrid<ScheduleOrderDto> grid)
{
_gridRef = grid;
}
private async Task<IEnumerable<ScheduleOrderDto>> FetchScheduleOrdersAsync()
{
_scheduleOrders = [];
IList<int> scheduleOrderDetails = CustomerOrders?.FirstOrDefault()?.EdiCustomerOrderTranslates?.Select(x => x.ScheduleOrderId).Distinct().ToList() ?? [];
if (scheduleOrderDetails.Any())
{
_scheduleOrders = await ScheduleOrderService.GetScheduleOrdersAsync() ?? new List<ScheduleOrderDto>();
_scheduleOrders = _scheduleOrders.Where(x => scheduleOrderDetails.Contains(x.ID)).OrderByDescending(x => x.LastUpdateDate).ToList();
}
return _scheduleOrders;
}
private void OnSelectedLineRow<TValue>(RowSelectEventArgs<TValue> obj)
{
_selectedCustomerOrderLine = obj.Data as CustomerOrderLineDto;
_isVisibleCustomerOrderLine = _selectedCustomerOrderLine != null;
_customerOrderLineItems = _selectedCustomerOrderLine?.CustomerOrderLineItems.ToList() ?? [];
}
private void OnSelectedLineItemRow<TValue>(RowSelectEventArgs<TValue> obj)
{
_selectedCustomerOrderLineItem = obj.Data as CustomerOrderLineItemDto;
_isVisibleCustomerOrderLineItem = _selectedCustomerOrderLineItem != null;
}
}