worker-automate-hub 0.5.53__py3-none-any.whl → 0.5.54__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of worker-automate-hub might be problematic. Click here for more details.

@@ -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=60)
824
+ app = Application().connect(class_name="TFrmProcessamentoFEe2", timeout=10)
823
825
  main_window = app["TFrmProcessamentoFEe2"]
824
826
 
825
- await worker_sleep(15)
826
-
827
- information_operacao_concluida = main_window.child_window(class_name="TMessageForm")
828
- btn_ok = information_operacao_concluida.child_window(class_name="TButton")
829
- btn_ok.click()
830
- await worker_sleep(4)
831
- main_window.close()
832
- break
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
- await send_to_webhook(url_retorno, result.status, result.retorno)
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
- app_confirm = Application().connect(class_name="TMessageForm")
3596
- main_window_confirm = app_confirm["TMessageForm"]
3597
-
3598
- btn_yes = main_window_confirm["&Yes"]
3599
- try:
3600
- btn_yes.click()
3601
- await worker_sleep(3)
3602
- console.print("O botão Yes foi clicado com sucesso.", style="green")
3603
- #main_window.close()
3604
- except:
3605
- return RpaRetornoProcessoDTO(
3606
- sucesso=False,
3607
- retorno=f"Não foi possivel clicar em Yes durante para a confirmação da liquidação do titulo",
3608
- status=RpaHistoricoStatusEnum.Falha,
3609
- tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
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
- btn_ok = main_window.child_window(class_name="Button")
3618
- btn_ok.click()
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(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: worker-automate-hub
3
- Version: 0.5.53
3
+ Version: 0.5.54
4
4
  Summary: Worker Automate HUB é uma aplicação para automatizar rotinas de RPA nos ambientes Argenta.
5
5
  Author: Joel Paim
6
6
  Requires-Python: >=3.12,<4.0
@@ -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=1VgkcOF0vY3cpV7-UOgrUj0qRuK9joDCvLhJkBBT0sQ,1751
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=H2pD9pkigmdcV94QUdYeAeIc_mENJb6t8hw0NCtBms0,77482
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=Hup_C2LeOkn7GEHQaEDqo8MIPdSPuaJ4hzHOOK7nqZU,5311
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=xBvFZet8PBxLEm97SFGHXjG3evWuUPpm1Q7gQxqeeUQ,155619
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.53.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
80
- worker_automate_hub-0.5.53.dist-info/METADATA,sha256=bFF74h-BGAk3vZP_sHvwOBTB69WgkzQTd1UrhOe6leY,2894
81
- worker_automate_hub-0.5.53.dist-info/WHEEL,sha256=RaoafKOydTQ7I_I3JTrPCg6kUmTgtm4BornzOqyEfJ8,88
82
- worker_automate_hub-0.5.53.dist-info/RECORD,,
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,,