188 lines
7.3 KiB
C#
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;
|
|
}
|
|
}
|