101 lines
4.2 KiB
C#
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));
|
|
}
|
|
} |