diff --git a/.docker_files/main/__manifest__.py b/.docker_files/main/__manifest__.py index 539880fc..de8998bc 100644 --- a/.docker_files/main/__manifest__.py +++ b/.docker_files/main/__manifest__.py @@ -14,6 +14,7 @@ "project", "project_task_date_planned", "project_task_full_text_search", + "project_task_resource_type", "project_type_advanced", "project_default_task_stage", "project_stage_allow_timesheet", diff --git a/Dockerfile b/Dockerfile index 5396fbbb..beb2c7dd 100644 --- a/Dockerfile +++ b/Dockerfile @@ -16,6 +16,7 @@ USER odoo COPY project_stage_allow_timesheet mnt/extra-addons/project_stage_allow_timesheet COPY project_task_date_planned /mnt/extra-addons/project_task_date_planned COPY project_task_full_text_search /mnt/extra-addons/project_task_full_text_search +COPY project_task_resource_type /mnt/extra-addons/project_task_resource_type COPY project_type_advanced /mnt/extra-addons/project_type_advanced COPY project_default_task_stage /mnt/extra-addons/project_default_task_stage diff --git a/project_task_resource_type/README.rst b/project_task_resource_type/README.rst new file mode 100644 index 00000000..358cea83 --- /dev/null +++ b/project_task_resource_type/README.rst @@ -0,0 +1,35 @@ +================================ +Project Task Resource Type +================================ +This module adds a new model for Resources and a field to associate resources with tasks. + +Resources can be defined in **Project > Configuration > Resources**. + +.. image:: static/description/menu.png + :alt: Resource Menu + :align: center + +From there, you can create a new resource type: + +.. image:: static/description/resource_form_view.png + :alt: Resource Form View + :align: center + +Once a resource type is created, you can assign it to a task: + +.. image:: static/description/task_form_view.png + :alt: Task Form View + :align: center + +Usage +----- +* Navigate to **Projects / Configuration / Resources** to define a resource type. +* Create a new resource type and assign it to tasks through the task form. + +Contributors +------------ +* Numigi (tm) and all its contributors (https://bit.ly/numigiens) + +More Information +---------------- +* Meet us at https://bit.ly/numigi-com diff --git a/project_task_resource_type/__init__.py b/project_task_resource_type/__init__.py new file mode 100644 index 00000000..01e87973 --- /dev/null +++ b/project_task_resource_type/__init__.py @@ -0,0 +1,4 @@ +# Copyright 2024 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/project_task_resource_type/__manifest__.py b/project_task_resource_type/__manifest__.py new file mode 100644 index 00000000..8f3e06da --- /dev/null +++ b/project_task_resource_type/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2024 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +{ + "name": "Project Task Resource Type", + "version": "16.0.1.0.0", + "description": "Add the referentiel Resource and the field to the tasks.", + "author": "Numigi", + "maintainer": "Numigi", + "website": "https://bit.ly/numigi-com", + "license": "LGPL-3", + "category": "Project", + "depends": ["project"], + "data": [ + "security/ir.model.access.csv", + "views/project_resource_views.xml", + "views/project_task_views.xml", + ], + "application": False, + "license": "LGPL-3", + "installable": True, +} diff --git a/project_task_resource_type/i18n/fr.po b/project_task_resource_type/i18n/fr.po new file mode 100644 index 00000000..876ad252 --- /dev/null +++ b/project_task_resource_type/i18n/fr.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * project_task_resource_type +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-11-26 11:32+0000\n" +"PO-Revision-Date: 2024-11-26 11:32+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_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_needaction +msgid "Action Needed" +msgstr "Nécessite une action" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_attachment_count +msgid "Attachment Count" +msgstr "Nombre de pièces jointes" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__create_uid +msgid "Created by" +msgstr "Crée par" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__create_date +msgid "Created on" +msgstr "Créé le" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_follower_ids +msgid "Followers" +msgstr "Abonnés" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_partner_ids +msgid "Followers (Partners)" +msgstr "Abonnés (Partenaires)" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__has_message +msgid "Has Message" +msgstr "A un message" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__id +msgid "ID" +msgstr "" + +#. module: project_task_resource_type +#: model:ir.model.fields,help:project_task_resource_type.field_project_resource__message_needaction +msgid "If checked, new messages require your attention." +msgstr "Si coché, de nouveaux messages demandent votre attention." + +#. module: project_task_resource_type +#: model:ir.model.fields,help:project_task_resource_type.field_project_resource__message_has_error +#: model:ir.model.fields,help:project_task_resource_type.field_project_resource__message_has_sms_error +msgid "If checked, some messages have a delivery error." +msgstr "Si coché, certains messages ont une erreur de livraison." + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_is_follower +msgid "Is Follower" +msgstr "Est un abonné" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource____last_update +msgid "Last Modified on" +msgstr "Dernière modification le" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__write_date +msgid "Last Updated on" +msgstr "Dernière mise à jour le" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_main_attachment_id +msgid "Main Attachment" +msgstr "Pièce jointe principale" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_has_error +msgid "Message Delivery error" +msgstr "Erreur d'envoi du message" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_ids +msgid "Messages" +msgstr "" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__name +msgid "Name" +msgstr "Nom" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_needaction_counter +msgid "Number of Actions" +msgstr "Nombre d'actions" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_has_error_counter +msgid "Number of errors" +msgstr "Nombre d'erreurs" + +#. module: project_task_resource_type +#: model:ir.model.fields,help:project_task_resource_type.field_project_resource__message_needaction_counter +msgid "Number of messages requiring action" +msgstr "Nombre de messages nécessitant une action" + +#. module: project_task_resource_type +#: model:ir.model.fields,help:project_task_resource_type.field_project_resource__message_has_error_counter +msgid "Number of messages with delivery error" +msgstr "Nombre de messages avec des erreurs d'envoi" + +#. module: project_task_resource_type +#: model:ir.model,name:project_task_resource_type.model_project_resource +msgid "Project Resource" +msgstr "" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_task__resource_id +msgid "Resource" +msgstr "Ressource" + +#. module: project_task_resource_type +#: model:ir.actions.act_window,name:project_task_resource_type.action_project_resource +msgid "Resources" +msgstr "Ressources" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__message_has_sms_error +msgid "SMS Delivery error" +msgstr "Erreur d'envoi SMS" + +#. module: project_task_resource_type +#: model:ir.model,name:project_task_resource_type.model_project_task +msgid "Task" +msgstr "Tâche" + +#. module: project_task_resource_type +#: model_terms:ir.ui.view,arch_db:project_task_resource_type.project_resource_form +msgid "Task Resource" +msgstr "Ressource de tâche" + +#. module: project_task_resource_type +#: model:ir.ui.menu,name:project_task_resource_type.task_resources +#: model_terms:ir.ui.view,arch_db:project_task_resource_type.project_resource_tree +msgid "Task Resources" +msgstr "Ressources de tâches" + +#. module: project_task_resource_type +#: model:ir.model.fields,field_description:project_task_resource_type.field_project_resource__website_message_ids +msgid "Website Messages" +msgstr "Messages du site web" + +#. module: project_task_resource_type +#: model:ir.model.fields,help:project_task_resource_type.field_project_resource__website_message_ids +msgid "Website communication history" +msgstr "Historique de communication du site web" diff --git a/project_task_resource_type/models/__init__.py b/project_task_resource_type/models/__init__.py new file mode 100644 index 00000000..5335a74a --- /dev/null +++ b/project_task_resource_type/models/__init__.py @@ -0,0 +1,5 @@ +# Copyright 2024 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import project_resource +from . import project_task diff --git a/project_task_resource_type/models/project_resource.py b/project_task_resource_type/models/project_resource.py new file mode 100644 index 00000000..4a4c5ed9 --- /dev/null +++ b/project_task_resource_type/models/project_resource.py @@ -0,0 +1,12 @@ +# Copyright 2024 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields + + +class ProjectResource(models.Model): + _name = "project.resource" + _inherit = ["mail.thread"] + _description = "Project Resource" + + name = fields.Char(string="Name") diff --git a/project_task_resource_type/models/project_task.py b/project_task_resource_type/models/project_task.py new file mode 100644 index 00000000..363db8cf --- /dev/null +++ b/project_task_resource_type/models/project_task.py @@ -0,0 +1,10 @@ +# Copyright 2024 Numigi (tm) and all its contributors (https://bit.ly/numigiens) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import models, fields + + +class ProjectTask(models.Model): + _inherit = "project.task" + + resource_id = fields.Many2one("project.resource") diff --git a/project_task_resource_type/security/ir.model.access.csv b/project_task_resource_type/security/ir.model.access.csv new file mode 100644 index 00000000..82042b7a --- /dev/null +++ b/project_task_resource_type/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 +access_project_resource,access_project_resource,model_project_resource,base.group_user,1,0,0,0 +access_project_resource_admin,access_project_resource,model_project_resource,project.group_project_manager,1,1,1,1 diff --git a/project_task_resource_type/static/description/icon.png b/project_task_resource_type/static/description/icon.png new file mode 100644 index 00000000..92a86b10 Binary files /dev/null and b/project_task_resource_type/static/description/icon.png differ diff --git a/project_task_resource_type/static/description/menu.png b/project_task_resource_type/static/description/menu.png new file mode 100644 index 00000000..38a8a514 Binary files /dev/null and b/project_task_resource_type/static/description/menu.png differ diff --git a/project_task_resource_type/static/description/resource_form_view.png b/project_task_resource_type/static/description/resource_form_view.png new file mode 100644 index 00000000..dee1e515 Binary files /dev/null and b/project_task_resource_type/static/description/resource_form_view.png differ diff --git a/project_task_resource_type/static/description/task_form_view.png b/project_task_resource_type/static/description/task_form_view.png new file mode 100644 index 00000000..9a39f636 Binary files /dev/null and b/project_task_resource_type/static/description/task_form_view.png differ diff --git a/project_task_resource_type/views/project_resource_views.xml b/project_task_resource_type/views/project_resource_views.xml new file mode 100644 index 00000000..26742717 --- /dev/null +++ b/project_task_resource_type/views/project_resource_views.xml @@ -0,0 +1,43 @@ + + + + + project.resource + +
+ +
+
+
+
+
+
+ + + project.resource + + + + + + + + + Resources + project.resource + tree,form + + + + +
diff --git a/project_task_resource_type/views/project_task_views.xml b/project_task_resource_type/views/project_task_views.xml new file mode 100644 index 00000000..4d7c6d0c --- /dev/null +++ b/project_task_resource_type/views/project_task_views.xml @@ -0,0 +1,25 @@ + + + + + project.task + + + + + + + + + + Task Search: allow to search by resource + project.task + + + + + + + + +