using Domain.Dtos.Sales;
using Domain.Generics;
///
/// Servicio de dominio para la gestión de consultas de Delivery Note (Remito Ventas).
/// Encapsula el acceso a datos y expone operaciones de lectura para la capa superior.
///
public interface IDeliveryNoteDom
{
///
/// Busca Delivery Notes con filtros y paginación.
///
Task> SearchAsync(
int? customerId,
string? customerText,
string? deliveryNoteNumber,
int? quoteId,
string? quoteNumber,
DateTime? issueDateFrom,
DateTime? issueDateTo,
string? status,
int page = 1,
int pageSize = 50);
///
/// Exporta a Excel los Delivery Notes filtrados.
///
Task ExportFilteredToExcelAsync(DeliveryNoteSearchParams searchParams);
///
/// Obtiene un Delivery Note por su identificador único.
///
/// Identificador interno del Delivery Note.
///
/// El DTO si existe; en caso contrario, null.
///
Task GetDtoByIdAsync(int id);
///
/// Obtiene un Delivery Note a partir de su número de documento.
///
/// Número del Delivery Note (ej: DN-00000001).
///
/// El DTO si existe; en caso contrario, null.
///
Task GetDtoByDeliveryNoteNumberAsync(string deliveryNoteNumber);
///
/// Obtiene todos los Delivery Notes asociados a un presupuesto (Quote).
///
/// Identificador del presupuesto relacionado.
///
/// Colección de asociadas al presupuesto.
/// Puede estar vacía si no existen registros.
///
Task> GetDtosByQuoteIdAsync(int quoteId);
///
/// Valida y prepara la emisión de un Delivery Note.
///
Task CreateAndIssueDeliveryNoteAsync(DeliveryNoteCreateRequest request);
}