PLUGINS_QGIS/pluginsCenSavoie_v3/tools/parcelle_to_site_dialog.py
2024-11-26 14:56:34 +01:00

100 lines
3.8 KiB
Python

# -*- coding: utf-8 -*-
"""
/***************************************************************************
ParcelleToSiteDialog
A QGIS plugin
Permet d'associer des parcelles à des sites
-------------------
begin : 2015-06-19
git sha : $Format:%H$
copyright : (C) 2015 by CEN Savoie
email : a.lesconnec@cen-savoie.org
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
"""
import os
import psycopg2
import psycopg2.extras
import base64
from PyQt5 import QtGui, uic
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import QDialog
from functools import partial
import datetime
from time import gmtime, strftime
FORM_CLASS, _ = uic.loadUiType(os.path.join(os.path.dirname(__file__), 'parcelle_to_site_dialog_base.ui'))
class ParcelleToSiteDialog(QDialog, FORM_CLASS):
def __init__(self, parent=None):
"""Constructor."""
super(ParcelleToSiteDialog, self).__init__(parent)
QDialog.__init__(self)
self.setupUi(self)
def InitFormulaire(self, tbl_par_id, acces, host, port, bdd, user, mdp):
self.lst_sites.currentIndexChanged.connect(self.change_lst_site)
self.site_sel.setVisible(0)
self.button_box.setEnabled(False)
conn = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + bdd + " user=" + user + " password=" + mdp)
cur = conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
self.lst_sites.clear() #Vidage de la combobox
self.lst_pci.clear() #Vidage de la combobox
this_year = strftime("%Y", gmtime())
global tbl_lst_sites
self.tbl_lst_sites = []
rq_lst_sites = """
SELECT DISTINCT site_id, site_nom
FROM sites.sites
WHERE site_id = 'PCEN'
UNION
SELECT DISTINCT site_id, site_nom
FROM
sites.sites
JOIN cadastre.parcelles ON (st_intersects(st_buffer(sites.geom_ecolo, 500), parcelles.geom))
WHERE par_id IN("""
for par_id in tbl_par_id :
rq_lst_sites += """'"""+par_id + """',"""
rq_lst_sites += """'123') ORDER BY site_id"""
with conn:
with conn.cursor() as cur:
cur.execute(rq_lst_sites)
res_lst_sites = cur.fetchall() #requête de récupération des options possible de niveau 2 à partir du niveau 1 sélectionné
if len(res_lst_sites) > 0:
self.lst_sites.setVisible(1)
i = 0 #Déclaration à 0 d'une variable pour boucler sur toutes les options de la requête identifiée précédement
while i < len(res_lst_sites): #Boucle sur toutes les options de niveau 2
self.tbl_lst_sites.append(str(res_lst_sites[i][0]))
self.lst_sites.addItem(str(res_lst_sites[i][0]) + """ """ + str(res_lst_sites[i][1])) #Ajout à la combobox de l'option en cours de bouclage
i=i+1 #implémentation de la variable permettant de suivre le bon index de la combobox
self.lst_sites.setCurrentIndex(0)
self.button_box.setEnabled(True)
else :
self.lst_sites.setVisible(0)
self.lst_pci.addItem(str(int(this_year) - 4))
self.lst_pci.addItem(str(int(this_year) - 3))
self.lst_pci.addItem(str(int(this_year) - 2))
self.lst_pci.addItem(str(int(this_year) - 1))
self.lst_pci.addItem(str(int(this_year)))
self.lst_pci.setCurrentIndex(4)
def change_lst_site(self, index):
if self.lst_sites.currentIndex() != -1:
self.site_sel.setText(str(self.tbl_lst_sites[index]))
else:
self.button_box.setEnabled(False)