Beispiel #1
0
    def test_basic_2(self) -> None:
        """Test Deleteting."""

        from pineboolib.application.database import pnsqlcursor
        from pineboolib.qsa import qsa

        cursor = pnsqlcursor.PNSqlCursor("fltest")
        cursor.select()
        self.assertEqual(cursor.size(), 100)
        cursor.select("string_field ='Linea 10'")
        self.assertEqual(cursor.size(), 1)
        self.assertTrue(cursor.first())
        cursor.setModeAccess(cursor.Edit)
        self.assertTrue(cursor.refreshBuffer())
        cursor.setValueBuffer("string_field", "Linea 10 m.")
        qsa.FLUtil().sqlDelete("fltest", "string_field='Linea 10'")
        cursor_2 = pnsqlcursor.PNSqlCursor("fltest")
        cursor_2.select()
        self.assertEqual(cursor_2.size(), 99)
        self.assertTrue(cursor.commitBuffer())

        cursor.select("string_field ='Linea 9'")
        self.assertEqual(cursor.size(), 1)
        self.assertTrue(cursor.first())
        cursor.setModeAccess(cursor.Edit)
        self.assertTrue(cursor.refreshBuffer())
        cursor.setValueBuffer("string_field", "Linea 9 m.")
        self.assertTrue(cursor.commitBuffer())
        cursor.refresh()
        self.assertEqual(cursor.size(), 99)

        cursor_3 = pnsqlcursor.PNSqlCursor("fltest")
        cursor_3.select()
        i = 0
        size = 99
        while cursor_3.next():
            if i == 10:
                qsa.FLUtil().sqlDelete("fltest", "string_field='Linea 20'")
                size -= 1
                i += 1

            self.assertTrue(
                cursor_3.valueBuffer("string_field").find("Linea %s" % i) > -1)
            self.assertEqual(cursor_3.size(), 99)
            i += 1

        cursor_3.refresh()
        self.assertEqual(cursor_3.size(), 98)
Beispiel #2
0
    def afterCommit_flfiles(self, cur_files_: "isqlcursor.ISqlCursor") -> bool:
        """After commit flfiles."""

        if cur_files_.modeAccess() != cur_files_.Browse:
            _qry = qsa.FLSqlQuery()
            _qry.setTablesList(u"flserial")
            _qry.setSelect(u"sha")
            _qry.setFrom(u"flfiles")
            _qry.setForwardOnly(True)
            _serial_value = cur_files_.valueBuffer(u"sha")
            if _qry.exec_():
                if _qry.first():
                    util = qsa.FLUtil()
                    _v = util.sha1(_qry.value(0))
                    while _qry.next():
                        if _qry.value(0) is not None:
                            _v = util.sha1(_v + _qry.value(0))

                    _serial_value = _v

            _cur_serial = qsa.FLSqlCursor(u"flserial")
            _cur_serial.select()
            if _cur_serial.first():
                _cur_serial.setModeAccess(_cur_serial.Edit)
            else:
                _cur_serial.setModeAccess(_cur_serial.Insert)
            _cur_serial.refreshBuffer()
            _cur_serial.setValueBuffer(u"sha", _serial_value)
            _cur_serial.commitBuffer()

        return True
Beispiel #3
0
    def cargarModulo(self, nombre_fichero: str) -> bool:
        """Load a module and return True if loaded."""
        util = qsa.FLUtil()
        if util.getOS() == u"WIN32":
            nombre_fichero = nombre_fichero[0 : len(nombre_fichero) - 1]

        return qsa.from_project("formflreloadlast").cargarModulo(nombre_fichero)
Beispiel #4
0
 def grabarValorGlobal(self, valor_name: str, value: Union[str, bool]) -> None:
     """Set global value."""
     util = qsa.FLUtil()
     if not util.sqlSelect("flsettings", "flkey", "flkey='%s'" % valor_name):
         util.sqlInsert("flsettings", "flkey,valor", "%s,%s" % (valor_name, value))
     else:
         util.sqlUpdate("flsettings", u"valor", str(value), "flkey = '%s'" % valor_name)
Beispiel #5
0
    def editarFicheroXML(self) -> None:
        """Edit xml file."""
        cursor = self.cursor()
        util = qsa.FLUtil()
        if cursor.checkIntegrity():
            temporal = qsa.System.getenv(u"TMP")
            if temporal == "":
                temporal = qsa.System.getenv(u"TMPDIR")
            if temporal == "":
                temporal = qsa.System.getenv(u"HOME")
            if temporal == "":
                from pineboolib.core.settings import config

                temporal = config.value("ebcomportamiento/temp_dir")
            temporal = qsa.ustr(temporal, "/", cursor.valueBuffer(u"nombre"))
            comando = ""
            contenido = self.child("contenido").toPlainText()
            if util.getOS() == "MACX":
                qsa.FileStatic.write(temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n"))
                comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/teddy.app/Contents/MacOS/teddy")
            else:
                qsa.FileStatic.write(temporal, contenido)
                comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/teddy")

            self.setDisabled(True)
            qsa.ProcessStatic.execute([comando, temporal])
            self.child("contenido").setText(qsa.FileStatic.read(temporal))
            self.setDisabled(False)
Beispiel #6
0
    def test_dates(self) -> None:
        """Test dates functions."""
        from pineboolib.qsa import qsa

        util = qsa.FLUtil()

        self.assertEqual(str(util.addDays("30-11-2020", 2)),
                         "2020-12-02T00:00:00")
        self.assertEqual(str(util.addDays("2021-12-31", 2)),
                         "2022-01-02T00:00:00")
        self.assertEqual(str(util.addDays("2021-12-31T00:01:00", 2)),
                         "2022-01-02T00:00:00")
        self.assertEqual(str(util.addMonths("2021-12-31", 12)),
                         "2022-12-31T00:00:00")
        self.assertEqual(str(util.addMonths("01-10-2021", 12)),
                         "2022-10-01T00:00:00")
        self.assertEqual(str(util.addYears("01-10-2021", 12)),
                         "2033-10-01T00:00:00")
        self.assertEqual(str(util.addYears("2021-10-01", 12)),
                         "2033-10-01T00:00:00")
        self.assertEqual(
            util.daysTo(qsa.Date("2019-07-12"), qsa.Date("2019-07-15")), 3)
        self.assertEqual(
            util.daysTo(qsa.Date("2019-07-01"), qsa.Date("2019-11-15")), 137)
        self.assertEqual(
            util.daysTo(qsa.Date("2019-07-01"), qsa.Date("2019-03-15")), -108)
        self.assertEqual(util.dateAMDtoDMA("2019-12-01"), "01-12-2019")
        self.assertEqual(util.dateAMDtoDMA("20"), "")
        self.assertEqual(util.dateDMAtoAMD("20"), "")
Beispiel #7
0
    def test_basic_1(self) -> None:
        """"Test basic 1."""

        from pineboolib.qsa import qsa

        util = qsa.FLUtil()

        self.assertEqual(util.partDecimal(1.21), 21)
        self.assertEqual(util.partInteger(12.345), 12)
        result = "CIENTO VEINTITRES MILLONES CUATROCIENTOS CINCUENTA Y SEIS MIL SETECIENTOS OCHENTA"
        result += " Y NUEVE EUROS CON VEINTIUN CÉNTIMOS"
        self.assertEqual(util.enLetraMonedaEuro(123456789.21), result)
        self.assertEqual(util.enLetraMonedaEuro(100), "CIEN EUROS")
        self.assertEqual(util.enLetraMonedaEuro(5000), "CINCO MIL EUROS")
        self.assertEqual(util.enLetraMonedaEuro(6002), "SEIS MIL DOS EUROS")
        self.assertEqual(util.enLetraMonedaEuro(13), "TRECE EUROS")
        self.assertEqual(util.enLetraMonedaEuro(-10), "MENOS DIEZ EUROS")
        self.assertEqual(util.enLetraMonedaEuro(5125),
                         "CINCO MIL CIENTO VEINTICINCO EUROS")
        self.assertEqual(util.letraDni(12345678), "Z")
        self.assertEqual(util.nombreCampos("flareas"),
                         ["3", "bloqueo", "idarea", "descripcion"])
        self.assertEqual(util.calcularDC(30660001), "2")
        self.assertEqual(util.formatoMiles("12345"), "12.345")
        self.assertEqual(util.formatoMiles("-12.05"), "-12,05")
        self.assertFalse(util.numCreditCard("5539110012141618"))
        self.assertTrue(util.numCreditCard("3716820019271998"))
Beispiel #8
0
    def test_sqlSelect(self) -> None:
        """Test sqlSelect."""

        from pineboolib.qsa import qsa

        cursor_areas = qsa.FLSqlCursor("flareas")
        cursor_areas.setModeAccess(cursor_areas.Insert)
        cursor_areas.refreshBuffer()
        cursor_areas.setValueBuffer("idarea", "Y")
        cursor_areas.setValueBuffer("descripcion", "123oX")
        self.assertTrue(cursor_areas.commitBuffer())
        cx = cursor_areas.db()

        util = qsa.FLUtil()
        self.assertEqual(
            util.sqlSelect("flareas", "descripcion", "idarea='Y'"), "123oX")
        self.assertEqual(
            util.sqlSelect("flareas", "descripcion", "idarea='Y'",
                           ["flareas"]), "123oX")
        self.assertEqual(
            util.sqlSelect("flareas", "descripcion", "idarea='Y'", ["flareas"],
                           0), "123oX")
        self.assertEqual(
            util.sqlSelect("flareas", "descripcion", "idarea='Y'", ["flareas"],
                           cx), "123oX")
        self.assertEqual(
            util.sqlSelect("flareas", "descripcion", "idarea='Y'", ["flareas"],
                           0, "default"),
            "123oX",
        )

        self.assertEqual(
            util.sqlSelect("flareas", "descripcion", "idarea='Y'", ["flareas"],
                           0, cx), "123oX")
Beispiel #9
0
    def leerValorGlobal(self, valor_name: str = None) -> Any:
        """Return global value."""
        util = qsa.FLUtil()
        value = util.sqlSelect("flsettings", "valor", "flkey='%s'" % valor_name)

        if value is None or valor_name == "verticalName" and isinstance(value, bool):
            value = ""

        return value
Beispiel #10
0
    def elegirOpcion(self, opciones: qsa.Array) -> qsa.Array:
        """Show a choose option dialog and return selected values."""
        util = qsa.FLUtil()
        dialog = qsa.Dialog()
        dialog.okButtonText = util.translate(u"scripts", u"Aceptar")
        dialog.cancelButtonText = util.translate(u"scripts", u"Cancelar")
        bgroup = qsa.GroupBox()
        bgroup.setTitle(util.translate(u"scripts", u"Seleccione módulos a cargar"))
        dialog.add(bgroup)
        resultado = qsa.Array()
        cB = qsa.Array()
        i = 0
        while_pass = True
        while i < len(opciones):
            if not while_pass:
                i += 1
                while_pass = True
                continue
            while_pass = False
            cB[i] = qsa.CheckBox()
            bgroup.add(cB[i])
            cB[i].text = opciones[i]
            cB[i].checked = True
            i += 1
            while_pass = True
            try:
                i < len(opciones)
            except Exception:
                break

        indice = 0
        if dialog.exec_():
            i = 0
            while_pass = True
            while i < len(opciones):
                if not while_pass:
                    i += 1
                    while_pass = True
                    continue
                while_pass = False
                if cB[i].checked:
                    resultado[indice] = opciones[i]
                    indice += 1
                i += 1
                while_pass = True
                try:
                    i < len(opciones)
                except Exception:
                    break

        else:
            return qsa.Array()

        if len(resultado) == 0:
            return qsa.Array()
        return resultado
Beispiel #11
0
    def init(self) -> None:
        """Init function."""
        settings = qsa.AQSettings()
        app_ = qsa.aqApp
        if not app_:
            return
        flfactppal = qsa.SysType().isLoadedModule("flfactppal")
        if flfactppal is True:
            try:
                codEjercicio = qsa.from_project("flfactppal").iface.pub_ejercicioActual()
            except Exception as e:
                logger.error(
                    "Module flfactppal was loaded but not able to execute <flfactppal.iface.pub_ejercicioActual()>"
                )
                logger.error(
                    "... this usually means that flfactppal has failed translation to python"
                )
                logger.exception(e)
                codEjercicio = None
            if codEjercicio:
                util = qsa.FLUtil()
                nombreEjercicio = util.sqlSelect(
                    u"ejercicios", u"nombre", qsa.ustr(u"codejercicio='", codEjercicio, u"'")
                )
                if qsa.AQUtil.sqlSelect(u"flsettings", u"valor", u"flkey='PosInfo'") == "True":
                    texto = ""
                    if nombreEjercicio:
                        texto = qsa.ustr(u"[ ", nombreEjercicio, u" ]")
                    texto = qsa.ustr(
                        texto,
                        u" [ ",
                        app_.db().driverNameToDriverAlias(app_.db().driverName()),
                        u" ] * [ ",
                        qsa.SysType().nameBD(),
                        u" ] * [ ",
                        qsa.SysType().nameUser(),
                        u" ] ",
                    )
                    app_.setCaptionMainWidget(texto)

                else:
                    if nombreEjercicio:
                        app_.setCaptionMainWidget(nombreEjercicio)

                oldApi = settings.readBoolEntry(u"application/oldApi")
                if not oldApi:
                    valor = util.readSettingEntry(u"ebcomportamiento/ebCallFunction")
                    if valor:
                        funcion = qsa.Function(valor)
                        try:
                            funcion()
                        except Exception:
                            qsa.debug(traceback.format_exc())

        if settings.readBoolEntry("ebcomportamiento/git_updates_enabled", False):
            qsa.sys.AQTimer.singleShot(2000, qsa.SysType.search_git_updates)
Beispiel #12
0
    def main(self) -> None:
        """Entry function."""
        util = qsa.FLUtil()
        setting = "scripts/sys/modLastModule_%s" % qsa.sys.nameBD()
        fichMod = util.readSettingEntry(setting)
        if not fichMod:
            fichMod = qsa.FileDialog.getOpenFileName(
                util.translate(u"scripts", u"Módulo a cargar (*.mod)"),
                util.translate(u"scripts", u"Módulo a cargar"),
            )
            if not fichMod:
                return
            util.writeSettingEntry(setting, fichMod)

        qsa.sys.processEvents()
        self.cargarModulo(fichMod)
        qsa.sys.reinit()
Beispiel #13
0
    def test_translate(self) -> None:
        """Test Translations."""

        from pineboolib.qsa import qsa

        qsa.aqApp.loadTranslationFromModule("sys", "es")

        util = qsa.FLUtil()
        self.assertEqual(util.translate("scripts", "single"), "simple!")
        self.assertEqual(
            util.translate("scripts", "variable %s") % "uno",
            "con variable uno!")
        self.assertEqual(
            util.translate("scripts", "multiple variable %s , %s") %
            ("uno", "dos"),
            "Test uno y dos",
        )
Beispiel #14
0
    def traducirCadena(self, cadena: str, path: str, modulo: str) -> str:
        """Translate string."""
        util = qsa.FLUtil()
        if cadena.find(u"QT_TRANSLATE_NOOP") == -1:
            return cadena
        cadena = qsa.QString(cadena).mid(41, len(cadena) - 43)
        nombre_fichero = None
        try:
            nombre_fichero = qsa.ustr(path, u"/translations/", modulo, u".",
                                      util.getIdioma(), u".ts")
        except Exception as e:
            qsa.debug(str(e))
            return cadena

        if not qsa.FileStatic.exists(nombre_fichero):
            return cadena
        fichero = qsa.File(nombre_fichero)
        fichero.open(qsa.File.ReadOnly)
        f = fichero.read()
        xmlTranslations = qsa.FLDomDocument()
        if xmlTranslations.setContent(f):
            nodeMess = xmlTranslations.elementsByTagName(u"message")
            i = 0
            while_pass = True
            while i < len(nodeMess):
                if not while_pass:
                    i += 1
                    while_pass = True
                    continue
                while_pass = False
                if nodeMess.item(i).namedItem(
                        u"source").toElement().text() == cadena:
                    traduccion = nodeMess.item(i).namedItem(
                        u"translation").toElement().text()
                    if traduccion:
                        cadena = traduccion
                i += 1
                while_pass = True
                try:
                    i < len(nodeMess)
                except Exception:
                    break

        return cadena
Beispiel #15
0
    def main(self) -> None:
        """Entry function."""
        util = qsa.FLUtil()
        setting = "scripts/sys/modLastDirModules_%s" % qsa.sys.nameBD()
        dirAnt = util.readSettingEntry(setting)
        dirMods = qsa.FileDialog.getExistingDirectory(
            dirAnt, util.translate(u"scripts", u"Directorio de Módulos")
        )

        if not dirMods:
            return
        qsa.Dir().setCurrent(dirMods)

        resComando = qsa.Array()
        if util.getOS() == u"WIN32":
            resComando = self.ejecutarComando("cmd.exe /C dir /B /S *.mod")
        else:
            resComando = self.ejecutarComando("find . -name *.mod")

        if not resComando.ok:
            qsa.MessageBox.warning(
                util.translate(u"scripts", u"Error al buscar los módulos en el directorio:\n")
                + dirMods,
                qsa.MessageBox.Ok,
                qsa.MessageBox.NoButton,
                qsa.MessageBox.NoButton,
            )
            return

        opciones = resComando.salida.split(u"\n")
        opciones.pop()
        modulos = self.elegirOpcion(opciones)
        if not modulos:
            return
        i = 0
        while_pass = True
        while i < len(modulos):
            if not while_pass:
                i += 1
                while_pass = True
                continue
            while_pass = False
            qsa.sys.processEvents()
            if not self.cargarModulo(modulos[i]):
                qsa.MessageBox.warning(
                    util.translate(u"scripts", u"Error al cargar el módulo:\n") + modulos[i],
                    qsa.MessageBox.Ok,
                    qsa.MessageBox.NoButton,
                    qsa.MessageBox.NoButton,
                )
                return
            i += 1
            while_pass = True
            try:
                i < len(modulos)
            except Exception:
                break

        util.writeSettingEntry(setting, dirMods)
        app_ = qsa.aqApp
        if app_ is None:
            return

        app_.reinit()
Beispiel #16
0
    def editarFichero(self) -> None:
        """Edit a file."""
        qsa.MessageBox.warning(
            qsa.util.translate("scripts", "Opción no disponible"),
            qsa.MessageBox.Yes,
            qsa.MessageBox.NoButton,
        )
        return
        cursor = self.cursor()
        util = qsa.FLUtil()
        if cursor.checkIntegrity():
            self.child("nombre").setDisabled(True)
            nombre = cursor.valueBuffer("nombre")
            tipo = self.tipoDeFichero(nombre)
            temporal = qsa.System.getenv("TMP")
            if temporal == "":
                temporal = qsa.System.getenv("TMPDIR")
            if temporal == "":
                temporal = qsa.System.getenv("HOME")
            if temporal == "":
                from pineboolib.core.settings import config

                temporal = config.value("ebcomportamiento/temp_dir")

            temporal = qsa.ustr(temporal, "/", cursor.valueBuffer("nombre"))
            contenido = self.child("contenido").toPlainText()
            comando = ""
            if tipo == ".ui":
                if util.getOS() == "MACX":
                    qsa.FileStatic.write(
                        temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
                    )
                    comando = qsa.ustr(
                        qsa.sys.installPrefix(), "/bin/designer.app/Contents/MacOS/designer"
                    )
                else:
                    qsa.FileStatic.write(temporal, contenido)
                    comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/designer")

                self.setDisabled(True)
                qsa.ProcessStatic.execute(qsa.Array([comando, temporal]))
                self.child(u"contenido").setText(qsa.FileStatic.read(temporal))
                self.setDisabled(False)
            elif tipo == ".ts":
                if util.getOS() == "MACX":
                    qsa.FileStatic.write(
                        temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
                    )
                    comando = qsa.ustr(
                        qsa.sys.installPrefix(), "/bin/linguist.app/Contents/MacOS/linguist"
                    )
                else:
                    qsa.FileStatic.write(temporal, contenido)
                    comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/linguist")

                self.setDisabled(True)
                qsa.ProcessStatic.execute(qsa.Array([comando, temporal]))
                self.child("contenido").setText(qsa.FileStatic.read(temporal))
                self.setDisabled(False)
            elif tipo == ".kut":
                if util.getOS() == "MACX":
                    qsa.FileStatic.write(
                        temporal, qsa.ustr(contenido, "\n\n\n\n\n\n\n\n\n\n\n\n\n\n")
                    )
                    comando = qsa.ustr(
                        qsa.sys.installPrefix(), "/bin/kudesigner.app/Contents/MacOS/kudesigner"
                    )
                else:
                    qsa.FileStatic.write(temporal, contenido)
                    comando = qsa.ustr(qsa.sys.installPrefix(), "/bin/kudesigner")

                self.setDisabled(True)
                qsa.ProcessStatic.execute(qsa.Array([comando, temporal]))
                self.child("contenido").setText(qsa.FileStatic.read(temporal))
                self.setDisabled(False)

            elif tipo in (".qs", ".py"):
                self.setDisabled(True)
                editor_ = qsa.FLScriptEditor(nombre)
                editor_.exec_()
                self.child("contenido").setText(editor_.code())
                self.setDisabled(False)
            else:
                self.setDisabled(True)
                dialog = qsa.Dialog()
                dialog.setWidth(600)
                dialog.cancelButtonText = ""
                editor = qsa.TextEdit()
                if editor is None:
                    raise Exception("editor is empty!")
                editor.textFormat = editor.PlainText
                editor.text = contenido
                dialog.add(editor)
                dialog.exec_()
                self.child("contenido").setText(editor.text)
                self.setDisabled(False)
Beispiel #17
0
 def calculateField(self, fN: str) -> Any:
     """Return a value."""
     if fN == "sha":
         util = qsa.FLUtil()
         return util.sha1(self.cursor().valueBuffer("contenido"))
Beispiel #18
0
 def _class_init(self) -> None:
     """Inicialize."""
     self.util = qsa.FLUtil()
Beispiel #19
0
    def cargarModulo(self, nombre_fichero: str) -> bool:
        """Load modules."""
        util = qsa.FLUtil()
        fichero = qsa.File(nombre_fichero, "iso-8859-15")
        modulo = None
        descripcion = None
        area = None
        desArea = None
        version = None
        nombreIcono = None
        # versionMinimaFL = None
        dependencias = qsa.Array()
        fichero.open(qsa.File.ReadOnly)
        f = fichero.read()
        xmlModule = qsa.FLDomDocument()
        if xmlModule.setContent(f):
            nodeModule = xmlModule.namedItem(u"MODULE")
            if not nodeModule:
                qsa.MessageBox.critical(
                    util.translate(u"scripts",
                                   u"Error en la carga del fichero xml .mod"),
                    qsa.MessageBox.Ok,
                    qsa.MessageBox.NoButton,
                )
            modulo = nodeModule.namedItem(u"name").toElement().text()
            descripcion = nodeModule.namedItem(u"alias").toElement().text()
            area = nodeModule.namedItem(u"area").toElement().text()
            desArea = nodeModule.namedItem(u"areaname").toElement().text()
            version = nodeModule.namedItem(u"version").toElement().text()
            nombreIcono = nodeModule.namedItem(u"icon").toElement().text()
            # if nodeModule.namedItem(u"flversion"):
            #    versionMinimaFL = nodeModule.namedItem(u"flversion").toElement().text()
            if nodeModule.namedItem(u"dependencies"):
                nodeDepend = xmlModule.elementsByTagName(u"dependency")
                i = 0
                while_pass = True
                while i < len(nodeDepend):
                    if not while_pass:
                        i += 1
                        while_pass = True
                        continue
                    while_pass = False
                    dependencias[i] = nodeDepend.item(i).toElement().text()
                    i += 1
                    while_pass = True
                    try:
                        i < len(nodeDepend)
                    except Exception:
                        break

        else:
            if not isinstance(f, str):
                raise Exception("data must be str, not bytes!!")
            aF = f.split(u"\n")
            modulo = self.dameValor(aF[0])
            descripcion = self.dameValor(aF[1])
            area = self.dameValor(aF[2]) or ""
            desArea = self.dameValor(aF[3])
            version = self.dameValor(aF[4])
            nombreIcono = self.dameValor(aF[5])

        descripcion = self.traducirCadena(descripcion or "", fichero.path
                                          or "", modulo or "")
        desArea = self.traducirCadena(desArea or "", fichero.path or "", modulo
                                      or "")
        fichIcono = qsa.File(qsa.ustr(fichero.path, u"/", nombreIcono))
        fichIcono.open(qsa.File.ReadOnly)
        icono = fichIcono.read()

        if not util.sqlSelect(u"flareas", u"idarea",
                              qsa.ustr(u"idarea = '", area, u"'")):
            if not util.sqlInsert(u"flareas", u"idarea,descripcion",
                                  qsa.ustr(area, u",", desArea)):
                qsa.MessageBox.warning(
                    util.translate(u"scripts", u"Error al crear el área:\n") +
                    area,
                    qsa.MessageBox.Ok,
                    qsa.MessageBox.NoButton,
                )
                return False
        recargar = util.sqlSelect(u"flmodules", u"idmodulo",
                                  qsa.ustr(u"idmodulo = '", modulo, u"'"))
        curModulo = qsa.FLSqlCursor(u"flmodules")
        if recargar:
            # WITH_START
            curModulo.select(qsa.ustr(u"idmodulo = '", modulo, u"'"))
            curModulo.first()
            curModulo.setModeAccess(curModulo.Edit)
            # WITH_END

        else:
            curModulo.setModeAccess(curModulo.Insert)

        # WITH_START
        curModulo.refreshBuffer()
        curModulo.setValueBuffer(u"idmodulo", modulo)
        curModulo.setValueBuffer(u"descripcion", descripcion)
        curModulo.setValueBuffer(u"idarea", area)
        curModulo.setValueBuffer(u"version", version)
        curModulo.setValueBuffer(u"icono", icono)
        curModulo.commitBuffer()
        # WITH_END
        # curSeleccion = qsa.FLSqlCursor(u"flmodules")
        curModulo.setMainFilter(qsa.ustr(u"idmodulo = '", modulo, u"'"))
        curModulo.editRecord(False)
        qsa.from_project("formRecordflmodules").cargarDeDisco(
            qsa.ustr(fichero.path, u"/"), False)
        qsa.from_project("formRecordflmodules").accept()

        setting = "scripts/sys/modLastModule_%s" % qsa.sys.nameBD()
        nombre_fichero = "%s" % os.path.abspath(nombre_fichero)
        qsa.util.writeSettingEntry(setting, nombre_fichero)
        qsa.sys.processEvents()

        return True