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> GetAll() { return await context.MaterialTransactions.Select(x => mapper.Map(x)).ToListAsync(); } public async Task GetByWzNumber(string wzNumber) { return await context.MaterialTransactions .Where(x => x.MTGroupNum == wzNumber) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); } public async Task> GetByWzNumbers(ISet wzNumbers) { if (!wzNumbers.Any()) return Enumerable.Empty(); 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 result = await context.MaterialTransactions .FromSqlRaw(sql) .AsNoTracking() .ToListAsync(); return result.Select(mapper.Map); } public async Task> GetByOrderNumber(string orderNumber) { return await context.MaterialTransactions.Where(x => x.RefNum == orderNumber).OrderByDescending(x => x.TransDate) .Select(x => mapper.Map(x)).ToListAsync(); } public async Task> GetOrderNumbersByWz(ISet 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 result = await context.MaterialTransactions .FromSqlRaw(sql) .AsNoTracking() .ToListAsync(); return result.Select(x => mapper.Map(x)); } }