namespace Apollinare.Domain.Entities.Warehouse; /// /// Testata movimento di magazzino (carico, scarico, trasferimento, rettifica) /// public class StockMovement : BaseEntity { /// /// Numero documento movimento /// public string DocumentNumber { get; set; } = string.Empty; /// /// Data movimento /// public DateTime MovementDate { get; set; } /// /// Tipo movimento /// public MovementType Type { get; set; } /// /// Causale movimento /// public int? ReasonId { get; set; } /// /// Magazzino di origine (per scarichi e trasferimenti) /// public int? SourceWarehouseId { get; set; } /// /// Magazzino di destinazione (per carichi e trasferimenti) /// public int? DestinationWarehouseId { get; set; } /// /// Riferimento documento esterno (DDT, fattura, ordine) /// public string? ExternalReference { get; set; } /// /// Tipo documento esterno /// public ExternalDocumentType? ExternalDocumentType { get; set; } /// /// ID fornitore (per carichi da acquisto) /// public int? SupplierId { get; set; } /// /// ID cliente (per scarichi per vendita) /// public int? CustomerId { get; set; } /// /// Stato del movimento /// public MovementStatus Status { get; set; } = MovementStatus.Draft; /// /// Data conferma movimento /// public DateTime? ConfirmedDate { get; set; } /// /// Utente che ha confermato /// public string? ConfirmedBy { get; set; } /// /// Valore totale movimento /// public decimal? TotalValue { get; set; } /// /// Note movimento /// public string? Notes { get; set; } // Navigation properties public WarehouseLocation? SourceWarehouse { get; set; } public WarehouseLocation? DestinationWarehouse { get; set; } public MovementReason? Reason { get; set; } public ICollection Lines { get; set; } = new List(); } /// /// Tipo di movimento magazzino /// public enum MovementType { /// /// Carico (aumento giacenza) /// Inbound = 0, /// /// Scarico (diminuzione giacenza) /// Outbound = 1, /// /// Trasferimento tra magazzini /// Transfer = 2, /// /// Rettifica inventariale (positiva o negativa) /// Adjustment = 3, /// /// Produzione (carico da ciclo produttivo) /// Production = 4, /// /// Consumo (scarico per produzione) /// Consumption = 5, /// /// Reso a fornitore /// SupplierReturn = 6, /// /// Reso da cliente /// CustomerReturn = 7 } /// /// Stato del movimento /// public enum MovementStatus { /// /// Bozza (non ancora confermato) /// Draft = 0, /// /// Confermato (giacenze aggiornate) /// Confirmed = 1, /// /// Annullato /// Cancelled = 2 } /// /// Tipo documento esterno collegato /// public enum ExternalDocumentType { /// /// Ordine fornitore /// PurchaseOrder = 0, /// /// DDT entrata /// InboundDeliveryNote = 1, /// /// Fattura acquisto /// PurchaseInvoice = 2, /// /// Ordine cliente /// SalesOrder = 3, /// /// DDT uscita /// OutboundDeliveryNote = 4, /// /// Fattura vendita /// SalesInvoice = 5, /// /// Ordine di produzione /// ProductionOrder = 6, /// /// Documento inventario /// InventoryDocument = 7 }