@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components.FileUploads
@using FruitBankHybrid.Shared.Components.Toolbars
@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.SignalRs
@using System.Text
@using AyCode.Core.Extensions
@using FruitBank.Common.Models
@inject FruitBankSignalRClient FruitBankSignalRClient
@if (IsMasterGrid)
{
var shippingDocument = ((ShippingDocument)context.DataItem);
@{
var shippingItemPallets = shippingDocument?.ShippingItems?.SelectMany(oi => oi.ShippingItemPallets ?? []).ToList() ?? [];
}
}
@if (IsMasterGrid)
{
@*
*@
@*
*@
}
@code {
//[Inject] public required ObjectLock ObjectLock { get; set; }
[Inject] public required DatabaseClient Database { get; set; }
[Inject] public required LoggedInModel LoggedInModel { get; set; }
[Parameter] public bool IsMasterGrid { get; set; } = false;
[Parameter] public List? Shippings { get; set; }
[Parameter] public List? 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; }
public MgGridBase Grid { get; set; }
private int _activeTabIndex;
protected override async Task OnInitializedAsync()
{
_localStorageKey += LoggedInModel.CustomerDto!.Id;
await ReloadDataFromDb();
}
private async Task ReloadDataFromDb(bool forceReload = false)
{
if (!IsMasterGrid) return;
//ProductDtos ??= await FruitBankSignalRClient.GetProductDtos() ?? [];
//ProductDtos ??= await Database.ProductDtoTable.LoadDataAsync(true);
using (await ObjectLock.GetSemaphore().UseWaitAsync())
{
if (Partners == null) Partners = await FruitBankSignalRClient.GetPartners() ?? [];
else if (Partners.Count == 0 || forceReload)
{
Partners.Clear();
Partners.AddRange(await FruitBankSignalRClient.GetPartners() ?? []);
}
}
using (await ObjectLock.GetSemaphore().UseWaitAsync())
{
if (Shippings == null) Shippings = await FruitBankSignalRClient.GetShippings() ?? [];
else if (Shippings.Count == 0 || forceReload)
{
Shippings.Clear();
Shippings.AddRange(await FruitBankSignalRClient.GetShippings() ?? []);
}
}
using (await ObjectLock.GetSemaphore().UseWaitAsync())
{
if (ShippingDocuments == null) ShippingDocuments = await FruitBankSignalRClient.GetShippingDocuments() ?? [];
else if (ShippingDocuments.Count == 0 || forceReload)
{
ShippingDocuments.Clear();
ShippingDocuments.AddRange(await FruitBankSignalRClient.GetShippingDocuments() ?? []);
}
}
if (forceReload) Grid?.Reload();
}
private async Task OnFileUploaded(byte[] arg)
{
var utfString = Encoding.UTF8.GetString(arg, 0, arg.Length);
var result = await FruitBankSignalRClient.ProcessAndSaveFullShippingJson(utfString, LoggedInModel.CustomerDto!.Id);
if (result != null)
{
foreach (var shippingDocument in result.SelectMany(partner => partner.ShippingDocuments ?? []))
{
ShippingDocuments!.Add(shippingDocument);
}
}
Grid.Reload();
if (OnUploadedFileParsed != null)
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);
// await LoadGridDataAsync();
// if(Data.Length == 0)
// UpdateEditItemsEnabled(false);
}
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
// await NwindDataService.UpdateEmployeeAsync((EditableEmployee)e.DataItem, (EditableEmployee)e.EditModel);
// await LoadGridDataAsync();
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);
}
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;
// }
}
}