using System.ComponentModel.DataAnnotations.Schema; using AyCode.Core.Serializers.Attributes; using AyCode.Core.Serializers.Toons; using FruitBank.Common.Interfaces; using LinqToDB.Mapping; using Mango.Nop.Core.Entities; using Newtonsoft.Json; namespace FruitBank.Common.Entities; [AcBinarySerializable(false, true, false, true, false, false)] [ToonDescription("Cargo vehicle — truck or trailer — owned by a transport partner", Purpose = "A single vehicle in a transport company's fleet. One table holds both tractor units and trailers, distinguished by IsTrailer. Truck and trailer are tracked as separate vehicles because Hungarian EKÁER road-freight reporting (NAV) declares the towing vehicle and the trailer as distinct entries (vehicle / vehicle2), each with its own licence plate and country code — i.e. these shipments carry an EKÁER declaration obligation.")] [LinqToDB.Mapping.Table(Name = FruitBankConstClient.CargoTruckDbTableName)] [System.ComponentModel.DataAnnotations.Schema.Table(FruitBankConstClient.CargoTruckDbTableName)] public sealed class CargoTruck: MgEntityBase, ICargoTruck { [ToonDescription(Purpose = "FK to the owning transport company (CargoPartner) — the carrier, not the goods supplier.")] public int CargoPartnerId { get; set; } [Association(ThisKey = nameof(CargoPartnerId), OtherKey = nameof(CargoPartner.Id), CanBeNull = true)] public CargoPartner CargoPartner { get; set; } public string CountryCode { get; set; } public string LicencePlate { get; set; } [ToonDescription(Purpose = "Discriminates the shared table: false = tractor/truck unit, true = trailer.")] public bool IsTrailer { get; set; } [NotColumn, NotMapped, JsonIgnore, System.Text.Json.Serialization.JsonIgnore] public string? CargoPartnerName => CargoPartner?.Name; public DateTime Created { get; set; } public DateTime Modified { get; set; } }