From c55581f54683b088eb3f2a44dcd936f5a1bb0861 Mon Sep 17 00:00:00 2001 From: leandro Date: Tue, 17 Mar 2026 10:08:51 -0300 Subject: [PATCH] feat(sales): agregar repositorio base delivery note Closes #15 --- .../Interfaces/IPhSDeliveryNoteRepository.cs | 12 +++ .../Repositories/PhSDeliveryNoteRepository.cs | 87 +++++++++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 Models/Interfaces/IPhSDeliveryNoteRepository.cs create mode 100644 Models/Repositories/PhSDeliveryNoteRepository.cs diff --git a/Models/Interfaces/IPhSDeliveryNoteRepository.cs b/Models/Interfaces/IPhSDeliveryNoteRepository.cs new file mode 100644 index 0000000..29888d4 --- /dev/null +++ b/Models/Interfaces/IPhSDeliveryNoteRepository.cs @@ -0,0 +1,12 @@ +using Domain.Entities; + +namespace Models.Interfaces +{ + public interface IPhSDeliveryNoteRepository + { + Task GetByIdAsync(int id); + Task GetByDeliveryNoteNumberAsync(string deliveryNoteNumber); + Task> GetByQuoteIdAsync(int quoteId); + } +} + diff --git a/Models/Repositories/PhSDeliveryNoteRepository.cs b/Models/Repositories/PhSDeliveryNoteRepository.cs new file mode 100644 index 0000000..a60badb --- /dev/null +++ b/Models/Repositories/PhSDeliveryNoteRepository.cs @@ -0,0 +1,87 @@ +using Microsoft.EntityFrameworkCore; +using Models.Interfaces; +using Domain.Entities; +using Models.Models; + +namespace Models.Repositories +{ + public class PhSDeliveryNoteRepository(PhronCareOperationsHubContext context) : IPhSDeliveryNoteRepository + { + private readonly PhronCareOperationsHubContext _context = context; + + public async Task GetByIdAsync(int id) + { + var entity = await _context.PhSDeliveryNotes + .Include(x => x.PhSDeliveryNoteDetails) + .AsNoTracking() + .FirstOrDefaultAsync(x => x.Id == id); + + return entity == null ? null : MapDeliveryNote(entity); + } + + public async Task GetByDeliveryNoteNumberAsync(string deliveryNoteNumber) + { + var entity = await _context.PhSDeliveryNotes + .Include(x => x.PhSDeliveryNoteDetails) + .AsNoTracking() + .FirstOrDefaultAsync(x => x.Deliverynotenumber == deliveryNoteNumber); + + return entity == null ? null : MapDeliveryNote(entity); + } + + public async Task> GetByQuoteIdAsync(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(MapDeliveryNote); + } + + private static EDeliveryNote MapDeliveryNote(PhSDeliveryNote source) + { + return new EDeliveryNote + { + 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, + PhSDeliveryNoteDetails = source.PhSDeliveryNoteDetails + .OrderBy(d => d.LineNumber) + .ThenBy(d => d.Id) + .Select(MapDeliveryNoteDetail) + .ToList() + }; + } + + private static EDeliveryNoteDetail MapDeliveryNoteDetail(PhSDeliveryNoteDetail source) + { + return new EDeliveryNoteDetail + { + 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 + }; + } + } +} \ No newline at end of file