using Domain.Dtos.Sales; using Microsoft.EntityFrameworkCore; using Models.Interfaces; using Models.Models; namespace Models.Repositories { public class PhSDeliveryNoteRepository(PhronCareOperationsHubContext context) : IPhSDeliveryNoteRepository { private readonly PhronCareOperationsHubContext _context = context; public async Task GetDtoByIdAsync(int id) { var entity = await _context.PhSDeliveryNotes .Include(x => x.PhSDeliveryNoteDetails) .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == id); return entity == null ? null : MapDeliveryNoteDto(entity); } public async Task GetDtoByDeliveryNoteNumberAsync(string deliveryNoteNumber) { var entity = await _context.PhSDeliveryNotes .Include(x => x.PhSDeliveryNoteDetails) .AsNoTracking() .FirstOrDefaultAsync(x => x.Deliverynotenumber == deliveryNoteNumber); return entity == null ? null : MapDeliveryNoteDto(entity); } public async Task> GetDtosByQuoteIdAsync(int quoteId) { var entities = await _context.PhSDeliveryNotes .Include(x => x.PhSDeliveryNoteDetails) .AsNoTracking() .Where(x => x.QuoteId == quoteId) .OrderByDescending(x => x.Issuedate) .ThenByDescending(x => x.Id) .ToListAsync(); return entities.Select(MapDeliveryNoteDto); } private static DeliveryNoteDto MapDeliveryNoteDto(PhSDeliveryNote source) { return new DeliveryNoteDto { Id = source.Id, DeliveryNoteNumber = source.Deliverynotenumber, QuoteId = source.QuoteId, SalesInvoiceId = source.SalesinvoiceId, IssueDate = source.Issuedate, CustomerId = source.CustomerId, Status = source.Status, Observations = source.Observations, ExtraInfoJson = source.ExtrainfoJson, PrintCount = source.Printcount, CreatedAt = source.Createdat, ModifiedAt = source.Modifiedat, Items = source.PhSDeliveryNoteDetails .OrderBy(d => d.LineNumber) .ThenBy(d => d.Id) .Select(MapDeliveryNoteItemDto) .ToList() }; } private static DeliveryNoteItemDto MapDeliveryNoteItemDto(PhSDeliveryNoteDetail source) { return new DeliveryNoteItemDto { Id = source.Id, DeliverynoteId = source.DeliverynoteId, LineNumber = source.LineNumber, OriginType = source.OriginType, OriginId = source.OriginId, QuoteDetailId = source.QuoteDetailId, Description = source.Description, Quantity = source.Quantity, Notes = source.Notes, Createdat = source.Createdat, Modifiedat = source.Modifiedat }; } } }