135 lines
5.0 KiB
Python
135 lines
5.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
/***************************************************************************
|
|
pluginsCenSavoie_v3
|
|
A QGIS plugin
|
|
Load plugins of CEN Savoie
|
|
-------------------
|
|
begin : 2016-09-08
|
|
git sha : $Format:%H$
|
|
copyright : (C) 2016 by CEN Savoie
|
|
email : sig@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 the PyQt and QGIS libraries
|
|
from PyQt5.QtCore import *
|
|
from PyQt5.QtGui import *
|
|
from qgis.core import *
|
|
|
|
import webbrowser, os
|
|
import os.path, sys
|
|
import psycopg2
|
|
import psycopg2.extras
|
|
import base64
|
|
|
|
# Set up current path.
|
|
currentPath = os.path.dirname( __file__ )
|
|
|
|
#Import own tools
|
|
from pluginsCenSavoie_v3.tools.create_sessionAF import CreateSessionAF
|
|
from pluginsCenSavoie_v3.tools.backinMFU import BackinMFU
|
|
from pluginsCenSavoie_v3.tools.parcelle_to_acte import ParcelleToActe
|
|
from pluginsCenSavoie_v3.tools.parcelle_to_site import ParcelleToSite
|
|
from pluginsCenSavoie_v3.tools.help import help
|
|
# Import du fichier de configuration
|
|
from pluginsCenSavoie_v3.tools.confPython import bd_cen_host, bd_cen_port, bd_cen_name, bd_cen_mdp_1st_cnx
|
|
|
|
class pluginsCenSavoie_v3:
|
|
def __init__(self, iface):
|
|
self.iface = iface
|
|
self.canvas = self.iface.mapCanvas()
|
|
self.plugin_dir = os.path.dirname(__file__)
|
|
|
|
global host
|
|
host = bd_cen_host
|
|
global port
|
|
port = bd_cen_port
|
|
global bdd
|
|
bdd = bd_cen_name
|
|
global mdp_1st_cnx
|
|
mdp_1st_cnx = bd_cen_mdp_1st_cnx
|
|
|
|
def initGui(self):
|
|
|
|
if sys.platform in ('linux','darwin'):
|
|
os_user = os.environ['USER']
|
|
else:
|
|
os_user = os.environ['USERNAME']
|
|
self.toolBar = self.iface.addToolBar("pluginsCenSavoie_v3")
|
|
self.toolBar.setObjectName("Plugins CEN Savoie")
|
|
|
|
global user, mdp
|
|
first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + bdd + " user=first_cnx password=" + mdp_1st_cnx)
|
|
first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
first_cur.execute("SELECT mdp_cen, usename FROM pg_catalog.pg_user t1, admin_sig.utilisateurs t2 WHERE t2.oid = t1.usesysid AND (utilisateur_id = '" + os_user + "' OR utilisateur_os = '" + os_user + "')")
|
|
res_ident = first_cur.fetchone()
|
|
mdp = base64.b64decode(str(res_ident[0])).decode('utf-8')
|
|
user = res_ident[1]
|
|
first_conn.close()
|
|
|
|
conn = psycopg2.connect("host=" + host + " port=" + port + " dbname=" + bdd + " user=" + user + " password=" + mdp)
|
|
cur = conn.cursor(cursor_factory = psycopg2.extras.DictCursor)
|
|
cur.execute("""
|
|
WITH RECURSIVE t(oid) AS (
|
|
VALUES ((SELECT oid FROM admin_sig.utilisateurs WHERE utilisateur_id = '""" + os_user + """' OR utilisateur_os = '""" + os_user + """'))
|
|
UNION ALL
|
|
SELECT grosysid
|
|
FROM pg_catalog.pg_group JOIN t ON (t.oid = ANY (grolist))
|
|
)
|
|
SELECT DISTINCT groname
|
|
FROM pg_catalog.pg_group JOIN t ON (t.oid = pg_group.grosysid)""")
|
|
user_group = cur.fetchall()
|
|
tbl_grp = []
|
|
i = 0
|
|
while i < len(user_group): #Boucle sur toutes les options
|
|
tbl_grp.append(user_group[i][0])
|
|
i=i+1
|
|
|
|
cur.execute("""
|
|
WITH RECURSIVE t(oid) AS (
|
|
VALUES ((SELECT oid FROM admin_sig.utilisateurs WHERE utilisateur_id = '""" + os_user + """' OR utilisateur_os = '""" + os_user + """'))
|
|
UNION ALL
|
|
SELECT grosysid
|
|
FROM pg_catalog.pg_group JOIN t ON (t.oid = ANY (grolist))
|
|
),
|
|
t_group AS (
|
|
SELECT DISTINCT groname
|
|
FROM pg_catalog.pg_group JOIN t ON (t.oid = pg_group.grosysid))
|
|
|
|
SELECT
|
|
count(*) FILTER (WHERE grant_elt_id = 3 AND grant_group_droit = 't' AND grant_group_id IN (groname)) as parc,
|
|
count(*) FILTER (WHERE grant_elt_id = 26 AND grant_group_droit = 't' AND grant_group_id IN (groname)) as site
|
|
FROM foncier.grant_group JOIN t_group ON (groname = grant_group_id)""")
|
|
can_parc_site = cur.fetchone()
|
|
|
|
# # Get the tools
|
|
if 'cen_user' in tbl_grp:
|
|
self.backinMFU = BackinMFU(self.iface, self.toolBar)
|
|
self.toolBar.addSeparator()
|
|
self.toolBar.addSeparator()
|
|
if 'grp_foncier' in tbl_grp or 'grp_sig' in tbl_grp:
|
|
if can_parc_site[0] > 0:
|
|
self.parcelle_to_acte = ParcelleToActe(self.iface, self.toolBar)
|
|
if can_parc_site[1] > 0:
|
|
self.parcelle_to_site = ParcelleToSite(self.iface, self.toolBar)
|
|
if 'grp_animation_fonciere' in tbl_grp or 'grp_sig' in tbl_grp:
|
|
self.create_sessionAF = CreateSessionAF(self.iface, self.toolBar)
|
|
if 'grp_animation_fonciere' in tbl_grp or 'grp_foncier' in tbl_grp or 'grp_sig' in tbl_grp:
|
|
self.toolBar.addSeparator()
|
|
self.toolBar.addSeparator()
|
|
if 'cen_user' in tbl_grp:
|
|
self.help = help(self.iface, self.toolBar)
|
|
|
|
conn.close()
|
|
|
|
def unload(self):
|
|
del self.toolBar |