Files
FA_WEB/SytelineSaAppEfDataModel/Services/MaterialTransactionService.cs
2025-06-17 22:05:15 +02:00

100 lines
3.6 KiB
C#

using AutoMapper;
using Microsoft.EntityFrameworkCore;
using SytelineSaAppEfDataModel.Dtos;
using SytelineSaAppEfDataModel.Entities;
namespace SytelineSaAppEfDataModel.Services;
public class MaterialTransactionService(SytelineSaAppDbContext context, IMapper mapper) : IMaterialTransactionService
{
public async Task<IEnumerable<MaterialTransactionDto>> GetAll()
{
return await context.MaterialTransactions.Select(x => mapper.Map<MaterialTransactionDto>(x)).ToListAsync();
}
public async Task<MaterialTransactionDto?> GetByWzNumber(string wzNumber)
{
return await context.MaterialTransactions
.Where(x => x.MTGroupNum == wzNumber)
.Select(x => mapper.Map<MaterialTransactionDto>(x)).FirstOrDefaultAsync();
}
public async Task<IEnumerable<MaterialTransactionDto>> GetByWzNumbers(ISet<string> wzNumbers)
{
if (!wzNumbers.Any())
return Enumerable.Empty<MaterialTransactionDto>();
var wzNumbersList = string.Join(",", wzNumbers.Select(w => $"'{w}'"));
var sql = $@"
SELECT z.*
FROM ZPL_InternalNum_Matltran z
WHERE z.MTGroupNum <> ''
AND z.MTGroupNum IN ({wzNumbersList})";
IList<MaterialTransaction> result = await context.MaterialTransactions
.FromSqlRaw(sql)
.AsNoTracking()
.ToListAsync();
return result.Select(mapper.Map<MaterialTransactionDto>);
}
public async Task<IEnumerable<MaterialTransactionDto>> GetByOrderNumber(string orderNumber)
{
return await context.MaterialTransactions.Where(x => x.RefNum == orderNumber).OrderByDescending(x => x.TransDate)
.Select(x => mapper.Map<MaterialTransactionDto>(x)).ToListAsync();
}
public async Task<IEnumerable<MaterialTransactionDto>> GetOrderNumbersByWz(ISet<string> wzNumbers)
{
if (!wzNumbers.Any())
return [];
var wzNumbersList = string.Join(",", wzNumbers.Select(w => $"'{w}'"));
var sql = $@"
SELECT z.*
FROM ZPL_InternalNum_Matltran z
WHERE z.MTGroupNum <> ''
AND z.MTGroupNum IN ({wzNumbersList})";
IList<MaterialTransaction> result = await context.MaterialTransactions
.FromSqlRaw(sql)
.AsNoTracking()
.ToListAsync();
return result.Select(x => mapper.Map<MaterialTransactionDto>(x));
}
public async Task<IEnumerable<MaterialTransactionDto>> GetByCustomerNumber(string customerNumber, int customerSequence)
{
IList<string> coNumbers = await context.CustomerOrders
.Where(x => x.CustNum == customerNumber && x.CustSeq == customerSequence && (x.Stat == "P" || x.Stat == "O"))
.Select(x => x.CoNum).ToListAsync();
List<MaterialTransactionDto> result = new List<MaterialTransactionDto>();
foreach (string coNumber in coNumbers)
{
IEnumerable<MaterialTransactionDto> materialTransactions = await GetByOrderNumber(coNumber);
result.AddRange(materialTransactions);
}
return result.OrderByDescending(x => x.CreateDate);
}
public async Task<MaterialTransactionDto?> GetByPartNumber(string partNumber)
{
return await context.MaterialTransactions
.Where(x => x.NR_KARTY_KONTROLNEJ == partNumber)
.Select(x => mapper.Map<MaterialTransactionDto>(x)).FirstOrDefaultAsync();
}
public async Task<IEnumerable<MaterialTransactionDto>> GetWithPartNumber()
{
return await context.MaterialTransactions
.Where(x => x.NR_KARTY_KONTROLNEJ != null)
.Select(x => mapper.Map<MaterialTransactionDto>(x)).ToListAsync();
}
}