worker-automate-hub 0.5.21__py3-none-any.whl → 0.5.23__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,6 @@ import aiohttp
2
2
  from rich.console import Console
3
3
 
4
4
  from worker_automate_hub.config.settings import load_env_config
5
- from worker_automate_hub.models.dao.rpa_fila import RpaFila
6
5
  from worker_automate_hub.utils.logger import logger
7
6
 
8
7
  console = Console()
@@ -1,12 +1,15 @@
1
1
  from datetime import datetime
2
- from typing import Optional
2
+ from typing import List, Optional
3
3
 
4
4
  from pydantic import BaseModel, Field
5
5
 
6
+ from worker_automate_hub.models.dao.rpa_robo import RpaRobo
7
+
6
8
 
7
9
  class RpaFila(BaseModel):
8
10
  uuidFila: Optional[str] = Field(None, alias="uuidFila")
9
- uuidRobo: Optional[str] = Field(None, alias="uuidRobo")
11
+ robos: Optional[List[RpaRobo]] = Field(None, alias="robos")
12
+ fkRobos: Optional[str] = Field(None, alias="fkRobos")
10
13
  uuidProcesso: str = Field(..., alias="uuidProcesso")
11
14
  prioridade: int = Field(..., alias="prioridade")
12
15
  configEntrada: Optional[dict] = Field(None, alias="configEntrada")
@@ -1,7 +1,9 @@
1
- from typing import Optional
1
+ from typing import List, Optional
2
2
 
3
3
  from pydantic import BaseModel, Field
4
4
 
5
+ from worker_automate_hub.models.dao.rpa_robo import RpaRobo
6
+
5
7
 
6
8
  class RpaProcesso(BaseModel):
7
9
  uuidProcesso: str = Field(..., alias="uuidProcesso")
@@ -11,8 +13,10 @@ class RpaProcesso(BaseModel):
11
13
  prioridade: Optional[int] = Field(None, alias="prioridade")
12
14
  tempoMedio: Optional[int] = Field(None, alias="tempoMedio")
13
15
  ativo: bool = Field(..., alias="ativo")
14
- uuidRoboPreferencia: Optional[str] = Field(None, alias="uuidRoboPreferencia")
15
- uuidRoboPosFalha: Optional[str] = Field(None, alias="uuidRoboPosFalha")
16
+ robos: Optional[List[RpaRobo]] = Field(None, alias="robos")
17
+ fkRobos: Optional[str] = Field(None, alias="fkRobos")
18
+ robosPosFalha: Optional[List[RpaRobo]] = Field(None, alias="robosPosFalha")
19
+ fkRobosPosFalha: Optional[str] = Field(None, alias="fkRobosPosFalha")
16
20
  notificarFalha: bool = Field(..., alias="notificarFalha")
17
21
  gerarTarefaPosFalha: bool = Field(..., alias="gerarTarefaPosFalha")
18
22
  reenfileirarPosFalha: bool = Field(..., alias="reenfileirarPosFalha")
@@ -0,0 +1,29 @@
1
+ from datetime import datetime
2
+ from typing import Optional
3
+
4
+ from pydantic import BaseModel, Field
5
+
6
+
7
+ class RpaRobo(BaseModel):
8
+ uuidRobo: Optional[str] = Field(None, alias="uuidRobo")
9
+ nomRobo: str = Field(..., alias="nomRobo")
10
+ desRobo: str = Field(..., alias="desRobo")
11
+ vmRobo: Optional[str] = Field(None, alias="vmRobo")
12
+ ativo: bool = Field(..., alias="ativo")
13
+ ipVm: Optional[str] = Field(None, alias="ipVm")
14
+ userVm: Optional[str] = Field(None, alias="userVm")
15
+ passwordVm: Optional[str] = Field(None, alias="passwordVm")
16
+ versao: Optional[str] = Field(None, alias="versao")
17
+ tipoRobo: str = Field(..., alias="tipoRobo")
18
+ disponibilidade: Optional[str] = Field(None, alias="disponibilidade")
19
+ provisionar: Optional[str] = Field(None, alias="provisionar")
20
+ gitAppName: Optional[str] = Field(None, alias="gitAppName")
21
+ controllerRobo: Optional[str] = Field(None, alias="controllerRobo")
22
+ cloudStatus: Optional[str] = Field(None, alias="cloudStatus")
23
+ lastAlive: Optional[str] = Field(None, alias="lastAlive")
24
+ observacao: Optional[str] = Field(None, alias="observacao")
25
+ createdAt: Optional[datetime] = Field(None, alias="createdAt")
26
+ updatedAt: Optional[datetime] = Field(None, alias="updatedAt")
27
+
28
+ class Config:
29
+ populate_by_name = True
@@ -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")
@@ -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.21
3
+ Version: 0.5.23
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
@@ -5,7 +5,7 @@ worker_automate_hub/api/client.py,sha256=tFrIr4mpjvUJ1uU--BCiWa3NT2Ru_yliBsWmfiG
5
5
  worker_automate_hub/api/helpers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  worker_automate_hub/api/helpers/api_helpers.py,sha256=SkheO2fXexeh-a4shr8Qzsz_kZhuSG0DJ7kbODctRbM,3696
7
7
  worker_automate_hub/api/rdp_service.py,sha256=L7orr60FkJr6zjETtA4me8tRYCW9m1g-i5pq6AILUFo,1647
8
- worker_automate_hub/api/rpa_fila_service.py,sha256=6RyzCvj2qODifz3cIwOg5kuUpk8cyN_yFmLV5YOJAoQ,2186
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
10
  worker_automate_hub/api/webhook_service.py,sha256=1VgkcOF0vY3cpV7-UOgrUj0qRuK9joDCvLhJkBBT0sQ,1751
11
11
  worker_automate_hub/cli.py,sha256=JB45pjPJ8_E-4xw0OjqDMcAw-tpDV0mjmvwJRTnTzY0,6862
@@ -23,9 +23,10 @@ worker_automate_hub/decorators/timeit.py,sha256=lL2bK8TbF4GE5Ma3LI5N5iJxGF1vwlZ4
23
23
  worker_automate_hub/models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
24
  worker_automate_hub/models/dao/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
25
  worker_automate_hub/models/dao/rpa_configuracao.py,sha256=pftPsgbqsDjN8pRrzcjBKKfXaHPFA7KkJx9gl8LW7lk,328
26
- worker_automate_hub/models/dao/rpa_fila.py,sha256=ZV-0ykAPKjMRTvgmts3WwPQQlCRv6h4mYr6Ki8IeoEE,699
26
+ worker_automate_hub/models/dao/rpa_fila.py,sha256=5qs2BSj9Lr_571uwuxMHUqKmofqaEm7s9KEfLpL4lNc,831
27
27
  worker_automate_hub/models/dao/rpa_historico.py,sha256=zKo_Wz_qMdB-cmFkJY1ckFx63wBPUumir37OxFijhes,1071
28
- worker_automate_hub/models/dao/rpa_processo.py,sha256=AfOUhJKL-AAOyjON4g7f6B7Bxa174FNC1Eh7oItK2kA,1233
28
+ worker_automate_hub/models/dao/rpa_processo.py,sha256=U3fEYub6O2VQtZLB18dBn3WwOJd87cz0A1p7YE1Bu4M,1422
29
+ worker_automate_hub/models/dao/rpa_robo.py,sha256=hhCRtdj2yxz8FS8dxgim0XHPdG4B2kThK_WVh9VVmZ8,1338
29
30
  worker_automate_hub/models/dto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
31
  worker_automate_hub/models/dto/rpa_historico_request_dto.py,sha256=QcbyI7Nl9c1Q_l8ew10fNZ4_rY-cYIBV5TWSr0zbXeU,1808
31
32
  worker_automate_hub/models/dto/rpa_processo_entrada_dto.py,sha256=NP2SNJ4Eq4xPQgwdw1CSwErB_g1RmBQR7pdQnOZipAE,678
@@ -42,8 +43,8 @@ worker_automate_hub/tasks/jobs/ecac_estadual_mt.py,sha256=C26zmpGQGUq6sP9lU9nanM
42
43
  worker_automate_hub/tasks/jobs/ecac_estadual_sc.py,sha256=fZD67poalpANlbJoMgnAvO-APp84oicvXEFnbeyulEk,13851
43
44
  worker_automate_hub/tasks/jobs/ecac_estadual_sp.py,sha256=AqSsn0SlK_nok4AhMCNUlApQ-LwHYNXeUwOrMLyWmNU,29418
44
45
  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
46
+ worker_automate_hub/tasks/jobs/entrada_de_notas_15.py,sha256=-UVE1nIWDqjK1zc6WPllhronO5ppjjav--l8WwMYfAY,15314
47
+ worker_automate_hub/tasks/jobs/entrada_de_notas_16.py,sha256=t17lwubu3HT7uOV0fdxOKvoIeOQr6ELMiJtyEw0Aac4,20652
47
48
  worker_automate_hub/tasks/jobs/entrada_de_notas_207.py,sha256=JJ1jtExQRXsI2UvxklX7jJDtzim54QyGSQ5U54E7jbg,25609
48
49
  worker_automate_hub/tasks/jobs/entrada_de_notas_32.py,sha256=MZpLWZEvk1voQ-jVedmzyr-NcMDtgBxGMa0FrjK8Kzg,33989
49
50
  worker_automate_hub/tasks/jobs/entrada_de_notas_33.py,sha256=30Kx_VlyXQmrjyVPdSKN_c6DZ8Ggueee9hz5GYX-1mo,32841
@@ -72,9 +73,9 @@ worker_automate_hub/utils/logger.py,sha256=FYV9fg0_RAYJF_ZOCJEbqQAiCXlXk2gMpvUU1
72
73
  worker_automate_hub/utils/toast.py,sha256=xPHc5r5uOxB_cZlCzm13Kt2qSKLLFZALncU6Qg3Ft68,1162
73
74
  worker_automate_hub/utils/updater.py,sha256=en2FCGhI8aZ-JNP3LQm64NJDc4awCNW7UhbVlwDl49Y,7972
74
75
  worker_automate_hub/utils/util.py,sha256=Eyy0mLLt_xd_zVXWoHAb-GK0PU1xZdWPvh-IndajxDk,128815
75
- worker_automate_hub/utils/utils_nfe_entrada.py,sha256=jWhLVwEovorHvQha9u6EQn5njsnz6sbMpPPreYhhIyw,29594
76
+ worker_automate_hub/utils/utils_nfe_entrada.py,sha256=3keuXhgNkEMZhLX9gGzck41SAwJqIPlwWSo_WSOs2HI,30980
76
77
  worker_automate_hub/worker.py,sha256=CT-poyP1ZYvubArYsnnNd9oJ53SPaDwgr6p6keS3nI4,6248
77
- worker_automate_hub-0.5.21.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
78
- worker_automate_hub-0.5.21.dist-info/METADATA,sha256=GVbyyIKX-VbFd3gXO_WQs4lEggGDFRUMwvmZPTM8Tv0,2894
79
- worker_automate_hub-0.5.21.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
80
- worker_automate_hub-0.5.21.dist-info/RECORD,,
78
+ worker_automate_hub-0.5.23.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
79
+ worker_automate_hub-0.5.23.dist-info/METADATA,sha256=yktKdzR4AnwBQys-avRER9EU4PyPDMPS3MDODogTX8c,2894
80
+ worker_automate_hub-0.5.23.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
81
+ worker_automate_hub-0.5.23.dist-info/RECORD,,