Skip to content

Commit

Permalink
Fix filter feature by selection (#753)
Browse files Browse the repository at this point in the history
* Get layer fids from server fids on 'sessiontokenfilter'.

* Fix for tests.

---------

Co-authored-by: wlorenzetti <lorenzett@gis3w.it>
(cherry picked from commit f09dcb7)
  • Loading branch information
wlorenzetti authored and github-actions[bot] committed Feb 13, 2024
1 parent c3cf3da commit ffbbbbb
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 7 deletions.
10 changes: 5 additions & 5 deletions g3w-admin/qdjango/tests/test_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -1137,7 +1137,7 @@ def test_tokenfilter_mode_api(self):

self.assertEqual(resp['data'], {
'layer': cities.qgs_layer_id,
'qgs_expression': '$id NOT IN (6,8,9,0)',
'qgs_expression': '$id NOT IN (9,8,6,0)',
'name': 'filter 1 layer cities',
'fid': 1,
'state': 'created'
Expand All @@ -1154,7 +1154,7 @@ def test_tokenfilter_mode_api(self):

self.assertEqual(resp['data'], {
'layer': cities.qgs_layer_id,
'qgs_expression': '$id NOT IN (6,8,9,0)',
'qgs_expression': '$id NOT IN (9,8,6,0)',
'name': 'filter 1 layer cities',
'fid': 1,
'state': 'updated'
Expand All @@ -1180,7 +1180,7 @@ def test_tokenfilter_mode_api(self):

self.assertEqual(resp['data'], {
'layer': cities.qgs_layer_id,
'qgs_expression': '$id NOT IN (6,8,9,0) AND $id NOT IN (1,2)',
'qgs_expression': '$id NOT IN (9,8,6,0) AND $id NOT IN (2,1)',
'name': 'filter 2 layer cities',
'fid': 2,
'state': 'created'
Expand Down Expand Up @@ -1213,7 +1213,7 @@ def test_tokenfilter_mode_api(self):

# Check inside the current fitlertoken
token = sf.token
self.assertEqual(sf.stf_layers.all()[0].qgs_expr, '$id NOT IN (6,8,9,0)')
self.assertEqual(sf.stf_layers.all()[0].qgs_expr, '$id NOT IN (9,8,6,0)')

# Delete fitler token and apply again to check for new fitler token value
SessionTokenFilter.objects.all().delete()
Expand All @@ -1226,7 +1226,7 @@ def test_tokenfilter_mode_api(self):
}, logout=False).content)
sf = SessionTokenFilter.objects.all()[0]
self.assertFalse(token == sf.token)
self.assertEqual(sf.stf_layers.all()[0].qgs_expr, '$id NOT IN (6,8,9,0)')
self.assertEqual(sf.stf_layers.all()[0].qgs_expr, '$id NOT IN (9,8,6,0)')

# Filter for layer check /api/config REST API:
resp = json.loads(self._testApiCall('group-project-map-config',
Expand Down
16 changes: 14 additions & 2 deletions g3w-admin/qdjango/vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,8 @@

from core.utils.qgisapi import (
get_qgis_layer,
get_qgis_featurecount
get_qgis_featurecount,
get_layer_fids_from_server_fids
)
from core.utils.structure import mapLayerAttributesFromQgisLayer
from core.utils.vector import BaseUserMediaHandler
Expand Down Expand Up @@ -416,8 +417,19 @@ def _get_sessiontokenfilter():
fidsin = request_data.get('fidsin')
fidsout = request_data.get('fidsout')

token_data = {}
# Get layer fids from server fids
if fidsin:
fidsin = get_layer_fids_from_server_fids([str(fid) for fid in fidsin.split(',')],
self.metadata_layer.qgis_layer)
fidsin.reverse()
fidsin = ",".join(map(str, fidsin))
if fidsout:
fidsout = get_layer_fids_from_server_fids([str(fid) for fid in fidsout.split(',')],
self.metadata_layer.qgis_layer)
fidsout.reverse()
fidsout = ",".join(map(str, fidsout))

token_data = {}

def _create_qgs_expr(s, fidsin=None, fidsout=None):
"""
Expand Down

0 comments on commit ffbbbbb

Please sign in to comment.