Compare commits

...

2 Commits

Author SHA1 Message Date
david-spacil 7ea2a99ada fix/small-fixes: drobné úpravy stylu a čitelnosti kódu (#54)
* small fixes

* fix: refactoring
rozbaleny listy, doplněny trailing commas
2026-06-28 11:03:15 +02:00
david-spacil 6772a99ead feature/projektové akce: filtrování a sloupec Projekt v akcích (#53)
* feature/projektove-akce: do dialogu akce přidán checkbox pro filtrování projektových akcí + backend logika

* feature/projektove-akce: do atributové tabulky akcí přidáno pole Projekt (prázdné, pokud nejde o projektovou akci)
2026-06-28 10:35:25 +02:00
2 changed files with 59 additions and 23 deletions
+25 -8
View File
@@ -44,16 +44,19 @@ class UpdateCodelistsTask(QgsTask):
refresh_globals()
QgsMessageLog.logMessage(
"Hesláře AMČR byly úspěšně aktualizovány.",
"AMČR", Qgis.Info)
"AMČR", Qgis.Info
)
else:
if self.isCanceled():
QgsMessageLog.logMessage(
"Aktualizace heslářů byla zrušena.",
"AMČR", Qgis.Warning)
"AMČR", Qgis.Warning
)
else:
QgsMessageLog.logMessage(
f"Chyba aktualizace: {self.exception}",
"AMČR", Qgis.Critical)
"AMČR", Qgis.Critical
)
class FilterableSelectionDialog(QDialog):
@@ -151,10 +154,20 @@ class AmcrFilterDialog(QDialog):
# Cache dictionary to store selected codes for each category
self.selection_cache = {
'organizace': [], 'kraj': [], 'obdobi': [], 'areal': [],
'typ_akce': [], 'okres': [], 'katastr': [], 'vedouci': [],
'pian_presnost': [], 'pristupnost': [], 'typ_lokality': [],
'druh_lokality': [], 'jistota': [], 'lokalita_zachovalost': []
'organizace': [],
'kraj': [],
'obdobi': [],
'areal': [],
'typ_akce': [],
'okres': [],
'katastr': [],
'vedouci': [],
'pian_presnost': [],
'pristupnost': [],
'typ_lokality': [],
'druh_lokality': [],
'jistota': [],
'lokalita_zachovalost': [],
}
layout = QVBoxLayout()
@@ -169,6 +182,8 @@ class AmcrFilterDialog(QDialog):
if self.typ_dat == "akce":
self.chk_posevidence = QCheckBox("Pouze pozitivní zjištění")
layout.addWidget(self.chk_posevidence)
self.chk_proj_akce = QCheckBox("Pouze projektové akce")
layout.addWidget(self.chk_proj_akce)
layout.addSpacing(10)
@@ -361,7 +376,7 @@ class AmcrFilterDialog(QDialog):
self.selection_cache[cache_key] = [
'HES-000861',
'HES-000862',
'HES-000863'
'HES-000863',
]
btn.clicked.connect(open_dialog)
@@ -453,6 +468,8 @@ class AmcrFilterDialog(QDialog):
if self.typ_dat == "akce":
if self.chk_posevidence.isChecked():
filters['posevidence'] = 'true'
if self.chk_proj_akce.isChecked():
filters['proj_akce'] = 'true'
if self.selection_cache['organizace']:
filters['f_organizace'] = self.selection_cache['organizace']
if self.selection_cache['typ_akce']:
+34 -15
View File
@@ -283,7 +283,7 @@ def load_amcr_data(canvas, bb, filters=None,
base_params = {
"mapa": "true",
"sort": "ident_cely asc",
"entity": typ_dat
"entity": typ_dat,
}
# Restrict search to map window if requested
@@ -317,6 +317,12 @@ def load_amcr_data(canvas, bb, filters=None,
else False
)
only_projektove_akce = (
filters.get('proj_akce') == 'true'
if filters
else False
)
# Check whether we should filter results based on component filters
filter_areal = "f_areal" in filters if filters else False
filter_datace = "f_obdobi" in filters if filters else False
@@ -439,6 +445,9 @@ def load_amcr_data(canvas, bb, filters=None,
if not piani:
continue
if only_projektove_akce and not doc.get("akce_projekt", False):
continue
actions_with_geom += 1
# Extract protected fields ('or {}' key may hold None)
@@ -470,7 +479,7 @@ def load_amcr_data(canvas, bb, filters=None,
"katastr": g_list(doc, 'katastr'),
"dalsi_katastr": dalsi_kat_str,
"pristupnost": g(doc, 'pristupnost'),
"loc": g_list(doc, 'loc')
"loc": g_list(doc, 'loc'),
}
# Add entity-specific metadata
@@ -515,6 +524,11 @@ def load_amcr_data(canvas, bb, filters=None,
if doc.get('akce_je_nz') is True
else "Ne"
),
"projekt": g(
doc,
'akce_projekt',
""
),
})
elif typ_dat == "lokalita":
@@ -654,8 +668,10 @@ def load_amcr_data(canvas, bb, filters=None,
)
fl_pian = [
"ident_cely", "pian_typ",
"pian_chranene_udaje", "pian_presnost"
"ident_cely",
"pian_typ",
"pian_chranene_udaje",
"pian_presnost",
]
for i in range(0, total_pians, BATCH_PIAN):
@@ -668,7 +684,7 @@ def load_amcr_data(canvas, bb, filters=None,
"entity": "pian",
"q": fq_pian,
"rows": len(batch),
"fl": ",".join(fl_pian)
"fl": ",".join(fl_pian),
}
try:
QApplication.processEvents()
@@ -725,7 +741,7 @@ def load_amcr_data(canvas, bb, filters=None,
QgsField("odkaz_do_digiarchivu", QMetaType.Type.QString),
QgsField("okres", QMetaType.Type.QString),
QgsField("katastr", QMetaType.Type.QString),
QgsField("dalsi_katastry", QMetaType.Type.QString)
QgsField("dalsi_katastry", QMetaType.Type.QString),
]
# Extend table based on data type
@@ -741,6 +757,7 @@ def load_amcr_data(canvas, bb, filters=None,
QgsField("vedlejsi_typ", QMetaType.Type.QString),
QgsField("zjisteni", QMetaType.Type.QString),
QgsField("nahrazuje_NZ", QMetaType.Type.QString),
QgsField("projekt", QMetaType.Type.QString),
]
elif typ_dat == "lokalita":
cols += [
@@ -748,7 +765,7 @@ def load_amcr_data(canvas, bb, filters=None,
QgsField("popis_lokality", QMetaType.Type.QString),
QgsField("typ_lokality", QMetaType.Type.QString),
QgsField("druh_lokality", QMetaType.Type.QString),
QgsField("zachovalost", QMetaType.Type.QString)
QgsField("zachovalost", QMetaType.Type.QString),
]
cols.append(QgsField("Přístupnost", QMetaType.Type.QString))
@@ -784,6 +801,7 @@ def load_amcr_data(canvas, bb, filters=None,
"komponenta": "Komponenta",
"komponenta_areal": "Areál",
"komponenta_obdobi": "Období",
"projekt": "Projekt",
}
if komponenty == "true":
@@ -904,7 +922,7 @@ def load_amcr_data(canvas, bb, filters=None,
+ meta['ident_cely'],
meta['az_okres'],
meta['katastr'],
meta['dalsi_katastr']
meta['dalsi_katastr'],
]
if is_akce:
atributy.extend([
@@ -917,7 +935,8 @@ def load_amcr_data(canvas, bb, filters=None,
meta['akce_hlavni_typ'],
meta['akce_vedlejsi_typ'],
meta['dj_negativni'],
meta['akce_je_nz']
meta['akce_je_nz'],
meta['projekt'],
])
else:
atributy.extend([
@@ -925,7 +944,7 @@ def load_amcr_data(canvas, bb, filters=None,
meta['lokalita_popis'],
meta['lokalita_typ'],
meta['lokalita_druh'],
meta['lokalita_zachovalost']
meta['lokalita_zachovalost'],
])
atributy.append(meta['pristupnost'])
@@ -955,12 +974,12 @@ def load_amcr_data(canvas, bb, filters=None,
(feats_pt, vl_point, "Body"),
]
for f, l, n in layers_to_process:
for f, L, n in layers_to_process:
if f:
l.dataProvider().addFeatures(f)
l.updateExtents()
l.setName(f"AMCR_{archeologicky_zaznam}_{n}")
proj.addMapLayer(l)
L.dataProvider().addFeatures(f)
L.updateExtents()
L.setName(f"AMCR_{archeologicky_zaznam}_{n}")
proj.addMapLayer(L)
added += len(f)
if network_error: