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}
+
+
+
+
+
+