@using AyCode.Core.Loggers; @using AyCode.Core.Extensions @using AyCode.Core.Helpers @using AyCode.Core.Interfaces @using AyCode.Utils.Extensions @using FruitBank.Common.Dtos @using FruitBank.Common.Entities @using FruitBank.Common.Interfaces @using FruitBankHybrid.Shared.Components.Grids.ShippingItems @using FruitBankHybrid.Shared.Components.Toolbars @using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Services.Loggers; @using FruitBankHybrid.Shared.Services.SignalRs @inject IEnumerable LogWriters @inject FruitBankSignalRClient FruitBankSignalRClient @* @{ if (context.DataColumn.FieldName == nameof(ShippingItem.ShippingDocumentId)) { @(String.Format("{0:P2}", context.Value)) // format the value as percentage } else { @context.DisplayText } } *@ @{ var shippingItemPallets = ((ShippingItem)context.DataItem).ShippingItemPallets; } @if (IsMasterGrid) { } @* *@ @code { //[Inject] public required ObjectLock ObjectLock { get; set; } [Inject] public required DatabaseClient Database { get; set; } //[Parameter] public int GetAllMessageTag { get; set; } [Parameter] public IId? ParentDataItem { get; set; } [Parameter] public IEnumerable? ProductDtos { get; set; } [Parameter] public AcObservableCollection? ShippingItems { get; set; } [Parameter] public AcObservableCollection? ShippingDocuments { get; set; } public bool IsMasterGrid => ParentDataItem == null; public bool ParentDataItemIsShippingDocument => (ParentDataItem is ShippingDocument); string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; const string ExportFileName = "ExportResult"; string _localStorageKey = "GridShippingItem_"; string GridSearchText = ""; bool EditItemsEnabled { get; set; } = true; int FocusedRowVisibleIndex { get; set; } public GridShippingItemBase Grid { get; set; } private LoggerClient _logger; protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); await ReloadDataFromDb(false); } public async Task ReloadDataFromDb(bool forceReload = false) { //using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (ProductDtos == null || !ProductDtos.Any() || forceReload) ProductDtos = await Database.ProductDtoTable.LoadDataAsync(!forceReload); } if (!IsMasterGrid) { if (ShippingDocuments == null && ParentDataItem is ShippingDocument shippingDocumentParent) ShippingDocuments = [shippingDocumentParent]; return; } using (await ObjectLock.GetSemaphore().UseWaitAsync()) { if (ShippingDocuments == null) { ShippingDocuments = new AcObservableCollection(await FruitBankSignalRClient.GetShippingDocuments() ?? []); } else if (ShippingDocuments.Count == 0 || forceReload) { ShippingDocuments.Replace(await FruitBankSignalRClient.GetShippingDocuments() ?? []); } } if (Grid == null) return; using (await ObjectLock.GetSemaphore().UseWaitAsync()) if (forceReload) await Grid.ReloadDataSourceAsync(); if (forceReload) Grid.Reload(); } void Grid_CustomizeElement(GridCustomizeElementEventArgs e) { if (e.ElementType != GridElementType.DataCell) return; if (e.Column.Name != nameof(ShippingItem.MeasuredNetWeight) && e.Column.Name != nameof(ShippingItem.MeasuredGrossWeight) && e.Column.Name != nameof(ShippingItem.MeasuredQuantity)) return; var isMeasured = (bool)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.IsMeasured)); if (!isMeasured) return; switch (e.Column.Name) { case nameof(ShippingItem.MeasuredNetWeight) or nameof(ShippingItem.MeasuredGrossWeight): { var isMeasurable = (bool)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.IsMeasurable)); if (!isMeasurable) return; var valueOnDocument = 0d; var measuredValue = 0d; if (e.Column.Name == nameof(ShippingItem.MeasuredGrossWeight)) { valueOnDocument = (double)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.GrossWeightOnDocument)); measuredValue = (double)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.MeasuredGrossWeight)); } else { valueOnDocument = (double)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.NetWeightOnDocument)); measuredValue = (double)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.MeasuredNetWeight)); } if (valueOnDocument > 0 && valueOnDocument > measuredValue) e.CssClass = "text-danger"; //else if (valueOnDocument <= measuredValue) e.CssClass = "text-success"; break; } case nameof(ShippingItem.MeasuredQuantity): { var quantityOnDocument = (int)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.QuantityOnDocument)); var measuredQuantity = (int)e.Grid.GetRowValue(e.VisibleIndex, nameof(ShippingItem.MeasuredQuantity)); if (quantityOnDocument > 0 && quantityOnDocument > measuredQuantity) e.CssClass = "text-danger"; //else if (quantityOnDocument <= measuredQuantity) e.CssClass = "text-success"; break; } } } async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args) { if ((args.Grid.IsEditing() || args.Grid.IsEditingNewRow()) && (args.DataItem as IId).Id > 0) await args.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; } }