- Created ComplianceNFs.Core project with domain entities and ports - Implemented BuyingRecord, EnergyInvoice, ParsedInvoice entities - Defined domain interfaces for mail listening, XML and PDF parsing, and repository access - Established ComplianceNFs.Infrastructure project with file archiving, mail listening, and data access implementations - Developed PDF and XML parsers for invoice data extraction - Set up AccessDbRepository and AttachmentRepository for data retrieval and storage - Created ComplianceNFs.Service project for background processing and service orchestration - Implemented Worker service for periodic tasks - Established ComplianceNFs.Monitor project with WPF UI for monitoring invoice statuses - Added ViewModel for UI data binding and command handling - Configured project files for .NET 9.0 and necessary package references - Created initial appsettings.json for configuration management - Added TODOs and roadmap for future development
71 lines
4.2 KiB
C#
71 lines
4.2 KiB
C#
using System;
|
|
using System.Threading.Tasks;
|
|
using ComplianceNFs.Core.Entities;
|
|
using ComplianceNFs.Core.Ports;
|
|
using Npgsql;
|
|
using Newtonsoft.Json;
|
|
|
|
namespace ComplianceNFs.Infrastructure.Repositories
|
|
{
|
|
// Placeholder: fill in actual SQL and mapping logic
|
|
public class AttachmentRepository : IAttachmentRepository
|
|
{
|
|
private readonly string _connectionString;
|
|
public AttachmentRepository(string connectionString)
|
|
{
|
|
_connectionString = connectionString;
|
|
}
|
|
|
|
public async Task SaveRawAsync(EnergyInvoice invoice)
|
|
{
|
|
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", invoice.Md5);
|
|
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", invoice.MontNF);
|
|
cmd.Parameters.AddWithValue("@prec_nf", invoice.PrecNF);
|
|
cmd.Parameters.AddWithValue("@valor_sem_imp", invoice.ValorSemImpostos);
|
|
cmd.Parameters.AddWithValue("@valor_com_imp", invoice.ValorFinalComImpostos);
|
|
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", invoice.IcmsNF);
|
|
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();
|
|
}
|
|
}
|
|
|
|
public async Task UpdateMatchAsync(int invoiceId, int matchedCodTE, InvoiceStatus status, string notes)
|
|
{
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
}
|