def sendEMailPDF(self): t = self.ui_.leDocumento.text() util = FLUtil() name = "informe.pdf" if not t or t == "" else t fileName = QtCore.QFileDialog.getSaveFileName( AQ_USRHOME + "/" + name + ".pdf", util.translate("app", "Fichero PDF a enviar (*.pdf)"), self, util.translate("app", "Exportar a PDF para enviar"), util.translate("app", "Exportar a PDF para enviar")) if not fileName or fileName == "": return if not fileName.upper().contains(".PDF"): fileName = fileName + ".pdf" q = QtCore.QMessageBox.question( self, util.translate("app", "Sobreescribir {}").format(fileName), util.translate( self, "app", "Ya existe un fichero llamado {}. ¿Desea sobreescribirlo?"). format(fileName), util.translate("app", "&Sí"), util.translate("app", "&No"), "", 0, 1) if QtCore.QFile.exists(fileName) and q: return autoCloseSave = self.autoClose_ self.slotPrintReportToPdf(fileName) self.autoClose_ = autoCloseSave util.writeSettingEntry("email/to", self.ui_["lePara"].text()) util.writeSettingEntry("email/from", self.ui_["leDe"].text()) util.writeSettingEntry("email/mailserver", self.ui_["leMailServer"].text()) fi = QtCore.QFileInfo(fileName) name = fi.fileName() self.smtpClient_.setMailServer(self.ui_["leMailServer"].text()) self.smtpClient_.setTo(self.ui_["lePara"].text()) self.smtpClient_.setFrom(self.ui_["leDe"].text()) asutxt = self.ui_["leAsunto"].text() self.smtpClient_.setSubject(name if asutxt == "" else asutxt) self.smtpClient_.setBody(self.ui_["leCuerpo"].text() + "\n\n") html = "<html><body><a href=\"http://abanq.org/\">" html += "<img src=\"cid:logo.png@3d8b627b6292\"/>" html += "</a><br/><br/></body></html>" self.smtpClient_.addTextPart(html, "text/html") self.smtpClient_.addAttachment(fileName) self.smtpClient_.startSend()
def run(self): # TODO: Refactorizar esta función en otras más sencillas # Preparar temporal if self.deleteCache and not not os.path.exists( self.dir("cache/%s" % self.dbname)): self.logger.debug("DEVELOP: DeleteCache Activado\nBorrando %s", self.dir("cache/%s" % self.dbname)) for root, dirs, files in os.walk(self.dir("cache/%s" % self.dbname), topdown=False): for name in files: os.remove(os.path.join(root, name)) for name in dirs: os.rmdir(os.path.join(root, name)) # borrando de share # for root, dirs, files in os.walk(self.dir("../share/pineboo"), topdown=False): # for name in files: # if name.endswith("qs.py") or name.endswith("qs.py.debug") or name.endswith("qs.xml"): # os.remove(os.path.join(root, name)) if not os.path.exists(self.dir("cache")): os.makedirs(self.dir("cache")) # Conectar: if not self.conn: self.conn = PNConnection(self.dbname, self.dbserver.host, self.dbserver.port, self.dbauth.username, self.dbauth.password, self.dbserver.type) if self.conn.conn is False: return False # Se verifica que existen estas tablas for table in ("flareas", "flmodules", "flfiles", "flgroups", "fllarge", "flserial", "flusers", "flvar"): self.conn.manager().createSystemTable(table) util = FLUtil() util.writeSettingEntry(u"DBA/lastDB", self.dbname) self.cur = self.conn.cursor() self.areas = {} self.cur.execute( """ SELECT idarea, descripcion FROM flareas WHERE 1 = 1""") for idarea, descripcion in self.cur: self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion) self.areas["sys"] = Struct(idarea="sys", descripcion="Area de Sistema") # Obtener modulos activos self.cur.execute( """ SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = %s """ % self.conn.driver().formatValue("bool", "True", False)) self.modules = {} for idarea, idmodulo, descripcion, icono in self.cur: icono = clearXPM(icono) self.modules[idmodulo] = Module(self, idarea, idmodulo, descripcion, icono) file_object = open(filedir("..", "share", "pineboo", "sys.xpm"), "r") icono = file_object.read() file_object.close() icono = clearXPM(icono) self.modules["sys"] = Module(self, "sys", "sys", "Administración", icono) # Descargar proyecto . . . self.cur.execute( """ SELECT idmodulo, nombre, sha FROM flfiles ORDER BY idmodulo, nombre """ ) size_ = len(self.cur.fetchall()) self.cur.execute( """ SELECT idmodulo, nombre, sha FROM flfiles ORDER BY idmodulo, nombre """ ) f1 = open(self.dir("project.txt"), "w") self.files = {} if self._DGI.useDesktop() and self._DGI.localDesktop(): tiempo_ini = time.time() if not os.path.exists(self.dir("cache")): raise AssertionError # if self.parseProject: if self._DGI.useDesktop() and self._DGI.localDesktop(): util.createProgressDialog("Pineboo", size_) p = 0 for idmodulo, nombre, sha in self.cur: p = p + 1 if self._DGI.useDesktop() and self._DGI.localDesktop(): util.setProgress(p) util.setLabelText("Convirtiendo %s." % nombre) if idmodulo not in self.modules: continue # I fileobj = File(self, idmodulo, nombre, sha) if nombre in self.files: self.logger.warn( "run: file %s already loaded, overwritting..." % nombre) self.files[nombre] = fileobj self.modules[idmodulo].add_project_file(fileobj) f1.write(fileobj.filekey + "\n") if os.path.exists(self.dir("cache", fileobj.filekey)): continue fileobjdir = os.path.dirname(self.dir("cache", fileobj.filekey)) if not os.path.exists(fileobjdir): os.makedirs(fileobjdir) cur2 = self.conn.cursor() sql = "SELECT contenido FROM flfiles WHERE idmodulo = %s AND nombre = %s AND sha = %s" % ( self.conn.driver().formatValue("string", idmodulo, False), self.conn.driver().formatValue("string", nombre, False), self.conn.driver().formatValue("string", sha, False)) cur2.execute(sql) for (contenido, ) in cur2: f2 = open(self.dir("cache", fileobj.filekey), "wb") # La cadena decode->encode corrige el bug de guardado de # AbanQ/Eneboo txt = "" try: # txt = contenido.decode("UTF-8").encode("ISO-8859-15") txt = contenido.encode("ISO-8859-15") except Exception: self.logger.exception("Error al decodificar %s %s", idmodulo, nombre) # txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace") txt = contenido.encode("ISO-8859-15", "replace") f2.write(txt) if self.parseProject and nombre.endswith(".qs"): self.parseScript(self.dir("cache", fileobj.filekey)) if self._DGI.useDesktop() and self._DGI.localDesktop(): tiempo_fin = time.time() self.logger.info( "Descarga del proyecto completo a disco duro: %.3fs", (tiempo_fin - tiempo_ini)) # Cargar el núcleo común del proyecto idmodulo = 'sys' for root, dirs, files in os.walk(filedir("..", "share", "pineboo")): for nombre in files: if root.find("modulos") == -1: fileobj = File(self, idmodulo, nombre, basedir=root) self.files[nombre] = fileobj self.modules[idmodulo].add_project_file(fileobj) if self.parseProject and nombre.endswith(".qs"): self.parseScript(self.dir(root, nombre)) if self._DGI.useDesktop() and self._DGI.localDesktop(): try: util.destroyProgressDialog() except Exception as e: self.logger.error(e) self.loadTranslations() self.readState() self.acl_ = FLAccessControlLists() self.acl_.init_()
def setPixel(self, relDpi): FLUtil.writeSettingEntry("rptViewer/pixel", str(float(relDpi / 10.))) if self.rptEngine_: self.rptEngine_.setRelDpi(relDpi / 10.)
def setResolution(self, dpi): FLUtil.writeSettingEntry("rptViewer/dpi", str(dpi)) self.rptViewer_.setResolution(dpi)
def run(self): # TODO: Refactorizar esta función en otras más sencillas # Preparar temporal if not os.path.exists(self.dir("cache")): os.makedirs(self.dir("cache")) # Conectar: self.conn = PNConnection(self.dbname, self.dbserver.host, self.dbserver.port, self.dbauth.username, self.dbauth.password, self.dbserver.type) if self.conn.conn == False: return False #Se verifica que existen estas tablas self.conn.manager().createSystemTable("flareas") self.conn.manager().createSystemTable("flmodules") self.conn.manager().createSystemTable("flfiles") util = FLUtil() util.writeSettingEntry(u"DBA/lastDB",self.dbname) self.cur = self.conn.cursor() self.areas = {} self.cur.execute(""" SELECT idarea, descripcion FROM flareas WHERE 1 = 1""") for idarea, descripcion in self.cur: self.areas[idarea] = Struct(idarea=idarea, descripcion=descripcion) # Obtener modulos activos self.cur.execute(""" SELECT idarea, idmodulo, descripcion, icono FROM flmodules WHERE bloqueo = %s """ % self.conn.driver().formatValue("bool","True",False)) self.modules = {} for idarea, idmodulo, descripcion, icono in self.cur: self.modules[idmodulo] = Module(self, idarea, idmodulo, descripcion, icono) self.modules["sys"] = Module(self,"sys","sys","Administración",None)#Añadimos módulo sistema(falta icono) # Descargar proyecto . . . self.cur.execute(""" SELECT idmodulo, nombre, sha FROM flfiles ORDER BY idmodulo, nombre """) f1 = open(self.dir("project.txt"),"w") self.files = {} tiempo_ini = time.time() if not os.path.exists(self.dir("cache")): raise AssertionError for idmodulo, nombre, sha in self.cur: if idmodulo not in self.modules: continue # I fileobj = File(self, idmodulo, nombre, sha) if nombre in self.files: print("WARN: file %s already loaded, overwritting..." % nombre) self.files[nombre] = fileobj self.modules[idmodulo].add_project_file(fileobj) f1.write(fileobj.filekey+"\n") if os.path.exists(self.dir("cache" ,fileobj.filekey)): continue fileobjdir = os.path.dirname(self.dir("cache" ,fileobj.filekey)) if not os.path.exists(fileobjdir): os.makedirs(fileobjdir) cur2 = self.conn.cursor() sql = "SELECT contenido FROM flfiles WHERE idmodulo = %s AND nombre = %s AND sha = %s" % (self.conn.driver().formatValue("string",idmodulo,False), self.conn.driver().formatValue("string",nombre,False), self.conn.driver().formatValue("string",sha,False)) cur2.execute(sql) for (contenido,) in cur2: f2 = open(self.dir("cache" , fileobj.filekey),"wb") # La cadena decode->encode corrige el bug de guardado de AbanQ/Eneboo txt = "" try: #txt = contenido.decode("UTF-8").encode("ISO-8859-15") txt = contenido.encode("ISO-8859-15") except Exception: print("Error al decodificar" ,idmodulo, nombre) #txt = contenido.decode("UTF-8","replace").encode("ISO-8859-15","replace") txt = contenido.encode("ISO-8859-15","replace") f2.write(txt) tiempo_fin = time.time() if Project.debugLevel > 50: print("Descarga del proyecto completo a disco duro: %.3fs" % (tiempo_fin - tiempo_ini)) # Cargar el núcleo común del proyecto idmodulo = 'sys' for root, dirs, files in os.walk(filedir("..","share","pineboo")): for nombre in files: fileobj = File(self, idmodulo, nombre, basedir = root) self.files[nombre] = fileobj self.modules[idmodulo].add_project_file(fileobj)
def setPixel(self, relDpi): util = FLUtil() util.writeSettingEntry("rptViewer/pixel", str(float(relDpi / 10.))) if self.rptEngine_: self.rptEngine_.setRelDpi(relDpi / 10.)
def setResolution(self, dpi): util = FLUtil() util.writeSettingEntry("rptViewer/dpi", str(dpi)) self.rptViewer_.setResolution(dpi)
def sendEMailPDF(self): t = self.ui_.leDocumento.text() util = FLUtil() name = "informe.pdf" if not t or t == "" else t fileName = QtCore.QFileDialog.getSaveFileName( AQ_USRHOME + "/" + name + ".pdf", util.translate("app", "Fichero PDF a enviar (*.pdf)"), self, util.translate("app", "Exportar a PDF para enviar"), util.translate("app", "Exportar a PDF para enviar") ) if not fileName or fileName == "": return if not fileName.upper().contains(".PDF"): fileName = fileName + ".pdf" q = QtCore.QMessageBox.question( self, util.translate("app", "Sobreescribir {}").format(fileName), util.translate( self, "app", "Ya existe un fichero llamado {}. ¿Desea sobreescribirlo?" ).format(fileName), util.translate("app", "&Sí"), util.translate("app", "&No"), "", 0, 1 ) if QtCore.QFile.exists(fileName) and q: return autoCloseSave = self.autoClose_ self.slotPrintReportToPdf(fileName) self.autoClose_ = autoCloseSave util.writeSettingEntry("email/to", self.ui_["lePara"].text()) util.writeSettingEntry("email/from", self.ui_["leDe"].text()) util.writeSettingEntry( "email/mailserver", self.ui_["leMailServer"].text() ) fi = QtCore.QFileInfo(fileName) name = fi.fileName() self.smtpClient_.setMailServer(self.ui_["leMailServer"].text()) self.smtpClient_.setTo(self.ui_["lePara"].text()) self.smtpClient_.setFrom(self.ui_["leDe"].text()) asutxt = self.ui_["leAsunto"].text() self.smtpClient_.setSubject(name if asutxt == "" else asutxt) self.smtpClient_.setBody(self.ui_["leCuerpo"].text() + "\n\n") html = "<html><body><a href=\"http://abanq.org/\">" html += "<img src=\"cid:logo.png@3d8b627b6292\"/>" html += "</a><br/><br/></body></html>" self.smtpClient_.addTextPart(html, "text/html") self.smtpClient_.addAttachment(fileName) self.smtpClient_.startSend()