def _loadLayer(self): fullLayerPath = os.path.join(self._projectPath, self._settings.path) filePath = QFileInfo(fullLayerPath) layer = None if filePath.exists(): layer = layers.loadShapefileLayer(fullLayerPath, self._settings.name) else: wkbType = layers.geometryToWkbType(self._settings.geometry, self._settings.multi) if not filePath.dir().exists(): os.makedirs(filePath.dir().absolutePath()) layer = layers.createShapefile(fullLayerPath, self._settings.name, wkbType, self._settings.crs, self.fields) if layer and layer.isValid(): layer = layers.addLayerToLegend(self._iface, layer) self._setDefaultSnapping(layer) layer.loadNamedStyle(self._settings.stylePath) self.name = self._settings.name self.layer = layer self.layerId = layer.id() else: self.layer = None self.layerId = ''
def _loadLogLayer(self): fullLayerPath = os.path.join(self._projectPath, self._settings.logPath) filePath = QFileInfo(fullLayerPath) layer = None if filePath.exists(): layer = layers.loadShapefileLayer(fullLayerPath, self._settings.logName) else: if not filePath.dir().exists(): os.makedirs(filePath.dir().absolutePath()) fields = QgsFields() fields.append(QgsField('timestamp', QVariant.String, '', 10, 0, 'timestamp')) fields.append(QgsField('event', QVariant.String, '', 6, 0, 'event')) fields.extend(self.fields) layer = layers.createShapefile(fullLayerPath, self._settings.logName, self.layer.wkbType(), self._settings.crs, fields) if layer and layer.isValid(): layer.editFormConfig().setSuppress(QgsEditFormConfig.SuppressOn) self.logLayer = layer self.logLayerId = layer.id() else: self.logLayer = None self.logLayerId = ''
def redo(self): if self._ds is None: self._ds = self.receiver.sourceList.currentListElement() if self._ds is None: QMessageBox.warning(self.receiver, "DataSource not selected", "Please select one of the datasources") else: if self._ds.instance is None: dsEdit = DataSource.DataSource(self.receiver.sourceList) dsEdit.id = self._ds.id dsEdit.directory = self.receiver.sourceList.directory dsEdit.name = self.receiver.sourceList.elements[ self._ds.id].name self._ds.instance = dsEdit if self._ds.instance is not None: self._pathFile = self._ds.instance.getNewName() fi = QFileInfo(self._pathFile) self.name = unicode(fi.fileName()) if self.name[-4:] == '.xml': self.name = self.name[:-4] if self.name[-3:] == '.ds': self.name = self.name[:-3] self.directory = unicode(fi.dir().path()) logger.debug("EXEC dsourceSaveAs")
def getSize(layer): """Get layer size on disk""" is_zip_file = False file_path = layer.dataProvider().dataSourceUri() if file_path.find('|') != -1: file_path = file_path[0:file_path.find('|')] if file_path.startswith('/vsizip/'): file_path = file_path.replace('/vsizip/', '') is_zip_file = True _file = QFile(file_path) file_info = QFileInfo(_file) dirname = file_info.dir().absolutePath() filename = file_info.completeBaseName() size = 0 if layer.storageType() == 'ESRI Shapefile' and not is_zip_file: for suffix in ['.shp', '.dbf', '.prj', '.shx']: _file = QFile(os.path.join(dirname, filename + suffix)) file_info = QFileInfo(_file) size = size + file_info.size() elif layer.storageType() in ['GPX', 'GeoJSON', 'LIBKML'] or is_zip_file: size = size + file_info.size() return size
def on_mEndMarkerToolButton_clicked(self): if self.timeStart != 0: self.timeEnd = time.time() print self.timeEnd if self.timeEnd - self.timeStart <= 2: self.timeStart = 0 return s = QSettings() openDir = QString() if (not self.mEndMarkerLineEdit.text().isEmpty()): fi = QFileInfo(self.mEndMarkerLineEdit.text()) openDir = fi.dir().absolutePath() if (openDir.isEmpty()): openDir = s.value("/UI/lastComposerMarkerDir", QDir.homePath()).toString() svgFileName = QFileDialog.getOpenFileName( self, QString("End marker svg file"), openDir) if (not svgFileName.isNull()): fileInfo = QFileInfo(svgFileName) s.setValue("/UI/lastComposerMarkerDir", fileInfo.absolutePath()) self.mArrow.beginCommand(QString("Arrow end marker")) self.mEndMarkerLineEdit.setText(svgFileName) self.mArrow.endCommand() self.timeStart = time.time()
def restoreDir(self): "用户点击了“默认运行目录”按钮。" path = self.txtPath.text().strip() fi = QFileInfo(path) if path == "" or not fi.exists(): return self.txtDir.setText(fi.dir().absolutePath())
def getSize(layer): """Get layer size on disk""" is_zip_file = False file_path = layer.dataProvider().dataSourceUri() if file_path.find('|') != -1: file_path = file_path[0:file_path.find('|')] if file_path.startswith('/vsizip/'): file_path = file_path.replace('/vsizip/', '') is_zip_file = True _file = QFile(file_path) file_info = QFileInfo(_file) dirname = file_info.dir().absolutePath() filename = file_info.completeBaseName() size = 0 if layer.storageType() == 'ESRI Shapefile' and not is_zip_file: for suffix in ['.shp', '.dbf', '.prj', '.shx']: _file = QFile(os.path.join(dirname, filename + suffix)) file_info = QFileInfo(_file) size = size + file_info.size() elif layer.storageType() in ['GPX', 'GeoJSON', 'LIBKML'] or is_zip_file: size = size + file_info.size() return size
def updateGifPath(self): fileName = self.txtGifPath.text() f = QFileInfo(fileName) if f.dir().exists and not f.baseName().isEmpty() and not f.suffix().isEmpty(): self.txtGifPath.setText(fileName) return True else: QMessageBox.warning(self, u"{0} -- warning".format(Img2GifWidget.AppName), u"要生成的GIF存储路径{0}不是有效的GIF文件".format(unicode(fileName))) return False
def _loadBufferLayer(self): fullLayerPath = os.path.join(self._projectPath, self._settings.bufferPath) filePath = QFileInfo(fullLayerPath) layer = None if filePath.exists(): layer = layers.loadShapefileLayer(fullLayerPath, self._settings.bufferName) else: if not filePath.dir().exists(): os.makedirs(filePath.dir().absolutePath()) layer = layers.cloneAsShapefile(self.layer, fullLayerPath, self._settings.bufferName) if layer and layer.isValid(): layer = layers.addLayerToLegend(self._iface, layer) self._setDefaultSnapping(layer) layers.loadStyle(layer, fromLayer=self.layer) layer.startEditing() layer.editFormConfig().setSuppress(QgsEditFormConfig.SuppressOn) self.bufferLayer = layer self.bufferLayerId = layer.id() else: self.bufferLayer = None self.bufferLayerId = ''
def browsePath(self): """用户点击了浏览路径的按钮。如果成功设置了路径,就返回True,如果用户取消了操作或者出错,就返回False 返回的用途参见showEvent()""" filename = QFileDialog.getOpenFileName(self, self.windowTitle()) if filename == "": return False fi = QFileInfo(filename) if fi.isSymLink(): filename = fi.symLinkTarget() if not os.path.exists(filename): QMessageBox.information(self, self.windowTitle(), self.trUtf8("快捷方式所指向的程序不正确。")) return False fi = QFileInfo(filename) self.txtName.setText(fi.baseName()) self.txtPath.setText(fi.absoluteFilePath()) self.setFileIcon(fi.absoluteFilePath()) self.txtDir.setText(fi.dir().absolutePath()) return True
def zipLayer(layer): """Compress layer to zip file""" file_path = layer.dataProvider().dataSourceUri() if file_path.find('|') != -1: file_path = file_path[0:file_path.find('|')] if file_path.startswith('/vsizip/'): file_path = file_path.replace('/vsizip/', '') if layer.storageType() in [ 'ESRI Shapefile', 'GPX', 'GeoJSON', 'LIBKML' ]: return file_path _file = QFile(file_path) file_info = QFileInfo(_file) dirname = file_info.dir().absolutePath() filename = stripAccents(file_info.completeBaseName()) layername = stripAccents(layer.name()) tempdir = checkTempDir() zip_path = os.path.join(tempdir, layername + '.zip') zip_file = zipfile.ZipFile(zip_path, 'w') if layer.storageType() == 'ESRI Shapefile': for suffix in ['.shp', '.dbf', '.prj', '.shx']: if os.path.exists(os.path.join(dirname, filename + suffix)): zip_file.write(os.path.join(dirname, filename + suffix), layername + suffix, zipfile.ZIP_DEFLATED) elif layer.storageType() == 'GeoJSON': zip_file.write(file_path, layername + '.geojson', zipfile.ZIP_DEFLATED) elif layer.storageType() == 'GPX': zip_file.write(file_path, layername + '.gpx', zipfile.ZIP_DEFLATED) elif layer.storageType() == 'LIBKML': zip_file.write(file_path, layername + '.kml', zipfile.ZIP_DEFLATED) else: geo_json_name = os.path.join(tempfile.tempdir, layername) error = QgsVectorFileWriter.writeAsVectorFormat( layer, geo_json_name, "utf-8", None, "GeoJSON") if error == QgsVectorFileWriter.NoError: zip_file.write(geo_json_name + '.geojson', layername + '.geojson', zipfile.ZIP_DEFLATED) zip_file.close() return zip_path
def getSize(self, layer): filePath = layer.dataProvider().dataSourceUri() if filePath.find('|') != -1: filePath = filePath[0:filePath.find('|')] file = QFile(filePath) fileInfo = QFileInfo(file) dirName = fileInfo.dir().absolutePath() fileName = fileInfo.completeBaseName() size = 0 if layer.storageType() == 'ESRI Shapefile': for suffix in ['.shp', '.dbf', '.prj', '.shx']: file = QFile(os.path.join(dirName, fileName + suffix)) fileInfo = QFileInfo(file) size = size + fileInfo.size() return size
def zipLayer(self, layer): filePath = layer.dataProvider().dataSourceUri() if filePath.find('|') != -1: filePath = filePath[0:filePath.find('|')] file = QFile(filePath) fileInfo = QFileInfo(file) dirName = fileInfo.dir().absolutePath() fileName = fileInfo.completeBaseName() tempdir = tempfile.tempdir if tempdir is None: tempdir = tempfile.mkdtemp() zipPath = os.path.join(tempdir, layer.name() + '.zip') zipFile = zipfile.ZipFile(zipPath, 'w') if layer.storageType() == 'ESRI Shapefile': for suffix in ['.shp', '.dbf', '.prj', '.shx']: if os.path.exists(os.path.join(dirName, fileName + suffix)): zipFile.write(os.path.join(dirName, fileName + suffix), fileName + suffix, zipfile.ZIP_DEFLATED) elif layer.storageType() == 'GeoJSON': zipFile.write(filePath, layer.name() + '.geojson', zipfile.ZIP_DEFLATED) else: geoJsonName = os.path.join(tempfile.tempdir, layer.name()) error = QgsVectorFileWriter.writeAsVectorFormat( layer, geoJsonName, "utf-8", None, "GeoJSON") if error == QgsVectorFileWriter.NoError: zipFile.write(geoJsonName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED) ''' elif layer.storageType() == 'LIBKML': kmlName = os.path.join(tempfile.tempdir, layer.name()) error = QgsVectorFileWriter.writeAsVectorFormat(layer, kmlName, "utf-8", None, "GeoJSON") if error == QgsVectorFileWriter.NoError: zipFile.write(kmlName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED) ''' zipFile.close() return zipPath
def getSize(self, layer): filePath = layer.dataProvider().dataSourceUri() if filePath.find('|') != -1: filePath = filePath[0:filePath.find('|')] file = QFile(filePath) fileInfo = QFileInfo(file) dirName = fileInfo.dir().absolutePath() fileName = fileInfo.completeBaseName() size = 0 if layer.storageType() == 'ESRI Shapefile': for suffix in ['.shp', '.dbf', '.prj', '.shx']: file = QFile(os.path.join(dirName, fileName + suffix)) fileInfo = QFileInfo(file) size = size + fileInfo.size() elif layer.storageType() in ['GPX', 'GeoJSON', 'LIBKML']: size = size + fileInfo.size() return size
def zipLayer(layer): """Compress layer to zip file""" file_path = layer.dataProvider().dataSourceUri() if file_path.find('|') != -1: file_path = file_path[0:file_path.find('|')] if file_path.startswith('/vsizip/'): file_path = file_path.replace('/vsizip/', '') if layer.storageType() in ['ESRI Shapefile', 'GPX', 'GeoJSON', 'LIBKML']: return file_path _file = QFile(file_path) file_info = QFileInfo(_file) dirname = file_info.dir().absolutePath() filename = file_info.completeBaseName() tempdir = checkTempDir() zip_path = os.path.join(tempdir, layer.name() + '.zip') zip_file = zipfile.ZipFile(zip_path, 'w') if layer.storageType() == 'ESRI Shapefile': for suffix in ['.shp', '.dbf', '.prj', '.shx']: if os.path.exists(os.path.join(dirname, filename + suffix)): zip_file.write(os.path.join(dirname, filename + suffix), layer.name() + suffix, zipfile.ZIP_DEFLATED) elif layer.storageType() == 'GeoJSON': zip_file.write(file_path, layer.name() + '.geojson', zipfile.ZIP_DEFLATED) elif layer.storageType() == 'GPX': zip_file.write(file_path, layer.name() + '.gpx', zipfile.ZIP_DEFLATED) elif layer.storageType() == 'LIBKML': zip_file.write(file_path, layer.name() + '.kml', zipfile.ZIP_DEFLATED) else: geo_json_name = os.path.join(tempfile.tempdir, layer.name()) error = QgsVectorFileWriter.writeAsVectorFormat(layer, geo_json_name, "utf-8", None, "GeoJSON") if error == QgsVectorFileWriter.NoError: zip_file.write(geo_json_name + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED) zip_file.close() return zip_path
def set_source_document_location(doc_path): """ Set the latest source directory of uploaded source documents. :param doc_path: Directory path or file path. The system will attempt to extract the directory path from the file name. """ doc_dir_path = "" #Check if it is a file or directory doc_dir = QDir(doc_path) if not doc_dir.exists(): doc_file_info = QFileInfo(doc_path) if doc_file_info.exists(): doc_dir_path = doc_file_info.dir().path() else: doc_dir_path = doc_path if len(doc_dir_path) > 0: reg_config = RegistryConfig() reg_config.write({LOCAL_SOURCE_DOC:doc_dir_path})
def set_source_document_location(doc_path): """ Set the latest source directory of uploaded source documents. :param doc_path: Directory path or file path. The system will attempt to extract the directory path from the file name. """ doc_dir_path = "" #Check if it is a file or directory doc_dir = QDir(doc_path) if not doc_dir.exists(): doc_file_info = QFileInfo(doc_path) if doc_file_info.exists(): doc_dir_path = doc_file_info.dir().path() else: doc_dir_path = doc_path if len(doc_dir_path) > 0: reg_config = RegistryConfig() reg_config.write({LOCAL_SOURCE_DOC:doc_dir_path})
def zipLayer(self, layer): filePath = layer.dataProvider().dataSourceUri() if filePath.find('|') != -1: filePath = filePath[0:filePath.find('|')] file = QFile(filePath) fileInfo = QFileInfo(file) dirName = fileInfo.dir().absolutePath() fileName = fileInfo.completeBaseName() tempdir = tempfile.tempdir if tempdir is None: tempdir = tempfile.mkdtemp() zipPath = os.path.join(tempdir, layer.name() + '.zip') zipFile = zipfile.ZipFile(zipPath, 'w') if layer.storageType() == 'ESRI Shapefile': for suffix in ['.shp', '.dbf', '.prj', '.shx']: if os.path.exists(os.path.join(dirName, fileName + suffix)): zipFile.write(os.path.join(dirName, fileName + suffix), fileName + suffix, zipfile.ZIP_DEFLATED) elif layer.storageType() == 'GeoJSON': zipFile.write(filePath, layer.name() + '.geojson', zipfile.ZIP_DEFLATED) else: geoJsonName = os.path.join(tempfile.tempdir, layer.name()) error = QgsVectorFileWriter.writeAsVectorFormat(layer, geoJsonName, "utf-8", None, "GeoJSON") if error == QgsVectorFileWriter.NoError: zipFile.write(geoJsonName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED) ''' elif layer.storageType() == 'LIBKML': kmlName = os.path.join(tempfile.tempdir, layer.name()) error = QgsVectorFileWriter.writeAsVectorFormat(layer, kmlName, "utf-8", None, "GeoJSON") if error == QgsVectorFileWriter.NoError: zipFile.write(kmlName + '.geojson', layer.name() + '.geojson', zipfile.ZIP_DEFLATED) ''' zipFile.close() return zipPath
def redo(self): if self._cp is None: self._cp = self.receiver.componentList.currentListElement() if self._cp is None: QMessageBox.warning(self.receiver, "Component not selected", "Please select one of the components") else: if self._cp.instance is not None: self._pathFile = self._cp.instance.getNewName() fi = QFileInfo(self._pathFile) self.name = unicode(fi.fileName()) if self.name[-4:] == '.xml': self.name = self.name[:-4] self.directory = unicode(fi.dir().path()) self._cp.instance.name = self.name self._cp.instance.directory = self.directory if hasattr(self._cp, "id"): self.receiver.componentList.populateElements(self._cp.id) else: self.receiver.componentList.populateElements() logger.debug("EXEC componentSaveAs")
def zipLayer(self, layer): filePath = layer.dataProvider().dataSourceUri() if filePath.find('|') != -1: filePath = filePath[0:filePath.find('|')] file = QFile(filePath) fileInfo = QFileInfo(file) dirName = fileInfo.dir().absolutePath() fileName = fileInfo.completeBaseName() zipPath = os.path.join(tempfile.tempdir, layer.name() + '.zip') zipFile = zipfile.ZipFile(zipPath, 'w') if os.path.exists(os.path.join(dirName, fileName + '.shp')): zipFile.write(os.path.join(dirName, fileName + '.shp'), fileName + '.shp', zipfile.ZIP_DEFLATED) if os.path.exists(os.path.join(dirName, fileName + '.dbf')): zipFile.write(os.path.join(dirName, fileName + '.dbf'), fileName + '.dbf', zipfile.ZIP_DEFLATED) if os.path.exists(os.path.join(dirName, fileName + '.prj')): zipFile.write(os.path.join(dirName, fileName + '.prj'), fileName + '.prj', zipfile.ZIP_DEFLATED) if os.path.exists(os.path.join(dirName, fileName + '.shx')): zipFile.write(os.path.join(dirName, fileName + '.shx'), fileName + '.shx', zipfile.ZIP_DEFLATED) zipFile.close() return zipPath
def onGenerate(self): """ Slot raised to initiate the certificate generation process. """ self._notif_bar.clear() success_status = True config = self.current_config() self.last_data_source = config.data_source() if config is None: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "The entity configuration could not be extracted.")) return #Get selected records and validate records = self.tabWidget.currentWidget().entities() if self.chk_template_datasource.isChecked(): records = self._dummy_template_records() if len(records) == 0: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "Please load at least one entity record")) return if not self._docTemplatePath: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "Please select a document template to use")) return documentNamingAttrs = self.lstDocNaming.selectedMappings() if self.chkUseOutputFolder.checkState() == Qt.Checked and len( documentNamingAttrs) == 0: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "Please select at least one field for naming the output document")) return #Set output file properties if self.rbExpImage.isChecked(): outputMode = DocumentGenerator.Image fileExtension = self.cboImageType.currentText() saveAsText = "Image File" else: outputMode = DocumentGenerator.PDF fileExtension = "pdf" saveAsText = "PDF File" #Show save file dialog if not using output folder if self.chkUseOutputFolder.checkState() == Qt.Unchecked: docDir = source_document_location() if self._outputFilePath: fileInfo = QFileInfo(self._outputFilePath) docDir = fileInfo.dir().path() self._outputFilePath = QFileDialog.getSaveFileName( self, QApplication.translate("DocumentGeneratorDialog", "Save Document"), docDir, "{0} (*.{1})".format( QApplication.translate("DocumentGeneratorDialog", saveAsText), fileExtension)) if not self._outputFilePath: self._notif_bar.insertErrorNotification( QApplication.translate( "DocumentGeneratorDialog", "Process aborted. No output file was specified.")) return #Include extension in file name self._outputFilePath = self._outputFilePath #+ "." + fileExtension else: #Multiple files to be generated. pass self._doc_generator.set_link_field(config.link_field()) self._doc_generator.clear_attr_value_formatters() if not self.chk_template_datasource.isChecked(): #Apply cell formatters for naming output files self._doc_generator.set_attr_value_formatters(config.formatters()) entity_field_name = "id" #Iterate through the selected records progressDlg = QProgressDialog(self) progressDlg.setMaximum(len(records)) try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) for i, record in enumerate(records): progressDlg.setValue(i) if progressDlg.wasCanceled(): success_status = False break #User-defined location if self.chkUseOutputFolder.checkState() == Qt.Unchecked: status, msg = self._doc_generator.run( self._docTemplatePath, entity_field_name, record.id, outputMode, filePath=self._outputFilePath) self._doc_generator.clear_temporary_layers() #Output folder location using custom naming else: status, msg = self._doc_generator.run( self._docTemplatePath, entity_field_name, record.id, outputMode, dataFields=documentNamingAttrs, fileExtension=fileExtension, data_source=self.ds_entity.name) self._doc_generator.clear_temporary_layers() if not status: result = QMessageBox.warning( self, QApplication.translate("DocumentGeneratorDialog", "Document Generate Error"), msg, QMessageBox.Ignore | QMessageBox.Abort) if result == QMessageBox.Abort: progressDlg.close() success_status = False #Restore cursor QApplication.restoreOverrideCursor() return #If its the last record and user has selected to ignore if i + 1 == len(records): progressDlg.close() success_status = False #Restore cursor QApplication.restoreOverrideCursor() return else: progressDlg.setValue(len(records)) QApplication.restoreOverrideCursor() QMessageBox.information( self, QApplication.translate("DocumentGeneratorDialog", "Document Generation Complete"), QApplication.translate( "DocumentGeneratorDialog", "Document generation has successfully completed.")) except Exception as ex: LOGGER.debug(str(ex)) err_msg = sys.exc_info()[1] QApplication.restoreOverrideCursor() QMessageBox.critical( self, "STDM", QApplication.translate( "DocumentGeneratorDialog", "Error Generating documents - %s" % (err_msg))) success_status = False #Reset UI self.reset(success_status)
def openDirectory(self): '''Fonction permettant d'ouvrir le répertoire''' desktopService = QDesktopServices() fileInfo = QFileInfo(QFile(self.outFile.fileName())) directory = fileInfo.dir() desktopService.openUrl(QUrl(directory.path()))
def onGenerate(self): """ Slot raised to initiate the certificate generation process. """ self._notif_bar.clear() success_status = True config = self.current_config() self.last_data_source = config.data_source() if config is None: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "The entity configuration could not be extracted.")) return #Get selected records and validate records = self.tabWidget.currentWidget().entities() if self.chk_template_datasource.isChecked(): records = self._dummy_template_records() if len(records) == 0: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "Please load at least one entity record")) return if not self._docTemplatePath: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "Please select a document template to use")) return documentNamingAttrs = self.lstDocNaming.selectedMappings() if self.chkUseOutputFolder.checkState() == Qt.Checked and len(documentNamingAttrs) == 0: self._notif_bar.insertErrorNotification(QApplication.translate("DocumentGeneratorDialog", \ "Please select at least one field for naming the output document")) return #Set output file properties if self.rbExpImage.isChecked(): outputMode = DocumentGenerator.Image fileExtension = self.cboImageType.currentText() saveAsText = "Image File" else: outputMode = DocumentGenerator.PDF fileExtension = "pdf" saveAsText = "PDF File" #Show save file dialog if not using output folder if self.chkUseOutputFolder.checkState() == Qt.Unchecked: docDir = source_document_location() if self._outputFilePath: fileInfo = QFileInfo(self._outputFilePath) docDir = fileInfo.dir().path() self._outputFilePath = QFileDialog.getSaveFileName(self, QApplication.translate("DocumentGeneratorDialog", "Save Document"), docDir, "{0} (*.{1})".format( QApplication.translate("DocumentGeneratorDialog", saveAsText), fileExtension)) if not self._outputFilePath: self._notif_bar.insertErrorNotification( QApplication.translate("DocumentGeneratorDialog", "Process aborted. No output file was specified.")) return #Include extension in file name self._outputFilePath = self._outputFilePath #+ "." + fileExtension else: #Multiple files to be generated. pass self._doc_generator.set_link_field(config.link_field()) self._doc_generator.clear_attr_value_formatters() if not self.chk_template_datasource.isChecked(): #Apply cell formatters for naming output files self._doc_generator.set_attr_value_formatters(config.formatters()) entity_field_name = "id" #Iterate through the selected records progressDlg = QProgressDialog(self) progressDlg.setMaximum(len(records)) try: QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) for i, record in enumerate(records): progressDlg.setValue(i) if progressDlg.wasCanceled(): success_status = False break #User-defined location if self.chkUseOutputFolder.checkState() == Qt.Unchecked: status,msg = self._doc_generator.run(self._docTemplatePath, entity_field_name, record.id, outputMode, filePath = self._outputFilePath) self._doc_generator.clear_temporary_layers() #Output folder location using custom naming else: status, msg = self._doc_generator.run(self._docTemplatePath, entity_field_name, record.id, outputMode, dataFields = documentNamingAttrs, fileExtension = fileExtension, data_source = self.ds_entity.name) self._doc_generator.clear_temporary_layers() if not status: result = QMessageBox.warning(self, QApplication.translate("DocumentGeneratorDialog", "Document Generate Error"), msg, QMessageBox.Ignore | QMessageBox.Abort) if result == QMessageBox.Abort: progressDlg.close() success_status = False #Restore cursor QApplication.restoreOverrideCursor() return #If its the last record and user has selected to ignore if i+1 == len(records): progressDlg.close() success_status = False #Restore cursor QApplication.restoreOverrideCursor() return else: progressDlg.setValue(len(records)) QApplication.restoreOverrideCursor() QMessageBox.information(self, QApplication.translate("DocumentGeneratorDialog", "Document Generation Complete"), QApplication.translate("DocumentGeneratorDialog", "Document generation has successfully completed.") ) except Exception as ex: LOGGER.debug(str(ex)) err_msg = sys.exc_info()[1] QApplication.restoreOverrideCursor() QMessageBox.critical( self, "STDM", QApplication.translate( "DocumentGeneratorDialog", "Error Generating documents - %s"%(err_msg) ) ) success_status = False #Reset UI self.reset(success_status)
def onGenerate(self): """ Slot raised to initiate the certificate generation process. """ self._notifBar.clear() #Validate records records = self.personFKMapper.entities() if records == None: self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Please select at least one person record")) return if self._docTemplatePath == "": self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Please select a document template to use")) return documentNamingAttrs = self.lstDocNaming.selectedMappings() if self.chkUseOutputFolder.checkState() == Qt.Checked and len(documentNamingAttrs) == 0: self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Please select at least one field for naming the output document.")) return #Set output file properties if self.rbExpImage.isChecked(): outputMode = DocumentGenerator.Image fileExtension = self.cboImageType.currentText() saveAsText = "Image File" else: outputMode = DocumentGenerator.PDF fileExtension = "pdf" saveAsText = "PDF File" #Show save file dialog if not using output folder if self.chkUseOutputFolder.checkState() == Qt.Unchecked: docDir = "" if self._outputFilePath != "": fileInfo = QFileInfo(self._outputFilePath) docDir = fileInfo.dir().path() self._outputFilePath = QFileDialog.getSaveFileName(self,QApplication.translate("PersonDocumentGenerator", \ "Save Document"), \ docDir, \ "{0} (*.{1})".format(QApplication.translate("PersonDocumentGenerator", \ saveAsText), \ fileExtension)) if self._outputFilePath == "": self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Process aborted. No output file was specified.")) return #Include extension in file name self._outputFilePath = self._outputFilePath #+ "." + fileExtension else: #Multiple files to be generated. pass docGenerator = DocumentGenerator(self._iface,self) #Apply cell formatters for naming output files docGenerator.setAttrValueFormatters(self.personFKMapper.cellFormatters()) entityFieldName = "id" #Iterate through the selected records progressDlg = QProgressDialog(self) progressDlg.setMaximum(len(records)) try: for i,record in enumerate(records): progressDlg.setValue(i) if progressDlg.wasCanceled(): break #User-defined location if self.chkUseOutputFolder.checkState() == Qt.Unchecked: status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \ filePath = self._outputFilePath) #Output folder location using custom naming else: status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \ dataFields = documentNamingAttrs,fileExtension = fileExtension, \ dbmodel = self._dbModel) if not status: result = QMessageBox.warning(self, QApplication.translate("PersonDocumentGenerator","Document Generate Error"), msg, QMessageBox.Ignore|QMessageBox.Abort) if result == QMessageBox.Abort: progressDlg.close() return else: progressDlg.setValue(len(records)) QMessageBox.information(self, QApplication.translate("PersonDocumentGenerator","Document Generation Complete"), QApplication.translate("PersonDocumentGenerator","Document generation has successfully completed.") ) except Exception as ex: QMessageBox.information(self,"STDM",QApplication.translate("PersonDocumentGenerator","Error Generating documents %s"%(str(ex.message)))) return #Reset UI self.reset()
def onGenerate(self): """ Slot raised to initiate the certificate generation process. """ self._notifBar.clear() #Validate records records = self.personFKMapper.entities() if records == None: self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Please select at least one person record")) return if self._docTemplatePath == "": self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Please select a document template to use")) return documentNamingAttrs = self.lstDocNaming.selectedMappings() if self.chkUseOutputFolder.checkState() == Qt.Checked and len(documentNamingAttrs) == 0: self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Please select at least one field for naming the output document.")) return #Set output file properties if self.rbExpImage.isChecked(): outputMode = DocumentGenerator.Image fileExtension = self.cboImageType.currentText() saveAsText = "Image File" else: outputMode = DocumentGenerator.PDF fileExtension = "pdf" saveAsText = "PDF File" #Show save file dialog if not using output folder if self.chkUseOutputFolder.checkState() == Qt.Unchecked: docDir = "" if self._outputFilePath != "": fileInfo = QFileInfo(self._outputFilePath) docDir = fileInfo.dir().path() self._outputFilePath = QFileDialog.getSaveFileName(self,QApplication.translate("PersonDocumentGenerator", \ "Save Document"), \ docDir, \ "{0} (*.{1})".format(QApplication.translate("PersonDocumentGenerator", \ saveAsText), \ fileExtension)) if self._outputFilePath == "": self._notifBar.insertErrorNotification(QApplication.translate("PersonDocumentGenerator", \ "Process aborted. No output file was specified.")) return #Include extension in file name self._outputFilePath = self._outputFilePath #+ "." + fileExtension else: #Multiple files to be generated. pass docGenerator = DocumentGenerator(self._iface,self) #Apply cell formatters for naming output files docGenerator.setAttrValueFormatters(self.personFKMapper.cellFormatters()) entityFieldName = "id" #Iterate through the selected records progressDlg = QProgressDialog(self) progressDlg.setMaximum(len(records)) for i,record in enumerate(records): progressDlg.setValue(i) if progressDlg.wasCanceled(): break #User-defined location if self.chkUseOutputFolder.checkState() == Qt.Unchecked: status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \ filePath = self._outputFilePath) #Output folder location using custom naming else: status,msg = docGenerator.run(self._docTemplatePath,entityFieldName,record.id,outputMode, \ dataFields = documentNamingAttrs,fileExtension = fileExtension, \ dbmodel = Farmer) if not status: result = QMessageBox.warning(self, QApplication.translate("PersonDocumentGenerator","Document Generate Error"), msg, QMessageBox.Ignore|QMessageBox.Abort) if result == QMessageBox.Abort: progressDlg.close() return else: progressDlg.setValue(len(records)) QMessageBox.information(self, QApplication.translate("PersonDocumentGenerator","Document Generation Complete"), QApplication.translate("PersonDocumentGenerator","Document generation has successfully completed.") ) #Reset UI self.reset()