worker-automate-hub 0.5.20__py3-none-any.whl → 0.5.22__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.
@@ -329,47 +329,46 @@ async def entrada_de_notas_15(task: RpaProcessoEntradaDTO) -> RpaRetornoProcesso
329
329
  except:
330
330
  console.print("Erros não foram encontrados após incluir o registro")
331
331
 
332
- # Verifica se a info 'Nota fiscal incluida' está na tela
333
- await worker_sleep(6)
334
- try:
335
- app = Application().connect(class_name="TFrmNotaFiscalEntrada")
336
- main_window = app["Information"]
337
-
338
- main_window.set_focus()
339
-
340
- console.print(f"Tentando clicar no Botão OK...\n")
341
- btn_ok = main_window.child_window(class_name="TButton")
342
-
343
- if btn_ok.exists():
344
- btn_ok.click()
345
- else:
346
- console.print(f" botão OK Não enontrado")
347
- except Exception as e:
348
- try:
349
- await worker_sleep(5)
350
- await emsys.verify_warning_and_error("Aviso", "OK")
351
- alterar_nop = await emsys.alterar_nop(nota["cfop"])
352
-
353
- if alterar_nop:
354
- return alterar_nop
355
- except Exception as error:
356
- observacao = f"Erro Processo Entrada de Notas: {str(error)}"
357
- logger.error(observacao)
358
- console.print(observacao, style="bold red")
359
- return RpaRetornoProcessoDTO(
360
- sucesso=False,
361
- retorno=observacao,
362
- status=RpaHistoricoStatusEnum.Falha,
363
- tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
364
- )
365
-
366
332
  max_attempts = 60
367
333
  i = 0
368
334
 
369
335
  while i < max_attempts:
370
336
  information_pop_up = await is_window_open("Information")
371
337
  if information_pop_up["IsOpened"] == True:
372
- break
338
+ # Verifica se a info 'Nota fiscal incluida' está na tela
339
+ try:
340
+ app = Application().connect(class_name="TFrmNotaFiscalEntrada")
341
+ main_window = app["Information"]
342
+
343
+ main_window.set_focus()
344
+
345
+ console.print(f"Tentando clicar no Botão OK...\n")
346
+ btn_ok = main_window.child_window(class_name="TButton")
347
+
348
+ if btn_ok.exists():
349
+ btn_ok.click()
350
+ break
351
+ else:
352
+ console.print(f" botão OK Não enontrado")
353
+ except Exception as e:
354
+ try:
355
+ await worker_sleep(5)
356
+ await emsys.verify_warning_and_error("Warning", "OK")
357
+ await emsys.verify_warning_and_error("Aviso", "OK")
358
+ alterar_nop = await emsys.alterar_nop(nota["cfop"], nota["nfe"])
359
+
360
+ if alterar_nop:
361
+ return alterar_nop
362
+ except Exception as error:
363
+ observacao = f"Erro Processo Entrada de Notas: {str(error)}"
364
+ logger.error(observacao)
365
+ console.print(observacao, style="bold red")
366
+ return RpaRetornoProcessoDTO(
367
+ sucesso=False,
368
+ retorno=observacao,
369
+ status=RpaHistoricoStatusEnum.Falha,
370
+ tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
371
+ )
373
372
  else:
374
373
  console.print(f"Aguardando confirmação de nota incluida...\n")
375
374
  await worker_sleep(5)
@@ -391,14 +391,21 @@ async def entrada_de_notas_16(task: RpaProcessoEntradaDTO) -> RpaRetornoProcesso
391
391
 
392
392
  except Exception as e:
393
393
  try:
394
- await worker_sleep(5)
395
- await emsys.verify_warning_and_error("Aviso", "OK")
396
- alterar_nop_result = await emsys.alterar_nop(nota.get("cfop"))
397
-
394
+ alterar_nop_result = await emsys.alterar_nop(nota.get("cfop"), nota.get("nfe"))
398
395
  if alterar_nop_result:
399
396
  await worker_sleep(5)
400
397
  resultado = await emsys.verify_max_variation()
401
398
  return alterar_nop_result
399
+ except ValueError as ve:
400
+ observacao = f"Erro Processo Entrada de Notas: {str(ve)}"
401
+ logger.error(observacao)
402
+ console.print(observacao, style="bold red")
403
+ return RpaRetornoProcessoDTO(
404
+ sucesso=False,
405
+ retorno=observacao,
406
+ status=RpaHistoricoStatusEnum.Falha,
407
+ tags=[RpaTagDTO(descricao=RpaTagEnum.Negocio)]
408
+ )
402
409
  except Exception as error:
403
410
  observacao = f"Erro Processo Entrada de Notas: {str(error)}"
404
411
  logger.error(observacao)
@@ -409,6 +416,7 @@ async def entrada_de_notas_16(task: RpaProcessoEntradaDTO) -> RpaRetornoProcesso
409
416
  status=RpaHistoricoStatusEnum.Falha,
410
417
  tags=[RpaTagDTO(descricao=RpaTagEnum.Tecnico)]
411
418
  )
419
+
412
420
  try:
413
421
 
414
422
  await emsys.verify_warning_and_error("Warning", "OK")
@@ -0,0 +1,142 @@
1
+ import asyncio
2
+ import warnings
3
+
4
+ import pyautogui
5
+ from rich.console import Console
6
+
7
+ from worker_automate_hub.models.dto.rpa_historico_request_dto import RpaHistoricoStatusEnum, RpaRetornoProcessoDTO
8
+ from worker_automate_hub.models.dto.rpa_processo_entrada_dto import RpaProcessoEntradaDTO
9
+ from worker_automate_hub.utils.logger import logger
10
+ from worker_automate_hub.utils.util import (
11
+ find_element_center,
12
+ find_target_position,
13
+ kill_process,
14
+ take_screenshot,
15
+ type_text_into_field,
16
+ wait_element_ready_win,
17
+ )
18
+
19
+ console = Console()
20
+
21
+
22
+ async def login_emsys_versao_especifica(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoDTO:
23
+ from pywinauto.application import Application
24
+
25
+ warnings.filterwarnings(
26
+ "ignore",
27
+ category=UserWarning,
28
+ message="32-bit application should be automated using 32-bit Python",
29
+ )
30
+
31
+ try:
32
+ # Mata todos processos do emsys antes de abrir uma nova instancia
33
+ await kill_process("EMSys")
34
+
35
+ # Abre um novo emsys
36
+ app = Application().start("C:\\Rezende\\EMSys3\\EMSys3.977.exe")
37
+ console.print("\nEMSys iniciando...", style="bold green")
38
+
39
+ await asyncio.sleep(10)
40
+ # Testa se existe alguma mensagem no Emsys
41
+ window_message_login_emsys = await find_element_center(
42
+ "assets/emsys/window_message_login_emsys.png", (560, 487, 1121, 746), 10
43
+ )
44
+
45
+ # Obtém a resolução da tela
46
+ screen_width, screen_height = pyautogui.size()
47
+
48
+ pyautogui.click(screen_width / 2, screen_height / 2)
49
+
50
+ # Clica no "Não mostrar novamente" se existir
51
+ if window_message_login_emsys:
52
+ pyautogui.click(window_message_login_emsys.x, window_message_login_emsys.y)
53
+ pyautogui.click(
54
+ window_message_login_emsys.x + 383, window_message_login_emsys.y + 29
55
+ )
56
+ console.print("Mensagem de login encontrada e fechada.", style="bold green")
57
+
58
+ # Ve se o Emsys esta aberto no login
59
+ image_emsys_login = await find_element_center(
60
+ "assets/emsys/logo_emsys_login.png", (800, 200, 1400, 700), 600
61
+ )
62
+ # config_robot = await get_config_by_name("Login EmSys")
63
+ if image_emsys_login:
64
+ # await asyncio.sleep(10)
65
+ # type_text_into_field(
66
+ # config_robot["EmSys DB"], app["Login"]["ComboBox"], True, "50"
67
+ # )
68
+ # pyautogui.press("enter")
69
+ # await asyncio.sleep(2)
70
+
71
+ if await wait_element_ready_win(app["Login"]["Edit2"], 30):
72
+ disconect_database = await find_element_center(
73
+ "assets/emsys/disconect_database.png", (1123, 452, 1400, 578), 300
74
+ )
75
+
76
+ if disconect_database:
77
+ # Realiza login no Emsys
78
+ type_text_into_field(
79
+ task.configEntrada["user"], app["Login"]["Edit2"], True, "50"
80
+ )
81
+ pyautogui.press("tab")
82
+ type_text_into_field(
83
+ task.configEntrada["pass"],
84
+ app["Login"]["Edit1"],
85
+ True,
86
+ "50",
87
+ )
88
+ pyautogui.press("enter")
89
+
90
+ # Seleciona a filial do emsys
91
+ selecao_filial = await find_element_center(
92
+ "assets/emsys/selecao_filial.png", (480, 590, 820, 740), 15
93
+ )
94
+
95
+ if selecao_filial == None:
96
+ screenshot_path = take_screenshot()
97
+ selecao_filial = find_target_position(
98
+ screenshot_path, "Grupo", 0, -50, 15
99
+ )
100
+
101
+ if selecao_filial == None:
102
+ selecao_filial = (804, 640)
103
+
104
+ pyautogui.write(task.configEntrada["filial"])
105
+ pyautogui.press("enter")
106
+
107
+ else:
108
+ type_text_into_field(
109
+ task.configEntrada["filial"],
110
+ app["Seleção de Empresas"]["Edit"],
111
+ True,
112
+ "50",
113
+ )
114
+ pyautogui.press("enter")
115
+
116
+ button_logout = await find_element_center(
117
+ "assets/emsys/button_logout.png", (0, 0, 130, 150), 75
118
+ )
119
+
120
+ if button_logout:
121
+ console.print(
122
+ "Login realizado com sucesso.", style="bold green"
123
+ )
124
+ return RpaRetornoProcessoDTO(
125
+ sucesso=True,
126
+ retorno="Processo de login no EMSys executado com sucesso.",
127
+ status=RpaHistoricoStatusEnum.Sucesso,
128
+ )
129
+
130
+ else:
131
+ logger.info("login_emsys_win -> wait_element_ready_win [1]")
132
+ console.print("Elemento de login não está pronto.", style="bold red")
133
+
134
+ except Exception as ex:
135
+ logger.error("Erro em login_emsys: " + str(ex))
136
+ console.print(f"Erro em login_emsys: {str(ex)}", style="bold red")
137
+ return RpaRetornoProcessoDTO(
138
+ sucesso=False,
139
+ retorno=f"Erro em login_emsys: {str(ex)}",
140
+ status=RpaHistoricoStatusEnum.Falha,
141
+ )
142
+
@@ -52,6 +52,7 @@ from worker_automate_hub.tasks.jobs.entrada_de_notas_7139 import (
52
52
  )
53
53
  from worker_automate_hub.tasks.jobs.exemplo_processo import exemplo_processo
54
54
  from worker_automate_hub.tasks.jobs.login_emsys import login_emsys
55
+ from worker_automate_hub.tasks.jobs.login_emsys_versao_especifica import login_emsys_versao_especifica
55
56
  from worker_automate_hub.tasks.jobs.playground import playground
56
57
  from worker_automate_hub.tasks.jobs.transferencias import transferencias
57
58
  from worker_automate_hub.tasks.jobs.sped_fiscal import sped_fiscal
@@ -59,6 +60,7 @@ from worker_automate_hub.tasks.jobs.sped_fiscal import sped_fiscal
59
60
  task_definitions = {
60
61
  "5b295021-8df7-40a1-a45e-fe7109ae3902": exemplo_processo,
61
62
  "a0788650-de48-454f-acbf-3537ead2d8ed": login_emsys,
63
+ "7d319f61-5e12-425c-86ed-678f0d9e14bd": login_emsys_versao_especifica,
62
64
  "abcfa1ba-d580-465a-aefb-c15ac4514407": descartes,
63
65
  "2c8ee738-7447-4517-aee7-ce2c9d25cea9": transferencias,
64
66
  "855f9e0f-e972-4f52-bc1a-60d1fc244e79": conexao_rdp,
@@ -14,6 +14,7 @@ from pywinauto_recorder.player import set_combobox
14
14
  from rich.console import Console
15
15
  from datetime import datetime, timedelta
16
16
 
17
+ from worker_automate_hub.api.client import get_status_nf_emsys
17
18
  from worker_automate_hub.models.dao.rpa_configuracao import RpaConfiguracao
18
19
  from worker_automate_hub.models.dto.rpa_historico_request_dto import (
19
20
  RpaHistoricoStatusEnum,
@@ -28,6 +29,8 @@ from worker_automate_hub.utils.util import worker_sleep, is_window_open_by_class
28
29
  pyautogui.PAUSE = 0.5
29
30
  import pyperclip
30
31
 
32
+ ASSETS_PATH = "assets"
33
+
31
34
  console = Console()
32
35
 
33
36
 
@@ -674,7 +677,7 @@ class EMSys:
674
677
  f"Erro ao deletar o arquivo {xml_filename}: {str(e)}"
675
678
  ) from e
676
679
 
677
- async def alterar_nop(self, cfop: str) -> RpaRetornoProcessoDTO | None:
680
+ async def alterar_nop(self, cfop: str, chave_acesso=None) -> RpaRetornoProcessoDTO | None:
678
681
  await self.click_principal()
679
682
  console.print("Alterando a NOP...\n")
680
683
  pyautogui.click(945, 543)
@@ -700,6 +703,15 @@ class EMSys:
700
703
  pyautogui.hotkey("enter")
701
704
  await worker_sleep(6)
702
705
  await self.incluir_registro()
706
+ await worker_sleep(15)
707
+
708
+ if chave_acesso is not None:
709
+ console.print("\nVerifica se a nota ja foi lançada...")
710
+ nf_chave_acesso = int(chave_acesso)
711
+ status_nf_emsys = await get_status_nf_emsys(nf_chave_acesso)
712
+ if status_nf_emsys.get("status") != "Lançada":
713
+ raise ValueError("A nota não possui itens com o mesmo CFOP de capa. Necessário que ao menos um item possua este CFOP")
714
+
703
715
  else:
704
716
  pyautogui.hotkey("esc")
705
717
  observacao = f"Nota bonificada do tipo ({cfop}), está retornando diferença de itens sem o mesmo CFOP de capa. Por favor verifique a nota."
@@ -709,11 +721,28 @@ class EMSys:
709
721
  status=RpaHistoricoStatusEnum.Falha,
710
722
  tags=[RpaTagDTO(descricao=RpaTagEnum.Negocio)]
711
723
  )
712
- except:
713
- console.print("Falha ao alterar o NOP")
724
+ except ValueError as e:
725
+ console.print(f"Erro de validação ao alterar o NOP: {e}", style="bold red")
726
+ raise
727
+ except Exception as e:
728
+ console.print(f"Erro inesperado ao alterar o NOP: {e}", style="bold red")
729
+ raise
714
730
 
715
731
  return RpaRetornoProcessoDTO(
716
732
  sucesso=True,
717
733
  retorno="Nota lançada com sucesso!",
718
734
  status=RpaHistoricoStatusEnum.Sucesso,
719
735
  )
736
+
737
+ async def verify_nf_incuded(self) -> bool:
738
+ try:
739
+ nota_incluida = pyautogui.locateOnScreen(
740
+ ASSETS_PATH + "\\entrada_notas\\nota_fiscal_incluida.png", confidence=0.7
741
+ )
742
+ if nota_incluida:
743
+ return True
744
+ else:
745
+ return False
746
+ except Exception as e:
747
+ console.print(f"Error: {e}")
748
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: worker-automate-hub
3
- Version: 0.5.20
3
+ Version: 0.5.22
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
@@ -42,8 +42,8 @@ worker_automate_hub/tasks/jobs/ecac_estadual_mt.py,sha256=C26zmpGQGUq6sP9lU9nanM
42
42
  worker_automate_hub/tasks/jobs/ecac_estadual_sc.py,sha256=fZD67poalpANlbJoMgnAvO-APp84oicvXEFnbeyulEk,13851
43
43
  worker_automate_hub/tasks/jobs/ecac_estadual_sp.py,sha256=AqSsn0SlK_nok4AhMCNUlApQ-LwHYNXeUwOrMLyWmNU,29418
44
44
  worker_automate_hub/tasks/jobs/ecac_federal.py,sha256=VFOrbMuMHL3ac1sJ-z-N1p1WYtP-e-JJHbvUfgmfgNw,55748
45
- worker_automate_hub/tasks/jobs/entrada_de_notas_15.py,sha256=cmPeHxR293K1l9i2b_6BWf3hLnJQ6PQaxRc4xx7IRxs,15023
46
- worker_automate_hub/tasks/jobs/entrada_de_notas_16.py,sha256=SYBM3UtmPYXJqDf5B3h-1wQ-xB1FbB1AlyxLk9bS2bY,20258
45
+ worker_automate_hub/tasks/jobs/entrada_de_notas_15.py,sha256=-UVE1nIWDqjK1zc6WPllhronO5ppjjav--l8WwMYfAY,15314
46
+ worker_automate_hub/tasks/jobs/entrada_de_notas_16.py,sha256=t17lwubu3HT7uOV0fdxOKvoIeOQr6ELMiJtyEw0Aac4,20652
47
47
  worker_automate_hub/tasks/jobs/entrada_de_notas_207.py,sha256=JJ1jtExQRXsI2UvxklX7jJDtzim54QyGSQ5U54E7jbg,25609
48
48
  worker_automate_hub/tasks/jobs/entrada_de_notas_32.py,sha256=MZpLWZEvk1voQ-jVedmzyr-NcMDtgBxGMa0FrjK8Kzg,33989
49
49
  worker_automate_hub/tasks/jobs/entrada_de_notas_33.py,sha256=30Kx_VlyXQmrjyVPdSKN_c6DZ8Ggueee9hz5GYX-1mo,32841
@@ -59,10 +59,11 @@ worker_automate_hub/tasks/jobs/fechar_conexao_rdp.py,sha256=8GVImU7EnncCSxbbuEC4
59
59
  worker_automate_hub/tasks/jobs/fidc_gerar_nosso_numero.py,sha256=tUU5-xbwQtpp4HcEGYaYPW7i4y3raKC0IgjWpT0338c,10548
60
60
  worker_automate_hub/tasks/jobs/fidc_remessa_cobranca_cnab240.py,sha256=QBGm6eS5JghgNWNqZlk1g2a2iV8LnBLiOTBBL3Giet0,4181
61
61
  worker_automate_hub/tasks/jobs/login_emsys.py,sha256=scdKsseFOL-7UQ5D743VaZZzWBKaEfq0XzYNmROUOgE,5703
62
+ worker_automate_hub/tasks/jobs/login_emsys_versao_especifica.py,sha256=cGj98H7g_1HpKsFAdrpVdFF14wd7Qp2PXgwd6ww-qSw,5642
62
63
  worker_automate_hub/tasks/jobs/playground.py,sha256=7vWDg9DwToHwGJ6_XOa8TQ6LmfRV5Qz2TaOV3q3P9sA,1918
63
64
  worker_automate_hub/tasks/jobs/sped_fiscal.py,sha256=zJjyvMUTeIGrjczdIDxckx5J-FGRt5L3hg_ErqM66d4,28208
64
65
  worker_automate_hub/tasks/jobs/transferencias.py,sha256=i3fCanHZ_pSwPW03THpQPqlzrDjbV4QbKkXpUqV3dxM,39272
65
- worker_automate_hub/tasks/task_definitions.py,sha256=KG84tDaTlCpthdYmdR1193BOudELGcoglmIpQpd2PLQ,4606
66
+ worker_automate_hub/tasks/task_definitions.py,sha256=TLJKIyi8IgZL_3EqVzER74kT3nfFdpSMbUwnnEkLpZk,4786
66
67
  worker_automate_hub/tasks/task_executor.py,sha256=DUN2-Bi8Zxv0J_QUoV1vt7KgfbmYtixuA6i3Uzt67bA,5256
67
68
  worker_automate_hub/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
69
  worker_automate_hub/utils/env.py,sha256=TacQjGRO7PUNpttrhTAc5Gnegaiysl2Knsv1P8qfkfs,57
@@ -71,9 +72,9 @@ worker_automate_hub/utils/logger.py,sha256=FYV9fg0_RAYJF_ZOCJEbqQAiCXlXk2gMpvUU1
71
72
  worker_automate_hub/utils/toast.py,sha256=xPHc5r5uOxB_cZlCzm13Kt2qSKLLFZALncU6Qg3Ft68,1162
72
73
  worker_automate_hub/utils/updater.py,sha256=en2FCGhI8aZ-JNP3LQm64NJDc4awCNW7UhbVlwDl49Y,7972
73
74
  worker_automate_hub/utils/util.py,sha256=Eyy0mLLt_xd_zVXWoHAb-GK0PU1xZdWPvh-IndajxDk,128815
74
- worker_automate_hub/utils/utils_nfe_entrada.py,sha256=jWhLVwEovorHvQha9u6EQn5njsnz6sbMpPPreYhhIyw,29594
75
+ worker_automate_hub/utils/utils_nfe_entrada.py,sha256=3keuXhgNkEMZhLX9gGzck41SAwJqIPlwWSo_WSOs2HI,30980
75
76
  worker_automate_hub/worker.py,sha256=CT-poyP1ZYvubArYsnnNd9oJ53SPaDwgr6p6keS3nI4,6248
76
- worker_automate_hub-0.5.20.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
77
- worker_automate_hub-0.5.20.dist-info/METADATA,sha256=cqvotEQOKwvnEDdKIlMjZtCeJxxCIVRsbHqsdJvoEm8,2894
78
- worker_automate_hub-0.5.20.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
79
- worker_automate_hub-0.5.20.dist-info/RECORD,,
77
+ worker_automate_hub-0.5.22.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
78
+ worker_automate_hub-0.5.22.dist-info/METADATA,sha256=Upv7AVy8AdSniz2ZHlGi3u_b4NJAulUE2g7UOjHw2no,2894
79
+ worker_automate_hub-0.5.22.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
80
+ worker_automate_hub-0.5.22.dist-info/RECORD,,