FruitBankHybridApp/FruitBankHybrid.Shared/Pages/MeasuringIn.razor.cs

216 lines
9.7 KiB
C#

using AyCode.Core.Extensions;
using AyCode.Core.Loggers;
using DevExpress.Blazor;
using FruitBank.Common.Entities;
using FruitBank.Common.Helpers;
using FruitBank.Common.Interfaces;
using FruitBank.Common.Models;
using FruitBankHybrid.Shared.Models;
using FruitBankHybrid.Shared.Services;
using FruitBankHybrid.Shared.Services.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using ILogger = Mango.Nop.Core.Loggers.ILogger;
namespace FruitBankHybrid.Shared.Pages
{
public partial class MeasuringIn : ComponentBase
{
[Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
[Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }
[Inject] public required NavigationManager NavManager{ get; set; }
[Inject] public required LoggedInModel LoggedInModel { get; set; }
private ILogger _logger = null!;
private string _errorText;
private List<Shipping> NotMeasuredShippings { get; set; } = null!;
private Shipping? SelectedShipping { get; set; }
//private ShippingDocument? SelectedShippingDocument { get; set; }
private ShippingItem? SelectedShippingItem { get; set; }
public bool LoadingPanelVisible { get; set; } = true;
protected bool BtnSaveEnabled { get; set; }
private List<ShippingItem>? _shippingItemsDataSource;
private List<MeasuringDateSelectorModel> _measuringDates = null!;
protected override async Task OnInitializedAsync()
{
if (!LoggedInModel.IsLoggedIn) NavManager.NavigateTo("/Login");
LoadingPanelVisible = true;
_logger = new LoggerClient<MeasuringIn>(LogWriters.ToArray());
_logger.Info("OnInitializedAsync");
await RefreshShippingsFromDb(DateTime.Now);
await base.OnInitializedAsync();
}
private async Task RefreshShippingsFromDb(DateTime dateTime)
{
var shippings = await FruitBankSignalRClient.GetNotMeasuredShippings() ?? [];
_measuringDates = shippings.Select(shipping => new MeasuringDateSelectorModel(shipping.Id, shipping.ShippingDate.Date, shipping.IsAllMeasured)).ToList();
NotMeasuredShippings = shippings.Where(shipping => MeasurementService.DaysEqual(shipping.ShippingDate.Date, dateTime)).ToList();
SelectedShipping = NotMeasuredShippings.FirstOrDefault();
//if (SelectedShipping != null && SelectedShippingItem != null && (SelectedShippingItem.ShippingDocument?.ShippingId ?? 0) == SelectedShipping.Id)
//{
// SelectedShippingItem = _shippingItemsDataSource.
//}
LoadingPanelVisible = false;
}
private static List<ShippingItem>? GetShippingItemsDataSource(Shipping? shipping)
=> shipping?.ShippingDocuments?.SelectMany(sd => sd.ShippingItems!).OrderBy(si => si.ProductName).ToList() ?? null;
private async Task OnMeasuringDateChanged(DateTime selectedDateTime)
=> await RefreshShippingsFromDb(selectedDateTime);
private void OnCustomDisabledMeasuringDate(CalendarCustomDisabledDateEventArgs args)
=> MeasurementService.OnCustomDisabledDate(args, _measuringDates);
private string GetMeasuringDateCssClassNames(DateTime date)
=> MeasurementService.GetShippingDateCssClassNames(date, _measuringDates);
private string GetShippingPalletsCssClassNames(string fieldName, ShippingItemPallet shippingItemPallet)
=> MeasurementService.GetCustomItemPalletsCssClassNames(fieldName, shippingItemPallet, SelectedShippingItem!.IsMeasurable);
private void OnSelectedShippingChanged(SelectedDataItemChangedEventArgs<Shipping> eventArgs)
{
var shipping = eventArgs.DataItem;
PrepareShippingItems(shipping);
_shippingItemsDataSource = GetShippingItemsDataSource(shipping);
SelectedShippingItem = _shippingItemsDataSource?.FirstOrDefault();
}
private void OnSelectedShippingItemChanged(SelectedDataItemChangedEventArgs<ShippingItem> eventArgs)
{
BtnSaveEnabled = false;
var shippingItem = eventArgs.DataItem;
if (shippingItem == null)
{
SelectedShippingItem = null;
return;
}
//SelectedShippingDocument!.IsAllMeasured = SelectedShippingDocument.ShippingItems?.All(si => si.IsMeasured) ?? false;
shippingItem.ShippingDocument!.IsAllMeasured = shippingItem.ShippingDocument.ShippingItems?.All(si => si.IsMeasured) ?? false;
SelectedShipping!.IsAllMeasured = SelectedShipping.ShippingDocuments?.All(sd => sd.IsAllMeasured) ?? false;
var shippingDate = _measuringDates.FirstOrDefault(shipping => shipping.ShippingId == SelectedShipping.Id);
if (shippingDate != null) shippingDate.IsMeasured = SelectedShipping.IsAllMeasured;
//PrepareShippingItems(SelectedShipping);
}
private async Task RefreshSelectedShippingItemMeasuredValuesFromDb(int shippingItemId)
{
RefreshSelectedShippingItemMeasuredValuesFromDb(await FruitBankSignalRClient.GetShippingItemById(shippingItemId));
}
private void RefreshSelectedShippingItemMeasuredValuesFromDb(ShippingItem? shippingItemFromDb)
{
if (SelectedShipping == null || SelectedShippingItem?.ShippingDocument == null || shippingItemFromDb == null) return;
//SelectedShippingItem.MeasuredQuantity = shippingItemFromDb.MeasuredQuantity;
//SelectedShippingItem.MeasuredNetWeight = shippingItemFromDb.MeasuredNetWeight;
//SelectedShippingItem.MeasuredGrossWeight = shippingItemFromDb.MeasuredGrossWeight;
//SelectedShippingItem.IsMeasurable = shippingItemFromDb.IsMeasurable;
//SelectedShippingItem.IsMeasured = shippingItemFromDb.IsMeasured;
SelectedShippingItem.ShippingDocument.ShippingItems?.UpdateCollection(shippingItemFromDb, false);
_shippingItemsDataSource?.UpdateCollection(shippingItemFromDb, false);
SelectedShippingItem = shippingItemFromDb;
StateHasChanged();
}
private async Task OnOrdersRefreshClick()
{
LoadingPanelVisible = true;
await RefreshShippingsFromDb(SelectedShipping?.ShippingDate ?? DateTime.Now);
StateHasChanged();
}
private Task OnShippingItemPalletValueChanged(ShippingItemPallet shippingItemPallet, ShippingItem shippingItem)
{
MeasuringValuesHelper.SetShippingItemTotalMeasuringValues(shippingItem);
BtnSaveEnabled = shippingItem.IsValidMeasuringValues() && shippingItemPallet.IsValidMeasuringValues(shippingItem.IsMeasurable);
StateHasChanged();
return Task.CompletedTask;
}
private async Task OnShippingItemPalletSaved(ShippingItemPallet? responseShippingItemPallet)
{
if (responseShippingItemPallet != null)
{
SelectedShippingItem!.ShippingItemPallets!.UpdateCollection(responseShippingItemPallet, false);
SelectedShippingItem.IsMeasured = SelectedShippingItem!.ShippingItemPallets!.All(sip => sip.IsMeasuredAndValid(SelectedShippingItem.IsMeasurable));
MeasuringValuesHelper.SetShippingItemTotalMeasuringValues(SelectedShippingItem);
}
else DisplayErrorText($"Sikertelen volt a raklap adatainak mentése!");
await InvokeAsync(StateHasChanged);
}
private bool IsShippingitemPalletMeasuredAndValid(ShippingItemPallet shippingItemPallet)
=> MeasurementService.IsCustomItemPalletMeasuredAndValid(shippingItemPallet, SelectedShippingItem!.IsMeasurable);
private void LogErrorAndDisplayText(string errorText, Exception? ex = null)
{
_logger.Error($"{errorText}", ex);
DisplayErrorText(errorText);
}
private void DisplayErrorText(string errorText)
{
_errorText = errorText;
//Nem végezhető el a mérés, nincs megadva a ProductId! Jelezze a vezetőségnek...
}
private void PrepareShippingItems(Shipping? shipping)
{
if (shipping?.ShippingDocuments == null) return;
foreach (var shippingShippingDocument in shipping.ShippingDocuments)
{
shippingShippingDocument.Shipping = shipping;
if (shippingShippingDocument.ShippingItems == null) continue;
foreach (var shippingItem in shippingShippingDocument.ShippingItems)
{
shippingItem.ShippingDocument = shippingShippingDocument;
MeasuringValuesHelper.SetShippingItemTotalMeasuringValues(shippingItem);
shippingItem.ShippingItemPallets ??= new List<ShippingItemPallet>(shippingItem.MeasuringCount);
for (var i = shippingItem.ShippingItemPallets.Count; i < shippingItem.MeasuringCount; i++)
{
shippingItem.ShippingItemPallets.Add(new ShippingItemPallet
{
ShippingItemId = shippingItem.Id,
PalletWeight = shippingItem.Pallet?.Weight ?? 0,
TareWeight = shippingItem.ProductDto?.Tare ?? 0,
CreatorId = LoggedInModel.CustomerDto?.Id,
ModifierId = LoggedInModel.CustomerDto?.Id
});
}
}
}
}
}
}