using Core.Interfaces; using Domain.Dtos.Sales; using Domain.Generics; using Models.Interfaces; namespace Core.Services { public class DeliveryNoteService(IPhSDeliveryNoteRepository deliveryNoteRepository) : IDeliveryNoteDom { private readonly IPhSDeliveryNoteRepository _deliveryNoteRepository = deliveryNoteRepository; public Task> SearchAsync( int? customerId, string? customerText, string? deliveryNoteNumber, int? quoteId, string? quoteNumber, DateTime? issueDateFrom, DateTime? issueDateTo, string? status, int page = 1, int pageSize = 50) { page = page <= 0 ? 1 : page; pageSize = pageSize <= 0 ? 50 : pageSize; return _deliveryNoteRepository.SearchAsync( customerId, string.IsNullOrWhiteSpace(customerText) ? null : customerText.Trim(), string.IsNullOrWhiteSpace(deliveryNoteNumber) ? null : deliveryNoteNumber.Trim(), quoteId, string.IsNullOrWhiteSpace(quoteNumber) ? null : quoteNumber.Trim(), issueDateFrom, issueDateTo, string.IsNullOrWhiteSpace(status) ? null : status.Trim(), page, pageSize); } public Task GetDtoByIdAsync(int id) { if (id <= 0) throw new ArgumentOutOfRangeException(nameof(id), "El identificador del remito es inválido."); return _deliveryNoteRepository.GetDtoByIdAsync(id); } public Task GetDtoByDeliveryNoteNumberAsync(string deliveryNoteNumber) { if (string.IsNullOrWhiteSpace(deliveryNoteNumber)) throw new ArgumentException("El número de remito es obligatorio.", nameof(deliveryNoteNumber)); return _deliveryNoteRepository.GetDtoByDeliveryNoteNumberAsync(deliveryNoteNumber.Trim()); } public Task> GetDtosByQuoteIdAsync(int quoteId) { if (quoteId <= 0) throw new ArgumentOutOfRangeException(nameof(quoteId), "El identificador del presupuesto es inválido."); return _deliveryNoteRepository.GetDtosByQuoteIdAsync(quoteId); } } }