100 lines
3.8 KiB
Python
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) |