def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "python/plugins/swdeDzeInfo" # initialize locale localePath = "" locale = QSettings().value("locale/userLocale").toString()[0:2] if QFileInfo(self.plugin_dir).exists(): localePath = self.plugin_dir + "/i18n/swdeDzeInfo_" + locale + ".qm" if QFileInfo(localePath).exists(): self.translator = QTranslator() self.translator.load(localePath) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = swdeDzeInfoDialog() self.rdbase = RobDBBase('localhost', 'swdegis', 'biuro', 'melioracja', 1)
class SWDEWypis: """QGIS Plugin Implementation.""" def __init__(self, iface): """Constructor. :param iface: An interface instance that will be passed to this class which provides the hook by which you can manipulate the QGIS application at run time. :type iface: QgsInterface """ # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale locale = QSettings().value('locale/userLocale')[0:2] locale_path = os.path.join(self.plugin_dir, 'i18n', 'SWDEWypis_{}.qm'.format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = SWDEWypisDialog() # Declare instance attributes self.actions = [] self.menu = self.tr(u'&SWDE Wypis') # TODO: We are going to let the user set this up in a future iteration self.toolbar = self.iface.addToolBar(u'SWDEWypis') self.toolbar.setObjectName(u'SWDEWypis') #dane dotyczace serwera odczytane z QSettings self.pguser = '' self.pgbase = '' self.pguserpswd = '' self.pgserver = '' self.pgadmin = '' self.pgadminpswd = '' #zmienne do operacji wyboru kolejnej dzialki z zazanczonych self.actualSelect = 0 # noinspection PyMethodMayBeStatic def tr(self, message): """Get the translation for a string using Qt translation API. We implement this ourselves since we do not inherit QObject. :param message: String for translation. :type message: str, QString :returns: Translated version of message. :rtype: QString """ # noinspection PyTypeChecker,PyArgumentList,PyCallByClass return QCoreApplication.translate('SWDEWypis', message) def add_action(self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None): """Add a toolbar icon to the toolbar. :param icon_path: Path to the icon for this action. Can be a resource path (e.g. ':/plugins/foo/bar.png') or a normal file system path. :type icon_path: str :param text: Text that should be shown in menu items for this action. :type text: str :param callback: Function to be called when the action is triggered. :type callback: function :param enabled_flag: A flag indicating if the action should be enabled by default. Defaults to True. :type enabled_flag: bool :param add_to_menu: Flag indicating whether the action should also be added to the menu. Defaults to True. :type add_to_menu: bool :param add_to_toolbar: Flag indicating whether the action should also be added to the toolbar. Defaults to True. :type add_to_toolbar: bool :param status_tip: Optional text to show in a popup when mouse pointer hovers over the action. :type status_tip: str :param parent: Parent widget for the new action. Defaults None. :type parent: QWidget :param whats_this: Optional text to show in the status bar when the mouse pointer hovers over the action. :returns: The action that was created. Note that the action is also added to self.actions list. :rtype: QAction """ icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: self.toolbar.addAction(action) if add_to_menu: self.iface.addPluginToDatabaseMenu(self.menu, action) self.actions.append(action) return action def initGui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" icon_path = ':/plugins/SWDEWypis/icon.png' self.add_action(icon_path, text=self.tr(u'SWDE Wypis'), callback=self.run, parent=self.iface.mainWindow()) #------obsluga przyciskow ------------------ QObject.connect(self.dlg.pbtnRefresh, SIGNAL("clicked()"), self.pbtnRefreshClicked) QObject.connect(self.dlg.pbtnPrint, SIGNAL("clicked()"), self.pbtnPrintClicked) QObject.connect(self.dlg.pbtnPrev, SIGNAL("clicked()"), self.pbtnPrevClicked) QObject.connect(self.dlg.pbtnNext, SIGNAL("clicked()"), self.pbtnNextClicked) def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" for action in self.actions: self.iface.removePluginDatabaseMenu(self.tr(u'&SWDE Wypis'), action) self.iface.removeToolBarIcon(action) # remove the toolbar del self.toolbar def run(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] self.dlg.txtFeedback.clear() uid_dze = "" for f in layer.selectedFeatures(): uid_dze = f['tab_uid'] break if uid_dze == "": komunikat = u"<BR><BR><HR><H3>Nie wybrano żadnej warstwy, nie zaznaczono żadnego obiektu lub warstwa nie jest prawidłową warstwą działek ewidencyjnych</HR><H3>" self.dlg.txtFeedback.setText(komunikat) else: #dane dotyczace serwera odczytane z QSettings sett = QSettings('erdeproj', 'SWDE_qgis_plugin') self.pguser = sett.value('pguser', '', type=str) self.pgbase = sett.value('pgbase', '', type=str) self.pguserpswd = sett.value('pguserpswd', '', type=str) self.pgserver = sett.value('pgserver', '', type=str) self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) self.dlg.show() #=============================================================================== # layer = self.iface.activeLayer() # provider = layer.dataProvider() # lname = layer.name() # provname = provider.name() # if layer and lname == 'g5dze' and provname == 'postgres' : # nF = layer.selectedFeatureCount() # fields = layer.pendingFields() # features = QgsFeature(fields) # #features = layer.selectedFeatures() # for f in features: # map = f.attributeMap() # if nF == 1: # provider = layer.dataProvider() # uid_dze = map[provider.fieldNameIndex('tab_uid')].toString() # #uid_dze = '040601_256126' # #dane dotyczace serwera odczytane z QSettings # sett = QSettings('erdeproj', 'SWDE_qgis_plugin') # self.pguser = sett.value('pguser', '', type=str) # self.pgbase = sett.value('pgbase', '', type=str) # self.pguserpswd = sett.value('pguserpswd', '', type=str) # self.pgserver = sett.value('pgserver', '', type=str) # # self.dlg.setTextBrowser( self.dzeInfo(uid_dze)) # # show the dialog # self.dlg.show() # else: # QMessageBox.critical(self.iface.mainWindow(),"Error", u"Musisz wybrać dokładnie jedną działkę, użyj narzędzia: <<Wybierz jeden obiekt>>") # else: # QMessageBox.critical(self.iface.mainWindow(),"Error",u"Nie wybrano żadnej warstwy lub warstwa nie jest prawidłową warstwą g5dze") #=============================================================================== #===================================================================================== #===================obsluga zdarzen=================================================== def pbtnPrintClicked(self): dialog = QPrintDialog() if dialog.exec_() == QDialog.Accepted: self.dlg.txtFeedback.document().print_(dialog.printer()) #------------------------------------------------------------------------------------ def pbtnRefreshClicked(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] uid_dze = "" for f in layer.selectedFeatures(): uid_dze = f['tab_uid'] break if uid_dze == "": komunikat = u"<BR><BR><HR><H3>Nie wybrano żadnej warstwy, nie zaznaczono żadnego obiektu lub warstwa nie jest prawidłową warstwą działek ewidencyjnych</HR><H3>" self.dlg.txtFeedback.setText(komunikat) else: self.actualSelect = 0 self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) #----------------------------------------------------------------------------------- def pbtnPrevClicked(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] uid_dze = "" if self.actualSelect > 0: self.actualSelect -= 1 selFeatNr = 0 for f in layer.selectedFeatures(): if selFeatNr == self.actualSelect: uid_dze = f['tab_uid'] break selFeatNr += 1 self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) #------------------------------------------------------------------------------------- def pbtnNextClicked(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] uid_dze = "" selCount = layer.selectedFeatureCount() if self.actualSelect < (selCount - 1): self.actualSelect += 1 selFeatNr = 0 for f in layer.selectedFeatures(): if selFeatNr == self.actualSelect: uid_dze = f['tab_uid'] break selFeatNr += 1 self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) #------------------------------------------------------------------------------------ def dzeInfo(self, uid_dze): self.rdbase = RobDBBase(str(self.pgserver), str(self.pgbase), str(self.pguser), str(self.pguserpswd), 1) txt = "" #uni = lambda s: s if type(s) == unicode else unicode(s,'utf-8','replace') #powyzsza ntype = lambda s: '' if type(s) == NoneType else s uni = lambda s: s if type(s) == unicode else unicode( ntype(s), 'utf-8', 'replace') cols = [ 'g5idd', 'nr', 'id_zd', 'g5idr', 'g5nos', 'g5wrt', 'g5dwr', 'g5pew', 'g5rzn', 'g5dww', 'g5radr', 'g5rpwl', 'g5rpwd', 'g5rjdr', 'g5dtw', 'g5dtu', 'g5rkrg', 'g5id2', 'g5id1', 'nrobr', 'tab_uid' ] g5dzeT = RobDBTable(self.rdbase, 'g5dze', cols, 1, 1) g5dzeT.where(['tab_uid'], [str(uid_dze)]) txt = "<HR><H3>PODSTAWOWE INFORMACJE</H3><HR>" txt += "<b>IDD: </b>" + g5dzeT.get_col_value('g5idd') + "<br>" txt += u"<b>nr działki: </b>" + g5dzeT.get_col_value('nr') + "<br>" txt += "<b>Pow. ew: </b>" + str( g5dzeT.get_col_value('g5pew')) + " m2 <br>" nr_obr = g5dzeT.get_col_value('nrobr') nr_jew = g5dzeT.get_col_value('id_zd') id_jdr = g5dzeT.get_col_value('g5rjdr') if id_jdr == None: id_jdr = '0' dze_id1 = g5dzeT.get_col_value('g5id1') id_zd = g5dzeT.get_col_value('id_zd') dze_uid = g5dzeT.get_col_value('tab_uid') dze_radr = g5dzeT.get_col_value('g5radr') dze_rpwl = g5dzeT.get_col_value('g5rpwl') dze_rpwd = g5dzeT.get_col_value('g5rpwd') cols = ['g5nro', 'g5naz'] g5obrT = RobDBTable(self.rdbase, 'g5obr', cols, 1, 1) g5obrT.where(['g5nro'], [nr_jew + "." + nr_obr]) txt += u"<b>Obręb:</b> " + uni(g5obrT.get_col_value( 'g5naz')) + "(" + g5obrT.get_col_value('g5nro') + ")<br>" cols = ['g5idj', 'g5naz', 'plik_data'] g5jewT = RobDBTable(self.rdbase, 'g5jew', cols, 1, 1) g5jewT.where(['g5idj'], [nr_jew]) txt += "<b>Jednostka ewidencyjna: </b>" + uni( g5jewT.get_col_value('g5naz')) + " (" + g5jewT.get_col_value( 'g5idj') + ")<br>" plik_data = uni(g5jewT.get_col_value('plik_data')) cols = ['g5id1', 'g5tjr', 'g5ijr', 'g5rgn'] g5jdrT = RobDBTable(self.rdbase, 'g5jdr', cols, 1, 1) g5jdrT.where(['id_zd', 'g5id1'], [nr_jew, id_jdr]) txt += "<b>Jednostka rejestrowa:</b>" + g5jdrT.get_col_value( 'g5ijr') + "<br><br>" cols = ['g5ofu', 'g5ozu', 'g5ozk', 'g5pew'] g5kluT = RobDBTable(self.rdbase, 'g5klu', cols, 1, 1) g5kluT.where(['id_zd', 'g5rdze'], [nr_jew, dze_id1]) txt += u"<HR></HR><H3>UŻYTKI GRUNTOWE</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>OFU - sposób zagospodarowania</td><td>OZU - oznaczenie użytku </td><td>OZK - klasa bonitacyjna</td><td>Powierzchnia.</td></tr>' for row in g5kluT.rows: txt += '<tr bgcolor="#E6E6FA"><td>' + uni( row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni( row[2]) + "</td><td>" + str(row[3]) + "</td></tr>" txt += "</table>" cols = ['g5ud', 'g5rwls', 'g5rpod', 'rpod_rodzaj'] g5udzT = RobDBTable(self.rdbase, 'g5udz', cols, 1, 1) g5udzT.where(['id_zd', 'g5rwls'], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WłAŚCICIEL</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td></tr>' for row in g5udzT.rows: pod_id = row[2] pod_rodz = row[3] udz = row[0] cols = ['g5nzw', 'g5pim', 'g5dim', 'g5radr'] g5osfT = RobDBTable(self.rdbase, 'g5osf', cols, 1, 1) if pod_rodz == "G5INS": cols = ['g5sti', 'g5npe', 'g5nsk', 'g5rgn', 'g5nip', 'g5radr'] g5insT = RobDBTable(self.rdbase, 'g5ins', cols, 1, 1) g5insT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value('g5npe')) radr = g5insT.get_col_value('g5radr') if not radr: # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = g5adrT.get_col_value('g5pcz') pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td></tr>" elif pod_rodz == "G5OSF": g5osfT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) radr = g5osfT.get_col_value('g5radr') if not radr: radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni( g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value( 'g5dim')) + "</td><td>" + adr + "</td></tr>" elif pod_rodz == "G5MLZ": cols = ['g5rmaz', 'g5rzona'] g5mlzT = RobDBTable(self.rdbase, 'g5mlz', cols, 1, 1) g5mlzT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rmaz')]) mradr = g5osfT.get_col_value('g5radr') if not mradr: mradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) madr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz maz = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rzona')]) zona = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) zradr = g5osfT.get_col_value('g5radr') if not zradr: zradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) zadr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td></tr>" txt += "</table>" cols = ['g5ud', 'g5rwld', 'g5rpod', 'rpod_rodzaj', 'g5rwd'] g5udwT = RobDBTable(self.rdbase, 'g5udw', cols, 1, 1) g5udwT.where(['id_zd', 'g5rwld'], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WŁADAJĄCY</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td><td>Rodzaj władania</td></tr>' rodz_wdtxt = "" for row in g5udwT.rows: #txt += row[0] + ' ' + row[1] + ' ' + row[2] + ' ' + row[3] + ' ' + row[4] pod_id = row[2] pod_rodz = row[3] udz = row[0] rodz_wd = row[4] if rodz_wd == '1': rodz_wdtxt = u'użytkowanie wieczyste' if rodz_wd == '2': rodz_wdtxt = u'trwały zarząd lub zarząd' if rodz_wd == '3': rodz_wdtxt = u'wykonywanie prawa własności Skarbu Państwa i innych praw rzeczowych' if rodz_wd == '4': rodz_wdtxt = u'gospodarowanie zasobem nieruchomości Skarbu Państwa oraz gminnymi, powiatowymi i wojewódzkimi zasobami nieruchomości' if rodz_wd == '5': rodz_wdtxt = u'użytkowanie' if rodz_wd == '6': rodz_wdtxt = u'ułamkowa część własności nieobciążona prawami wymienionymi w pkt 1,2,5' cols = ['g5nzw', 'g5pim', 'g5dim'] g5osfT = RobDBTable(self.rdbase, 'g5osf', cols, 1, 1) if pod_rodz == "G5INS": cols = ['g5sti', 'g5npe', 'g5nsk', 'g5rgn', 'g5nip', 'g5radr'] g5insT = RobDBTable(self.rdbase, 'g5ins', cols, 1, 1) g5insT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value('g5npe')) radr = g5insT.get_col_value('g5radr') if not radr: # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" elif pod_rodz == "G5OSF": g5osfT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) radr = g5osfT.get_col_value('g5radr') if not radr: radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni( g5osfT.get_col_value('g5nzw') ) + " " + uni(g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim') ) + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" elif pod_rodz == "G5MLZ": cols = ['g5rmaz', 'g5rzona'] g5mlzT = RobDBTable(self.rdbase, 'g5mlz', cols, 1, 1) g5mlzT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rmaz')]) mradr = g5osfT.get_col_value('g5radr') if not mradr: mradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) madr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz maz = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rzona')]) zona = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) zradr = g5osfT.get_col_value('g5radr') if not zradr: zradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) zadr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + maz + "," + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td><td>" + rodz_wdtxt + "</td></tr>" txt += "</table>" #dokumenty rpwl SQLstr = "SELECT g5kdk, g5dtd, g5dtp, g5syg, g5nsr, g5opd FROM g5dok where tab_uid = any(array[" res = None if dze_rpwl: for dok_id in dze_rpwl: SQLstr += "'" + nr_jew + dok_id + "'," SQLstr = SQLstr.rstrip(',') SQLstr += "]);" res = self.rdbase.executeSQL(SQLstr) if res: txt += u"<HR></HR><H3>DOKUMENTY POWIĄZANE</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>KDK</td><td>DTD</td><td>DTP</td><td>SYG</td><td>NSR</td><td>OPD</td></tr>' for row in res: txt += '<tr bgcolor="#E6E6FA"><td>' + uni( row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni( row[2]) + "</td><td>" + uni( row[3]) + "</td><td>" + uni(row[4]) + "</td></tr>" txt += "</table>" txt += "<HR></HR><BR><RIGHT>" + time.strftime( "%Y-%m-%d %H:%M:%S" ) + " (plik SWDE z dnia: " + plik_data + ")</RIGHT>" return txt
def dzeInfo(self, uid_dze): self.rdbase = RobDBBase(str(self.pgserver), str(self.pgbase), str(self.pguser), str(self.pguserpswd), 1) txt = "" #uni = lambda s: s if type(s) == unicode else unicode(s,'utf-8','replace') #powyzsza ntype = lambda s: '' if type(s) == NoneType else s uni = lambda s: s if type(s) == unicode else unicode( ntype(s), 'utf-8', 'replace') cols = [ 'g5idd', 'nr', 'id_zd', 'g5idr', 'g5nos', 'g5wrt', 'g5dwr', 'g5pew', 'g5rzn', 'g5dww', 'g5radr', 'g5rpwl', 'g5rpwd', 'g5rjdr', 'g5dtw', 'g5dtu', 'g5rkrg', 'g5id2', 'g5id1', 'nrobr', 'tab_uid' ] g5dzeT = RobDBTable(self.rdbase, 'g5dze', cols, 1, 1) g5dzeT.where(['tab_uid'], [str(uid_dze)]) txt = "<HR><H3>PODSTAWOWE INFORMACJE</H3><HR>" txt += "<b>IDD: </b>" + g5dzeT.get_col_value('g5idd') + "<br>" txt += u"<b>nr działki: </b>" + g5dzeT.get_col_value('nr') + "<br>" txt += "<b>Pow. ew: </b>" + str( g5dzeT.get_col_value('g5pew')) + " m2 <br>" nr_obr = g5dzeT.get_col_value('nrobr') nr_jew = g5dzeT.get_col_value('id_zd') id_jdr = g5dzeT.get_col_value('g5rjdr') if id_jdr == None: id_jdr = '0' dze_id1 = g5dzeT.get_col_value('g5id1') id_zd = g5dzeT.get_col_value('id_zd') dze_uid = g5dzeT.get_col_value('tab_uid') dze_radr = g5dzeT.get_col_value('g5radr') dze_rpwl = g5dzeT.get_col_value('g5rpwl') dze_rpwd = g5dzeT.get_col_value('g5rpwd') cols = ['g5nro', 'g5naz'] g5obrT = RobDBTable(self.rdbase, 'g5obr', cols, 1, 1) g5obrT.where(['g5nro'], [nr_jew + "." + nr_obr]) txt += u"<b>Obręb:</b> " + uni(g5obrT.get_col_value( 'g5naz')) + "(" + g5obrT.get_col_value('g5nro') + ")<br>" cols = ['g5idj', 'g5naz', 'plik_data'] g5jewT = RobDBTable(self.rdbase, 'g5jew', cols, 1, 1) g5jewT.where(['g5idj'], [nr_jew]) txt += "<b>Jednostka ewidencyjna: </b>" + uni( g5jewT.get_col_value('g5naz')) + " (" + g5jewT.get_col_value( 'g5idj') + ")<br>" plik_data = uni(g5jewT.get_col_value('plik_data')) cols = ['g5id1', 'g5tjr', 'g5ijr', 'g5rgn'] g5jdrT = RobDBTable(self.rdbase, 'g5jdr', cols, 1, 1) g5jdrT.where(['id_zd', 'g5id1'], [nr_jew, id_jdr]) txt += "<b>Jednostka rejestrowa:</b>" + g5jdrT.get_col_value( 'g5ijr') + "<br><br>" cols = ['g5ofu', 'g5ozu', 'g5ozk', 'g5pew'] g5kluT = RobDBTable(self.rdbase, 'g5klu', cols, 1, 1) g5kluT.where(['id_zd', 'g5rdze'], [nr_jew, dze_id1]) txt += u"<HR></HR><H3>UŻYTKI GRUNTOWE</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>OFU - sposób zagospodarowania</td><td>OZU - oznaczenie użytku </td><td>OZK - klasa bonitacyjna</td><td>Powierzchnia.</td></tr>' for row in g5kluT.rows: txt += '<tr bgcolor="#E6E6FA"><td>' + uni( row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni( row[2]) + "</td><td>" + str(row[3]) + "</td></tr>" txt += "</table>" cols = ['g5ud', 'g5rwls', 'g5rpod', 'rpod_rodzaj'] g5udzT = RobDBTable(self.rdbase, 'g5udz', cols, 1, 1) g5udzT.where(['id_zd', 'g5rwls'], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WłAŚCICIEL</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td></tr>' for row in g5udzT.rows: pod_id = row[2] pod_rodz = row[3] udz = row[0] cols = ['g5nzw', 'g5pim', 'g5dim', 'g5radr'] g5osfT = RobDBTable(self.rdbase, 'g5osf', cols, 1, 1) if pod_rodz == "G5INS": cols = ['g5sti', 'g5npe', 'g5nsk', 'g5rgn', 'g5nip', 'g5radr'] g5insT = RobDBTable(self.rdbase, 'g5ins', cols, 1, 1) g5insT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value('g5npe')) radr = g5insT.get_col_value('g5radr') if not radr: # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = g5adrT.get_col_value('g5pcz') pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td></tr>" elif pod_rodz == "G5OSF": g5osfT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) radr = g5osfT.get_col_value('g5radr') if not radr: radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni( g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value( 'g5dim')) + "</td><td>" + adr + "</td></tr>" elif pod_rodz == "G5MLZ": cols = ['g5rmaz', 'g5rzona'] g5mlzT = RobDBTable(self.rdbase, 'g5mlz', cols, 1, 1) g5mlzT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rmaz')]) mradr = g5osfT.get_col_value('g5radr') if not mradr: mradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) madr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz maz = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rzona')]) zona = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) zradr = g5osfT.get_col_value('g5radr') if not zradr: zradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) zadr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td></tr>" txt += "</table>" cols = ['g5ud', 'g5rwld', 'g5rpod', 'rpod_rodzaj', 'g5rwd'] g5udwT = RobDBTable(self.rdbase, 'g5udw', cols, 1, 1) g5udwT.where(['id_zd', 'g5rwld'], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WŁADAJĄCY</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td><td>Rodzaj władania</td></tr>' rodz_wdtxt = "" for row in g5udwT.rows: #txt += row[0] + ' ' + row[1] + ' ' + row[2] + ' ' + row[3] + ' ' + row[4] pod_id = row[2] pod_rodz = row[3] udz = row[0] rodz_wd = row[4] if rodz_wd == '1': rodz_wdtxt = u'użytkowanie wieczyste' if rodz_wd == '2': rodz_wdtxt = u'trwały zarząd lub zarząd' if rodz_wd == '3': rodz_wdtxt = u'wykonywanie prawa własności Skarbu Państwa i innych praw rzeczowych' if rodz_wd == '4': rodz_wdtxt = u'gospodarowanie zasobem nieruchomości Skarbu Państwa oraz gminnymi, powiatowymi i wojewódzkimi zasobami nieruchomości' if rodz_wd == '5': rodz_wdtxt = u'użytkowanie' if rodz_wd == '6': rodz_wdtxt = u'ułamkowa część własności nieobciążona prawami wymienionymi w pkt 1,2,5' cols = ['g5nzw', 'g5pim', 'g5dim'] g5osfT = RobDBTable(self.rdbase, 'g5osf', cols, 1, 1) if pod_rodz == "G5INS": cols = ['g5sti', 'g5npe', 'g5nsk', 'g5rgn', 'g5nip', 'g5radr'] g5insT = RobDBTable(self.rdbase, 'g5ins', cols, 1, 1) g5insT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value('g5npe')) radr = g5insT.get_col_value('g5radr') if not radr: # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" elif pod_rodz == "G5OSF": g5osfT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) radr = g5osfT.get_col_value('g5radr') if not radr: radr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) adr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni( g5osfT.get_col_value('g5nzw') ) + " " + uni(g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim') ) + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" elif pod_rodz == "G5MLZ": cols = ['g5rmaz', 'g5rzona'] g5mlzT = RobDBTable(self.rdbase, 'g5mlz', cols, 1, 1) g5mlzT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rmaz')]) mradr = g5osfT.get_col_value('g5radr') if not mradr: mradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) madr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz maz = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rzona')]) zona = uni(g5osfT.get_col_value('g5nzw')) + " " + uni( g5osfT.get_col_value('g5pim')) + " " + uni( g5osfT.get_col_value('g5dim')) zradr = g5osfT.get_col_value('g5radr') if not zradr: zradr = '0' cols = ['g5ulc', 'g5nra', 'g5nrl', 'g5msc', 'g5kod', 'g5pcz'] g5adrT = RobDBTable(self.rdbase, 'g5adr', cols, 1, 1) g5adrT.where(['id_zd', 'g5id1'], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value('g5ulc')) nra = uni(g5adrT.get_col_value('g5nra')) nrl = uni(g5adrT.get_col_value('g5nrl')) if len(nrl) > 0: nrl = '/' + nrl msc = uni(g5adrT.get_col_value('g5msc')) kod = uni(g5adrT.get_col_value('g5kod')) pcz = uni(g5adrT.get_col_value('g5pcz')) zadr = ulc + ' ' + nra + nrl + ' ' + msc + ', ' + kod + ' ' + pcz txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + maz + "," + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td><td>" + rodz_wdtxt + "</td></tr>" txt += "</table>" #dokumenty rpwl SQLstr = "SELECT g5kdk, g5dtd, g5dtp, g5syg, g5nsr, g5opd FROM g5dok where tab_uid = any(array[" res = None if dze_rpwl: for dok_id in dze_rpwl: SQLstr += "'" + nr_jew + dok_id + "'," SQLstr = SQLstr.rstrip(',') SQLstr += "]);" res = self.rdbase.executeSQL(SQLstr) if res: txt += u"<HR></HR><H3>DOKUMENTY POWIĄZANE</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>KDK</td><td>DTD</td><td>DTP</td><td>SYG</td><td>NSR</td><td>OPD</td></tr>' for row in res: txt += '<tr bgcolor="#E6E6FA"><td>' + uni( row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni( row[2]) + "</td><td>" + uni( row[3]) + "</td><td>" + uni(row[4]) + "</td></tr>" txt += "</table>" txt += "<HR></HR><BR><RIGHT>" + time.strftime( "%Y-%m-%d %H:%M:%S" ) + " (plik SWDE z dnia: " + plik_data + ")</RIGHT>" return txt
def pbtnImportujClicked(self): uni = lambda s: s if type(s) == unicode else unicode(s,'utf-8','replace') srid = str(self.dlg.ui.leditSRIDImport.text()) if self.f == 0 or self.f.closed: QMessageBox.warning(self.dlg, 'Uwaga!!!', u"Przed rozpoczęciem importu musisz wczytać plik oraz dokonać jego analizy") else: id_jed_rej = self.dlg.ui.leditIDZD.text() #TODO sprawdzenie czy nie jest puste oraz sprawdzenie czy w bazie juz takiego nie ma (mozna to sprawdzenie wykonac podczas analizy) - rstrip na wszelki wypadek id_jed_rej = str(id_jed_rej).rstrip() pyproj4strFrom = self.cmb_pyproj4_items[unicode(self.dlg.ui.cmbPyprojFrom.currentText(),'utf-8')] pyproj4strTo = self.cmb_pyproj4_items[unicode(self.dlg.ui.cmbPyprojTo.currentText(),'utf-8')] #lista column tablicowych - do innej obróbki niż pozostałe arrayCols = ['G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RSKD', 'G5RDOK', 'G5RDZE', 'G5ROBJ'] #słownik kolumn do zmiany nazwy - zmieniamy polskie znaki w nazwie kolumn bo trochę to broi przy pytaniach SQL plcharCols = {u'G5RŻONA':'G5RZONA', u'G5RMĄŻ':'G5RMAZ', u'G5RPWŁ':'G5RPWL', u'G5RWŁ':'G5RWL', u'G5RWŁS':'G5RWLS', u'G5RWŁD':'G5RWLD'} g5Cols = {} #słownik zbudowany: {'nazwa_tabeli':Tablica_Column[]} - posluzy do inicjacji tabel - obiektow robdbtable #inicjalizacja bazy danych rdbase = RobDBBase(str(self.pgserver), str(self.pgbase), str(self.pguser), str(self.pguserpswd), 1) rdg5Table = {} #słownik zawiera następującą strukturę: {'nazwa_tabeli': Obiekt_rdbtable} tableList = [] #tabela nazw tabel - wykorzystywane w roznych miejscach - miedzy innymi przy sprawdzeniu czy dana tabela została wybrana do importu #jest to lista tabel, ktore beda brane pod uwage - glowny cel - kontrola nad danymi w trakcie pisania tego skryptu #okreslenie rodzaju importu if self.dlg.ui.rdbtnZwyklyImport.isChecked() or self.dlg.ui.rdbtnAktualizacja.isChecked(): #sprawdzenie ktore z tabel mają być importowane - nie brane pod uwagę wprzypadku importu testowego if self.dlg.ui.chckG5dze.isChecked(): tableList.append('G5DZE') if self.dlg.ui.chckG5obr.isChecked(): tableList.append('G5OBR') if self.dlg.ui.chckG5jew.isChecked(): tableList.append('G5JEW') if self.dlg.ui.chckG5jdr.isChecked(): tableList.append('G5JDR') if self.dlg.ui.chckG5adr.isChecked(): tableList.append('G5ADR') if self.dlg.ui.chckG5dze.isChecked(): tableList.append('G5DZE') if self.dlg.ui.chckG5udz.isChecked(): tableList.append('G5UDZ') if self.dlg.ui.chckG5udw.isChecked(): tableList.append('G5UDW') if self.dlg.ui.chckG5osf.isChecked(): tableList.append('G5OSF') if self.dlg.ui.chckG5ins.isChecked(): tableList.append('G5INS') if self.dlg.ui.chckG5mlz.isChecked(): tableList.append('G5MLZ') if self.dlg.ui.chckG5osz.isChecked(): tableList.append('G5OSZ') if self.dlg.ui.chckG5klu.isChecked(): tableList.append('G5KLU') if self.dlg.ui.chckG5uzg.isChecked(): tableList.append('G5UZG') if self.dlg.ui.chckG5dok.isChecked(): tableList.append('G5DOK') if self.dlg.ui.chckG5bud.isChecked(): tableList.append('G5BUD') if self.dlg.ui.chckG5lkl.isChecked(): tableList.append('G5LKL') if self.dlg.ui.chckG5zmn.isChecked(): tableList.append('G5ZMN') if self.dlg.ui.chckG5kkl.isChecked(): tableList.append('G5KKL') if self.dlg.ui.chckG5zmn.isChecked(): tableList.append('G5ZMN') Cols = ['G5IDJ', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU','G5RKRG']#g5jew g5Cols['G5JEW'] = Cols Cols = [ 'G5IDD', 'GEOM', 'NR', 'G5IDR', 'G5NOS', 'G5WRT', 'G5DWR', 'G5PEW', 'G5RZN', 'G5DWW', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5DTW', 'G5DTU'] #g5dze g5Cols['G5DZE'] = Cols Cols = [ 'G5NRO', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG', 'G5RJEW', 'IDJEW'] #g5obr g5Cols['G5OBR'] = Cols Cols = ['G5PLC', 'G5PSL', 'G5NIP', 'G5NZW', 'G5PIM', 'G5DIM', 'G5OIM', 'G5MIM', 'G5OBL', 'G5DOS', 'G5RADR', 'G5STI', 'G5DTW', 'G5DTU'] #g5osf g5Cols['G5OSF'] = Cols Cols = [ 'G5STI', 'G5NPE', 'G5NSK', 'G5RGN', 'G5NIP', 'G5NZR', 'G5NRR', 'G5NSR', 'G5RADR', 'G5DTW', 'G5DTU'] #g5ins g5Cols['G5INS'] = Cols Cols = ['G5RZONA', 'G5RMAZ', 'G5DTW', 'G5DTU'] #g5mlz g5Cols['G5MLZ'] = Cols Cols = [ 'G5STI', 'G5NPE', 'G5NSK', 'G5RGN', 'G5NIP', 'G5RSKD', 'G5RADR', 'G5DTW', 'G5DTU'] #g5osz g5Cols['G5OSZ'] = Cols Cols = ['G5TJR', 'G5IJR', 'G5RGN', 'G5RWL', 'G5RWLS', 'G5RWLD', 'G5ROBR', 'G5DTW', 'G5DTU' ] #g5jdr g5Cols['G5JDR'] = Cols Cols = [ 'G5UD', 'G5RWLS', 'G5RPOD', 'G5DTW', 'G5DTU'] #g5udz g5Cols['G5UDZ'] = Cols Cols = [ 'G5RWD', 'G5UD', 'G5RWLD', 'G5RPOD', 'G5DTW', 'G5DTU'] #g5udw g5Cols['G5UDW'] = Cols Cols = [ 'G5OFU', 'G5OZU', 'G5OZK', 'G5PEW', 'G5RDZE', 'G5DTW', 'G5DTU'] #g5klu g5Cols['G5KLU'] = Cols Cols = [ 'G5IDT', 'G5OZU','G5OFU', 'G5PEW', 'G5RKRG', 'G5ROBR', 'G5DTW', 'G5DTU'] #g5uzg g5Cols['G5UZG'] = Cols Cols = ['G5KDK', 'G5DTD', 'G5DTP', 'G5SYG', 'G5NSR', 'G5OPD', 'G5RDOK', 'G5DTW', 'G5DTU'] #g5dok g5Cols['G5DOK'] = Cols Cols = ['G5TAR', 'G5NAZ', 'G5KRJ', 'G5WJD', 'G5PWJ', 'G5GMN', 'G5ULC', 'G5NRA', 'G5NRL', 'G5MSC', 'G5KOD', 'G5PCZ', 'G5DTW', 'G5DTU']#g5adr g5Cols['G5ADR'] = Cols Cols = ['G5IDB', 'G5FUZ', 'G5WRT', 'G5DWR', 'G5RBB', 'G5PEW', 'G5PEU', 'G5RZN', 'G5SCN', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR','G5RDZE', 'G5DTU', 'G5DTW']#g5bud g5Cols['G5BUD'] = Cols Cols = ['G5IDK', 'G5OZU', 'G5OZK', 'G5PEW', 'G5RKRG', 'G5ROBR', 'G5DTW', 'G5DTU'] g5Cols['G5KKL'] = Cols Cols = ['G5IDL', 'G5TLOK', 'G5PEW', 'G5PPP', 'G5LIZ', 'G5WRT', 'G5DWR', 'G5RJDR', 'G5RADR', 'G5RDOK', 'G5RBUD', 'G5DTW', 'G5DTU'] g5Cols['G5LKL'] = Cols Cols = ['G5NRZ', 'G5STZ', 'G5DZZ', 'G5DTA', 'G5DTZ', 'G5NAZ', 'G5ROBJ', 'G5RDOK', 'G5DTW', 'G5DTU'] g5Cols['G5ZMN'] = Cols elif self.dlg.ui.rdbtnImportTestowy.isChecked(): #w przypadku importu testowego importować będziemy tylko jedną z trzech tabel (dze, obr, lub jew) # przy okazji opróżnimy zawartość dotychczasowych tabel testowych delSQLstr = "delete from " if self.dlg.ui.rdbtnTestowyJEW.isChecked(): tableList.append('G5JEW') g5Cols['G5JEW'] = ['G5IDJ', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU','G5RKRG']#g5jew delSQLstr += "g5jew_test;" elif self.dlg.ui.rdbtnTestowyOBR.isChecked(): tableList.append('G5OBR') g5Cols['G5OBR'] = [ 'G5NRO', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG', 'G5RJEW', 'IDJEW'] delSQLstr += "g5obr_test;" elif self.dlg.ui.rdbtnTestowyDZE.isChecked(): tableList.append('G5DZE') g5Cols['G5DZE'] = [ 'G5IDD', 'GEOM', 'NR', 'G5IDR', 'G5NOS', 'G5WRT', 'G5DWR', 'G5PEW', 'G5RZN', 'G5DWW', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5DTW', 'G5DTU'] delSQLstr += "g5dze_test;" rdbase.executeSQL(delSQLstr) #nazwy kolumn muszą zostać podane dokładnie jak w bazie - czyli małymi literami #na przyszłość można to rozwiązać w samej RobDBTable #za zamianę liter na małe w tablicy odpowiada ta fikuśna konstrukcja: [x.lower() ....] for tableName in tableList: if self.dlg.ui.rdbtnImportTestowy.isChecked(): appendix = '_TEST' else: appendix = '' rdg5Table[tableName] = RobDBTable(rdbase, tableName + appendix, [x.lower() for x in g5Cols[tableName]], 1, 1) G5Table = "" collist = [] valuelist = [] insertdic = {} # forma [nazwa_tabeli:ilosc_insertow] arraylist = [] #wykorzystywana do przechowywania kolumn typu tablicaowego w formie [[col2, wart..], [col1, wart..], [col2, wart..]] arrayvalue = [] # wykorzystywane do przechowywania danych 1+ takich jak g5rkrg arrayname = '' # nazwa tablicy tożsama z nazwą kolumny w bazie pointslist = [] point = [] Kznak = "" #znacznik + albo -, oznaczajacy czy okreslane sa punkty tworzace polygon czy #wycinajace w nim dziure oldKznak = "0" #posluzy do sprawdzenia czy nastapila zmiana Kznak newPoly = 0 polycount = 0 ilosc_linii = self.ilosc_linii linianr = 0 #przyda sie w momencie gdy sie program wywali - okresli ktora linia pliku swde nabroiła obieg = 0 #bedzie wykorzystywane przy commit do bazy, ktore bedzie realizowane co np 100 pytań SQL txtcodec = self.txtCodec() transform = 0 if self.dlg.ui.rdbtnImportTestowy.isChecked() == 0: #tylko jesli nie jest to import testowy transform = self.dlg.ui.chckTransform.isChecked() self.dlg.ui.peditOutput.appendPlainText("Krok 1. Start programu: " + time.strftime("%Y-%m-%d %H:%M:%S")) pgdlg = QProgressDialog(u"Postęp", "Przerwij...", 0, 0) if self.dlg.ui.rdbtnAktualizacja.isChecked(): #usuniecie wszystkich rekordow o id_zd pgdlg.setLabelText(u"Usuwanie rekordów ze zbioru danych o id = " + id_jed_rej) pgdlg.show() #naprawde dziwna sprawa, ale bez tego dwukrotnie powtorzonego slepp-applicationevent #dialog się nie odświerza time.sleep(0.1) QApplication.processEvents() time.sleep(0.1) QApplication.processEvents() self.dlg.ui.peditOutput.appendPlainText(u"Rozpoczęcie usuwania aktualizowanych rekordów: " + time.strftime("%Y-%m-%d %H:%M:%S")) rdbase.executeSQL("SELECT g5sp_delfromtables('" + id_jed_rej + "');") self.dlg.ui.peditOutput.appendPlainText(u"Zakończono usuwanie aktualizowanych rekordów: " + time.strftime("%Y-%m-%d %H:%M:%S")) #import_file = str(self.swde_file.toUtf8()).decode('utf-8') try: #self.f = open(self.swde_file "r") self.f.seek(0.0) try: self.dlg.ui.peditOutput.appendPlainText(u"Krok 2. Rozpoczynam import pliku: " + self.f.name + " " + time.strftime("%Y-%m-%d %H:%M:%S")) i = 0; pgval = 0; #value progress bara linianr = 0 step = ilosc_linii/100 pgdlg.setRange(0,100) pgdlg.setLabelText(u"Trwa aktualizacja bazy .... ") #pgdlg.setMinimumDuration(1000) pgdlg.show() QApplication.processEvents() przerwanie = 0 # wartość 1 będzie świadczyć o tym, że albo zostało przerwane przez użytkownika albo z powodu błędu #w takim przypadku nie zostanie wykonany commit do bazy for line in self.f.readlines(): if i == step: pgval = pgval + 1 pgdlg.setValue(pgval) #QApplication.processEvents() i = 0 if pgdlg.wasCanceled(): przerwanie = 1 break line = unicode(line, txtcodec) i= i + 1 linianr+=1 #przyda sie jak sie program wypierniczy pocz = StringBetweenChar(line, ',',0) if pocz == "RO" or pocz == "RD" or pocz == "RC": #line = unicode(line, txtcodec) G5Table = StringBetweenChar(line, ',',2) g5id1_value = StringBetweenChar(line,',',3) g5id2_value = StringBetweenChar(line,',',4) if line[0:3] == "P,P": #self.dlg.ui.peditOutput.appendPlainText(u"znaleziono ciąg line 0:3 = P,P") str1 = StringBetweenChar(line, ',', 2) #self.dlg.ui.peditOutput.appendPlainText(u"str1 = " + str1 + u" o długości " + str(len(str1)) ) if str1 == u"G5PZG": #self.dlg.ui.peditOutput.appendPlainText(u"wlazło") nr = StringBetweenChar(line, ',', 3) #self.dlg.ui.peditOutput.appendPlainText(u"nr = " + nr) #strnr = nr.rstrip(';\r')# trzeba usuwac pojedynczo czyli tak jak poniżej strnr = nr.rstrip()# czyli jakiekolwiek białe znaki niezaleznie czy \n \r itp strnr = strnr.rstrip(';') #self.dlg.ui.peditOutput.appendPlainText(u"strnr = " + strnr) #oldline = line #self.dlg.ui.peditOutput.appendPlainText(u"oldline = " + oldline) line = "P,G," + self.pzgdic[strnr] + ",;\n" #self.dlg.ui.peditOutput.appendPlainText(u"line = " + line) #self.dlg.ui.peditOutput.appendPlainText(u"Zastąpiono ciąg P,P >>" + oldline + "<< na >>" + line + "<< " + time.strftime("%Y-%m-%d %H:%M:%S")) if G5Table in tableList: #line = unicode(line, txtcodec) colname = "" colvalue = "" znacznik = StringBetweenChar(line, ',',0) if znacznik == "D" or znacznik == "WG": line = line.rstrip() line = line.rstrip(';') # szczególnie linie ze znacznikami WG zakończone są średnikiem line = line.strip("'") line = line.strip('"') line = line.replace("'", '') line = line.replace('"', "") colname = StringBetweenChar(line,',',1) #zamiana nazw kolumn z polskimi znakami if colname in plcharCols: colname = plcharCols[colname] colvalue = StringBetweenChar(line,',',3) #dzialania wspolne dla wszystkich tablic if colname in g5Cols[G5Table]: #G5RDZE w G5KLU nie jest typu tablicowego, natomiast w g5BUD #jest. Na szczescie w g5klu nie ma żadnego pola tablicowego if colname in arrayCols and G5Table != 'G5KLU': arraylist.append([colname,colvalue]) else: collist.append(colname) valuelist.append(colvalue) #dzialania nietypowe #TODO przewidziec dla g5obr wyluskanie numeru obrebu do osobnego pola if colname == 'G5IDD' and G5Table == "G5DZE": #trzeba wyluskac numer dzialki i zapisac do oddzielnej kolumny #nr_dzialki = StringBetweenChar(colvalue, '.', 2) collist.append(u'nr') valuelist.append(StringBetweenChar(colvalue, '.', 2)) #nr obrębu też się przyda collist.append(u'nrobr') valuelist.append(StringBetweenChar(colvalue, '.', 1)) if colname == 'G5RPOD': #dla tabel g5udz i g5udw - wyglada to nastepujaco: "WG,G5RPOD,G5OSF,5465;" #a więc najpierw mamy określenie do jakiej tabeli jest dowiązanie (osf, ins, mlz czy osz) #a potem wartość wiązania w danej tabeli. Należy więc jeszcze wyciągnąć wartość po drugim ',' collist.append(u'rpod_rodzaj') pod_rodzaj = StringBetweenChar(line, ',', 2) valuelist.append(pod_rodzaj) #kolumna zawierajaca polaczone ze soba wartosci collist.append(u'id_podmiot') valuelist.append(colvalue + pod_rodzaj) elif znacznik == "K": Kznak = StringBetweenChar(line, ',',1)#czyli albo '+;' albo '-;' Kznak = Kznak[0]#pozostawienie tylko + albo - newPoly = 1 polycount+=1 elif znacznik == "P": yvalue = StringBetweenChar(line, ',',2) xvalue = StringBetweenChar(line, ',',3) #print "xv:", xvalue, "yv:", yvalue if transform == 1 : p1 = pyproj.Proj(pyproj4strFrom) p2 = pyproj.Proj(pyproj4strTo) x92, y92 = pyproj.transform(p1,p2,xvalue,yvalue) value = str(x92) + " " + str(y92) else: value = xvalue + " " + yvalue point.append( polycount) point.append(newPoly) point.append(Kznak) point.append(value) pointslist.append(point) #print point point = [] newPoly = 0 elif znacznik[0] == "X": #czyli koniec definicji recordu #print "2 line", line #print "2 znacznik = ", znacznik, collist, valuelist p = "" p1 = "" if len(pointslist)>0: for points in pointslist: if points[1] == 1:#newPoly #p1 = points[3] if points[0] == 1:#czyli pierwszy i byc moze jedyny polygon if srid == -1: #niezdefiniowany układ p = "POLYGON((" else: p = "@ST_GeomFromText(\'POLYGON((" else: #czyli ewentualne kolejne polygony p = p + p1 + "),(" p1 = points[3] p = p + points[3] + ',' if srid == -1: p = p + p1 + "))" else: p = p + p1 + "))\'," + srid + ")" collist.append("geom") valuelist.append(p) #dodanie kolumn tablicowych if len(arraylist) > 0: old_col = '' arraystr = "ARRAY[" arraylist.sort() for col, val in arraylist: if old_col == '': #startujemy old_col = col if col == old_col: arraystr += "\'"+ val + "\'," else: #nastąpiła zmiana columny arraystr = arraystr.rstrip(",") arraystr += "]" collist.append(old_col) valuelist.append(arraystr) old_col = col arraystr = "ARRAY[\'" + val + "\'," collist.append(old_col) arraystr = arraystr.rstrip(",") arraystr += ']' valuelist.append(arraystr) arraylist = [] #dodatnie id_jed_rej do kazdej tabeli collist.append("id_zd") valuelist.append(id_jed_rej) #dodanie id1 i id2 do kazdej z tabel collist.append("g5id1") valuelist.append(g5id1_value) collist.append("g5id2") valuelist.append(g5id2_value) #dodanie unikatowej kolumny - będzie stanowiła klucz główny w całej bazie collist.append('tab_uid') valuelist.append(id_jed_rej+g5id1_value) #sprawdzenie czy jest jeszcze jakas tablica, ktora nie zostala dodana do valuelist if len(arrayvalue)>0: collist.append(arrayname) values = "" for value in arrayvalue: values += "\'" + value.strip('[]') + "\'," values = values.rstrip(",")#usuniecie ostatniego przecinka valuelist.append(u"ARRAY[" + values + "]") arrayname = '' arrayvalue = [] rdg5Table[G5Table].insert(0, collist, valuelist) if G5Table in insertdic: insertdic[G5Table] += 1 else: insertdic[G5Table] = 1 QApplication.processEvents() #obieg+=1 #if obieg == 1000: # rdbase.commit() # obieg = 0 obieg+=1 collist = [] valuelist = [] pointslist = [] Kznak = "" polycount = 0 G5Table = "" if self.dlg.ui.rdbtnImportTestowy.isChecked() and self.dlg.ui.rdbtnTestowyJEW.isChecked(): #w tym przypadku nie ma co dalej ciągnąć pętli break #i = i+1 except Exception, ex: cols = "[" values = "[" for col in collist: cols += col + ", " for value in valuelist: values += value + ", " cols += "]" values += "]" self.dlg.ui.peditOutput.appendPlainText(u"błąd: " + uni(G5Table) + " " + uni(cols) + " " + uni(values) + "rekord nr: " + uni(str(obieg)) + "line = " + uni(line)+ " error: " + uni(str(ex)) ) przerwanie = 1 finally: if przerwanie == 1: rdbase.rollback() self.dlg.ui.peditOutput.appendPlainText("anulowano zapis do bazy: " + str(obieg) + u" rekordów: " + str(insertdic)) else: rdbase.commit() insstr = "" for tab, ilosc in insertdic.items(): insstr += tab + ':' + str(ilosc) + '; ' self.dlg.ui.peditOutput.appendPlainText("zapisano do bazy: " + str(obieg) + u" rekordów: " + insstr) #self.dlg.ui.peditOutput.appendPlainText("przerobiono lini: " + str(linianr)) #self.dlg.ui.peditOutput.appendPlainText(u"Plik zamknięty: " + time.strftime("%Y-%m-%d %H:%M:%S")) self.f.close() except IOError: self.dlg.ui.peditOutput.appendPlainText("IOError: " + time.strftime("%Y-%m-%d %H:%M:%S"))
def importuj(swde_file, tableListString, srid, pyproj4strFrom, pyproj4strTo, rodz_importu, pgserver, pgbase, pguser, pguserpswd, txtcodec, id_zd): global id_jed_rej global ilosc_linii global pzgdic tableList = [] #tabela nazw tabel w bazie tableList = tableListString.split(',') import_testowy = False if rodz_importu == 'testowyJEW' or rodz_importu == 'testowyOBR' or rodz_importu == 'testowyDZE': import_testowy = True for tabName in tableList: if tabName <> 'NONE': print tabName print srid print pyproj4strFrom print pyproj4strTo print "identyfikator jednostki rejestrowej:", id_jed_rej print "ilość linii", ilosc_linii print "rodzaj importu", rodz_importu print pgserver, pgbase, pguser, pguserpswd uni = lambda s: s if type(s) == unicode else unicode(s, 'utf-8', 'replace') try: f = open(swde_file, "r") if f == 0 or f.closed: print u"Przed rozpoczęciem importu musisz wczytać plik" else: if id_zd == 'NONE': #parametr wybierany przez uzytkownika, jesli jest inny niz NONE id_jed_rej = str(id_jed_rej).rstrip( ) #zostanie uzyty jako wymuszenie nazwy zbioru danych else: #w innym przypadku uzyta zostanie nazwa jednostki rej wyłuskana przez program id_jed_rej = id_zd #lista column tablicowych - do innej obróbki niż pozostałe arrayCols = [ 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RSKD', 'G5RDOK', 'G5RDZE', 'G5ROBJ' ] #słownik kolumn do zmiany nazwy - zmieniamy polskie znaki w nazwie kolumn bo trochę to broi przy pytaniach SQL plcharCols = { u'G5RŻONA': 'G5RZONA', u'G5RMĄŻ': 'G5RMAZ', u'G5RPWŁ': 'G5RPWL', u'G5RWŁ': 'G5RWL', u'G5RWŁS': 'G5RWLS', u'G5RWŁD': 'G5RWLD' } g5Cols = { } #słownik zbudowany: {'nazwa_tabeli':Tablica_Column[]} - posluzy do inicjacji tabel - obiektow robdbtable #inicjalizacja bazy danych rdbase = RobDBBase(pgserver, pgbase, pguser, pguserpswd, 1) rdg5Table = { } #słownik zawiera następującą strukturę: {'nazwa_tabeli': Obiekt_rdbtable} #okreslenie rodzaju importu if rodz_importu == 'zwykly' or rodz_importu == 'aktualizacja': Cols = ['G5IDJ', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG'] #g5jew g5Cols['G5JEW'] = Cols Cols = [ 'G5IDD', 'GEOM', 'NR', 'G5IDR', 'G5NOS', 'G5WRT', 'G5DWR', 'G5PEW', 'G5RZN', 'G5DWW', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5DTW', 'G5DTU' ] #g5dze g5Cols['G5DZE'] = Cols Cols = [ 'G5NRO', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG', 'G5RJEW', 'IDJEW' ] #g5obr g5Cols['G5OBR'] = Cols Cols = [ 'G5PLC', 'G5PSL', 'G5NIP', 'G5NZW', 'G5PIM', 'G5DIM', 'G5OIM', 'G5MIM', 'G5OBL', 'G5DOS', 'G5RADR', 'G5STI', 'G5DTW', 'G5DTU' ] #g5osf g5Cols['G5OSF'] = Cols Cols = [ 'G5STI', 'G5NPE', 'G5NSK', 'G5RGN', 'G5NIP', 'G5NZR', 'G5NRR', 'G5NSR', 'G5RADR', 'G5DTW', 'G5DTU' ] #g5ins g5Cols['G5INS'] = Cols Cols = ['G5RZONA', 'G5RMAZ', 'G5DTW', 'G5DTU'] #g5mlz g5Cols['G5MLZ'] = Cols Cols = [ 'G5STI', 'G5NPE', 'G5NSK', 'G5RGN', 'G5NIP', 'G5RSKD', 'G5RADR', 'G5DTW', 'G5DTU' ] #g5osz g5Cols['G5OSZ'] = Cols Cols = [ 'G5TJR', 'G5IJR', 'G5RGN', 'G5RWL', 'G5RWLS', 'G5RWLD', 'G5ROBR', 'G5DTW', 'G5DTU' ] #g5jdr g5Cols['G5JDR'] = Cols Cols = ['G5UD', 'G5RWLS', 'G5RPOD', 'G5DTW', 'G5DTU'] #g5udz g5Cols['G5UDZ'] = Cols Cols = ['G5RWD', 'G5UD', 'G5RWLD', 'G5RPOD', 'G5DTW', 'G5DTU'] #g5udw g5Cols['G5UDW'] = Cols Cols = [ 'G5OFU', 'G5OZU', 'G5OZK', 'G5PEW', 'G5RDZE', 'G5DTW', 'G5DTU' ] #g5klu g5Cols['G5KLU'] = Cols Cols = [ 'G5IDT', 'G5OZU', 'G5OFU', 'G5PEW', 'G5RKRG', 'G5ROBR', 'G5DTW', 'G5DTU' ] #g5uzg g5Cols['G5UZG'] = Cols Cols = [ 'G5KDK', 'G5DTD', 'G5DTP', 'G5SYG', 'G5NSR', 'G5OPD', 'G5RDOK', 'G5DTW', 'G5DTU' ] #g5dok g5Cols['G5DOK'] = Cols Cols = [ 'G5TAR', 'G5NAZ', 'G5KRJ', 'G5WJD', 'G5PWJ', 'G5GMN', 'G5ULC', 'G5NRA', 'G5NRL', 'G5MSC', 'G5KOD', 'G5PCZ', 'G5DTW', 'G5DTU' ] #g5adr g5Cols['G5ADR'] = Cols Cols = [ 'G5IDB', 'G5FUZ', 'G5WRT', 'G5DWR', 'G5RBB', 'G5PEW', 'G5PEU', 'G5RZN', 'G5SCN', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5RDZE', 'G5DTU', 'G5DTW' ] #g5bud g5Cols['G5BUD'] = Cols Cols = [ 'G5IDK', 'G5OZU', 'G5OZK', 'G5PEW', 'G5RKRG', 'G5ROBR', 'G5DTW', 'G5DTU' ] g5Cols['G5KKL'] = Cols Cols = [ 'G5IDL', 'G5TLOK', 'G5PEW', 'G5PPP', 'G5LIZ', 'G5WRT', 'G5DWR', 'G5RJDR', 'G5RADR', 'G5RDOK', 'G5RBUD', 'G5DTW', 'G5DTU' ] g5Cols['G5LKL'] = Cols Cols = [ 'G5NRZ', 'G5STZ', 'G5DZZ', 'G5DTA', 'G5DTZ', 'G5NAZ', 'G5ROBJ', 'G5RDOK', 'G5DTW', 'G5DTU' ] g5Cols['G5ZMN'] = Cols elif rodz_importu == 'testowyJEW' or rodz_importu == 'testowyOBR' or rodz_importu == 'testowyDZE': #teoretycznie powinno wystarczyć zwykle elif bez parametrow, ale na wszelki dorzuce te ory #w przypadku importu testowego importować będziemy tylko jedną z trzech tabel (dze, obr, lub jew) # przy okazji opróżnimy zawartość dotychczasowych tabel testowych delSQLstr = "delete from " if rodz_importu == 'testowyJEW': tableList.append('G5JEW') g5Cols['G5JEW'] = [ 'G5IDJ', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG' ] #g5jew delSQLstr += "g5jew_test;" elif rodz_importu == 'testowyOBR': tableList.append('G5OBR') g5Cols['G5OBR'] = [ 'G5NRO', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG', 'G5RJEW', 'IDJEW' ] delSQLstr += "g5obr_test;" elif rodz_importu == 'testowyDZE': tableList.append('G5DZE') g5Cols['G5DZE'] = [ 'G5IDD', 'GEOM', 'NR', 'G5IDR', 'G5NOS', 'G5WRT', 'G5DWR', 'G5PEW', 'G5RZN', 'G5DWW', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5DTW', 'G5DTU' ] delSQLstr += "g5dze_test;" rdbase.executeSQL(delSQLstr) #nazwy kolumn muszą zostać podane dokładnie jak w bazie - czyli małymi literami #na przyszłość można to rozwiązać w samej RobDBTable #za zamianę liter na małe w tablicy odpowiada ta fikuśna konstrukcja: [x.lower() ....] for tableName in tableList: if import_testowy: appendix = '_TEST' else: appendix = '' rdg5Table[tableName] = RobDBTable( rdbase, tableName + appendix, [x.lower() for x in g5Cols[tableName]], 1, 1) G5Table = "" collist = [] valuelist = [] insertdic = {} # forma [nazwa_tabeli:ilosc_insertow] arraylist = [ ] #wykorzystywana do przechowywania kolumn typu tablicaowego w formie [[col2, wart..], [col1, wart..], [col2, wart..]] arrayvalue = [ ] # wykorzystywane do przechowywania danych 1+ takich jak g5rkrg arrayname = '' # nazwa tablicy tożsama z nazwą kolumny w bazie pointslist = [] point = [] Kznak = "" #znacznik + albo -, oznaczajacy czy okreslane sa punkty tworzace polygon czy #wycinajace w nim dziure oldKznak = "0" #posluzy do sprawdzenia czy nastapila zmiana Kznak newPoly = 0 polycount = 0 linianr = 0 #przyda sie w momencie gdy sie program wywali - okresli ktora linia pliku swde nabroiła obieg = 0 #bedzie wykorzystywane przy commit do bazy, ktore bedzie realizowane co np 100 pytań SQL transform = False if import_testowy == False: #tylko jesli nie jest to import testowy if pyproj4strFrom != pyproj4strTo: transform = True print "transform:", transform print "Krok 2. Start programu: ", strftime("%Y-%m-%d %H:%M:%S") if rodz_importu == 'aktualizacja': #usuniecie wszystkich rekordow o id_zd print u"Usuwanie rekordów ze zbioru danych o id = ", id_jed_rej #naprawde dziwna sprawa, ale bez tego dwukrotnie powtorzonego slepp-applicationevent print u"Rozpoczęcie usuwania aktualizowanych rekordów: ", strftime( "%Y-%m-%d %H:%M:%S") rdbase.executeSQL("SELECT g5sp_delfromtables('" + id_jed_rej + "');") print u"Zakończono usuwanie aktualizowanych rekordów: ", strftime( "%Y-%m-%d %H:%M:%S") #import_file = str(self.swde_file.toUtf8()).decode('utf-8') try: #self.f = open(self.swde_file "r") f.seek(0.0) tekstline = "" try: print u"Krok 3. Rozpoczynam import pliku: ", f.name, " ", strftime( "%Y-%m-%d %H:%M:%S") i = 0 procent_wykonania = 0 #do monitorowania postepu linianr = 0 step = ilosc_linii / 100 print u'ilość linii:', ilosc_linii, "step", step for line in f.readlines(): tekstline = line #zmienna tekstline bedzie wykorzystywana poza petla w celu lokalizacji bledu - w exception if i == step: i = 0 procent_wykonania += 1 sys.stdout.write("\r wykonano: %d%s" % (procent_wykonania, "%")) sys.stdout.flush() sleep(0.01) #print u"postęp:", procent_wykonania, u"%" line = unicode(line, txtcodec) #print "unikod zadzialal" i = i + 1 linianr += 1 #przyda sie jak sie program wypierniczy pocz = StringBetweenChar(line, ',', 0) if pocz == "RO" or pocz == "RD" or pocz == "RC": #line = unicode(line, txtcodec) G5Table = StringBetweenChar(line, ',', 2) g5id1_value = StringBetweenChar(line, ',', 3) g5id2_value = StringBetweenChar(line, ',', 4) if line[0:3] == "P,P": #self.dlg.peditOutput.appendPlainText(u"znaleziono ciąg line 0:3 = P,P") str1 = StringBetweenChar(line, ',', 2) #self.dlg.peditOutput.appendPlainText(u"str1 = " + str1 + u" o długości " + str(len(str1)) ) if str1 == u"G5PZG": #self.dlg.peditOutput.appendPlainText(u"wlazło") nr = StringBetweenChar(line, ',', 3) #self.dlg.peditOutput.appendPlainText(u"nr = " + nr) #strnr = nr.rstrip(';\r')# trzeba usuwac pojedynczo czyli tak jak poniżej strnr = nr.rstrip( ) # czyli jakiekolwiek białe znaki niezaleznie czy \n \r itp strnr = strnr.rstrip(';') #self.dlg.peditOutput.appendPlainText(u"strnr = " + strnr) #oldline = line #self.dlg.peditOutput.appendPlainText(u"oldline = " + oldline) line = "P,G," + pzgdic[strnr] + ",;\n" #self.dlg.peditOutput.appendPlainText(u"line = " + line) #self.dlg.peditOutput.appendPlainText(u"Zastąpiono ciąg P,P >>" + oldline + "<< na >>" + line + "<< " + strftime("%Y-%m-%d %H:%M:%S")) if G5Table in tableList: colname = "" colvalue = "" znacznik = StringBetweenChar(line, ',', 0) if znacznik == "D" or znacznik == "WG": line = line.rstrip() line = line.rstrip( ';' ) # szczególnie linie ze znacznikami WG zakończone są średnikiem line = line.strip("'") line = line.strip('"') line = line.replace("'", '') line = line.replace('"', "") colname = StringBetweenChar(line, ',', 1) #zamiana nazw kolumn z polskimi znakami if colname in plcharCols: colname = plcharCols[colname] colvalue = StringBetweenChar(line, ',', 3) #dzialania wspolne dla wszystkich tablic if colname in g5Cols[G5Table]: #G5RDZE w G5KLU nie jest typu tablicowego, natomiast w g5BUD #jest. Na szczescie w g5klu nie ma żadnego pola tablicowego #to samo dotyczy g5radr - w g5osf i g5ins - nie jest array w przeciwienstwie do g5bud if colname in arrayCols and G5Table != 'G5KLU' and G5Table != 'G5INS' and G5Table != 'G5OSF': arraylist.append([colname, colvalue]) else: collist.append(colname) valuelist.append(colvalue) #dzialania nietypowe #TODO przewidziec dla g5obr wyluskanie numeru obrebu do osobnego pola if colname == 'G5IDD' and G5Table == "G5DZE": #trzeba wyluskac numer dzialki i zapisac do oddzielnej kolumny #nr_dzialki = StringBetweenChar(colvalue, '.', 2) collist.append(u'nr') valuelist.append( StringBetweenChar( colvalue, '.', 2)) #nr obrębu też się przyda collist.append(u'nrobr') valuelist.append( StringBetweenChar( colvalue, '.', 1)) if colname == 'G5RPOD': #dla tabel g5udz i g5udw - wyglada to nastepujaco: "WG,G5RPOD,G5OSF,5465;" #a więc najpierw mamy określenie do jakiej tabeli jest dowiązanie (osf, ins, mlz czy osz) #a potem wartość wiązania w danej tabeli. Należy więc jeszcze wyciągnąć wartość po drugim ',' collist.append(u'rpod_rodzaj') pod_rodzaj = StringBetweenChar( line, ',', 2) valuelist.append(pod_rodzaj) #kolumna zawierajaca polaczone ze soba wartosci collist.append(u'id_podmiot') valuelist.append(colvalue + pod_rodzaj) elif znacznik == "K": Kznak = StringBetweenChar( line, ',', 1) #czyli albo '+;' albo '-;' Kznak = Kznak[0] #pozostawienie tylko + albo - newPoly = 1 polycount += 1 elif znacznik == "P": yvalue = StringBetweenChar(line, ',', 2) xvalue = StringBetweenChar(line, ',', 3) #print "xv:", xvalue, "yv:", yvalue if transform: #print "transformacja" #p1 = pyproj.Proj(pyproj4strFrom) #p2 = pyproj.Proj(pyproj4strTo) p1 = pyproj.Proj(str(pyproj4strFrom)) p2 = pyproj.Proj(str(pyproj4strTo)) x92, y92 = pyproj.transform( p1, p2, xvalue, yvalue) value = str(x92) + " " + str(y92) else: value = xvalue + " " + yvalue point.append(polycount) point.append(newPoly) point.append(Kznak) point.append(value) pointslist.append(point) #print point point = [] newPoly = 0 elif znacznik[ 0] == "X": #czyli koniec definicji recordu #print "2 line", line #print "2 znacznik = ", znacznik, collist, valuelist p = "" p1 = "" if len(pointslist) > 0: for points in pointslist: if points[1] == 1: #newPoly #p1 = points[3] if points[ 0] == 1: #czyli pierwszy i byc moze jedyny polygon if srid == -1: #niezdefiniowany układ p = "POLYGON((" else: p = "@ST_GeomFromText(\'POLYGON((" else: #czyli ewentualne kolejne polygony p = p + p1 + "),(" p1 = points[3] p = p + points[3] + ',' if srid == -1: p = p + p1 + "))" else: p = p + p1 + "))\'," + srid + ")" collist.append("geom") valuelist.append(p) #dodanie kolumn tablicowych if len(arraylist) > 0: old_col = '' arraystr = "ARRAY[" arraylist.sort() for col, val in arraylist: if old_col == '': #startujemy old_col = col if col == old_col: arraystr += "\'" + val + "\'," else: #nastąpiła zmiana columny arraystr = arraystr.rstrip(",") arraystr += "]" collist.append(old_col) valuelist.append(arraystr) old_col = col arraystr = "ARRAY[\'" + val + "\'," collist.append(old_col) arraystr = arraystr.rstrip(",") arraystr += ']' valuelist.append(arraystr) arraylist = [] #dodatnie id_jed_rej do kazdej tabeli collist.append("id_zd") valuelist.append(id_jed_rej) #dodanie id1 i id2 do kazdej z tabel collist.append("g5id1") valuelist.append(g5id1_value) collist.append("g5id2") valuelist.append(g5id2_value) #dodanie unikatowej kolumny - będzie stanowiła klucz główny w całej bazie collist.append('tab_uid') valuelist.append(id_jed_rej + g5id1_value) #sprawdzenie czy jest jeszcze jakas tablica, ktora nie zostala dodana do valuelist if len(arrayvalue) > 0: collist.append(arrayname) values = "" for value in arrayvalue: values += "\'" + value.strip( '[]') + "\'," values = values.rstrip( ",") #usuniecie ostatniego przecinka valuelist.append(u"ARRAY[" + values + "]") arrayname = '' arrayvalue = [] rdg5Table[G5Table].insert( 0, collist, valuelist) if G5Table in insertdic: insertdic[G5Table] += 1 else: insertdic[G5Table] = 1 #obieg+=1 #if obieg == 1000: # rdbase.commit() # obieg = 0 obieg += 1 collist = [] valuelist = [] pointslist = [] Kznak = "" polycount = 0 G5Table = "" if rodz_importu == 'testowyJEW': #w tym przypadku nie ma co dalej ciągnąć pętli break #i = i+1 except Exception, ex: cols = "[" values = "[" for col in collist: cols += col + ", " for value in valuelist: values += value + ", " cols += "]" values += "]" print u"błąd: ", uni(G5Table), uni(cols), uni( values), "rekord nr: ", uni(str( obieg)), "line = ", uni(tekstline), "error: ", uni( str(ex)) #przerwanie = 1 finally: rdbase.commit() print "wykonano commita" insstr = "" for tab, ilosc in insertdic.items(): insstr += tab + ':' + str(ilosc) + '; ' print "tab:", tab print "zapisano do bazy: ", str( obieg), u" rekordów: ", insstr f.close() except IOError: print "IOError: ", strftime("%Y-%m-%d %H:%M:%S") print "przerobiono lini: ", str(linianr) print "Koniec programu: ", strftime("%Y-%m-%d %H:%M:%S")
def createSwdeTables(self): rdbase = RobDBBase(str(self.host), str(self.db), str(self.admin), str(self.adminpswd), 1) sqlstr = "CREATE TABLE g5adr(tab_uid character varying(50) NOT NULL, g5tar character(1), g5naz character varying(150), g5krj character varying(100),g5wjd character varying(100),g5pwj character varying(100),g5gmn character varying(100),g5ulc character varying(255),g5nra character varying(50),g5nrl character varying(50), g5msc character varying(100), g5kod character varying(50),g5pcz character varying(100),g5dtw character varying(25),g5dtu character varying(25),id_zd character varying(50) NOT NULL,g5id2 character varying(50),g5id1 character varying(50),CONSTRAINT g5adr_pkey PRIMARY KEY (tab_uid ))WITH (OIDS=FALSE)" rdbase.executeSQL(sqlstr) sqlstr = "ALTER TABLE g5adr OWNER TO " + self.owner rdbase.executeSQL(sqlstr) sqlstr = "ALTER TABLE g5adr COMMENT ON TABLE g5adr IS 'Adres obiektu'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.tab_uid IS 'Adres obiektu'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5tar IS 'typ adresu 1 - adres, 2 - nazwa własna'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5krj IS 'kraj'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5wjd IS 'województwo'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5pwj IS 'powiat, miasto'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5gmn IS 'gmina'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5ulc IS 'ulica'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5nra IS 'numer porzadkowy domu - niestety muszę zarezerwować 50 znakow poniewaz zdazylo sie ze to pole było wykorzystywanie jako komentaż'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5nrl IS 'nr lokalu - uwagi jak do g5nra'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5msc IS 'Miejscowośc '" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5kod IS 'kod pocztowy - początkowo miałem 7 znaków, ale trafiłem na jakieś długasy - zagraniczne kody" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5pcz IS 'poczta'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5dtw IS 'Data weryfikacji danych'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5dtu IS 'Data utworzenia obiektu';" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.id_zd IS 'Identyfikator zbioru danych - zazwyczaj najlepiej sprawdza się teryt jednostki rejestrowej. Niezbędny przy aktualizacji danych. Pole wymagane maksymalnie 40 znaków.'" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5id2 IS 'Identyfikator tekstowy rekordu w plikach swde - występuje zaraz po definicji rekordu - czyli w liniach RD i RO, tuż po id1 i jest ciągiem różnistych znaków. '" rdbase.executeSQL(sqlstr) sqlstr = "COMMENT ON COLUMN g5adr.g5id1 IS 'Identyfikator tekstowy rekordu w plikach swde - występuje zaraz po definicji rekordu - czyli w liniach RD i RO, i jest ciągiem różnistych znaków. '" rdbase.executeSQL(sqlstr)
class SWDEWypis: """QGIS Plugin Implementation.""" def __init__(self, iface): """Constructor. :param iface: An interface instance that will be passed to this class which provides the hook by which you can manipulate the QGIS application at run time. :type iface: QgsInterface """ # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = os.path.dirname(__file__) # initialize locale locale = QSettings().value("locale/userLocale")[0:2] locale_path = os.path.join(self.plugin_dir, "i18n", "SWDEWypis_{}.qm".format(locale)) if os.path.exists(locale_path): self.translator = QTranslator() self.translator.load(locale_path) if qVersion() > "4.3.3": QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = SWDEWypisDialog() # Declare instance attributes self.actions = [] self.menu = self.tr(u"&SWDE Wypis") # TODO: We are going to let the user set this up in a future iteration self.toolbar = self.iface.addToolBar(u"SWDEWypis") self.toolbar.setObjectName(u"SWDEWypis") # dane dotyczace serwera odczytane z QSettings self.pguser = "" self.pgbase = "" self.pguserpswd = "" self.pgserver = "" self.pgadmin = "" self.pgadminpswd = "" # zmienne do operacji wyboru kolejnej dzialki z zazanczonych self.actualSelect = 0 # noinspection PyMethodMayBeStatic def tr(self, message): """Get the translation for a string using Qt translation API. We implement this ourselves since we do not inherit QObject. :param message: String for translation. :type message: str, QString :returns: Translated version of message. :rtype: QString """ # noinspection PyTypeChecker,PyArgumentList,PyCallByClass return QCoreApplication.translate("SWDEWypis", message) def add_action( self, icon_path, text, callback, enabled_flag=True, add_to_menu=True, add_to_toolbar=True, status_tip=None, whats_this=None, parent=None, ): """Add a toolbar icon to the toolbar. :param icon_path: Path to the icon for this action. Can be a resource path (e.g. ':/plugins/foo/bar.png') or a normal file system path. :type icon_path: str :param text: Text that should be shown in menu items for this action. :type text: str :param callback: Function to be called when the action is triggered. :type callback: function :param enabled_flag: A flag indicating if the action should be enabled by default. Defaults to True. :type enabled_flag: bool :param add_to_menu: Flag indicating whether the action should also be added to the menu. Defaults to True. :type add_to_menu: bool :param add_to_toolbar: Flag indicating whether the action should also be added to the toolbar. Defaults to True. :type add_to_toolbar: bool :param status_tip: Optional text to show in a popup when mouse pointer hovers over the action. :type status_tip: str :param parent: Parent widget for the new action. Defaults None. :type parent: QWidget :param whats_this: Optional text to show in the status bar when the mouse pointer hovers over the action. :returns: The action that was created. Note that the action is also added to self.actions list. :rtype: QAction """ icon = QIcon(icon_path) action = QAction(icon, text, parent) action.triggered.connect(callback) action.setEnabled(enabled_flag) if status_tip is not None: action.setStatusTip(status_tip) if whats_this is not None: action.setWhatsThis(whats_this) if add_to_toolbar: self.toolbar.addAction(action) if add_to_menu: self.iface.addPluginToDatabaseMenu(self.menu, action) self.actions.append(action) return action def initGui(self): """Create the menu entries and toolbar icons inside the QGIS GUI.""" icon_path = ":/plugins/SWDEWypis/icon.png" self.add_action(icon_path, text=self.tr(u"SWDE Wypis"), callback=self.run, parent=self.iface.mainWindow()) # ------obsluga przyciskow ------------------ QObject.connect(self.dlg.pbtnRefresh, SIGNAL("clicked()"), self.pbtnRefreshClicked) QObject.connect(self.dlg.pbtnPrint, SIGNAL("clicked()"), self.pbtnPrintClicked) QObject.connect(self.dlg.pbtnPrev, SIGNAL("clicked()"), self.pbtnPrevClicked) QObject.connect(self.dlg.pbtnNext, SIGNAL("clicked()"), self.pbtnNextClicked) def unload(self): """Removes the plugin menu item and icon from QGIS GUI.""" for action in self.actions: self.iface.removePluginDatabaseMenu(self.tr(u"&SWDE Wypis"), action) self.iface.removeToolBarIcon(action) # remove the toolbar del self.toolbar def run(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] self.dlg.txtFeedback.clear() uid_dze = "" for f in layer.selectedFeatures(): uid_dze = f["tab_uid"] break if uid_dze == "": komunikat = u"<BR><BR><HR><H3>Nie wybrano żadnej warstwy, nie zaznaczono żadnego obiektu lub warstwa nie jest prawidłową warstwą działek ewidencyjnych</HR><H3>" self.dlg.txtFeedback.setText(komunikat) else: # dane dotyczace serwera odczytane z QSettings sett = QSettings("erdeproj", "SWDE_qgis_plugin") self.pguser = sett.value("pguser", "", type=str) self.pgbase = sett.value("pgbase", "", type=str) self.pguserpswd = sett.value("pguserpswd", "", type=str) self.pgserver = sett.value("pgserver", "", type=str) self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) self.dlg.show() # =============================================================================== # layer = self.iface.activeLayer() # provider = layer.dataProvider() # lname = layer.name() # provname = provider.name() # if layer and lname == 'g5dze' and provname == 'postgres' : # nF = layer.selectedFeatureCount() # fields = layer.pendingFields() # features = QgsFeature(fields) # #features = layer.selectedFeatures() # for f in features: # map = f.attributeMap() # if nF == 1: # provider = layer.dataProvider() # uid_dze = map[provider.fieldNameIndex('tab_uid')].toString() # #uid_dze = '040601_256126' # #dane dotyczace serwera odczytane z QSettings # sett = QSettings('erdeproj', 'SWDE_qgis_plugin') # self.pguser = sett.value('pguser', '', type=str) # self.pgbase = sett.value('pgbase', '', type=str) # self.pguserpswd = sett.value('pguserpswd', '', type=str) # self.pgserver = sett.value('pgserver', '', type=str) # # self.dlg.setTextBrowser( self.dzeInfo(uid_dze)) # # show the dialog # self.dlg.show() # else: # QMessageBox.critical(self.iface.mainWindow(),"Error", u"Musisz wybrać dokładnie jedną działkę, użyj narzędzia: <<Wybierz jeden obiekt>>") # else: # QMessageBox.critical(self.iface.mainWindow(),"Error",u"Nie wybrano żadnej warstwy lub warstwa nie jest prawidłową warstwą g5dze") # =============================================================================== # ===================================================================================== # ===================obsluga zdarzen=================================================== def pbtnPrintClicked(self): dialog = QPrintDialog() if dialog.exec_() == QDialog.Accepted: self.dlg.txtFeedback.document().print_(dialog.printer()) # ------------------------------------------------------------------------------------ def pbtnRefreshClicked(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] uid_dze = "" for f in layer.selectedFeatures(): uid_dze = f["tab_uid"] break if uid_dze == "": komunikat = u"<BR><BR><HR><H3>Nie wybrano żadnej warstwy, nie zaznaczono żadnego obiektu lub warstwa nie jest prawidłową warstwą działek ewidencyjnych</HR><H3>" self.dlg.txtFeedback.setText(komunikat) else: self.actualSelect = 0 self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) # ----------------------------------------------------------------------------------- def pbtnPrevClicked(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] uid_dze = "" if self.actualSelect > 0: self.actualSelect -= 1 selFeatNr = 0 for f in layer.selectedFeatures(): if selFeatNr == self.actualSelect: uid_dze = f["tab_uid"] break selFeatNr += 1 self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) # ------------------------------------------------------------------------------------- def pbtnNextClicked(self): layer = self.iface.activeLayer() fields = layer.pendingFields() field_names = [field.name() for field in fields] uid_dze = "" selCount = layer.selectedFeatureCount() if self.actualSelect < (selCount - 1): self.actualSelect += 1 selFeatNr = 0 for f in layer.selectedFeatures(): if selFeatNr == self.actualSelect: uid_dze = f["tab_uid"] break selFeatNr += 1 self.dlg.txtFeedback.setText(self.dzeInfo(uid_dze)) # ------------------------------------------------------------------------------------ def dzeInfo(self, uid_dze): self.rdbase = RobDBBase(str(self.pgserver), str(self.pgbase), str(self.pguser), str(self.pguserpswd), 1) txt = "" # uni = lambda s: s if type(s) == unicode else unicode(s,'utf-8','replace') # powyzsza ntype = lambda s: "" if type(s) == NoneType else s uni = lambda s: s if type(s) == unicode else unicode(ntype(s), "utf-8", "replace") cols = [ "g5idd", "nr", "id_zd", "g5idr", "g5nos", "g5wrt", "g5dwr", "g5pew", "g5rzn", "g5dww", "g5radr", "g5rpwl", "g5rpwd", "g5rjdr", "g5dtw", "g5dtu", "g5rkrg", "g5id2", "g5id1", "nrobr", "tab_uid", ] g5dzeT = RobDBTable(self.rdbase, "g5dze", cols, 1, 1) g5dzeT.where(["tab_uid"], [str(uid_dze)]) txt = "<HR><H3>PODSTAWOWE INFORMACJE</H3><HR>" txt += "<b>IDD: </b>" + g5dzeT.get_col_value("g5idd") + "<br>" txt += u"<b>nr działki: </b>" + g5dzeT.get_col_value("nr") + "<br>" txt += "<b>Pow. ew: </b>" + str(g5dzeT.get_col_value("g5pew")) + " m2 <br>" nr_obr = g5dzeT.get_col_value("nrobr") nr_jew = g5dzeT.get_col_value("id_zd") id_jdr = g5dzeT.get_col_value("g5rjdr") if id_jdr == None: id_jdr = "0" dze_id1 = g5dzeT.get_col_value("g5id1") id_zd = g5dzeT.get_col_value("id_zd") dze_uid = g5dzeT.get_col_value("tab_uid") dze_radr = g5dzeT.get_col_value("g5radr") dze_rpwl = g5dzeT.get_col_value("g5rpwl") dze_rpwd = g5dzeT.get_col_value("g5rpwd") cols = ["g5nro", "g5naz"] g5obrT = RobDBTable(self.rdbase, "g5obr", cols, 1, 1) g5obrT.where(["g5nro"], [nr_jew + "." + nr_obr]) txt += u"<b>Obręb:</b> " + uni(g5obrT.get_col_value("g5naz")) + "(" + g5obrT.get_col_value("g5nro") + ")<br>" cols = ["g5idj", "g5naz", "plik_data"] g5jewT = RobDBTable(self.rdbase, "g5jew", cols, 1, 1) g5jewT.where(["g5idj"], [nr_jew]) txt += ( "<b>Jednostka ewidencyjna: </b>" + uni(g5jewT.get_col_value("g5naz")) + " (" + g5jewT.get_col_value("g5idj") + ")<br>" ) plik_data = uni(g5jewT.get_col_value("plik_data")) cols = ["g5id1", "g5tjr", "g5ijr", "g5rgn"] g5jdrT = RobDBTable(self.rdbase, "g5jdr", cols, 1, 1) g5jdrT.where(["id_zd", "g5id1"], [nr_jew, id_jdr]) txt += "<b>Jednostka rejestrowa:</b>" + g5jdrT.get_col_value("g5ijr") + "<br><br>" cols = ["g5ofu", "g5ozu", "g5ozk", "g5pew"] g5kluT = RobDBTable(self.rdbase, "g5klu", cols, 1, 1) g5kluT.where(["id_zd", "g5rdze"], [nr_jew, dze_id1]) txt += u"<HR></HR><H3>UŻYTKI GRUNTOWE</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>OFU - sposób zagospodarowania</td><td>OZU - oznaczenie użytku </td><td>OZK - klasa bonitacyjna</td><td>Powierzchnia.</td></tr>' for row in g5kluT.rows: txt += ( '<tr bgcolor="#E6E6FA"><td>' + uni(row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni(row[2]) + "</td><td>" + str(row[3]) + "</td></tr>" ) txt += "</table>" cols = ["g5ud", "g5rwls", "g5rpod", "rpod_rodzaj"] g5udzT = RobDBTable(self.rdbase, "g5udz", cols, 1, 1) g5udzT.where(["id_zd", "g5rwls"], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WłAŚCICIEL</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td></tr>' for row in g5udzT.rows: pod_id = row[2] pod_rodz = row[3] udz = row[0] cols = ["g5nzw", "g5pim", "g5dim", "g5radr"] g5osfT = RobDBTable(self.rdbase, "g5osf", cols, 1, 1) if pod_rodz == "G5INS": cols = ["g5sti", "g5npe", "g5nsk", "g5rgn", "g5nip", "g5radr"] g5insT = RobDBTable(self.rdbase, "g5ins", cols, 1, 1) g5insT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value("g5npe")) radr = g5insT.get_col_value("g5radr") if ( not radr ): # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = g5adrT.get_col_value("g5pcz") pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td></tr>" ) elif pod_rodz == "G5OSF": g5osfT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) radr = g5osfT.get_col_value("g5radr") if not radr: radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) + "</td><td>" + adr + "</td></tr>" ) elif pod_rodz == "G5MLZ": cols = ["g5rmaz", "g5rzona"] g5mlzT = RobDBTable(self.rdbase, "g5mlz", cols, 1, 1) g5mlzT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rmaz")]) mradr = g5osfT.get_col_value("g5radr") if not mradr: mradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) madr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz maz = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rzona")]) zona = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) zradr = g5osfT.get_col_value("g5radr") if not zradr: zradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) zadr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td></tr>" ) txt += "</table>" cols = ["g5ud", "g5rwld", "g5rpod", "rpod_rodzaj", "g5rwd"] g5udwT = RobDBTable(self.rdbase, "g5udw", cols, 1, 1) g5udwT.where(["id_zd", "g5rwld"], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WŁADAJĄCY</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td><td>Rodzaj władania</td></tr>' rodz_wdtxt = "" for row in g5udwT.rows: # txt += row[0] + ' ' + row[1] + ' ' + row[2] + ' ' + row[3] + ' ' + row[4] pod_id = row[2] pod_rodz = row[3] udz = row[0] rodz_wd = row[4] if rodz_wd == "1": rodz_wdtxt = u"użytkowanie wieczyste" if rodz_wd == "2": rodz_wdtxt = u"trwały zarząd lub zarząd" if rodz_wd == "3": rodz_wdtxt = u"wykonywanie prawa własności Skarbu Państwa i innych praw rzeczowych" if rodz_wd == "4": rodz_wdtxt = u"gospodarowanie zasobem nieruchomości Skarbu Państwa oraz gminnymi, powiatowymi i wojewódzkimi zasobami nieruchomości" if rodz_wd == "5": rodz_wdtxt = u"użytkowanie" if rodz_wd == "6": rodz_wdtxt = u"ułamkowa część własności nieobciążona prawami wymienionymi w pkt 1,2,5" cols = ["g5nzw", "g5pim", "g5dim"] g5osfT = RobDBTable(self.rdbase, "g5osf", cols, 1, 1) if pod_rodz == "G5INS": cols = ["g5sti", "g5npe", "g5nsk", "g5rgn", "g5nip", "g5radr"] g5insT = RobDBTable(self.rdbase, "g5ins", cols, 1, 1) g5insT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value("g5npe")) radr = g5insT.get_col_value("g5radr") if ( not radr ): # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" ) elif pod_rodz == "G5OSF": g5osfT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) radr = g5osfT.get_col_value("g5radr") if not radr: radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" ) elif pod_rodz == "G5MLZ": cols = ["g5rmaz", "g5rzona"] g5mlzT = RobDBTable(self.rdbase, "g5mlz", cols, 1, 1) g5mlzT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rmaz")]) mradr = g5osfT.get_col_value("g5radr") if not mradr: mradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) madr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz maz = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rzona")]) zona = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) zradr = g5osfT.get_col_value("g5radr") if not zradr: zradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) zadr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + maz + "," + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td><td>" + rodz_wdtxt + "</td></tr>" ) txt += "</table>" # dokumenty rpwl SQLstr = "SELECT g5kdk, g5dtd, g5dtp, g5syg, g5nsr, g5opd FROM g5dok where tab_uid = any(array[" res = None if dze_rpwl: for dok_id in dze_rpwl: SQLstr += "'" + nr_jew + dok_id + "'," SQLstr = SQLstr.rstrip(",") SQLstr += "]);" res = self.rdbase.executeSQL(SQLstr) if res: txt += u"<HR></HR><H3>DOKUMENTY POWIĄZANE</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>KDK</td><td>DTD</td><td>DTP</td><td>SYG</td><td>NSR</td><td>OPD</td></tr>' for row in res: txt += ( '<tr bgcolor="#E6E6FA"><td>' + uni(row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni(row[2]) + "</td><td>" + uni(row[3]) + "</td><td>" + uni(row[4]) + "</td></tr>" ) txt += "</table>" txt += ( "<HR></HR><BR><RIGHT>" + time.strftime("%Y-%m-%d %H:%M:%S") + " (plik SWDE z dnia: " + plik_data + ")</RIGHT>" ) return txt
def dzeInfo(self, uid_dze): self.rdbase = RobDBBase(str(self.pgserver), str(self.pgbase), str(self.pguser), str(self.pguserpswd), 1) txt = "" # uni = lambda s: s if type(s) == unicode else unicode(s,'utf-8','replace') # powyzsza ntype = lambda s: "" if type(s) == NoneType else s uni = lambda s: s if type(s) == unicode else unicode(ntype(s), "utf-8", "replace") cols = [ "g5idd", "nr", "id_zd", "g5idr", "g5nos", "g5wrt", "g5dwr", "g5pew", "g5rzn", "g5dww", "g5radr", "g5rpwl", "g5rpwd", "g5rjdr", "g5dtw", "g5dtu", "g5rkrg", "g5id2", "g5id1", "nrobr", "tab_uid", ] g5dzeT = RobDBTable(self.rdbase, "g5dze", cols, 1, 1) g5dzeT.where(["tab_uid"], [str(uid_dze)]) txt = "<HR><H3>PODSTAWOWE INFORMACJE</H3><HR>" txt += "<b>IDD: </b>" + g5dzeT.get_col_value("g5idd") + "<br>" txt += u"<b>nr działki: </b>" + g5dzeT.get_col_value("nr") + "<br>" txt += "<b>Pow. ew: </b>" + str(g5dzeT.get_col_value("g5pew")) + " m2 <br>" nr_obr = g5dzeT.get_col_value("nrobr") nr_jew = g5dzeT.get_col_value("id_zd") id_jdr = g5dzeT.get_col_value("g5rjdr") if id_jdr == None: id_jdr = "0" dze_id1 = g5dzeT.get_col_value("g5id1") id_zd = g5dzeT.get_col_value("id_zd") dze_uid = g5dzeT.get_col_value("tab_uid") dze_radr = g5dzeT.get_col_value("g5radr") dze_rpwl = g5dzeT.get_col_value("g5rpwl") dze_rpwd = g5dzeT.get_col_value("g5rpwd") cols = ["g5nro", "g5naz"] g5obrT = RobDBTable(self.rdbase, "g5obr", cols, 1, 1) g5obrT.where(["g5nro"], [nr_jew + "." + nr_obr]) txt += u"<b>Obręb:</b> " + uni(g5obrT.get_col_value("g5naz")) + "(" + g5obrT.get_col_value("g5nro") + ")<br>" cols = ["g5idj", "g5naz", "plik_data"] g5jewT = RobDBTable(self.rdbase, "g5jew", cols, 1, 1) g5jewT.where(["g5idj"], [nr_jew]) txt += ( "<b>Jednostka ewidencyjna: </b>" + uni(g5jewT.get_col_value("g5naz")) + " (" + g5jewT.get_col_value("g5idj") + ")<br>" ) plik_data = uni(g5jewT.get_col_value("plik_data")) cols = ["g5id1", "g5tjr", "g5ijr", "g5rgn"] g5jdrT = RobDBTable(self.rdbase, "g5jdr", cols, 1, 1) g5jdrT.where(["id_zd", "g5id1"], [nr_jew, id_jdr]) txt += "<b>Jednostka rejestrowa:</b>" + g5jdrT.get_col_value("g5ijr") + "<br><br>" cols = ["g5ofu", "g5ozu", "g5ozk", "g5pew"] g5kluT = RobDBTable(self.rdbase, "g5klu", cols, 1, 1) g5kluT.where(["id_zd", "g5rdze"], [nr_jew, dze_id1]) txt += u"<HR></HR><H3>UŻYTKI GRUNTOWE</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>OFU - sposób zagospodarowania</td><td>OZU - oznaczenie użytku </td><td>OZK - klasa bonitacyjna</td><td>Powierzchnia.</td></tr>' for row in g5kluT.rows: txt += ( '<tr bgcolor="#E6E6FA"><td>' + uni(row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni(row[2]) + "</td><td>" + str(row[3]) + "</td></tr>" ) txt += "</table>" cols = ["g5ud", "g5rwls", "g5rpod", "rpod_rodzaj"] g5udzT = RobDBTable(self.rdbase, "g5udz", cols, 1, 1) g5udzT.where(["id_zd", "g5rwls"], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WłAŚCICIEL</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td></tr>' for row in g5udzT.rows: pod_id = row[2] pod_rodz = row[3] udz = row[0] cols = ["g5nzw", "g5pim", "g5dim", "g5radr"] g5osfT = RobDBTable(self.rdbase, "g5osf", cols, 1, 1) if pod_rodz == "G5INS": cols = ["g5sti", "g5npe", "g5nsk", "g5rgn", "g5nip", "g5radr"] g5insT = RobDBTable(self.rdbase, "g5ins", cols, 1, 1) g5insT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value("g5npe")) radr = g5insT.get_col_value("g5radr") if ( not radr ): # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = g5adrT.get_col_value("g5pcz") pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td></tr>" ) elif pod_rodz == "G5OSF": g5osfT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) radr = g5osfT.get_col_value("g5radr") if not radr: radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) + "</td><td>" + adr + "</td></tr>" ) elif pod_rodz == "G5MLZ": cols = ["g5rmaz", "g5rzona"] g5mlzT = RobDBTable(self.rdbase, "g5mlz", cols, 1, 1) g5mlzT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rmaz")]) mradr = g5osfT.get_col_value("g5radr") if not mradr: mradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) madr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz maz = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rzona")]) zona = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) zradr = g5osfT.get_col_value("g5radr") if not zradr: zradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) zadr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td></tr>" ) txt += "</table>" cols = ["g5ud", "g5rwld", "g5rpod", "rpod_rodzaj", "g5rwd"] g5udwT = RobDBTable(self.rdbase, "g5udw", cols, 1, 1) g5udwT.where(["id_zd", "g5rwld"], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WŁADAJĄCY</H3><HR></HR>" txt += u'<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td><td>Adres</td><td>Rodzaj władania</td></tr>' rodz_wdtxt = "" for row in g5udwT.rows: # txt += row[0] + ' ' + row[1] + ' ' + row[2] + ' ' + row[3] + ' ' + row[4] pod_id = row[2] pod_rodz = row[3] udz = row[0] rodz_wd = row[4] if rodz_wd == "1": rodz_wdtxt = u"użytkowanie wieczyste" if rodz_wd == "2": rodz_wdtxt = u"trwały zarząd lub zarząd" if rodz_wd == "3": rodz_wdtxt = u"wykonywanie prawa własności Skarbu Państwa i innych praw rzeczowych" if rodz_wd == "4": rodz_wdtxt = u"gospodarowanie zasobem nieruchomości Skarbu Państwa oraz gminnymi, powiatowymi i wojewódzkimi zasobami nieruchomości" if rodz_wd == "5": rodz_wdtxt = u"użytkowanie" if rodz_wd == "6": rodz_wdtxt = u"ułamkowa część własności nieobciążona prawami wymienionymi w pkt 1,2,5" cols = ["g5nzw", "g5pim", "g5dim"] g5osfT = RobDBTable(self.rdbase, "g5osf", cols, 1, 1) if pod_rodz == "G5INS": cols = ["g5sti", "g5npe", "g5nsk", "g5rgn", "g5nip", "g5radr"] g5insT = RobDBTable(self.rdbase, "g5ins", cols, 1, 1) g5insT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) npe = uni(g5insT.get_col_value("g5npe")) radr = g5insT.get_col_value("g5radr") if ( not radr ): # jesli radr jest typu None konieczne jest wstawienie jakiejkolwiek wartosci. W innym przypadku nie da się stworzyć pytania sql z uwagi na błąd łączenia string i None radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" ) elif pod_rodz == "G5OSF": g5osfT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) radr = g5osfT.get_col_value("g5radr") if not radr: radr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, radr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) adr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) + "</td><td>" + adr + "</td><td>" + rodz_wdtxt + "</td></tr>" ) elif pod_rodz == "G5MLZ": cols = ["g5rmaz", "g5rzona"] g5mlzT = RobDBTable(self.rdbase, "g5mlz", cols, 1, 1) g5mlzT.where(["id_zd", "g5id1"], [nr_jew, pod_id]) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rmaz")]) mradr = g5osfT.get_col_value("g5radr") if not mradr: mradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, mradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) madr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz maz = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) g5osfT.where(["id_zd", "g5id1"], [nr_jew, g5mlzT.get_col_value("g5rzona")]) zona = ( uni(g5osfT.get_col_value("g5nzw")) + " " + uni(g5osfT.get_col_value("g5pim")) + " " + uni(g5osfT.get_col_value("g5dim")) ) zradr = g5osfT.get_col_value("g5radr") if not zradr: zradr = "0" cols = ["g5ulc", "g5nra", "g5nrl", "g5msc", "g5kod", "g5pcz"] g5adrT = RobDBTable(self.rdbase, "g5adr", cols, 1, 1) g5adrT.where(["id_zd", "g5id1"], [nr_jew, zradr]) ulc = uni(g5adrT.get_col_value("g5ulc")) nra = uni(g5adrT.get_col_value("g5nra")) nrl = uni(g5adrT.get_col_value("g5nrl")) if len(nrl) > 0: nrl = "/" + nrl msc = uni(g5adrT.get_col_value("g5msc")) kod = uni(g5adrT.get_col_value("g5kod")) pcz = uni(g5adrT.get_col_value("g5pcz")) zadr = ulc + " " + nra + nrl + " " + msc + ", " + kod + " " + pcz txt += ( '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + ", " + zona + "</td><td>" + maz + "," + zona + "</td><td>" + u"[mąż: " + madr + u"];[żona: " + zadr + "]</td><td>" + rodz_wdtxt + "</td></tr>" ) txt += "</table>" # dokumenty rpwl SQLstr = "SELECT g5kdk, g5dtd, g5dtp, g5syg, g5nsr, g5opd FROM g5dok where tab_uid = any(array[" res = None if dze_rpwl: for dok_id in dze_rpwl: SQLstr += "'" + nr_jew + dok_id + "'," SQLstr = SQLstr.rstrip(",") SQLstr += "]);" res = self.rdbase.executeSQL(SQLstr) if res: txt += u"<HR></HR><H3>DOKUMENTY POWIĄZANE</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>KDK</td><td>DTD</td><td>DTP</td><td>SYG</td><td>NSR</td><td>OPD</td></tr>' for row in res: txt += ( '<tr bgcolor="#E6E6FA"><td>' + uni(row[0]) + "</td><td>" + uni(row[1]) + "</td><td>" + uni(row[2]) + "</td><td>" + uni(row[3]) + "</td><td>" + uni(row[4]) + "</td></tr>" ) txt += "</table>" txt += ( "<HR></HR><BR><RIGHT>" + time.strftime("%Y-%m-%d %H:%M:%S") + " (plik SWDE z dnia: " + plik_data + ")</RIGHT>" ) return txt
class swdeDzeInfo: def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface # initialize plugin directory self.plugin_dir = QFileInfo(QgsApplication.qgisUserDbFilePath()).path() + "python/plugins/swdeDzeInfo" # initialize locale localePath = "" locale = QSettings().value("locale/userLocale").toString()[0:2] if QFileInfo(self.plugin_dir).exists(): localePath = self.plugin_dir + "/i18n/swdeDzeInfo_" + locale + ".qm" if QFileInfo(localePath).exists(): self.translator = QTranslator() self.translator.load(localePath) if qVersion() > '4.3.3': QCoreApplication.installTranslator(self.translator) # Create the dialog (after translation) and keep reference self.dlg = swdeDzeInfoDialog() self.rdbase = RobDBBase('localhost', 'swdegis', 'biuro', 'melioracja', 1) def initGui(self): # Create action that will start plugin configuration self.action = QAction( QIcon(":/plugins/swdedzeinfo/swde-plug-info-32b.png"), u"Informacje o działce ewidencyjnej", self.iface.mainWindow()) # connect the action to the run method QObject.connect(self.action, SIGNAL("triggered()"), self.run) # Add toolbar button and menu item if hasattr(self.iface, "addPluginToDatabaseMenu"): self.iface.addDatabaseToolBarIcon(self.action) self.iface.addPluginToDatabaseMenu("&SWDE", self.action) else: self.iface.addToolBarIcon(self.action) self.iface.addPluginToMenu("&SWDE", self.action) QObject.connect(self.dlg.ui.pbtnSave,SIGNAL("clicked()"),self.pbtnSaveClicked) QObject.connect(self.dlg.ui.pbtnPrint,SIGNAL("clicked()"),self.pbtnPrintClicked) def unload(self): # Remove the plugin menu item and icon if hasattr(self.iface, "addPluginToDatabaseMenu"): self.iface.removePluginDatabaseMenu("&SWDE",self.action) self.iface.removeDatabaseToolBarIcon(self.action) else: self.iface.removePluginMenu("&SWDE",self.action) self.iface.removeToolBarIcon(self.action) # run method that performs all the real work def run(self): layer = self.iface.activeLayer() provider = layer.dataProvider() lname = layer.name() provname = provider.name() if layer and lname == 'g5dze' and provname == 'postgres' : nF = layer.selectedFeatureCount() features = layer.selectedFeatures() for f in features: map = f.attributeMap() if nF == 1: provider = layer.dataProvider() uid_dze = map[provider.fieldNameIndex('tab_uid')].toString() #uid_dze = '040601_256126' self.dlg.setTextBrowser( self.dzeInfo(uid_dze)) # show the dialog self.dlg.show() else: QMessageBox.critical(self.iface.mainWindow(),"Error", u"Musisz wybrać dokładnie jedną działkę, użyj narzędzia: <<Wybierz jeden obiekt>>") else: QMessageBox.critical(self.iface.mainWindow(),"Error",u"Nie wybrano żadnej warstwy lub warstwa nie jest prawidłową warstwą g5dze") def pbtnPrintClicked(self): dialog = QPrintDialog() if dialog.exec_() == QDialog.Accepted: self.dlg.ui.txtFeedback.document().print_(dialog.printer()) def pbtnSaveClicked(self): filename = QFileDialog.getSaveFileName(self.dlg, 'Save File', '.') fname = open(filename + '.html', 'w') fname.write(self.dlg.ui.txtFeedback.toHtml()) fname.close() def dzeInfo(self, uid_dze): txt = "" cols = ['g5idd', 'nr', 'id_zd', 'g5idr', 'g5nos', 'g5wrt', 'g5dwr', 'g5pew', 'g5rzn', 'g5dww', 'g5radr', 'g5rpwl', 'g5rpwd', 'g5rjdr', 'g5dtw', 'g5dtu', 'g5rkrg', 'g5id2', 'g5id1', 'nrobr', 'tab_uid'] g5dzeT = RobDBTable(self.rdbase, 'g5dze', cols, 1, 1) g5dzeT.where(['tab_uid'], [str(uid_dze)] ) self.dlg.clearTextBrowser() self.dlg.setTextBrowser(g5dzeT.get_col_value('g5idd')) self.dlg.setTextBrowser(uid_dze) txt = "<HR><H3>PODSTAWOWE INFORMACJE</H3><HR>" txt += "<b>IDD: </b>" + g5dzeT.get_col_value('g5idd') + "<br>" txt += u"<b>nr działki: </b>" + g5dzeT.get_col_value('nr') + "<br>" txt += "<b>Pow. ew: </b>" + str(g5dzeT.get_col_value('g5pew')) + " m2 <br>" nr_obr = g5dzeT.get_col_value('nrobr') nr_jew = g5dzeT.get_col_value('id_zd') id_jdr = g5dzeT.get_col_value('g5rjdr') dze_id1 = g5dzeT.get_col_value('g5id1') id_zd = g5dzeT.get_col_value('id_zd') dze_uid = g5dzeT.get_col_value('tab_uid') dze_radr = g5dzeT.get_col_value('g5radr') dze_rpwl = g5dzeT.get_col_value('g5rpwl') dze_rpwd = g5dzeT.get_col_value('g5rpwd') cols = ['g5nro', 'g5naz'] g5obrT = RobDBTable(self.rdbase, 'g5obr', cols, 1, 1) g5obrT.where(['g5nro'], [nr_jew + "." + nr_obr]) txt += u"<b>Obręb:</b> " + g5obrT.get_col_value('g5naz') + "(" + g5obrT.get_col_value('g5nro')+ ")<br>" cols = ['g5idj', 'g5naz'] g5jewT = RobDBTable(self.rdbase, 'g5jew', cols, 1,1) g5jewT.where(['g5idj'], [nr_jew]) txt += "<b>Jednostka ewidencyjna: </b>" + g5jewT.get_col_value('g5naz') + " (" + g5jewT.get_col_value('g5idj') + ")<br>" cols = ['g5id1', 'g5tjr', 'g5ijr', 'g5rgn'] g5jdrT = RobDBTable(self.rdbase, 'g5jdr', cols, 1, 1) g5jdrT.where(['id_zd', 'g5id1'], [nr_jew, id_jdr]) txt += "<b>Jednostka rejestrowa:</b>" + g5jdrT.get_col_value('g5ijr') + "<br><br>" cols = ['g5ofu', 'g5ozu', 'g5ozk', 'g5pew'] g5kluT = RobDBTable(self.rdbase, 'g5klu', cols, 1,1) g5kluT.where(['id_zd', 'g5rdze'], [nr_jew, dze_id1]) txt += u"<HR></HR><H3>UŻYTKI GRUNTOWE</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>OFU</td><td>OZU</td><td>OZK</td><td>Powierzchnia.</td></tr>' for row in g5kluT.rows: txt += '<tr bgcolor="#E6E6FA"><td>' + row[0] + "</td><td>" + row[1] + "</td><td>" + row[2] + "</td><td>" + str(row[3]) + "</td></tr>" txt += "</table>" cols = ['g5ud', 'g5rwls', 'g5rpod', 'rpod_rodzaj'] g5udzT = RobDBTable(self.rdbase, 'g5udz', cols, 1, 1) g5udzT.where(['id_zd', 'g5rwls'], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WłAŚCICIEL</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td></tr>' for row in g5udzT.rows: pod_id = row[2] pod_rodz = row[3] udz = row[0] cols = ['g5nzw', 'g5pim', 'g5dim'] g5osfT = RobDBTable(self.rdbase, 'g5osf', cols, 1, 1) if pod_rodz == "G5INS": cols = ['g5sti', 'g5npe', 'g5nsk', 'g5rgn', 'g5nip'] g5insT = RobDBTable(self.rdbase, 'g5ins', cols, 1, 1) g5insT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) npe = g5insT.get_col_value('g5npe') txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td></tr>" elif pod_rodz == "G5OSF": g5osfT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + g5osfT.get_col_value('g5nzw') + " " + g5osfT.get_col_value('g5pim') + " " + g5osfT.get_col_value('g5dim') + "</td></tr>" elif pod_rodz == "G5MLZ": cols = ['g5rmaz', 'g5rzona'] g5mlzT = RobDBTable(self.rdbase, 'g5mlz', cols, 1, 1) g5mlzT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rmaz')]) maz = g5osfT.get_col_value('g5nzw') + " " + g5osfT.get_col_value('g5pim') + " " + g5osfT.get_col_value('g5dim') g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rzona')]) zona = g5osfT.get_col_value('g5nzw') + " " + g5osfT.get_col_value('g5pim') + " " + g5osfT.get_col_value('g5dim') txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + "," + zona + "</td></tr>" txt += "</table>" cols = ['g5rwd', 'g5ud', 'g5rwld', 'g5rpod', 'rpod_rodzaj'] g5udwT = RobDBTable(self.rdbase, 'g5udw', cols, 1, 1) g5udwT.where(['id_zd', 'g5rwld'], [nr_jew, id_jdr]) txt += u"<HR></HR><H3>WŁADAJĄCY</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>Udzial</td><td>Rodz podmiotu</td><td>Podmiot</td></tr>' for row in g5udzT.rows: pod_id = row[2] pod_rodz = row[3] udz = row[0] cols = ['g5nzw', 'g5pim', 'g5dim'] g5osfT = RobDBTable(self.rdbase, 'g5osf', cols, 1, 1) if pod_rodz == "G5INS": cols = ['g5sti', 'g5npe', 'g5nsk', 'g5rgn', 'g5nip'] g5insT = RobDBTable(self.rdbase, 'g5ins', cols, 1, 1) g5insT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) npe = g5insT.get_col_value('g5npe') txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>INS</td><td>" + npe + "</td></tr>" elif pod_rodz == "G5OSF": g5osfT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>OSF</td><td>" + g5osfT.get_col_value('g5nzw') + " " + g5osfT.get_col_value('g5pim') + " " + g5osfT.get_col_value('g5dim') + "</td></tr>" elif pod_rodz == "G5MLZ": cols = ['g5rmaz', 'g5rzona'] g5mlzT = RobDBTable(self.rdbase, 'g5mlz', cols, 1, 1) g5mlzT.where(['id_zd', 'g5id1'], [nr_jew, pod_id]) g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rmaz')]) maz = g5osfT.get_col_value('g5nzw') + " " + g5osfT.get_col_value('g5pim') + " " + g5osfT.get_col_value('g5dim') g5osfT.where(['id_zd', 'g5id1'], [nr_jew, g5mlzT.get_col_value('g5rzona')]) zona = g5osfT.get_col_value('g5nzw') + " " + g5osfT.get_col_value('g5pim') + " " + g5osfT.get_col_value('g5dim') txt += '<tr bgcolor="#E6E6FA"><td>' + udz + "</td><td>MLZ</td><td>" + maz + "," + zona + "</td></tr>" txt += "</table>" #dokumenty rpwl SQLstr = "SELECT g5kdk, g5dtd, g5dtp, g5syg, g5nsr, g5opd FROM g5dok where tab_uid = any(array[" for dok_id in dze_rpwl: SQLstr += "'" + nr_jew + dok_id + "'," SQLstr = SQLstr.rstrip(',') SQLstr += "]);" res = self.rdbase.executeSQL(SQLstr) if res: txt += u"<HR></HR><H3>DOKUMENTY POWIĄZANE</H3><HR></HR>" txt += '<table><tr bgcolor="#BFBFBF" style="font-style: oblique;"><td>KDK</td><td>DTD</td><td>DTP</td><td>SYG</td><td>NSR</td><td>OPD</td></tr>' for row in res: #if row[0] == None: # kdk = '' #else: # kdk = row[0] #if row[1] == None: # dtd = '' #else: # dtd = row[1] #if row[2] == None: # dtp = '' #else: # dtp = row[2] #if row[3] == None: # syg = '' #else: # syg = row[3] #if row[4] == None: # nsr = '' #else: # nsr = row[4] txt += '<tr bgcolor="#E6E6FA"><td>' + row[0] + "</td><td>" + row[1] +"</td><td>" + row[2] + "</td><td>" + row[3] + "</td><td>" + row[4] + "</td></tr>" txt += "</table>" return txt
def importuj(self): #ponizsze troche z lenistwa - pozostalosc po starym kodzie, nie chce mi sie szukac zmiennych i dopisywac #self przed kazda swde_file = self.swde_file tableListString = self.tableListString srid = self.srid pyproj4strFrom = self.pyproj4strFrom pyproj4strTo = self.pyproj4strTo rodz_importu = self.rodz_importu pgserver = self.pgserver pgbase = self.pgbase pguser = self.pguser pguserpswd = self.pguserpswd txtcodec = self.txtcodec id_zd = self.id_zd crs_source = QgsCoordinateReferenceSystem() crs_source.createFromProj4(str(pyproj4strFrom)) crs_dest = QgsCoordinateReferenceSystem() crs_dest.createFromProj4(str(pyproj4strTo)) xform = QgsCoordinateTransform(crs_source, crs_dest) tableList = [] #tabela nazw tabel w bazie tableList = tableListString.split(',') import_testowy = False if rodz_importu == 'testowyJEW' or rodz_importu == 'testowyOBR' or rodz_importu == 'testowyDZE': import_testowy = True for tabName in tableList: if tabName <> 'NONE': print tabName print srid print pyproj4strFrom print pyproj4strTo print "identyfikator jednostki rejestrowej:", self.id_jed_rej print "ilość linii", self.ilosc_linii print "rodzaj importu", rodz_importu print pgserver, pgbase, pguser, pguserpswd uni = lambda s: s if type(s) == unicode else unicode(s,'utf-8','replace') try: f = open(swde_file, "r") if f == 0 or f.closed: print u"Przed rozpoczęciem importu musisz wczytać plik" else: if id_zd == 'NONE': #parametr wybierany przez uzytkownika, jesli jest inny niz NONE self.id_jed_rej = str(self.id_jed_rej).rstrip() #zostanie uzyty jako wymuszenie nazwy zbioru danych else: #w innym przypadku uzyta zostanie nazwa jednostki rej wyłuskana przez program self.id_jed_rej = id_zd #lista column tablicowych - do innej obróbki niż pozostałe arrayCols = ['G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RSKD', 'G5RDOK', 'G5RDZE', 'G5ROBJ'] #słownik kolumn do zmiany nazwy - zmieniamy polskie znaki w nazwie kolumn bo trochę to broi przy pytaniach SQL plcharCols = {u'G5RŻONA':'G5RZONA', u'G5RMĄŻ':'G5RMAZ', u'G5RPWŁ':'G5RPWL', u'G5RWŁ':'G5RWL', u'G5RWŁS':'G5RWLS', u'G5RWŁD':'G5RWLD'} g5Cols = {} #słownik zbudowany: {'nazwa_tabeli':Tablica_Column[]} - posluzy do inicjacji tabel - obiektow robdbtable #inicjalizacja bazy danych rdbase = RobDBBase(pgserver, pgbase, pguser, pguserpswd,1) rdg5Table = {} #słownik zawiera następującą strukturę: {'nazwa_tabeli': Obiekt_rdbtable} #okreslenie rodzaju importu if rodz_importu == 'zwykly' or rodz_importu == 'aktualizacja': Cols = ['G5IDJ', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU','G5RKRG']#g5jew g5Cols['G5JEW'] = Cols Cols = [ 'G5IDD', 'GEOM', 'NR', 'G5IDR', 'G5NOS', 'G5WRT', 'G5DWR', 'G5PEW', 'G5RZN', 'G5DWW', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5DTW', 'G5DTU'] #g5dze g5Cols['G5DZE'] = Cols Cols = [ 'G5NRO', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG', 'G5RJEW', 'IDJEW'] #g5obr g5Cols['G5OBR'] = Cols Cols = ['G5PLC', 'G5PSL', 'G5NIP', 'G5NZW', 'G5PIM', 'G5DIM', 'G5OIM', 'G5MIM', 'G5OBL', 'G5DOS', 'G5RADR', 'G5STI', 'G5DTW', 'G5DTU'] #g5osf g5Cols['G5OSF'] = Cols Cols = [ 'G5STI', 'G5NPE', 'G5NSK', 'G5RGN', 'G5NIP', 'G5NZR', 'G5NRR', 'G5NSR', 'G5RADR', 'G5DTW', 'G5DTU'] #g5ins g5Cols['G5INS'] = Cols Cols = ['G5RZONA', 'G5RMAZ', 'G5DTW', 'G5DTU'] #g5mlz g5Cols['G5MLZ'] = Cols Cols = [ 'G5STI', 'G5NPE', 'G5NSK', 'G5RGN', 'G5NIP', 'G5RSKD', 'G5RADR', 'G5DTW', 'G5DTU'] #g5osz g5Cols['G5OSZ'] = Cols Cols = ['G5TJR', 'G5IJR', 'G5RGN', 'G5RWL', 'G5RWLS', 'G5RWLD', 'G5ROBR', 'G5DTW', 'G5DTU' ] #g5jdr g5Cols['G5JDR'] = Cols Cols = [ 'G5UD', 'G5RWLS', 'G5RPOD', 'G5DTW', 'G5DTU'] #g5udz g5Cols['G5UDZ'] = Cols Cols = [ 'G5RWD', 'G5UD', 'G5RWLD', 'G5RPOD', 'G5DTW', 'G5DTU'] #g5udw g5Cols['G5UDW'] = Cols Cols = [ 'G5OFU', 'G5OZU', 'G5OZK', 'G5PEW', 'G5RDZE', 'G5DTW', 'G5DTU'] #g5klu g5Cols['G5KLU'] = Cols Cols = [ 'G5IDT', 'G5OZU','G5OFU', 'G5PEW', 'G5RKRG', 'G5ROBR', 'G5DTW', 'G5DTU'] #g5uzg g5Cols['G5UZG'] = Cols Cols = ['G5KDK', 'G5DTD', 'G5DTP', 'G5SYG', 'G5NSR', 'G5OPD', 'G5RDOK', 'G5DTW', 'G5DTU'] #g5dok g5Cols['G5DOK'] = Cols Cols = ['G5TAR', 'G5NAZ', 'G5KRJ', 'G5WJD', 'G5PWJ', 'G5GMN', 'G5ULC', 'G5NRA', 'G5NRL', 'G5MSC', 'G5KOD', 'G5PCZ', 'G5DTW', 'G5DTU']#g5adr g5Cols['G5ADR'] = Cols Cols = ['G5IDB', 'G5FUZ', 'G5WRT', 'G5DWR', 'G5RBB', 'G5PEW', 'G5PEU', 'G5RZN', 'G5SCN', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR','G5RDZE', 'G5DTU', 'G5DTW']#g5bud g5Cols['G5BUD'] = Cols Cols = ['G5IDK', 'G5OZU', 'G5OZK', 'G5PEW', 'G5RKRG', 'G5ROBR', 'G5DTW', 'G5DTU'] g5Cols['G5KKL'] = Cols Cols = ['G5IDL', 'G5TLOK', 'G5PEW', 'G5PPP', 'G5LIZ', 'G5WRT', 'G5DWR', 'G5RJDR', 'G5RADR', 'G5RDOK', 'G5RBUD', 'G5DTW', 'G5DTU'] g5Cols['G5LKL'] = Cols Cols = ['G5NRZ', 'G5STZ', 'G5DZZ', 'G5DTA', 'G5DTZ', 'G5NAZ', 'G5ROBJ', 'G5RDOK', 'G5DTW', 'G5DTU'] g5Cols['G5ZMN'] = Cols elif rodz_importu == 'testowyJEW' or rodz_importu == 'testowyOBR' or rodz_importu == 'testowyDZE': #teoretycznie powinno wystarczyć zwykle elif bez parametrow, ale na wszelki dorzuce te ory #w przypadku importu testowego importować będziemy tylko jedną z trzech tabel (dze, obr, lub jew) # przy okazji opróżnimy zawartość dotychczasowych tabel testowych delSQLstr = "delete from " if rodz_importu == 'testowyJEW': tableList.append('G5JEW') g5Cols['G5JEW'] = ['G5IDJ', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU','G5RKRG']#g5jew delSQLstr += "g5jew_test;" elif rodz_importu == 'testowyOBR': tableList.append('G5OBR') g5Cols['G5OBR'] = [ 'G5NRO', 'G5PEW', 'G5NAZ', 'G5DTW', 'G5DTU', 'G5RKRG', 'G5RJEW', 'IDJEW'] delSQLstr += "g5obr_test;" elif rodz_importu == 'testowyDZE': tableList.append('G5DZE') g5Cols['G5DZE'] = [ 'G5IDD', 'GEOM', 'NR', 'G5IDR', 'G5NOS', 'G5WRT', 'G5DWR', 'G5PEW', 'G5RZN', 'G5DWW', 'G5RADR', 'G5RPWL', 'G5RPWD', 'G5RKRG', 'G5RJDR', 'G5DTW', 'G5DTU'] delSQLstr += "g5dze_test;" rdbase.executeSQL(delSQLstr) #nazwy kolumn muszą zostać podane dokładnie jak w bazie - czyli małymi literami #na przyszłość można to rozwiązać w samej RobDBTable #za zamianę liter na małe w tablicy odpowiada ta fikuśna konstrukcja: [x.lower() ....] for tableName in tableList: if import_testowy: appendix = '_TEST' else: appendix = '' rdg5Table[tableName] = RobDBTable(rdbase, tableName + appendix, [x.lower() for x in g5Cols[tableName]], 1, 1) G5Table = "" collist = [] valuelist = [] insertdic = {} # forma [nazwa_tabeli:ilosc_insertow] arraylist = [] #wykorzystywana do przechowywania kolumn typu tablicaowego w formie [[col2, wart..], [col1, wart..], [col2, wart..]] arrayvalue = [] # wykorzystywane do przechowywania danych 1+ takich jak g5rkrg arrayname = '' # nazwa tablicy tożsama z nazwą kolumny w bazie pointslist = [] point = [] Kznak = "" #znacznik + albo -, oznaczajacy czy okreslane sa punkty tworzace polygon czy #wycinajace w nim dziure oldKznak = "0" #posluzy do sprawdzenia czy nastapila zmiana Kznak newPoly = 0 polycount = 0 linianr = 0 #przyda sie w momencie gdy sie program wywali - okresli ktora linia pliku swde nabroiła obieg = 0 #bedzie wykorzystywane przy commit do bazy, ktore bedzie realizowane co np 100 pytań SQL transform = False if import_testowy == False: #tylko jesli nie jest to import testowy if pyproj4strFrom != pyproj4strTo: transform = True print "transform:", transform print "Krok 2. Start programu: ", strftime("%Y-%m-%d %H:%M:%S") if rodz_importu == 'aktualizacja': #usuniecie wszystkich rekordow o id_zd print u"Usuwanie rekordów ze zbioru danych o id = ", self.id_jed_rej #naprawde dziwna sprawa, ale bez tego dwukrotnie powtorzonego slepp-applicationevent print u"Rozpoczęcie usuwania aktualizowanych rekordów: ", strftime("%Y-%m-%d %H:%M:%S") rdbase.executeSQL("SELECT g5sp_delfromtables('" + self.id_jed_rej + "');") print u"Zakończono usuwanie aktualizowanych rekordów: ", strftime("%Y-%m-%d %H:%M:%S") #import_file = str(self.swde_file.toUtf8()).decode('utf-8') try: #self.f = open(self.swde_file "r") f.seek(0.0) tekstline = "" try: print u"Krok 3. Rozpoczynam import pliku: ", f.name, " ",strftime("%Y-%m-%d %H:%M:%S") i = 0; procent_wykonania = 0; #do monitorowania postepu linianr = 0 step = self.ilosc_linii/100 print u'ilość linii:',self.ilosc_linii, "step", step for line in f.readlines(): tekstline = line #zmienna tekstline bedzie wykorzystywana poza petla w celu lokalizacji bledu - w exception if i == step: i = 0 procent_wykonania += 1 sys.stdout.write("\r wykonano: %d%s" % (procent_wykonania, "%")) sys.stdout.flush() sleep(0.01) #print u"postęp:", procent_wykonania, u"%" line = unicode(line, txtcodec) #print "unikod zadzialal" i= i + 1 linianr+=1 #przyda sie jak sie program wypierniczy pocz = StringBetweenChar(line, ',',0) if pocz == "RO" or pocz == "RD" or pocz == "RC": #line = unicode(line, txtcodec) G5Table = StringBetweenChar(line, ',',2) g5id1_value = StringBetweenChar(line,',',3) g5id2_value = StringBetweenChar(line,',',4) if line[0:3] == "P,P": #self.dlg.peditOutput.appendPlainText(u"znaleziono ciąg line 0:3 = P,P") str1 = StringBetweenChar(line, ',', 2) #self.dlg.peditOutput.appendPlainText(u"str1 = " + str1 + u" o długości " + str(len(str1)) ) if str1 == u"G5PZG": #self.dlg.peditOutput.appendPlainText(u"wlazło") nr = StringBetweenChar(line, ',', 3) #self.dlg.peditOutput.appendPlainText(u"nr = " + nr) #strnr = nr.rstrip(';\r')# trzeba usuwac pojedynczo czyli tak jak poniżej strnr = nr.rstrip()# czyli jakiekolwiek białe znaki niezaleznie czy \n \r itp strnr = strnr.rstrip(';') #self.dlg.peditOutput.appendPlainText(u"strnr = " + strnr) #oldline = line #self.dlg.peditOutput.appendPlainText(u"oldline = " + oldline) line = "P,G," + self.pzgdic[strnr] + ",;\n" #self.dlg.peditOutput.appendPlainText(u"line = " + line) #self.dlg.peditOutput.appendPlainText(u"Zastąpiono ciąg P,P >>" + oldline + "<< na >>" + line + "<< " + strftime("%Y-%m-%d %H:%M:%S")) if G5Table in tableList: colname = "" colvalue = "" znacznik = StringBetweenChar(line, ',',0) if znacznik == "D" or znacznik == "WG": line = line.rstrip() line = line.rstrip(';') # szczególnie linie ze znacznikami WG zakończone są średnikiem line = line.strip("'") line = line.strip('"') line = line.replace("'", '') line = line.replace('"', "") colname = StringBetweenChar(line,',',1) #zamiana nazw kolumn z polskimi znakami if colname in plcharCols: colname = plcharCols[colname] colvalue = StringBetweenChar(line,',',3) #dzialania wspolne dla wszystkich tablic if colname in g5Cols[G5Table]: #G5RDZE w G5KLU nie jest typu tablicowego, natomiast w g5BUD #jest. Na szczescie w g5klu nie ma żadnego pola tablicowego #to samo dotyczy g5radr - w g5osf i g5ins - nie jest array w przeciwienstwie do g5bud if colname in arrayCols and G5Table != 'G5KLU' and G5Table != 'G5INS' and G5Table != 'G5OSF': arraylist.append([colname,colvalue]) else: collist.append(colname) valuelist.append(colvalue) #dzialania nietypowe #TODO przewidziec dla g5obr wyluskanie numeru obrebu do osobnego pola if colname == 'G5IDD' and G5Table == "G5DZE": #trzeba wyluskac numer dzialki i zapisac do oddzielnej kolumny #nr_dzialki = StringBetweenChar(colvalue, '.', 2) collist.append(u'nr') valuelist.append(StringBetweenChar(colvalue, '.', 2)) #nr obrębu też się przyda collist.append(u'nrobr') valuelist.append(StringBetweenChar(colvalue, '.', 1)) if colname == 'G5RPOD': #dla tabel g5udz i g5udw - wyglada to nastepujaco: "WG,G5RPOD,G5OSF,5465;" #a więc najpierw mamy określenie do jakiej tabeli jest dowiązanie (osf, ins, mlz czy osz) #a potem wartość wiązania w danej tabeli. Należy więc jeszcze wyciągnąć wartość po drugim ',' collist.append(u'rpod_rodzaj') pod_rodzaj = StringBetweenChar(line, ',', 2) valuelist.append(pod_rodzaj) #kolumna zawierajaca polaczone ze soba wartosci collist.append(u'id_podmiot') valuelist.append(colvalue + pod_rodzaj) elif znacznik == "K": Kznak = StringBetweenChar(line, ',',1)#czyli albo '+;' albo '-;' Kznak = Kznak[0]#pozostawienie tylko + albo - newPoly = 1 polycount+=1 elif znacznik == "P": yvalue = StringBetweenChar(line, ',',2) xvalue = StringBetweenChar(line, ',',3) #print "xv:", xvalue, "yv:", yvalue if transform: #======================================= # p1 = pyproj.Proj(str(pyproj4strFrom)) # p2 = pyproj.Proj(str(pyproj4strTo)) # x92, y92 = pyproj.transform(p1,p2,xvalue,yvalue) # value = str(x92) + " " + str(y92) #======================================= pt1 = xform.transform(QgsPoint(float(xvalue), float(yvalue))) value = str(pt1[0]) + " " + str(pt1[1]) else: value = xvalue + " " + yvalue point.append( polycount) point.append(newPoly) point.append(Kznak) point.append(value) pointslist.append(point) #print point point = [] newPoly = 0 elif znacznik[0] == "X": #czyli koniec definicji recordu #print "2 line", line #print "2 znacznik = ", znacznik, collist, valuelist p = "" p1 = "" if len(pointslist)>0: for points in pointslist: if points[1] == 1:#newPoly #p1 = points[3] if points[0] == 1:#czyli pierwszy i byc moze jedyny polygon if srid == -1: #niezdefiniowany układ p = "POLYGON((" else: p = "@ST_GeomFromText(\'POLYGON((" else: #czyli ewentualne kolejne polygony p = p + p1 + "),(" p1 = points[3] p = p + points[3] + ',' if srid == -1: p = p + p1 + "))" else: p = p + p1 + "))\'," + srid + ")" collist.append("geom") valuelist.append(p) #dodanie kolumn tablicowych if len(arraylist) > 0: old_col = '' arraystr = "ARRAY[" arraylist.sort() for col, val in arraylist: if old_col == '': #startujemy old_col = col if col == old_col: arraystr += "\'"+ val + "\'," else: #nastąpiła zmiana columny arraystr = arraystr.rstrip(",") arraystr += "]" collist.append(old_col) valuelist.append(arraystr) old_col = col arraystr = "ARRAY[\'" + val + "\'," collist.append(old_col) arraystr = arraystr.rstrip(",") arraystr += ']' valuelist.append(arraystr) arraylist = [] #dodatnie self.id_jed_rej do kazdej tabeli collist.append("id_zd") valuelist.append(self.id_jed_rej) #dodanie id1 i id2 do kazdej z tabel collist.append("g5id1") valuelist.append(g5id1_value) collist.append("g5id2") valuelist.append(g5id2_value) #dodanie unikatowej kolumny - będzie stanowiła klucz główny w całej bazie collist.append('tab_uid') valuelist.append(self.id_jed_rej+g5id1_value) #sprawdzenie czy jest jeszcze jakas tablica, ktora nie zostala dodana do valuelist if len(arrayvalue)>0: collist.append(arrayname) values = "" for value in arrayvalue: values += "\'" + value.strip('[]') + "\'," values = values.rstrip(",")#usuniecie ostatniego przecinka valuelist.append(u"ARRAY[" + values + "]") arrayname = '' arrayvalue = [] rdg5Table[G5Table].insert(0, collist, valuelist) if G5Table in insertdic: insertdic[G5Table] += 1 else: insertdic[G5Table] = 1 #obieg+=1 #if obieg == 1000: # rdbase.commit() # obieg = 0 obieg+=1 collist = [] valuelist = [] pointslist = [] Kznak = "" polycount = 0 G5Table = "" if rodz_importu == 'testowyJEW': #w tym przypadku nie ma co dalej ciągnąć pętli break #i = i+1 except Exception, ex: cols = "[" values = "[" for col in collist: cols += col + ", " for value in valuelist: values += value + ", " cols += "]" values += "]" print u"błąd: ", uni(G5Table), uni(cols), uni(values), "rekord nr: ", uni(str(obieg)), "line = ", uni(tekstline), "error: ",uni(str(ex)) #przerwanie = 1 finally: rdbase.commit() print "wykonano commita" insstr = "" for tab, ilosc in insertdic.items(): insstr += tab + ':' + str(ilosc) + '; ' print "tab:", tab print "zapisano do bazy: ",str(obieg), u" rekordów: ", insstr f.close() except IOError: print "IOError: ", strftime("%Y-%m-%d %H:%M:%S") print "przerobiono lini: ", str(linianr) print "Koniec programu: ", strftime("%Y-%m-%d %H:%M:%S")