Add CargoTruck CRUD, grid tabs, and related tests

- Introduced LicencePlate to CargoTruck and Shippings navigation to CargoPartner.
- Implemented CargoTruck CRUD methods in IFruitBankDataControllerCommon and FruitBankSignalRClient.
- Expanded tests for CargoTruck and improved assertions for CargoPartner and Partner.
- Updated CargoPartner grid to show CargoTrucks and Shippings in detail tabs.
- Minor formatting and settings.local.json Bash command update.
This commit is contained in:
Loretta 2026-05-29 12:16:48 +02:00
parent 69010921d7
commit 41ccb10ef7
7 changed files with 127 additions and 32 deletions

View File

@ -11,7 +11,8 @@
"Bash(while read:*)",
"Bash(do sed -i '1a using AyCode.Core.Serializers.Toons;\\\\n' \"$f\")",
"Bash(done)",
"Bash(rm \"C:/Users/Fullepi/.claude/projects/H--Applications-Mango-Source-FruitBankHybridApp/memory/feedback_framework_docs_no_consumer_types.md\")"
"Bash(rm \"C:/Users/Fullepi/.claude/projects/H--Applications-Mango-Source-FruitBankHybridApp/memory/feedback_framework_docs_no_consumer_types.md\")",
"Bash(cd \"H:/Applications/Aycode/Source/AyCode.Core/AyCode.Services.Server/bin/FruitBank\" && ls -la --time-style=full-iso Debug/net9.0/AyCode.Core.dll Release/net9.0/AyCode.Core.dll 2>&1)"
]
}
}

View File

@ -14,4 +14,7 @@ public sealed class CargoPartner : PartnerBase, ICargoPartner
{
[Association(ThisKey = nameof(Id), OtherKey = nameof(CargoTruck.CargoPartnerId), CanBeNull = true)]
public List<CargoTruck>? CargoTrucks { get; set; }
//[Association(ThisKey = nameof(Id), OtherKey = nameof(Shipping.CargoPartnerId), CanBeNull = true)]
public List<Shipping>? Shippings { get; set; }
}

View File

@ -11,4 +11,5 @@ namespace FruitBank.Common.Entities;
public sealed class CargoTruck: MgEntityBase//, ICargoPartner
{
public int CargoPartnerId { get; set; }
public string LicencePlate { get; set; }
}

View File

@ -26,6 +26,13 @@ public interface IFruitBankDataControllerCommon
public Task<CargoPartner?> UpdateCargoPartner(CargoPartner cargoPartner);
#endregion CargoPartner
#region CargoTruck
public Task<List<CargoTruck>?> GetCargoTrucks();
public Task<CargoTruck?> GetCargoTruckById(int id);
public Task<CargoTruck?> AddCargoTruck(CargoTruck cargoTruck);
public Task<CargoTruck?> UpdateCargoTruck(CargoTruck cargoTruck);
#endregion CargoTruck
#region Shipping
public Task<List<Shipping>?> GetShippings();
Task<List<Shipping>?> GetNotMeasuredShippings();

View File

@ -42,22 +42,22 @@ namespace FruitBankHybrid.Shared.Tests
var partners = await _signalRClient.GetPartners();
Assert.IsNotNull(partners);
Assert.IsTrue(partners.Count != 0);
Assert.IsNotEmpty(partners);
}
//[DataTestMethod]
//[TestMethod]
//[DataRow(1)]
public async Task<Partner> GetPartnerByIdTest(int partnerId)
{
var partner = await _signalRClient.GetPartnerById(partnerId);
Assert.IsNotNull(partner);
Assert.IsTrue(partner.Id == partnerId);
Assert.AreEqual(partnerId, partner.Id);
return partner;
}
[DataTestMethod]
[TestMethod]
[DataRow(2)]
public async Task UpdatePartnerTest(int partnerId)
{
@ -75,7 +75,7 @@ namespace FruitBankHybrid.Shared.Tests
partner = await _signalRClient.UpdatePartner(partner);
Assert.IsNotNull(partner);
Assert.IsTrue(partner.Id == partnerId);
Assert.AreEqual(partnerId, partner.Id);
}
#endregion Partner
@ -83,13 +83,88 @@ namespace FruitBankHybrid.Shared.Tests
[TestMethod]
public async Task GetCargoPartnersTest()
{
var partners = await _signalRClient.GetPartners();
var partners = await _signalRClient.GetCargoPartners();
Assert.IsNotNull(partners);
Assert.IsTrue(partners.Count != 0);
Assert.IsNotEmpty(partners);
}
//[TestMethod]
//[DataRow(1)]
public async Task<CargoPartner> GetCargoPartnerByIdTest(int cargoPartnerId)
{
var cargoPartner = await _signalRClient.GetCargoPartnerById(cargoPartnerId);
Assert.IsNotNull(cargoPartner);
Assert.AreEqual(cargoPartnerId, cargoPartner.Id);
return cargoPartner;
}
[TestMethod]
[DataRow(1)]
public async Task UpdateCargoPartnerTest(int cargoPartnerId)
{
var cargoPartner = await GetCargoPartnerByIdTest(cargoPartnerId);
var newName = GetFixtureName(cargoPartner.Name);
cargoPartner.Name = newName;
cargoPartner = await _signalRClient.UpdateCargoPartner(cargoPartner);
Assert.IsNotNull(cargoPartner);
Assert.IsTrue(cargoPartner.Name == newName);
cargoPartner.Name = GetOriginalName(cargoPartner.Name);
cargoPartner = await _signalRClient.UpdateCargoPartner(cargoPartner);
Assert.IsNotNull(cargoPartner);
Assert.AreEqual(cargoPartnerId, cargoPartner.Id);
}
#endregion CargoPartner
#region CargoTruck
[TestMethod]
public async Task GetCargoTrucksTest()
{
var cargoTrucks = await _signalRClient.GetCargoTrucks();
Assert.IsNotNull(cargoTrucks);
Assert.IsNotEmpty(cargoTrucks);
}
//[TestMethod]
//[DataRow(1)]
public async Task<CargoTruck> GetCargoTruckByIdTest(int cargoTruckId)
{
var cargoTruck = await _signalRClient.GetCargoTruckById(cargoTruckId);
Assert.IsNotNull(cargoTruck);
Assert.AreEqual(cargoTruckId, cargoTruck.Id);
return cargoTruck;
}
[TestMethod]
[DataRow(1)]
public async Task UpdateCargoTruckTest(int cargoTruckId)
{
var cargoTruck = await GetCargoTruckByIdTest(cargoTruckId);
var newLicencePlate = GetFixtureName(cargoTruck.LicencePlate);
cargoTruck.LicencePlate = newLicencePlate;
cargoTruck = await _signalRClient.UpdateCargoTruck(cargoTruck);
Assert.IsNotNull(cargoTruck);
Assert.IsTrue(cargoTruck.LicencePlate == newLicencePlate);
cargoTruck.LicencePlate = GetOriginalName(cargoTruck.LicencePlate);
cargoTruck = await _signalRClient.UpdateCargoTruck(cargoTruck);
Assert.IsNotNull(cargoTruck);
Assert.AreEqual(cargoTruckId, cargoTruck.Id);
}
#endregion CargoTruck
#region Shipping
[TestMethod]
public async Task GetShippingsTest()
@ -97,7 +172,7 @@ namespace FruitBankHybrid.Shared.Tests
var shippings = await _signalRClient.GetShippings();
Assert.IsNotNull(shippings);
Assert.IsTrue(shippings.Count != 0);
Assert.IsNotEmpty(shippings);
}
[TestMethod]

View File

@ -18,11 +18,11 @@
<GridCargoPartnerBase @ref="Grid"
DataSource="CargoPartners"
AutoSaveLayoutName="GridCargoPartner"
SignalRClient="FruitBankSignalRClient"
Logger="_logger"
CssClass="@GridCss"
ValidationEnabled="false"
OnGridFocusedRowChanged="Grid_FocusedRowChanged">
SignalRClient="FruitBankSignalRClient"
Logger="_logger"
CssClass="@GridCss"
ValidationEnabled="false"
OnGridFocusedRowChanged="Grid_FocusedRowChanged">
<Columns>
<DxGridDataColumn FieldName="Id" SortIndex="0" SortOrder="GridColumnSortOrder.Descending" ReadOnly="true" />
@ -41,37 +41,38 @@
<DxGridDataColumn FieldName="Modified" ReadOnly="true" />
<DxGridCommandColumn Visible="!IsMasterGrid" Width="120"></DxGridCommandColumn>
</Columns>
@* <DetailRowTemplate>
<DetailRowTemplate>
@if (IsMasterGrid)
{
var partner = ((CargoPartner)context.DataItem);
var shippingDocuments = partner?.ShippingDocuments ?? [];
var shipping = partner?.Shippings ?? [];
var cargoTrucks = partner?.CargoTrucks ?? [];
<DxTabs>
<DxTabPage Text="Szállítólevelek">
<DxTabPage Text="Kamionok">
@{
var observableShippingDocuments = new AcObservableCollection<ShippingDocument>(shippingDocuments);
<GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@partner" Partners="@Partners"></GridShippingDocument>
// var observableShippingDocuments = new AcObservableCollection<CargoTruck>(cargoTrucks);
// <GridShippingDocument ShippingDocuments="@observableShippingDocuments" ParentDataItem="@partner" Partners="@Partners" IsMasterGrid="false"></GridShippingDocument>
}
</DxTabPage>
<DxTabPage Text="Szállítmány tételek">
<DxTabPage Text="Szállítmányok">
@{
var observableShippingItems = new AcObservableCollection<ShippingItem>(shippingDocuments.SelectMany(sd => sd.ShippingItems ?? []));
<GridShippingItemTemplate ShippingItems="@observableShippingItems" ParentDataItem="@partner" />
var observableShippings = new AcObservableCollection<Shipping>(shipping);
<GridShipping Shippings="@observableShippings" IsMasterGrid="false" />
}
</DxTabPage>
</DxTabs>
}
</DetailRowTemplate>
*@ <ToolbarTemplate>
@if (IsMasterGrid)
{
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
}
</ToolbarTemplate>
</GridCargoPartnerBase>
</GridContent>
<ToolbarTemplate>
@if (IsMasterGrid)
{
<MgGridToolbarTemplate Grid="Grid" OnReloadDataClick="() => ReloadDataFromDb(true)" />
}
</ToolbarTemplate>
</GridCargoPartnerBase>
</GridContent>
</MgGridWithInfoPanel>
@code {

View File

@ -57,8 +57,7 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
}
}
public Task<List<MeasuringModel>?> GetMeasuringModels()
=> GetAllAsync<List<MeasuringModel>>(SignalRTags.GetMeasuringModels);
public Task<List<MeasuringModel>?> GetMeasuringModels() => GetAllAsync<List<MeasuringModel>>(SignalRTags.GetMeasuringModels);
#region Partner
public Task<List<Partner>?> GetPartners() => GetAllAsync<List<Partner>>(SignalRTags.GetPartners);
@ -74,6 +73,14 @@ namespace FruitBankHybrid.Shared.Services.SignalRs
public Task<CargoPartner?> UpdateCargoPartner(CargoPartner cargoPartner) => PostDataAsync(SignalRTags.UpdateCargoPartner, cargoPartner);
#endregion CargoPartner
#region CargoTruck
public Task<List<CargoTruck>?> GetCargoTrucks() => GetAllAsync<List<CargoTruck>>(SignalRTags.GetCargoTrucks);
public Task<CargoTruck?> GetCargoTruckById(int id) => GetByIdAsync<CargoTruck?>(SignalRTags.GetCargoTruckById, id);
public Task<CargoTruck?> AddCargoTruck(CargoTruck cargoTruck) => PostDataAsync(SignalRTags.AddCargoTruck, cargoTruck);
public Task<CargoTruck?> UpdateCargoTruck(CargoTruck cargoTruck) => PostDataAsync(SignalRTags.UpdateCargoTruck, cargoTruck);
#endregion CargoTruck
#region Shipping
public Task<List<Shipping>?> GetShippings()