112 lines
5.8 KiB
C#
112 lines
5.8 KiB
C#
using Microsoft.Data.SqlClient;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Logging;
|
|
using MotoresArgentinosV2.Core.Entities;
|
|
using MotoresArgentinosV2.Core.Interfaces;
|
|
using MotoresArgentinosV2.Infrastructure.Data;
|
|
|
|
namespace MotoresArgentinosV2.Infrastructure.Services;
|
|
|
|
/// <summary>
|
|
/// Implementación del servicio para interactuar con datos legacy de operaciones
|
|
/// Utiliza AutosDbContext para acceder a tablas y ejecutar SPs de la DB 'autos'
|
|
/// </summary>
|
|
public class OperacionesLegacyService : IOperacionesLegacyService
|
|
{
|
|
private readonly AutosDbContext _context;
|
|
private readonly ILogger<OperacionesLegacyService> _logger;
|
|
|
|
public OperacionesLegacyService(AutosDbContext context, ILogger<OperacionesLegacyService> logger)
|
|
{
|
|
_context = context;
|
|
_logger = logger;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Ejecuta el SP sp_inserta_operaciones para registrar un pago
|
|
/// </summary>
|
|
public async Task<bool> InsertarOperacionAsync(Operacion operacion)
|
|
{
|
|
try
|
|
{
|
|
_logger.LogInformation("Ejecutando sp_inserta_operaciones para operación: {Noperacion}", operacion.Noperacion);
|
|
|
|
// Preparar parámetros asegurando manejo de nulos
|
|
var parameters = new[]
|
|
{
|
|
new SqlParameter("@fecha", operacion.Fecha ?? (object)DBNull.Value),
|
|
new SqlParameter("@Motivo", operacion.Motivo ?? (object)DBNull.Value),
|
|
new SqlParameter("@Moneda", operacion.Moneda ?? (object)DBNull.Value),
|
|
new SqlParameter("@Direccionentrega", operacion.Direccionentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@Validaciondomicilio", operacion.Validaciondomicilio ?? (object)DBNull.Value),
|
|
new SqlParameter("@codigopedido", operacion.Codigopedido ?? (object)DBNull.Value),
|
|
new SqlParameter("@nombreentrega", operacion.Nombreentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@fechahora", operacion.Fechahora ?? (object)DBNull.Value),
|
|
new SqlParameter("@telefonocomprador", operacion.Telefonocomprador ?? (object)DBNull.Value),
|
|
new SqlParameter("@barrioentrega", operacion.Barrioentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@codautorizacion", operacion.Codautorizacion ?? (object)DBNull.Value),
|
|
new SqlParameter("@paisentrega", operacion.Paisentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@cuotas", operacion.Cuotas ?? (object)DBNull.Value),
|
|
new SqlParameter("@validafechanac", operacion.Validafechanac ?? (object)DBNull.Value),
|
|
new SqlParameter("@validanrodoc", operacion.Validanrodoc ?? (object)DBNull.Value),
|
|
new SqlParameter("@titular", operacion.Titular ?? (object)DBNull.Value),
|
|
new SqlParameter("@pedido", operacion.Pedido ?? (object)DBNull.Value),
|
|
new SqlParameter("@zipentrega", operacion.Zipentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@monto", operacion.Monto ?? (object)DBNull.Value),
|
|
new SqlParameter("@tarjeta", operacion.Tarjeta ?? (object)DBNull.Value),
|
|
new SqlParameter("@fechaentrega", operacion.Fechaentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@emailcomprador", operacion.Emailcomprador ?? (object)DBNull.Value),
|
|
new SqlParameter("@validanropuerta", operacion.Validanropuerta ?? (object)DBNull.Value),
|
|
new SqlParameter("@ciudadentrega", operacion.Ciudadentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@validatipodoc", operacion.Validatipodoc ?? (object)DBNull.Value),
|
|
new SqlParameter("@noperacion", operacion.Noperacion ?? (object)DBNull.Value),
|
|
new SqlParameter("@estadoentrega", operacion.Estadoentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@resultado", operacion.Resultado ?? (object)DBNull.Value),
|
|
new SqlParameter("@mensajeentrega", operacion.Mensajeentrega ?? (object)DBNull.Value),
|
|
new SqlParameter("@precio", operacion.Precioneto ?? 0) // El SP espera int
|
|
};
|
|
|
|
await _context.Database.ExecuteSqlRawAsync(
|
|
"EXEC dbo.sp_inserta_operaciones @fecha, @Motivo, @Moneda, @Direccionentrega, " +
|
|
"@Validaciondomicilio, @codigopedido, @nombreentrega, @fechahora, @telefonocomprador, " +
|
|
"@barrioentrega, @codautorizacion, @paisentrega, @cuotas, @validafechanac, @validanrodoc, " +
|
|
"@titular, @pedido, @zipentrega, @monto, @tarjeta, @fechaentrega, @emailcomprador, " +
|
|
"@validanropuerta, @ciudadentrega, @validatipodoc, @noperacion, @estadoentrega, " +
|
|
"@resultado, @mensajeentrega, @precio",
|
|
parameters);
|
|
|
|
_logger.LogInformation("Operación registrada correctamente: {Noperacion}", operacion.Noperacion);
|
|
return true;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error al insertar operación: {Noperacion}", operacion.Noperacion);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task<List<Operacion>> ObtenerOperacionesPorNumeroAsync(string noperacion)
|
|
{
|
|
return await _context.Operaciones
|
|
.AsNoTracking()
|
|
.Where(o => o.Noperacion == noperacion)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<List<Operacion>> ObtenerOperacionesPorFechasAsync(DateTime fechaInicio, DateTime fechaFin)
|
|
{
|
|
return await _context.Operaciones
|
|
.AsNoTracking()
|
|
.Where(o => o.Fecha >= fechaInicio && o.Fecha <= fechaFin)
|
|
.OrderByDescending(o => o.Fecha)
|
|
.ToListAsync();
|
|
}
|
|
|
|
public async Task<List<MedioDePago>> ObtenerMediosDePagoAsync()
|
|
{
|
|
return await _context.MediosDePago
|
|
.AsNoTracking()
|
|
.ToListAsync();
|
|
}
|
|
}
|