phronCare/Domain/Dtos/Stock/ExpeditionDto.cs
Leandro Hernan Rojas 6e61b7b598
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 10m12s
Update Expeditions Print
2025-09-04 18:15:15 -03:00

139 lines
4.4 KiB
C#

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