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)); } public async Task> GetByCustomerNumber(string customerNumber, int customerSequence) { IList coNumbers = await context.CustomerOrders .Where(x => x.CustNum == customerNumber && x.CustSeq == customerSequence && (x.Stat == "P" || x.Stat == "O")) .Select(x => x.CoNum).ToListAsync(); List result = new List(); foreach (string coNumber in coNumbers) { IEnumerable materialTransactions = await GetByOrderNumber(coNumber); result.AddRange(materialTransactions); } return result.OrderByDescending(x => x.CreateDate); } public async Task GetByPartNumber(string partNumber) { return await context.MaterialTransactions .Where(x => x.NR_KARTY_KONTROLNEJ == partNumber) .Select(x => mapper.Map(x)).FirstOrDefaultAsync(); } }