81 lines
4.9 KiB
C#
81 lines
4.9 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using ComplianceNFs.Core.Entities;
|
|
using ComplianceNFs.Core.Ports;
|
|
using Npgsql;
|
|
using Newtonsoft.Json;
|
|
using System.Numerics;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace ComplianceNFs.Infrastructure.Repositories
|
|
{
|
|
// Placeholder: fill in actual SQL and mapping logic
|
|
public class AttachmentRepository(string connectionString, ILogger<AttachmentRepository> logger) : IAttachmentRepository
|
|
{
|
|
public async Task SaveRawAsync(EnergyInvoice invoice)
|
|
{
|
|
try
|
|
{
|
|
using var conn = new NpgsqlConnection(connectionString);
|
|
await conn.OpenAsync();
|
|
var cmd = conn.CreateCommand();
|
|
cmd.CommandText = @"INSERT INTO attachments (
|
|
filename, supplier_email, conversation_id, received_date, md5, cnpj_comp, cnpj_vend, mont_nf, prec_nf, valor_sem_imp, valor_com_imp, rs_comp, rs_vend, numero_nf, icms_nf, uf_comp, uf_vend, matched_cod_te, status, discrepancy, metadata
|
|
) VALUES (
|
|
@filename, @supplier_email, @conversation_id, @received_date, @md5, @cnpj_comp, @cnpj_vend, @mont_nf, @prec_nf, @valor_sem_imp, @valor_com_imp, @rs_comp, @rs_vend, @numero_nf, @icms_nf, @uf_comp, @uf_vend, @matched_cod_te, @status, @discrepancy, @metadata
|
|
)";
|
|
cmd.Parameters.AddWithValue("@filename", invoice.Filename);
|
|
cmd.Parameters.AddWithValue("@supplier_email", invoice.SupplierEmail);
|
|
cmd.Parameters.AddWithValue("@conversation_id", (object?)invoice.ConversationId ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@received_date", invoice.ReceivedDate);
|
|
cmd.Parameters.AddWithValue("@md5", (object?)invoice.Md5 ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@cnpj_comp", (object?)invoice.CnpjComp ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@cnpj_vend", (object?)invoice.CnpjVend ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@mont_nf", (object?)invoice.MontNF ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@prec_nf", (object?)invoice.PrecNF ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@valor_sem_imp", (object?)invoice.ValorSemImpostos ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@valor_com_imp", (object?)invoice.ValorFinalComImpostos ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@rs_comp", (object?)invoice.RsComp ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@rs_vend", (object?)invoice.RsVend ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@numero_nf", (object?)invoice.NumeroNF ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@icms_nf", (object?)invoice.IcmsNF ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@uf_comp", (object?)invoice.UfComp ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@uf_vend", (object?)invoice.UfVend ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@matched_cod_te", (object?)invoice.MatchedCodTE ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@status", invoice.Status.ToString());
|
|
cmd.Parameters.AddWithValue("@discrepancy", (object?)invoice.DiscrepancyNotes ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@metadata", Newtonsoft.Json.JsonConvert.SerializeObject(invoice));
|
|
await cmd.ExecuteNonQueryAsync();
|
|
logger.LogInformation("Saved raw invoice {InvoiceId} to attachments table.", invoice.InvoiceId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.LogError(ex, "Error saving raw invoice {InvoiceId} to attachments table.", invoice.InvoiceId);
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task UpdateMatchAsync(int invoiceId, BigInteger matchedCodTE, InvoiceStatus status, string notes)
|
|
{
|
|
try
|
|
{
|
|
using var conn = new NpgsqlConnection(connectionString);
|
|
await conn.OpenAsync();
|
|
var cmd = conn.CreateCommand();
|
|
cmd.CommandText = @"UPDATE attachments SET matched_cod_te = @matched_cod_te, status = @status, discrepancy = @discrepancy WHERE invoice_id = @invoice_id";
|
|
cmd.Parameters.AddWithValue("@matched_cod_te", matchedCodTE);
|
|
cmd.Parameters.AddWithValue("@status", status.ToString());
|
|
cmd.Parameters.AddWithValue("@discrepancy", (object?)notes ?? DBNull.Value);
|
|
cmd.Parameters.AddWithValue("@invoice_id", invoiceId);
|
|
await cmd.ExecuteNonQueryAsync();
|
|
logger.LogInformation("Updated match for invoice {InvoiceId}.", invoiceId);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.LogError(ex, "Error updating match for invoice {InvoiceId}.", invoiceId);
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|