using AyCode.Core.Loggers; using DevExpress.Blazor; using FruitBank.Common.Dtos; using FruitBank.Common.Entities; using FruitBank.Common.Models; using FruitBankHybrid.Shared.Models; using FruitBankHybrid.Shared.Services; using FruitBankHybrid.Shared.Services.Loggers; using FruitBankHybrid.Shared.Services.SignalRs; using Mango.Nop.Core.Loggers; using Microsoft.AspNetCore.Components; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using FruitBank.Common.Helpers; using FruitBank.Common.Interfaces; using AyCode.Core.Extensions; using Nop.Core.Domain.Orders; namespace FruitBankHybrid.Shared.Pages { public partial class MeasuringOut : ComponentBase { [Inject] public required IEnumerable LogWriters { get; set; } [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; } private ILogger _logger = null!; private string _errorText; private List SelectedDayOrders { get; set; } = null!; private OrderDto? SelectedOrder { get; set; } private OrderItemDto? SelectedOrderItem { get; set; } private List _measuringDates = null!; protected override async Task OnInitializedAsync() { _logger = new LoggerClient(LogWriters.ToArray()); _logger.Info("OnInitializedAsync"); await RefreshOrdersFromDb(DateTime.Now); await base.OnInitializedAsync(); } private async Task RefreshOrdersFromDb(DateTime dateTime) { var orders = await FruitBankSignalRClient.GetPendingOrderDtos() ?? []; _measuringDates = orders.Select(order => new MeasuringDateSelectorModel(order.Id, order.DateOfReceiptOrCreated, order.IsMeasured)).ToList(); SelectedDayOrders = orders.Where(order => MeasuringService.DaysEqual(order.DateOfReceiptOrCreated, dateTime)).ToList(); SelectedOrder = SelectedDayOrders.FirstOrDefault(); foreach (var orderItem in SelectedDayOrders.SelectMany(order => order.OrderItemDtos.Where(orderItem => orderItem.OrderItemPallets.Count == 0))) { orderItem.OrderItemPallets.Add(MeasuringService.CreateNewOrderItemPallet(orderItem, LoggedInModel.CustomerDto)); } } private async Task OnMeasuringDateChanged(DateTime selectedDateTime) => await RefreshOrdersFromDb(selectedDateTime); private void OnCustomDisabledMeasuringDate(CalendarCustomDisabledDateEventArgs args) => MeasuringService.OnCustomDisabledDate(args, _measuringDates); private string GetMeasuringDateCssClassNames(DateTime date) => MeasuringService.GetShippingDateCssClassNames(date, _measuringDates); private string GetOrderItemPalletsCssClassNames(string fieldName, OrderItemPallet orderItemPallet) => MeasuringService.GetCustomItemPalletsCssClassNames(fieldName, orderItemPallet, orderItemPallet.OrderItemDto!.IsMeasurable); private bool IsOrderItemPalletMeasuredAndValid(OrderItemPallet orderItemPallet) => MeasuringService.IsCustomItemPalletMeasuredAndValid(orderItemPallet, orderItemPallet.OrderItemDto!.IsMeasurable); private void OnSelectedOrderChanged(SelectedDataItemChangedEventArgs eventArgs) { //SelectedOrderItem = eventArgs.DataItem?.OrderItemDtos?.FirstOrDefault(); } private Task OnOrderItemPalletValueChanged(OrderItemPallet orderItemPallet, OrderItemDto selectedOrderItemDto) { StateHasChanged(); return Task.CompletedTask; } private Task OnOrderItemPalletSaved(OrderItemPallet? orderItemPallet, OrderItemDto selectedOrderItemDto) { if (orderItemPallet != null) { selectedOrderItemDto.OrderItemPallets.UpdateCollection(orderItemPallet, false); //MeasuringValuesHelper.SetShippingItemTotalMeasuringValues(SelectedShippingItem); } //else LogErrorAndDisplayText($"Sikertelen volt a raklap adatainak mentése! {orderItemPallet}"); StateHasChanged(); return Task.CompletedTask; } private Task AddNewPalletItemClick(OrderItemDto selectedOrderItemDto) { if (selectedOrderItemDto.OrderItemPallets[^1].Id > 0) { selectedOrderItemDto.OrderItemPallets.Add(MeasuringService.CreateNewOrderItemPallet(selectedOrderItemDto, LoggedInModel.CustomerDto)); StateHasChanged(); } return Task.CompletedTask; } private Task LastPalletItemDeleteClick(OrderItemDto selectedOrderItemDto) { if (selectedOrderItemDto.OrderItemPallets.Count <= 1) return Task.CompletedTask; var lastPalletItem = selectedOrderItemDto.OrderItemPallets[^1]; if (lastPalletItem.Id > 0) return Task.CompletedTask; selectedOrderItemDto.OrderItemPallets.Remove(lastPalletItem); StateHasChanged(); return Task.CompletedTask; } private async Task OnMeasuringAuditorClick() { if (SelectedOrder != null && SelectedOrder.IsMeasured && SelectedOrder.OrderStatus != OrderStatus.Complete) { var responseOrderDto = await FruitBankSignalRClient.SetOrderStatusToComplete(SelectedOrder.Id); if (responseOrderDto != null) { SelectedDayOrders.UpdateCollection(responseOrderDto, false); SelectedOrder = responseOrderDto; } StateHasChanged(); } } } }