namespace Domain.Dtos.Stock
{
///
/// DTO de lectura y de impresión para una Expedición (nota de entrega).
/// Representa la cabecera + lista de ítems listos para renderizar en UI/PDF.
///
public class ExpeditionDto
{
// ===== Identificación / numeración =====
///
/// Identificador interno de la expedición.
///
public int Id { get; set; }
///
/// Número de expedición (ej.: EX-00000001).
/// Lo genera el servidor al emitir según la serie.
///
public string Expeditionnumber { get; set; } = string.Empty;
// ===== Fechas / estado =====
///
/// Fecha de emisión de la expedición.
///
public DateTime Issuedate { get; set; }
///
/// Estado numérico de la expedición (según enum del dominio).
///
public int Status { get; set; }
///
/// Etiqueta amigable del estado (ej.: Emitida, En tránsito, En destino, Retorno, Cerrada, Anulada).
///
public string StatusLabel { get; set; } = string.Empty;
// ===== Origen (depósito) =====
///
/// Id de la ubicación/depósito desde donde se despacha.
///
public int LocationId { get; set; }
///
/// Nombre de la ubicación/depósito (resuelto por join).
///
public string? LocationName { get; set; }
///
/// (Opcional) Dirección del depósito/origen, útil para impresión.
///
public string? LocationAddress { get; set; }
// ===== Destino / referencias externas =====
///
/// Nombre visible del destinatario (si se define para la impresión).
///
public string? RecipientName { get; set; }
///
/// Número o referencia externa asociada (si aplica).
///
public string? ReferenceNumber { get; set; }
///
/// Tipo de origen externo (ej.: surgery, demo, préstamo).
///
public string? OriginType { get; set; }
///
/// Referencia externa a otro módulo o sistema (ticket/orden).
///
public string? ExternalReference { get; set; }
///
/// Ticket quirúrgico asociado (si corresponde).
///
public Guid? TicketId { get; set; }
// ===== “Foto” (snapshot) de la cirugía/paciente (Extrainfo) =====
///
/// Información adicional en JSON tal como se almacenó (para trazabilidad).
///
public string? ExtrainfoJson { get; set; }
// ===== Observaciones / instrucciones =====
///
/// Observaciones generales de la expedición (libre).
///
public string? Observations { get; set; }
// ===== Auditoría de impresión =====
///
/// Cantidad de veces que se imprimió la nota (para mostrar "Reimpresión N").
///
public int Printcount { get; set; }
///
/// Fecha de creación del registro (trazabilidad).
///
public DateTime Createdat { get; set; }
///
/// Fecha de última modificación del registro (trazabilidad).
///
public DateTime? Modifiedat { get; set; }
// ===== Ítems =====
///
/// Detalle de los ítems/productos de la expedición.
///
public List Items { get; set; } = new();
// ===== Totales de conveniencia para la impresión =====
///
/// Total de renglones en la expedición (Items.Count).
///
public int TotalItems => Items?.Count ?? 0;
///
/// Suma de cantidades (para pie de impresión).
///
public decimal TotalQuantity => Items?.Sum(i => i.Quantity) ?? 0m;
///
/// Logo de la compañia.
///
public string LogoBase64 { get; set; } = string.Empty;
}
}