worker-automate-hub 0.5.20__py3-none-any.whl → 0.5.22__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,,