Example #1
0
    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()
Example #2
0
    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_()
Example #3
0
 def setPixel(self, relDpi):
     FLUtil.writeSettingEntry("rptViewer/pixel", str(float(relDpi / 10.)))
     if self.rptEngine_:
         self.rptEngine_.setRelDpi(relDpi / 10.)
Example #4
0
 def setResolution(self, dpi):
     FLUtil.writeSettingEntry("rptViewer/dpi", str(dpi))
     self.rptViewer_.setResolution(dpi)
Example #5
0
    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)
Example #6
0
 def setPixel(self, relDpi):
     util = FLUtil()
     util.writeSettingEntry("rptViewer/pixel", str(float(relDpi / 10.)))
     if self.rptEngine_:
         self.rptEngine_.setRelDpi(relDpi / 10.)
Example #7
0
 def setResolution(self, dpi):
     util = FLUtil()
     util.writeSettingEntry("rptViewer/dpi", str(dpi))
     self.rptViewer_.setResolution(dpi)
Example #8
0
    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()