From c396dc5821962fbc46a8ef4c3f4a9a9b70fdfd50 Mon Sep 17 00:00:00 2001 From: Pablo Montenegro Date: Tue, 31 Oct 2023 11:00:12 -0300 Subject: [PATCH] [MIG] okr: Migration to 17.0 --- okr/.gitignore | 1 + okr/__init__.py | 1 + okr/__manifest__.py | 24 +++++++ okr/data/ir_module_category_data.xml | 35 ++++++++++ okr/demo/kr_ppal_data.xml | 29 ++++++++ okr/models/__init__.py | 3 + okr/models/kr_ppal.py | 10 +++ okr/models/okr_key_result.py | 22 ++++++ okr/models/okr_objective.py | 35 ++++++++++ okr/security/ir.model.access.csv | 7 ++ okr/views/kr_ppal.xml | 35 ++++++++++ okr/views/okr_key_result.xml | 26 +++++++ okr/views/okr_objective.xml | 101 +++++++++++++++++++++++++++ 13 files changed, 329 insertions(+) create mode 100644 okr/.gitignore create mode 100644 okr/__init__.py create mode 100644 okr/__manifest__.py create mode 100644 okr/data/ir_module_category_data.xml create mode 100644 okr/demo/kr_ppal_data.xml create mode 100644 okr/models/__init__.py create mode 100644 okr/models/kr_ppal.py create mode 100644 okr/models/okr_key_result.py create mode 100644 okr/models/okr_objective.py create mode 100644 okr/security/ir.model.access.csv create mode 100644 okr/views/kr_ppal.xml create mode 100644 okr/views/okr_key_result.xml create mode 100644 okr/views/okr_objective.xml diff --git a/okr/.gitignore b/okr/.gitignore new file mode 100644 index 00000000..ed63a21b --- /dev/null +++ b/okr/.gitignore @@ -0,0 +1 @@ +notas.txt diff --git a/okr/__init__.py b/okr/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/okr/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/okr/__manifest__.py b/okr/__manifest__.py new file mode 100644 index 00000000..cacaff79 --- /dev/null +++ b/okr/__manifest__.py @@ -0,0 +1,24 @@ +{ +'name': "OKR", +'version': "17.0.1.0.0", +'category': 'OKR', +'summary': "Gestión de OKR", +'license': 'LGPL-3', +'description': """ +Gestión de OKR +""", +'author': "Pablo Montenegro", +'depends': ['base', 'hr'], +'data': ['data/ir_module_category_data.xml', + 'security/ir.model.access.csv', + 'views/okr_key_result.xml', + 'views/okr_objective.xml', + 'views/kr_ppal.xml', + ], +'demo': [ + 'demo/kr_ppal_data.xml', + ], +'application': True, +'installable': True, +'auto_install': False, +} diff --git a/okr/data/ir_module_category_data.xml b/okr/data/ir_module_category_data.xml new file mode 100644 index 00000000..bbfb4343 --- /dev/null +++ b/okr/data/ir_module_category_data.xml @@ -0,0 +1,35 @@ + + + + + + OKR + OKR + 1 + + + Permisos + 1 + + + + + User + + + + + + Manager + + + + + + OKR manager can modify all key results + + [(1, '=', 1)] + + + + diff --git a/okr/demo/kr_ppal_data.xml b/okr/demo/kr_ppal_data.xml new file mode 100644 index 00000000..bccc0650 --- /dev/null +++ b/okr/demo/kr_ppal_data.xml @@ -0,0 +1,29 @@ + + + + + 01 + Crecer + + + + 02 + Internacionalizar + + + + 03 + Agregar valor al cliente + + + + 04 + Producto robusto + + + + 05 + Equipo motivado y feliz + + + diff --git a/okr/models/__init__.py b/okr/models/__init__.py new file mode 100644 index 00000000..aad67eba --- /dev/null +++ b/okr/models/__init__.py @@ -0,0 +1,3 @@ +from . import kr_ppal +from . import okr_key_result +from . import okr_objective diff --git a/okr/models/kr_ppal.py b/okr/models/kr_ppal.py new file mode 100644 index 00000000..6bba534f --- /dev/null +++ b/okr/models/kr_ppal.py @@ -0,0 +1,10 @@ +from odoo import models, fields + + +class KrPPal(models.Model): + _name = "kr.ppal" + _description = "Kr ppal" + _rec_name = 'description' + + code = fields.Char(required=True) + description = fields.Char(required=True) diff --git a/okr/models/okr_key_result.py b/okr/models/okr_key_result.py new file mode 100644 index 00000000..95ada185 --- /dev/null +++ b/okr/models/okr_key_result.py @@ -0,0 +1,22 @@ +from odoo import models, api, fields, _ +from odoo.exceptions import ValidationError + + +class OkrObjetivoLine(models.Model): + _name = "okr.key_result" + _description = "OKR key result" + _check_company_auto = True + + name = fields.Char(required=True) + description = fields.Char(required=True) + progress = fields.Integer(default=0, store=True) + weight = fields.Integer() + comments = fields.Char() + objective = fields.Many2one('okr.objective') + target = fields.Integer() + result = fields.Integer() + user_id = fields.Many2one('res.users', string="Responsible") + plan_de_accion = fields.Char() + interdependencies = fields.Many2many('hr.department') + realizado_en_el_q = fields.Char() + notas_proximo_q = fields.Char() diff --git a/okr/models/okr_objective.py b/okr/models/okr_objective.py new file mode 100644 index 00000000..7f5a18cd --- /dev/null +++ b/okr/models/okr_objective.py @@ -0,0 +1,35 @@ +from odoo import models, api, fields +import time +from odoo.exceptions import UserError + + +class OkrObjetivo(models.Model): + _name = "okr.objective" + _description = "OKR Objective" + _inherit = ['mail.thread', 'mail.activity.mixin'] + _check_company_auto = True + _rec_name = 'name' + + name = fields.Many2one('kr.ppal', required=True) + description = fields.Char(required=True) + department_id = fields.Many2one('hr.department') + progress = fields.Integer(compute='_compute_progress',help="Progress from zero knowledge (0%) to fully mastered (100%).", default=0, store=True) + weight = fields.Selection([('inspiracional', 'Inspiracional'), ('commitment', 'Commitment')]) + comments = fields.Char() + key_result_ids = fields.One2many('okr.key_result', 'objective') + period = fields.Selection([('q1', 'Q1'), ('q2', 'Q2'), ('q3', 'Q3'), ('q4', 'Q4')], required=True) + year = fields.Char( + required=True, + default=time.strftime('%Y'), + ) + user_id = fields.Many2one('res.users', string="Responsible") + company_id = fields.Many2one( + 'res.company', default=lambda self: self.env.company, + help="Company for whose invoices the mandate can be used.") + + @api.depends('key_result_ids') + def _compute_progress(self): + sumatory = sum(self.key_result_ids.mapped('progress')) or 0 + self.progress = sumatory + if sumatory > 100: + raise UserError("The sum of the objectives progress can´t be higher than 100") diff --git a/okr/security/ir.model.access.csv b/okr/security/ir.model.access.csv new file mode 100644 index 00000000..d0d746cc --- /dev/null +++ b/okr/security/ir.model.access.csv @@ -0,0 +1,7 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_kr_ppal_user,access_kr_ppal_user,model_kr_ppal,group_okr_user,1,1,1,1 +access_kr_ppal_manager,access_kr_ppal_manager,model_kr_ppal,group_okr_manager,1,1,1,1 +access_okr_key_result_user,access_okr_key_result_user,model_okr_key_result,group_okr_user,1,1,0,0 +access_okr_key_result_manager,access_okr_key_result_manager,model_okr_key_result,group_okr_manager,1,1,1,1 +access_okr_objective_user,access_okr_objective_user,model_okr_objective,group_okr_user,1,1,0,0 +access_okr_objective_manager,access_okr_objective_manager,model_okr_objective,group_okr_manager,1,1,1,1 diff --git a/okr/views/kr_ppal.xml b/okr/views/kr_ppal.xml new file mode 100644 index 00000000..33947ebc --- /dev/null +++ b/okr/views/kr_ppal.xml @@ -0,0 +1,35 @@ + + + + + kr.principales.tree + kr.ppal + + + + + + + + + + kr.principales.form + kr.ppal + +
+ + + + +
+ + + KR ppales + kr.ppal + tree,form + + + + + +
diff --git a/okr/views/okr_key_result.xml b/okr/views/okr_key_result.xml new file mode 100644 index 00000000..1b4a1c01 --- /dev/null +++ b/okr/views/okr_key_result.xml @@ -0,0 +1,26 @@ + + + + + Objetivo + okr.key_result + + + + + + + + + + + + + + + + + + + + diff --git a/okr/views/okr_objective.xml b/okr/views/okr_objective.xml new file mode 100644 index 00000000..fc33904b --- /dev/null +++ b/okr/views/okr_objective.xml @@ -0,0 +1,101 @@ + + + + + Objetivo + okr.objective + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+
+
+
+ + + Objetivo + okr.objective + + + + + + + + + + + + + + + + + + okr.objective.search + okr.objective + + + + + + + + + + Objective + okr.objective + tree,form + + {'search_default_group_by_department_id': True} + + + + + +