2023-04-28 14:13:04 -03:00

188 lines
7.3 KiB
C#

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;
}
}