worker-automate-hub 0.5.53__py3-none-any.whl → 0.5.54__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- worker_automate_hub/api/webhook_service.py +5 -1
- worker_automate_hub/tasks/jobs/devolucao_prazo_a_faturar.py +34 -12
- worker_automate_hub/tasks/task_executor.py +5 -1
- worker_automate_hub/utils/util.py +103 -18
- {worker_automate_hub-0.5.53.dist-info → worker_automate_hub-0.5.54.dist-info}/METADATA +1 -1
- {worker_automate_hub-0.5.53.dist-info → worker_automate_hub-0.5.54.dist-info}/RECORD +8 -8
- {worker_automate_hub-0.5.53.dist-info → worker_automate_hub-0.5.54.dist-info}/WHEEL +0 -0
- {worker_automate_hub-0.5.53.dist-info → worker_automate_hub-0.5.54.dist-info}/entry_points.txt +0 -0
@@ -8,7 +8,8 @@ console = Console()
|
|
8
8
|
async def send_to_webhook(
|
9
9
|
url_retorno: str,
|
10
10
|
status: str,
|
11
|
-
observacao: str
|
11
|
+
observacao: str,
|
12
|
+
identificador_webhook: str = None
|
12
13
|
) -> None:
|
13
14
|
"""
|
14
15
|
Envia uma notificacao para o endpoint do webhook passado como parametro.
|
@@ -35,6 +36,9 @@ async def send_to_webhook(
|
|
35
36
|
"observacao": observacao,
|
36
37
|
}
|
37
38
|
|
39
|
+
if identificador_webhook:
|
40
|
+
data["identificador"] = identificador_webhook
|
41
|
+
|
38
42
|
try:
|
39
43
|
async with aiohttp.ClientSession(
|
40
44
|
connector=aiohttp.TCPConnector(verify_ssl=False)
|
@@ -35,6 +35,7 @@ from worker_automate_hub.utils.util import (
|
|
35
35
|
e_ultimo_dia_util,
|
36
36
|
delete_xml,
|
37
37
|
ocr_warnings,
|
38
|
+
ocr_by_class,
|
38
39
|
nf_busca_nf_saida,
|
39
40
|
pessoas_ativa_cliente_fornecedor,
|
40
41
|
nf_devolucao_liquidar_cupom,
|
@@ -758,9 +759,7 @@ async def devolucao_prazo_a_faturar(task: RpaProcessoEntradaDTO) -> RpaRetornoPr
|
|
758
759
|
console.print(f"Imagem preparada com sucesso...\n")
|
759
760
|
console.print(f"Realizando OCR...\n")
|
760
761
|
captured_text = pytesseract.image_to_string(Image.open(path_to_png))
|
761
|
-
console.print(
|
762
|
-
f"Texto Full capturado {captured_text}...\n"
|
763
|
-
)
|
762
|
+
console.print(f"Texto Full capturado {captured_text}...\n")
|
764
763
|
os.remove(path_to_png)
|
765
764
|
pattern = r"sequ[êe]ncia:\s*(\d+)"
|
766
765
|
match = re.search(pattern, captured_text)
|
@@ -769,6 +768,9 @@ async def devolucao_prazo_a_faturar(task: RpaProcessoEntradaDTO) -> RpaRetornoPr
|
|
769
768
|
numero_nota_fiscal = match.group(1)
|
770
769
|
|
771
770
|
|
771
|
+
app = Application().connect(title="Information", timeout=180)
|
772
|
+
main_window = app["Information"]
|
773
|
+
main_window.set_focus()
|
772
774
|
btn_ok = main_window.child_window(class_name="TButton", found_index=0)
|
773
775
|
btn_ok.click()
|
774
776
|
await worker_sleep(3)
|
@@ -819,17 +821,37 @@ async def devolucao_prazo_a_faturar(task: RpaProcessoEntradaDTO) -> RpaRetornoPr
|
|
819
821
|
|
820
822
|
while i < max_attempts:
|
821
823
|
try:
|
822
|
-
app = Application().connect(class_name="TFrmProcessamentoFEe2", timeout=
|
824
|
+
app = Application().connect(class_name="TFrmProcessamentoFEe2", timeout=10)
|
823
825
|
main_window = app["TFrmProcessamentoFEe2"]
|
824
826
|
|
825
|
-
await worker_sleep(
|
826
|
-
|
827
|
-
|
828
|
-
|
829
|
-
|
830
|
-
|
831
|
-
|
832
|
-
|
827
|
+
await worker_sleep(5)
|
828
|
+
information_pop_up = await is_window_open_by_class("TMessageForm", "TMessageForm")
|
829
|
+
if information_pop_up["IsOpened"] == True:
|
830
|
+
msg_pop_up = await ocr_by_class(numero_nota_fiscal, "TMessageForm", "TMessageForm")
|
831
|
+
if msg_pop_up.sucesso:
|
832
|
+
if 'operação concl' in msg_pop_up or 'operacao concl' in msg_pop_up:
|
833
|
+
information_operacao_concluida = main_window.child_window(class_name="TMessageForm")
|
834
|
+
btn_ok = information_operacao_concluida.child_window(class_name="TButton")
|
835
|
+
btn_ok.click()
|
836
|
+
await worker_sleep(4)
|
837
|
+
main_window.close()
|
838
|
+
break
|
839
|
+
else:
|
840
|
+
retorno = f"Pop up nao mapeado para seguimento do robo {msg_pop_up} \nEtapas Executadas:\n{steps}"
|
841
|
+
return RpaRetornoProcessoDTO(
|
842
|
+
sucesso=False,
|
843
|
+
retorno=retorno,
|
844
|
+
status=RpaHistoricoStatusEnum.Falha,
|
845
|
+
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
846
|
+
)
|
847
|
+
else:
|
848
|
+
retorno = f"Não foi possivel realizar a confirmação do msg do OCR \nEtapas Executadas:\n{steps}"
|
849
|
+
return RpaRetornoProcessoDTO(
|
850
|
+
sucesso=False,
|
851
|
+
retorno=retorno,
|
852
|
+
status=RpaHistoricoStatusEnum.Falha,
|
853
|
+
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
854
|
+
)
|
833
855
|
except Exception as e:
|
834
856
|
pass
|
835
857
|
|
@@ -36,6 +36,7 @@ async def perform_task(task: RpaProcessoEntradaDTO):
|
|
36
36
|
logger.info(log_msg)
|
37
37
|
task_uuid = task.uuidProcesso
|
38
38
|
url_retorno = task.configEntrada.get("urlRetorno", None)
|
39
|
+
identificador_webhook = task.configEntrada.get("identificador", None)
|
39
40
|
processo: RpaProcesso = await get_processo(task_uuid)
|
40
41
|
if processo is None:
|
41
42
|
worker_config = load_worker_config()
|
@@ -77,7 +78,10 @@ async def perform_task(task: RpaProcessoEntradaDTO):
|
|
77
78
|
show_toast("Sucesso", f"Processo executado com sucesso: {result}")
|
78
79
|
|
79
80
|
if url_retorno is not None and result.sucesso == False:
|
80
|
-
|
81
|
+
if identificador_webhook:
|
82
|
+
await send_to_webhook(url_retorno, result.status, result.retorno, identificador_webhook)
|
83
|
+
else:
|
84
|
+
await send_to_webhook(url_retorno, result.status, result.retorno)
|
81
85
|
return result
|
82
86
|
else:
|
83
87
|
err_msg = f"Processo não encontrado: {task_uuid}"
|
@@ -3437,6 +3437,60 @@ async def ocr_warnings(numero_nota: str)-> RpaRetornoProcessoDTO:
|
|
3437
3437
|
pass
|
3438
3438
|
|
3439
3439
|
|
3440
|
+
async def ocr_by_class(numero_nota: str, windows_class: str, app_class: str)-> RpaRetornoProcessoDTO:
|
3441
|
+
try:
|
3442
|
+
app = Application().connect(class_name=windows_class)
|
3443
|
+
main_window = app[app_class]
|
3444
|
+
main_window.set_focus()
|
3445
|
+
|
3446
|
+
console.print(f"Obtendo texto da Janela...\n")
|
3447
|
+
console.print(f"Tirando print da janela do warning para realização do OCR...\n")
|
3448
|
+
|
3449
|
+
window_rect = main_window.rectangle()
|
3450
|
+
screenshot = pyautogui.screenshot(
|
3451
|
+
region=(
|
3452
|
+
window_rect.left,
|
3453
|
+
window_rect.top,
|
3454
|
+
window_rect.width(),
|
3455
|
+
window_rect.height(),
|
3456
|
+
)
|
3457
|
+
)
|
3458
|
+
username = getpass.getuser()
|
3459
|
+
path_to_png = f"C:\\Users\\{username}\\Downloads\\ocr_bt_class_popup_{numero_nota}.png"
|
3460
|
+
screenshot.save(path_to_png)
|
3461
|
+
console.print(f"Print salvo em {path_to_png}...\n")
|
3462
|
+
|
3463
|
+
console.print(
|
3464
|
+
f"Preparando a imagem para maior resolução e assertividade no OCR...\n"
|
3465
|
+
)
|
3466
|
+
image = Image.open(path_to_png)
|
3467
|
+
image = image.convert("L")
|
3468
|
+
enhancer = ImageEnhance.Contrast(image)
|
3469
|
+
image = enhancer.enhance(2.0)
|
3470
|
+
image.save(path_to_png)
|
3471
|
+
console.print(f"Imagem preparada com sucesso...\n")
|
3472
|
+
console.print(f"Realizando OCR...\n")
|
3473
|
+
captured_text = pytesseract.image_to_string(Image.open(path_to_png))
|
3474
|
+
console.print(f"Texto Full capturado {captured_text}...\n")
|
3475
|
+
return RpaRetornoProcessoDTO(
|
3476
|
+
sucesso=True,
|
3477
|
+
retorno=captured_text,
|
3478
|
+
status=RpaHistoricoStatusEnum.Sucesso,
|
3479
|
+
)
|
3480
|
+
except Exception as e:
|
3481
|
+
return RpaRetornoProcessoDTO(
|
3482
|
+
sucesso=False,
|
3483
|
+
retorno=f"Erro ao realizar a extração do texto vinculado ao warning, erro - {e}",
|
3484
|
+
status=RpaHistoricoStatusEnum.Falha,
|
3485
|
+
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
3486
|
+
)
|
3487
|
+
finally:
|
3488
|
+
try:
|
3489
|
+
os.remove(path_to_png)
|
3490
|
+
except:
|
3491
|
+
pass
|
3492
|
+
|
3493
|
+
|
3440
3494
|
async def nf_busca_nf_saida(num_nota_fiscal: str) -> RpaRetornoProcessoDTO:
|
3441
3495
|
try:
|
3442
3496
|
app = Application().connect(class_name="TFrmNotaFiscalSaida", timeout=60)
|
@@ -3592,30 +3646,54 @@ async def nf_devolucao_liquidar_cupom(num_nota_fiscal: str, data_atual: str) ->
|
|
3592
3646
|
await worker_sleep(3)
|
3593
3647
|
confirm_pop_up = await is_window_open_by_class("TMessageForm","TMessageForm")
|
3594
3648
|
if confirm_pop_up["IsOpened"] == True:
|
3595
|
-
|
3596
|
-
|
3597
|
-
|
3598
|
-
|
3599
|
-
|
3600
|
-
|
3601
|
-
|
3602
|
-
|
3603
|
-
|
3604
|
-
|
3605
|
-
|
3606
|
-
|
3607
|
-
|
3608
|
-
|
3609
|
-
|
3610
|
-
|
3649
|
+
capture_text_ocr = await ocr_by_class(num_nota_fiscal,"TMessageForm","TMessageForm")
|
3650
|
+
if capture_text_ocr.sucesso == True:
|
3651
|
+
msg_result = capture_text_ocr.retorno
|
3652
|
+
if "deseja realmente" in msg_result.lower():
|
3653
|
+
app_confirm = Application().connect(class_name="TMessageForm")
|
3654
|
+
main_window_confirm = app_confirm["TMessageForm"]
|
3655
|
+
|
3656
|
+
btn_yes = main_window_confirm["&Yes"]
|
3657
|
+
try:
|
3658
|
+
btn_yes.click()
|
3659
|
+
await worker_sleep(3)
|
3660
|
+
console.print("O botão Yes foi clicado com sucesso.", style="green")
|
3661
|
+
#main_window.close()
|
3662
|
+
except:
|
3663
|
+
return RpaRetornoProcessoDTO(
|
3664
|
+
sucesso=False,
|
3665
|
+
retorno=f"Não foi possivel clicar em Yes durante para a confirmação da liquidação do titulo",
|
3666
|
+
status=RpaHistoricoStatusEnum.Falha,
|
3667
|
+
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
3668
|
+
)
|
3669
|
+
else:
|
3670
|
+
return RpaRetornoProcessoDTO(
|
3671
|
+
sucesso=False,
|
3672
|
+
retorno=f"POP não mapeado: {msg_result}",
|
3673
|
+
status=RpaHistoricoStatusEnum.Falha,
|
3674
|
+
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
3675
|
+
)
|
3611
3676
|
|
3612
3677
|
console.print('Aguardando a confirmação de Liquidação realizado com sucesso')
|
3613
3678
|
try:
|
3614
3679
|
app = Application().connect(title="Informação", timeout=60)
|
3615
3680
|
main_window = app["Informação"]
|
3616
3681
|
main_window.set_focus()
|
3617
|
-
|
3618
|
-
|
3682
|
+
msg_pop_up = await ocr_by_class(num_nota_fiscal,"TMessageForm","TMessageForm")
|
3683
|
+
if msg_pop_up.sucesso == True:
|
3684
|
+
msg_result = msg_pop_up.retorno
|
3685
|
+
if "sucesso" in msg_result.lower():
|
3686
|
+
btn_ok = main_window.child_window(class_name="Button")
|
3687
|
+
btn_ok.click()
|
3688
|
+
pyautogui.press('enter')
|
3689
|
+
await worker_sleep(1)
|
3690
|
+
else:
|
3691
|
+
return RpaRetornoProcessoDTO(
|
3692
|
+
sucesso=False,
|
3693
|
+
retorno=f"Não foi possivel obter a confirmação de titulo liquidado com sucesso, pop_up nao mepeado: {msg_result}",
|
3694
|
+
status=RpaHistoricoStatusEnum.Falha,
|
3695
|
+
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
3696
|
+
)
|
3619
3697
|
except Exception as e:
|
3620
3698
|
return RpaRetornoProcessoDTO(
|
3621
3699
|
sucesso=False,
|
@@ -3624,6 +3702,10 @@ async def nf_devolucao_liquidar_cupom(num_nota_fiscal: str, data_atual: str) ->
|
|
3624
3702
|
tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
|
3625
3703
|
)
|
3626
3704
|
|
3705
|
+
|
3706
|
+
app = Application().connect(class_name="TFrmTituloReceber", timeout=60)
|
3707
|
+
main_window = app["TFrmTituloReceber"]
|
3708
|
+
main_window.set_focus()
|
3627
3709
|
console.print('Confirmando se o titulo alterou para Liquidado')
|
3628
3710
|
panel_TPage = main_window.child_window(class_name="TcxTreeView")
|
3629
3711
|
panel_TTabSheet = panel_TPage.child_window(class_name="TcxCustomInnerTreeView")
|
@@ -3638,6 +3720,9 @@ async def nf_devolucao_liquidar_cupom(num_nota_fiscal: str, data_atual: str) ->
|
|
3638
3720
|
|
3639
3721
|
if radio_liquidado.is_checked():
|
3640
3722
|
console.print("Botão 'Liquidado' está selecionado, seguindo com o processo...\n")
|
3723
|
+
app = Application().connect(class_name="TFrmTituloReceber", timeout=60)
|
3724
|
+
main_window = app["TFrmTituloReceber"]
|
3725
|
+
main_window.set_focus()
|
3641
3726
|
main_window.close()
|
3642
3727
|
else:
|
3643
3728
|
return RpaRetornoProcessoDTO(
|
@@ -7,7 +7,7 @@ worker_automate_hub/api/helpers/api_helpers.py,sha256=SkheO2fXexeh-a4shr8Qzsz_kZ
|
|
7
7
|
worker_automate_hub/api/rdp_service.py,sha256=L7orr60FkJr6zjETtA4me8tRYCW9m1g-i5pq6AILUFo,1647
|
8
8
|
worker_automate_hub/api/rpa_fila_service.py,sha256=qa9JLuX6kL9Bv_PyPE_CzIikKwy0WdOf2FrIpFdMcYI,2125
|
9
9
|
worker_automate_hub/api/rpa_historico_service.py,sha256=wQw8_k8i0S-r7qrrn4BSoztkgtiuH_bHRSEytbZebDg,9690
|
10
|
-
worker_automate_hub/api/webhook_service.py,sha256=
|
10
|
+
worker_automate_hub/api/webhook_service.py,sha256=S1a8IIS5LYY16I5E2pPPczaUnUz-_CwmD9_1QBdQD2g,1879
|
11
11
|
worker_automate_hub/cli.py,sha256=JB45pjPJ8_E-4xw0OjqDMcAw-tpDV0mjmvwJRTnTzY0,6862
|
12
12
|
worker_automate_hub/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
worker_automate_hub/config/settings.py,sha256=4BkIYV0C9C_tl68WNfw3aoywr1-_bRJsKysSnSRALT0,2450
|
@@ -37,7 +37,7 @@ worker_automate_hub/tasks/jobs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5
|
|
37
37
|
worker_automate_hub/tasks/jobs/coleta_dje_process.py,sha256=UkLWTC5Ub2qBb0yY-8IZ0DLLOVJOfNTq_z9krx_t25Q,29476
|
38
38
|
worker_automate_hub/tasks/jobs/conexao_rdp.py,sha256=lNjD-JxpPTXdvFEJAkajC_Ltyw81rIEJeu7FUfRf2qI,9586
|
39
39
|
worker_automate_hub/tasks/jobs/descartes.py,sha256=0bMCJ0xIcK8TLSgjF6taAbGFLMU-sGDVFIhUYSRtrbg,41092
|
40
|
-
worker_automate_hub/tasks/jobs/devolucao_prazo_a_faturar.py,sha256=
|
40
|
+
worker_automate_hub/tasks/jobs/devolucao_prazo_a_faturar.py,sha256=PErDGphh75kc5SGJKI90L26qPJKl0BAkk8eRgjwmRvA,79240
|
41
41
|
worker_automate_hub/tasks/jobs/ecac_estadual_go.py,sha256=dKkf22nH5gp3RErq5u0UzRsKyJ81fc6ZZ4vLtUuMwHA,21002
|
42
42
|
worker_automate_hub/tasks/jobs/ecac_estadual_main.py,sha256=8WmKe4-MRtzHobXz2S4YBDNN8alfawkC-BBlRY-mn1g,1726
|
43
43
|
worker_automate_hub/tasks/jobs/ecac_estadual_mt.py,sha256=C26zmpGQGUq6sP9lU9nanM3Fje-rkyx5tjwmRy4lyL8,25300
|
@@ -66,17 +66,17 @@ worker_automate_hub/tasks/jobs/playground.py,sha256=7vWDg9DwToHwGJ6_XOa8TQ6LmfRV
|
|
66
66
|
worker_automate_hub/tasks/jobs/sped_fiscal.py,sha256=uHA5zQmAqqb-L_jdbBKiqINV4vXI58CL3wAI-2Xt_oQ,28938
|
67
67
|
worker_automate_hub/tasks/jobs/transferencias.py,sha256=i3fCanHZ_pSwPW03THpQPqlzrDjbV4QbKkXpUqV3dxM,39272
|
68
68
|
worker_automate_hub/tasks/task_definitions.py,sha256=yNu2GSC1PxjblcMgT7UOFhEUq4CMaQqDfN3hAF4yz_U,4954
|
69
|
-
worker_automate_hub/tasks/task_executor.py,sha256=
|
69
|
+
worker_automate_hub/tasks/task_executor.py,sha256=1ZBVW2QS0io-gVyR4VNnbpaLJnSpTxtHIbRlnuQuj1Y,5566
|
70
70
|
worker_automate_hub/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
71
|
worker_automate_hub/utils/env.py,sha256=TacQjGRO7PUNpttrhTAc5Gnegaiysl2Knsv1P8qfkfs,57
|
72
72
|
worker_automate_hub/utils/get_creds_gworkspace.py,sha256=ZJ0IIEjM4IXIV9rwfbOZ1V1wiaMoJAGZeSy0D37sYdU,2212
|
73
73
|
worker_automate_hub/utils/logger.py,sha256=FYV9fg0_RAYJF_ZOCJEbqQAiCXlXk2gMpvUU1rzT_xs,671
|
74
74
|
worker_automate_hub/utils/toast.py,sha256=xPHc5r5uOxB_cZlCzm13Kt2qSKLLFZALncU6Qg3Ft68,1162
|
75
75
|
worker_automate_hub/utils/updater.py,sha256=en2FCGhI8aZ-JNP3LQm64NJDc4awCNW7UhbVlwDl49Y,7972
|
76
|
-
worker_automate_hub/utils/util.py,sha256=
|
76
|
+
worker_automate_hub/utils/util.py,sha256=ch8qDZfKBHCYKKjblVSQ4X07m9AsYpOPD5RflaipDm0,159514
|
77
77
|
worker_automate_hub/utils/utils_nfe_entrada.py,sha256=iYpOs7fb7C3bY61QHySr00xlDNzrrCP0zaexOpBPuaQ,31930
|
78
78
|
worker_automate_hub/worker.py,sha256=CT-poyP1ZYvubArYsnnNd9oJ53SPaDwgr6p6keS3nI4,6248
|
79
|
-
worker_automate_hub-0.5.
|
80
|
-
worker_automate_hub-0.5.
|
81
|
-
worker_automate_hub-0.5.
|
82
|
-
worker_automate_hub-0.5.
|
79
|
+
worker_automate_hub-0.5.54.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
|
80
|
+
worker_automate_hub-0.5.54.dist-info/METADATA,sha256=MpWKhIzCV_6rKtJD-Vfn7LYwGeqXpIfixLPCPDN-vjo,2894
|
81
|
+
worker_automate_hub-0.5.54.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
|
82
|
+
worker_automate_hub-0.5.54.dist-info/RECORD,,
|
File without changes
|
{worker_automate_hub-0.5.53.dist-info → worker_automate_hub-0.5.54.dist-info}/entry_points.txt
RENAMED
File without changes
|