worker-automate-hub 0.4.415__py3-none-any.whl → 0.4.417__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- worker_automate_hub/tasks/jobs/entrada_de_notas_39.py +37 -28
- worker_automate_hub/tasks/jobs/entrada_de_notas_500.py +114 -1
- worker_automate_hub/tasks/jobs/entrada_de_notas_9.py +42 -31
- {worker_automate_hub-0.4.415.dist-info → worker_automate_hub-0.4.417.dist-info}/METADATA +1 -1
- {worker_automate_hub-0.4.415.dist-info → worker_automate_hub-0.4.417.dist-info}/RECORD +7 -7
- {worker_automate_hub-0.4.415.dist-info → worker_automate_hub-0.4.417.dist-info}/WHEEL +0 -0
- {worker_automate_hub-0.4.415.dist-info → worker_automate_hub-0.4.417.dist-info}/entry_points.txt +0 -0
@@ -521,36 +521,36 @@ async def entrada_de_notas_39(task: RpaProcessoEntradaDTO) -> RpaRetornoProcesso
|
|
521
521
|
|
522
522
|
select_box_nop_select = main_window.child_window(class_name="TDBIComboBox", found_index=0)
|
523
523
|
select_box_nop_select.click()
|
524
|
-
|
524
|
+
pyautogui.write("1152")
|
525
|
+
await worker_sleep(2)
|
526
|
+
pyautogui.hotkey("enter")
|
525
527
|
await worker_sleep(2)
|
526
|
-
set_combobox("||List", nop_value)
|
527
|
-
await worker_sleep(1)
|
528
|
-
pyautogui.press('down')
|
529
528
|
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
select_box_nop_select.click()
|
535
|
-
console.print(f"Inserindo a informação da NOP: {nop_value} ...\n")
|
536
|
-
await worker_sleep(2)
|
537
|
-
set_combobox("||List", nop_value)
|
538
|
-
await worker_sleep(2)
|
539
|
-
pyautogui.hotkey("enter")
|
540
|
-
await worker_sleep(2)
|
541
|
-
console.print(f"Confirmando a NOP selecionada...\n")
|
542
|
-
main_window.set_focus()
|
543
|
-
await worker_sleep(1)
|
529
|
+
max_try = 10
|
530
|
+
i = 0
|
531
|
+
first_nop = False
|
532
|
+
while i <= max_try:
|
544
533
|
select_box_nop_select = main_window.child_window(class_name="TDBIComboBox", found_index=0)
|
545
534
|
nop_selected = select_box_nop_select.window_text()
|
546
|
-
if '1152'
|
547
|
-
|
535
|
+
if '1152 - ENTRADAS P/ TRANSFERENCIA DE MERCADORIAS- 1.152' == nop_selected and first_nop == False:
|
536
|
+
first_nop = True
|
548
537
|
else:
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
538
|
+
if '1152 - ENTRADAS P/ TRANSFERENCIA DE MERCADORIAS- 1.152' == nop_selected:
|
539
|
+
break
|
540
|
+
|
541
|
+
pyautogui.press('down')
|
542
|
+
await worker_sleep(2)
|
543
|
+
i = i + 1
|
544
|
+
|
545
|
+
|
546
|
+
if i <= max_try and first_nop:
|
547
|
+
console.print(f"A segunda correspondência '1152 - ENTRADAS P/ TRANSFERENCIA DE MERCADORIAS- 1.152' foi encontrada e selecionada.")
|
548
|
+
else:
|
549
|
+
return RpaRetornoProcessoDTO(
|
550
|
+
sucesso=False,
|
551
|
+
retorno=f"Erro não foi encontrada a segunda correspondência dentro do número máximo de tentativas ({max_try})",
|
552
|
+
status=RpaHistoricoStatusEnum.Falha,
|
553
|
+
)
|
554
554
|
|
555
555
|
await emsys.incluir_registro()
|
556
556
|
await worker_sleep(10)
|
@@ -589,8 +589,7 @@ async def entrada_de_notas_39(task: RpaProcessoEntradaDTO) -> RpaRetornoProcesso
|
|
589
589
|
sucesso=True,
|
590
590
|
retorno="Nota Lançada com sucesso!",
|
591
591
|
status=RpaHistoricoStatusEnum.Sucesso,
|
592
|
-
)
|
593
|
-
|
592
|
+
)
|
594
593
|
except Exception as e:
|
595
594
|
select_box_nop_select.click()
|
596
595
|
return RpaRetornoProcessoDTO(
|
@@ -709,7 +708,17 @@ async def entrada_de_notas_39(task: RpaProcessoEntradaDTO) -> RpaRetornoProcesso
|
|
709
708
|
app = Application().connect(class_name="TFrmTelaSelecao")
|
710
709
|
main_window = app["TFrmTelaSelecao"]
|
711
710
|
send_keys("%o")
|
712
|
-
await worker_sleep(
|
711
|
+
await worker_sleep(7)
|
712
|
+
|
713
|
+
# VERIFICANDO A EXISTENCIA DE ERRO
|
714
|
+
erro_pop_up = await is_window_open("Erro")
|
715
|
+
if erro_pop_up["IsOpened"] == True:
|
716
|
+
error_work = await error_after_xml_imported()
|
717
|
+
return RpaRetornoProcessoDTO(
|
718
|
+
sucesso=False,
|
719
|
+
retorno=error_work.retorno,
|
720
|
+
status=RpaHistoricoStatusEnum.Falha,
|
721
|
+
)
|
713
722
|
|
714
723
|
max_attempts = 50
|
715
724
|
i = 0
|
@@ -523,8 +523,121 @@ async def entrada_de_notas_500(task: RpaProcessoEntradaDTO) -> RpaRetornoProcess
|
|
523
523
|
app = Application().connect(class_name="TFrmTelaSelecao")
|
524
524
|
main_window = app["TFrmTelaSelecao"]
|
525
525
|
send_keys("%o")
|
526
|
-
|
527
526
|
|
527
|
+
|
528
|
+
await worker_sleep(7)
|
529
|
+
aviso_pop_up = await is_window_open("Aviso")
|
530
|
+
if aviso_pop_up["IsOpened"] == True:
|
531
|
+
app = Application().connect(title="Aviso")
|
532
|
+
main_window = app["Aviso"]
|
533
|
+
main_window.set_focus()
|
534
|
+
|
535
|
+
console.print(f"Clicando em Aviso, para andamento do processo...\n")
|
536
|
+
btn_no = main_window.child_window(title="OK")
|
537
|
+
if btn_no.exists(timeout=5) and btn_no.is_enabled():
|
538
|
+
btn_no.set_focus()
|
539
|
+
btn_no.click()
|
540
|
+
await worker_sleep(2)
|
541
|
+
|
542
|
+
try:
|
543
|
+
pyautogui.click(623, 374)
|
544
|
+
await worker_sleep(1)
|
545
|
+
pyautogui.press('home')
|
546
|
+
console.print("Alterando a NOP...\n")
|
547
|
+
|
548
|
+
app = Application().connect(class_name="TFrmNotaFiscalEntrada", timeout=30)
|
549
|
+
main_window = app["TFrmNotaFiscalEntrada"]
|
550
|
+
main_window.set_focus()
|
551
|
+
|
552
|
+
select_box_nop_select = main_window.child_window(class_name="TDBIComboBox", found_index=0)
|
553
|
+
select_box_nop_select.click()
|
554
|
+
pyautogui.write("1152")
|
555
|
+
await worker_sleep(2)
|
556
|
+
pyautogui.hotkey("enter")
|
557
|
+
await worker_sleep(2)
|
558
|
+
|
559
|
+
max_try = 10
|
560
|
+
i = 0
|
561
|
+
first_nop = False
|
562
|
+
while i <= max_try:
|
563
|
+
select_box_nop_select = main_window.child_window(class_name="TDBIComboBox", found_index=0)
|
564
|
+
nop_selected = select_box_nop_select.window_text()
|
565
|
+
if '1152 - ENTRADAS P/ TRANSFERENCIA DE MERCADORIAS- 1.152' == nop_selected and first_nop == False:
|
566
|
+
first_nop = True
|
567
|
+
else:
|
568
|
+
if '1152 - ENTRADAS P/ TRANSFERENCIA DE MERCADORIAS- 1.152' == nop_selected:
|
569
|
+
break
|
570
|
+
|
571
|
+
pyautogui.press('down')
|
572
|
+
await worker_sleep(2)
|
573
|
+
i = i + 1
|
574
|
+
|
575
|
+
|
576
|
+
if i <= max_try and first_nop:
|
577
|
+
console.print(f"A segunda correspondência '1152 - ENTRADAS P/ TRANSFERENCIA DE MERCADORIAS- 1.152' foi encontrada e selecionada.")
|
578
|
+
else:
|
579
|
+
return RpaRetornoProcessoDTO(
|
580
|
+
sucesso=False,
|
581
|
+
retorno=f"Erro não foi encontrada a segunda correspondência dentro do número máximo de tentativas ({max_try})",
|
582
|
+
status=RpaHistoricoStatusEnum.Falha,
|
583
|
+
)
|
584
|
+
|
585
|
+
try:
|
586
|
+
ASSETS_PATH = "assets"
|
587
|
+
inserir_registro = pyautogui.locateOnScreen(
|
588
|
+
ASSETS_PATH + "\\entrada_notas\\IncluirRegistro.png", confidence=0.8
|
589
|
+
)
|
590
|
+
pyautogui.click(inserir_registro)
|
591
|
+
except Exception as e:
|
592
|
+
console.print(
|
593
|
+
f"Não foi possivel incluir o registro utilizando reconhecimento de imagem, Error: {e}...\n tentando inserir via posição...\n"
|
594
|
+
)
|
595
|
+
await incluir_registro()
|
596
|
+
await worker_sleep(10)
|
597
|
+
|
598
|
+
console.print("Verificando a existencia de POP-UP de Itens que Ultrapassam a Variação Máxima de Custo ...\n")
|
599
|
+
itens_variacao_maxima = await is_window_open_by_class("TFrmTelaSelecao", "TFrmTelaSelecao")
|
600
|
+
if itens_variacao_maxima["IsOpened"] == True:
|
601
|
+
app = Application().connect(class_name="TFrmTelaSelecao")
|
602
|
+
main_window = app["TFrmTelaSelecao"]
|
603
|
+
send_keys("%o")
|
604
|
+
await worker_sleep(7)
|
605
|
+
|
606
|
+
aviso_pop_up = await is_window_open("Aviso")
|
607
|
+
if aviso_pop_up["IsOpened"] == True:
|
608
|
+
return RpaRetornoProcessoDTO(
|
609
|
+
sucesso=False,
|
610
|
+
retorno=f"Erro na validação de CFOP, foi encontrado mais de uma opção com a mesma informação",
|
611
|
+
status=RpaHistoricoStatusEnum.Falha,
|
612
|
+
)
|
613
|
+
|
614
|
+
console.print("Verificando a existencia de Warning informando que a Soma dos pagamentos não bate com o valor da nota. ...\n")
|
615
|
+
warning_pop_up_pagamentos = await is_window_open("Warning")
|
616
|
+
if warning_pop_up_pagamentos["IsOpened"] == True:
|
617
|
+
return RpaRetornoProcessoDTO(
|
618
|
+
sucesso=False,
|
619
|
+
retorno=f"A soma dos pagamentos não bate com o valor da nota.",
|
620
|
+
status=RpaHistoricoStatusEnum.Falha,
|
621
|
+
)
|
622
|
+
|
623
|
+
await worker_sleep(60)
|
624
|
+
console.print("\nVerifica se a nota ja foi lançada...")
|
625
|
+
nf_chave_acesso = int(nota.get("nfe"))
|
626
|
+
status_nf_emsys = await get_status_nf_emsys(nf_chave_acesso)
|
627
|
+
if status_nf_emsys.get("status") == "Lançada":
|
628
|
+
return RpaRetornoProcessoDTO(
|
629
|
+
sucesso=True,
|
630
|
+
retorno="Nota Lançada com sucesso!",
|
631
|
+
status=RpaHistoricoStatusEnum.Sucesso,
|
632
|
+
)
|
633
|
+
except Exception as e:
|
634
|
+
select_box_nop_select.click()
|
635
|
+
return RpaRetornoProcessoDTO(
|
636
|
+
sucesso=False,
|
637
|
+
retorno=f"Erro ao alterar o NOP, erro {e}",
|
638
|
+
status=RpaHistoricoStatusEnum.Falha,
|
639
|
+
)
|
640
|
+
|
528
641
|
# Verificando se possui pop-up de Warning
|
529
642
|
await worker_sleep(6)
|
530
643
|
warning_pop_up = await is_window_open("Warning")
|
@@ -7,7 +7,7 @@ import pyautogui
|
|
7
7
|
import pytesseract
|
8
8
|
from datetime import datetime, timedelta
|
9
9
|
from pywinauto.application import Application
|
10
|
-
from PIL import Image, ImageEnhance
|
10
|
+
from PIL import Image, ImageEnhance, ImageFilter
|
11
11
|
from pywinauto.keyboard import send_keys
|
12
12
|
import win32clipboard
|
13
13
|
from pywinauto_recorder.player import set_combobox
|
@@ -461,39 +461,50 @@ async def entrada_de_notas_9(task: RpaProcessoEntradaDTO) -> RpaRetornoProcessoD
|
|
461
461
|
if distribuiu_algo:
|
462
462
|
console.print(f"Extraindo informação da Janela de Distribuir Itens para realização do OCR...\n")
|
463
463
|
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
464
|
+
max_attempts = 3
|
465
|
+
attempts = 0
|
466
|
+
resultado = None
|
467
|
+
while attempts < max_attempts:
|
468
|
+
main_window.set_focus()
|
469
|
+
window_rect = main_window.rectangle()
|
470
|
+
screenshot = pyautogui.screenshot(
|
471
|
+
region=(
|
472
|
+
window_rect.left,
|
473
|
+
window_rect.top,
|
474
|
+
window_rect.width(),
|
475
|
+
window_rect.height(),
|
476
|
+
)
|
472
477
|
)
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
console.print(f"Print salvo em {path_to_png}...\n")
|
478
|
+
username = getpass.getuser()
|
479
|
+
path_to_png = f"C:\\Users\\{username}\\Downloads\\distribuir_iten_{nota.get("nfe")}.png"
|
480
|
+
screenshot.save(path_to_png)
|
481
|
+
console.print(f"Print salvo em {path_to_png}...\n")
|
478
482
|
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
|
483
|
+
console.print(
|
484
|
+
f"Preparando a imagem para maior resolução e assertividade no OCR...\n"
|
485
|
+
)
|
486
|
+
image = Image.open(path_to_png)
|
487
|
+
image = image.filter(ImageFilter.SHARPEN)
|
488
|
+
image = image.convert("L")
|
489
|
+
enhancer = ImageEnhance.Contrast(image)
|
490
|
+
image = enhancer.enhance(2.0)
|
491
|
+
image.save(path_to_png)
|
492
|
+
console.print(f"Imagem preparada com sucesso...\n")
|
493
|
+
console.print(f"Realizando OCR...\n")
|
494
|
+
await worker_sleep(1)
|
495
|
+
captured_text = pytesseract.image_to_string(Image.open(path_to_png))
|
496
|
+
console.print(
|
497
|
+
f"Texto Full capturado {captured_text}...\n"
|
498
|
+
)
|
499
|
+
os.remove(path_to_png)
|
494
500
|
|
495
|
-
|
496
|
-
|
501
|
+
pattern_qtd_restante = r"Quantidade restante:\s([\d,]+)"
|
502
|
+
resultado = re.search(pattern_qtd_restante, captured_text)
|
503
|
+
if resultado:
|
504
|
+
break
|
505
|
+
else:
|
506
|
+
await worker_sleep(2)
|
507
|
+
attempts += 1
|
497
508
|
|
498
509
|
try:
|
499
510
|
if resultado:
|
@@ -44,11 +44,11 @@ worker_automate_hub/tasks/jobs/entrada_de_notas_32.py,sha256=0cneKY6bQU5neo3TKlG
|
|
44
44
|
worker_automate_hub/tasks/jobs/entrada_de_notas_33.py,sha256=ktXc_kdMhlz9cbb7XjfMJhME29mgMFd_FnatxSZZU_s,31457
|
45
45
|
worker_automate_hub/tasks/jobs/entrada_de_notas_34.py,sha256=iaSmtWTWlazHDtGp22yTV5J5rHDhUCbEaCAnpU7UWyM,31808
|
46
46
|
worker_automate_hub/tasks/jobs/entrada_de_notas_36.py,sha256=vFkDcgJ9uxrMMLYdeONCMxh6_evnhgF1Sun5HEHAWa4,22716
|
47
|
-
worker_automate_hub/tasks/jobs/entrada_de_notas_39.py,sha256=
|
48
|
-
worker_automate_hub/tasks/jobs/entrada_de_notas_500.py,sha256=
|
47
|
+
worker_automate_hub/tasks/jobs/entrada_de_notas_39.py,sha256=5WkmAOp18NlPfx0Cn28Lo1ldqOZACAss5dxQCm6VjiE,32767
|
48
|
+
worker_automate_hub/tasks/jobs/entrada_de_notas_500.py,sha256=MYPaYAP2iwdBYDZUf39f7yGibTME9uObEash_QTCmFA,32231
|
49
49
|
worker_automate_hub/tasks/jobs/entrada_de_notas_505.py,sha256=jIml8gjXPdI6_x7S9VVV8IrKZRF7_PTNOMnhNmYMDTU,14490
|
50
50
|
worker_automate_hub/tasks/jobs/entrada_de_notas_7139.py,sha256=8XP9G3n0PUeshbRWkWKOMnyUGRWspIolPZVqQTR3SMI,14184
|
51
|
-
worker_automate_hub/tasks/jobs/entrada_de_notas_9.py,sha256=
|
51
|
+
worker_automate_hub/tasks/jobs/entrada_de_notas_9.py,sha256=DBzP8O-m7OvuBOmWGfmC7JwCQ29IkKFAWD6JnJI7BLE,48452
|
52
52
|
worker_automate_hub/tasks/jobs/exemplo_processo.py,sha256=3-zxbb-9YHPmSA_K1Qgxp_FwSqg2QDjGBRCLxDZ8QoQ,3451
|
53
53
|
worker_automate_hub/tasks/jobs/fidc_gerar_nosso_numero.py,sha256=iXIKBMNFPj3L6G5Iq5nyDKiZT3NAP5sIhRSzYdURpNw,9571
|
54
54
|
worker_automate_hub/tasks/jobs/fidc_remessa_cobranca_cnab240.py,sha256=QBGm6eS5JghgNWNqZlk1g2a2iV8LnBLiOTBBL3Giet0,4181
|
@@ -67,7 +67,7 @@ worker_automate_hub/utils/updater.py,sha256=en2FCGhI8aZ-JNP3LQm64NJDc4awCNW7UhbV
|
|
67
67
|
worker_automate_hub/utils/util.py,sha256=YQkdPMCgrwuCJG_069p1cIG7xTg8VgvSHlGnIQrlyHo,119625
|
68
68
|
worker_automate_hub/utils/utils_nfe_entrada.py,sha256=yQFyDzvXPSO-UYV1m38WLJ3AWQgZYcyUkHZdCKE1jG4,28360
|
69
69
|
worker_automate_hub/worker.py,sha256=KDBU3L2kVobndrnN5coRZFTwVmBLKmPJjRv20sCo5Hc,4697
|
70
|
-
worker_automate_hub-0.4.
|
71
|
-
worker_automate_hub-0.4.
|
72
|
-
worker_automate_hub-0.4.
|
73
|
-
worker_automate_hub-0.4.
|
70
|
+
worker_automate_hub-0.4.417.dist-info/entry_points.txt,sha256=sddyhjx57I08RY8X7UxcTpdoOsWULAWNKN9Xr6pp_Kw,54
|
71
|
+
worker_automate_hub-0.4.417.dist-info/METADATA,sha256=LHx1gr8Grvvbo4E1tstlbhrnbCh56AgV68a6onv6JPA,2895
|
72
|
+
worker_automate_hub-0.4.417.dist-info/WHEEL,sha256=Nq82e9rUAnEjt98J6MlVmMCZb-t9cYE2Ir1kpBmnWfs,88
|
73
|
+
worker_automate_hub-0.4.417.dist-info/RECORD,,
|
File without changes
|
{worker_automate_hub-0.4.415.dist-info → worker_automate_hub-0.4.417.dist-info}/entry_points.txt
RENAMED
File without changes
|