[ADD] project_timebox: create addon to estimate task effort
Adds fields to estimate the min and max time needed to solve a task. Task: [JOI-13](https://justodooit.fr/mail/view?model=project.task&res_id=13&access_token=cca0b860-25d1-472d-9da1-76f68b01a932)
This commit is contained in:
47
project_timebox/README.rst
Normal file
47
project_timebox/README.rst
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
===============
|
||||||
|
project_timebox
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add timebox field in tasks to estimate resolution effort.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install ``project_timebox``.
|
||||||
|
To configure the timeboxes, go to Project > Configuration > Timeboxes
|
||||||
|
|
||||||
|
Known issues / Roadmap
|
||||||
|
======================
|
||||||
|
|
||||||
|
None yet.
|
||||||
|
|
||||||
|
Bug Tracker
|
||||||
|
===========
|
||||||
|
|
||||||
|
Bugs are tracked on `our issues website <https://github.com/elabore-coop/project-tools/issues>`_. In case of
|
||||||
|
trouble, please check there if your issue has already been
|
||||||
|
reported. If you spotted it first, help us smashing it by providing a
|
||||||
|
detailed and welcomed feedback.
|
||||||
|
|
||||||
|
Credits
|
||||||
|
=======
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Stéphan Sainléger (https://github.com/stephansainleger)
|
||||||
|
* Nicolas Jeudy (https://github.com/njeudy)
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
* Mycéliandre (https://myceliandre.fr)
|
||||||
|
* Lokavaluto (https://lokavaluto.fr)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This module is maintained by Elabore.
|
1
project_timebox/__init__.py
Normal file
1
project_timebox/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
92
project_timebox/__manifest__.py
Normal file
92
project_timebox/__manifest__.py
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
# Copyright 2022 Stéphan Sainléger (Elabore)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_timebox",
|
||||||
|
"version": "12.0.1.0.0",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://elabore.coop",
|
||||||
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Project",
|
||||||
|
"summary": "Add timebox field in tasks to estimate resolution effort.",
|
||||||
|
"description": """
|
||||||
|
:image: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||||
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
|
:alt: License: AGPL-3
|
||||||
|
===============
|
||||||
|
project_timebox
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add timebox field in tasks to estimate resolution effort.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install ``project_timebox``.
|
||||||
|
To configure the timeboxes, go to Project > Configuration > Timeboxes
|
||||||
|
|
||||||
|
Known issues / Roadmap
|
||||||
|
======================
|
||||||
|
|
||||||
|
None yet.
|
||||||
|
|
||||||
|
Bug Tracker
|
||||||
|
===========
|
||||||
|
|
||||||
|
Bugs are tracked on `our issues website <https://github.com/elabore-coop/project-tools/issues>`_. In case of
|
||||||
|
trouble, please check there if your issue has already been
|
||||||
|
reported. If you spotted it first, help us smashing it by providing a
|
||||||
|
detailed and welcomed feedback.
|
||||||
|
|
||||||
|
Credits
|
||||||
|
=======
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Stéphan Sainléger (https://github.com/stephansainleger)
|
||||||
|
* Nicolas Jeudy (https://github.com/njeudy)
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
* Mycéliandre (https://myceliandre.fr)
|
||||||
|
* Lokavaluto (https://lokavaluto.fr)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This module is maintained by Elabore.
|
||||||
|
|
||||||
|
""",
|
||||||
|
# any module necessary for this one to work correctly
|
||||||
|
"depends": [
|
||||||
|
"base",
|
||||||
|
"project",
|
||||||
|
],
|
||||||
|
"qweb": [
|
||||||
|
# "static/src/xml/*.xml",
|
||||||
|
],
|
||||||
|
"external_dependencies": {
|
||||||
|
"python": [],
|
||||||
|
},
|
||||||
|
# always loaded
|
||||||
|
"data": [
|
||||||
|
"security/ir.model.access.csv",
|
||||||
|
"views/project_task.xml",
|
||||||
|
"views/timebox.xml",
|
||||||
|
],
|
||||||
|
# only loaded in demonstration mode
|
||||||
|
"demo": [],
|
||||||
|
"js": [],
|
||||||
|
"css": [],
|
||||||
|
"installable": True,
|
||||||
|
# Install this module automatically if all dependency have been previously
|
||||||
|
# and independently installed. Used for synergetic or glue modules.
|
||||||
|
"auto_install": False,
|
||||||
|
"application": False,
|
||||||
|
}
|
1
project_timebox/i18n/README
Normal file
1
project_timebox/i18n/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This directory should contain the *.po for Odoo translation.
|
91
project_timebox/i18n/fr.po
Normal file
91
project_timebox/i18n/fr.po
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_timebox
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-08-01 09:34+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-08-01 09:34+0000\n"
|
||||||
|
"Last-Translator: \n"
|
||||||
|
"Language-Team: \n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: \n"
|
||||||
|
"Plural-Forms: \n"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__create_uid
|
||||||
|
msgid "Created by"
|
||||||
|
msgstr "Créé par"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__create_date
|
||||||
|
msgid "Created on"
|
||||||
|
msgstr "Créé le"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_project_task__display_name
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr "Nom affiché"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_project_task__id
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_project_task____last_update
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox____last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr "Dernière modification le"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__write_uid
|
||||||
|
msgid "Last Updated by"
|
||||||
|
msgstr "Dernière mise à jour par"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__write_date
|
||||||
|
msgid "Last Updated on"
|
||||||
|
msgstr "Dernière mise à jour le"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__sequence
|
||||||
|
msgid "Sequence"
|
||||||
|
msgstr "Séquence"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model,name:project_timebox.model_project_task
|
||||||
|
msgid "Task"
|
||||||
|
msgstr "Tâche"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model,name:project_timebox.model_timebox
|
||||||
|
msgid "Timebox"
|
||||||
|
msgstr "Estimation"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_project_task__timebox_max_id
|
||||||
|
msgid "Timebox Max"
|
||||||
|
msgstr "Estimation haute"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_project_task__timebox_min_id
|
||||||
|
msgid "Timebox Min"
|
||||||
|
msgstr "Estimation basse"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.actions.act_window,name:project_timebox.act_timeboxes_list
|
||||||
|
#: model:ir.ui.menu,name:project_timebox.menu_timeboxes
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_timebox.timebox_view_tree
|
||||||
|
msgid "Timeboxes"
|
||||||
|
msgstr "Estimations"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__name
|
||||||
|
msgid "name"
|
||||||
|
msgstr "nom"
|
2
project_timebox/models/__init__.py
Normal file
2
project_timebox/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from . import timebox
|
||||||
|
from . import project_task
|
9
project_timebox/models/project_task.py
Normal file
9
project_timebox/models/project_task.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class Task(models.Model):
|
||||||
|
_inherit = "project.task"
|
||||||
|
|
||||||
|
timebox_min_id = fields.Many2one('timebox', string='Timebox Min')
|
||||||
|
timebox_max_id = fields.Many2one('timebox', string='Timebox Max')
|
9
project_timebox/models/timebox.py
Normal file
9
project_timebox/models/timebox.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class Task(models.Model):
|
||||||
|
_name = "timebox"
|
||||||
|
_description = "Timebox"
|
||||||
|
|
||||||
|
name = fields.Char('name', required=True)
|
||||||
|
sequence = fields.Integer()
|
3
project_timebox/security/ir.model.access.csv
Normal file
3
project_timebox/security/ir.model.access.csv
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_timebox_user,project.timebox.user,model_timebox,,1,0,0,0
|
||||||
|
access_timebox_manager,project.timebox.manager,model_timebox,project.group_project_manager,1,1,1,1
|
|
15
project_timebox/views/project_task.xml
Normal file
15
project_timebox/views/project_task.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_task_form2_timebox" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.form.timebox</field>
|
||||||
|
<field name="model">project.task</field>
|
||||||
|
<field name="inherit_id" ref="project.view_task_form2" />
|
||||||
|
<field name="priority" eval="99" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='date_deadline']" position="after">
|
||||||
|
<field name="timebox_min_id" widget="selection" />
|
||||||
|
<field name="timebox_max_id" widget="selection" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
23
project_timebox/views/timebox.xml
Normal file
23
project_timebox/views/timebox.xml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="timebox_view_tree" model="ir.ui.view">
|
||||||
|
<field name="name">timebox.view.tree</field>
|
||||||
|
<field name="model">timebox</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Timeboxes" editable="top" default_order="sequence">
|
||||||
|
<field name="sequence" widget="handle" />
|
||||||
|
<field name="name" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="act_timeboxes_list" model="ir.actions.act_window">
|
||||||
|
<field name="name">Timeboxes</field>
|
||||||
|
<field name="res_model">timebox</field>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_timeboxes" action="act_timeboxes_list" parent="project.menu_project_config" sequence="99" name="Timeboxes" />
|
||||||
|
|
||||||
|
</odoo>
|
Reference in New Issue
Block a user