Skip to content

Commit 3bfe74a

Browse files
committed
Improve geo matcher
- search for georegion kind detail - optionally exclude category when searching matches - Set category on public body when present
1 parent 9d0cbf8 commit 3bfe74a

File tree

3 files changed

+31
-3
lines changed

3 files changed

+31
-3
lines changed

froide/georegion/api_views.py

+4
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ class GeoRegionFilter(filters.FilterSet):
8484
)
8585
latlng = filters.CharFilter(method="latlng_filter")
8686
name = filters.CharFilter(method="name_filter")
87+
kind_detail = filters.CharFilter(method="kind_detail_filter")
8788
region_identifier = filters.CharFilter(method="region_identifier_filter")
8889

8990
class Meta:
@@ -121,6 +122,9 @@ def ancestor_filter(self, queryset, name, value):
121122
def region_identifier_filter(self, queryset, name, value):
122123
return queryset.filter(region_identifier=value)
123124

125+
def kind_detail_filter(self, queryset, name, value):
126+
return queryset.filter(kind_detail=value)
127+
124128
def latlng_filter(self, queryset, name, value):
125129
try:
126130
parts = value.split(",", 1)

froide/publicbody/admin.py

+9
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,15 @@ def geo_match(self, request):
319319
return HttpResponse(status=404)
320320

321321
pb.regions.add(georegion)
322+
323+
category = data.get("category")
324+
if category:
325+
try:
326+
cat = Category.objects.get(id=data["category"])
327+
pb.categories.add(cat)
328+
except PublicBody.DoesNotExist:
329+
return HttpResponse(status=404)
330+
322331
return HttpResponse(status=201, content=b"{}")
323332

324333
opts = self.model._meta

frontend/javascript/components/geomatch/geo-matcher.vue

+18-3
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33
<dl>
44
<dd>Region Kind</dd>
55
<dt><input v-model="regionKind" /></dt>
6+
<dd>GeoRegion Kind Detail</dd>
7+
<dt>
8+
<input v-model="regionKindDetail" />
9+
</dt>
610
<dd>Ancestor GeoRegion</dd>
711
<dt>
812
<input v-model="ancestor" @change="ancestorChanged" />
@@ -12,6 +16,7 @@
1216
<dt>
1317
<input v-model="category" @change="categoryChanged" />
1418
{{ categoryName }}
19+
<label><input type="checkbox" v-model="useCategoryForSearch" />Use for search</label>
1520
</dt>
1621
<dd>Jurisdiction</dd>
1722
<dt>
@@ -48,7 +53,7 @@
4853
</template>
4954

5055
<script>
51-
import { getAllData, FroideAPI, getData, postData } from '../../lib/api.js'
56+
import { FroideAPI, getAllData, getData, postData } from '../../lib/api.js'
5257
5358
import GeoMatcherRow from './geo-matcher-row.vue'
5459
@@ -67,10 +72,12 @@ export default {
6772
return {
6873
georegions: [],
6974
regionKind: '',
75+
regionKindDetail: '',
7076
ancestor: '',
7177
ancestorName: '',
7278
jurisdiction: '',
7379
jurisdictionName: '',
80+
useCategoryForSearch: true,
7481
category: '',
7582
categoryName: '',
7683
searchHint: '',
@@ -114,6 +121,7 @@ export default {
114121
115122
this.ancestor = entries.get('ancestor') || ''
116123
this.regionKind = entries.get('kind') || ''
124+
this.regionKindDetail = entries.get('kind_detail') || ''
117125
this.category = entries.get('category') || ''
118126
this.jurisdiction = entries.get('jurisdiction') || ''
119127
this.searchHint = entries.get('searchhint') || ''
@@ -195,6 +203,9 @@ export default {
195203
},
196204
loadGeoRegions() {
197205
let apiUrl = `${this.config.url.listGeoregion}?kind=${this.regionKind}`
206+
if (this.regionKindDetail) {
207+
apiUrl += `&kind_detail=${encodeURIComponent(this.regionKindDetail)}`
208+
}
198209
if (this.ancestor) {
199210
apiUrl += `&ancestor=${this.ancestor}`
200211
}
@@ -261,7 +272,7 @@ export default {
261272
}
262273
263274
const filter = {}
264-
if (this.category) {
275+
if (this.category && this.useCategoryForSearch) {
265276
filter.categories = this.category
266277
}
267278
if (this.jurisdiction) {
@@ -275,7 +286,11 @@ export default {
275286
connectPublicBody(payload) {
276287
const data = {
277288
georegion: payload.georegionId,
278-
publicbody: payload.publicbodyId
289+
publicbody: payload.publicbodyId,
290+
}
291+
if (this.category && !this.useCategoryForSearch) {
292+
// Add category to public body
293+
data.category = this.category
279294
}
280295
postData('', data, this.csrfToken).then(() => {
281296
const gr = this.georegions[this.georegionMapping[payload.georegionUrl]]

0 commit comments

Comments
 (0)