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; }
}