Skip to content

Commit 1d7ecbe

Browse files
authored
Merge pull request #1897 from totvs/release/v2.6.0rc20
Release/v2.6.0rc20
2 parents dd90e96 + 4d8231f commit 1d7ecbe

File tree

6 files changed

+608
-116
lines changed

6 files changed

+608
-116
lines changed

scripts/install_package.cmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,5 @@ taskkill /f /im chromedriver.exe
1313
echo -------------------------
1414
echo Installing project...
1515
echo -------------------------
16-
pip install -U dist/tir_framework-2.6.0rc19.tar.gz
16+
pip install -U dist/tir_framework-2.6.0rc20.tar.gz
1717
pause >nul | set/p = Press any key to exit ...

tir/main.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def __getattribute__(self, name):
3434
attr = object.__getattribute__(self, name)
3535

3636
if callable(attr) and not name.startswith('_'):
37-
preserve_methods = {'SearchBrowse', 'SetButton'}
37+
preserve_methods = {'SearchBrowse', 'FilterBrowse', 'SetButton'}
3838
if name not in preserve_methods:
3939
try:
4040
object.__getattribute__(self, 'config')._flag_is_new_browse = None
@@ -1720,7 +1720,7 @@ def __getattribute__(self, name):
17201720
attr = object.__getattribute__(self, name)
17211721

17221722
if callable(attr) and not name.startswith('_'):
1723-
preserve_methods = {'SearchBrowse', 'SetButton'}
1723+
preserve_methods = {'SearchBrowse', 'FilterBrowse', 'SetButton'}
17241724
if name not in preserve_methods:
17251725
try:
17261726
object.__getattribute__(self, 'config')._flag_is_new_browse = None
@@ -2320,4 +2320,5 @@ def FilterBrowse(self, filters: List[Dict[str, Any]]):
23202320
... ]
23212321
>>> oHelper.FilterBrowse(filters)
23222322
"""
2323+
self.config._flag_is_new_browse = True
23232324
self.__poui._set_browse_filters(filters)

tir/technologies/core/language.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def __init__(self, language="pt-BR"):
9393

9494
self.filters = languagepack["Filters"]
9595
self.apply_filters = languagepack["Apply Filters"]
96+
self.remove_filters = languagepack["Remove Filters"]
9697
self.old_browse_edit = languagepack["Old Browse Edit"]
9798
self.old_browse_delete = languagepack["Old Browse Delete"]
9899
self.old_browse_insert = languagepack["Old Browse Insert"]
@@ -204,6 +205,7 @@ def get_language_pack(self, language):
204205
"New Home Menu About": "About",
205206
"Filters": "Filters",
206207
"Apply Filters": "Apply filters",
208+
"Remove Filters": "Remove filters",
207209

208210
"Old Browse Edit":"Edit",
209211
"Old Browse Delete":"Delete",
@@ -311,7 +313,8 @@ def get_language_pack(self, language):
311313
"Input Set Program": "Pesquisar e executar",
312314
"New Home Menu About": "Sobre",
313315
"Filters": "Filtros",
314-
"Apply Filters": "Aplicar Filtros",
316+
"Apply Filters": "Aplicar Filtros",
317+
"Remove Filters": "Remover filtros",
315318

316319
"Old Browse Edit":"Alterar",
317320
"Old Browse Delete":"Excluir",
@@ -418,7 +421,8 @@ def get_language_pack(self, language):
418421
"Input Set Program": "Buscar y ejecutar",
419422
"New Home Menu About": "Sobre",
420423
"Filters": "Filtros",
421-
"Apply Filters": "Aplicar Filtros",
424+
"Apply Filters": "Aplicar Filtros",
425+
"Remove Filters": "Eliminar filtros",
422426
"Old Browse Edit":"Modificar",
423427
"Old Browse Delete":"Borrar",
424428
"Old Browse Insert":"Incluir",
@@ -525,6 +529,9 @@ def get_language_pack(self, language):
525529
"Schedule Menu": "Settings > Schedule > Schedule",
526530
"Input Set Program": "Ищи и беги",
527531
"New Home Menu About": "О программе…",
532+
"Filters": "Фильтры",
533+
"Apply Filters": "Применить фильтры",
534+
"Remove Filters": "Удалить фильтры",
528535

529536
"Old Browse Edit":"Редактировать",
530537
"Old Browse Delete":"Удалить",

tir/technologies/poui_internal.py

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5637,8 +5637,8 @@ def _set_browse_filters(self, filters):
56375637
[Internal]
56385638
Open and apply filters to each field in a THF Browse component.
56395639
5640-
:param filters: Dictionary or list of filters to apply, where keys are field names and values are filter values.
5641-
:type filters: dict or list
5640+
:param filters: List of dictionaries representing filters to apply, where each dictionary's keys are field names and values are filter values.
5641+
:type filters: list
56425642
:param browse_div: BeautifulSoup object representing the browse container element.
56435643
:type browse_div: bs4.element.Tag
56445644
:return: None
@@ -5647,9 +5647,11 @@ def _set_browse_filters(self, filters):
56475647
Usage:
56485648
56495649
>>> # Calling the method:
5650-
>>> self._filter_thf_browse(filters={'name': 'John'}, browse_div=browse_element)
5650+
>>> self._filter_thf_browse(filters=[{'name': 'John'}], browse_div=browse_element)
56515651
"""
56525652

5653+
self._remove_filters_from_browse()
5654+
56535655
self.click_button(self.language.filters)
56545656

56555657
self.wait_element_timeout('po-page-slide', scrap_type=enum.ScrapType.CSS_SELECTOR, main_container='body',
@@ -5683,6 +5685,67 @@ def _set_browse_filters(self, filters):
56835685
self.click_button(self.language.apply_filters)
56845686

56855687

5688+
def _remove_filters_from_browse(self):
5689+
"""
5690+
[Internal]
5691+
5692+
Clicks the "Remove Filters" button in a THF Browse component to clear all applied filters.
5693+
Also checks for a po-tag element inside kendo-grid whose span text is
5694+
"Remover filtros" or "Remove filters", and clicks it when found.
5695+
5696+
:return: None
5697+
:rtype: None
5698+
5699+
Usage:
5700+
5701+
>>> # Calling the method:
5702+
>>> self._remove_filters_from_browse()
5703+
"""
5704+
5705+
po_tag_filter = self._get_po_tag(text=self.language.remove_filters, container_selector='kendo-grid')
5706+
if po_tag_filter:
5707+
logger().debug("Found applied filters, clicking to remove filters.")
5708+
clickable = po_tag_filter.select_one('.po-tag-wrapper.po-clickable')
5709+
target = clickable if clickable else po_tag_filter
5710+
self.poui_click(target)
5711+
self.po_loading(self.containers_selectors['GetCurrentContainer'])
5712+
else:
5713+
logger().debug("No 'Remove Filters' found; skipping filter removal.")
5714+
5715+
5716+
def _get_po_tag(self, text: str, container_selector: str):
5717+
"""
5718+
[Internal]
5719+
5720+
Searches for a po-tag element inside a specified container whose span text matches
5721+
the given text (case-insensitive).
5722+
5723+
:param text: Text to match inside the po-tag span.
5724+
:type text: str
5725+
:param container_selector: CSS selector for the container to search within.
5726+
:type container_selector: str
5727+
:return: The matching po-tag BeautifulSoup element, or None if not found.
5728+
:rtype: bs4.element.Tag or None
5729+
"""
5730+
5731+
soup = self.get_current_DOM(twebview=True)
5732+
if container_selector:
5733+
container = soup.select_one(container_selector)
5734+
else:
5735+
container = soup
5736+
5737+
if not container:
5738+
logger().debug(f"No container found in DOM when searching for po-tag filter with selector '{container_selector}'.")
5739+
return None
5740+
5741+
for po_tag in container.select('po-tag'):
5742+
span = po_tag.select_one('.po-tag-value span')
5743+
if span and span.text.strip().lower() == text.strip().lower():
5744+
return po_tag
5745+
5746+
return None
5747+
5748+
56865749
def _fill_lookup_input(self, input_element, value: str) -> None:
56875750
"""
56885751
[Internal]
@@ -5852,6 +5915,10 @@ def SetButton(self, button, sub_item="", position=1, check_error=True):
58525915

58535916
logger().info("Switching to the POUI button-click method")
58545917

5918+
if (button.lower().strip() == "x"):
5919+
self.set_button_x(position, check_error)
5920+
return
5921+
58555922
# Map legacy button names to their POUI equivalents.
58565923
button_dict = {
58575924
self.language.old_browse_edit : self.language.new_browse_edit,
@@ -5907,6 +5974,15 @@ def SetButton(self, button, sub_item="", position=1, check_error=True):
59075974
if item:
59085975
self.click_popup(item)
59095976

5977+
def set_button_webapp(self, button, sub_item="", position=1, check_error=True):
5978+
from tir.technologies.core.events import emit
5979+
emit('webapp.set_button', button=button, sub_item=sub_item, position=position, check_error=check_error)
5980+
5981+
def set_button_x(self, position=1, check_error=True):
5982+
5983+
self.click_icon(label='', class_name='an an-sign-out', position=1)
5984+
self.set_button_webapp(button=self.language.yes, position=position,
5985+
check_error=check_error)
59105986

59115987
def SearchBrowse(self, term="", key=None, identifier=None,
59125988
index=False, column=None, filters=None) -> None:

0 commit comments

Comments
 (0)