- Alterado namespace para `Download_Faturas.Tests` e adicionados cabeçalhos de copyright. - Refatoração para uso de recursos modernos do C# (ex.: inicializações simplificadas, métodos estáticos). - Adicionados comentários XML e arquivo `stylecop.json` para padronização. - Melhorias em testes de integração, incluindo ajustes na lógica de comparação e manipulação de CSV. - Refatoração das classes `Fatura` e `FaturaOld` para encapsulamento e redução de duplicação. - Adicionado suporte a conversores JSON personalizados (`DefaultDateTimeConverter`, `FloatArrayOrSingleConverter`). - Melhorias no arquivo `Program.cs` com novos métodos auxiliares e tratamento de erros. - Adicionadas classes auxiliares para manipulação de PDFs (`PDFSplitter`, `CustomPdfSplitter`). - Ajustes nos arquivos de projeto para geração de documentação XML e inclusão do `StyleCop.Analyzers`. - Correções em valores de consumo e demanda nos arquivos CSV. - Melhor tratamento de erros e mensagens de log para facilitar o diagnóstico.
159 lines
8.0 KiB
C#
159 lines
8.0 KiB
C#
// <copyright file="Program.cs" company="Smart Energia">
|
|
// Copyright (c) Smart Energia. All rights reserved.
|
|
// </copyright>
|
|
|
|
namespace Download_Faturas
|
|
{
|
|
using System.Data.OleDb;
|
|
using System.Globalization;
|
|
using System.Net.Http.Headers;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Text.RegularExpressions;
|
|
|
|
/// <summary>
|
|
/// Main program class for processing invoices.
|
|
/// </summary>
|
|
public class Program
|
|
{
|
|
#if DEBUG
|
|
/// <summary>
|
|
/// Path to the log file for invoices.
|
|
/// </summary>
|
|
public const string LogFaturas = @"X:\Back\Carteira x.x\4Docs\import.txt";
|
|
|
|
/// <summary>
|
|
/// Path to the secondary log file for invoices.
|
|
/// </summary>
|
|
public const string LogFaturas2 = @"X:\Back\Carteira x.x\4Docs\import2.txt";
|
|
#else
|
|
public const String LogFaturas = "import.txt";
|
|
public const String LogFaturas2 = "import2.txt";
|
|
#endif
|
|
|
|
/// <summary>
|
|
/// Path to the database file.
|
|
/// </summary>
|
|
public const string CaminhoDB = "X:/Middle/Informativo Setorial/Modelo Word/BD1_dados cadastrais e faturas.accdb";
|
|
private static readonly HttpClient HttpClient = new ();
|
|
private static readonly StreamReader Sr = new (LogFaturas);
|
|
private static readonly StreamWriter Sw = new (LogFaturas2);
|
|
private static string? fatura;
|
|
|
|
/// <summary>
|
|
/// Main entry point of the program.
|
|
/// </summary>
|
|
public static void Main()
|
|
{
|
|
// Abre a conexao com o banco de dados
|
|
using (OleDbConnection conn = new (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + CaminhoDB + ";Jet OLEDB:Database Password=gds21"))
|
|
{
|
|
conn.Open();
|
|
|
|
// Loop entre as faturas pendentes
|
|
while ((fatura = Sr.ReadLine()) != null)
|
|
{
|
|
string fatura_ID = fatura.Split(",")[0];
|
|
string fatura_status = fatura.Split(",")[1];
|
|
string fatura_arquivo = fatura.Split(",")[2];
|
|
|
|
// Verifica se a fatura foi processada e atualiza os valores para banco de dados
|
|
if (fatura_status == "DELAYED" | fatura_status == "MULTACTIONABLE" | fatura_status == "ACTIONABLE" | fatura_status == string.Empty | fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD" | fatura_status == "PREPROCESS")
|
|
{
|
|
if (fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD" && !File.Exists(fatura_arquivo))
|
|
{
|
|
Sw.WriteLine(fatura_ID + "," + "ARQUIVO NÃO LOCALIZADO" + "," + fatura_arquivo);
|
|
Console.WriteLine(fatura_ID + "," + "ARQUIVO NÃO LOCALIZADO" + "," + fatura_arquivo);
|
|
}
|
|
else
|
|
{
|
|
// Verifica se a fatura foi processada e atualiza os valores para o banco de dados
|
|
Fatura fatura = new (fatura_ID, fatura_arquivo, HttpClient);
|
|
|
|
if (fatura.Status == "SUCCESS" & !fatura.Agrupada)
|
|
{
|
|
fatura.Processar(conn);
|
|
try
|
|
{
|
|
fatura.Mover(separar: false);
|
|
Sw.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura.Arquivo);
|
|
Console.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura.Arquivo);
|
|
}
|
|
catch (FileNotFoundException)
|
|
{
|
|
Sw.WriteLine(fatura_ID + "," + "ARQUIVO NÃO LOCALIZADO" + "," + fatura.Arquivo);
|
|
Console.WriteLine(fatura_ID + "," + "ARQUIVO NÃO LOCALIZADO" + "," + fatura.Arquivo);
|
|
}
|
|
}
|
|
else if (fatura.Status == "SUCCESS" & fatura.Agrupada)
|
|
{
|
|
foreach (JsonElement individual_ID in fatura.Agrupada_children)
|
|
{
|
|
Fatura faturaIndividual = new (individual_ID.ToString(), fatura_arquivo, HttpClient);
|
|
|
|
if (faturaIndividual.Status == "SUCCESS")
|
|
{
|
|
faturaIndividual.Processar(conn);
|
|
try
|
|
{
|
|
faturaIndividual.Mover(separar: true);
|
|
Sw.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + faturaIndividual.Arquivo);
|
|
Console.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + faturaIndividual.Arquivo);
|
|
}
|
|
catch (FileNotFoundException)
|
|
{
|
|
Sw.WriteLine(individual_ID.ToString() + "," + "ARQUIVO NÃO LOCALIZADO" + "," + faturaIndividual.Arquivo);
|
|
Console.WriteLine(individual_ID.ToString() + "," + "ARQUIVO NÃO LOCALIZADO" + "," + faturaIndividual.Arquivo);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
faturaIndividual.Mover(separar: true);
|
|
Sw.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + faturaIndividual.Arquivo);
|
|
Console.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + faturaIndividual.Arquivo);
|
|
}
|
|
catch (FileNotFoundException)
|
|
{
|
|
Sw.WriteLine(individual_ID.ToString() + "," + "ARQUIVO NÃO LOCALIZADO" + "," + faturaIndividual.Arquivo);
|
|
Console.WriteLine(individual_ID.ToString() + "," + "ARQUIVO NÃO LOCALIZADO" + "," + faturaIndividual.Arquivo);
|
|
}
|
|
}
|
|
}
|
|
|
|
fatura.Arquivo!.Delete();
|
|
}
|
|
else if (fatura.Status == "INVALID")
|
|
{
|
|
try
|
|
{
|
|
fatura.Mover(separar: false);
|
|
}
|
|
catch (FileNotFoundException)
|
|
{
|
|
Sw.WriteLine(fatura_ID + "," + "ARQUIVO NÃO LOCALIZADO" + "," + fatura.Arquivo);
|
|
Console.WriteLine(fatura_ID + "," + "ARQUIVO NÃO LOCALIZADO" + "," + fatura.Arquivo);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Sw.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura_arquivo);
|
|
Console.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura_arquivo);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Sw.WriteLine(fatura);
|
|
Console.WriteLine(fatura);
|
|
}
|
|
}
|
|
|
|
Sr.Close();
|
|
Sw.Close();
|
|
File.Move(LogFaturas2, LogFaturas, true);
|
|
}
|
|
}
|
|
}
|
|
} |