diff --git a/project_milestone_usability/README.rst b/project_milestone_usability/README.rst new file mode 100644 index 00000000..e11b54e2 --- /dev/null +++ b/project_milestone_usability/README.rst @@ -0,0 +1,54 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://opensource.org/licenses/AGPL-3.0 + :alt: License: AGPL-3 + +=========================== +Project Milestone Usability +=========================== + +This module improves the usability of project milestones in Odoo. + +**Features** + +- Menu under Project → Tasks to access Milestones. +- Extends the milestone list view with billable status, completion status, task counts, missing tasks, UoM, quantities, project, customer, quantity percentage, reached date, sale line info, and deadline indicators (future/exceeded). Project and Customer columns are read-only here. +- Stored computed field "Missing Tasks" (task_count - done_task_count). +- Search view adds filters for Project, Customer, and "Has Missing Tasks" (> 0), plus group by Project and Customer. + +**Quick usage** + +1. Go to Project → Tasks → Milestones. +2. Use the list view columns (optional show) to review/edit milestones; project/customer stay read-only. +3. Filter by "Has Missing Tasks" to focus on pending work; group by Project or Customer as needed. + +**Technical details** + +- Model extension: `project.milestone` (stored computed `tasks_missing`). +- Views: inherits the milestone list and adds a search view with filters/groups. +- Action & menu: milestones action with list/form; menu under `project.menu_project_management`. +- Dependencies: `project`, `sale_management`, `sale_project`. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. + +Credits +======= + +Authors +------- + +* AvanzOSC + +Contributors +------------ + +* Aner Arregi +* Ana Juaristi + +Maintainer +---------- + +This module is maintained by AvanzOSC. diff --git a/project_milestone_usability/README.rts b/project_milestone_usability/README.rts new file mode 100644 index 00000000..e11b54e2 --- /dev/null +++ b/project_milestone_usability/README.rts @@ -0,0 +1,54 @@ +.. image:: https://img.shields.io/badge/license-AGPL--3-blue.svg + :target: https://opensource.org/licenses/AGPL-3.0 + :alt: License: AGPL-3 + +=========================== +Project Milestone Usability +=========================== + +This module improves the usability of project milestones in Odoo. + +**Features** + +- Menu under Project → Tasks to access Milestones. +- Extends the milestone list view with billable status, completion status, task counts, missing tasks, UoM, quantities, project, customer, quantity percentage, reached date, sale line info, and deadline indicators (future/exceeded). Project and Customer columns are read-only here. +- Stored computed field "Missing Tasks" (task_count - done_task_count). +- Search view adds filters for Project, Customer, and "Has Missing Tasks" (> 0), plus group by Project and Customer. + +**Quick usage** + +1. Go to Project → Tasks → Milestones. +2. Use the list view columns (optional show) to review/edit milestones; project/customer stay read-only. +3. Filter by "Has Missing Tasks" to focus on pending work; group by Project or Customer as needed. + +**Technical details** + +- Model extension: `project.milestone` (stored computed `tasks_missing`). +- Views: inherits the milestone list and adds a search view with filters/groups. +- Action & menu: milestones action with list/form; menu under `project.menu_project_management`. +- Dependencies: `project`, `sale_management`, `sale_project`. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. + +Credits +======= + +Authors +------- + +* AvanzOSC + +Contributors +------------ + +* Aner Arregi +* Ana Juaristi + +Maintainer +---------- + +This module is maintained by AvanzOSC. diff --git a/project_milestone_usability/__init__.py b/project_milestone_usability/__init__.py new file mode 100644 index 00000000..0650744f --- /dev/null +++ b/project_milestone_usability/__init__.py @@ -0,0 +1 @@ +from . import models diff --git a/project_milestone_usability/__manifest__.py b/project_milestone_usability/__manifest__.py new file mode 100644 index 00000000..36623f32 --- /dev/null +++ b/project_milestone_usability/__manifest__.py @@ -0,0 +1,18 @@ +# Copyright 2025 Aner Arregi - AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +{ + "name": "Project Milestone Usability", + "version": "18.0.1.0.0", + "category": "Project", + "summary": "Expose project milestones list with extra fields and filters", + "depends": ["project", "sale_management", "sale_project"], + "data": [ + "views/project_milestone_views.xml", + ], + "application": False, + "installable": True, + "auto_install": False, + "author": "AvanzOSC", + "license": "AGPL-3", + "website": "https://github.com/avanzosc/project-addons", +} diff --git a/project_milestone_usability/i18n/es.po b/project_milestone_usability/i18n/es.po new file mode 100644 index 00000000..49945e37 --- /dev/null +++ b/project_milestone_usability/i18n/es.po @@ -0,0 +1,76 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_milestone_usability +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-18 00:00+0000\n" +"PO-Revision-Date: 2025-12-18 00:00+0000\n" +"Last-Translator: \n" +"Language-Team: Spanish\n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: project_milestone_usability +#: model:ir.ui.menu,menu_project_milestone +#: model:ir.actions.act_window,name:project_milestone_usability.action_project_milestone +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Milestones" +msgstr "Hitos" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Has Missing Tasks" +msgstr "Tiene tareas faltantes" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Project" +msgstr "Proyecto" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Customer" +msgstr "Cliente" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_tree_enhanced +msgid "Tasks" +msgstr "Tareas" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_tree_enhanced +msgid "Done Tasks" +msgstr "Tareas hechas" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_tree_enhanced +#: model:ir.model.fields,field_description:project_milestone_usability.field_project_milestone_tasks_missing +msgid "Missing Tasks" +msgstr "Tareas faltantes" + +#. module: project_milestone_usability +#: model:ir.model.fields,help:project_milestone_usability.field_project_milestone_tasks_missing +msgid "Difference between total tasks and completed tasks." +msgstr "Diferencia entre el total de tareas y las tareas completadas." + +#. module: project_milestone_usability +#: model:ir.model,name:project_milestone_usability.model_project_milestone +msgid "Project Milestone" +msgstr "Hito de proyecto" + +#. module: project_milestone_usability +#: model:ir.ui.view,name:project_milestone_usability.view_project_milestone_tree_enhanced +msgid "project.milestone.tree.enhanced" +msgstr "project.milestone.tree.enhanced" + +#. module: project_milestone_usability +#: model:ir.ui.view,name:project_milestone_usability.view_project_milestone_search_enhanced +msgid "project.milestone.search.enhanced" +msgstr "project.milestone.search.enhanced" + diff --git a/project_milestone_usability/i18n/project_milestone_usability.pot b/project_milestone_usability/i18n/project_milestone_usability.pot new file mode 100644 index 00000000..a096ec7a --- /dev/null +++ b/project_milestone_usability/i18n/project_milestone_usability.pot @@ -0,0 +1,75 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_milestone_usability +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-12-18 00:00+0000\n" +"PO-Revision-Date: 2025-12-18 00:00+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: project_milestone_usability +#: model:ir.ui.menu,menu_project_milestone +#: model:ir.actions.act_window,name:project_milestone_usability.action_project_milestone +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Milestones" +msgstr "" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Has Missing Tasks" +msgstr "" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Project" +msgstr "" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_search_enhanced +msgid "Customer" +msgstr "" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_tree_enhanced +msgid "Tasks" +msgstr "" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_tree_enhanced +msgid "Done Tasks" +msgstr "" + +#. module: project_milestone_usability +#: model_terms:ir.ui.view,arch_db:project_milestone_usability.view_project_milestone_tree_enhanced +#: model:ir.model.fields,field_description:project_milestone_usability.field_project_milestone_tasks_missing +msgid "Missing Tasks" +msgstr "" + +#. module: project_milestone_usability +#: model:ir.model.fields,help:project_milestone_usability.field_project_milestone_tasks_missing +msgid "Difference between total tasks and completed tasks." +msgstr "" + +#. module: project_milestone_usability +#: model:ir.model,name:project_milestone_usability.model_project_milestone +msgid "Project Milestone" +msgstr "" + +#. module: project_milestone_usability +#: model:ir.ui.view,name:project_milestone_usability.view_project_milestone_tree_enhanced +msgid "project.milestone.tree.enhanced" +msgstr "" + +#. module: project_milestone_usability +#: model:ir.ui.view,name:project_milestone_usability.view_project_milestone_search_enhanced +msgid "project.milestone.search.enhanced" +msgstr "" + diff --git a/project_milestone_usability/models/__init__.py b/project_milestone_usability/models/__init__.py new file mode 100644 index 00000000..641b2d6c --- /dev/null +++ b/project_milestone_usability/models/__init__.py @@ -0,0 +1 @@ +from . import milestone diff --git a/project_milestone_usability/models/milestone.py b/project_milestone_usability/models/milestone.py new file mode 100644 index 00000000..c7e3bf1c --- /dev/null +++ b/project_milestone_usability/models/milestone.py @@ -0,0 +1,22 @@ +# Copyright 2025 AvanzOSC +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from odoo import api, fields, models + + +class ProjectMilestone(models.Model): + _inherit = "project.milestone" + + tasks_missing = fields.Integer( + string="Missing Tasks", + compute="_compute_tasks_missing", + store=True, + help="Difference between total tasks and completed tasks.", + ) + + @api.depends("task_count", "done_task_count") + def _compute_tasks_missing(self): + for milestone in self: + milestone.tasks_missing = (milestone.task_count or 0) - ( + milestone.done_task_count or 0 + ) diff --git a/project_milestone_usability/pyproject.toml b/project_milestone_usability/pyproject.toml new file mode 100644 index 00000000..4231d0cc --- /dev/null +++ b/project_milestone_usability/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/project_milestone_usability/views/project_milestone_views.xml b/project_milestone_usability/views/project_milestone_views.xml new file mode 100644 index 00000000..685bca3e --- /dev/null +++ b/project_milestone_usability/views/project_milestone_views.xml @@ -0,0 +1,74 @@ + + + + project.milestone.tree.enhanced + project.milestone + + + + + + + + + + + + + + + + + + + + + + + project.milestone.search.enhanced + project.milestone + + + + + + + + + + + + + + Milestones + project.milestone + list,form + + + + + +