This commit is contained in:
Adam 2025-11-24 16:34:41 +01:00
commit e4cbd6f723
21 changed files with 280 additions and 60 deletions

View File

@ -61,6 +61,7 @@ public abstract class MeasuringItemPalletBase : MgEntityBase, IMeasuringItemPall
public virtual MeasuringStatus MeasuringStatus => IsMeasured ? MeasuringStatus.Finnished : Id > 0 ? MeasuringStatus.Started : MeasuringStatus.NotStarted; public virtual MeasuringStatus MeasuringStatus => IsMeasured ? MeasuringStatus.Finnished : Id > 0 ? MeasuringStatus.Started : MeasuringStatus.NotStarted;
public void SetForeignKey(int foreignKey) => ForeignItemId = foreignKey;
public virtual double CalculateNetWeight() => double.Round(GrossWeight - PalletWeight - (TareWeight * TrayQuantity), 1); public virtual double CalculateNetWeight() => double.Round(GrossWeight - PalletWeight - (TareWeight * TrayQuantity), 1);
/// <summary> /// <summary>

View File

@ -8,7 +8,7 @@ public static class FruitBankConstClient
public static string DefaultLocale = "en-US"; public static string DefaultLocale = "en-US";
public static string BaseUrl = "https://localhost:59579"; //FrutiBank nop public static string BaseUrl = "https://localhost:59579"; //FrutiBank nop
#if RELEASE #if RELEASE
// public static string BaseUrl = "https://shop.fruitbank.hu"; //FrutiBank nop // public static string BaseUrl = "https://shop.fruitbank.hu"; //FrutiBank nop
#endif #endif

View File

@ -27,6 +27,7 @@ public interface IFruitBankDataControllerCommon
#region ShippingItem #region ShippingItem
public Task<List<ShippingItem>?> GetShippingItems(); public Task<List<ShippingItem>?> GetShippingItems();
public Task<List<ShippingItem>?> GetShippingItemsByPartnerId(int partnerId);
public Task<List<ShippingItem>?> GetShippingItemsByShippingId(int shippingId); public Task<List<ShippingItem>?> GetShippingItemsByShippingId(int shippingId);
public Task<List<ShippingItem>?> GetShippingItemsByDocumentId(int shippingDocumentId); public Task<List<ShippingItem>?> GetShippingItemsByDocumentId(int shippingDocumentId);
public Task<ShippingItem?> GetShippingItemById(int id); public Task<ShippingItem?> GetShippingItemById(int id);
@ -36,6 +37,8 @@ public interface IFruitBankDataControllerCommon
#endregion ShippingItem #endregion ShippingItem
#region ShippingItemPallet #region ShippingItemPallet
public Task<List<ShippingItemPallet>?> GetShippingItemPallets();
public Task<ShippingItemPallet?> AddShippingItemPallet(ShippingItemPallet shippingItemPallet); public Task<ShippingItemPallet?> AddShippingItemPallet(ShippingItemPallet shippingItemPallet);
public Task<ShippingItemPallet?> UpdateShippingItemPallet(ShippingItemPallet shippingItemPallet); public Task<ShippingItemPallet?> UpdateShippingItemPallet(ShippingItemPallet shippingItemPallet);
public Task<ShippingItemPallet?> AddOrUpdateMeasuredShippingItemPallet(ShippingItemPallet shippingItemPallet); public Task<ShippingItemPallet?> AddOrUpdateMeasuredShippingItemPallet(ShippingItemPallet shippingItemPallet);

View File

@ -26,6 +26,7 @@ public class SignalRTags : AcSignalRTags
public const int GetShippingItemById = 51; public const int GetShippingItemById = 51;
public const int GetShippingItemsByDocumentId = 52; public const int GetShippingItemsByDocumentId = 52;
public const int GetShippingItemsByShippingId = 53; public const int GetShippingItemsByShippingId = 53;
public const int GetShippingItemsByPartnerId = 54;
public const int AddShippingItem = 55; public const int AddShippingItem = 55;
public const int UpdateShippingItem = 56; public const int UpdateShippingItem = 56;
public const int UpdateMeasuredShippingItem = 57; public const int UpdateMeasuredShippingItem = 57;
@ -47,6 +48,7 @@ public class SignalRTags : AcSignalRTags
public const int GetAllMeasuringProductDtos = 82; public const int GetAllMeasuringProductDtos = 82;
public const int GetMeasuringProductDtoById = 83; public const int GetMeasuringProductDtoById = 83;
public const int GetShippingItemPallets = 94;
public const int AddShippingItemPallet = 95; public const int AddShippingItemPallet = 95;
public const int UpdateShippingItemPallet = 96; public const int UpdateShippingItemPallet = 96;
public const int AddOrUpdateMeasuredShippingItemPallet = 97; public const int AddOrUpdateMeasuredShippingItemPallet = 97;

View File

@ -17,7 +17,7 @@
<Columns> <Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" /> <DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" />
<DxGridDataColumn FieldName="CustomerId" /> <DxGridDataColumn FieldName="CustomerId" />
<DxGridDataColumn FieldName="@("Customer.Company")" Caption="Company" ReadOnly="true" />
<DxGridDataColumn FieldName="OrderStatus" /> <DxGridDataColumn FieldName="OrderStatus" />
<DxGridDataColumn FieldName="IsMeasurable" ReadOnly="true" /> <DxGridDataColumn FieldName="IsMeasurable" ReadOnly="true" />
<DxGridDataColumn FieldName="MeasuringStatus" ReadOnly="true" /> <DxGridDataColumn FieldName="MeasuringStatus" ReadOnly="true" />

View File

@ -18,6 +18,7 @@
<Columns> <Columns>
<DxGridDataColumn FieldName="Id" /> <DxGridDataColumn FieldName="Id" />
<DxGridDataColumn FieldName="OrderId" /> <DxGridDataColumn FieldName="OrderId" />
<DxGridDataColumn FieldName="@("OrderDto.Customer.Company")" Caption="Company" ReadOnly="true" />
<DxGridDataColumn FieldName="ProductId"> <DxGridDataColumn FieldName="ProductId">
<EditSettings> <EditSettings>
<DxComboBoxSettings Data="ProductDtos" <DxComboBoxSettings Data="ProductDtos"
@ -47,6 +48,7 @@
<DxGridDataColumn FieldName="AverageWeightDifference" ReadOnly="true" Visible="false" Caption="AvgWeightDiff" /> <DxGridDataColumn FieldName="AverageWeightDifference" ReadOnly="true" Visible="false" Caption="AvgWeightDiff" />
<DxGridDataColumn FieldName="AverageWeightIsValid" ReadOnly="true" Caption="AvgWeightValid" /> <DxGridDataColumn FieldName="AverageWeightIsValid" ReadOnly="true" Caption="AvgWeightValid" />
<DxGridDataColumn FieldName="IsAudited" ReadOnly="true" /> <DxGridDataColumn FieldName="IsAudited" ReadOnly="true" />
<DxGridDataColumn FieldName="@("OrderDto.CreatedOnUtc")" Caption="Rendelés ideje" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns> </Columns>
<DetailRowTemplate> <DetailRowTemplate>

View File

@ -23,6 +23,7 @@
<DxGridDataColumn FieldName="IncomingQuantity" ReadOnly="true" /> <DxGridDataColumn FieldName="IncomingQuantity" ReadOnly="true" />
<DxGridDataColumn FieldName="NetWeight" ReadOnly="true" /> <DxGridDataColumn FieldName="NetWeight" ReadOnly="true" />
<DxGridDataColumn FieldName="IsMeasurable" /> <DxGridDataColumn FieldName="IsMeasurable" />
<DxGridDataColumn FieldName="Tare" Caption="Tára súly" ReadOnly="true" />
<DxGridDataColumn FieldName="AverageWeight" ReadOnly="true" /> <DxGridDataColumn FieldName="AverageWeight" ReadOnly="true" />
<DxGridDataColumn FieldName="AverageWeightTreshold" ReadOnly="true" /> <DxGridDataColumn FieldName="AverageWeightTreshold" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn> <DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>

View File

@ -20,7 +20,7 @@
ParentDataItem="@ParentDataItem" Logger="_logger" ValidationEnabled="false" EditMode="GridEditMode.EditRow" FocusedRowChanged="Grid_FocusedRowChanged"> ParentDataItem="@ParentDataItem" Logger="_logger" ValidationEnabled="false" EditMode="GridEditMode.EditRow" FocusedRowChanged="Grid_FocusedRowChanged">
<Columns> <Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" /> <DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="PartnerId" Caption="Partner"> <DxGridDataColumn FieldName="PartnerId" Caption="Partner" Visible="@(!ParentDataItemIsPartner)" ReadOnly="@ParentDataItemIsPartner">
<EditSettings> <EditSettings>
<DxComboBoxSettings Data="Partners" <DxComboBoxSettings Data="Partners"
ValueFieldName="Id" ValueFieldName="Id"
@ -141,7 +141,7 @@
[Inject] public required LoggedInModel LoggedInModel { get; set; } [Inject] public required LoggedInModel LoggedInModel { get; set; }
[Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; } [Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; }
[Parameter] public List<Partner>? Partners { get; set; } [Parameter] public AcObservableCollection<Partner>? Partners { get; set; }
[Parameter] public AcObservableCollection<ShippingDocument>? ShippingDocuments { get; set; } [Parameter] public AcObservableCollection<ShippingDocument>? ShippingDocuments { get; set; }
[Parameter] public Func<List<Partner>?, Task>? OnUploadedFileParsed { get; set; } [Parameter] public Func<List<Partner>?, Task>? OnUploadedFileParsed { get; set; }
@ -149,6 +149,7 @@
public bool IsMasterGrid => ParentDataItem == null; public bool IsMasterGrid => ParentDataItem == null;
public bool ParentDataItemIsShipping => (ParentDataItem is Shipping); public bool ParentDataItemIsShipping => (ParentDataItem is Shipping);
public bool ParentDataItemIsPartner => (ParentDataItem is Partner);
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty; string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
@ -172,31 +173,37 @@
private async Task ReloadDataFromDb(bool forceReload = false) private async Task ReloadDataFromDb(bool forceReload = false)
{ {
using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync()) if (!ParentDataItemIsPartner)
{ {
if (Partners == null) Partners = await FruitBankSignalRClient.GetPartners() ?? []; using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync())
else if (Partners.Count == 0 || forceReload)
{ {
Partners.Clear(); if (Partners == null) Partners = new AcObservableCollection<Partner>(await FruitBankSignalRClient.GetPartners() ?? []);
Partners.AddRange(await FruitBankSignalRClient.GetPartners() ?? []); else if (Partners.Count == 0 || forceReload)
{
Partners.Replace(await FruitBankSignalRClient.GetPartners() ?? []);
}
}
}
if (!ParentDataItemIsShipping)
{
using (await ObjectLock.GetSemaphore<Shipping>().UseWaitAsync())
{
if (Shippings == null) Shippings = new AcObservableCollection<Shipping>(await FruitBankSignalRClient.GetShippings() ?? []);
else if (Shippings.Count == 0 || forceReload)
{
Shippings.Replace(await FruitBankSignalRClient.GetShippings() ?? []);
}
} }
} }
if (!IsMasterGrid) if (!IsMasterGrid)
{ {
if (Shippings == null && ParentDataItem is Shipping shippingParent) Shippings = [shippingParent]; if (Shippings == null && ParentDataItem is Shipping shippingParent) Shippings = [shippingParent];
if (Partners == null && ParentDataItem is Partner partnerParent) Partners = [partnerParent];
return; return;
} }
using (await ObjectLock.GetSemaphore<Shipping>().UseWaitAsync())
{
if (Shippings == null) Shippings = new AcObservableCollection<Shipping>(await FruitBankSignalRClient.GetShippings() ?? []);
else if (Shippings.Count == 0 || forceReload)
{
Shippings.Replace(await FruitBankSignalRClient.GetShippings() ?? []);
}
}
if (Grid == null) return; if (Grid == null) return;
using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync()) using (await ObjectLock.GetSemaphore<ShippingDocument>().UseWaitAsync())

View File

@ -65,7 +65,7 @@
ShippingItemPallets.Clear(); ShippingItemPallets.Clear();
//TODO: A ShippingItemPallet-eknek SignalR Endpoint! - J. //TODO: A ShippingItemPallet-eknek SignalR Endpoint! - J.
ShippingItemPallets.AddRange((await FruitBankSignalRClient.GetShippingItems())?.SelectMany(si => si.ShippingItemPallets ?? []) ?? []); ShippingItemPallets.AddRange(await FruitBankSignalRClient.GetShippingItemPallets() ?? []);
if (ShippingItemPallets.Any(sip => sip.ShippingItem?.ProductDto != null)) if (ShippingItemPallets.Any(sip => sip.ShippingItem?.ProductDto != null))
{ {

View File

@ -0,0 +1,113 @@
@using System.Collections.ObjectModel
@using AyCode.Core.Helpers
@using AyCode.Core.Loggers
@using AyCode.Utils.Extensions
@using FruitBank.Common.Dtos
@using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components.Grids.Shippings
@using FruitBankHybrid.Shared.Components.Toolbars
@using FruitBankHybrid.Shared.Databases
@using FruitBankHybrid.Shared.Services.Loggers
@using FruitBankHybrid.Shared.Services.SignalRs
@inject IEnumerable<IAcLogWriterClientBase> LogWriters
@inject FruitBankSignalRClient FruitBankSignalRClient
<GridPartnerBase @ref="Grid" DataSource="Partners" AutoSaveLayoutName="GridPartner" SignalRClient="FruitBankSignalRClient" Logger="_logger"
CssClass="@GridCss" ValidationEnabled="false"
FocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
<DxGridDataColumn FieldName="Name" />
<DxGridDataColumn FieldName="TaxId" />
<DxGridDataColumn FieldName="CertificationNumber" />
<DxGridDataColumn FieldName="PostalCode" />
<DxGridDataColumn FieldName="State" />
<DxGridDataColumn FieldName="County" />
<DxGridDataColumn FieldName="City" />
<DxGridDataColumn FieldName="Street" />
<DxGridDataColumn FieldName="Created" ReadOnly="true" />
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns>
<DetailRowTemplate>
@if (IsMasterGrid)
{
var partner = ((Partner)context.DataItem);
var shippingDocuments = partner?.ShippingDocuments ?? [];
<DxTabs>
<DxTabPage Text="Szállítólevelek">
@{
var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments);
<GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@partner" Partners="@Partners"></GridShippingDocument>
}
</DxTabPage>
<DxTabPage Text="Szállítmány tételek">
@{
var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? []));
<GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@partner" />
}
</DxTabPage>
</DxTabs>
}
</DetailRowTemplate>
<ToolbarTemplate>
@if (IsMasterGrid)
{
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
}
</ToolbarTemplate>
</GridPartnerBase>
@code {
//[Inject] public required ObjectLock ObjectLock { get; set; }
[Inject] public required DatabaseClient Database { get; set; }
[Parameter] public bool IsMasterGrid { get; set; } = false;
[Parameter] public AcObservableCollection<Partner>? Partners { get; set; }
[Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; }
const string ExportFileName = "ExportResult";
string GridSearchText = "";
bool EditItemsEnabled { get; set; }
int FocusedRowVisibleIndex { get; set; }
public GridPartnerBase Grid { get; set; }
string GridCss => !IsMasterGrid ? "hide-toolbar" : string.Empty;
private int _activeTabIndex;
private LoggerClient<GridPartnerBase> _logger;
protected override async Task OnInitializedAsync()
{
_logger = new LoggerClient<GridPartnerBase>(LogWriters.ToArray());
await ReloadDataFromDb(false);
}
private async Task ReloadDataFromDb(bool forceReload = false)
{
if (!IsMasterGrid) return;
if (Grid == null) return;
using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync())
if (forceReload) await Grid.ReloadDataSourceAsync();
if (forceReload) Grid.Reload();
}
async Task Grid_FocusedRowChanged(GridFocusedRowChangedEventArgs args)
{
if (Grid == null) return;
if (Grid.IsEditing() && !Grid.IsEditingNewRow())
await Grid.SaveChangesAsync();
FocusedRowVisibleIndex = args.VisibleIndex;
EditItemsEnabled = true;
}
}

View File

@ -0,0 +1,67 @@
using AyCode.Core.Interfaces;
using DevExpress.Blazor;
using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces;
using FruitBank.Common.SignalRs;
using FruitBankHybrid.Shared.Pages;
using Microsoft.AspNetCore.Components;
namespace FruitBankHybrid.Shared.Components.Grids.Partners;
public class GridPartnerBase: FruitBankGridBase<Partner>, IGrid
{
private bool _isFirstInitializeParameterCore;
private bool _isFirstInitializeParameters;
public GridPartnerBase() : base()
{
GetAllMessageTag = SignalRTags.GetPartners;
AddMessageTag = SignalRTags.AddPartner;
UpdateMessageTag = SignalRTags.UpdatePartner;
//RemoveMessageTag = SignalRTags.;
}
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
}
protected override void OnParametersSet()
{
base.OnParametersSet();
if (!_isFirstInitializeParameters)
{
//if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0))
//{
// ContextIds = [ParentDataItem!.Id];
// GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
//}
_isFirstInitializeParameters = false;
}
}
protected override async Task SetParametersAsyncCore(ParameterView parameters)
{
await base.SetParametersAsyncCore(parameters);
if (!_isFirstInitializeParameterCore)
{
//if (!IsMasterGrid && (ContextIds == null || ContextIds.Length == 0))
//{
// ContextIds = [ParentDataItem!.Id];
// GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
//}
//ShowFilterRow = true;
//ShowGroupPanel = true;
//AllowSort = false;
//etc...
_isFirstInitializeParameterCore = false;
}
}
}

View File

@ -1,4 +1,5 @@
using AyCode.Core.Interfaces; using AyCode.Core.Interfaces;
using AyCode.Utils.Extensions;
using DevExpress.Blazor; using DevExpress.Blazor;
using FruitBank.Common.Entities; using FruitBank.Common.Entities;
using FruitBank.Common.Interfaces; using FruitBank.Common.Interfaces;
@ -34,12 +35,19 @@ public class GridShippingItemBase : FruitBankGridBase<ShippingItem>, IGrid
{ {
case IShippingDocument: case IShippingDocument:
GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId; GetAllMessageTag = SignalRTags.GetShippingItemsByDocumentId;
break; break;
case IShipping: case IShipping:
AddMessageTag = 0;//SignalRTags.None; AddMessageTag = 0;//SignalRTags.None;
GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId; GetAllMessageTag = SignalRTags.GetShippingItemsByShippingId;
break; break;
case IPartner:
AddMessageTag = 0;//SignalRTags.None;
GetAllMessageTag = SignalRTags.GetShippingItemsByPartnerId;
break;
} }
} }

View File

@ -58,17 +58,6 @@
<FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" /> <FruitBankToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
} }
</ToolbarTemplate> </ToolbarTemplate>
<GroupSummary>
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="Quantity"
FooterColumnName="Quantity" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="NetWeight"
FooterColumnName="NetWeight" />
<DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
FieldName="PriceInclTax"
FooterColumnName="PriceInclTax" />
</GroupSummary>
</GridShippingBase> </GridShippingBase>
@code { @code {
@ -76,7 +65,7 @@
[Inject] public required DatabaseClient Database { get; set; } [Inject] public required DatabaseClient Database { get; set; }
[Parameter] public bool IsMasterGrid { get; set; } = false; [Parameter] public bool IsMasterGrid { get; set; } = false;
[Parameter] public List<Partner>? Partners { get; set; } [Parameter] public AcObservableCollection<Partner>? Partners { get; set; }
[Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; } [Parameter] public AcObservableCollection<Shipping>? Shippings { get; set; }
const string ExportFileName = "ExportResult"; const string ExportFileName = "ExportResult";
@ -101,11 +90,10 @@
using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync()) using (await ObjectLock.GetSemaphore<Partner>().UseWaitAsync())
{ {
if (Partners == null) Partners = await FruitBankSignalRClient.GetPartners() ?? []; if (Partners == null) Partners = new AcObservableCollection<Partner>(await FruitBankSignalRClient.GetPartners() ?? []);
else if (Partners.Count == 0 || forceReload) else if (Partners.Count == 0 || forceReload)
{ {
Partners.Clear(); Partners.Replace(await FruitBankSignalRClient.GetPartners() ?? []);
Partners.AddRange(await FruitBankSignalRClient.GetPartners() ?? []);
} }
} }

View File

@ -1,6 +1,7 @@
using AyCode.Core.Extensions; using AyCode.Core.Extensions;
using AyCode.Core.Loggers; using AyCode.Core.Loggers;
using DevExpress.Blazor; using DevExpress.Blazor;
using FruitBank.Common.Dtos;
using FruitBank.Common.Entities; using FruitBank.Common.Entities;
using FruitBank.Common.Helpers; using FruitBank.Common.Helpers;
using FruitBank.Common.Interfaces; using FruitBank.Common.Interfaces;
@ -198,15 +199,7 @@ namespace FruitBankHybrid.Shared.Pages
for (var i = shippingItem.ShippingItemPallets.Count; i < shippingItem.MeasuringCount; i++) for (var i = shippingItem.ShippingItemPallets.Count; i < shippingItem.MeasuringCount; i++)
{ {
shippingItem.ShippingItemPallets.Add(new ShippingItemPallet shippingItem.ShippingItemPallets.Add(MeasurementService.CreateNewShippingItemPallet(shippingItem, LoggedInModel.CustomerDto));
{
ShippingItemId = shippingItem.Id,
PalletWeight = shippingItem.Pallet?.Weight ?? 0,
TareWeight = shippingItem.ProductDto?.Tare ?? 0,
CreatorId = LoggedInModel.CustomerDto?.Id,
ModifierId = LoggedInModel.CustomerDto?.Id
});
} }
} }
} }

View File

@ -1,5 +1,6 @@
@page "/OrdersAdmin" @page "/OrdersAdmin"
@using FruitBank.Common.Dtos @using FruitBank.Common.Dtos
@using FruitBank.Common.Models
@using FruitBankHybrid.Shared.Components @using FruitBankHybrid.Shared.Components
@using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Databases
<h3>Rendelések - Adminisztrátor</h3> <h3>Rendelések - Adminisztrátor</h3>
@ -15,10 +16,12 @@
Text="Adatok szinkronizálása folyamatban..."> Text="Adatok szinkronizálása folyamatban...">
@* @bind-ActiveTabIndex="@ActiveTabIndex" *@ @* @bind-ActiveTabIndex="@ActiveTabIndex" *@
<DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)" RenderMode="TabsRenderMode.AllTabs" AllowTabReorder="true"> <DxTabs ActiveTabIndexChanged="(i) => OnActiveTabChanged(i)" RenderMode="TabsRenderMode.OnDemand" AllowTabReorder="true">
<DxTabPage Text="Termékek"> <DxTabPage Text="Termékek">
<GridProductDtoTemplate ProductDtos="ProductDtos" IsMasterGrid="true"></GridProductDtoTemplate> <GridProductDtoTemplate ProductDtos="ProductDtos" IsMasterGrid="true"></GridProductDtoTemplate>
</DxTabPage> </DxTabPage>
<DxTabPage Text="Vásárlók" Visible="@(LoggedInModel.IsDeveloper)">
</DxTabPage>
<DxTabPage Text="Rendelések"> <DxTabPage Text="Rendelések">
<GridDetailOrderDto OrderDtos="OrderDtos" IsMasterGrid="true"></GridDetailOrderDto> <GridDetailOrderDto OrderDtos="OrderDtos" IsMasterGrid="true"></GridDetailOrderDto>
</DxTabPage> </DxTabPage>

View File

@ -2,6 +2,7 @@
@using FruitBank.Common.Dtos @using FruitBank.Common.Dtos
@using FruitBank.Common.Entities @using FruitBank.Common.Entities
@using FruitBankHybrid.Shared.Components @using FruitBankHybrid.Shared.Components
@using FruitBankHybrid.Shared.Components.Grids.Partners
@using FruitBankHybrid.Shared.Components.Grids.Shippings @using FruitBankHybrid.Shared.Components.Grids.Shippings
@using FruitBankHybrid.Shared.Databases @using FruitBankHybrid.Shared.Databases
<h3>Szállítmányok - Adminisztrátor</h3> <h3>Szállítmányok - Adminisztrátor</h3>
@ -21,6 +22,9 @@
<DxTabPage Text="Termékek"> <DxTabPage Text="Termékek">
<GridProductDtoTemplate @ref="gridProductDtoTemplate" IsMasterGrid="true"></GridProductDtoTemplate> <GridProductDtoTemplate @ref="gridProductDtoTemplate" IsMasterGrid="true"></GridProductDtoTemplate>
</DxTabPage> </DxTabPage>
<DxTabPage Text="Beszállítók" Visible="@(LoggedInModel.IsDeveloper)">
<GridPartner @ref="gridPartner" Partners="@Partners" IsMasterGrid="true"></GridPartner>
</DxTabPage>
<DxTabPage Text="Szállítmányok"> <DxTabPage Text="Szállítmányok">
<GridShipping @ref="gridShipping" Shippings="@Shippings" Partners="@Partners" IsMasterGrid="true"></GridShipping> <GridShipping @ref="gridShipping" Shippings="@Shippings" Partners="@Partners" IsMasterGrid="true"></GridShipping>
</DxTabPage> </DxTabPage>

View File

@ -9,6 +9,7 @@ using FruitBank.Common.Models;
using FruitBankHybrid.Shared.Components; using FruitBankHybrid.Shared.Components;
using FruitBankHybrid.Shared.Components.Grids.ShippingItems; using FruitBankHybrid.Shared.Components.Grids.ShippingItems;
using FruitBankHybrid.Shared.Components.Grids.Shippings; using FruitBankHybrid.Shared.Components.Grids.Shippings;
using FruitBankHybrid.Shared.Components.Grids.Partners;
using FruitBankHybrid.Shared.Databases; using FruitBankHybrid.Shared.Databases;
using FruitBankHybrid.Shared.Services.Loggers; using FruitBankHybrid.Shared.Services.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs; using FruitBankHybrid.Shared.Services.SignalRs;
@ -27,6 +28,7 @@ public partial class ShippingsAdmin : ComponentBase
[Inject] public required DatabaseClient Database { get; set; } [Inject] public required DatabaseClient Database { get; set; }
private GridProductDtoTemplate gridProductDtoTemplate; private GridProductDtoTemplate gridProductDtoTemplate;
private GridPartner gridPartner;
private GridShipping gridShipping; private GridShipping gridShipping;
private GridShippingDocument gridShippingDocument; private GridShippingDocument gridShippingDocument;
private GridShippingItemTemplate gridShippingItemTemplate; private GridShippingItemTemplate gridShippingItemTemplate;
@ -36,7 +38,7 @@ public partial class ShippingsAdmin : ComponentBase
public AcObservableCollection<ShippingDocument> ShippingDocuments { get; set; } = []; public AcObservableCollection<ShippingDocument> ShippingDocuments { get; set; } = [];
public AcObservableCollection<ShippingItem> ShippingItems { get; set; } = []; public AcObservableCollection<ShippingItem> ShippingItems { get; set; } = [];
public List<ShippingItemPallet> ShippingItemPallets { get; set; } = []; public List<ShippingItemPallet> ShippingItemPallets { get; set; } = [];
public List<Partner> Partners { get; set; } = []; public AcObservableCollection<Partner> Partners { get; set; } = [];
public bool AutoCollapseDetailRow { get; set; } public bool AutoCollapseDetailRow { get; set; }

View File

@ -63,21 +63,39 @@ public class MeasurementService(IEnumerable<IAcLogWriterClientBase> logWriters)
return string.Empty; return string.Empty;
} }
public static ShippingItemPallet CreateNewShippingItemPallet(ShippingItem shippingItem, CustomerDto? customerDto)
{
var shippingItemPallet = CreatePalletItem<ShippingItemPallet>(shippingItem.Id, shippingItem.ProductDto?.Tare, shippingItem.IsMeasurable, customerDto);
shippingItemPallet.ShippingItem = shippingItem;
shippingItemPallet.PalletWeight = shippingItem.IsMeasurable ? shippingItem.Pallet?.Weight ?? 0 : 0;
return shippingItemPallet;
}
public static OrderItemPallet CreateNewOrderItemPallet(OrderItemDto orderItemDto, CustomerDto? customerDto) public static OrderItemPallet CreateNewOrderItemPallet(OrderItemDto orderItemDto, CustomerDto? customerDto)
{ {
var orderItemPallet = new OrderItemPallet var orderItemPallet = CreatePalletItem<OrderItemPallet>(orderItemDto.Id, orderItemDto.ProductDto?.Tare, orderItemDto.IsMeasurable, customerDto);
{
OrderItemId = orderItemDto.Id,
OrderItemDto = orderItemDto,
TareWeight = orderItemDto.ProductDto?.Tare ?? 0,
CreatorId = customerDto?.Id,
ModifierId = customerDto?.Id
};
orderItemPallet.OrderItemDto = orderItemDto;
return orderItemPallet; return orderItemPallet;
} }
private static TPalletItem CreatePalletItem<TPalletItem>(int foreignKey, double? tare, bool isMeasurable, CustomerDto? customerDto) where TPalletItem : MeasuringItemPalletBase
{
var palletItem = Activator.CreateInstance<TPalletItem>();
palletItem.SetForeignKey(foreignKey);
//palletItem.PalletWeight = isMeasurable ? orderItemDto.Pallet?.Weight ?? 0 : 0;
palletItem.TareWeight = isMeasurable ? tare ?? 0 : 0;
palletItem.CreatorId = customerDto?.Id;
palletItem.ModifierId = customerDto?.Id;
return palletItem;
}
public static bool IsCustomItemPalletMeasuredAndValid(IMeasuringItemPalletBase customItemPallet, bool isMeasurable) public static bool IsCustomItemPalletMeasuredAndValid(IMeasuringItemPalletBase customItemPallet, bool isMeasurable)
=> customItemPallet.IsMeasuredAndValid(isMeasurable); => customItemPallet.IsMeasuredAndValid(isMeasurable);
} }

View File

@ -105,6 +105,9 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<List<ShippingItem>?> GetShippingItemsByShippingId(int shippingId) public Task<List<ShippingItem>?> GetShippingItemsByShippingId(int shippingId)
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItemsByShippingId, [shippingId]); => GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItemsByShippingId, [shippingId]);
public Task<List<ShippingItem>?> GetShippingItemsByPartnerId(int partnerId)
=> GetAllAsync<List<ShippingItem>>(SignalRTags.GetShippingItemsByPartnerId, [partnerId]);
public Task<ShippingItem?> GetShippingItemById(int id) public Task<ShippingItem?> GetShippingItemById(int id)
=> GetByIdAsync<ShippingItem?>(SignalRTags.GetShippingItemById, id); => GetByIdAsync<ShippingItem?>(SignalRTags.GetShippingItemById, id);
@ -120,6 +123,10 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
#endregion ShippingItem #endregion ShippingItem
#region ShippingItemPallet #region ShippingItemPallet
public Task<List<ShippingItemPallet>?> GetShippingItemPallets()
=> GetAllAsync<List<ShippingItemPallet>>(SignalRTags.GetShippingItemPallets);
public Task<ShippingItemPallet?> AddShippingItemPallet(ShippingItemPallet shippingItemPallet) public Task<ShippingItemPallet?> AddShippingItemPallet(ShippingItemPallet shippingItemPallet)
=> PostDataAsync(SignalRTags.AddShippingItemPallet, shippingItemPallet); => PostDataAsync(SignalRTags.AddShippingItemPallet, shippingItemPallet);
@ -162,7 +169,7 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<List<CustomerDto>?> GetMeasuringUsers() public Task<List<CustomerDto>?> GetMeasuringUsers()
=> GetAllAsync<List<CustomerDto>>(SignalRTags.GetMeasuringUsers); => GetAllAsync<List<CustomerDto>>(SignalRTags.GetMeasuringUsers);
public Task<List<CustomerRole>?> GetCustomerRolesByCustomerId(int customerId) public Task<List<CustomerRole>?> GetCustomerRolesByCustomerId(int customerId)
=> GetAllAsync<List<CustomerRole>>(SignalRTags.GetCustomerRolesByCustomerId, [customerId]); => GetAllAsync<List<CustomerRole>>(SignalRTags.GetCustomerRolesByCustomerId, [customerId]);
#endregion Customer #endregion Customer
@ -224,7 +231,7 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<List<OrderDto>?> GetAllOrderDtoByProductId(int productId) public Task<List<OrderDto>?> GetAllOrderDtoByProductId(int productId)
=> GetAllAsync<List<OrderDto>>(SignalRTags.GetAllOrderDtoByProductId, [productId]); => GetAllAsync<List<OrderDto>>(SignalRTags.GetAllOrderDtoByProductId, [productId]);
public Task<OrderItemDto?> GetOrderItemDtoById(int orderItemId) public Task<OrderItemDto?> GetOrderItemDtoById(int orderItemId)
=> GetByIdAsync<OrderItemDto>(SignalRTags.GetOrderItemDtoById, [orderItemId]); => GetByIdAsync<OrderItemDto>(SignalRTags.GetOrderItemDtoById, [orderItemId]);
@ -254,6 +261,7 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<List<StockQuantityHistoryDto>?> GetStockQuantityHistoryDtosByProductId(int productId) public Task<List<StockQuantityHistoryDto>?> GetStockQuantityHistoryDtosByProductId(int productId)
=> GetAllAsync<List<StockQuantityHistoryDto>>(SignalRTags.GetStockQuantityHistoryDtosByProductId, [productId]); => GetAllAsync<List<StockQuantityHistoryDto>>(SignalRTags.GetStockQuantityHistoryDtosByProductId, [productId]);
#endregion Orders #endregion Orders
} }
} }

View File

@ -15,9 +15,9 @@ builder.Services.AddDevExpressBlazor(configure => configure.SizeMode = DevExpres
// Add device-specific services used by the FruitBankHybrid.Shared project // Add device-specific services used by the FruitBankHybrid.Shared project
builder.Services.AddSingleton<IFormFactor, FormFactor>(); builder.Services.AddSingleton<IFormFactor, FormFactor>();
#if DEBUG //#if DEBUG
builder.Services.AddSingleton<IAcLogWriterClientBase, BrowserConsoleLogWriter>(); builder.Services.AddSingleton<IAcLogWriterClientBase, BrowserConsoleLogWriter>();
#endif //#endif
builder.Services.AddSingleton<LoggedInModel>(); builder.Services.AddSingleton<LoggedInModel>();
builder.Services.AddSingleton<FruitBankSignalRClient>(); builder.Services.AddSingleton<FruitBankSignalRClient>();

View File

@ -34,7 +34,7 @@ namespace FruitBankHybrid
#endif #endif
builder.Services.AddSingleton<LoggedInModel>(); builder.Services.AddSingleton<LoggedInModel>();
builder.Services.AddScoped<FruitBankSignalRClient>(); builder.Services.AddSingleton<FruitBankSignalRClient>();
builder.Services.AddSingleton<DatabaseClient>(); builder.Services.AddSingleton<DatabaseClient>();
builder.Services.AddSingleton<IAcLogWriterClientBase, SignaRClientLogItemWriter>(); builder.Services.AddSingleton<IAcLogWriterClientBase, SignaRClientLogItemWriter>();