Arquivo separado para a classe fatura
This commit is contained in:
parent
88bbb6e095
commit
ff9603c84d
365
Download Faturas/Fatura.cs
Normal file
365
Download Faturas/Fatura.cs
Normal file
@ -0,0 +1,365 @@
|
|||||||
|
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 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 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 = httpClient.Send(request);
|
||||||
|
return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString() !;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -387,360 +387,4 @@
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
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 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 = httpClient.Send(request);
|
|
||||||
return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString() !;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
namespace Download_Faturas
|
namespace Download_Faturas
|
||||||
{
|
{
|
||||||
|
#pragma warning disable CS8618, SA1300, SA1402
|
||||||
public class Rootobject
|
public class Rootobject
|
||||||
{
|
{
|
||||||
public string version { get; set; }
|
public string version { get; set; }
|
||||||
@ -131,4 +132,5 @@
|
|||||||
|
|
||||||
public bool summable { get; set; }
|
public bool summable { get; set; }
|
||||||
}
|
}
|
||||||
|
#pragma warning restore CS8618, SA1300, SA1402
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user