diff --git a/CenRa_POSTGIS/CenRa_Postgis.py b/CenRa_POSTGIS/CenRa_Postgis.py index a1dba92..988baf8 100644 --- a/CenRa_POSTGIS/CenRa_Postgis.py +++ b/CenRa_POSTGIS/CenRa_Postgis.py @@ -4,19 +4,21 @@ __email__ = "info@3liz.org" from qgis.core import QgsApplication -from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl +from qgis.PyQt.QtCore import QUrl from qgis.PyQt.QtGui import QDesktopServices, QIcon -from qgis.PyQt.QtWidgets import QAction, QMessageBox +from qgis.PyQt.QtWidgets import QAction from qgis.utils import iface import qgis -#include +# include import socket import os +from qgis.PyQt.QtCore import QSettings +from .about_form import AboutDialog from .tools.resources import ( - plugin_path, + # plugin_path, pyperclip, resources_path, maj_verif, @@ -26,12 +28,10 @@ pyperclip() from .postgis_editor import Postgis_Editor from .postgis_creator import Postgis_Creator from .postgis_rename import Postgis_Rename -from .about_form import AboutDialog - -from qgis.PyQt.QtCore import * -IPAddr=socket.gethostbyname(socket.gethostname()) +IPAddr = socket.gethostbyname(socket.gethostname()) + class PgPostgis: def __init__(self): @@ -45,18 +45,18 @@ class PgPostgis: self.dock_action = None self.help_action = None plugin_dir = os.path.dirname(__file__) - end_find = plugin_dir.rfind('\\')+1 + end_find = plugin_dir.rfind('\\') + 1 global NAME NAME = plugin_dir[end_find:] maj_verif(NAME) # Display About window on first use - version = qgis.utils.pluginMetadata('CenRa_POSTGIS','version') + version = qgis.utils.pluginMetadata('CenRa_POSTGIS', 'version') s = QSettings() versionUse = s.value("postgis/version", 1, type=str) - if str(versionUse) != str(version) : + if str(versionUse) != str(version): s.setValue("postgis/version", str(version)) - print(versionUse,version) + print(versionUse, version) self.open_about_dialog() def initGui(self): @@ -76,29 +76,29 @@ class PgPostgis: if not self.action_creator: self.action_creator = Postgis_Creator() - self.postgis_creator = QAction(icon, 'dossier_creator',None) + self.postgis_creator = QAction(icon, 'dossier_creator', None) self.toolBar.addAction(self.postgis_creator) self.postgis_creator.triggered.connect(self.open_creator) self.postgis_creator.setEnabled(False) - if os.access('N:/',os.R_OK): + if os.access('N:/', os.R_OK): self.postgis_creator.setEnabled(True) if not self.action_editor: self.action_editor = Postgis_Editor() - self.postgis_editor = QAction(icon2, 'dossier_editor',None) + self.postgis_editor = QAction(icon2, 'dossier_editor', None) self.toolBar.addAction(self.postgis_editor) self.postgis_editor.triggered.connect(self.open_editor) self.postgis_editor.setEnabled(False) - if os.access('N:/',os.R_OK): + if os.access('N:/', os.R_OK): self.postgis_editor.setEnabled(True) if not self.action_rename: self.action_rename = Postgis_Rename() - self.postgis_rename = QAction(icon3, 'dossier_rename',None) + self.postgis_rename = QAction(icon3, 'dossier_rename', None) self.toolBar.addAction(self.postgis_rename) self.postgis_rename.triggered.connect(self.open_rename) @@ -112,7 +112,7 @@ class PgPostgis: self.postgis_rename.setVisible(0) self.postgis_rename.setEnabled(False) - if os.access('N:/',os.R_OK): + if os.access('N:/', os.R_OK): self.postgis_rename.setEnabled(True) def open_about_dialog(self): @@ -121,6 +121,7 @@ class PgPostgis: """ dialog = AboutDialog(iface) dialog.exec() + def open_help(): """ Open the online help. """ QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/')) @@ -140,11 +141,11 @@ class PgPostgis: def unload(self): """ Unload the plugin. """ if self.action_editor: - iface.removePluginMenu('CenRa_Postgis',self.postgis_editor) + iface.removePluginMenu('CenRa_Postgis', self.postgis_editor) if self.action_creator: - iface.removePluginMenu('CenRa_Postgis',self.postgis_creator) + iface.removePluginMenu('CenRa_Postgis', self.postgis_creator) if self.action_rename: - iface.removePluginMenu('CenRa_Postgis',self.postgis_rename) + iface.removePluginMenu('CenRa_Postgis', self.postgis_rename) if self.provider: QgsApplication.processingRegistry().removeProvider(self.provider) diff --git a/CenRa_POSTGIS/about_form.py b/CenRa_POSTGIS/about_form.py index ea5912d..bc8df56 100644 --- a/CenRa_POSTGIS/about_form.py +++ b/CenRa_POSTGIS/about_form.py @@ -43,4 +43,4 @@ class AboutDialog(QDialog, ABOUT_FORM_CLASS): Run some actions when the user closes the dialog """ - self.close() \ No newline at end of file + self.close() diff --git a/CenRa_POSTGIS/postgis_creator.py b/CenRa_POSTGIS/postgis_creator.py index 003fe00..b33ae84 100644 --- a/CenRa_POSTGIS/postgis_creator.py +++ b/CenRa_POSTGIS/postgis_creator.py @@ -2,57 +2,57 @@ from __future__ import absolute_import # Import the PyQt and QGIS libraries -from builtins import next -from builtins import str -from builtins import object -import qgis +# from builtins import next +# from builtins import str +# from builtins import object +# import qgis from qgis.PyQt.QtCore import QSettings -from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog,QMessageBox -from qgis.PyQt.QtGui import QIcon +from qgis.PyQt.QtWidgets import QDialog, QMessageBox +# from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtCore import * -from qgis.PyQt.QtGui import * +# from qgis.PyQt.QtCore import * +# from qgis.PyQt.QtGui import * from qgis.PyQt import QtGui -from qgis.core import * -from qgis.core import QgsDataSourceUri +# from qgis.core import * +from qgis.core import QgsSettings try: from .tools.PythonSQL import login_base -except: +except ValueError: print('Pas de fichier PythonSQL') -from .tools.SQLRequet import * +# from .tools.SQLRequet import * from .tools.resources import ( load_ui, resources_path, - send_issues, + # send_issues, create_vierge, create_contour, create_travaux, create_habita ) -from .issues import CenRa_Issues +# from .issues import CenRa_Issues from qgis.utils import iface -import os.path -import webbrowser, os -import psycopg2 -import psycopg2.extras -import base64 +# import os.path +# import webbrowser, os +# import psycopg2 +# import psycopg2.extras +# import base64 EDITOR_CLASS = load_ui('CenRa_Postgis_base.ui') -class Postgis_Creator(QDialog, EDITOR_CLASS): +class Postgis_Creator(QDialog, EDITOR_CLASS): def __init__(self, parent=None): _ = parent super().__init__() self.setupUi(self) self.settings = QgsSettings() self.s = QSettings() - self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png'))) + self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png'))) self.iface = iface # run method that performs all the real work @@ -64,23 +64,23 @@ class Postgis_Creator(QDialog, EDITOR_CLASS): result = self.exec() # See if OK was pressed if result == 1: - -#**********************************Debut_script**************************************** - - ### Creation du schema pour le nouveau site + # **********************************Debut_script**************************************** + # Creation du schema pour le nouveau site if self.at.isChecked(): - schema = "_" + self.dept.currentText() + "_at_" + self.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere - else : - schema = "_" + self.dept.currentText() + "_" + self.nom.text().lower() # Ajout de "_" pour eviter pb de numero en premier caractere + # Ajout de "_" pour eviter pb de numero en premier caractere + schema = "_" + self.dept.currentText() + "_at_" + self.nom.text().lower() + else: + # Ajout de "_" pour eviter pb de numero en premier caractere + schema = "_" + self.dept.currentText() + "_" + self.nom.text().lower() if self.nom.text() == "" or self.nom.text() == "NULL": QMessageBox.warning(None, "Oups :", "Veuillez renseigner un nom de dossier.") return ch = [u"à", u"À", u"â", u"Â", u"ä", u"Ä", u"å", u"Å", u"ç", u"Ç", u"é", u"É", u"è", u"È", u"ê", u"Ê", u"ë", u"Ë", u"î", u"Î", u"ï", u"Ï", u"ô", u"Ô", u"ö", u"Ö", u"ù", u"Ù", u"û", u"Û", u"ü", u"Ü", u"ÿ", u"Ÿ", u"'", u"-", u" "] - for car in ch : - if self.nom.text().find(car) != -1 : - QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower() ) + for car in ch: + if self.nom.text().find(car) != - 1: + QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.nom.text().lower()) return account = login_base("account") user = account[0] @@ -92,19 +92,18 @@ class Postgis_Creator(QDialog, EDITOR_CLASS): con = account[8] SQL_schema = "CREATE SCHEMA " + schema + ";" - SQL_GRANT_SCHEMA="GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA "+schema+" TO grp_sig;" + SQL_GRANT_SCHEMA = "GRANT CREATE, USAGE ON SCHEMA " + schema + " TO grp_qgis; GRANT CREATE, USAGE ON SCHEMA " + schema + " TO grp_sig;" if self.couche_contour.isChecked() or self.couche_habitat.isChecked() or self.couche_travaux_prevus.isChecked() or self.couche_vierge.isChecked(): cur.execute(SQL_schema) cur.execute(SQL_GRANT_SCHEMA) else: - iface.messageBar().pushMessage("POSTGRESQL :", "Pas de couche sélectionnée, création refusée.", level=Qgis.Warning, duration=30) - - create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp) - create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp) - create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp) - create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp) + iface.messageBar().pushMessage("POSTGRESQL :", "Pas de couche sélectionnée, création refusée.", level=1, duration=30) + create_contour(self, schema, cur, con, host, port, dbname, user, mdp) + create_habita(self, schema, cur, con, host, port, dbname, user, mdp) + create_travaux(self, schema, cur, con, host, port, dbname, user, mdp) + create_vierge(self, schema, cur, con, host, port, dbname, user, mdp) con.close() - pass \ No newline at end of file + pass diff --git a/CenRa_POSTGIS/postgis_editor.py b/CenRa_POSTGIS/postgis_editor.py index 03d27ff..ae50c9a 100644 --- a/CenRa_POSTGIS/postgis_editor.py +++ b/CenRa_POSTGIS/postgis_editor.py @@ -4,57 +4,55 @@ from __future__ import absolute_import # Import the PyQt and QGIS libraries from builtins import next from builtins import str -from builtins import object -import qgis +# from builtins import object +# import qgis from qgis.PyQt.QtCore import QSettings -from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog -from qgis.PyQt.QtGui import QIcon +from qgis.PyQt.QtWidgets import QDialog, QMessageBox +# from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtCore import * -from qgis.PyQt.QtGui import * from qgis.PyQt import QtGui -from qgis.core import * -from qgis.core import QgsDataSourceUri +# from qgis.core import * +from qgis.core import QgsSettings try: from .tools.PythonSQL import login_base -except: +except ValueError: print('Pas de fichier PythonSQL') -from .tools.SQLRequet import * +# from .tools.SQLRequet import * from .tools.resources import ( load_ui, resources_path, - send_issues, + # send_issues, create_vierge, create_contour, create_travaux, create_habita ) -from .issues import CenRa_Issues +# from .issues import CenRa_Issues -import os.path -import webbrowser, os -import psycopg2 -import psycopg2.extras -import base64 +# import os.path +# import webbrowser +# import psycopg2 +# import psycopg2.extras +# import base64 from qgis.utils import iface EDITOR_CLASS = load_ui('CenRa_PostgisTable_base.ui') -class Postgis_Editor(QDialog, EDITOR_CLASS): +class Postgis_Editor(QDialog, EDITOR_CLASS): def __init__(self, parent=None): _ = parent super().__init__() self.setupUi(self) self.settings = QgsSettings() self.s = QSettings() - self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png'))) + self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png'))) self.iface = iface - ### Outil Ajout de nouvelles couche a un dossier + # Outil Ajout de nouvelles couche a un dossier def raise_(self): self.activateWindow() account = login_base("account") @@ -65,13 +63,12 @@ class Postgis_Editor(QDialog, EDITOR_CLASS): dbname = account[4] cur = account[7] con = account[8] - # Creation de la liste des schemas de la base de donnees + # Creation de la liste des schemas de la base de donnees SQL = """WITH list_schema AS ( select schemaname,'sig' as group from pg_catalog.pg_tables where schemaname ~ E'^_(0|1|2|3|4|6|7|f)' group by schemaname order by schemaname) - select string_agg(schemaname,',') from list_schema group by "group";""" @@ -79,14 +76,15 @@ class Postgis_Editor(QDialog, EDITOR_CLASS): cur.execute(SQL) list_brut = str(next(cur)) - list = list_brut [2:-2] + list = list_brut[2:-2] listItems = list.split(",") con.close() self.schema.clear() self.schema.addItems(listItems) - self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema + # Pour ne pas commencer la liste au premier schema + self.schema.setCurrentIndex(-1) # show the dialog self.show() @@ -94,7 +92,7 @@ class Postgis_Editor(QDialog, EDITOR_CLASS): result = self.exec() # See if OK was pressed if result == 1: -#******************************debut script********************************* + # ******************************debut script********************************* account = login_base("account") user = account[0] mdp = account[1] @@ -104,16 +102,16 @@ class Postgis_Editor(QDialog, EDITOR_CLASS): cur = account[7] con = account[8] - if self.schema.currentIndex() == -1 : + if self.schema.currentIndex() == - 1: QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de dossier.") return schema = self.schema.currentText() - create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp) - create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp) - create_travaux(self,schema,cur,con,host ,port ,dbname ,user ,mdp) - create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp) + create_contour(self, schema, cur, con, host, port, dbname, user, mdp) + create_habita(self, schema, cur, con, host, port, dbname, user, mdp) + create_travaux(self, schema, cur, con, host, port, dbname, user, mdp) + create_vierge(self, schema, cur, con, host, port, dbname, user, mdp) con.close() - pass \ No newline at end of file + pass diff --git a/CenRa_POSTGIS/postgis_rename.py b/CenRa_POSTGIS/postgis_rename.py index 10701a8..7351404 100644 --- a/CenRa_POSTGIS/postgis_rename.py +++ b/CenRa_POSTGIS/postgis_rename.py @@ -2,43 +2,39 @@ from __future__ import absolute_import # Import the PyQt and QGIS libraries -from builtins import next +# from builtins import next from builtins import str -from builtins import object -import qgis +# from builtins import object +# import qgis from qgis.PyQt.QtCore import QSettings -from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox,QDialogButtonBox -from qgis.PyQt.QtGui import QIcon +from qgis.PyQt.QtWidgets import QDialog, QMessageBox, QDialogButtonBox +# from qgis.PyQt.QtGui import QIcon -from qgis.PyQt.QtCore import * -from qgis.PyQt.QtGui import * +# from qgis.PyQt.QtCore import * +# from qgis.PyQt.QtGui import * from qgis.PyQt import QtGui -from qgis.core import * -from qgis.core import QgsDataSourceUri +# from qgis.core import * +from qgis.core import QgsSettings, QgsDataSourceUri, QgsProject try: from .tools.PythonSQL import login_base -except: +except ValueError: print('Pas de fichier PythonSQL') -from .tools.SQLRequet import * +# from .tools.SQLRequet import * from .tools.resources import ( load_ui, resources_path, - send_issues, - create_vierge, - create_contour, - create_travaux, - create_habita + # send_issues, ) -from .issues import CenRa_Issues +# from .issues import CenRa_Issues -import os.path -import webbrowser, os -import psycopg2 -import psycopg2.extras -import base64 +# import os.path +# import webbrowser +# import psycopg2 +# import psycopg2.extras +# import base64 from qgis.utils import iface EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui') @@ -52,22 +48,24 @@ try: dbname = account[4] cur = account[7] con = account[8] -except: +except ValueError: print('') -class Postgis_Rename(QDialog, EDITOR_CLASS): + +class Postgis_Rename(QDialog, EDITOR_CLASS): def __init__(self, parent=None): _ = parent super().__init__() self.setupUi(self) self.settings = QgsSettings() self.s = QSettings() - self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png'))) + self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png'))) self.iface = iface self.schema.currentIndexChanged.connect(self.Test) self.buttonBox.accepted.connect(self.msgBox) - ### Outil Ajout de nouvelles couche a un dossier + # Outil Ajout de nouvelles couche a un dossier + def raise_(self): self.activateWindow() self.groupBox_3.hide() @@ -82,7 +80,7 @@ class Postgis_Rename(QDialog, EDITOR_CLASS): self.schema.addItems(['']) for Schema in AllSchema: self.schema.addItems(Schema) - self.departement.addItems(['','01','07','26','42','69','form']) + self.departement.addItems(['', '01', '07', '26', '42', '69', 'form']) if last_value_schema != '': self.schema.setCurrentIndex(self.schema.findText(last_value_schema)) if last_value_departement != '': @@ -92,27 +90,27 @@ class Postgis_Rename(QDialog, EDITOR_CLASS): oldSchema = self.schema.currentText() if oldSchema != '': allIsGood = 0 - - GET_COUNT_LEFT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE left(table_name,"+str(len(oldSchema))+") AND table_schema LIKE '"+oldSchema+"';" - GET_COUNT_TOT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE '"+oldSchema+"';" - + + GET_COUNT_LEFT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE left(table_name," + str(len(oldSchema)) + ") AND table_schema LIKE '" + oldSchema + "';" + GET_COUNT_TOT = "SELECT count(*) FROM information_schema.tables WHERE table_schema LIKE '" + oldSchema + "';" + cur.execute(GET_COUNT_TOT) CountTot = cur.fetchall()[0] cur.execute(GET_COUNT_LEFT) CountLeft = cur.fetchall()[0] if CountLeft[0] == CountTot[0]: - allIsGood = allIsGood+1 + allIsGood = allIsGood + 1 self.couche.setChecked(1) else: self.couche.setChecked(0) - GET_GRANTEE_PRIVILEGE = "SELECT DISTINCT count(*) FROM information_schema.role_table_grants WHERE table_schema LIKE '"+oldSchema+"' AND grantee LIKE 'grp_qgis' AND privilege_type LIKE 'UPDATE';" + GET_GRANTEE_PRIVILEGE = "SELECT DISTINCT count(*) FROM information_schema.role_table_grants WHERE table_schema LIKE '" + oldSchema + "' AND grantee LIKE 'grp_qgis' AND privilege_type LIKE 'UPDATE';" cur.execute(GET_GRANTEE_PRIVILEGE) CountPrivilege = cur.fetchall()[0] if CountTot[0] == CountPrivilege[0]: - allIsGood = allIsGood+1 + allIsGood = allIsGood + 1 self.compte.setChecked(1) else: self.compte.setChecked(0) @@ -149,52 +147,50 @@ class Postgis_Rename(QDialog, EDITOR_CLASS): def updateName(self): if self.departement.currentText() != '': oldTableName = self.old_name.text() - newTableName = ((self.new_name.text()).lower()).replace(' ','_') - newPrefixSchema = '_'+self.departement.currentText()+'_' + newTableName = ((self.new_name.text()).lower()).replace(' ', '_') + newPrefixSchema = '_' + self.departement.currentText() + '_' if self.schema.currentText()[:6] == '_form_': oldPrefixSchema = self.schema.currentText()[:6] if (self.schema.currentText()[6:9]) == "at_": - oldPrefixSchema=oldPrefixSchema+'at_' + oldPrefixSchema = oldPrefixSchema + 'at_' else: oldPrefixSchema = self.schema.currentText()[:4] if (self.schema.currentText()[4:7]) == 'at_': - oldPrefixSchema=oldPrefixSchema+'at_' + oldPrefixSchema = oldPrefixSchema + 'at_' if self.animation.isChecked(): - newPrefixSchema=newPrefixSchema+'at_' - oldSchemaName = oldPrefixSchema+oldTableName - newSchemaName = newPrefixSchema+newTableName + newPrefixSchema = newPrefixSchema + 'at_' + oldSchemaName = oldPrefixSchema + oldTableName + newSchemaName = newPrefixSchema + newTableName if oldSchemaName != newSchemaName: global AllSQLrun - allSQLrun='' + allSQLrun = '' - SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '"""+newSchemaName+"""',f_table_name = replace(replace(f_table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') WHERE f_table_schema LIKE '"""+oldSchemaName+"""';""" - allSQLrun = allSQLrun+SQL_UPDATE + SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '""" + newSchemaName + """',f_table_name = replace(replace(f_table_name,'""" + oldTableName + """','""" + newTableName + """'),'""" + oldPrefixSchema + """','""" + newPrefixSchema + """') WHERE f_table_schema LIKE '""" + oldSchemaName + """';""" + allSQLrun = allSQLrun + SQL_UPDATE cur.execute(SQL_UPDATE) - SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') from information_schema.tables WHERE table_schema LIKE '"""+oldSchemaName+"""';""" + SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'""" + oldTableName + """','""" + newTableName + """'),'""" + oldPrefixSchema + """','""" + newPrefixSchema + """') from information_schema.tables WHERE table_schema LIKE '""" + oldSchemaName + """';""" cur.execute(SQL_GET_TABLE_RENAME) allTableRename = cur.fetchall() allTableList = [] for TableRename in allTableRename: oldTable = TableRename[0] newTable = TableRename[1] - allTableList.append([oldTable,newSchemaName,newTable]) - SQL_RENAME_TABLE = """ALTER TABLE """+oldSchemaName+'.'+oldTable+""" RENAME TO """+newTable+""";""" - allSQLrun = allSQLrun+SQL_RENAME_TABLE + allTableList.append([oldTable, newSchemaName, newTable]) + SQL_RENAME_TABLE = """ALTER TABLE """ + oldSchemaName + '.' + oldTable + """ RENAME TO """ + newTable + """;""" + allSQLrun = allSQLrun + SQL_RENAME_TABLE cur.execute(SQL_RENAME_TABLE) - SQL_RENAME_SCHEMA = 'ALTER SCHEMA '+oldSchemaName+' RENAME TO '+newSchemaName - allSQLrun = allSQLrun+SQL_RENAME_SCHEMA + SQL_RENAME_SCHEMA = 'ALTER SCHEMA ' + oldSchemaName + ' RENAME TO ' + newSchemaName + allSQLrun = allSQLrun + SQL_RENAME_SCHEMA cur.execute(SQL_RENAME_SCHEMA) - #print(allSQLrun) con.commit() for LayerOpen in allTableList: - self.UnloadLoadLayers(LayerOpen[0],LayerOpen[1],LayerOpen[2]) + self.UnloadLoadLayers(LayerOpen[0], LayerOpen[1], LayerOpen[2]) - - def UnloadLoadLayers(self,OldName,NewSchema,NewTable): + def UnloadLoadLayers(self, OldName, NewSchema, NewTable): allLayers = (QgsProject.instance().mapLayers().values()) listLayers = [] listLayersName = [] @@ -210,10 +206,10 @@ class Postgis_Rename(QDialog, EDITOR_CLASS): host = QgsDataSourceUri(provider.dataSourceUri()).host() port = QgsDataSourceUri(provider.dataSourceUri()).port() - ### Affichage de la table + # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) + uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(NewSchema, NewTable, 'geom') QgsProject.instance().removeMapLayer(layer.id()) @@ -224,16 +220,16 @@ class Postgis_Rename(QDialog, EDITOR_CLASS): self.QMBquestion.setWindowTitle(u"Attention !") self.QMBquestion.setIcon(QMessageBox.Icon.Warning) self.QMBquestion.setText("Attention, le renommage de dossier PostGIS peut engendrer des pertes de liaisons avec des projets QGIS !") - self.QMBquestion.setStandardButtons(QMessageBox.StandardButton(0x00004000)|QMessageBox.StandardButton(0x00010000)) + self.QMBquestion.setStandardButtons(QMessageBox.StandardButton(0x00004000) | QMessageBox.StandardButton(0x00010000)) if self.new_name.text() != '': error_caracteres = 0 - for caracteres in ch : - if self.new_name.text().find(caracteres) != -1 : + for caracteres in ch: + if self.new_name.text().find(caracteres) != - 1: error_caracteres = 1 if error_caracteres == 0: self.QMBquestion = self.QMBquestion.exec() else: - QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.new_name.text().lower() ) + QMessageBox.warning(None, "Oups :", u"Le nom de dossier ne doit pas comporter de caractères spéciaux, ni d'espaces !\n\n\t" + self.new_name.text().lower()) else: QMessageBox.warning(None, "Oups :", "Votre projet doit avoire un nom !") if self.QMBquestion == QMessageBox.StandardButton(0x00004000): diff --git a/CenRa_POSTGIS/tools/SQLRequet.py b/CenRa_POSTGIS/tools/SQLRequet.py index 4158072..2b075f5 100644 --- a/CenRa_POSTGIS/tools/SQLRequet.py +++ b/CenRa_POSTGIS/tools/SQLRequet.py @@ -1,7 +1,7 @@ geom = "geom" -champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))""" -champ_travaux_prevus_multilinestring="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))""" +champ_travaux_prevus_multipolygon = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))""" +champ_travaux_prevus_multilinestring = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))""" champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))""" champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))""" @@ -10,7 +10,7 @@ champ_viergePoint = """(gid serial NOT NULL, commentaire text, x_wgs84 double pr champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))""" -champ_contour="""(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154)) +champ_contour = """(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154)) """ champ_vegethab_point = """( @@ -138,4 +138,4 @@ champ_vegethab_multipolygon = """( class_name character varying(254) COLLATE pg_catalog."default", geom geometry(MultiPolygon,2154) ) -""" \ No newline at end of file +""" diff --git a/CenRa_POSTGIS/tools/resources.py b/CenRa_POSTGIS/tools/resources.py index 960d3fd..6eb675d 100644 --- a/CenRa_POSTGIS/tools/resources.py +++ b/CenRa_POSTGIS/tools/resources.py @@ -3,13 +3,13 @@ import configparser import shutil import tempfile -import base64 -import psycopg2 -import psycopg2.extras +# import base64 +# import psycopg2 +# import psycopg2.extras import os from os.path import abspath, join, pardir, dirname from qgis.core import QgsDataSourceUri -from .SQLRequet import * +from .SQLRequet import geom, champ_contour, champ_travaux_prevus_multilinestring, champ_travaux_prevus_point, champ_travaux_prevus_multipolygon, champ_vegethab_multipolygon, champ_vegethab_multilinestring, champ_vegethab_point, champ_viergeLigne, champ_viergePoint, champ_viergePolygone from qgis.PyQt import uic __copyright__ = "Copyright 2019, 3Liz" @@ -19,513 +19,529 @@ __revision__ = "$Format:%H$" def plugin_path(*args): - """Get the path to plugin root folder. + """Get the path to plugin root folder. - :param args List of path elements e.g. ['img', 'logos', 'image.png'] - :type args: str + :param args List of path elements e.g. ['img', 'logos', 'image.png'] + :type args: str - :return: Absolute path to the plugin path. - :rtype: str - """ - path = dirname(dirname(__file__)) - path = abspath(abspath(join(path, pardir))) - for item in args: - path = abspath(join(path, item)) + :return: Absolute path to the plugin path. + :rtype: str + """ + path = dirname(dirname(__file__)) + path = abspath(abspath(join(path, pardir))) + for item in args: + path = abspath(join(path, item)) - return path + return path def plugin_name(): - """Return the plugin name according to metadata.txt. + """Return the plugin name according to metadata.txt. - :return: The plugin name. - :rtype: basestring - """ - metadata = metadata_config() - name = metadata["general"]["name"] - return name + :return: The plugin name. + :rtype: basestring + """ + metadata = metadata_config() + name = metadata["general"]["name"] + return name def metadata_config() -> configparser: - """Get the INI config parser for the metadata file. + """Get the INI config parser for the metadata file. - :return: The config parser object. - :rtype: ConfigParser - """ - path = plugin_path("metadata.txt") - config = configparser.ConfigParser() - config.read(path, encoding='utf8') - return config + :return: The config parser object. + :rtype: ConfigParser + """ + path = plugin_path("metadata.txt") + config = configparser.ConfigParser() + config.read(path, encoding='utf8') + return config def plugin_test_data_path(*args, copy=False): - """Get the path to the plugin test data path. + """Get the path to the plugin test data path. - :param args List of path elements e.g. ['img', 'logos', 'image.png'] - :type args: str + :param args List of path elements e.g. ['img', 'logos', 'image.png'] + :type args: str - :param copy: If the file must be copied into a temporary directory first. - :type copy: bool + :param copy: If the file must be copied into a temporary directory first. + :type copy: bool - :return: Absolute path to the resources folder. - :rtype: str - """ - path = abspath(abspath(join(plugin_path(), "test", "data"))) - for item in args: - path = abspath(join(path, item)) + :return: Absolute path to the resources folder. + :rtype: str + """ + path = abspath(abspath(join(plugin_path(), "test", "data"))) + for item in args: + path = abspath(join(path, item)) - if copy: - temp = tempfile.mkdtemp() - shutil.copy(path, temp) - return join(temp, args[-1]) - else: - return path + if copy: + temp = tempfile.mkdtemp() + shutil.copy(path, temp) + return join(temp, args[-1]) + else: + return path def resources_path(*args): - """Get the path to our resources folder. + """Get the path to our resources folder. - :param args List of path elements e.g. ['img', 'logos', 'image.png'] - :type args: str + :param args List of path elements e.g. ['img', 'logos', 'image.png'] + :type args: str - :return: Absolute path to the resources folder. - :rtype: str - """ - path = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools"))) - for item in args: - path = abspath(join(path, item)) - return path + :return: Absolute path to the resources folder. + :rtype: str + """ + path = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools"))) + for item in args: + path = abspath(join(path, item)) + return path def load_ui(*args): - """Get compile UI file. + """Get compile UI file. - :param args List of path elements e.g. ['img', 'logos', 'image.png'] - :type args: str + :param args List of path elements e.g. ['img', 'logos', 'image.png'] + :type args: str - :return: Compiled UI file. - """ - ui_class, _ = uic.loadUiType(resources_path("ui", *args)) + :return: Compiled UI file. + """ + ui_class, _ = uic.loadUiType(resources_path("ui", *args)) + + return ui_class - return ui_class def pyperclip(): - dst = dirname(dirname(__file__))+"\\tools\\" - if os.access('N:/',os.R_OK): + dst = dirname(dirname(__file__)) + "\\tools\\" + if os.access('N:/', os.R_OK): src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py' try: shutil.copy(src, dst) - except: + except FileNotFoundError: + print('404') + except UnboundLocalError: print('404') -def send_issues(url,titre,body,labels): - import requests - import json - import os - import qgis - usr = os.environ['USERNAME'] - token = '9d0a4e0bea561710e0728f161f7edf4e5201e112' - url=url+'?token='+token +def send_issues(url, titre, body, labels): + import requests + import urllib.request + import json + # import os + # import qgis - headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'} + # usr = os.environ['USERNAME'] + token = '9d0a4e0bea561710e0728f161f7edf4e5201e112' + url = url + '?token=' + token + headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'} + + payload = {'title': titre, 'body': body, 'labels': labels} + try: + urllib.request.urlopen('https://google.com') + binar = True + except ValueError: + binar = False + r = '' + if binar: + r = requests.post(url, data=json.dumps(payload), headers=headers) + return r - payload = {'title': titre, 'body': body, 'labels': labels} - try: - urllib.request.urlopen('https://google.com') - binar = True - except: - binar = False - r = '' - if binar: - r = requests.post(url, data=json.dumps(payload), headers=headers) - return r def maj_verif(NAME): - import qgis - import urllib.request - iface = qgis.utils.iface - from qgis.core import Qgis + import qgis + import urllib.request + iface = qgis.utils.iface + from qgis.core import Qgis - url = qgis.utils.pluginMetadata(NAME,'repository') - #URL = url+'/raw/branch/main/plugins.xml' - URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml' + # url = qgis.utils.pluginMetadata(NAME, 'repository') + # URL = url+'/raw/branch/main/plugins.xml' + URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml' # print(URL) - version = qgis.utils.pluginMetadata(NAME,'version') - len_version = len(version) - try: - urllib.request.urlopen('https://google.com') - binar = True - except: - binar = False - if binar: - try: - version_web = str(urllib.request.urlopen(URL).read()) - plugin_num = version_web.find(NAME) - valeur_version_web = version_web.find('',plugin_num)+9 - version_plugin = version_web[valeur_version_web:valeur_version_web+len_version] - if version_plugin != version: - iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30) - except: - print("error gitea version ssl") - else: - iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30) + version = qgis.utils.pluginMetadata(NAME, 'version') + len_version = len(version) + try: + urllib.request.urlopen('https://google.com') + binar = True + except urllib.error.URLError: + binar = False + if binar: + try: + version_web = str(urllib.request.urlopen(URL).read()) + plugin_num = version_web.find(NAME) + valeur_version_web = version_web.find('', plugin_num) + 9 + version_plugin = version_web[valeur_version_web:valeur_version_web + len_version] + if version_plugin != version: + iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30) + except urllib.error.URLError: + print("error gitea version ssl") + else: + iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30) + def devlog(NAME): - import qgis - devmaj = '' - devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog') - return devmaj - -def create_contour(self,schema,cur,con,host ,port ,dbname ,user ,mdp): - ### Creation de la table contour - if self.couche_contour.isChecked(): # Verifie si la checkbox est cochee - if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '': - tablename = schema + "_contour" - else : - tablename = schema + "_contour_" + self.annee_1.text() - tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')" - SQL_contour = "CREATE TABLE " + schema + "."+ tablename + champ_contour - - cur.execute(SQL_contour) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" - SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" - SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" - SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" - - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'contour_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_area_m2) - cur.execute(SQL_trigger_area_ha) - cur.execute(SQL_trigger_date_creation) - cur.execute(SQL_trigger_date_maj) - cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles - cur.execute(SQL_GRANT_TABLE) - - con.commit() - - ## Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") -def create_travaux(self,schema,cur,con,host,port,dbname,user,mdp): - ### Creation de la table travaux prevus - if self.couche_travaux_prevus.isChecked(): - #**********Poly - if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': - tablename = schema + "_travaux_prevus_poly" - else : - tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text() - tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')" - SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multipolygon - - cur.execute(SQL_travaux_prevus) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" - SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" - SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" - SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" - - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'travaux_prevus_poly_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_date_creation) - cur.execute(SQL_trigger_date_maj) - cur.execute(SQL_trigger_area_m2) - cur.execute(SQL_trigger_area_ha) - cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles - cur.execute(SQL_GRANT_TABLE) - - con.commit() - - ## Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - - #**********ligne - if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': - tablename = schema + "_travaux_prevus_ligne" - else : - tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text() - tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')" - SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_multilinestring - - cur.execute(SQL_travaux_prevus) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" - SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" - SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" - SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" - - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'travaux_prevus_ligne_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_date_creation) - cur.execute(SQL_trigger_date_maj) - cur.execute(SQL_trigger_length_m) - cur.execute(SQL_trigger_length_km) - cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles - cur.execute(SQL_GRANT_TABLE) - - con.commit() - - ## Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - - #**********point - if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': - tablename = schema + "_travaux_prevus_point" - else : - tablename = schema + "_travaux_prevus_point_" + self.annee_5.text() - tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')" - SQL_travaux_prevus = "CREATE TABLE " + schema + "."+ tablename + champ_travaux_prevus_point - - cur.execute(SQL_travaux_prevus) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" - SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" - SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" - - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'travaux_prevus_point_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_date_creation) - cur.execute(SQL_trigger_date_maj) - cur.execute(SQL_trigger_coordonnees) - cur.execute(SQL_style) ## Enregistrement du style (comme style par defaut) dans la table layer_styles - cur.execute(SQL_GRANT_TABLE) - - con.commit() - - ## Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - -def create_habita(self,schema,cur,con,host ,port ,dbname ,user ,mdp): - ### Creation de la table habitat - if self.couche_habitat.isChecked(): - if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '': - tablename = schema + "_habitat" - else : - tablename = schema + "_habitat_" + self.annee_2.text() - - tablename_1=tablename+"_points" - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+tablename_1+"','gid')" - tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_1 + champ_vegethab_point - - print(RETURNE) - print('') - print(SQL_VEGETHAB) - cur.execute(SQL_VEGETHAB) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'vegethab_points_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_1+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_coordonnees) - cur.execute(SQL_style) - cur.execute(SQL_GRANT_TABLE) - - con.commit() - ### Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename_1, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - - tablename_2=tablename+"_lignes" - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename_2+"','gid')" - tablename_qgis = tablename_2[1:] - SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_2 + champ_vegethab_multilinestring - - cur.execute(SQL_VEGETHAB) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" - SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'vegethab_lignes_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_2+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_length_m) - cur.execute(SQL_trigger_length_km) - cur.execute(SQL_style) - cur.execute(SQL_GRANT_TABLE) - - con.commit() - ### Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename_2, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - - tablename_3=tablename+"_polygones" - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename_3+"','gid')" - tablename_qgis = tablename_3[1:] - SQL_VEGETHAB = "CREATE TABLE "+ schema + "."+ tablename_3 + champ_vegethab_multipolygon - - cur.execute(SQL_VEGETHAB) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" - SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" - SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) - SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() - FROM layer_styles - WHERE description = 'vegethab_polygones_modele_v3'""" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename_3+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_trigger_area_m2) - cur.execute(SQL_trigger_area_ha) - cur.execute(SQL_style) - cur.execute(SQL_GRANT_TABLE) - - con.commit() - ### Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename_3, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") -def create_vierge(self,schema,cur,con,host ,port ,dbname ,user ,mdp): - ### Creation de la table vierge - if self.couche_vierge.isChecked(): - if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '': - tablename = schema + "_" + self.nom_couche_vierge.text().lower() - else : - tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text() - tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - - if self.couche_vierge_point.isChecked() == 1 : - champ_vierge = champ_viergePoint - - if self.couche_vierge_ligne.isChecked() == 1 : - champ_vierge = champ_viergeLigne - - if self.couche_vierge_polygone.isChecked() == 1 : - champ_vierge = champ_viergePolygone - - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')" - SQL_vierge = "CREATE TABLE " + schema + "."+ tablename + champ_vierge - - cur.execute(SQL_vierge) - cur.execute(RETURNE) - sequence_name = cur.fetchone()[0] - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" - - SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" - SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" - SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" - SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" - SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" - SQL_GRANT_TABLE="GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON "+schema+"."+tablename+" TO grp_sig;GRANT ALL ON SEQUENCE "+sequence_name+" TO grp_qgis;" - - cur.execute(SQL_pkey) - cur.execute(SQL_GRANT_TABLE) - - if self.couche_vierge_point.isChecked() == 1 : - cur.execute(SQL_trigger_coordonnees) - - if self.couche_vierge_ligne.isChecked() == 1 : - cur.execute(SQL_trigger_length_m) - cur.execute(SQL_trigger_length_km) - - if self.couche_vierge_polygone.isChecked() == 1 : - cur.execute(SQL_trigger_area_m2) - cur.execute(SQL_trigger_area_ha) - - con.commit() - - ### Affichage de la table - uri = QgsDataSourceUri() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,mdp) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + import qgis + devmaj = '' + devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog') + return devmaj + + +def create_contour(self, schema, cur, con, host, port, dbname, user, mdp): + # Creation de la table contour + # Verifie si la checkbox est cochee + if self.couche_contour.isChecked(): + if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '': + tablename = schema + "_contour" + else: + tablename = schema + "_contour_" + self.annee_1.text() + tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis + + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" + SQL_contour = "CREATE TABLE " + schema + "." + tablename + champ_contour + + cur.execute(SQL_contour) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" + SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" + SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" + SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" + + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'contour_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_area_m2) + cur.execute(SQL_trigger_area_ha) + cur.execute(SQL_trigger_date_creation) + cur.execute(SQL_trigger_date_maj) + # Enregistrement du style (comme style par defaut) dans la table layer_styles + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + +def create_travaux(self, schema, cur, con, host, port, dbname, user, mdp): + # Creation de la table travaux prevus + if self.couche_travaux_prevus.isChecked(): + # **********Poly + if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': + tablename = schema + "_travaux_prevus_poly" + else: + tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text() + tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis + + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" + SQL_travaux_prevus = "CREATE TABLE " + schema + "." + tablename + champ_travaux_prevus_multipolygon + + cur.execute(SQL_travaux_prevus) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" + SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" + SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" + SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" + + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'travaux_prevus_poly_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_date_creation) + cur.execute(SQL_trigger_date_maj) + cur.execute(SQL_trigger_area_m2) + cur.execute(SQL_trigger_area_ha) + # Enregistrement du style (comme style par defaut) dans la table layer_styles + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + # **********ligne + if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': + tablename = schema + "_travaux_prevus_ligne" + else: + tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text() + tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis + + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" + SQL_travaux_prevus = "CREATE TABLE " + schema + "." + tablename + champ_travaux_prevus_multilinestring + + cur.execute(SQL_travaux_prevus) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" + SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" + SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" + SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" + + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'travaux_prevus_ligne_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_date_creation) + cur.execute(SQL_trigger_date_maj) + cur.execute(SQL_trigger_length_m) + cur.execute(SQL_trigger_length_km) + # Enregistrement du style (comme style par defaut) dans la table layer_styles + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + # **********point + if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': + tablename = schema + "_travaux_prevus_point" + else: + tablename = schema + "_travaux_prevus_point_" + self.annee_5.text() + tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis + + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" + SQL_travaux_prevus = "CREATE TABLE " + schema + "." + tablename + champ_travaux_prevus_point + + cur.execute(SQL_travaux_prevus) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" + SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" + SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" + + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'travaux_prevus_point_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_date_creation) + cur.execute(SQL_trigger_date_maj) + cur.execute(SQL_trigger_coordonnees) + # Enregistrement du style (comme style par defaut) dans la table layer_styles + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + +def create_habita(self, schema, cur, con, host, port, dbname, user, mdp): + # Creation de la table habitat + if self.couche_habitat.isChecked(): + if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '': + tablename = schema + "_habitat" + else: + tablename = schema + "_habitat_" + self.annee_2.text() + + tablename_1 = tablename + "_points" + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename_1 + "','gid')" + tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis + SQL_VEGETHAB = "CREATE TABLE " + schema + "." + tablename_1 + champ_vegethab_point + + print(RETURNE) + print('') + print(SQL_VEGETHAB) + cur.execute(SQL_VEGETHAB) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'vegethab_points_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_1 + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_1 + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_coordonnees) + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename_1, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + tablename_2 = tablename + "_lignes" + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename_2 + "','gid')" + tablename_qgis = tablename_2[1:] + SQL_VEGETHAB = "CREATE TABLE " + schema + "." + tablename_2 + champ_vegethab_multilinestring + + cur.execute(SQL_VEGETHAB) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" + SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'vegethab_lignes_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_2 + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_2 + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_length_m) + cur.execute(SQL_trigger_length_km) + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename_2, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + tablename_3 = tablename + "_polygones" + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename_3 + "','gid')" + tablename_qgis = tablename_3[1:] + SQL_VEGETHAB = "CREATE TABLE " + schema + "." + tablename_3 + champ_vegethab_multipolygon + + cur.execute(SQL_VEGETHAB) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" + SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" + SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) + SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() + FROM layer_styles + WHERE description = 'vegethab_polygones_modele_v3'""" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_3 + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_3 + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_trigger_area_m2) + cur.execute(SQL_trigger_area_ha) + cur.execute(SQL_style) + cur.execute(SQL_GRANT_TABLE) + + con.commit() + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename_3, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") + + +def create_vierge(self, schema, cur, con, host, port, dbname, user, mdp): + # Creation de la table vierge + if self.couche_vierge.isChecked(): + if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '': + tablename = schema + "_" + self.nom_couche_vierge.text().lower() + else: + tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text() + tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis + + if self.couche_vierge_point.isChecked() == 1: + champ_vierge = champ_viergePoint + + if self.couche_vierge_ligne.isChecked() == 1: + champ_vierge = champ_viergeLigne + + if self.couche_vierge_polygone.isChecked() == 1: + champ_vierge = champ_viergePolygone + + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" + SQL_vierge = "CREATE TABLE " + schema + "." + tablename + champ_vierge + + cur.execute(SQL_vierge) + cur.execute(RETURNE) + sequence_name = cur.fetchone()[0] + + SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" + + SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" + SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" + SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" + SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" + SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" + SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" + + cur.execute(SQL_pkey) + cur.execute(SQL_GRANT_TABLE) + + if self.couche_vierge_point.isChecked() == 1: + cur.execute(SQL_trigger_coordonnees) + + if self.couche_vierge_ligne.isChecked() == 1: + cur.execute(SQL_trigger_length_m) + cur.execute(SQL_trigger_length_km) + + if self.couche_vierge_polygone.isChecked() == 1: + cur.execute(SQL_trigger_area_m2) + cur.execute(SQL_trigger_area_ha) + + con.commit() + + # Affichage de la table + uri = QgsDataSourceUri() + # set host name, port, database name, username and password + uri.setConnection(host, port, dbname, user, mdp) + # set database schema, table name, geometry column and optionaly subset (WHERE clause) + uri.setDataSource(schema, tablename, geom) + + self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")