Criando a Class Fatura

This commit is contained in:
Adriano Serighelli 2023-05-03 11:43:56 -03:00
parent 5189f34e67
commit 88bbb6e095
6 changed files with 586 additions and 145 deletions

View File

@ -9,6 +9,10 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Data.OleDb" Version="7.0.0" /> <PackageReference Include="System.Data.OleDb" Version="7.0.0" />
<PackageReference Include="System.Text.Json" Version="7.0.2" /> <PackageReference Include="System.Text.Json" Version="7.0.2" />
</ItemGroup> </ItemGroup>

View File

@ -0,0 +1,9 @@
// This file is used by Code Analysis to maintain SuppressMessage
// attributes that are applied to this project.
// Project-level suppressions either have no target or are given
// a specific target and scoped to a namespace, type, member, etc.
using System.Diagnostics.CodeAnalysis;
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Reviewed.")]
[assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1633:File should have header", Justification = "<Pendente>")]

View File

@ -1,83 +1,85 @@
using System.Text; namespace Download_Faturas
using System.Net.Http.Headers;
using System.Text.Json;
using System.Web;
using System.Text.RegularExpressions;
using System.IO;
using System.Data.OleDb;
using System.Globalization;
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;
public class Program public class Program
{ {
#if DEBUG #if DEBUG
public const String log_faturas = @"X:\Back\Carteira x.x\4Docs\import.txt"; public const string LogFaturas = @"X:\Back\Carteira x.x\4Docs\import.txt";
public const String log_faturas2 = @"X:\Back\Carteira x.x\4Docs\import2.txt"; public const string LogFaturas2 = @"X:\Back\Carteira x.x\4Docs\import2.txt";
#else #else
public const String log_faturas = "import.txt"; public const String LogFaturas = "import.txt";
public const String log_faturas2 = "import2.txt"; public const String LogFaturas2 = "import2.txt";
#endif #endif
public const string caminho_DB = "X:/Middle/Informativo Setorial/Modelo Word/BD1_dados cadastrais e faturas.accdb"; public const string CaminhoDB = "X:/Middle/Informativo Setorial/Modelo Word/BD1_dados cadastrais e faturas.accdb";
private static HttpClient httpClient = new HttpClient(); private static HttpClient httpClient = new HttpClient();
private static OleDbConnection conn = new(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + caminho_DB + ";Jet OLEDB:Database Password=gds21"); private static OleDbConnection conn = new (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + CaminhoDB + ";Jet OLEDB:Database Password=gds21");
private static OleDbCommand cmd = new(); private static OleDbCommand cmd = new ();
private static StreamReader sr = new StreamReader(log_faturas); private static StreamReader sr = new StreamReader(LogFaturas);
private static StreamWriter sw = new StreamWriter(log_faturas2); private static StreamWriter sw = new StreamWriter(LogFaturas2);
private static string? fatura; private static string? fatura;
public static async Task Main() public static void Main()
{ {
//Abre a conexao com o banco de dados // Abre a conexao com o banco de dados
conn.Open(); conn.Open();
cmd.Connection = conn; cmd.Connection = conn;
//Loop entre as faturas pendentes // Loop entre as faturas pendentes
while ((fatura = sr.ReadLine()) != null) while ((fatura = sr.ReadLine()) != null)
{ {
string fatura_ID = fatura.Split(",")[0]; string fatura_ID = fatura.Split(",")[0];
string fatura_status = fatura.Split(",")[1]; string fatura_status = fatura.Split(",")[1];
string fatura_arquivo = fatura.Split(",")[2]; string fatura_arquivo = fatura.Split(",")[2];
//Verifica se a fatura foi processada e atualiza os valores para banco de dados // Verifica se a fatura foi processada e atualiza os valores para banco de dados
if (fatura_status == "DELAYED" | fatura_status == "ACTIONABLE" | fatura_status == "" | fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD") if (fatura_status == "DELAYED" | fatura_status == "ACTIONABLE" | fatura_status == string.Empty | fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD")
{ {
string token = "UFY4VWzqcHYcGNd0gkBOMFL9G5ZThV6gXBQIJ79F5HSqITzavz4Fe7iXvAbJLvZJ"; // Verifica se a fatura foi processada e atualiza os valores para o banco de dados
//token = await req_token(); Fatura fatura = new Fatura(fatura_ID, fatura_arquivo, httpClient);
HttpResponseMessage response = await status(token, fatura_ID);
JsonElement result = JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement;
//Verifica se a fatura foi processada e atualiza os valores para o banco de dados // bool agrupada = fatura.Agrupada;
bool multiple = result.TryGetProperty("multiple", out var _); // string status = fatura.Status;
if (result.GetProperty("status").GetString() == "SUCCESS" & !multiple) if (fatura.Status == "SUCCESS" & !fatura.Agrupada)
{ {
fatura_status = processar_fatura(result, fatura_ID, fatura_arquivo).status; // (string? status, string? pasta_middle, string? uc, int mes) fatura_processamento = processar_fatura(result, fatura_ID, fatura_arquivo);
// fatura_status = fatura_processamento.status;
fatura.Processar(cmd);
sw.WriteLine(fatura_ID + "," + fatura_status + "," + fatura_arquivo); sw.WriteLine(fatura_ID + "," + fatura_status + "," + fatura_arquivo);
using () ;
// mover_fatura(fatura_processamento, fatura_arquivo);
} }
else if (result.GetProperty("status").GetString() == "SUCCESS" & multiple) else if (fatura.Status == "SUCCESS" & fatura.Agrupada)
{ {
var agrupadas_ID = result.GetProperty("children"); foreach (JsonElement individual_ID in fatura.Agrupada_children)
foreach (JsonElement individual_ID in agrupadas_ID.EnumerateArray())
{ {
HttpResponseMessage response_individual = await status(token, individual_ID.ToString()); Fatura faturaIndividual = new Fatura(individual_ID.ToString(), fatura_arquivo, httpClient);
JsonElement result_individual = JsonDocument.Parse(response_individual.Content.ReadAsStringAsync().Result).RootElement;
if (result_individual.GetProperty("status").GetString() == "SUCCESS") if (faturaIndividual.Status == "SUCCESS")
{ {
fatura_status = processar_fatura(result_individual, fatura_ID, fatura_arquivo).status; faturaIndividual.Processar(cmd);
sw.WriteLine(individual_ID.ToString() + "," + fatura_status + "," + fatura_arquivo); sw.WriteLine(individual_ID.ToString() + "," + fatura_status + "," + fatura_arquivo);
// mover fatura
} }
else else
{ {
sw.WriteLine(individual_ID.ToString() + "," + result_individual.GetProperty("status").GetString() + "," + fatura_arquivo); sw.WriteLine(individual_ID.ToString() + "," + result_individual.GetProperty("status").GetString() + "," + fatura_arquivo);
// mover fatura
} }
} }
} }
else else
{ {
sw.WriteLine(fatura_ID + "," + result.GetProperty("status").GetString() + "," + fatura_arquivo); sw.WriteLine(fatura_ID + "," + result.GetProperty("status").GetString() + "," + fatura_arquivo);
// mover fatura
} }
} }
else else
@ -85,26 +87,26 @@ namespace Download_Faturas
sw.WriteLine(fatura); sw.WriteLine(fatura);
} }
} }
conn.Close(); conn.Close();
sr.Close(); sr.Close();
sw.Close(); sw.Close();
File.Move(log_faturas2, log_faturas, true); File.Move(LogFaturas2, LogFaturas, true);
} }
public static (string status, string fatura_arquivo) processar_fatura(JsonElement result, string fatura_ID, string fatura_arquivo)
{
//Variavel para armazenar os dados a serem lancados para a TUSD no BD
recordSet dadosTusd = new();
//Resultado da fatura processada /*public static (string? status, string? pasta_middle, string? uc, int mes) processar_fatura(JsonElement result, string fatura_ID, string fatura_arquivo)
{
// Variavel para armazenar os dados a serem lancados para a TUSD no BD
recordSet dadosTusd = new ();
// Resultado da fatura processada
Rootobject parsedResult = JsonSerializer.Deserialize<Rootobject>(result.GetProperty("result")); Rootobject parsedResult = JsonSerializer.Deserialize<Rootobject>(result.GetProperty("result"));
dadosTusd.Mes = int.Parse(parsedResult.dates.reading.periodUntil.AddDays(-15).ToString("yMM")); dadosTusd.Mes = int.Parse(parsedResult.dates.reading.periodUntil.AddDays(-15).ToString("yMM"));
string uc = new Regex("^0+").Replace(parsedResult.locationNumber, ""); string uc = new Regex("^0+").Replace(parsedResult.locationNumber, string.Empty);
//Vinculo da fatura com os dados cadastrais
// Vinculo da fatura com os dados cadastrais
string selectSQL = $"SELECT COUNT (Cod_Smart_unidade) FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'"; string selectSQL = $"SELECT COUNT (Cod_Smart_unidade) FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'";
cmd.CommandText = selectSQL; cmd.CommandText = selectSQL;
@ -113,20 +115,22 @@ namespace Download_Faturas
if (unidades == 1) if (unidades == 1)
{ {
selectSQL = $"SELECT Cod_Smart_unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'"; selectSQL = $"SELECT Cod_Smart_unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'";
} }
else else
{ {
selectSQL = $"SELECT Cod_Smart_unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP FROM Dados_cadastrais WHERE (CNPJ_CPF LIKE '{parsedResult.customer.cnpj?.Substring(0, 8) ?? "NAN"}%' AND Codigo_Instalacao = '{uc}') OR (Razao_Social LIKE '{parsedResult.customer.name}' AND Codigo_Instalacao = '{uc}')"; selectSQL = $"SELECT Cod_Smart_unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE (CNPJ_CPF LIKE '{parsedResult.customer.cnpj?.Substring(0, 8) ?? "NAN"}%' AND Codigo_Instalacao = '{uc}') OR (Razao_Social LIKE '{parsedResult.customer.name}' AND Codigo_Instalacao = '{uc}')";
} }
cmd.CommandText = selectSQL; cmd.CommandText = selectSQL;
OleDbDataReader reader = cmd.ExecuteReader(); OleDbDataReader reader = cmd.ExecuteReader();
string pasta_faturas = "";
while (reader.Read()) while (reader.Read())
{ {
//Dados cadastrais // Dados cadastrais
dadosTusd.Cod_Smart_unidade = long.Parse(reader["Cod_Smart_unidade"].ToString()); dadosTusd.Cod_Smart_unidade = long.Parse(reader["Cod_Smart_unidade"].ToString());
dadosTusd.Perfil_CliqCCEE = reader["PerfilCCEE"].ToString(); dadosTusd.Perfil_CliqCCEE = reader["PerfilCCEE"].ToString();
dadosTusd.Submercado = reader["Submercado"].ToString(); dadosTusd.Submercado = reader["Submercado"].ToString();
@ -136,10 +140,12 @@ namespace Download_Faturas
dadosTusd.ICMS = float.Parse(reader["ICMS_TUSD"].ToString()); dadosTusd.ICMS = float.Parse(reader["ICMS_TUSD"].ToString());
dadosTusd.Dem_Cont_P = float.Parse(reader["Demanda_P"].ToString()); dadosTusd.Dem_Cont_P = float.Parse(reader["Demanda_P"].ToString());
dadosTusd.Dem_Cont_FP = float.Parse(reader["Demanda_FP"].ToString()); dadosTusd.Dem_Cont_FP = float.Parse(reader["Demanda_FP"].ToString());
pasta_faturas = reader["Caminho_NFs"].ToString();
} }
reader.Close(); reader.Close();
//Verifica se a fatura ja foi lançada // Verifica se a fatura ja foi lançada
selectSQL = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = {long.Parse(dadosTusd.Cod_Smart_unidade.ToString() + dadosTusd.Mes.ToString())}"; selectSQL = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = {long.Parse(dadosTusd.Cod_Smart_unidade.ToString() + dadosTusd.Mes.ToString())}";
cmd.CommandText = selectSQL; cmd.CommandText = selectSQL;
reader = cmd.ExecuteReader(); reader = cmd.ExecuteReader();
@ -147,11 +153,11 @@ namespace Download_Faturas
reader.Close(); reader.Close();
if (dadosTusd.Cod_Smart_unidade == 0) if (dadosTusd.Cod_Smart_unidade == 0)
{ {
return ("UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD",""); return ("UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD", pasta_faturas, uc, dadosTusd.Mes);
} }
else if (tusdLanc) else if (tusdLanc)
{ {
return ("FATURA DUPLICADA NO BD",""); return ("FATURA DUPLICADA NO BD", pasta_faturas, uc, dadosTusd.Mes);
} }
else else
{ {
@ -361,35 +367,380 @@ namespace Download_Faturas
cmd.CommandText = insertSQL.ToString(); cmd.CommandText = insertSQL.ToString();
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
} }
return ("FATURA INCLUIDA NO BD",""); return ("FATURA INCLUIDA NO BD", pasta_faturas, uc, dadosTusd.Mes);
}
}*/
/*public static void mover_fatura((string? status, string? pasta_middle, string? uc, int mes) fatura, string fatura_arquivo, bool multiple = false)
{
switch (fatura.status)
{
case "":
break;
case "a":
break;
case "b":
break;
} }
} }
public static async Task<string> req_token() */
}
class Fatura
{
/* A fatura deve ter alguma propriedades públicas: Local de origem, local de destino, Status do processamento
* Outras propriedas privadas: ID, Mes, agrupada, token, UC
*
*
*
*/
private string token = "UFY4VWzqcHYcGNd0gkBOMFL9G5ZThV6gXBQIJ79F5HSqITzavz4Fe7iXvAbJLvZJ";
private JsonElement faturaParsed;
public Fatura(string id, string fatura_path, HttpClient httpClient)
{
// Utilizado para gerar novo token
// this.token = Req_token(httpClient).ToString();
HttpResponseMessage fatura_response = this.GetStatus(httpClient, this.token, id);
if (fatura_response.IsSuccessStatusCode)
{
this.faturaParsed = JsonDocument.Parse(fatura_response.Content.ReadAsStringAsync().Result).RootElement;
this.Agrupada = this.faturaParsed.TryGetProperty("multiple", out var _);
this.Status = this.faturaParsed.GetProperty("status").GetString() !;
if (this.Agrupada)
{
this.Agrupada_children = this.faturaParsed.GetProperty("children").EnumerateArray();
}
}
}
public string? Status { get; private set; }
public string? Pasta_middle { get; private set; }
public string? UC { get; private set; }
public int Mes { get; private set; }
public bool Agrupada { get; private set; }
public JsonElement.ArrayEnumerator Agrupada_children { get; private set; }
public void Processar(OleDbCommand cmd)
{
// Variavel para armazenar os dados a serem lancados para a TUSD no BD
RecordSet dadosTusd = new ();
// Resultado da fatura processada
Rootobject parsedResult = JsonSerializer.Deserialize<Rootobject>(this.faturaParsed.GetProperty("result")) !;
dadosTusd.Mes = int.Parse(parsedResult.dates.reading.periodUntil.AddDays(-15).ToString("yMM"));
string uc = new Regex("^0+").Replace(parsedResult.locationNumber, string.Empty);
// Vinculo da fatura com os dados cadastrais
string selectSQL = $"SELECT COUNT (Cod_Smart_unidade) FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'";
cmd.CommandText = selectSQL;
var unidades = (int)cmd.ExecuteScalar();
if (unidades == 1)
{
selectSQL = $"SELECT Cod_Smart_unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE Codigo_Instalacao = '{uc}'";
}
else
{
selectSQL = $"SELECT Cod_Smart_unidade, PerfilCCEE, Submercado, Status_unidade, Grupo, Distribuidora, ICMS_TUSD, Demanda_P, Demanda_FP, Caminho_NFs FROM Dados_cadastrais WHERE (CNPJ_CPF LIKE '{parsedResult.customer.cnpj?.Substring(0, 8) ?? "NAN"}%' AND Codigo_Instalacao = '{uc}') OR (Razao_Social LIKE '{parsedResult.customer.name}' AND Codigo_Instalacao = '{uc}')";
}
cmd.CommandText = selectSQL;
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
// Dados cadastrais
dadosTusd.Cod_Smart_unidade = long.Parse(reader["Cod_Smart_unidade"].ToString());
dadosTusd.Perfil_CliqCCEE = reader["PerfilCCEE"].ToString();
dadosTusd.Submercado = reader["Submercado"].ToString();
dadosTusd.Ambiente = reader["Status_unidade"].ToString();
dadosTusd.Grupo = reader["Grupo"].ToString();
dadosTusd.Distribuidora = reader["Distribuidora"].ToString();
dadosTusd.ICMS = float.Parse(reader["ICMS_TUSD"].ToString());
dadosTusd.Dem_Cont_P = float.Parse(reader["Demanda_P"].ToString());
dadosTusd.Dem_Cont_FP = float.Parse(reader["Demanda_FP"].ToString());
this.Pasta_middle = reader["Caminho_NFs"].ToString();
}
reader.Close();
// Verifica se a fatura ja foi lançada
selectSQL = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = {long.Parse(dadosTusd.Cod_Smart_unidade.ToString() + dadosTusd.Mes.ToString())}";
cmd.CommandText = selectSQL;
reader = cmd.ExecuteReader();
bool tusdLanc = reader.HasRows;
reader.Close();
if (dadosTusd.Cod_Smart_unidade == 0)
{
this.Status = "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD";
this.UC = uc;
this.Mes = dadosTusd.Mes;
}
else if (tusdLanc)
{
this.Status = "FATURA DUPLICADA NO BD";
this.UC = uc;
this.Mes = dadosTusd.Mes;
}
else
{
// PIS e Cofins
string pisSQL = $"SELECT Distribuidoras_PIS.PIS, Distribuidoras_PIS.COFINS FROM Distribuidoras_geral INNER JOIN Distribuidoras_PIS ON Distribuidoras_geral.ID_dist = Distribuidoras_PIS.ID_dist WHERE Distribuidoras_PIS.Mes='{dadosTusd.Mes}' AND Distribuidoras_geral.Distribuidora='{dadosTusd.Distribuidora}'";
cmd.CommandText = pisSQL;
reader = cmd.ExecuteReader();
while (reader.Read())
{
// PIS e Cofins
dadosTusd.PIS = float.Parse(reader["PIS"].ToString());
dadosTusd.COFINS = float.Parse(reader["COFINS"].ToString());
}
reader.Close();
// Dados da fatura processada
dadosTusd.Cod_TUSD = long.Parse(dadosTusd.Cod_Smart_unidade.ToString() + dadosTusd.Mes.ToString());
dadosTusd.Perfil = parsedResult.tariffModality == "blue" ? "AZUL" : "VERDE";
dadosTusd.Valor = parsedResult.totalCharges;
dadosTusd.Inicio_Leitura = parsedResult.dates.reading.periodFrom;
dadosTusd.Fim_leitura = parsedResult.dates.reading.periodUntil;
dadosTusd.Hora_TUSD = DateTime.Now;
dadosTusd.Dem_Reativa_kvar = 0;
dadosTusd.Multa = 0;
dadosTusd.Credito = 0;
dadosTusd.Bandeira_RS_MWh = 0;
dadosTusd.FIC_DIC = 0;
dadosTusd.Enc_conexao = 0;
dadosTusd.Liminar_ICMS = 0;
dadosTusd.Outros = 0;
dadosTusd.Cred_livre = 0;
dadosTusd.Tempo_TUSD = 0;
dadosTusd.Lanc_aut = true;
dadosTusd.Rev_atual = true;
dadosTusd.Revisao = 0;
// Loop entre os dados faturados na fatura
int j = 0;
foreach (Item item in parsedResult.items)
{
switch (item.type, item.period)
{
// Energia Ponta
case ("energy", "peak"):
dadosTusd.Consumo_P = item.billed / 1000;
break;
// Energia Fora de Ponta
case ("energy", "off-peak"):
dadosTusd.Consumo_FP = item.billed / 1000;
break;
// Demanda Ponta
case ("demand", "peak"):
dadosTusd.Dem_Cont_P = item.contract == 0 ? dadosTusd.Dem_Cont_P : item.contract;
break;
// Demanda Fora de Ponta
case ("demand", "off-peak"):
dadosTusd.Dem_Cont_FP = item.contract == 0 ? dadosTusd.Dem_Cont_FP : item.contract;
break;
// Ilum. publica
case ("publicLighting", _):
dadosTusd.Ilum_Publica = item.charge;
break;
// Energia Reativa
case ("excessReactiveEnergy", _):
dadosTusd.En_Reativa_Mvarh = (item.billed / 1000) + dadosTusd.En_Reativa_Mvarh;
break;
// Demanda Reativa
case ("excessReactiveDemand", _):
dadosTusd.Dem_Reativa_kvar = item.billed;
break;
// Bandeira Tarifaria
case ("flagSurcharge", _):
dadosTusd.Bandeira_RS_MWh = item.charge;
break;
// Items não classificados
case ("other", _):
j++;
// Exclui os items lançados anteriormente para a fatura
if (j == 1)
{
string deleteOthers = $"DELETE FROM Dados_TUSD_aux WHERE Cod_TUSD = {dadosTusd.Cod_TUSD}";
cmd.CommandText = deleteOthers;
cmd.ExecuteNonQuery();
}
// Insere os novos items
string insertOthers = "INSERT INTO Dados_TUSD_aux (Cod_TUSD,Id,Nome,Valor,Cod_lanc) VALUES (" + dadosTusd.Cod_TUSD + "," + j + ",'" + item.name + "'," + item.charge.ToString(new CultureInfo("en-US")) + "," + 0 + ")";
cmd.CommandText = insertOthers;
cmd.ExecuteNonQuery();
break;
}
}
// Busca a demanda registrada nos itens medidos
foreach (Measureditem measuredItem in parsedResult.measuredItems)
{
switch (measuredItem.type, measuredItem.period)
{
case ("demand", "peak"):
dadosTusd.Dem_Reg_P = measuredItem.measured;
break;
case ("demand", "off-peak"):
dadosTusd.Dem_Reg_FP = measuredItem.measured;
break;
}
}
var dados = dadosTusd.GetType().GetProperties();
StringBuilder fields = new StringBuilder();
StringBuilder values = new StringBuilder();
// Verifica se já existe a fatura lançada | atualizar fatura ou nova fatura
string selectTUSD = $"SELECT Cod_TUSD FROM Dados_TUSD WHERE Cod_TUSD = {dadosTusd.Cod_TUSD}";
cmd.CommandText = selectTUSD.ToString();
reader = cmd.ExecuteReader();
if (reader.Read())
{
// Cria o comando para atualização da fatura
reader.Close();
StringBuilder updateSQL = new StringBuilder("UPDATE Dados_TUSD SET ");
// Loop por todos os dados ja obtidos
for (var i = 0; i < dados.Count(); i++)
{
// Adiciona o nome do campo
string field = dados[i].Name + "=";
// Valor para o campo selecionado
var value = dados[i].GetValue(dadosTusd) ?? string.Empty;
// Adiciona '(aspas) para textos e datas
if (dados[i].PropertyType.Name == "String" ^ dados[i].PropertyType.Name == "DateTime")
{
value = "'" + (dados[i].GetValue(dadosTusd)?.ToString() ?? string.Empty) + "'";
}
// Substitui ,(virgula) por .(ponto)
else if (dados[i].PropertyType.Name == "Single")
{
float valueFloat = (float)value;
value = valueFloat.ToString(new CultureInfo("en-US"));
}
if (i > 0)
{
updateSQL.Append(",");
}
updateSQL.Append(field + value);
}
updateSQL.Append($" WHERE Cod_TUSD = {dadosTusd.Cod_TUSD}");
cmd.CommandText = updateSQL.ToString();
cmd.ExecuteNonQuery();
}
else
{
// Cria o comando para lançar da fatura
reader.Close();
StringBuilder insertSQL = new StringBuilder("INSERT INTO Dados_TUSD (");
// Loop pelo nome dos campos
for (var i = 0; i < dados.Count(); i++)
{
// Adiciona o nome do campo
string field = dados[i].Name;
// Valor para o campo selecionado
var value = dados[i].GetValue(dadosTusd) ?? string.Empty;
// Adiciona '(aspas) para textos e datas
if (dados[i].PropertyType.Name == "String" ^ dados[i].PropertyType.Name == "DateTime")
{
value = "'" + (dados[i].GetValue(dadosTusd)?.ToString() ?? string.Empty) + "'";
}
// Substitui ,(virgula) por .(ponto)
else if (dados[i].PropertyType.Name == "Single")
{
float valueFloat = (float)value;
value = valueFloat.ToString(new CultureInfo("en-US"));
}
if (i > 0)
{
fields.Append(",");
values.Append(",");
}
fields.Append(field);
values.Append(value);
}
insertSQL.Append(fields)
.Append(") VALUES (")
.Append(values)
.Append(")");
cmd.CommandText = insertSQL.ToString();
cmd.ExecuteNonQuery();
}
this.Status = "FATURA INCLUIDA NO BD";
this.UC = uc;
this.Mes = dadosTusd.Mes;
}
}
public void Mover()
{
}
private HttpResponseMessage GetStatus(HttpClient httpClient, string token, string id)
{
var request = new HttpRequestMessage(new HttpMethod("GET"), $"https://api.4docs.cloud/v2/request/status?id={id}");
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {token}");
var response = httpClient.Send(request);
return response;
}
private string Req_token(HttpClient httpClient)
{ {
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/oauth2/token"); var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/oauth2/token");
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("smart:vnqtvmesikjzyipc")); var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("smart:vnqtvmesikjzyipc"));
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}"); request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
request.Content = new StringContent("grant_type=client_credentials"); request.Content = new StringContent("grant_type=client_credentials");
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded"); request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
var response = httpClient.Send(request);
var response = await httpClient.SendAsync(request); return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString() !;
return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString();
}
public static async Task<HttpResponseMessage> status(string token, string id)
{
var request = new HttpRequestMessage(new HttpMethod("GET"), $"https://api.4docs.cloud/v2/request/status?id={id}");
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {token}");
var response = await httpClient.SendAsync(request);
return response;
} }
} }
} }

View File

@ -1,62 +1,100 @@
using System; namespace Download_Faturas
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Download_Faturas
{ {
public class recordSet public class RecordSet
{ {
public long Cod_TUSD { get; set; } public long Cod_TUSD { get; set; }
public long Cod_Smart_unidade { get; set; }
public int Mes { get; set; }
public float Revisao { get; set; }
public bool Rev_atual { get; set; }
public DateTime Hora_TUSD { get; set; }
public float Tempo_TUSD { get; set; }
public string Perfil_CliqCCEE { get; set; }
public string Submercado { get; set; }
public string Ambiente { get; set; }
public string Distribuidora { get; set; }
public string Grupo { get; set; }
public string Perfil { get; set; }
public DateTime Inicio_Leitura { get; set; }
public DateTime Fim_leitura { get; set; }
public float Valor { get; set; }
public float Consumo_P { get; set; }
public float Consumo_FP { get; set; }
public float Dem_Reg_P { get; set; }
public float Dem_Reg_FP { get; set; }
public float Dem_Cont_P { get; set; }
public float Dem_Cont_FP { get; set; }
public float PIS { get; set; }
public float COFINS { get; set; }
public float ICMS { get; set; }
public float Ilum_Publica { get; set; }
public float Multa { get; set; }
public float Credito { get; set; }
public float Outros { get; set; }
public float En_Reativa_Mvarh { get; set; }
public float Dem_Reativa_kvar { get; set; }
public float Bandeira_RS_MWh { get; set; }
public float Liminar_ICMS { get; set; }
public float Enc_conexao { get; set; }
public float FIC_DIC { get; set; }
//public string Hora_compliance { get; set; }
public float Dem_Fat_P { get; set; }
public float Dem_Fat_FP { get; set; }
public float Reativos_reais { get; set; }
public float Ultrapassagem_reais { get; set; }
public float Bandeira_reais { get; set; }
public float Compliance_calc { get; set; }
public bool Compliance_Correto { get; set; }
public bool Decl_DEVEC { get; set; }
public float Cred_livre { get; set; }
public string Coment_int { get; set; }
public string Coment_cli { get; set; }
public bool Lanc_aut { get; set; }
public long Cod_Smart_unidade { get; set; }
public int Mes { get; set; }
public float Revisao { get; set; }
public bool Rev_atual { get; set; }
public DateTime Hora_TUSD { get; set; }
public float Tempo_TUSD { get; set; }
public string? Perfil_CliqCCEE { get; set; }
public string? Submercado { get; set; }
public string? Ambiente { get; set; }
public string? Distribuidora { get; set; }
public string? Grupo { get; set; }
public string? Perfil { get; set; }
public DateTime Inicio_Leitura { get; set; }
public DateTime Fim_leitura { get; set; }
public float Valor { get; set; }
public float Consumo_P { get; set; }
public float Consumo_FP { get; set; }
public float Dem_Reg_P { get; set; }
public float Dem_Reg_FP { get; set; }
public float Dem_Cont_P { get; set; }
public float Dem_Cont_FP { get; set; }
public float PIS { get; set; }
public float COFINS { get; set; }
public float ICMS { get; set; }
public float Ilum_Publica { get; set; }
public float Multa { get; set; }
public float Credito { get; set; }
public float Outros { get; set; }
public float En_Reativa_Mvarh { get; set; }
public float Dem_Reativa_kvar { get; set; }
public float Bandeira_RS_MWh { get; set; }
public float Liminar_ICMS { get; set; }
public float Enc_conexao { get; set; }
public float FIC_DIC { get; set; }
// public string Hora_compliance { get; set; }
public float Dem_Fat_P { get; set; }
public float Dem_Fat_FP { get; set; }
public float Reativos_reais { get; set; }
public float Ultrapassagem_reais { get; set; }
public float Bandeira_reais { get; set; }
public float Compliance_calc { get; set; }
public bool Compliance_Correto { get; set; }
public bool Decl_DEVEC { get; set; }
public float Cred_livre { get; set; }
public string? Coment_int { get; set; }
public string? Coment_cli { get; set; }
public bool Lanc_aut { get; set; }
} }
} }

View File

@ -1,100 +1,134 @@
using System; namespace Download_Faturas
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Download_Faturas
{ {
public class Rootobject public class Rootobject
{ {
public string version { get; set; } public string version { get; set; }
public string md5 { get; set; } public string md5 { get; set; }
public string provider { get; set; } public string provider { get; set; }
public Providerdata providerData { get; set; } public Providerdata providerData { get; set; }
public string locationNumber { get; set; } public string locationNumber { get; set; }
public string subclass { get; set; } public string subclass { get; set; }
public string subgroup { get; set; } public string subgroup { get; set; }
public Customer customer { get; set; } public Customer customer { get; set; }
public float losses { get; set; } public float losses { get; set; }
public float totalCharges { get; set; } public float totalCharges { get; set; }
public string tariffModality { get; set; } public string tariffModality { get; set; }
public Dates dates { get; set; } public Dates dates { get; set; }
public Measureditem[] measuredItems { get; set; } public Measureditem[] measuredItems { get; set; }
public Item[] items { get; set; } public Item[] items { get; set; }
} }
public class Providerdata public class Providerdata
{ {
public Name name { get; set; } public Name name { get; set; }
public Cnpj cnpj { get; set; } public Cnpj cnpj { get; set; }
} }
public class Name public class Name
{ {
public string value { get; set; } public string value { get; set; }
public string confidence { get; set; } public string confidence { get; set; }
} }
public class Cnpj public class Cnpj
{ {
public string value { get; set; } public string value { get; set; }
public string confidence { get; set; } public string confidence { get; set; }
} }
public class Customer public class Customer
{ {
public string cnpj { get; set; } public string cnpj { get; set; }
public string name { get; set; } public string name { get; set; }
public Address address { get; set; } public Address address { get; set; }
} }
public class Address public class Address
{ {
public string streetAndNumber { get; set; } public string streetAndNumber { get; set; }
public string city { get; set; } public string city { get; set; }
public string state { get; set; } public string state { get; set; }
public string zipCode { get; set; } public string zipCode { get; set; }
public string district { get; set; } public string district { get; set; }
} }
public class Dates public class Dates
{ {
public DateTime due { get; set; } public DateTime due { get; set; }
public DateTime month { get; set; } public DateTime month { get; set; }
public Reading reading { get; set; } public Reading reading { get; set; }
} }
public class Reading public class Reading
{ {
public DateTime periodFrom { get; set; } public DateTime periodFrom { get; set; }
public DateTime periodUntil { get; set; } public DateTime periodUntil { get; set; }
} }
public class Measureditem public class Measureditem
{ {
public string type { get; set; } public string type { get; set; }
public string kind { get; set; } public string kind { get; set; }
public string period { get; set; } public string period { get; set; }
public string[] texts { get; set; } public string[] texts { get; set; }
public float measured { get; set; } public float measured { get; set; }
} }
public class Item public class Item
{ {
public string type { get; set; } public string type { get; set; }
public string kind { get; set; } public string kind { get; set; }
public string period { get; set; } public string period { get; set; }
public float billed { get; set; } public float billed { get; set; }
public float rate { get; set; } public float rate { get; set; }
public float charge { get; set; } public float charge { get; set; }
public float tusdRate { get; set; } public float tusdRate { get; set; }
public float teRate { get; set; } public float teRate { get; set; }
public string[] texts { get; set; } public string[] texts { get; set; }
public float contract { get; set; } public float contract { get; set; }
public string name { get; set; } public string name { get; set; }
public float taxable { get; set; } public float taxable { get; set; }
public bool summable { get; set; } public bool summable { get; set; }
} }
} }

View File

@ -9,6 +9,11 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="System.Data.OleDb" Version="7.0.0" />
<PackageReference Include="System.Text.Json" Version="7.0.2" /> <PackageReference Include="System.Text.Json" Version="7.0.2" />
</ItemGroup> </ItemGroup>