111 lines
5.5 KiB
C#
111 lines
5.5 KiB
C#
using AutoMapper;
|
|
using Microsoft.Data.SqlClient;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using System.Data;
|
|
using SytelineSaAppEfDataModel.Dtos;
|
|
using SytelineSaAppEfDataModel.Entities;
|
|
|
|
namespace SytelineSaAppEfDataModel.Services
|
|
{
|
|
public class EdiCustomerOrderService(SytelineSaAppDbContext context, IMapper mapper) : IEdiCustomerOrderService
|
|
{
|
|
public async Task<IEnumerable<EdiCustomerOrderDto>> GetAll()
|
|
{
|
|
IList<EdiCustomerOrderTranslateDto> ediCustomerOrderTranslates = await context.EdiCustomerOrderTranslates
|
|
.Select(x => mapper.Map<EdiCustomerOrderTranslateDto>(x)).ToListAsync();
|
|
|
|
IList<EdiCustomerOrderDto> ediCustomerOrders =
|
|
await context.EdiCustomerOrders.Select(x => mapper.Map<EdiCustomerOrderDto>(x)).ToListAsync();
|
|
|
|
IDictionary<string, List<EdiCustomerOrderTranslateDto>> ediTranslatesByCoNumber = ediCustomerOrderTranslates
|
|
.GroupBy(x => x.EdiCoCoNum).ToDictionary(x => x.Key, y => y.ToList());
|
|
|
|
foreach (EdiCustomerOrderDto ediCustomerOrder in ediCustomerOrders)
|
|
{
|
|
if (!ediTranslatesByCoNumber.TryGetValue(ediCustomerOrder.CustomerOrderNumber,
|
|
out List<EdiCustomerOrderTranslateDto>? customerOrderTranslates)) continue;
|
|
|
|
customerOrderTranslates = customerOrderTranslates.OrderByDescending(x => x.CreatedDate).ToList();
|
|
ediCustomerOrder.EdiCustomerOrderTranslates = customerOrderTranslates;
|
|
}
|
|
|
|
return ediCustomerOrders;
|
|
}
|
|
|
|
public async Task<IEnumerable<EdiCustomerOrderDto?>> GetByDate(DateTime date)
|
|
{
|
|
IList<EdiCustomerOrderDto?> customerOrders = new List<EdiCustomerOrderDto?>();
|
|
|
|
IList<Guid> orderNumbers = await context.EdiCustomerOrders.Where(x => x.CreateDate > date)
|
|
.Select(x => x.RowPointer).ToListAsync();
|
|
|
|
foreach (Guid orderNumber in orderNumbers)
|
|
{
|
|
customerOrders.Add(await GetByOrderNumber(orderNumber));
|
|
}
|
|
|
|
return customerOrders;
|
|
}
|
|
|
|
public async Task<EdiCustomerOrderDto?> GetByOrderNumber(Guid customerOrderNumber)
|
|
{
|
|
EdiCustomerOrderDto ediCustomerOrder = mapper.Map<EdiCustomerOrderDto>(
|
|
await context.EdiCustomerOrders.FirstOrDefaultAsync(x => x.RowPointer == customerOrderNumber));
|
|
|
|
if (ediCustomerOrder == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
IList<EdiCustomerOrderLineDto> ediCustomerOrderLines = await context.EdiCustomerOrderLines
|
|
.Where(x => x.CustomerOrderNumber == ediCustomerOrder.CustomerOrderNumber)
|
|
.Select(x => mapper.Map<EdiCustomerOrderLineDto>(x)).ToListAsync();
|
|
|
|
foreach (EdiCustomerOrderLineDto ediCustomerOrderLine in ediCustomerOrderLines)
|
|
{
|
|
ediCustomerOrderLine.EdiCustomerOrderLineItems = await context.EdiCustomerOrderLineItems
|
|
.Where(x => x.CustomerOrderNumber == ediCustomerOrder.CustomerOrderNumber &&
|
|
x.CustomerOrderLine == ediCustomerOrderLine.CustomerOrderLine)
|
|
.Select(x => mapper.Map<EdiCustomerOrderLineItemDto>(x)).ToListAsync();
|
|
}
|
|
|
|
IList<EdiCustomerOrderTranslateDto> ediCustomerOrderTranslates = await context.EdiCustomerOrderTranslates
|
|
.Where(x => x.EdiCoCoNum == ediCustomerOrder.CustomerOrderNumber)
|
|
.Select(x => mapper.Map<EdiCustomerOrderTranslateDto>(x)).ToListAsync();
|
|
|
|
ediCustomerOrder.EdiCustomerOrderLines = ediCustomerOrderLines;
|
|
ediCustomerOrder.EdiCustomerOrderTranslates = ediCustomerOrderTranslates;
|
|
|
|
return ediCustomerOrder;
|
|
}
|
|
|
|
public async Task<int> SendOrderToSyteline(Guid customerOrderNumber)
|
|
{
|
|
EdiCustomerOrder? ediCustomerOrder = await context.EdiCustomerOrders.FirstOrDefaultAsync(x => x.RowPointer == customerOrderNumber);
|
|
|
|
if (ediCustomerOrder == null) return 0;
|
|
|
|
var ediCoNum = new SqlParameter("@PEdiCoNum", SqlDbType.NVarChar, 50) { Value = ediCustomerOrder.CustomerOrderNumber };
|
|
var ediCoCount = new SqlParameter("@PEdiCoCount", SqlDbType.Int) { Value = 0, Direction = ParameterDirection.Output };
|
|
var postedCount = new SqlParameter("@PPostedCount", SqlDbType.Int) { Value = 0, Direction = ParameterDirection.Output };
|
|
var infoBar = new SqlParameter("@Infobar", SqlDbType.NVarChar, 2800) { Value = "", Direction = ParameterDirection.Output };
|
|
var autoPost = new SqlParameter("@AutoPost", SqlDbType.Int) { Value = 0 };
|
|
var processId = new SqlParameter("@ProcessId", SqlDbType.Int) { Value = 423456 };
|
|
|
|
await context.Database.ExecuteSqlRawAsync(
|
|
"EXEC [dbo].[FKR_EDI_EXTGEN_EdiInOrderPSp] @PEdiCoNum, @PEdiCoCount OUT, @PPostedCount OUT, @Infobar OUT, @AutoPost, @ProcessId",
|
|
ediCoNum, ediCoCount, postedCount, infoBar, autoPost, processId);
|
|
|
|
string? infoBarResult = infoBar.Value?.ToString();
|
|
int ediCoCountResult = Convert.ToInt32(ediCoCount.Value);
|
|
int postedCountResult = Convert.ToInt32(postedCount.Value);
|
|
|
|
Console.WriteLine($"EDI Co Num: {infoBarResult}");
|
|
Console.WriteLine($"EDI Co Count: {ediCoCountResult}");
|
|
Console.WriteLine($"Posted Count: {postedCountResult}");
|
|
|
|
return postedCountResult;
|
|
}
|
|
}
|
|
}
|