From ba61bbae952f25fcfa8703f4f7bf128a34838433 Mon Sep 17 00:00:00 2001 From: Adriano Serighelli Date: Fri, 26 May 2023 10:05:52 -0300 Subject: [PATCH] =?UTF-8?q?Metodo=20mover=20tamb=C3=A9m=20realiza=20a=20se?= =?UTF-8?q?para=C3=A7=C3=A3o=20de=20arquivos=20individuais=20no=20caso=20d?= =?UTF-8?q?e=20faturas=20agrupadas.=20Itens=20classificados=20como=20"othe?= =?UTF-8?q?r"=20s=C3=A3o=20inseridos=20ap=C3=B3s=20inserir=20a=20TUSD=20de?= =?UTF-8?q?vido=20a=20rela=C3=A7=C3=A3o=20entre=20as=20tabelas.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Download Faturas/Download Faturas.csproj | 1 + Download Faturas/Fatura.cs | 147 +++++++++++++++++++---- Download Faturas/GlobalSuppressions.cs | 2 + Download Faturas/Program.cs | 28 +++-- Upload Faturas/Program.cs | 2 +- 5 files changed, 145 insertions(+), 35 deletions(-) diff --git a/Download Faturas/Download Faturas.csproj b/Download Faturas/Download Faturas.csproj index 27b53df..2e6f1e1 100644 --- a/Download Faturas/Download Faturas.csproj +++ b/Download Faturas/Download Faturas.csproj @@ -9,6 +9,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/Download Faturas/Fatura.cs b/Download Faturas/Fatura.cs index e30e495..3cbc10e 100644 --- a/Download Faturas/Fatura.cs +++ b/Download Faturas/Fatura.cs @@ -6,6 +6,8 @@ using System.Text; using System.Text.Json; using System.Text.RegularExpressions; + using iText.Kernel.Pdf; + using iText.Kernel.Utils; public class Fatura { @@ -17,6 +19,7 @@ private string? pastaMiddle; private string? uc; private int mes; + private int? pagina; public Fatura(string id, string fatura_path, HttpClient httpClient) { @@ -31,6 +34,11 @@ this.Arquivo = new FileInfo(fatura_path); this.id = id; + if (this.faturaParsed.GetProperty("external").GetString() is not null) + { + this.pagina = JsonDocument.Parse(this.faturaParsed.GetProperty("external").GetString() !).RootElement.GetProperty("origin")[0].GetProperty("page").GetInt32(); + } + if (this.Agrupada) { this.Agrupada_children = this.faturaParsed.GetProperty("children").EnumerateArray(); @@ -156,7 +164,7 @@ // Loop entre os dados faturados na fatura int j = 0; - StringBuilder insertOthers = new StringBuilder(); + List insertOthers = new List(); foreach (Item item in parsedResult.items) { switch (item.type, item.period) @@ -174,11 +182,13 @@ // 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 @@ -211,13 +221,9 @@ string deleteOthers = $"DELETE FROM Dados_TUSD_aux WHERE Cod_TUSD = {dadosTusd.Cod_TUSD}"; cmd.CommandText = deleteOthers; cmd.ExecuteNonQuery(); + } - insertOthers.Append("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 + ")"); - } - else - { - insertOthers.Append(",(" + dadosTusd.Cod_TUSD + "," + j + ",'" + item.name + "'," + item.charge.ToString(new CultureInfo("en-US")) + "," + 0 + ")"); - } + insertOthers.Add("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 + ")"); break; } @@ -289,8 +295,14 @@ cmd.ExecuteNonQuery(); // Inseri os itens classificados como "othes" após criar o registro da TUSD devido as relação entre as tabelas - cmd.CommandText = insertOthers.ToString(); - cmd.ExecuteNonQuery(); + foreach (string insert in insertOthers) + { + if (insert.Length != 0) + { + cmd.CommandText = insert; + cmd.ExecuteNonQuery(); + } + } } else { @@ -339,8 +351,14 @@ cmd.ExecuteNonQuery(); // Inseri os itens classificados como "othes" após criar o registro da TUSD devido as relação entre as tabelas - cmd.CommandText = insertOthers.ToString(); - cmd.ExecuteNonQuery(); + foreach (string insert in insertOthers) + { + if (insert.Length != 0) + { + cmd.CommandText = insert; + cmd.ExecuteNonQuery(); + } + } } this.Status = "FATURA INCLUIDA NO BD"; @@ -349,24 +367,82 @@ } } - public void Mover() + public void Mover(bool separar) { - switch (this.Status) + string destino = string.Empty; + + switch (this.Status, separar) { - case "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD": - this.Arquivo!.MoveTo(this.Arquivo.Directory?.Parent?.FullName + $@"\5 - {this.Status}\ID: {this.id!} - Mês: {this.mes} - UC: {this.uc} - {this.Arquivo.Name}"); + case ("UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD", _): + + destino = this.Arquivo?.Directory?.Parent?.FullName + $@"\5 - {this.Status}\ID {this.id!} - Mês {this.mes} - UC {this.uc}.pdf"; + + if (separar) + { + new PDFSplitter(this.pagina, this.Arquivo!.ToString(), destino); + this.Arquivo = new FileInfo(destino); + } + else + { + this.Arquivo!.MoveTo(destino); + } + break; - case "FATURA DUPLICADA NO BD": - this.Arquivo!.MoveTo(this.Arquivo.Directory?.Parent?.FullName + $@"\4 - {this.Status}\ID: {this.id!} - Mês: {this.mes} - Empresa: {this.empresa} - Unidade: {this.unidade}"); + case ("FATURA DUPLICADA NO BD", _): + + destino = this.Arquivo?.Directory?.Parent?.FullName + $@"\4 - {this.Status}\ID {this.id!} - Mês {this.mes} - Empresa {this.empresa} - Unidade {this.unidade}.pdf"; + + if (separar) + { + new PDFSplitter(this.pagina, this.Arquivo!.ToString(), destino); + this.Arquivo = new FileInfo(destino); + } + else + { + this.Arquivo!.MoveTo(destino); + } + break; - case "FATURA INCLUIDA NO BD": - this.Arquivo!.MoveTo(this.Arquivo.Directory?.Parent?.FullName + $@"\6 - {this.Status}\ID: {this.id!} - Mês: {this.uc} - Empresa: {this.empresa} - Unidade: {this.unidade}"); + case ("FATURA INCLUIDA NO BD", _): + + destino = this.Arquivo?.Directory?.Parent?.FullName + $@"\6 - {this.Status}\ID {this.id!} - Mês {this.mes} - Empresa {this.empresa} - Unidade {this.unidade}.pdf"; + + if (separar) + { + new PDFSplitter(this.pagina, this.Arquivo!.ToString(), destino); + this.Arquivo = new FileInfo(destino); + } + else + { + this.Arquivo!.MoveTo(destino); + } + break; - case "INVALID": - this.Arquivo!.MoveTo(this.Arquivo.Directory?.Parent?.FullName + $@"\7 - ERRO\ID: {this.id!} - {this.Arquivo.Name}"); + case ("INVALID", _): + + destino = this.Arquivo?.Directory?.Parent?.FullName + $@"\7 - ERRO\ID {this.id!} - {this.Arquivo?.Name}"; + + if (separar) + { + new PDFSplitter(this.pagina, this.Arquivo!.ToString(), destino); + this.Arquivo = new FileInfo(destino); + } + else + { + this.Arquivo!.MoveTo(destino); + } + + break; + + case (_, true): + + destino = this.Arquivo?.Directory?.Parent?.FullName + $@"\3 - PROCESSANDO\ID {this.id!} - {this.Arquivo?.Name}"; + + new PDFSplitter(this.pagina, this.Arquivo!.ToString(), destino); + this.Arquivo = new FileInfo(destino); break; } } @@ -390,4 +466,33 @@ return JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("access_token").GetString() !; } } + + public class PDFSplitter + { + public PDFSplitter(int? pagina, string origem, string destino) + { + FileStream document = new FileStream(origem, FileMode.Open, FileAccess.Read, FileShare.Read); + PdfDocument pdfDocument = new PdfDocument(new PdfReader(document)); + var split = new CustomPdfSplitter(pdfDocument, pageRange => new PdfWriter(destino)); + PdfDocument result = split.ExtractPageRange(new PageRange(pagina.ToString())); + document.Close(); + result.Close(); + } + } + + public class CustomPdfSplitter : PdfSplitter + { + private Func nextWriter; + + public CustomPdfSplitter(PdfDocument pdfDocument, Func nextWriter) + : base(pdfDocument) + { + this.nextWriter = nextWriter; + } + + protected override PdfWriter GetNextPdfWriter(PageRange documentPageRange) + { + return this.nextWriter.Invoke(documentPageRange); + } + } } \ No newline at end of file diff --git a/Download Faturas/GlobalSuppressions.cs b/Download Faturas/GlobalSuppressions.cs index 3375312..f43e2b2 100644 --- a/Download Faturas/GlobalSuppressions.cs +++ b/Download Faturas/GlobalSuppressions.cs @@ -7,3 +7,5 @@ using System.Diagnostics.CodeAnalysis; [assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1600:ElementsMustBeDocumented", Justification = "Revisado.")] [assembly: SuppressMessage("StyleCop.CSharp.DocumentationRules", "SA1633:File should have header", Justification = "Revisado.")] +[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "Revisado", Scope = "type", Target = "~T:Download_Faturas.PDFSplitter")] +[assembly: SuppressMessage("StyleCop.CSharp.MaintainabilityRules", "SA1402:File may only contain a single type", Justification = "Revisado", Scope = "type", Target = "~T:Download_Faturas.CustomPdfSplitter")] diff --git a/Download Faturas/Program.cs b/Download Faturas/Program.cs index 3ab88cf..8ec7a59 100644 --- a/Download Faturas/Program.cs +++ b/Download Faturas/Program.cs @@ -17,11 +17,11 @@ public const String LogFaturas2 = "import2.txt"; #endif 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 (); 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 StreamReader sr = new StreamReader(LogFaturas); - private static StreamWriter sw = new StreamWriter(LogFaturas2); + private static StreamReader sr = new (LogFaturas); + private static StreamWriter sw = new (LogFaturas2); private static string? fatura; public static void Main() @@ -38,7 +38,7 @@ 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 == string.Empty | fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD") + if (fatura_status == "DELAYED" | fatura_status == "MULTACTIONABLE" | fatura_status == "ACTIONABLE" | fatura_status == string.Empty | fatura_status == "UNIDADE CONSUMIDORA NÃO LOCALIZADA NO BD") { // Verifica se a fatura foi processada e atualiza os valores para o banco de dados Fatura fatura = new Fatura(fatura_ID, fatura_arquivo, httpClient); @@ -46,32 +46,34 @@ if (fatura.Status == "SUCCESS" & !fatura.Agrupada) { fatura.Processar(cmd); - fatura.Mover(); - sw.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura_arquivo); + fatura.Mover(separar: false); + sw.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura.Arquivo); } else if (fatura.Status == "SUCCESS" & fatura.Agrupada) { foreach (JsonElement individual_ID in fatura.Agrupada_children) { - Fatura faturaIndividual = new Fatura(individual_ID.ToString(), fatura_arquivo, httpClient); + Fatura faturaIndividual = new (individual_ID.ToString(), fatura_arquivo, httpClient); if (faturaIndividual.Status == "SUCCESS") { faturaIndividual.Processar(cmd); - fatura.Mover(); - sw.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + fatura_arquivo); + faturaIndividual.Mover(separar: true); + sw.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + faturaIndividual.Arquivo); } else { - sw.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + fatura_arquivo); - fatura.Mover(); + faturaIndividual.Mover(separar: true); + sw.WriteLine(individual_ID.ToString() + "," + faturaIndividual.Status + "," + faturaIndividual.Arquivo); } } + + fatura.Arquivo!.Delete(); } else if (fatura.Status == "INVALID") { - fatura.Mover(); - sw.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura_arquivo); + fatura.Mover(separar: false); + sw.WriteLine(fatura_ID + "," + fatura.Status + "," + fatura.Arquivo); } else { diff --git a/Upload Faturas/Program.cs b/Upload Faturas/Program.cs index e4a93cd..8f070d6 100644 --- a/Upload Faturas/Program.cs +++ b/Upload Faturas/Program.cs @@ -47,7 +47,7 @@ public class Program if (response.IsSuccessStatusCode) { var iD = JsonDocument.Parse(response.Content.ReadAsStringAsync().Result).RootElement.GetProperty("requestId"); - fatura.MoveTo(fatura.Directory?.Parent?.FullName + $@"\3 - PROCESSANDO\{iD} - " + fatura.Name); + fatura.MoveTo(fatura.Directory?.Parent?.FullName + $@"\3 - PROCESSANDO\ID {iD} - " + fatura.Name); sw.Write(iD); sw.Write(","); sw.Write(",");