FruitBankHybridApp/FruitBank.Common/Entities/ShippingItem.cs

101 lines
4.2 KiB
C#

using AyCode.Core.Interfaces;
using FruitBank.Common.Dtos;
using FruitBank.Common.Enums;
using FruitBank.Common.Interfaces;
using LinqToDB;
using LinqToDB.Mapping;
using Mango.Nop.Core.Entities;
using Newtonsoft.Json;
using Nop.Core.Domain.Customers;
using Nop.Core.Domain.Orders;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
//using Nop.Core.Domain.Catalog;
using DataType = LinqToDB.DataType;
using Column = LinqToDB.Mapping.ColumnAttribute;
using Table = LinqToDB.Mapping.TableAttribute;
namespace FruitBank.Common.Entities;
[Table(Name = FruitBankConstClient.ShippingItemDbTableName)]
[System.ComponentModel.DataAnnotations.Schema.Table(FruitBankConstClient.ShippingItemDbTableName)]
public class ShippingItem : MgEntityBase, IShippingItem
{
public int ShippingDocumentId { get; set; }
public int? PalletId { get; set; }
public int? ProductId { get; set; }
public string Name { get; set; }
public string NameOnDocument { get; set; }
public string HungarianName { get; set; }
/// <summary>
/// get => ProductDto?.Name ?? Name
/// </summary>
[NotColumn, NotMapped, JsonIgnore, System.Text.Json.Serialization.JsonIgnore]
public string ProductName => ProductDto?.Name ?? Name;
public int PalletsOnDocument { get; set; }
public int QuantityOnDocument { get; set; }
[Column(DataType = DataType.DecFloat)] public double NetWeightOnDocument { get; set; }
[Column(DataType = DataType.DecFloat)] public double GrossWeightOnDocument { get; set; }
[Column(DataType = DataType.DecFloat)] public double UnitPriceOnDocument { get; set; }
/// <summary>
/// Általában megegyezik a PalletsOnDocument-el, de minimum 1! Ha nincs raklap, akkor is 1! Néha előfordulhat, hogy kevesebb raklap érkezik és olyankor kell tudni módosítani a mérések számát.
/// </summary>
[Range(1, 100000, ErrorMessage = "The MeasuringCount value should be a number between 1 and 100,000.")]
public int MeasuringCount { get; set; } = 1;
//[Nullable]
//[Column(CanBeNull = true)]
[Range(1, 100000, ErrorMessage = "The MeasuredQuantity value should be a number between 1 and 100,000.")]
public int MeasuredQuantity { get; set; }
//[Nullable]
[Column(DataType = DataType.DecFloat, CanBeNull = false)]
[Range(1, 100000, ErrorMessage = "The MeasuredNetWeight value should be a number between 1 and 100,000.")]
public double MeasuredNetWeight { get; set; }
//[Nullable]
//Precision = 1
[Column(DataType = DataType.DecFloat, CanBeNull = false)]
[Range(1, 100000, ErrorMessage = "The MeasuredGrossWeight value should be a number between 1 and 100,000.")]
public double MeasuredGrossWeight { get; set; }
public bool IsMeasurable { get; set; }
public bool IsMeasured { get; set; }
[LinqToDB.Mapping.Association(ThisKey = nameof(PalletId), OtherKey = nameof(Pallet.Id), CanBeNull = true)]
public Pallet? Pallet { get; set; }
[LinqToDB.Mapping.Association(ThisKey = nameof(ProductId), OtherKey = nameof(ProductDto.Id), CanBeNull = true)]
public ProductDto? ProductDto { get; set; }
[LinqToDB.Mapping.Association(ThisKey = nameof(ShippingDocumentId), OtherKey = nameof(ShippingDocument.Id), CanBeNull = true)]
public ShippingDocument? ShippingDocument { get; set; }
[LinqToDB.Mapping.Association(ThisKey = nameof(Id), OtherKey = nameof(ShippingItemPallet.ShippingItemId), CanBeNull = true)]
public List<ShippingItemPallet>? ShippingItemPallets { get; set; }
[SkipValuesOnUpdate] public DateTime Created { get; set; }
public DateTime Modified { get; set; }
[NotColumn, NotMapped, JsonIgnore, System.Text.Json.Serialization.JsonIgnore]
public MeasuringStatus MeasuringStatus
{
get
{
if (IsMeasured) return MeasuringStatus.Finnished;
return ShippingItemPallets?.Any(oip => oip.MeasuringStatus == MeasuringStatus.Started) ?? false ? MeasuringStatus.Started : MeasuringStatus.NotStarted;
}
}
public bool IsValidMeasuringValues()
{
return /*ProductId > 0 && */MeasuringCount > 0 && MeasuredQuantity > 0 && (!IsMeasurable || (MeasuredNetWeight > 0 && MeasuredGrossWeight > 0));
}
}