diff --git a/FruitBank.Common/FruitBankConstClient.cs b/FruitBank.Common/FruitBankConstClient.cs index 69f33f5..e9926f4 100644 --- a/FruitBank.Common/FruitBankConstClient.cs +++ b/FruitBank.Common/FruitBankConstClient.cs @@ -35,8 +35,6 @@ public static class FruitBankConstClient public const string ShippingDocumentDbTableName = "fbShippingDocument"; public const string ShippingDocumentToFilesDbTableName = "fbShippingDocumentToFiles"; - - //public static Guid[] DevAdminIds = new Guid[2] { Guid.Parse("dcf451d2-cc4c-4ac2-8c1f-da00041be1fd"), Guid.Parse("4cbaed43-2465-4d99-84f1-c8bc6b7025f7") }; //public static Guid[] SysAdmins = new Guid[3] //{ diff --git a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs index 8f8e036..aaf727f 100644 --- a/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs +++ b/FruitBank.Common/Interfaces/IFruitBankDataControllerCommon.cs @@ -27,6 +27,7 @@ public interface IFruitBankDataControllerCommon #region ShippingItem public Task?> GetShippingItems(); public Task GetShippingItemById(int id); + public Task AddShippingItem(ShippingItem shippingItem); public Task UpdateShippingItem(ShippingItem shippingItem); public Task UpdateMeasuredShippingItem(ShippingItem shippingItem); #endregion ShippingItem @@ -41,6 +42,7 @@ public interface IFruitBankDataControllerCommon #region ShippingDocument public Task?> GetShippingDocuments(); public Task GetShippingDocumentById(int id); + public Task AddShippingDocument(ShippingDocument shippingDocument); public Task UpdateShippingDocument(ShippingDocument shippingDocument); #endregion ShippingDocument @@ -57,4 +59,5 @@ public interface IFruitBankDataControllerCommon #endregion Product Task LoginMeasuringUser(MgLoginModelRequest loginModelRequest); + Task?> ProcessAndSaveFullShippingJson(string fullShippingJson, int customerId); } \ No newline at end of file diff --git a/FruitBank.Common/SignalRs/SignalRTags.cs b/FruitBank.Common/SignalRs/SignalRTags.cs index 12d00ba..5721634 100644 --- a/FruitBank.Common/SignalRs/SignalRTags.cs +++ b/FruitBank.Common/SignalRs/SignalRTags.cs @@ -20,6 +20,7 @@ public class SignalRTags : AcSignalRTags public const int GetShippingById = 42; public const int AddShipping = 45; public const int UpdateShipping = 46; + public const int ProcessAndSaveFullShippingJson = 48; public const int GetShippingItems = 50; public const int GetShippingItemById = 51; diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor index 72e3842..d6cd3d6 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderDto.razor @@ -14,13 +14,13 @@ - - + + - - + + - + diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor index 135eb2b..92fda6b 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemDto.razor @@ -20,6 +20,9 @@ @@ -32,9 +35,9 @@ - - - + + + diff --git a/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor b/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor index f0a1c4d..b5f000f 100644 --- a/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor +++ b/FruitBankHybrid.Shared/Components/GridDetailOrderItemPallets.razor @@ -23,8 +23,8 @@ - - + + diff --git a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor index 1e47417..e8c46ca 100644 --- a/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor +++ b/FruitBankHybrid.Shared/Components/GridProductDtoTemplate.razor @@ -6,19 +6,15 @@ @inject FruitBankSignalRClient FruitBankSignalRClient - + - + - - + + diff --git a/FruitBankHybrid.Shared/Components/GridShipping.razor b/FruitBankHybrid.Shared/Components/GridShipping.razor index e3ae6e4..b992710 100644 --- a/FruitBankHybrid.Shared/Components/GridShipping.razor +++ b/FruitBankHybrid.Shared/Components/GridShipping.razor @@ -4,7 +4,7 @@ @inject FruitBankSignalRClient FruitBankSignalRClient - @@ -14,9 +14,9 @@ - - - + + + diff --git a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor index 895568d..5fd2853 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingDocument.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingDocument.razor @@ -5,20 +5,24 @@ @using FruitBankHybrid.Shared.Services.SignalRs @using System.Text @using AyCode.Core.Extensions +@using FruitBank.Common.Models @inject FruitBankSignalRClient FruitBankSignalRClient - + - @@ -28,6 +32,9 @@ @@ -38,10 +45,10 @@ - + - - + + @@ -64,39 +71,42 @@ } - - - - - - - - - - - - - - - + + @* - - *@ + *@ + + } ? Shippings { get; set; } - [Parameter] public IEnumerable? ProductDtos { get; set; } + [Parameter] public IEnumerable? Partners { get; set; } [Parameter] public List? ShippingDocuments { get; set; } [Parameter] public Func?, Task>? OnUploadedFileParsed { get; set; } + string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; + const string ExportFileName = "ExportResult"; + string _localStorageKey = "GridShippingDocument_"; + string GridSearchText = ""; bool EditItemsEnabled { get; set; } = true; int FocusedRowVisibleIndex { get; set; } @@ -131,8 +146,10 @@ private int _activeTabIndex; protected override async Task OnInitializedAsync() { - ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true); + _localStorageKey += LoggedInModel.CustomerDto!.Id; + //ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true); + Partners ??= await FruitBankSignalRClient.GetPartners() ?? []; Shippings ??= await FruitBankSignalRClient.GetShippings() ?? []; //ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? []; ShippingDocuments ??= await FruitBankSignalRClient.GetShippingDocuments() ?? []; @@ -142,28 +159,33 @@ private async Task OnFileUploaded(byte[] arg) { - string utfString = Encoding.UTF8.GetString(arg, 0, arg.Length); + var utfString = Encoding.UTF8.GetString(arg, 0, arg.Length); + var result = await FruitBankSignalRClient.ProcessAndSaveFullShippingJson(utfString, LoggedInModel.CustomerDto!.Id); - var partners = utfString.JsonTo>(); - if (partners != null) + if (result != null) { - var id = ShippingDocuments.Max(x => x.Id); - foreach (var shippingDocument in partners.SelectMany(partner => partner.ShippingDocuments ?? [])) + foreach (var shippingDocument in result.SelectMany(partner => partner.ShippingDocuments ?? [])) { - shippingDocument.Id = ++id; - - ShippingDocuments.Add(shippingDocument); + ShippingDocuments!.Add(shippingDocument); } - } Grid.Reload(); if (OnUploadedFileParsed != null) - await OnUploadedFileParsed(partners); + await OnUploadedFileParsed(result); //await InvokeAsync(StateHasChanged); } + async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) + { + if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow()) + await Grid.SaveChangesAsync(); + + FocusedRowVisibleIndex = args.VisibleIndex; + EditItemsEnabled = true; + } + async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) { // await NwindDataService.RemoveEmployeeAsync((EditableEmployee)e.DataItem); @@ -173,6 +195,21 @@ } async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) { + ShippingDocument? resultShippingDocument = null; + + if (!e.IsNew) + { + resultShippingDocument = await FruitBankSignalRClient.UpdateShippingDocument((ShippingDocument)e.EditModel); + } + else + { + resultShippingDocument = await FruitBankSignalRClient.AddShippingDocument((ShippingDocument)e.EditModel); + EditItemsEnabled = true; + } + + if (resultShippingDocument != null) + ShippingDocuments!.UpdateCollection(resultShippingDocument, false); + // if(e.IsNew) { // await NwindDataService.InsertEmployeeAsync((EditableEmployee)e.EditModel); // } else @@ -237,5 +274,4 @@ // break; // } } -} - +} \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/GridShippingItem.razor b/FruitBankHybrid.Shared/Components/GridShippingItem.razor index c300f85..0d51a99 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingItem.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingItem.razor @@ -1,4 +1,5 @@ -@using FruitBank.Common.Dtos +@using AyCode.Core.Extensions +@using FruitBank.Common.Dtos @using FruitBank.Common.Entities @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Services.SignalRs @@ -9,31 +10,36 @@ Contact Phone: @OrderDto.Email *@ - + + DropDownBodyCssClass="dd-body-class" + ListRenderMode="ListRenderMode.Entire" + SearchMode="ListSearchMode.AutoSearch" + SearchFilterCondition="ListSearchFilterCondition.Contains" + ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto" /> - + @* *@ + ValueFieldName="Id" + TextFieldName="Name" + DropDownBodyCssClass="dd-body-class" + ListRenderMode="ListRenderMode.Entire" + SearchMode="ListSearchMode.AutoSearch" + SearchFilterCondition="ListSearchFilterCondition.Contains" + ClearButtonDisplayMode="DataEditorClearButtonDisplayMode.Auto" /> @@ -42,17 +48,17 @@ - - - - - - + + + - - + + + + + @@ -61,6 +67,33 @@ } + + @if (IsMasterGrid) + { + + + + + + + + + + + + + + @* + + *@ + + } + ? ProductDtos { get; set; } - [Parameter] public IEnumerable? ShippingItems { get; set; } + [Parameter] public List? ShippingItems { get; set; } [Parameter] public IEnumerable? ShippingDocuments { get; set; } + string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; + + const string ExportFileName = "ExportResult"; + string _localStorageKey = "GridShippingDocument_"; + + string GridSearchText = ""; + bool EditItemsEnabled { get; set; } = true; + int FocusedRowVisibleIndex { get; set; } + IGrid Grid { get; set; } + protected override async Task OnInitializedAsync() { ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true); @@ -92,4 +135,73 @@ ShippingDocuments ??= await FruitBankSignalRClient.GetShippingDocuments() ?? []; } + async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) + { + if (Grid != null && Grid.IsEditing() && !Grid.IsEditingNewRow()) + await Grid.SaveChangesAsync(); + + FocusedRowVisibleIndex = args.VisibleIndex; + EditItemsEnabled = true; + } + + async Task Grid_DataItemDeleting(GridDataItemDeletingEventArgs e) + { + } + + async Task Grid_EditModelSaving(GridEditModelSavingEventArgs e) + { + ShippingItem? resultShippingItem = null; + + if (!e.IsNew) + { + resultShippingItem = await FruitBankSignalRClient.UpdateShippingItem((ShippingItem)e.EditModel); + } + else + { + resultShippingItem = await FruitBankSignalRClient.AddShippingItem((ShippingItem)e.EditModel); + EditItemsEnabled = true; + } + + if (resultShippingItem != null) + ShippingItems!.UpdateCollection(resultShippingItem, false); + + EditItemsEnabled = true; + } + + async Task NewItem_Click() + { + EditItemsEnabled = false; + await Grid.StartEditNewRowAsync(); + } + async Task EditItem_Click() + { + EditItemsEnabled = false; + await Grid.StartEditRowAsync(FocusedRowVisibleIndex); + } + void DeleteItem_Click() + { + EditItemsEnabled = false; + 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); + } } \ No newline at end of file diff --git a/FruitBankHybrid.Shared/Components/GridShippingItemPallets.razor b/FruitBankHybrid.Shared/Components/GridShippingItemPallets.razor index 299db6c..c56a263 100644 --- a/FruitBankHybrid.Shared/Components/GridShippingItemPallets.razor +++ b/FruitBankHybrid.Shared/Components/GridShippingItemPallets.razor @@ -23,7 +23,7 @@ - + diff --git a/FruitBankHybrid.Shared/Components/MgGridBase.cs b/FruitBankHybrid.Shared/Components/MgGridBase.cs index 7ed759e..06c098e 100644 --- a/FruitBankHybrid.Shared/Components/MgGridBase.cs +++ b/FruitBankHybrid.Shared/Components/MgGridBase.cs @@ -62,6 +62,7 @@ public class MgGridBase : DxGrid { if (!_isFirstInitializeParameters) { + SizeMode = DevExpress.Blazor.SizeMode.Small; ShowGroupPanel = IsMasterGrid; ShowSearchBox = IsMasterGrid; ShowFilterRow = IsMasterGrid; @@ -78,15 +79,15 @@ public class MgGridBase : DxGrid AutoExpandAllGroupRows = false; PagerVisible = IsMasterGrid; - PageSize = IsMasterGrid ? 15 : 50; + PageSize = IsMasterGrid ? (SizeMode == DevExpress.Blazor.SizeMode.Small ? 23 : 15) : 50; AllowColumnReorder = true; AllowGroup = IsMasterGrid; AllowSort = true; + EditMode = GridEditMode.EditRow; FocusedRowEnabled = true; ColumnResizeMode = GridColumnResizeMode.ColumnsContainer; - EditMode = GridEditMode.EditRow; //VirtualScrollingEnabled = IsMasterGrid; PageSizeSelectorVisible = true; diff --git a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs index b8d6f18..a0f7877 100644 --- a/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs +++ b/FruitBankHybrid.Shared/Services/SignalRs/FruitBankSignalRClient.cs @@ -77,6 +77,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task UpdateShipping(Shipping shipping) => PostDataAsync(SignalRTags.UpdateShipping, shipping); + public Task?> ProcessAndSaveFullShippingJson(string fullShippingJson, int customerId) + => GetAllAsync>(SignalRTags.ProcessAndSaveFullShippingJson, [fullShippingJson, customerId]); + #endregion Shipping #region ShippingItem @@ -87,6 +90,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task GetShippingItemById(int id) => GetByIdAsync(SignalRTags.GetShippingItemById, id); + public Task AddShippingItem(ShippingItem shippingItem) + => PostDataAsync(SignalRTags.AddShippingItem, shippingItem); + public Task UpdateShippingItem(ShippingItem shippingItem) => PostDataAsync(SignalRTags.UpdateShippingItem, shippingItem); @@ -118,6 +124,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task GetShippingDocumentById(int id) => GetByIdAsync(SignalRTags.GetShippingDocumentById, id); + public Task AddShippingDocument(ShippingDocument shippingDocument) + => PostDataAsync(SignalRTags.AddShippingDocument, shippingDocument); + public Task UpdateShippingDocument(ShippingDocument shippingDocument) => PostDataAsync(SignalRTags.UpdateShippingDocument, shippingDocument); #endregion ShippingDocument @@ -212,7 +221,6 @@ namespace FruitBankHybrid.Shared.Services.SignalRs public Task?> GetAllOrderItemPalletByProductId(int productId) => GetAllAsync>(SignalRTags.GetAllOrderItemPalletByProductId, [productId]); - #endregion Orders } } diff --git a/FruitBankHybrid.Shared/wwwroot/app.css b/FruitBankHybrid.Shared/wwwroot/app.css index 2676816..8bc5755 100644 --- a/FruitBankHybrid.Shared/wwwroot/app.css +++ b/FruitBankHybrid.Shared/wwwroot/app.css @@ -81,12 +81,18 @@ h1:focus { } /*region: DSGrids*/ + /*.dxbl-grid { height: 522px; } */ + +.hide-toolbar .dxbl-grid-toolbar-container { + display: none; + } + .hideDetailButton .dxbl-grid-expand-button-cell .dxbl-grid-expand-button { - visibility: hidden; + visibility: hidden; } .header-bold span { @@ -103,6 +109,7 @@ h1:focus { /*.alt-item { --dxbl-grid-row-bg: var(--DS-color-surface-neutral-subdued-rest); }*/ + /*endregion: DSGrids*/