diff --git a/FruitBank.Common/Models/LoggedInModel.cs b/FruitBank.Common/Models/LoggedInModel.cs index 3155bad..00602e5 100644 --- a/FruitBank.Common/Models/LoggedInModel.cs +++ b/FruitBank.Common/Models/LoggedInModel.cs @@ -11,6 +11,9 @@ public class LoggedInModel public bool IsRevisor => IsLoggedIn && CustomerRoles.Any(x => x.SystemName.ToLowerInvariant() == "measuringrevisor"); public bool IsAdministrator => IsLoggedIn && CustomerRoles.Any(x => x.SystemName.ToLowerInvariant() == "administrators"); + public bool IsDeveloper => IsAdministrator && (CustomerDto!.Email.Contains("@aycode.com") || CustomerDto!.Email.Contains("wsdservers@") || + CustomerDto!.Email.Contains("@dsserver.com")); + public CustomerDto? CustomerDto { get; private set; } public List CustomerRoles { get; private set; } = []; diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor index 88f2da7..efe5382 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor @@ -4,9 +4,9 @@ @inject FruitBankSignalRClient FruitBankSignalRClient @@ -21,6 +21,7 @@ + @if (IsMasterGrid) @@ -29,7 +30,7 @@ - + @{ diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor index dac0c33..d899940 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor @@ -15,9 +15,17 @@ - + + + + + - + @* *@ @@ -26,7 +34,8 @@ - @* *@ + + @@ -48,39 +57,12 @@ [Parameter] public bool IsMasterGrid { get; set; } = false; //[Parameter] public OrderDto? OrderDto { get; set; } [Parameter] public List? OrderItemDtos { get; set; } + [Parameter] public List? ProductDtos { get; set; } - protected override void OnInitialized() + protected override async Task OnInitializedAsync() { + ProductDtos ??= await FruitBankSignalRClient.GetProductDtos(); // if (OrderDto != null) // OrderItemDtos = OrderDto.OrderItemDtos; } - -} - -@* List GenericAttributes { get; set; } - List OrderItemPallets { get; set; } - OrderDto OrderDto { get; set; } - bool IsMeasured - bool IsMeasurable - int TrayQuantity - double NetWeight - double GrossWeight - - public Guid OrderItemGuid { get; set; } - public int OrderId { get; set; } - public int ProductId { get; set; } - public int Quantity { get; set; } - - public decimal UnitPriceInclTax { get; set; } - public decimal UnitPriceExclTax { get; set; } - - public decimal PriceInclTax { get; set; } - public decimal PriceExclTax { get; set; } - - public string AttributesXml { get; set; } - public decimal? ItemWeight { get; set; } - - public string ProductName => ProductDto?.Name ?? "ProductDto is null!!!"; - - public TProductDto? ProductDto { get; set; } - *@ \ No newline at end of file +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor index 375567d..16a5530 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor @@ -25,6 +25,7 @@ + + @if (IsMasterGrid) diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor new file mode 100644 index 0000000..8e6ff5a --- /dev/null +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -0,0 +1,161 @@ +@using FruitBank.Common.Dtos +@using FruitBank.Common.Entities +@using FruitBankHybrid.Shared.Services.SignalRs + +@inject FruitBankSignalRClient FruitBankSignalRClient + + + + + + + + + + + + + + + + + + + + @if (IsMasterGrid) + { + var shippingDocument = ((ShippingDocument)context.DataItem); + + + + + + + @{ + var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? []; + // + } + + + + } + + + + + + + + + + + + + + + + @* + + + *@ + + + + + + + + +@code { + [Parameter] public bool IsMasterGrid { get; set; } = false; + //[Parameter] public OrderDto? OrderDto { get; set; } + [Parameter] public List? ShippingDocuments { get; set; } + + const string ExportFileName = "ExportResult"; + string GridSearchText = ""; + bool EditItemsEnabled { get; set; } + int FocusedRowVisibleIndex { get; set; } + IGrid Grid { get; set; } + + private int _activeTabIndex; + protected override void OnInitialized() + { + // if (OrderDto != null) + // OrderItemDtos = OrderDto.OrderItemDtos; + } + + async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) { + // await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); + // await LoadGridDataAsync(); + // if(Data.Length == 0) + // UpdateEditItemsEnabled(false); + } + async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { + // if(e.IsNew) { + // await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); + // UpdateEditItemsEnabled(true); + // } else + // await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel); + // await LoadGridDataAsync(); + } + async Task NewItem_Click() { + await Grid.StartEditNewRowAsync(); + } + async Task EditItem_Click() { + await Grid.StartEditRowAsync(FocusedRowVisibleIndex); + } + void DeleteItem_Click() { + Grid.ShowRowDeleteConfirmation(FocusedRowVisibleIndex); + } + void ColumnChooserItem_Click(ToolbarItemClickEventArgs e) { + Grid.ShowColumnChooser(); + } + async Task ExportXlsxItem_Click() { + await Grid.ExportToXlsxAsync(ExportFileName); + } + async Task ExportXlsItem_Click() { + await Grid.ExportToXlsAsync(ExportFileName); + } + async Task ExportCsvItem_Click() { + await Grid.ExportToCsvAsync(ExportFileName); + } + async Task ExportPdfItem_Click() { + await Grid.ExportToPdfAsync(ExportFileName); + } + protected async Task OnActiveTabChanged(int activeTabIndex) + { + _activeTabIndex = activeTabIndex; + return; + + // switch (_activeTabIndex) + // { + // case 0: + // if(ProductDtos == null) + // ProductDtos = (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + // break; + // case 1: + // if(OrderDtos == null) + // OrderDtos = (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + // break; + // case 2: + // if (OrderItemDtos == null) + // OrderItemDtos = (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + // break; + // } + } +} + diff --git a/FruitBankHybrid.Shared/Components/GridShippingItem.razor b/FruitBankHybrid.Shared/Components/GridShippingItem.razor new file mode 100644 index 0000000..20042de --- /dev/null +++ b/FruitBankHybrid.Shared/Components/GridShippingItem.razor @@ -0,0 +1,66 @@ +@using FruitBank.Common.Dtos +@using FruitBank.Common.Entities +@using FruitBankHybrid.Shared.Services.SignalRs + +@inject FruitBankSignalRClient FruitBankSignalRClient + +@*
+ Contact Phone: @OrderDto.Email +
*@ + + + + + + @* *@ + + + + + + + + + + + + + + + + + + + + + + @* *@ + + + + + + + + +@code { + [Parameter] public bool IsMasterGrid { get; set; } = false; + //[Parameter] public OrderDto? OrderDto { get; set; } + [Parameter] public List? ShippingItems { get; set; } + + protected override async Task OnInitializedAsync() + { + ShippingItems ??= await FruitBankSignalRClient.GetShippingItems() ?? []; + } + +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/MgGridBase.cs b/FruitBankHybrid.Shared/Components/MgGridBase.cs index 7c2b4d4..7ed759e 100644 --- a/FruitBankHybrid.Shared/Components/MgGridBase.cs +++ b/FruitBankHybrid.Shared/Components/MgGridBase.cs @@ -1,13 +1,18 @@ using AyCode.Core.Loggers; using DevExpress.Blazor; +using DevExpress.Data.Helpers; +using DevExpress.Utils.Filtering.Internal; using FruitBankHybrid.Shared.Services.SignalRs; using Microsoft.AspNetCore.Components; +using System.Reflection; namespace FruitBankHybrid.Shared.Components; public class MgGridBase : DxGrid { + private bool _isFirstInitializeParameterCore; private bool _isFirstInitializeParameters; + [Inject] public required IEnumerable LogWriters { get; set; } [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; } @@ -36,7 +41,7 @@ public class MgGridBase : DxGrid } protected override Task SetParametersAsyncCore(ParameterView parameters) { - if (!_isFirstInitializeParameters) + if (!_isFirstInitializeParameterCore) { //if (typeof(TDataItem) is IId || typeof(TDataItem) is IId) KeyFieldName = "Id"; @@ -46,29 +51,7 @@ public class MgGridBase : DxGrid CustomizeElement += OnCustomizeElement; - //ShowFilterRow = true; - //PageSize = 4; - //ShowGroupPanel = true; - //AllowSort = false; - - TextWrapEnabled = false; - AllowSelectRowByClick = true; - HighlightRowOnHover = true; - AutoCollapseDetailRow = true; - AutoExpandAllGroupRows = false; - - //KeyboardNavigationEnabled = true; - - //var dataColumns = GetDataColumns(); - - //var idColumn = dataColumns.FirstOrDefault(x => x.FieldName == nameof(IId.Id)); - //if (idColumn != null) - //{ - // idColumn.ShowInColumnChooser = AcDomain.IsDeveloperVersion; - // idColumn.Visible = !AcDomain.IsDeveloperVersion; - //} - - _isFirstInitializeParameters = true; + _isFirstInitializeParameterCore = true; } return base.SetParametersAsyncCore(parameters); @@ -77,11 +60,74 @@ public class MgGridBase : DxGrid protected override void OnParametersSet() { + if (!_isFirstInitializeParameters) + { + ShowGroupPanel = IsMasterGrid; + ShowSearchBox = IsMasterGrid; + ShowFilterRow = IsMasterGrid; + + FilterMenuButtonDisplayMode=(IsMasterGrid ? GridFilterMenuButtonDisplayMode.Never : GridFilterMenuButtonDisplayMode.Always); + + DetailRowDisplayMode = IsMasterGrid ? GridDetailRowDisplayMode.Auto : GridDetailRowDisplayMode.Never; + DetailExpandButtonDisplayMode = IsMasterGrid ? GridDetailExpandButtonDisplayMode.Auto : GridDetailExpandButtonDisplayMode.Never; + + TextWrapEnabled = false; + AllowSelectRowByClick = true; + HighlightRowOnHover = true; + AutoCollapseDetailRow = true; + AutoExpandAllGroupRows = false; + + PagerVisible = IsMasterGrid; + PageSize = IsMasterGrid ? 15 : 50; + + AllowColumnReorder = true; + AllowGroup = IsMasterGrid; + AllowSort = true; + + FocusedRowEnabled = true; + ColumnResizeMode = GridColumnResizeMode.ColumnsContainer; + EditMode = GridEditMode.EditRow; + //VirtualScrollingEnabled = IsMasterGrid; + PageSizeSelectorVisible = true; + + _isFirstInitializeParameters = true; + } + base.OnParametersSet(); - - ShowGroupPanel = IsMasterGrid; - ShowSearchBox = IsMasterGrid; - DetailRowDisplayMode = IsMasterGrid ? GridDetailRowDisplayMode.Auto : GridDetailRowDisplayMode.Never; - DetailExpandButtonDisplayMode = IsMasterGrid ? GridDetailExpandButtonDisplayMode.Auto : GridDetailExpandButtonDisplayMode.Never; } + + //public RenderFragment AddCommandColumn() + //{ + // RenderFragment columns = b => + // { + // if (!IsMasterGrid) + // { + // b.OpenComponent(0, typeof(DxGridCommandColumn)); + // b.CloseComponent(); + // } + // }; + + // this.Columns.ApplyChain(x) = AddCommandColumn(); + + // return columns; + //} + + //private RenderFragment BuildColumnsGrid() + //{ + // PropertyInfo[] props = DataSource.FirstOrDefault().GetType().GetProperties(); + // RenderFragment columns = b => + // { + // foreach (var prop in props) + // { + // if (prop.PropertyType == typeof(string)) + // { + + // b.OpenComponent(0, typeof(DxGridDataColumn)); + // b.AddAttribute(0, "FieldName", prop.Name); + // b.CloseComponent(); + // } + // } + // }; + // return columns; + //} } \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Layout/NavMenu.razor b/FruitBankHybrid.Shared/Layout/NavMenu.razor index 858355e..65edb22 100644 --- a/FruitBankHybrid.Shared/Layout/NavMenu.razor +++ b/FruitBankHybrid.Shared/Layout/NavMenu.razor @@ -37,11 +37,17 @@ - @if (LoggedInModel.IsAdministrator) + @if (LoggedInModel.IsDeveloper) { + + } diff --git a/FruitBankHybrid.Shared/Pages/Revisor.razor b/FruitBankHybrid.Shared/Pages/OrdersAdmin.razor similarity index 81% rename from FruitBankHybrid.Shared/Pages/Revisor.razor rename to FruitBankHybrid.Shared/Pages/OrdersAdmin.razor index d452b96..414b9e3 100644 --- a/FruitBankHybrid.Shared/Pages/Revisor.razor +++ b/FruitBankHybrid.Shared/Pages/OrdersAdmin.razor @@ -1,11 +1,11 @@ -@page "/Revisor" +@page "/OrdersAdmin" @using FruitBank.Common.Dtos @using FruitBankHybrid.Shared.Components -

Revisor

+

Rendelések - Adminisztrátor

-
+
- + diff --git a/FruitBankHybrid.Shared/Pages/Revisor.razor.cs b/FruitBankHybrid.Shared/Pages/OrdersAdmin.razor.cs similarity index 69% rename from FruitBankHybrid.Shared/Pages/Revisor.razor.cs rename to FruitBankHybrid.Shared/Pages/OrdersAdmin.razor.cs index b6e26c0..e382114 100644 --- a/FruitBankHybrid.Shared/Pages/Revisor.razor.cs +++ b/FruitBankHybrid.Shared/Pages/OrdersAdmin.razor.cs @@ -9,7 +9,7 @@ using Microsoft.AspNetCore.Components; namespace FruitBankHybrid.Shared.Pages; -public partial class Revisor : ComponentBase +public partial class OrdersAdmin : ComponentBase { [Inject] public required IEnumerable LogWriters { get; set; } [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; } @@ -34,7 +34,7 @@ public partial class Revisor : ComponentBase LoadingPanelVisible = true; - _logger = new LoggerClient(LogWriters.ToArray()); + _logger = new LoggerClient(LogWriters.ToArray()); _logger.Info("OnInitializedAsync"); await RefreshOrdersFromDb(DateTime.Now); @@ -58,16 +58,13 @@ public partial class Revisor : ComponentBase switch (ActiveTabIndex) { case 0: - if(ProductDtos == null) - ProductDtos = (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + ProductDtos ??= (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); break; case 1: - if(OrderDtos == null) - OrderDtos = (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + OrderDtos ??= (await FruitBankSignalRClient.GetAllOrderDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); break; case 2: - if (OrderItemDtos == null) - OrderItemDtos = (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + OrderItemDtos ??= (await FruitBankSignalRClient.GetAllOrderItemDtos() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); break; } diff --git a/FruitBankHybrid.Shared/Pages/Revisor.razor.css b/FruitBankHybrid.Shared/Pages/OrdersAdmin.razor.css similarity index 100% rename from FruitBankHybrid.Shared/Pages/Revisor.razor.css rename to FruitBankHybrid.Shared/Pages/OrdersAdmin.razor.css diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor new file mode 100644 index 0000000..82b94df --- /dev/null +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor @@ -0,0 +1,37 @@ +@page "/ShippingsAdmin" +@using FruitBank.Common.Dtos +@using FruitBankHybrid.Shared.Components +

Szállítmányok - Adminisztrátor

+ + + +
+ + + + @* @bind-ActiveTabIndex="@ActiveTabIndex" *@ + + + + + + @* *@ + + + + + + + + + @* *@ + + + +
\ No newline at end of file diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs new file mode 100644 index 0000000..94e803a --- /dev/null +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.cs @@ -0,0 +1,79 @@ +using AyCode.Core.Loggers; +using DevExpress.Blazor; +using FruitBank.Common.Dtos; +using FruitBank.Common.Entities; +using FruitBank.Common.Models; +using FruitBankHybrid.Shared.Services.Loggers; +using FruitBankHybrid.Shared.Services.SignalRs; +using Mango.Nop.Core.Loggers; +using Microsoft.AspNetCore.Components; + +namespace FruitBankHybrid.Shared.Pages; + +public partial class ShippingsAdmin : ComponentBase +{ + [Inject] public required IEnumerable LogWriters { get; set; } + [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; } + [Inject] public required NavigationManager NavManager { get; set; } + [Inject] private IDialogService DialogService { get; set; } = null!; + [Inject] public required LoggedInModel LoggedInModel { get; set; } + + public IGrid gridShipping; + private List? ProductDtos { get; set; } = null!; + private List? Shippings { get; set; } = null!; + private List? ShippingDocuments { get; set; } = null!; + private List? ShippingItems { get; set; } = null!; + + public bool AutoCollapseDetailRow { get; set; } + public bool LoadingPanelVisible { get; set; } = true; + + private ILogger _logger = null!; + public int ActiveTabIndex; + + protected override async Task OnInitializedAsync() + { + if (!LoggedInModel.IsRevisor) NavManager.NavigateTo("/Login"); + + LoadingPanelVisible = true; + + _logger = new LoggerClient(LogWriters.ToArray()); + _logger.Info("OnInitializedAsync"); + + await RefreshOrdersFromDb(DateTime.Now); + await base.OnInitializedAsync(); + } + + private async Task RefreshOrdersFromDb(DateTime dateTime) + { + LoadingPanelVisible = true; + + Shippings = (await FruitBankSignalRClient.GetShippings() ?? []).OrderByDescending(o=>o.Id).ToList();//.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + + LoadingPanelVisible = false; + } + + protected async Task OnActiveTabChanged(int activeTabIndex) + { + ActiveTabIndex = activeTabIndex; + LoadingPanelVisible = true; + + switch (ActiveTabIndex) + { + case 0: + ProductDtos ??= (await FruitBankSignalRClient.GetProductDtos() ?? []); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + break; + case 1: + Shippings ??= (await FruitBankSignalRClient.GetShippings() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + break; + case 2: + ShippingDocuments ??= (await FruitBankSignalRClient.GetShippingDocuments() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + + break; + case 3: + ShippingItems ??= (await FruitBankSignalRClient.GetShippingItems() ?? []).OrderByDescending(o => o.Id).ToList(); //.Where(o => o.HasMeasuringAccess(LoggedInModel.CustomerDto?.Id, LoggedInModel.IsRevisor)).OrderBy(o => o.DateOfReceipt).ToList(); + break; + } + + LoadingPanelVisible = false; + } +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.css b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.css new file mode 100644 index 0000000..5f28270 --- /dev/null +++ b/FruitBankHybrid.Shared/Pages/ShippingsAdmin.razor.css @@ -0,0 +1 @@ + \ No newline at end of file