Adicionar arquivos de projeto.
This commit is contained in:
parent
dae5e4f66b
commit
c2eb47bcd6
100
Download Faturas/Class1.cs
Normal file
100
Download Faturas/Class1.cs
Normal file
@ -0,0 +1,100 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Download_Faturas
|
||||
{
|
||||
public class Rootobject
|
||||
{
|
||||
public string version { get; set; }
|
||||
public string md5 { get; set; }
|
||||
public string provider { get; set; }
|
||||
public Providerdata providerData { get; set; }
|
||||
public string locationNumber { get; set; }
|
||||
public string subclass { get; set; }
|
||||
public string subgroup { get; set; }
|
||||
public Customer customer { get; set; }
|
||||
public float losses { get; set; }
|
||||
public float totalCharges { get; set; }
|
||||
public string tariffModality { get; set; }
|
||||
public Dates dates { get; set; }
|
||||
public Measureditem[] measuredItems { get; set; }
|
||||
public Item[] items { get; set; }
|
||||
}
|
||||
|
||||
public class Providerdata
|
||||
{
|
||||
public Name name { get; set; }
|
||||
public Cnpj cnpj { get; set; }
|
||||
}
|
||||
|
||||
public class Name
|
||||
{
|
||||
public string value { get; set; }
|
||||
public string confidence { get; set; }
|
||||
}
|
||||
|
||||
public class Cnpj
|
||||
{
|
||||
public string value { get; set; }
|
||||
public string confidence { get; set; }
|
||||
}
|
||||
|
||||
public class Customer
|
||||
{
|
||||
public string cnpj { get; set; }
|
||||
public string name { get; set; }
|
||||
public Address address { get; set; }
|
||||
}
|
||||
|
||||
public class Address
|
||||
{
|
||||
public string streetAndNumber { get; set; }
|
||||
public string city { get; set; }
|
||||
public string state { get; set; }
|
||||
public string zipCode { get; set; }
|
||||
public string district { get; set; }
|
||||
}
|
||||
|
||||
public class Dates
|
||||
{
|
||||
public DateTime due { get; set; }
|
||||
public DateTime month { get; set; }
|
||||
public Reading reading { get; set; }
|
||||
}
|
||||
|
||||
public class Reading
|
||||
{
|
||||
public DateTime periodFrom { get; set; }
|
||||
public DateTime periodUntil { get; set; }
|
||||
}
|
||||
|
||||
public class Measureditem
|
||||
{
|
||||
public string type { get; set; }
|
||||
public string kind { get; set; }
|
||||
public string period { get; set; }
|
||||
public string[] texts { get; set; }
|
||||
public float measured { get; set; }
|
||||
}
|
||||
|
||||
public class Item
|
||||
{
|
||||
public string type { get; set; }
|
||||
public string kind { get; set; }
|
||||
public string period { get; set; }
|
||||
public float billed { get; set; }
|
||||
public float rate { get; set; }
|
||||
public float charge { get; set; }
|
||||
public float tusdRate { get; set; }
|
||||
public float teRate { get; set; }
|
||||
public string[] texts { get; set; }
|
||||
public float contract { get; set; }
|
||||
public string name { get; set; }
|
||||
public float taxable { get; set; }
|
||||
public bool summable { get; set; }
|
||||
}
|
||||
}
|
||||
|
||||
62
Download Faturas/Class2.cs
Normal file
62
Download Faturas/Class2.cs
Normal file
@ -0,0 +1,62 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Download_Faturas
|
||||
{
|
||||
public class recordSet
|
||||
{
|
||||
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; }
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
16
Download Faturas/Download Faturas.csproj
Normal file
16
Download Faturas/Download Faturas.csproj
Normal file
@ -0,0 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<RootNamespace>Download_Faturas</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Data.OleDb" Version="7.0.0" />
|
||||
<PackageReference Include="System.Text.Json" Version="7.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
394
Download Faturas/Program.cs
Normal file
394
Download Faturas/Program.cs
Normal file
@ -0,0 +1,394 @@
|
||||
using System.Text;
|
||||
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
|
||||
{
|
||||
public class Program
|
||||
{
|
||||
#if DEBUG
|
||||
public const String log_faturas = @"X:\Back\Carteira x.x\4Docs\import.txt";
|
||||
public const String log_faturas2 = @"X:\Back\Carteira x.x\4Docs\import2.txt";
|
||||
#else
|
||||
public const String log_faturas = "import.txt";
|
||||
public const String log_faturas2 = "import2.txt";
|
||||
#endif
|
||||
public const string caminho_DB = "X:/Middle/Informativo Setorial/Modelo Word/BD1_dados cadastrais e faturas.accdb";
|
||||
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 OleDbCommand cmd = new();
|
||||
private static StreamReader sr = new StreamReader(log_faturas);
|
||||
private static StreamWriter sw = new StreamWriter(log_faturas2);
|
||||
private static string? fatura;
|
||||
|
||||
public static async Task Main()
|
||||
{
|
||||
//Abre a conexao com o banco de dados
|
||||
conn.Open();
|
||||
cmd.Connection = conn;
|
||||
|
||||
//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 == "ACTIONABLE" | fatura_status == "" | fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD")
|
||||
{
|
||||
string token = "UFY4VWzqcHYcGNd0gkBOMFL9G5ZThV6gXBQIJ79F5HSqITzavz4Fe7iXvAbJLvZJ";
|
||||
//token = await req_token();
|
||||
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 multiple = result.TryGetProperty("multiple", out var _);
|
||||
if (result.GetProperty("status").GetString() == "SUCCESS" & !multiple)
|
||||
{
|
||||
fatura_status = processar_fatura(result, fatura_ID, fatura_arquivo);
|
||||
sw.WriteLine(fatura_ID + "," + fatura_status + "," + fatura_arquivo);
|
||||
|
||||
}
|
||||
else if (result.GetProperty("status").GetString() == "SUCCESS" & multiple)
|
||||
{
|
||||
var agrupadas_ID = result.GetProperty("children");
|
||||
|
||||
foreach (JsonElement individual_ID in agrupadas_ID.EnumerateArray())
|
||||
{
|
||||
HttpResponseMessage response_individual = await status(token, individual_ID.ToString());
|
||||
JsonElement result_individual = JsonDocument.Parse(response_individual.Content.ReadAsStringAsync().Result).RootElement;
|
||||
|
||||
if (result_individual.GetProperty("status").GetString() == "SUCCESS")
|
||||
{
|
||||
fatura_status = processar_fatura(result_individual, fatura_ID, fatura_arquivo);
|
||||
sw.WriteLine(individual_ID.ToString() + "," + fatura_status + "," + fatura_arquivo);
|
||||
}
|
||||
else
|
||||
{
|
||||
sw.WriteLine(individual_ID.ToString() + "," + result_individual.GetProperty("status").GetString() + "," + fatura_arquivo);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sw.WriteLine(fatura_ID + "," + result.GetProperty("status").GetString() + "," + fatura_arquivo);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
sw.WriteLine(fatura);
|
||||
}
|
||||
}
|
||||
conn.Close();
|
||||
sr.Close();
|
||||
sw.Close();
|
||||
File.Move(log_faturas2, log_faturas, true);
|
||||
}
|
||||
public static string 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"));
|
||||
|
||||
dadosTusd.Mes = int.Parse(parsedResult.dates.reading.periodUntil.AddDays(-15).ToString("yMM"));
|
||||
|
||||
string uc = new Regex("^0+").Replace(parsedResult.locationNumber, "");
|
||||
|
||||
//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 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 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());
|
||||
}
|
||||
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)
|
||||
{
|
||||
return "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD";
|
||||
}
|
||||
else if (tusdLanc)
|
||||
{
|
||||
return "FATURA DUPLICADA NO BD";
|
||||
}
|
||||
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) ?? "";
|
||||
|
||||
//Adiciona '(aspas) para textos e datas
|
||||
if (dados[i].PropertyType.Name == "String" ^ dados[i].PropertyType.Name == "DateTime")
|
||||
{
|
||||
value = "'" + (dados[i].GetValue(dadosTusd)?.ToString() ?? "") + "'";
|
||||
}
|
||||
//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) ?? "";
|
||||
|
||||
//Adiciona '(aspas) para textos e datas
|
||||
if (dados[i].PropertyType.Name == "String" ^ dados[i].PropertyType.Name == "DateTime")
|
||||
{
|
||||
value = "'" + (dados[i].GetValue(dadosTusd)?.ToString() ?? "") + "'";
|
||||
}
|
||||
//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();
|
||||
}
|
||||
return "FATURA INCLUIDA NO BD";
|
||||
}
|
||||
}
|
||||
public static async Task<string> req_token()
|
||||
{
|
||||
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/oauth2/token");
|
||||
|
||||
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("smart:vnqtvmesikjzyipc"));
|
||||
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
|
||||
|
||||
request.Content = new StringContent("grant_type=client_credentials");
|
||||
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
|
||||
|
||||
var response = await httpClient.SendAsync(request);
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
31
Faturas 4docs.sln
Normal file
31
Faturas 4docs.sln
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.2.32616.157
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Upload Faturas", "Upload Faturas\Upload Faturas.csproj", "{38C7EBAA-5FEE-40DA-BFEE-12BEB4A1EA46}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Download Faturas", "Download Faturas\Download Faturas.csproj", "{580DACAB-DBAB-402D-AE0F-BA42A205F812}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{38C7EBAA-5FEE-40DA-BFEE-12BEB4A1EA46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{38C7EBAA-5FEE-40DA-BFEE-12BEB4A1EA46}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{38C7EBAA-5FEE-40DA-BFEE-12BEB4A1EA46}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{38C7EBAA-5FEE-40DA-BFEE-12BEB4A1EA46}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{580DACAB-DBAB-402D-AE0F-BA42A205F812}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{580DACAB-DBAB-402D-AE0F-BA42A205F812}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{580DACAB-DBAB-402D-AE0F-BA42A205F812}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{580DACAB-DBAB-402D-AE0F-BA42A205F812}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {B30416C0-8831-4849-A76F-187E364F13C1}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
187
Upload Faturas/Program.cs
Normal file
187
Upload Faturas/Program.cs
Normal file
@ -0,0 +1,187 @@
|
||||
using System.Text;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Text.Json;
|
||||
using System.Web;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.IO;
|
||||
|
||||
public class program
|
||||
{
|
||||
#if DEBUG
|
||||
public const String log_faturas = @"X:\Back\Carteira x.x\4Docs\import.txt";
|
||||
#else
|
||||
public const String log_faturas = "import.txt";
|
||||
#endif
|
||||
|
||||
private static HttpClient httpClient = new HttpClient();
|
||||
public static async Task Main()
|
||||
{
|
||||
for (int i = 1; i < 3; i++)
|
||||
{
|
||||
for (int j = 1; j < 7; j++)
|
||||
{
|
||||
DirectoryInfo pasta = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs\1 - INDIVIDUAIS");
|
||||
DirectoryInfo pasta_agrupadas = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs\2 - AGRUPADAS");
|
||||
|
||||
if (ler_pasta(pasta, agrupada: false).Result)
|
||||
{
|
||||
await ler_pasta(pasta_agrupadas, agrupada: true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//string? fim = "n";
|
||||
|
||||
//while (fim != "s")
|
||||
//{
|
||||
// Console.WriteLine("Escolha a carteira: (todas - 1.1 - 1.2 - 1.3 - ...)\n");
|
||||
// string? carteira = Console.ReadLine();
|
||||
|
||||
// if (carteira != null & carteira!.Length == 3)
|
||||
// {
|
||||
// DirectoryInfo pasta = new DirectoryInfo(@"X:\Middle\Carteira " + carteira[0] + @"\Carteira " + carteira + @"\Faturas fourdocs");
|
||||
// DirectoryInfo pasta_agrupadas = new DirectoryInfo(@"X:\Middle\Carteira " + carteira[0] + @"\Carteira " + carteira + @"\Faturas fourdocs\Agrupadas");
|
||||
|
||||
// if (ler_pasta(pasta, agrupada: false).Result)
|
||||
// {
|
||||
// if (ler_pasta(pasta_agrupadas, agrupada: true).Result)
|
||||
// {
|
||||
// Console.WriteLine("\nDeseja finalizar? (s/n)\n");
|
||||
// fim = Console.ReadLine();
|
||||
// Console.WriteLine("\n");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Console.WriteLine("\nAgrupadas não localizadas\n");
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Console.WriteLine("\nCarteira não encontrada\n");
|
||||
// }
|
||||
// }
|
||||
// else if (carteira == "todas")
|
||||
// {
|
||||
// for (int i = 1; i < 3; i++)
|
||||
// {
|
||||
// for (int j = 1; j < 7; j++)
|
||||
// {
|
||||
// DirectoryInfo pasta = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs");
|
||||
// DirectoryInfo pasta_agrupadas = new DirectoryInfo(@"X:\Middle\Carteira " + i + @"\Carteira " + i + "." + j + @"\Faturas fourdocs\Agrupadas");
|
||||
|
||||
// if (ler_pasta(pasta, agrupada: false).Result)
|
||||
// {
|
||||
// if (!ler_pasta(pasta_agrupadas, agrupada: true).Result)
|
||||
// {
|
||||
// Console.WriteLine($"\nCarteira {i}.{j} Agrupada - Erro");
|
||||
// }
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Console.WriteLine($"\nCarteira {i}.{j} - Erro");
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// Console.WriteLine("\nDeseja finalizar? (s/n)\n");
|
||||
// fim = Console.ReadLine();
|
||||
// Console.WriteLine("\n");
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// Console.WriteLine("\nCarteira não encontrada\n");
|
||||
// }
|
||||
//}
|
||||
//await Task.Delay(1);
|
||||
}
|
||||
|
||||
public static async Task<bool> ler_pasta(DirectoryInfo pasta, bool agrupada)
|
||||
{
|
||||
if (pasta.Exists)
|
||||
{
|
||||
string token = "UFY4VWzqcHYcGNd0gkBOMFL9G5ZThV6gXBQIJ79F5HSqITzavz4Fe7iXvAbJLvZJ";
|
||||
//token = await req_token();
|
||||
FileInfo[] faturas = pasta.GetFiles("*.pdf");
|
||||
|
||||
StreamWriter sw = new StreamWriter(log_faturas, true);
|
||||
|
||||
foreach (FileInfo fatura in faturas)
|
||||
{
|
||||
if (!IsFileLocked(fatura))
|
||||
{
|
||||
HttpResponseMessage response = await send_fatura(token, fatura.FullName, agrupada);
|
||||
if ((int)response.StatusCode == 202)
|
||||
{
|
||||
var ID = JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("requestId");
|
||||
fatura.MoveTo(fatura.Directory?.Parent?.FullName + $@"\3 - PROCESSANDO\{ID} - " + fatura.Name);
|
||||
sw.Write(ID);
|
||||
sw.Write(",");
|
||||
sw.Write(",");
|
||||
sw.WriteLine(fatura.FullName);
|
||||
}
|
||||
}
|
||||
}
|
||||
sw.Close();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static async Task<string?> req_token()
|
||||
{
|
||||
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/oauth2/token");
|
||||
|
||||
var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("smart:vnqtvmesikjzyipc"));
|
||||
request.Headers.TryAddWithoutValidation("Authorization", $"Basic {base64authorization}");
|
||||
|
||||
request.Content = new StringContent("grant_type=client_credentials");
|
||||
request.Content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/x-www-form-urlencoded");
|
||||
|
||||
var response = await httpClient.SendAsync(request);
|
||||
|
||||
return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString();
|
||||
}
|
||||
|
||||
public static async Task<HttpResponseMessage> send_fatura(string token, string fatura, bool agrupada)
|
||||
{
|
||||
var request = new HttpRequestMessage(new HttpMethod("POST"), "https://api.4docs.cloud/v2/parse");
|
||||
|
||||
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {token}");
|
||||
|
||||
var multipartContent = new MultipartFormDataContent();
|
||||
multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(fatura)), @"""file""", @$"""{Path.GetFileName(fatura)}""");
|
||||
multipartContent.ElementAt(0).Headers.Add("Content-Type", "application/pdf");
|
||||
|
||||
string newPath = fatura.Substring(0, fatura.Length - 4) + " Finalizado.pdf";
|
||||
|
||||
multipartContent.Add(new StringContent($"{{\"callbackUrl\":\"https://api.4docs.cloud/v2/null\",\"pipelineName\":\"energy\",\"multiple\":{agrupada.ToString().ToLower()},\"clientData\":{{\"fatura_PATH\":\"{newPath}\"}}}}"), "json");
|
||||
|
||||
request.Content = multipartContent;
|
||||
|
||||
return await httpClient.SendAsync(request);
|
||||
}
|
||||
public static bool IsFileLocked(FileInfo file)
|
||||
{
|
||||
try
|
||||
{
|
||||
using (FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None))
|
||||
{
|
||||
stream.Close();
|
||||
}
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
//the file is unavailable because it is:
|
||||
//still being written to
|
||||
//or being processed by another thread
|
||||
//or does not exist (has already been processed)
|
||||
return true;
|
||||
}
|
||||
|
||||
//file is not locked
|
||||
return false;
|
||||
}
|
||||
}
|
||||
15
Upload Faturas/Upload Faturas.csproj
Normal file
15
Upload Faturas/Upload Faturas.csproj
Normal file
@ -0,0 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<RootNamespace>Download_Faturas</RootNamespace>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="System.Text.Json" Version="7.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
Loading…
x
Reference in New Issue
Block a user