Files
BimAI/BimAI.API/Controllers/InvoiceController.cs

96 lines
3.2 KiB
C#
Raw Normal View History

2025-11-27 23:52:32 +01:00
using BimAI.Application.DTOModels;
using BimAI.Application.DTOModels.Common;
using BimAI.Infrastructure.Data;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace BimAI.API.Controllers;
[ApiController]
[Route("api/[controller]")]
public class InvoiceController(BimAIDbContext context) : ControllerBase
{
private readonly BimAIDbContext _context = context;
[HttpGet]
public async Task<ActionResult<PagedResult<InvoiceDto>>> GetInvoices([FromQuery] InvoiceFilterRequest request)
{
var query = _context.Invoices.AsQueryable();
if (!string.IsNullOrWhiteSpace(request.Search))
{
var searchTerm = request.Search.ToLower();
query = query.Where(x =>
x.DocumentNo.ToLower().Contains(searchTerm) ||
x.ClientName.ToLower().Contains(searchTerm) ||
(x.ClientNip != null && x.ClientNip.ToLower().Contains(searchTerm))
);
}
if (!string.IsNullOrWhiteSpace(request.DocumentNo))
{
query = query.Where(x => x.DocumentNo.ToLower().Contains(request.DocumentNo.ToLower()));
}
if (!string.IsNullOrWhiteSpace(request.ClientName))
{
query = query.Where(x => x.ClientName.ToLower().Contains(request.ClientName.ToLower()));
}
if (!string.IsNullOrWhiteSpace(request.Type))
{
query = query.Where(x => x.Type.ToLower().Contains(request.Type.ToLower()));
}
if (!string.IsNullOrWhiteSpace(request.Source))
{
query = query.Where(x => x.Source.ToLower().Contains(request.Source.ToLower()));
}
if (request.RegisterDateFrom.HasValue)
{
query = query.Where(x => x.RegisterDate >= request.RegisterDateFrom.Value);
}
if (request.RegisterDateTo.HasValue)
{
query = query.Where(x => x.RegisterDate <= request.RegisterDateTo.Value);
}
var totalCount = await query.CountAsync();
var items = await query
.OrderByDescending(x => x.RegisterDate)
.Skip((request.Page - 1) * request.PageSize)
.Take(request.PageSize)
.Select(x => new InvoiceDto
{
Id = x.Id,
DocumentNo = x.DocumentNo,
Type = x.Type,
RegisterDate = x.RegisterDate,
SellDate = x.SellDate,
ClientName = x.ClientName,
ClientId = x.ClientId,
ClientNip = x.ClientNip,
ClientAddress = x.ClientAddress,
Currency = x.Currency,
TotalNetto = x.TotalNetto,
TotalBrutto = x.TotalBrutto,
TotalVat = x.TotalVat,
Source = x.Source,
CreatedAt = x.CreatedAt,
UpdatedAt = x.UpdatedAt
})
.ToListAsync();
return Ok(new PagedResult<InvoiceDto>
{
Items = items,
TotalCount = totalCount,
Page = request.Page,
PageSize = request.PageSize,
});
}
}