* Changed views to have them in the same layout

* Added Authorization
This commit is contained in:
2025-02-28 13:33:01 +01:00
parent aedb5810c2
commit b8fbb789ad
35 changed files with 1605 additions and 1306 deletions

View File

@@ -1,30 +1,77 @@
@page "/Admin/Scheduler"
@attribute [Authorize]
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using OrdersManagementDataModel.Dtos
@using Syncfusion.Blazor.Grids
@using Action = Syncfusion.Blazor.Grids.Action
@inject HangfireService HangfireService
@using Syncfusion.Blazor.Cards
<h3>Zarządzanie Zadaniami</h3>
<br />
<SfGrid DataSource="@Tasks" AllowPaging="true" ShowColumnMenu="true" Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field=@nameof(TaskSchedulerDto.RowPointer.ToString) IsPrimaryKey="true" HeaderText="Id"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.Name) HeaderText="Nazwa"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.Path) HeaderText="Ścieżka"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.CronOptions) HeaderText="CRON"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.LastExecution) HeaderText="Ostatnie Uruchomienie"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.NextExecution) HeaderText="Następne Uruchomienie"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true" ShowDeleteConfirmDialog="true" AllowAdding="true" NewRowPosition="NewRowPosition.Bottom" AllowEditing="true"></GridEditSettings>
<GridEvents OnActionBegin="OnActionBegin" TValue="TaskSchedulerDto" OnActionComplete="OnActionComplete"></GridEvents>
</SfGrid>
@inject HangfireService HangfireService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
<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">Zarządzanie Zadaniami</h3>
</CardHeader>
<CardContent>
<SfGrid DataSource="@Tasks"
AllowPaging="true"
ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field=@nameof(TaskSchedulerDto.RowPointer) AllowEditing="false" IsPrimaryKey="true" HeaderText="Id"
Width="100"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.Name) HeaderText="Nazwa" Width="150"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.Path) HeaderText="Ścieżka" Width="200"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.CronOptions) HeaderText="CRON" Width="120"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.LastExecution) AllowEditing="false" HeaderText="Ostatnie Uruchomienie"
Width="150"></GridColumn>
<GridColumn Field=@nameof(TaskSchedulerDto.NextExecution) AllowEditing="false" HeaderText="Następne Uruchomienie"
Width="150"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true"
ShowDeleteConfirmDialog="true"
AllowAdding="true"
NewRowPosition="NewRowPosition.Bottom"
AllowEditing="true">
</GridEditSettings>
<GridEvents OnActionBegin="OnActionBegin"
OnActionComplete="OnActionComplete"
TValue="TaskSchedulerDto">
</GridEvents>
<GridPageSettings PageSize="10"></GridPageSettings>
</SfGrid>
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {
private List<TaskSchedulerDto> Tasks { get; set; } = new();
protected override async Task OnInitializedAsync()
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await LoadTasks();
if (firstRender)
{
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
if (currentUser.Identity?.IsAuthenticated == false || currentUser.Identity?.Name != "pkus")
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
await LoadTasks();
StateHasChanged();
}
}
}
public async Task OnActionBegin(ActionEventArgs<TaskSchedulerDto> args)
@@ -65,4 +112,5 @@
break;
}
}
}

View File

@@ -1,171 +0,0 @@
@page "/admin/UsersManager"
@using OrdersManagementDataModel.Dtos
@using Syncfusion.Blazor.Grids
@using Action = Syncfusion.Blazor.Grids.Action
@using UserService = OrdersManagement.Services.UserService
@inject UserService UserService
@inject RoleService RoleService
@inject FunctionService FunctionService
<div class="h-100 d-flex flex-column">
<h5>Użytkownicy</h5>
<SfGrid DataSource="@UserList" AllowPaging="true" ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field="@nameof(UserDto.Id)" IsPrimaryKey="true" HeaderText="ID" Width="70"></GridColumn>
<GridColumn Field="@nameof(UserDto.Login)" HeaderText="Login" Width="100"></GridColumn>
<GridColumn Field="@nameof(UserDto.Email)" HeaderText="Email" Width="150"></GridColumn>
<GridColumn Field="@nameof(UserDto.FirstName)" HeaderText="Imię" Width="100"></GridColumn>
<GridColumn Field="@nameof(UserDto.LastName)" HeaderText="Nazwisko" Width="100"></GridColumn>
<GridColumn Field="@nameof(UserDto.IsActive)" HeaderText="Aktywny" Width="80"></GridColumn>
<GridColumn Field="@nameof(UserDto.CreatedDate)" HeaderText="Utworzono" Format="d" Width="120"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true" ShowDeleteConfirmDialog="true" AllowAdding="true" NewRowPosition="NewRowPosition.Bottom" AllowEditing="true"></GridEditSettings>
<GridEvents OnActionBegin="UserActionBegin" OnActionComplete="UserActionComplete" TValue="UserDto"></GridEvents>
</SfGrid>§
<br/>
<h5>Role</h5>
<SfGrid DataSource="@Roles" AllowPaging="true" ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field="@nameof(RoleDto.Id)" IsPrimaryKey="true" HeaderText="ID" Width="70"></GridColumn>
<GridColumn Field="@nameof(RoleDto.Name)" HeaderText="Nazwa" Width="150"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true" ShowDeleteConfirmDialog="true" AllowAdding="true" AllowEditing="true"
Mode="EditMode.Normal"></GridEditSettings>
<GridEvents OnActionBegin="RoleActionBegin" OnActionComplete="RoleActionComplete" TValue="RoleDto"></GridEvents>
</SfGrid>
<br/>
<h5>Funkcje</h5>
<SfGrid DataSource="@Functions" AllowPaging="true" ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field="@nameof(FunctionDto.Id)" IsPrimaryKey="true" HeaderText="ID" Width="70"></GridColumn>
<GridColumn Field="@nameof(FunctionDto.RoleId)" HeaderText="ID Roli" Width="70"></GridColumn>
<GridColumn Field="@nameof(FunctionDto.Name)" HeaderText="Nazwa Funkcji" Width="200"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true" ShowDeleteConfirmDialog="true" AllowAdding="true" AllowEditing="true"
Mode="EditMode.Normal"></GridEditSettings>
<GridEvents OnActionBegin="FunctionActionBegin" OnActionComplete="FunctionActionComplete"
TValue="FunctionDto"></GridEvents>
</SfGrid>
</div>
@code {
private List<UserDto> UserList { get; set; } = new();
private List<RoleDto> Roles { get; set; } = new();
private List<FunctionDto> Functions { get; set; } = new();
protected override async Task OnInitializedAsync()
{
await LoadUsers();
await LoadRoles();
await LoadFunctions();
}
private async Task LoadUsers()
{
UserList = (await UserService.GetUsersAsync() ?? Array.Empty<UserDto>()).ToList();
}
private async Task LoadRoles()
{
Roles = (await RoleService.GetRolesAsync() ?? Array.Empty<RoleDto>()).ToList();
}
private async Task LoadFunctions()
{
Functions = (await FunctionService.GetFunctionsAsync() ?? Array.Empty<FunctionDto>()).ToList();
}
private async Task UserActionBegin(ActionEventArgs<UserDto> args)
{
if (args.RequestType.Equals(Action.Delete))
{
await UserService.DeleteUserAsync(args.Data.RowPointer);
}
else if (args.RequestType.Equals(Action.Add))
{
args.Data.RowPointer = Guid.NewGuid();
}
}
private async Task UserActionComplete(ActionEventArgs<UserDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await LoadUsers();
break;
case Action.Add:
await UserService.AddUserAsync(args.Data);
await LoadUsers();
break;
case Action.Save:
await UserService.UpdateUserAsync(args.Data);
await LoadUsers();
break;
}
}
private async Task RoleActionBegin(ActionEventArgs<RoleDto> args)
{
if (args.RequestType.Equals(Action.Delete))
{
await RoleService.DeleteRoleAsync(args.Data.RowPointer);
}
else if (args.RequestType.Equals(Action.Add))
{
args.Data.RowPointer = Guid.NewGuid();
}
}
private async Task RoleActionComplete(ActionEventArgs<RoleDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await LoadRoles();
break;
case Action.Add:
await RoleService.AddRoleAsync(args.Data);
await LoadRoles();
break;
case Action.Save:
await RoleService.UpdateRoleAsync(args.Data);
await LoadRoles();
break;
}
}
private async Task FunctionActionBegin(ActionEventArgs<FunctionDto> args)
{
if (args.RequestType.Equals(Action.Delete))
{
await FunctionService.DeleteFunctionAsync(args.Data.RowPointer);
}
else if (args.RequestType.Equals(Action.Add))
{
args.Data.RowPointer = Guid.NewGuid();
}
}
private async Task FunctionActionComplete(ActionEventArgs<FunctionDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await LoadFunctions();
break;
case Action.Add:
await FunctionService.AddFunctionAsync(args.Data);
await LoadFunctions();
break;
case Action.Save:
await FunctionService.UpdateFunctionAsync(args.Data);
await LoadFunctions();
break;
}
}
}

View File

@@ -0,0 +1,298 @@
@page "/admin/UsersManager"
@attribute [Authorize]
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using OrdersManagementDataModel.Dtos
@using Syncfusion.Blazor.Grids
@using Action = Syncfusion.Blazor.Grids.Action
@using UserService = OrdersManagement.Services.UserService
@using Syncfusion.Blazor.Cards
@using Syncfusion.Blazor.Popups
@using Syncfusion.Blazor.Buttons
@inject UserService UserService
@inject RoleService RoleService
@inject FunctionService FunctionService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
<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">Zarządzanie Użytkownikami i Rolami</h3>
</CardHeader>
<CardContent>
<h5 class="text-primary mb-3">Użytkownicy</h5>
<SfGrid DataSource="@UserList"
AllowPaging="true"
ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field="@nameof(UserDto.RowPointer)" AllowEditing="false" IsPrimaryKey="true" HeaderText="ID" Width="70"></GridColumn>
<GridColumn Field="@nameof(UserDto.Login)" HeaderText="Login" Width="100"></GridColumn>
<GridColumn Field="@nameof(UserDto.Email)" HeaderText="Email" Width="150"></GridColumn>
<GridColumn Field="@nameof(UserDto.FirstName)" HeaderText="Imię" Width="100"></GridColumn>
<GridColumn Field="@nameof(UserDto.LastName)" HeaderText="Nazwisko" Width="100"></GridColumn>
<GridColumn Field="@nameof(UserDto.IsActive)" HeaderText="Aktywny" Width="80"></GridColumn>
<GridColumn Field="@nameof(UserDto.CreatedDate)" AllowEditing="false" HeaderText="Utworzono" Format="d" Width="120"></GridColumn>
<GridColumn HeaderText="" Width="100">
<Template>
@{
var user = (context as UserDto);
<SfButton CssClass="e-small e-primary" @onclick="() => ResetPassword(user)">Zresetuj haslo</SfButton>
}
</Template>
</GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true"
ShowDeleteConfirmDialog="true"
AllowAdding="true"
NewRowPosition="NewRowPosition.Bottom"
AllowEditing="true">
</GridEditSettings>
<GridEvents OnActionBegin="UserActionBegin"
OnActionComplete="UserActionComplete"
TValue="UserDto">
</GridEvents>
<GridPageSettings PageSize="10"></GridPageSettings>
</SfGrid>
<h5 class="text-primary mb-3 mt-4">Role</h5>
<SfGrid DataSource="@Roles"
AllowPaging="true"
ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field="@nameof(RoleDto.Id)" IsPrimaryKey="true" HeaderText="ID" Width="70"></GridColumn>
<GridColumn Field="@nameof(RoleDto.Name)" HeaderText="Nazwa" Width="150"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true"
ShowDeleteConfirmDialog="true"
AllowAdding="true"
AllowEditing="true"
Mode="EditMode.Normal">
</GridEditSettings>
<GridEvents OnActionBegin="RoleActionBegin"
OnActionComplete="RoleActionComplete"
TValue="RoleDto">
</GridEvents>
<GridPageSettings PageSize="10"></GridPageSettings>
</SfGrid>
<h5 class="text-primary mb-3 mt-4">Funkcje</h5>
<SfGrid DataSource="@Functions"
AllowPaging="true"
ShowColumnMenu="true"
Toolbar="@(new List<string> { "Add", "Edit", "Delete", "Cancel", "Update" })">
<GridColumns>
<GridColumn Field="@nameof(FunctionDto.Id)" IsPrimaryKey="true" HeaderText="ID" Width="70"></GridColumn>
<GridColumn Field="@nameof(FunctionDto.RoleId)" HeaderText="ID Roli" Width="70"></GridColumn>
<GridColumn Field="@nameof(FunctionDto.Name)" HeaderText="Nazwa Funkcji" Width="200"></GridColumn>
</GridColumns>
<GridEditSettings AllowDeleting="true"
ShowDeleteConfirmDialog="true"
AllowAdding="true"
AllowEditing="true"
Mode="EditMode.Normal">
</GridEditSettings>
<GridEvents OnActionBegin="FunctionActionBegin"
OnActionComplete="FunctionActionComplete"
TValue="FunctionDto">
</GridEvents>
<GridPageSettings PageSize="10"></GridPageSettings>
</SfGrid>
<SfDialog Width="500px" Title="Dodano użytkownika!" IsModal="true" @bind-Visible="Visibility" AllowPrerender="true">
<DialogTemplates>
<Content>
<p>Użytkownik <strong>@Login</strong> został dodany pomyślnie!</p>
<p>Hasło tymczasowe: <strong>@TempPassword</strong></p>
</Content>
</DialogTemplates>
<DialogButtons>
<DialogButton Content="OK" IsPrimary="true" OnClick="@HideModal"/>
</DialogButtons>
</SfDialog>
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {
private List<UserDto> UserList { get; set; } = new();
private List<RoleDto> Roles { get; set; } = new();
private List<FunctionDto> Functions { get; set; } = new();
private bool Visibility { get; set; }
private string Login { get; set; } = string.Empty;
private string TempPassword { get; set; } = string.Empty;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
Visibility = false;
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
if (currentUser.Identity?.IsAuthenticated == false || currentUser.Identity?.Name != "pkus")
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
await LoadUsers();
await LoadRoles();
//await LoadFunctions();
StateHasChanged();
}
}
}
private async Task LoadUsers()
{
UserList = (await UserService.GetUsersAsync() ?? Array.Empty<UserDto>()).ToList();
}
private async Task LoadRoles()
{
Roles = (await RoleService.GetRolesAsync() ?? Array.Empty<RoleDto>()).ToList();
}
private async Task LoadFunctions()
{
Functions = (await FunctionService.GetFunctionsAsync() ?? Array.Empty<FunctionDto>()).ToList();
}
public async Task ResetPassword(UserDto? user)
{
if(user == null) return;
TempPassword = Guid.NewGuid().ToString().Substring(0, 8);
Login = user.Login;
string passwordHash = BCrypt.Net.BCrypt.HashPassword(TempPassword);
user.PasswordHash = passwordHash;
user.IsTemporaryPassword = true;
await UserService.UpdateUserAsync(user);
await LoadUsers();
Visibility = true;
}
private async Task UserActionBegin(ActionEventArgs<UserDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await UserService.DeleteUserAsync(args.Data.RowPointer);
break;
case Action.Add:
args.Data.RowPointer = Guid.NewGuid();
args.Data.CreatedDate = DateTime.Now;
args.Data.IsActive = true;
break;
}
}
private async Task UserActionComplete(ActionEventArgs<UserDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await LoadUsers();
break;
case Action.Save when args.Data.Id == 0:
UserDto? user = args.Data;
TempPassword = Guid.NewGuid().ToString().Substring(0, 8);
Login = user.Login;
string? passwordHash = BCrypt.Net.BCrypt.HashPassword(TempPassword);
user.PasswordHash = passwordHash;
user.IsTemporaryPassword = true;
user.ActiveFrom = DateTime.Now;
user.CreatedDate = DateTime.Now;
await UserService.AddUserAsync(user);
await LoadUsers();
Visibility = true;
break;
case Action.Save when args.Data.Id != 0:
await UserService.UpdateUserAsync(args.Data);
await LoadUsers();
break;
}
}
private async Task RoleActionBegin(ActionEventArgs<RoleDto> args)
{
if (args.RequestType.Equals(Action.Delete))
{
await RoleService.DeleteRoleAsync(args.Data.RowPointer);
}
else if (args.RequestType.Equals(Action.Add))
{
args.Data.RowPointer = Guid.NewGuid();
}
}
private async Task RoleActionComplete(ActionEventArgs<RoleDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await LoadRoles();
break;
case Action.Save when args.Data.Id == 0:
await RoleService.AddRoleAsync(args.Data);
await LoadUsers();
break;
case Action.Save when args.Data.Id != 0:
await RoleService.UpdateRoleAsync(args.Data);
await LoadRoles();
break;
}
}
private async Task FunctionActionBegin(ActionEventArgs<FunctionDto> args)
{
if (args.RequestType.Equals(Action.Delete))
{
await FunctionService.DeleteFunctionAsync(args.Data.RowPointer);
}
else if (args.RequestType.Equals(Action.Add))
{
args.Data.RowPointer = Guid.NewGuid();
}
}
private async Task FunctionActionComplete(ActionEventArgs<FunctionDto> args)
{
switch (args.RequestType)
{
case Action.Delete:
await LoadFunctions();
break;
case Action.Save when args.Data.Id == 0:
await FunctionService.AddFunctionAsync(args.Data);
await LoadFunctions();
break;
case Action.Save when args.Data.Id != 0:
await FunctionService.UpdateFunctionAsync(args.Data);
await LoadFunctions();
break;
}
}
private void HideModal()
{
Visibility = false;
}
}

View File

@@ -1,204 +1,198 @@
@page "/CustomerOrder/{CustomerOrderId:guid}"
@rendermode InteractiveServer
@attribute [Authorize]
@inject CustomerOrderService CustomerOrderService
@inject ScheduleOrderService ScheduleOrderService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using SytelineSaAppEfDataModel.Dtos
@using OrdersManagement.Components.Pages.Shared
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Cards
@using Syncfusion.Blazor.Buttons
@using SelectionType = Syncfusion.Blazor.Grids.SelectionType
@inherits LayoutComponentBase
<div class="h-100 d-flex flex-column">
<h5>Zamówienie klienta nr @CustomerOrderDto?.CoNum</h5>
<SfCard>
<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ówienie klienta nr @(CustomerOrderDto?.CoNum ?? "Brak numeru")</h3>
</CardHeader>
<CardContent>
<div class="row">
<div class="col">
<u>Numer Zamówienia:</u> <b>@CustomerOrderDto?.CoNum</b><br/>
<u>Numer Zamówienia Klienta:</u> <b>@CustomerOrderDto?.CustPo</b><br/>
<u>Klient:</u> <b>@CustomerOrderDto?.CustNum</b><br/>
<u>Numer Odbiorcy:</u> <b>@CustomerOrderDto?.CustSeq</b><br/>
<u>Kontakt:</u> <b>@CustomerOrderDto?.Contact</b><br/>
<u>Telefon:</u> <b>@CustomerOrderDto?.Phone</b><br/>
<u>Data Zamówienia:</u> <b>@CustomerOrderDto?.OrderDate.ToString("yyyy-MM-dd HH:mm:ss")</b><br/>
<u>Warunki:</u> <b>@CustomerOrderDto?.TermsCode</b><br/>
<u>Wartość Brutto:</u> <b>@(CustomerOrderDto?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u> <b>@CustomerOrderDto?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Magazyn:</u> <b>@CustomerOrderDto?.Whse</b><br/>
<u>VAT:</u> <b>@CustomerOrderDto?.FrtTaxCode1</b><br/>
<u>Typ Odbiorcy:</u> <b>@CustomerOrderDto?.EndUserType</b><br/>
<u>Kurs Wymiany:</u> <b>@(CustomerOrderDto?.ExchRate?.ToString("F4") ?? "N/A")</b><br/>
<u>Gate:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_Gate</b><br/>
<u>RecipientCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_RecipientCode</b><br/>
<u>SelletCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_SellerCode</b><br/>
<u>SenderCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_SenderCode</b><br/>
<u>BuyerCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_BuyerCode</b><br/>
<u>Typ Dokumentu:</u> <b>@CustomerOrderDto?.Uf_DocType</b><br/>
<SfCard CssClass="mb-4">
<CardContent>
<div class="row">
<div class="col">
<u>Numer Zamówienia:</u> <b>@CustomerOrderDto?.CoNum</b><br/>
<u>Numer Zamówienia Klienta:</u> <b>@CustomerOrderDto?.CustPo</b><br/>
<u>Klient:</u> <b>@CustomerOrderDto?.CustNum</b><br/>
<u>Numer Odbiorcy:</u> <b>@CustomerOrderDto?.CustSeq</b><br/>
<u>Kontakt:</u> <b>@CustomerOrderDto?.Contact</b><br/>
<u>Telefon:</u> <b>@CustomerOrderDto?.Phone</b><br/>
<u>Data Zamówienia:</u> <b>@CustomerOrderDto?.OrderDate.ToString("yyyy-MM-dd HH:mm:ss")</b><br/>
<u>Warunki:</u> <b>@CustomerOrderDto?.TermsCode</b><br/>
<u>Wartość Brutto:</u> <b>@(CustomerOrderDto?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u> <b>@CustomerOrderDto?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Magazyn:</u> <b>@CustomerOrderDto?.Whse</b><br/>
<u>VAT:</u> <b>@CustomerOrderDto?.FrtTaxCode1</b><br/>
<u>Typ Odbiorcy:</u> <b>@CustomerOrderDto?.EndUserType</b><br/>
<u>Kurs Wymiany:</u> <b>@(CustomerOrderDto?.ExchRate?.ToString("F4") ?? "N/A")</b><br/>
<u>Gate:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_Gate</b><br/>
<u>RecipientCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_RecipientCode</b><br/>
<u>SellerCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_SellerCode</b><br/>
<u>SenderCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_SenderCode</b><br/>
<u>BuyerCode:</u> <b>@CustomerOrderDto?.Uf_FKR_EDI_BuyerCode</b><br/>
<u>Typ Dokumentu:</u> <b>@CustomerOrderDto?.Uf_DocType</b><br/>
</div>
</div>
</CardContent>
</SfCard>
<div class="row mb-4">
<div class="col-md-12">
<SfButton CssClass="e-primary" IsPrimary="true" @onclick="ShowLastDelfors">@_text</SfButton>
</div>
</div>
@if (_isVisible)
{
<h5 class="text-primary mb-3">Zamówienie DELFOR do zamówienia @(CustomerOrderDto?.CoNum ?? "Brak numeru")</h5>
<ScheduleOrdersGrid PageSize="5" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
}
<h5 class="text-primary mb-3 pt-5">Indeksy</h5>
<SfGrid @ref="_customerOrderLinesGrid"
AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="CustomerOrderLineDto"
DataSource="@_customerOrderLines"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as CustomerOrderLineDto;
<SfCard>
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer zamówienia:</u><b>@order?.CoNum</b><br/>
<u>Linia:</u><b>@order?.CoLine</b><br/>
<u>Pozycja:</u><b>@order?.Item</b><br/>
<u>Pozycja Klienta:</u><b>@order?.CustItem</b><br/>
<u>Opis:</u><b>@order?.Description</b><br/>
<u>Łączna Ilość:</u><b>@order?.BlanketQty.ToString("F2")</b><br/>
<u>Status:</u><b>@order?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Cena:</u><b>@(order?.ContPrice?.ToString("F2") ?? "N/A")</b><br/>
<u>Ważne Od:</u><b>@(order?.EffDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>J/M:</u><b>@order?.UM</b><br/>
<u>BoxType:</u><b>@order?.Uf_FKR_EDI_BLN_BoxType</b><br/>
<u>Address:</u><b>@order?.Uf_FKR_EDI_BLN_Address</b><br/>
<u>FinalDestination:</u><b>@order?.Uf_FKR_EDI_BLN_FinalDestination</b><br/>
<u>QtyPerBox:</u><b>@(order?.Uf_FKR_EDI_BLN_QtyPerBox?.ToString() ?? "N/A")</b>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(CustomerOrderLineDto.CoLine) HeaderText="Linia" Width="70"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.Item) HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.CustItem) HeaderText="Pozycja Klienta" Width="120"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.Description) HeaderText="Opis" Width="200"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.BlanketQty) HeaderText="Ilość" TextAlign="TextAlign.Right" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.UM) HeaderText="J/M" Width="50"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.ContPrice) HeaderText="Cena" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.TranslatedStatus) HeaderText="Status" Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="CustomerOrderLineDto" RowSelected="OnSelectedLineRow"></GridEvents>
</SfGrid>
@if (_isVisibleCustomerOrderLine)
{
<h5 class="text-primary mb-3 mt-4">Harmonogramy</h5>
<SfGrid @ref="_customerOrderLineItemsGrid"
TValue="CustomerOrderLineItemDto"
DataSource="@_customerOrderLineItems"
AllowFiltering="true"
AllowPaging="true"
AllowSelection="true"
AllowSorting="true"
SelectionMode="Syncfusion.Blazor.Grids.SelectionMode.Single"
SelectedItemsChanged="SelectedCustomerOrderLineItemChanged">
<GridTemplates>
<DetailTemplate>
@{
var detailLineItem = context as CustomerOrderLineItemDto;
<SfCard>
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer Zamówienia:</u><b>@detailLineItem?.CoNum</b><br/>
<u>Linia:</u><b>@detailLineItem?.CoLine</b><br/>
<u>Zwolnienie:</u><b>@detailLineItem?.CoRelease</b><br/>
<u>Pozycja:</u><b>@detailLineItem?.Item</b><br/>
<u>Pozycja Klienta:</u><b>@detailLineItem?.CustItem</b><br/>
<u>Łączna Ilość Sztuk:</u><b>@(detailLineItem?.QtyOrdered.ToString("F2") ?? "N/A")</b><br/>
<u>Cena:</u><b>@(detailLineItem?.Price.ToString("F2") ?? "N/A")</b><br/>
<u>Data Wykonania:</u><b>@(detailLineItem?.DueDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data Rejestracji:</u><b>@(detailLineItem?.ReleaseDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Magazyn:</u><b>@detailLineItem?.Whse</b><br/>
<u>Typ Documentu:</u><b>@detailLineItem?.Uf_FKR_EDI_ITEM_DocumentType</b><br/>
</div>
<div class="col">
<u>Kod VAT:</u><b>@detailLineItem?.TaxCode1</b><br/>
<u>J/M:</u><b>@detailLineItem?.UM</b><br/>
<u>Numer Klienta:</u><b>@detailLineItem?.CoCustNum</b><br/>
<u>Opis:</u><b>@detailLineItem?.Description</b><br/>
<u>Status:</u><b>@detailLineItem?.TranslatedStatus</b><br/>
<u>RoutingCode:</u><b>@detailLineItem?.Uf_FKR_EDI_ITEM_RoutingCode</b><br/>
<u>DeliveryCallNumber:</u><b>@detailLineItem?.Uf_FKR_EDI_ITEM_DeliveryCallNum</b><br/>
<u>UnloadingPoint:</u><b>@detailLineItem?.Uf_LOC_11_UnloadingPoint</b><br/>
<u>DestinationPoint:</u><b>@detailLineItem?.Uf_LOC_159_DestinationPoint</b><br/>
<u>PalletCode:</u><b>@detailLineItem?.Uf_FKR_EDI_ITEM_PalletCode</b><br/>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<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"/>
</SfGrid>
}
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
<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">
<h5>Zamówienie DELFOR do zamówienia @CustomerOrderDto?.CoNum</h5>
</div>
<br/>
<div class="row">
<ScheduleOrdersGrid PageSize="5" PassGridRef="SetGridRef" GridData="_scheduleOrders"></ScheduleOrdersGrid>
</div>
<br/>
}
<h5>Indeksy</h5>
<SfGrid @ref="_customerOrderLinesGrid"
AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="CustomerOrderLineDto"
DataSource="@_customerOrderLines"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as CustomerOrderLineDto;
<SfCard>
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer zamówienia:</u><b>@order?.CoNum</b><br/>
<u>Linia:</u><b>@order?.CoLine</b><br/>
<u>Pozycja:</u><b>@order?.Item</b><br/>
<u>Pozycja Klienta:</u><b>@order?.CustItem</b><br/>
<u>Opis:</u><b>@order?.Description</b><br/>
<u>Łączna Ilość:</u><b>@order?.BlanketQty.ToString("F2")</b><br/>
<u>Status:</u><b>@order?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Cena:</u><b>@(order?.ContPrice?.ToString("F2") ?? "N/A")</b><br/>
<u>Ważne Od:</u><b>@(order?.EffDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>J/M:</u><b>@order?.UM</b><br/>
<u>BoxType:</u><b>@order?.Uf_FKR_EDI_BLN_BoxType</b><br/>
<u>Address:</u><b>@order?.Uf_FKR_EDI_BLN_Address</b><br/>
<u>FinalDestination:</u><b>@order?.Uf_FKR_EDI_BLN_FinalDestination</b><br/>
<u>QtyPerBox:</u><b>@(order?.Uf_FKR_EDI_BLN_QtyPerBox?.ToString() ?? "N/A")</b>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(CustomerOrderLineDto.CoLine) HeaderText="Linia" Width="70"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.Item) HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.CustItem) HeaderText="Pozycja Klienta"
Width="120"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.Description) HeaderText="Opis" Width="200"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.BlanketQty) HeaderText="Ilość" TextAlign="TextAlign.Right"
Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.UM) HeaderText="J/M" Width="50"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.ContPrice) HeaderText="Cena" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderLineDto.TranslatedStatus) HeaderText="Status"
Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="CustomerOrderLineDto" RowSelected="OnSelectedLineRow"></GridEvents>
</SfGrid>
@if (_isVisibleCustomerOrderLine)
{
<br/>
<h5>Harmonogramy</h5>
<SfGrid @ref="_customerOrderLineItemsGrid"
TValue="CustomerOrderLineItemDto"
DataSource="@_customerOrderLineItems"
AllowFiltering="true"
AllowPaging="true"
AllowSelection="true"
AllowSorting="true"
SelectionMode="Syncfusion.Blazor.Grids.SelectionMode.Single"
SelectedItemsChanged="SelectedCustomerOrderLineItemChanged">
<GridTemplates>
<DetailTemplate>
@{
var detailLineItem = context as CustomerOrderLineItemDto;
<SfCard>
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer Zamówienia:</u>&emsp;<b>@detailLineItem?.CoNum</b><br/>
<u>Linia:</u>&emsp;<b>@detailLineItem?.CoLine</b><br/>
<u>Zwolnienie:</u>&emsp;<b>@detailLineItem?.CoRelease</b><br/>
<u>Pozycja:</u>&emsp;<b>@detailLineItem?.Item</b><br/>
<u>Pozycja Klienta:</u>&emsp;<b>@detailLineItem?.CustItem</b><br/>
<u>Łączna Ilość
Sztuk:</u>&emsp;<b>@(detailLineItem?.QtyOrdered.ToString("F2") ?? "N/A")</b><br/>
<u>Cena:</u>&emsp;<b>@(detailLineItem?.Price.ToString("F2") ?? "N/A")</b><br/>
<u>Data
Wykonania:</u>&emsp;<b>@(detailLineItem?.DueDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data
Rejestracji:</u>&emsp;<b>@(detailLineItem?.ReleaseDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Magazyn:</u>&emsp;<b>@detailLineItem?.Whse</b><br/>
<u>Typ
Documentu:</u>&emsp;<b>@detailLineItem?.Uf_FKR_EDI_ITEM_DocumentType</b><br/>
</div>
<div class="col">
<u>Kod VAT:</u>&emsp;<b>@detailLineItem?.TaxCode1</b><br/>
<u>J/M:</u>&emsp;<b>@detailLineItem?.UM</b><br/>
<u>Numer Klienta:</u>&emsp;<b>@detailLineItem?.CoCustNum</b><br/>
<u>Opis:</u>&emsp;<b>@detailLineItem?.Description</b><br/>
<u>Status:</u>&emsp;<b>@detailLineItem?.TranslatedStatus</b><br/>
<u>RoutingCode:</u>&emsp;<b>@detailLineItem?.Uf_FKR_EDI_ITEM_RoutingCode</b><br/>
<u>DeliveryCallNumber:</u>&emsp;<b>@detailLineItem?.Uf_FKR_EDI_ITEM_DeliveryCallNum</b><br/>
<u>UnloadingPoint:</u>&emsp;<b>@detailLineItem?.Uf_LOC_11_UnloadingPoint</b><br/>
<u>DestinationPoint:</u>&emsp;<b>@detailLineItem?.Uf_LOC_159_DestinationPoint</b><br/>
<u>PalletCode:</u>&emsp;<b>@detailLineItem?.Uf_FKR_EDI_ITEM_PalletCode</b><br/>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<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"/>
</SfGrid>
}
</div>
@code {
@@ -221,18 +215,7 @@
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)
{
CustomerOrderDto = customerOrder;
_customerOrderLines = CustomerOrderDto.CustomerOrderLines.ToList() ?? [];
}
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
@@ -240,6 +223,23 @@
await SetGridRef(_gridRef);
StateHasChanged();
_isVisible = false;
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
if (currentUser.Identity?.IsAuthenticated == false)
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
CustomerOrderDto? customerOrder = await CustomerOrderService.GetCustomerOrderAsync(CustomerOrderId);
if (customerOrder != null)
{
CustomerOrderDto = customerOrder;
_customerOrderLines = CustomerOrderDto.CustomerOrderLines.ToList() ?? [];
}
}
}
}

View File

@@ -1,86 +1,110 @@
@page "/CustomerOrders"
@rendermode InteractiveServer
@attribute [Authorize]
@inject CustomerOrderService CustomerOrderService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using SytelineSaAppEfDataModel.Dtos
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Cards
@inherits LayoutComponentBase
<div class="h-100 d-flex flex-column">
<h5>Zamówienia Klienta</h5>
<SfGrid AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="CustomerOrderDto"
DataSource="@_customerOrders"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as CustomerOrderDto;
<SfCard>
<CardContent>
<div class="row">
<div class="col">
<u>Numer Zamówienia:</u> <b>@order?.CoNum</b><br/>
<u>Numer Zamówienia Klienta:</u> <b>@order?.CustPo</b><br/>
<u>Klient:</u> <b>@order?.CustNum</b><br/>
<u>Numer Odbiorcy:</u> <b>@order?.CustSeq</b><br/>
<u>Kontakt:</u> <b>@order?.Contact</b><br/>
<u>Telefon:</u> <b>@order?.Phone</b><br/>
<u>Data Zamówienia:</u>
<b>@order?.OrderDate.ToString("yyyy-MM-dd HH:mm:ss")</b><br/>
<u>Warunki:</u> <b>@order?.TermsCode</b><br/>
<u>Wartość Brutto:</u> <b>@(order?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u> <b>@order?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Magazyn:</u> <b>@order?.Whse</b><br/>
<u>VAT:</u> <b>@order?.FrtTaxCode1</b><br/>
<u>Typ Odbiorcy:</u> <b>@order?.EndUserType</b><br/>
<u>Kurs Wymiany:</u> <b>@(order?.ExchRate?.ToString("F4") ?? "N/A")</b><br/>
<u>Gate:</u> <b>@order?.Uf_FKR_EDI_Gate</b><br/>
<u>RecipientCode:</u> <b>@order?.Uf_FKR_EDI_RecipientCode</b><br/>
<u>SelletCode:</u> <b>@order?.Uf_FKR_EDI_SellerCode</b><br/>
<u>SenderCode:</u> <b>@order?.Uf_FKR_EDI_SenderCode</b><br/>
<u>BuyerCode:</u> <b>@order?.Uf_FKR_EDI_BuyerCode</b><br/>
<u>Typ Dokumentu:</u> <b>@order?.Uf_DocType</b><br/>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(CustomerOrderDto.CoNum) HeaderText="Numer Zamówienia" Width="110"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CustPo) HeaderText="Zamówienie Klienta" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CustNum) HeaderText="Numer Klienta" Width="90"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CustSeq) HeaderText="Odbiorca" Width="80"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CreateDate) HeaderText="Data zamówienia"
TextAlign="TextAlign.Right" Width="110"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.TranslatedStatus) HeaderText="Status" Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="CustomerOrderDto" OnRecordDoubleClick="OnRowDoubleClick"/>
</SfGrid>
<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 Klienta</h3>
</CardHeader>
<CardContent>
<SfGrid AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="CustomerOrderDto"
DataSource="@_customerOrders"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as CustomerOrderDto;
<SfCard>
<CardContent>
<div class="row">
<div class="col">
<u>Numer Zamówienia:</u> <b>@order?.CoNum</b><br/>
<u>Numer Zamówienia Klienta:</u> <b>@order?.CustPo</b><br/>
<u>Klient:</u> <b>@order?.CustNum</b><br/>
<u>Numer Odbiorcy:</u> <b>@order?.CustSeq</b><br/>
<u>Kontakt:</u> <b>@order?.Contact</b><br/>
<u>Telefon:</u> <b>@order?.Phone</b><br/>
<u>Data Zamówienia:</u>
<b>@order?.OrderDate.ToString("yyyy-MM-dd HH:mm:ss")</b><br/>
<u>Warunki:</u> <b>@order?.TermsCode</b><br/>
<u>Wartość Brutto:</u> <b>@(order?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u> <b>@order?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Magazyn:</u> <b>@order?.Whse</b><br/>
<u>VAT:</u> <b>@order?.FrtTaxCode1</b><br/>
<u>Typ Odbiorcy:</u> <b>@order?.EndUserType</b><br/>
<u>Kurs Wymiany:</u> <b>@(order?.ExchRate?.ToString("F4") ?? "N/A")</b><br/>
<u>Gate:</u> <b>@order?.Uf_FKR_EDI_Gate</b><br/>
<u>RecipientCode:</u> <b>@order?.Uf_FKR_EDI_RecipientCode</b><br/>
<u>SellerCode:</u> <b>@order?.Uf_FKR_EDI_SellerCode</b><br/>
<u>SenderCode:</u> <b>@order?.Uf_FKR_EDI_SenderCode</b><br/>
<u>BuyerCode:</u> <b>@order?.Uf_FKR_EDI_BuyerCode</b><br/>
<u>Typ Dokumentu:</u> <b>@order?.Uf_DocType</b><br/>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(CustomerOrderDto.CoNum) HeaderText="Numer Zamówienia" Width="110"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CustPo) HeaderText="Zamówienie Klienta" Width="100"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CustNum) HeaderText="Numer Klienta" Width="90"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CustSeq) HeaderText="Odbiorca" Width="80"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.CreateDate) HeaderText="Data zamówienia" TextAlign="TextAlign.Right" Width="110"></GridColumn>
<GridColumn Field=@nameof(CustomerOrderDto.TranslatedStatus) HeaderText="Status" Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="CustomerOrderDto" OnRecordDoubleClick="OnRowDoubleClick"/>
</SfGrid>
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {
private IEnumerable<CustomerOrderDto>? _customerOrders;
protected override async Task OnInitializedAsync()
protected override async Task OnAfterRenderAsync(bool firstRender)
{
_customerOrders = await CustomerOrderService.GetCustomerOrdersAsync() ?? new List<CustomerOrderDto>();
_customerOrders = _customerOrders.OrderByDescending(x => x.CreateDate).ToList();
if (firstRender)
{
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
StateHasChanged();
if (currentUser.Identity?.IsAuthenticated == false)
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
_customerOrders = await CustomerOrderService.GetCustomerOrdersAsync() ?? new List<CustomerOrderDto>();
_customerOrders = _customerOrders.OrderByDescending(x => x.CreateDate).ToList();
StateHasChanged();
}
}
}
private void OnRowDoubleClick(RecordDoubleClickEventArgs<CustomerOrderDto> obj)

View File

@@ -1,192 +1,182 @@
@page "/EdiCustomerOrder/{CustomerOrderId:guid}"
@rendermode InteractiveServer
@attribute [Authorize]
@inject EdiCustomerOrderService EdiCustomerOrderService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using SytelineSaAppEfDataModel.Dtos
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Cards
@inherits LayoutComponentBase
<div class="h-100 d-flex flex-column">
<h5>Zamówienie klienta nr @EdiCustomerOrderDto?.CustomerOrderNumber</h5>
<SfCard>
<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ówienie klienta EDI nr @(EdiCustomerOrderDto?.CustomerOrderNumber ?? "Brak numeru")</h3>
</CardHeader>
<CardContent>
<div class="row">
<div class="col">
<u>Numer zamówienia EDI:</u>&emsp;<b>@EdiCustomerOrderDto?.CustomerOrderNumber</b><br/>
<u>Numer zamówienia Klienta:</u>&emsp;<b>@EdiCustomerOrderDto?.CustomerPoNumber</b><br/>
<u>Numer klienta:</u>&emsp;<b>@EdiCustomerOrderDto?.CustomerNumber</b><br/>
<u>Klient:</u>&emsp;<b>@EdiCustomerOrderDto?.CustomerName</b><br/>
<u>Numer
odbiorcy:</u>&emsp;<b>@(EdiCustomerOrderDto?.CustomerSequence?.ToString() ?? "N/A")</b><br/>
<u>Data
otrzymania:</u>&emsp;<b>@(EdiCustomerOrderDto?.RecivedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Wysłano do
Syteline?:</u>&emsp;<b>@((EdiCustomerOrderDto?.Posted?.ToString() ?? "0") == "0" ? "NIE" : "TAK")</b><br/>
<u>Data wysyłki do
Syteline:</u>&emsp;<b>@(EdiCustomerOrderDto?.PostedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data
zamówienia:</u>&emsp;<b>@(EdiCustomerOrderDto?.OrderDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
</div>
<div class="col">
<u>Cena:</u>&emsp;<b>@(EdiCustomerOrderDto?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Waga:</u>&emsp;<b>@(EdiCustomerOrderDto?.Weight?.ToString("F2") ?? "N/A")</b><br/>
<u>Magazyn:</u>&emsp;<b>@EdiCustomerOrderDto?.Warehouse</b><br/>
<u>Gate:</u>&emsp;<b>@EdiCustomerOrderDto?.Gate</b><br/>
<u>Kod odbiorcy:</u>&emsp;<b>@EdiCustomerOrderDto?.RecipientCode</b><br/>
<u>Kod wysyłającego:</u>&emsp;<b>@EdiCustomerOrderDto?.SenderCode</b><br/>
<u>Kod sprzedawcy:</u>&emsp;<b>@EdiCustomerOrderDto?.SellerCode</b><br/>
<u>Kod kupującego:</u>&emsp;<b>@EdiCustomerOrderDto?.BuyerCode</b><br/>
<u>Typ dokumentu:</u>&emsp;<b>@EdiCustomerOrderDto?.DocType</b><br/>
</div>
</div>
<SfCard CssClass="mb-4">
<CardContent>
<div class="row">
<div class="col">
<u>Numer zamówienia EDI:</u> <b>@EdiCustomerOrderDto?.CustomerOrderNumber</b><br/>
<u>Numer zamówienia Klienta:</u> <b>@EdiCustomerOrderDto?.CustomerPoNumber</b><br/>
<u>Numer klienta:</u> <b>@EdiCustomerOrderDto?.CustomerNumber</b><br/>
<u>Klient:</u> <b>@EdiCustomerOrderDto?.CustomerName</b><br/>
<u>Numer odbiorcy:</u> <b>@(EdiCustomerOrderDto?.CustomerSequence?.ToString() ?? "N/A")</b><br/>
<u>Data otrzymania:</u> <b>@(EdiCustomerOrderDto?.RecivedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Wysłano do Syteline?:</u> <b>@((EdiCustomerOrderDto?.Posted?.ToString() ?? "0") == "0" ? "NIE" : "TAK")</b><br/>
<u>Data wysyłki do Syteline:</u> <b>@(EdiCustomerOrderDto?.PostedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data zamówienia:</u> <b>@(EdiCustomerOrderDto?.OrderDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
</div>
<div class="col">
<u>Cena:</u> <b>@(EdiCustomerOrderDto?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Waga:</u> <b>@(EdiCustomerOrderDto?.Weight?.ToString("F2") ?? "N/A")</b><br/>
<u>Magazyn:</u> <b>@EdiCustomerOrderDto?.Warehouse</b><br/>
<u>Gate:</u> <b>@EdiCustomerOrderDto?.Gate</b><br/>
<u>Kod odbiorcy:</u> <b>@EdiCustomerOrderDto?.RecipientCode</b><br/>
<u>Kod wysyłającego:</u> <b>@EdiCustomerOrderDto?.SenderCode</b><br/>
<u>Kod sprzedawcy:</u> <b>@EdiCustomerOrderDto?.SellerCode</b><br/>
<u>Kod kupującego:</u> <b>@EdiCustomerOrderDto?.BuyerCode</b><br/>
<u>Typ dokumentu:</u> <b>@EdiCustomerOrderDto?.DocType</b><br/>
</div>
</div>
</CardContent>
</SfCard>
<h5 class="text-primary mb-3">Indeksy</h5>
<SfGrid @ref="_ediCustomerOrderLinesGrid"
AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="EdiCustomerOrderLineDto"
DataSource="@_ediCustomerOrderLines"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as EdiCustomerOrderLineDto;
<SfCard CssClass="mb-4">
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer zamówienia EDI:</u> <b>@order?.CustomerOrderNumber</b><br/>
<u>Linia:</u> <b>@order?.CustomerOrderLine</b><br/>
<u>Pozycja:</u> <b>@order?.Item</b><br/>
<u>Pozycja Klienta:</u> <b>@order?.CustomerItemNumber</b><br/>
<u>Opis:</u> <b>@order?.Description</b><br/>
<u>Łączna Ilość:</u> <b>@(order?.BlanketQty?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u> <b>@order?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Cena:</u> <b>@(order?.ContPrice?.ToString("F2") ?? "N/A")</b><br/>
<u>Ważne Od:</u> <b>@(order?.EffectiveDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>J/M:</u> <b>@order?.Uom</b><br/>
<u>BoxType:</u> <b>@order?.BoxType</b><br/>
<u>Address:</u> <b>@order?.Address</b><br/>
<u>FinalDestination:</u> <b>@order?.FinalDestination</b><br/>
<u>QtyPerBox:</u> <b>@(order?.QtyPerBox?.ToString() ?? "N/A")</b>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.CustomerOrderLine) HeaderText="Linia" Width="70"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.Item) HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.CustomerItemNumber) HeaderText="Pozycja Klienta" Width="120"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.Description) HeaderText="Opis" Width="200"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.BlanketQty) HeaderText="Ilość" TextAlign="TextAlign.Right" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.Uom) HeaderText="J/M" Width="50"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.ContPrice) HeaderText="Cena" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.TranslatedStatus) HeaderText="Status" Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="EdiCustomerOrderLineDto" RowSelected="OnSelectedLineRow"></GridEvents>
</SfGrid>
@if (_isVisibleEdiCustomerOrderLine)
{
<h5 class="text-primary mb-3 mt-4">Harmonogramy</h5>
<SfGrid @ref="_ediCustomerOrderLineItemsGrid"
TValue="EdiCustomerOrderLineItemDto"
DataSource="@_ediCustomerOrderLineItems"
AllowFiltering="true"
AllowPaging="true"
AllowSelection="true"
AllowSorting="true"
SelectionMode="Syncfusion.Blazor.Grids.SelectionMode.Single"
SelectedItemsChanged="SelectedCustomerOrderLineItemChanged">
<GridTemplates>
<DetailTemplate>
@{
var detailLineItem = context as EdiCustomerOrderLineItemDto;
<SfCard CssClass="mb-4">
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer Zamówienia:</u> <b>@detailLineItem?.CustomerOrderNumber</b><br/>
<u>Linia:</u> <b>@detailLineItem?.CustomerOrderLine</b><br/>
<u>Zwolnienie:</u> <b>@detailLineItem?.CustomerOrderRelease</b><br/>
<u>Pozycja:</u> <b>@detailLineItem?.Item</b><br/>
<u>Pozycja Klienta:</u> <b>@detailLineItem?.CustomerItem</b><br/>
<u>Łączna Ilość Sztuk:</u> <b>@(detailLineItem?.QtyOrdered?.ToString("F2") ?? "N/A")</b><br/>
<u>Cena:</u> <b>@(detailLineItem?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Data Wykonania:</u> <b>@(detailLineItem?.DueDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data Rejestracji:</u> <b>@(detailLineItem?.ReleaseDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Magazyn:</u> <b>@detailLineItem?.Warehouse</b><br/>
<u>Typ Dokumentu:</u> <b>@detailLineItem?.DocumentType</b><br/>
</div>
<div class="col">
<u>Kod VAT:</u> <b>@detailLineItem?.TaxCodeOne</b><br/>
<u>J/M:</u> <b>@detailLineItem?.Uom</b><br/>
<u>Numer Klienta:</u> <b>@detailLineItem?.CustomerOrderCustomerNumber</b><br/>
<u>Opis:</u> <b>@detailLineItem?.Description</b><br/>
<u>Status:</u> <b>@detailLineItem?.TranslatedStatus</b><br/>
<u>RoutingCode:</u> <b>@detailLineItem?.RoutingCode</b><br/>
<u>DeliveryCallNumber:</u> <b>@detailLineItem?.DeliveryCallNumber</b><br/>
<u>UnloadingPoint:</u> <b>@detailLineItem?.UnloadingPoint</b><br/>
<u>DestinationPoint:</u> <b>@detailLineItem?.DestinationPoint</b><br/>
<u>PalletCode:</u> <b>@detailLineItem?.PalletCode</b><br/>
<u>PalletNumber:</u> <b>@detailLineItem?.PalletNumber</b>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<Syncfusion.Blazor.Grids.GridColumns>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.CustomerOrderLine) HeaderText="Linia" Width="70"/>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.CustomerOrderRelease) HeaderText="Zwolnienie" Width="70"/>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.Item) HeaderText="Pozycja" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.CustomerItem) HeaderText="Pozycja Klienta" Width="100"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.QtyOrdered) HeaderText="Łączna Ilość" TextAlign="TextAlign.Right" Width="120"></Syncfusion.Blazor.Grids.GridColumn>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.DueDate) HeaderText="Data Wykonania" Width="100"/>
<Syncfusion.Blazor.Grids.GridColumn Field=@nameof(EdiCustomerOrderLineItemDto.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"/>
</SfGrid>
}
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
<br/>
<h5>Indeksy</h5>
<SfGrid @ref="_ediCustomerOrderLinesGrid"
AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="EdiCustomerOrderLineDto"
DataSource="@_ediCustomerOrderLines"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as EdiCustomerOrderLineDto;
<SfCard>
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer zamówienia EDI:</u>&emsp;<b>@order?.CustomerOrderNumber</b><br/>
<u>Linia:</u>&emsp;<b>@order?.CustomerOrderLine</b><br/>
<u>Pozycja:</u>&emsp;<b>@order?.Item</b><br/>
<u>Pozycja Klienta:</u>&emsp;<b>@order?.CustomerItemNumber</b><br/>
<u>Opis:</u>&emsp;<b>@order?.Description</b><br/>
<u>Łączna Ilość:</u>&emsp;<b>@(order?.BlanketQty?.ToString("F2") ?? "N/A")</b><br/>
<u>Status:</u>&emsp;<b>@order?.TranslatedStatus</b><br/>
</div>
<div class="col">
<u>Cena:</u>&emsp;<b>@(order?.ContPrice?.ToString("F2") ?? "N/A")</b><br/>
<u>Ważne
Od:</u>&emsp;<b>@(order?.EffectiveDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>J/M:</u>&emsp;<b>@order?.Uom</b><br/>
<u>BoxType:</u>&emsp;<b>@order?.BoxType</b><br/>
<u>Address:</u>&emsp;<b>@order?.Address</b><br/>
<u>FinalDestination:</u>&emsp;<b>@order?.FinalDestination</b><br/>
<u>QtyPerBox:</u>&emsp;<b>@(order?.QtyPerBox?.ToString() ?? "N/A")</b>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.CustomerOrderLine) HeaderText="Linia"
Width="70"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.Item) HeaderText="Pozycja" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.CustomerItemNumber) HeaderText="Pozycja Klienta"
Width="120"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.Description) HeaderText="Opis" Width="200"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.BlanketQty) HeaderText="Ilość" TextAlign="TextAlign.Right"
Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.Uom) HeaderText="J/M" Width="50"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.ContPrice) HeaderText="Cena" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderLineDto.TranslatedStatus) HeaderText="Status"
Width="100"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Single"/>
<GridEvents TValue="EdiCustomerOrderLineDto" RowSelected="OnSelectedLineRow"></GridEvents>
</SfGrid>
@if (_isVisibleEdiCustomerOrderLine)
{
<br/>
<h5>Harmonogramy</h5>
<SfGrid @ref="_ediCustomerOrderLineItemsGrid"
TValue="EdiCustomerOrderLineItemDto"
DataSource="@_ediCustomerOrderLineItems"
AllowFiltering="true"
AllowPaging="true"
AllowSelection="true"
AllowSorting="true"
SelectionMode="Syncfusion.Blazor.Grids.SelectionMode.Single"
SelectedItemsChanged="SelectedCustomerOrderLineItemChanged">
<GridTemplates>
<DetailTemplate>
@{
var detailLineItem = context as EdiCustomerOrderLineItemDto;
<SfCard>
<CardContent>
<div class="row">
<h6>Szczegóły</h6>
<div class="col">
<u>Numer Zamówienia:</u>&emsp;<b>@detailLineItem?.CustomerOrderNumber</b><br/>
<u>Linia:</u>&emsp;<b>@detailLineItem?.CustomerOrderLine</b><br/>
<u>Zwolnienie:</u>&emsp;<b>@detailLineItem?.CustomerOrderRelease</b><br/>
<u>Pozycja:</u>&emsp;<b>@detailLineItem?.Item</b><br/>
<u>Pozycja Klienta:</u>&emsp;<b>@detailLineItem?.CustomerItem</b><br/>
<u>Łączna Ilość
Sztuk:</u>&emsp;<b>@(detailLineItem?.QtyOrdered?.ToString("F2") ?? "N/A")</b><br/>
<u>Cena:</u>&emsp;<b>@(detailLineItem?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Data
Wykonania:</u>&emsp;<b>@(detailLineItem?.DueDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data
Rejestracji:</u>&emsp;<b>@(detailLineItem?.ReleaseDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Magazyn:</u>&emsp;<b>@detailLineItem?.Warehouse</b><br/>
<u>Typ Documentu:</u>&emsp;<b>@detailLineItem?.DocumentType</b><br/>
</div>
<div class="col">
<u>Kod VAT:</u>&emsp;<b>@detailLineItem?.TaxCodeOne</b><br/>
<u>J/M:</u>&emsp;<b>@detailLineItem?.Uom</b><br/>
<u>Numer
Klienta:</u>&emsp;<b>@detailLineItem?.CustomerOrderCustomerNumber</b><br/>
<u>Opis:</u>&emsp;<b>@detailLineItem?.Description</b><br/>
<u>Status:</u>&emsp;<b>@detailLineItem?.TranslatedStatus</b><br/>
<u>RoutingCode:</u>&emsp;<b>@detailLineItem?.RoutingCode</b><br/>
<u>DeliveryCallNumber:</u>&emsp;<b>@detailLineItem?.DeliveryCallNumber</b><br/>
<u>UnloadingPoint:</u>&emsp;<b>@detailLineItem?.UnloadingPoint</b><br/>
<u>DestinationPoint:</u>&emsp;<b>@detailLineItem?.DestinationPoint</b><br/>
<u>PalletCode:</u>&emsp;<b>@detailLineItem?.PalletCode</b><br/>
<u>PalletNumber:</u>&emsp;<b>@detailLineItem?.PalletNumber</b>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<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"/>
</SfGrid>
}
</div>
@code {
@@ -202,13 +192,25 @@
SfGrid<EdiCustomerOrderLineItemDto>? _ediCustomerOrderLineItemsGrid;
private bool _isVisibleEdiCustomerOrderLine;
protected override async Task OnInitializedAsync()
protected override async Task OnAfterRenderAsync(bool firstRender)
{
EdiCustomerOrderDto? ediCustomerOrder = await EdiCustomerOrderService.GetEdiCustomerOrderAsync(CustomerOrderId);
if (firstRender)
{
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
EdiCustomerOrderDto = ediCustomerOrder;
_ediCustomerOrderLines = ediCustomerOrder?.EdiCustomerOrderLines.ToList() ?? [];
if (currentUser.Identity?.IsAuthenticated == false)
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
EdiCustomerOrderDto? ediCustomerOrder = await EdiCustomerOrderService.GetEdiCustomerOrderAsync(CustomerOrderId);
EdiCustomerOrderDto = ediCustomerOrder;
_ediCustomerOrderLines = ediCustomerOrder?.EdiCustomerOrderLines.ToList() ?? [];
}
}
}
private void OnSelectedLineRow<TValue>(RowSelectEventArgs<TValue> obj)

View File

@@ -1,9 +1,11 @@
@page "/EdiCustomerOrders"
@rendermode InteractiveServer
@attribute [Authorize]
@inject EdiCustomerOrderService EdiCustomerOrderService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using OrdersManagement.Models
@using SytelineSaAppEfDataModel.Dtos
@@ -14,120 +16,115 @@
@using SelectionType = Syncfusion.Blazor.Grids.SelectionType
@inherits LayoutComponentBase
<div class="h-100 d-flex flex-column">
<h5>Zamówienia Klienta EDI</h5>
<div class="row">
<div class="col-md-12">
<label for="checked" style="padding: 10px 10px 10px 0">Pokaż wszystkie</label>
<SfSwitch @bind-Checked="_filter" ValueChange="FilterChanged" TChecked="bool?"
OnLabel="Pokaż tylko Wysłanr do SL" OffLabel="Pokaż wszystkie"/>
</div>
</div>
<br/>
@if (_isVisible)
{
<div class="row">
<div class="col-md-12">
<SfButton @onclick="SendOrderToSyteLine">@_text</SfButton>
<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 Klienta EDI</h3>
</CardHeader>
<CardContent>
<div class="row mb-4">
<div class="col-md-12 d-flex align-items-center">
<label for="checked" style="padding: 10px 10px 10px 0">Pokaż wszystkie</label>
<SfSwitch @bind-Checked="_filter" ValueChange="FilterChanged" TChecked="bool?"
OnLabel="Pokaż tylko Wysłane do SL" OffLabel="Pokaż wszystkie"/>
</div>
</div>
</div>
<br/>
}
<SfGrid @ref="_grid"
AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="EdiCustomerOrderDto"
DataSource="@_ediCustomerOrders"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as EdiCustomerOrderDto;
<SfCard>
<CardContent>
<div class="row">
<div class="col">
<u>Numer zamówienia EDI:</u>&emsp;<b>@order?.CustomerOrderNumber</b><br/>
<u>Numer zamówienia Klienta:</u>&emsp;<b>@order?.CustomerPoNumber</b><br/>
<u>Numer klienta:</u>&emsp;<b>@order?.CustomerNumber</b><br/>
<u>Klient:</u>&emsp;<b>@order?.CustomerName</b><br/>
<u>Numer
odbiorcy:</u>&emsp;<b>@(order?.CustomerSequence?.ToString() ?? "N/A")</b><br/>
<u>Data
otrzymania:</u>&emsp;<b>@(order?.RecivedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Wysłano do
Syteline?:</u>&emsp;<b>@((order?.Posted?.ToString() ?? "0") == "0" ? "NIE" : "TAK")</b><br/>
<u>Data wysyłki do
Syteline:</u>&emsp;<b>@(order?.PostedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data
zamówienia:</u>&emsp;<b>@(order?.OrderDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
</div>
<div class="col">
<u>Cena:</u>&emsp;<b>@(order?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Waga:</u>&emsp;<b>@(order?.Weight?.ToString("F2") ?? "N/A")</b><br/>
<u>Magazyn:</u>&emsp;<b>@order?.Warehouse</b><br/>
<u>Gate:</u>&emsp;<b>@order?.Gate</b><br/>
<u>Kod odbiorcy:</u>&emsp;<b>@order?.RecipientCode</b><br/>
<u>Kod wysyłającego:</u>&emsp;<b>@order?.SenderCode</b><br/>
<u>Kod sprzedawcy:</u>&emsp;<b>@order?.SellerCode</b><br/>
<u>Kod kupującego:</u>&emsp;<b>@order?.BuyerCode</b><br/>
<u>Typ dokumentu:</u>&emsp;<b>@order?.DocType</b><br/>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerOrderNumber) HeaderText="Numer Zamówienia"
Width="110"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerPoNumber) HeaderText="Zamówienie Klienta"
Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerNumber) HeaderText="Numer Klienta"
Width="90"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerSequence) HeaderText="Odbiorca"
Width="80"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CreateDate) HeaderText="Data Otrzymania"
TextAlign="TextAlign.Center" Width="110"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.SlOrderNumber) HeaderText="Zamówienie SL"
Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.SentToSl) HeaderText="Wysłane do SL"
TextAlign="TextAlign.Center" Width="80"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Multiple"/>
<GridEvents TValue="EdiCustomerOrderDto" OnRecordDoubleClick="OnRowDoubleClick" RowSelected="RowSelected"/>
</SfGrid>
<SfDialog Width="500px" Title="@_text" IsModal="true" @bind-Visible="Visibility" AllowPrerender="true">
<DialogTemplates>
<Content>
@if (_responses.Any(x => x.Status == 1))
{
foreach (ResponseModel? response in _responses.Where(x => x.Status == 1))
{
<p>Zamówienie EDI @response.Identifier zostało poprawnie zaksięgowane w Zamówieniach klienta pod
numerem '@response.ExternalIdentifier'</p>
}
}
@if (_responses.Any(x => x.Status == 0))
{
foreach (ResponseModel? response in _responses.Where(x => x.Status == 0))
{
<p>Błąd: Zamówienie EDI @response.Identifier nie zostało poprawnie zaksięgowane w Zamówieniach
klienta.<br/>Lista błędów:<br/>@response.Message</p>
}
}
</Content>
</DialogTemplates>
<DialogButtons>
<DialogButton Content="OK" IsPrimary="true" OnClick="@HideModal"/>
</DialogButtons>
</SfDialog>
@if (_isVisible)
{
<div class="row mb-4">
<div class="col-md-12">
<SfButton CssClass="btn-primary" @onclick="SendOrderToSyteLine">@_text</SfButton>
</div>
</div>
}
<SfGrid @ref="_grid"
AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="EdiCustomerOrderDto"
DataSource="@_ediCustomerOrders"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
var order = context as EdiCustomerOrderDto;
<SfCard CssClass="mb-4">
<CardContent>
<div class="row">
<div class="col">
<u>Numer zamówienia EDI:</u> <b>@order?.CustomerOrderNumber</b><br/>
<u>Numer zamówienia Klienta:</u> <b>@order?.CustomerPoNumber</b><br/>
<u>Numer klienta:</u> <b>@order?.CustomerNumber</b><br/>
<u>Klient:</u> <b>@order?.CustomerName</b><br/>
<u>Numer odbiorcy:</u> <b>@(order?.CustomerSequence?.ToString() ?? "N/A")</b><br/>
<u>Data otrzymania:</u> <b>@(order?.RecivedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Wysłano do Syteline?:</u> <b>@((order?.Posted?.ToString() ?? "0") == "0" ? "NIE" : "TAK")</b><br/>
<u>Data wysyłki do Syteline:</u> <b>@(order?.PostedDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
<u>Data zamówienia:</u> <b>@(order?.OrderDate?.ToString("dd.MM.yyyy") ?? "N/A")</b><br/>
</div>
<div class="col">
<u>Cena:</u> <b>@(order?.Price?.ToString("F2") ?? "N/A")</b><br/>
<u>Waga:</u> <b>@(order?.Weight?.ToString("F2") ?? "N/A")</b><br/>
<u>Magazyn:</u> <b>@order?.Warehouse</b><br/>
<u>Gate:</u> <b>@order?.Gate</b><br/>
<u>Kod odbiorcy:</u> <b>@order?.RecipientCode</b><br/>
<u>Kod wysyłającego:</u> <b>@order?.SenderCode</b><br/>
<u>Kod sprzedawcy:</u> <b>@order?.SellerCode</b><br/>
<u>Kod kupującego:</u> <b>@order?.BuyerCode</b><br/>
<u>Typ dokumentu:</u> <b>@order?.DocType</b><br/>
</div>
</div>
</CardContent>
</SfCard>
}
</DetailTemplate>
</GridTemplates>
<GridColumns>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerOrderNumber) HeaderText="Numer Zamówienia" Width="110"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerPoNumber) HeaderText="Zamówienie Klienta" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerNumber) HeaderText="Numer Klienta" Width="90"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CustomerSequence) HeaderText="Odbiorca" Width="80"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.CreateDate) HeaderText="Data Otrzymania" TextAlign="TextAlign.Center" Width="110"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.SlOrderNumber) HeaderText="Zamówienie SL" Width="100"></GridColumn>
<GridColumn Field=@nameof(EdiCustomerOrderDto.SentToSl) HeaderText="Wysłane do SL" TextAlign="TextAlign.Center" Width="80"></GridColumn>
</GridColumns>
<GridFilterSettings Type="FilterType.Excel"/>
<GridPageSettings PageSize="10"/>
<GridSelectionSettings Mode="SelectionMode.Row" Type="SelectionType.Multiple"/>
<GridEvents TValue="EdiCustomerOrderDto" OnRecordDoubleClick="OnRowDoubleClick" RowSelected="RowSelected"/>
</SfGrid>
<SfDialog Width="500px" Title="@_text" IsModal="true" @bind-Visible="Visibility" AllowPrerender="true">
<DialogTemplates>
<Content>
@if (_responses.Any(x => x.Status == 1))
{
foreach (ResponseModel? response in _responses.Where(x => x.Status == 1))
{
<p>Zamówienie EDI @response.Identifier zostało poprawnie zaksięgowane w Zamówieniach klienta pod numerem '@response.ExternalIdentifier'</p>
}
}
@if (_responses.Any(x => x.Status == 0))
{
foreach (ResponseModel? response in _responses.Where(x => x.Status == 0))
{
<p>Błąd: Zamówienie EDI @response.Identifier nie zostało poprawnie zaksięgowane w Zamówieniach klienta.<br/>Lista błędów:<br/>@response.Message</p>
}
}
</Content>
</DialogTemplates>
<DialogButtons>
<DialogButton Content="OK" IsPrimary="true" OnClick="@HideModal"/>
</DialogButtons>
</SfDialog>
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {
@@ -145,9 +142,21 @@
private string _text = "Księguj bieżący";
protected override async Task OnInitializedAsync()
protected override async Task OnAfterRenderAsync(bool firstRender)
{
await LoadData();
if (firstRender)
{
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
if (currentUser.Identity?.IsAuthenticated == false)
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
await LoadData();
}
}
}
private void OnRowDoubleClick(RecordDoubleClickEventArgs<EdiCustomerOrderDto> obj)

View File

@@ -1,47 +1,43 @@
@page "/login"
@rendermode InteractiveServer
@attribute [AllowAnonymous]
@using Microsoft.AspNetCore.Authorization
@using Microsoft.AspNetCore.Components.Authorization
@using OrdersManagement.Models
@using Syncfusion.Blazor.Inputs
@using Syncfusion.Blazor.Buttons
@using Syncfusion.Blazor.Cards
@inject UserService UserService
@inject NavigationManager NavigationManager
@inject AuthenticationStateProvider AuthenticationStateProvider
<div class="h-100 d-flex flex-column">
<h5>Logowanie</h5>
@if (!string.IsNullOrEmpty(TempPassword))
{
<div class="alert alert-info">
Twoje tymczasowe hasło to: <strong>@TempPassword</strong>. Użyj go do pierwszego logowania.
</div>
}
<SfCard>
<CardHeader Title="Zaloguj się"/>
<div class="h-100 d-flex justify-content-center align-items-start">
<SfCard CssClass="text-center shadow" style="max-width: 500px;">
<CardHeader>
<h3 class="text-primary">Logowanie</h3>
</CardHeader>
<CardContent>
@if (!string.IsNullOrEmpty(TempPassword))
{
<div class="alert alert-info mb-3">
Twoje tymczasowe hasło to: <strong>@TempPassword</strong>. Użyj go do pierwszego logowania.
</div>
}
<EditForm Model="@LoginModel" FormName="LoginForm" OnValidSubmit="@HandleLogin">
<DataAnnotationsValidator/>
<ValidationSummary/>
<ValidationSummary class="text-danger mb-3"/>
<div class="form-group">
<label for="login">Login</label>
<SfTextBox ID="login" @bind-Value="LoginModel.Login" Placeholder="Wprowadź login"
CssClass="e-outline"/>
<ValidationMessage For="@(() => LoginModel.Login)"/>
<div class="form-group mb-3">
<label for="login" class="d-block text-start">Login</label>
<SfTextBox ID="login" @bind-Value="LoginModel.Login" Placeholder="Wprowadź login" CssClass="e-outline"/>
<ValidationMessage For="@(() => LoginModel.Login)" ClassName="text-danger"/>
</div>
<div class="form-group">
<label for="password">Hasło</label>
<div class="form-group mb-3">
<label for="password" class="d-block text-start">Hasło</label>
<SfTextBox ID="password" Type="InputType.Password" @bind-Value="LoginModel.Password"
Placeholder="Wprowadź hasło" CssClass="e-outline"/>
<ValidationMessage For="@(() => LoginModel.Password)"/>
<ValidationMessage For="@(() => LoginModel.Password)" ClassName="text-danger"/>
</div>
<div class="form-group mt-3">
@@ -56,37 +52,36 @@
@if (ShowChangePassword)
{
<hr/>
<h5>Zmień hasło</h5>
<EditForm Model="@ChangePasswordModel" FormName="ChangePasswordForm"
OnValidSubmit="@HandleChangePassword">
<hr class="my-4"/>
<h5 class="text-success mb-3">Zmień hasło</h5>
<EditForm Model="@ChangePasswordModel" FormName="ChangePasswordForm" OnValidSubmit="@HandleChangePassword">
<DataAnnotationsValidator/>
<ValidationSummary/>
<ValidationSummary class="text-danger mb-3"/>
<div class="form-group">
<label for="newPassword">Nowe hasło</label>
<SfTextBox ID="newPassword" Type="InputType.Password"
@bind-Value="ChangePasswordModel.NewPassword" Placeholder="Wprowadź nowe hasło"
CssClass="e-outline"/>
<ValidationMessage For="@(() => ChangePasswordModel.NewPassword)"/>
<div class="form-group mb-3">
<label for="newPassword" class="d-block text-start">Nowe hasło</label>
<SfTextBox ID="newPassword" Type="InputType.Password" @bind-Value="ChangePasswordModel.NewPassword"
Placeholder="Wprowadź nowe hasło" CssClass="e-outline"/>
<ValidationMessage For="@(() => ChangePasswordModel.NewPassword)" ClassName="text-danger"/>
</div>
<div class="form-group">
<label for="confirmPassword">Potwierdź hasło</label>
<SfTextBox ID="confirmPassword" Type="InputType.Password"
@bind-Value="ChangePasswordModel.ConfirmPassword" Placeholder="Potwierdź nowe hasło"
CssClass="e-outline"/>
<ValidationMessage For="@(() => ChangePasswordModel.ConfirmPassword)"/>
<div class="form-group mb-3">
<label for="confirmPassword" class="d-block text-start">Potwierdź hasło</label>
<SfTextBox ID="confirmPassword" Type="InputType.Password" @bind-Value="ChangePasswordModel.ConfirmPassword"
Placeholder="Potwierdź nowe hasło" CssClass="e-outline"/>
<ValidationMessage For="@(() => ChangePasswordModel.ConfirmPassword)" ClassName="text-danger"/>
</div>
<div class="form-group mt-3">
<SfButton CssClass="e-success" Type="submit">Zmień hasło</SfButton>
<SfButton CssClass="e-success" IsPrimary="true" Type="submit">Zmień hasło</SfButton>
</div>
</EditForm>
}
</CardContent>
<CardFooter>
<small class="text-muted">Orders Management System © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {

View File

@@ -0,0 +1,20 @@
@page "/"
@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@inject NavigationManager NavigationManager
@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await CustomAuthenticationStateProvider.MarkUserAsLoggedOut();
NavigationManager.NavigateTo("/login");
}
}
}

View File

@@ -1,8 +0,0 @@
@inject NavigationManager Navigation
@code {
protected override void OnInitialized()
{
Navigation.NavigateTo("/login");
}
}

View File

@@ -1,154 +1,159 @@
@page "/ScheduleOrder/{ScheduleOrderId:int}"
@attribute [Authorize]
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Lists
@using Syncfusion.Blazor.Cards
@inject ScheduleOrderService ScheduleOrderService
@inject NavigationManager NavigationManager
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
<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"
AllowSorting="true"
AllowSelection="true"
TValue="ScheduleOrderDetailDto"
DataSource="@_scheduleOrderDetails"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
IList<ScheduleOrderDetailMiscDto>? scheduleOrderDetailMiscs = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailMiscs;
IList<ScheduleOrderDetailDetailDto>? scheduleOrderDetailDetails = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailDetails;
<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ówienie DELFOR nr @(ScheduleOrderDto?.PONum ?? "Brak numeru")</h3>
</CardHeader>
<CardContent>
<SfListView Id="ScheduleOrderMiscs"
DataSource="@ScheduleOrderDto?.ScheduleOrderMiscs"
ShowHeader="false"
CssClass="e-list-template mb-4">
<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>
<SfListView Id="ScheduleOrderDetailMiscs"
DataSource="@scheduleOrderDetailMiscs"
ShowHeader="false"
CssClass="e-list-template">
<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
</span>
</Template>
</ListViewTemplates>
</SfListView>
<br/>
<h5>Harmonogramy</h5>
<SfGrid AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="ScheduleOrderDetailDetailDto"
DataSource="@scheduleOrderDetailDetails"
EnableAdaptiveUI="true"
AdaptiveUIMode="AdaptiveMode.Both">
<GridEvents TValue="ScheduleOrderDetailDetailDto" RowDataBound="OnRowDataBound"/>
<GridTemplates Context="detailDetail">
<DetailTemplate>
@{
IList<ScheduleOrderDetailDetailMiscDto>? scheduleOrderDetailDetailMiscs = (@detailDetail as ScheduleOrderDetailDetailDto)?.ScheduleOrderDetailDetailMiscs;
<h5 class="text-primary mb-3">Indeksy</h5>
<SfGrid AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="ScheduleOrderDetailDto"
DataSource="@_scheduleOrderDetails"
EnableAdaptiveUI="true">
<GridTemplates>
<DetailTemplate>
@{
IList<ScheduleOrderDetailMiscDto>? scheduleOrderDetailMiscs = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailMiscs;
IList<ScheduleOrderDetailDetailDto>? scheduleOrderDetailDetails = (@context as ScheduleOrderDetailDto)?.ScheduleOrderDetailDetails;
<SfListView Id="ScheduleOrderDetailDetailMiscs"
DataSource="@scheduleOrderDetailDetailMiscs"
ShowHeader="false"
CssClass="e-list-template">
<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
</span>
</Template>
</ListViewTemplates>
</SfListView>
}
</DetailTemplate>
</GridTemplates>
<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"/>
</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>
<SfListView Id="ScheduleOrderDetailMiscs"
DataSource="@scheduleOrderDetailMiscs"
ShowHeader="false"
CssClass="e-list-template mb-4">
<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</span>
</Template>
</ListViewTemplates>
</SfListView>
<h5 class="text-primary mb-3">Harmonogramy</h5>
<SfGrid AllowFiltering="true"
AllowPaging="true"
AllowSorting="true"
AllowSelection="true"
TValue="ScheduleOrderDetailDetailDto"
DataSource="@scheduleOrderDetailDetails"
EnableAdaptiveUI="true"
AdaptiveUIMode="AdaptiveMode.Both">
<GridEvents TValue="ScheduleOrderDetailDetailDto" RowDataBound="OnRowDataBound"/>
<GridTemplates Context="detailDetail">
<DetailTemplate>
@{
IList<ScheduleOrderDetailDetailMiscDto>? scheduleOrderDetailDetailMiscs = (@detailDetail as ScheduleOrderDetailDetailDto)?.ScheduleOrderDetailDetailMiscs;
<SfListView Id="ScheduleOrderDetailDetailMiscs"
DataSource="@scheduleOrderDetailDetailMiscs"
ShowHeader="false"
CssClass="e-list-template mb-4">
<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</span>
</Template>
</ListViewTemplates>
</SfListView>
}
</DetailTemplate>
</GridTemplates>
<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"/>
</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>
</CardContent>
<CardFooter>
<small class="text-muted">FA Krosno Manager © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {
[Parameter] public int ScheduleOrderId { get; set; }
private IEnumerable<ScheduleOrderDetailDto>? _scheduleOrderDetails;
private ScheduleOrderDto? ScheduleOrderDto { get; set; }
protected override async Task OnInitializedAsync()
protected override async Task OnAfterRenderAsync(bool firstRender)
{
ScheduleOrderDto = await ScheduleOrderService.GetScheduleOrderAsync(ScheduleOrderId);
_scheduleOrderDetails = ScheduleOrderDto?.ScheduleOrderDetails;
if (ScheduleOrderDto is not null && _scheduleOrderDetails is not null)
if (firstRender)
{
foreach (ScheduleOrderDetailDto scheduleOrderDetailDto in _scheduleOrderDetails)
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
if (currentUser.Identity?.IsAuthenticated == false)
{
scheduleOrderDetailDto.OrderNumber = ScheduleOrderDto?.PONum;
scheduleOrderDetailDto.RecipientCode = ScheduleOrderDto?.RecipientCode;
scheduleOrderDetailDto.RecipientName = ScheduleOrderDto?.RecipientName;
scheduleOrderDetailDto.PurchaserName = ScheduleOrderDto?.PurchaserCode;
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
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();
}
}
StateHasChanged();
}
private void OnRowDataBound(RowDataBoundEventArgs<ScheduleOrderDetailDetailDto> args)

View File

@@ -2,16 +2,16 @@
@attribute [Authorize]
@using System.Security.Claims
@using Microsoft.AspNetCore.Authorization
@using OrdersManagement.Components.Pages.Shared
@using Syncfusion.Blazor.Grids
@inject ScheduleOrderService ScheduleOrderService
@inject CustomAuthenticationStateProvider CustomAuthenticationStateProvider
@inject NavigationManager NavigationManager;
<div class="h-100 d-flex flex-column">
<h5>Zamówienia DELFOR</h5>
<ScheduleOrdersGrid PageSize="20" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
</div>
<ScheduleOrdersGrid PageSize="20" PassGridRef="SetGridRef" GridData="_scheduleOrders" />
@code {
private IEnumerable<ScheduleOrderDto> _scheduleOrders = [];
@@ -20,8 +20,17 @@
{
if (firstRender)
{
_scheduleOrders = await FetchScheduleOrdersAsync();
StateHasChanged();
ClaimsPrincipal currentUser = CustomAuthenticationStateProvider.GetCurrentUser();
if (currentUser.Identity?.IsAuthenticated == false)
{
NavigationManager.NavigateTo("/Unauthorized");
}
else
{
_scheduleOrders = await FetchScheduleOrdersAsync();
StateHasChanged();
}
}
}

View File

@@ -1,116 +1,103 @@
@inject NavigationManager NavigationManager
@using Syncfusion.Blazor.Grids
@using Syncfusion.Blazor.Cards
@inherits LayoutComponentBase
@inject ScheduleOrderService ScheduleOrderService
<div class="h-100 d-flex flex-column">
<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">
<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>
<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">
<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">Orders Management System © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {

View File

@@ -0,0 +1,35 @@
@page "/Unauthorized"
@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]
@using Syncfusion.Blazor.Cards
@using Syncfusion.Blazor.Buttons
@inject NavigationManager NavigationManager
<div class="h-100 d-flex justify-content-center align-items-start pt-5">
<SfCard CssClass="text-center shadow" style="max-width: 500px;">
<CardHeader>
<h3 class="text-warning">Brak autoryzacji</h3>
</CardHeader>
<CardContent>
<p class="text-muted mb-4">
Ups! Wygląda na to, że nie masz dostępu do tej strony. Aby kontynuować, zaloguj się do swojego konta.
</p>
<SfButton CssClass="e-primary" IsPrimary="true" @onclick="NavigateToLogin">
Przejdź do logowania
</SfButton>
</CardContent>
<CardFooter>
<small class="text-muted">Orders Management System © @(DateTime.Now.Year)</small>
</CardFooter>
</SfCard>
</div>
@code {
private void NavigateToLogin()
{
NavigationManager.NavigateTo("/login");
}
}