From 0ea0fd2449ff19fefbc6660c0508607ab8cea8b8 Mon Sep 17 00:00:00 2001 From: David Beal Date: Tue, 21 Apr 2026 14:07:43 +0200 Subject: [PATCH] kpiten: add config to store settings --- .pre-commit-config.yaml | 2 + kpiten/__manifest__.py | 3 + kpiten/models/__init__.py | 2 +- kpiten/models/kpiten_config.py | 25 ++++++++ kpiten/security/ir.model.access.csv | 3 + kpiten/static/description/icon.png | Bin 10254 -> 39307 bytes kpiten/views/kpiten.xml | 85 ++++++++++++++++++++++++++++ requirements.txt | 10 ++++ 8 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 kpiten/models/kpiten_config.py create mode 100644 kpiten/security/ir.model.access.csv mode change 100644 => 100755 kpiten/static/description/icon.png create mode 100644 kpiten/views/kpiten.xml create mode 100644 requirements.txt diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e789cad..d1c8670 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,6 +18,8 @@ exclude: | /build/|/dist/| # Ignore test files in addons /tests/samples/.*| + # Marimo + marimo-kpiten/.*| # You don't usually want a bot to modify your legal texts (LICENSE.*|COPYING.*) default_language_version: diff --git a/kpiten/__manifest__.py b/kpiten/__manifest__.py index ee527fd..9107fb9 100644 --- a/kpiten/__manifest__.py +++ b/kpiten/__manifest__.py @@ -4,6 +4,7 @@ "version": "18.0.1.0.0", "development_status": "Alpha", "installable": True, + "application": True, "category": "Tools", "website": "https://github.com/akretion/kpiten", "author": " Akretion", @@ -13,5 +14,7 @@ ], "data": [ "data/ir_config_parameter.xml", + "security/ir.model.access.csv", + "views/kpiten.xml", ], } diff --git a/kpiten/models/__init__.py b/kpiten/models/__init__.py index aff44f3..b55f890 100644 --- a/kpiten/models/__init__.py +++ b/kpiten/models/__init__.py @@ -1 +1 @@ -from . import res_company +from . import res_company, kpiten_config diff --git a/kpiten/models/kpiten_config.py b/kpiten/models/kpiten_config.py new file mode 100644 index 0000000..d062fc1 --- /dev/null +++ b/kpiten/models/kpiten_config.py @@ -0,0 +1,25 @@ +from odoo import fields, models + + +class KpitenConfig(models.Model): + _name = "kpiten.config" + _description = "Configuration for kpiten" + + name = fields.Char(required=True) + state = fields.Selection(selection=[("draft", "Draft"), ("validated", "Validated")]) + line_ids = fields.One2many( + comodel_name="kpiten.config.line", inverse_name="config_id" + ) + model_ids = fields.Many2many( + comodel_name="ir.model", help="Models used to produce dataframe" + ) + company_id = fields.Many2one(comodel_name="res.company") + + +class KpitenConfigLine(models.Model): + _name = "kpiten.config.line" + _description = "Configuration lines for kpiten" + + config_id = fields.Many2one(comodel_name="kpiten.config", required=True) + definition = fields.Text(help="Store settings for kpi") + active = fields.Boolean(default=True) diff --git a/kpiten/security/ir.model.access.csv b/kpiten/security/ir.model.access.csv new file mode 100644 index 0000000..92eb09f --- /dev/null +++ b/kpiten/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +kpiten.access_kpiten_config,access_kpiten_config,kpiten.model_kpiten_config,base.group_user,1,1,1,1 +kpiten.access_kpiten_config_line,access_kpiten_config_line,kpiten.model_kpiten_config_line,base.group_user,1,1,1,1 diff --git a/kpiten/static/description/icon.png b/kpiten/static/description/icon.png old mode 100644 new mode 100755 index 1dcc49c24f364e9adf0afbc6fc0bac6dbecdeb11..db641acd9d6db4cbf816613785f5a95f126c9695 GIT binary patch literal 39307 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 + + kpiten.config + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + kpiten.config + + + + + + + + + + + kpiten.config + + + + + + + + + Kpiten + kpiten.config + list,form + kpiten + + + + + + diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..0576faf --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +# generated from manifests external_dependencies +connectorx>=0.4.5 +dotenv>=0.9.9 +fastapi>=0.135.3 +marimo>=0.22.5 +polars>=1.39.3 +psycopg2>=2.9.11 +pyarrow>=23.0.1 +requests>=2.33.1 +uvicorn>=0.44.0