using foodmarket.Domain.Catalog; using foodmarket.Domain.Common; namespace foodmarket.Domain.Purchases; public enum EnterStatus { Draft = 0, Posted = 1, } /// Оприходование: документ постановки товара на склад БЕЗ поставщика. /// Используется для начальных остатков (при запуске учёта), излишка по /// результату инвентаризации, возврата товара из подразделения и т.п. /// /// Отличается от : нет SupplierId; total — не сумма закупки, /// а сумма по UnitCost (стоимость оприходованного товара по балансовой цене). /// При Post создаёт с типом /// . public class Enter : TenantEntity { /// Уникальный в рамках организации номер документа (например "О-2026-000001"). public string Number { get; set; } = ""; public DateTime Date { get; set; } = DateTime.UtcNow; public EnterStatus Status { get; set; } = EnterStatus.Draft; public Guid StoreId { get; set; } public Store Store { get; set; } = null!; public Guid CurrencyId { get; set; } public Currency Currency { get; set; } = null!; public string? Notes { get; set; } /// Сумма по строкам = Σ Quantity·UnitCost. public decimal Total { get; set; } public DateTime? PostedAt { get; set; } public Guid? PostedByUserId { get; set; } public ICollection Lines { get; set; } = new List(); } public class EnterLine : TenantEntity { public Guid EnterId { get; set; } public Enter Enter { get; set; } = null!; public Guid ProductId { get; set; } public Product Product { get; set; } = null!; public decimal Quantity { get; set; } /// Балансовая цена единицы (по которой товар ставится на учёт). /// Не пересчитывает Product.Cost — оприходование не образует /// себестоимости (в отличие от приёмки). public decimal UnitCost { get; set; } public decimal LineTotal { get; set; } public int SortOrder { get; set; } }