Compare commits
9 Commits
12.0
...
14.0-proje
Author | SHA1 | Date | |
---|---|---|---|
|
139e451d0c | ||
|
11d99ae6e0 | ||
|
2bd9234fa1 | ||
|
892a526df8 | ||
|
87bdd51043 | ||
|
309f8d4510 | ||
|
56f757505b | ||
|
1f8baa73d1 | ||
|
c4ef88d3d4 |
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.*~
|
||||||
|
*.pyc
|
45
project_assignees/README.rst
Normal file
45
project_assignees/README.rst
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
=================
|
||||||
|
project_assignees
|
||||||
|
=================
|
||||||
|
|
||||||
|
Add multiple assignees field to project task
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal procedure to install add-ons to install
|
||||||
|
``project_assignees``.
|
||||||
|
|
||||||
|
Known issues / Roadmap
|
||||||
|
======================
|
||||||
|
|
||||||
|
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
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This module is maintained by Elabore.
|
3
project_assignees/__init__.py
Normal file
3
project_assignees/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import models
|
93
project_assignees/__manifest__.py
Normal file
93
project_assignees/__manifest__.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# Copyright 2022 Stéphan Sainléger (Elabore)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_assignees",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://github.com/elabore-coop/project-tools",
|
||||||
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Tools",
|
||||||
|
"summary": "Add multiple assignees field to project task",
|
||||||
|
"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_assignees
|
||||||
|
=================
|
||||||
|
|
||||||
|
Add multiple assignees field to project task.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Install ``project_assignees``, all dependencies will be installed by default.
|
||||||
|
|
||||||
|
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
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
|
||||||
|
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
|
||||||
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
|
* Valentin Lab <valentin.lab@kalysto.org>
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
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": [
|
||||||
|
"views/project_task.xml",
|
||||||
|
"views/portal_template.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_assignees/i18n/README
Normal file
1
project_assignees/i18n/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This directory should contain the *.po for Odoo translation.
|
32
project_assignees/i18n/fr.po
Normal file
32
project_assignees/i18n/fr.po
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_assignees
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-07-26 07:38+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-07-26 07:38+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_assignees
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_assignees.portal_my_task_timebox
|
||||||
|
msgid "<strong>Other assignements</strong>"
|
||||||
|
msgstr "<strong>Autres intervenants</strong>"
|
||||||
|
|
||||||
|
#. module: project_assignees
|
||||||
|
#: model:ir.model.fields,field_description:project_assignees.field_project_task__assignee_ids |
|
||||||
|
msgid "Assignees" |
|
||||||
|
msgstr "Autres assignations"
|
||||||
|
|
||||||
|
#. module: project_assignees
|
||||||
|
#: model:ir.model,name:project_assignees.model_project_task
|
||||||
|
msgid "Task"
|
||||||
|
msgstr "Tâche"
|
||||||
|
|
2
project_assignees/models/__init__.py
Normal file
2
project_assignees/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
from . import project_task
|
9
project_assignees/models/project_task.py
Normal file
9
project_assignees/models/project_task.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class Task(models.Model):
|
||||||
|
_inherit = "project.task"
|
||||||
|
|
||||||
|
assignee_ids = fields.Many2many('res.users', 'assignee_ids_rel', string='Assignees')
|
||||||
|
|
25
project_assignees/views/portal_template.xml
Normal file
25
project_assignees/views/portal_template.xml
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<template id="portal_my_task_assignees" name="My Task: Assignees" inherit_id="project.portal_my_task" priority="40">
|
||||||
|
<xpath expr="//div[hasclass('flex-grow-0')]/../../.." position="inside">
|
||||||
|
<div class="col-12 col-md-6 pb-2" t-if="task.assignee_ids">
|
||||||
|
<strong>Other assignees</strong>
|
||||||
|
<div class="row">
|
||||||
|
<t t-foreach="task.assignee_ids" t-as="assignee">
|
||||||
|
<div class="col flex-grow-0 pr-3">
|
||||||
|
<img t-if="assignee.image" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(assignee.image)" alt="Contact" />
|
||||||
|
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact" />
|
||||||
|
</div>
|
||||||
|
<div class="col pl-md-0">
|
||||||
|
<strong>
|
||||||
|
<span t-field="assignee.name" />
|
||||||
|
</strong>
|
||||||
|
<span t-field="assignee.email" />
|
||||||
|
<span t-field="assignee.phone" />
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</odoo>
|
26
project_assignees/views/project_task.xml
Normal file
26
project_assignees/views/project_task.xml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_task_form2_assignees" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.form.assignees</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='user_id']" position="after">
|
||||||
|
<field name="assignee_ids" widget="many2many_tags" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_task_search_form_assignees" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.search.form.assignees</field>
|
||||||
|
<field name="model">project.task</field>
|
||||||
|
<field name="inherit_id" ref="project.view_task_search_form" />
|
||||||
|
<field name="priority" eval="99" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<filter name="my_tasks" position="attributes">
|
||||||
|
<attribute name="domain">['|', ('user_id', '=', uid), ('assignee_ids', 'in', uid)]</attribute>
|
||||||
|
</filter>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
46
project_funders/README.rst
Normal file
46
project_funders/README.rst
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
: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_funders
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add list of funder and corresponding amount to project task.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install
|
||||||
|
``project_funders``.
|
||||||
|
|
||||||
|
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
|
||||||
|
------------
|
||||||
|
* Nicolas Jeudy <https://github.com/njeudy>
|
||||||
|
* Valentin Lab
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Alusage (https://alusage.fr)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
This module is maintained by Alusage and Elabore.
|
1
project_funders/__init__.py
Normal file
1
project_funders/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
87
project_funders/__manifest__.py
Normal file
87
project_funders/__manifest__.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
# Copyright 2022 Nicolas Jeudy (Alusage)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_funders",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"author": "Alusage",
|
||||||
|
"website": "https://alusage.fr",
|
||||||
|
"data": [
|
||||||
|
# "security/security.xml",
|
||||||
|
# "security/ir.model.access.csv",
|
||||||
|
# "views/menu.xml",
|
||||||
|
# "data/data.xml",
|
||||||
|
],
|
||||||
|
"author": "Alusage, Elabore",
|
||||||
|
"maintainer": "Nicolas Jeudy",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Tools",
|
||||||
|
"summary": " Odoo module.",
|
||||||
|
"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_funders
|
||||||
|
===============
|
||||||
|
|
||||||
|
Add list of funder and corresponding amount to project task.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install
|
||||||
|
``project_funders``.
|
||||||
|
|
||||||
|
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
|
||||||
|
------------
|
||||||
|
* Nicolas Jeudy <https://github.com/njeudy>
|
||||||
|
* Valentin Lab
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Alusage (https://alusage.fr)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
This module is maintained by Alusage and 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_view.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_funders/i18n/README
Normal file
1
project_funders/i18n/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This directory should contain the *.po for Odoo translation.
|
105
project_funders/i18n/fr.po
Normal file
105
project_funders/i18n/fr.po
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_funders
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-07-26 06:53+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-07-26 06:53+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_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__amount_total
|
||||||
|
msgid "Amount Total"
|
||||||
|
msgstr "Montant total"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__create_uid
|
||||||
|
msgid "Created by"
|
||||||
|
msgstr "Créé par"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__create_date
|
||||||
|
msgid "Created on"
|
||||||
|
msgstr "Créé le"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__display_name
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr "Nom affiché"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__partner_id
|
||||||
|
msgid "Funder"
|
||||||
|
msgstr "Financeur"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model,name:project_funders.model_project_funder
|
||||||
|
msgid "Funder and amount for tasks"
|
||||||
|
msgstr "Financeur et montant sur les taches"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_funders.view_task_form2_inherit_project
|
||||||
|
msgid "Funder(s)"
|
||||||
|
msgstr "Financeur(s)"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_funders.view_task_kanban_inherit_project_funders
|
||||||
|
msgid "Funds:"
|
||||||
|
msgstr "Fonds :"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__id
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr "ID"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder____last_update
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task____last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr "Dernière modification le"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__write_uid
|
||||||
|
msgid "Last Updated by"
|
||||||
|
msgstr "Derniere modifiation par"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__write_date
|
||||||
|
msgid "Last Updated on"
|
||||||
|
msgstr "Dernière mise à jour le"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__name
|
||||||
|
msgid "Name"
|
||||||
|
msgstr "Nom"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model,name:project_funders.model_project_task
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__task_id
|
||||||
|
msgid "Task"
|
||||||
|
msgstr "Tâche"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_funders.view_task_form2_inherit_project
|
||||||
|
msgid "Total"
|
||||||
|
msgstr "Total"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__amount
|
||||||
|
msgid "Untaxed Amount"
|
||||||
|
msgstr "Montant HT"
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__funder_ids
|
||||||
|
msgid "funder"
|
||||||
|
msgstr "Financeur"
|
105
project_funders/i18n/project_funders.pot
Normal file
105
project_funders/i18n/project_funders.pot
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_funders
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-07-26 07:41+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-07-26 07:41+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_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__amount_total
|
||||||
|
msgid "Amount Total"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__create_uid
|
||||||
|
msgid "Created by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__create_date
|
||||||
|
msgid "Created on"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__display_name
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__partner_id
|
||||||
|
msgid "Funder"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model,name:project_funders.model_project_funder
|
||||||
|
msgid "Funder and amount for tasks"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_funders.view_task_form2_inherit_project
|
||||||
|
msgid "Funder(s)"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_funders.view_task_kanban_inherit_project_funders
|
||||||
|
msgid "Funds:"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__id
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder____last_update
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task____last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__write_uid
|
||||||
|
msgid "Last Updated by"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__write_date
|
||||||
|
msgid "Last Updated on"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__name
|
||||||
|
msgid "Name"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model,name:project_funders.model_project_task
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__task_id
|
||||||
|
msgid "Task"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_funders.view_task_form2_inherit_project
|
||||||
|
msgid "Total"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_funder__amount
|
||||||
|
msgid "Untaxed Amount"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_funders
|
||||||
|
#: model:ir.model.fields,field_description:project_funders.field_project_task__funder_ids
|
||||||
|
msgid "funder"
|
||||||
|
msgstr ""
|
2
project_funders/models/__init__.py
Normal file
2
project_funders/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
from . import project_funders
|
||||||
|
from . import project_task
|
16
project_funders/models/project_funders.py
Normal file
16
project_funders/models/project_funders.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
from odoo import _, api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectFunders(models.Model):
|
||||||
|
_name = "project.funder"
|
||||||
|
_description = "Funder and amount for tasks"
|
||||||
|
|
||||||
|
name = fields.Char(compute="_compute_name", string="Name")
|
||||||
|
partner_id = fields.Many2one("res.partner", string="Funder", required=True)
|
||||||
|
amount = fields.Float("Untaxed Amount", required=True)
|
||||||
|
task_id = fields.Many2one("project.task", string="Task")
|
||||||
|
|
||||||
|
@api.depends("partner_id", "amount")
|
||||||
|
def _compute_name(self):
|
||||||
|
for record in self:
|
||||||
|
record.name = "%s (%s)" % (record.partner_id.name, record.amount)
|
13
project_funders/models/project_task.py
Normal file
13
project_funders/models/project_task.py
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
from odoo import _, api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class ProjectTask(models.Model):
|
||||||
|
_inherit = "project.task"
|
||||||
|
|
||||||
|
funder_ids = fields.One2many("project.funder", "task_id", string="funder")
|
||||||
|
amount_total = fields.Float(compute="_compute_amount_total", string="Amount Total")
|
||||||
|
|
||||||
|
@api.depends("funder_ids")
|
||||||
|
def _compute_amount_total(self):
|
||||||
|
for record in self:
|
||||||
|
record.amount_total = sum(record.funder_ids.mapped("amount"))
|
2
project_funders/security/ir.model.access.csv
Normal file
2
project_funders/security/ir.model.access.csv
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_project_funder_all,project.funder.all,model_project_funder,,1,1,1,1
|
|
47
project_funders/views/project_task_view.xml
Normal file
47
project_funders/views/project_task_view.xml
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="view_task_form2_inherit_project" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.view.form.inherit</field>
|
||||||
|
<field name="model">project.task</field>
|
||||||
|
<field name="inherit_id" ref="project.view_task_form2"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//notebook" position="inside">
|
||||||
|
<page name="funders" string="Funder(s)">
|
||||||
|
<field name="funder_ids" context="{'default_task_id': active_id}">
|
||||||
|
<tree editable="bottom">
|
||||||
|
<field name="task_id" invisible="1"/>
|
||||||
|
<field name="partner_id"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
<group>
|
||||||
|
<group class="oe_subtotal_footer oe_right" name="project_hours">
|
||||||
|
<span>
|
||||||
|
<label class="font-weight-bold" for="amount_total" string="Total"/>
|
||||||
|
</span>
|
||||||
|
<field name="amount_total" nolabel="1"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_task_kanban_inherit_project_funders" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.view.kanban.inherit</field>
|
||||||
|
<field name="model">project.task</field>
|
||||||
|
<field name="inherit_id" ref="project.view_task_kanban"/>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name="active" position="after">
|
||||||
|
<field name="amount_total"/>
|
||||||
|
</field>
|
||||||
|
<field name="tag_ids" position="after">
|
||||||
|
<span attrs="{'invisible': [('amount_total', '=', 0)]}">
|
||||||
|
Funds: <field name="amount_total"/>
|
||||||
|
</span>
|
||||||
|
</field>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
2
project_name_from_quote/.gitignore
vendored
Normal file
2
project_name_from_quote/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.*~
|
||||||
|
*pyc
|
57
project_name_from_quote/README.rst
Normal file
57
project_name_from_quote/README.rst
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
=======================
|
||||||
|
project_name_from_quote
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
||||||
|
:target: https://odoo-community.org/page/development-status
|
||||||
|
:alt: Beta
|
||||||
|
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
|
||||||
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
|
:alt: License: AGPL-3
|
||||||
|
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Faccount--analytic-lightgray.png?logo=github
|
||||||
|
:target: https://github.com/elabore-coop/project-tools
|
||||||
|
:alt: elabore/hr-tools
|
||||||
|
|
||||||
|
|badge1| |badge2| |badge3|
|
||||||
|
|
||||||
|
|
||||||
|
This module tranfers the Quote / Sale order title to the project name.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install ``project_name_from_quote``.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
* Datactivist (https://datactivist.coop)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This module is maintained by Elabore.
|
3
project_name_from_quote/__init__.py
Normal file
3
project_name_from_quote/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import models
|
36
project_name_from_quote/__manifest__.py
Normal file
36
project_name_from_quote/__manifest__.py
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
# Copyright 2022 Stéphan Sainléger (Elabore)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_name_from_quote",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://elabore.coop",
|
||||||
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Tools",
|
||||||
|
"summary": "Use quote name as project name",
|
||||||
|
# any module necessary for this one to work correctly
|
||||||
|
"depends": [
|
||||||
|
"base",
|
||||||
|
"sale_project",
|
||||||
|
"account_quotation_sale_order_invoice_title",
|
||||||
|
],
|
||||||
|
"qweb": [
|
||||||
|
# "static/src/xml/*.xml",
|
||||||
|
],
|
||||||
|
"external_dependencies": {
|
||||||
|
"python": [],
|
||||||
|
},
|
||||||
|
# always loaded
|
||||||
|
"data": [],
|
||||||
|
# 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_name_from_quote/models/__init__.py
Normal file
1
project_name_from_quote/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import sale_order
|
11
project_name_from_quote/models/sale_order.py
Normal file
11
project_name_from_quote/models/sale_order.py
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
from typing import ValuesView
|
||||||
|
from odoo import models
|
||||||
|
|
||||||
|
|
||||||
|
class SaleOrderLine(models.Model):
|
||||||
|
_inherit = "sale.order.line"
|
||||||
|
|
||||||
|
def _timesheet_create_project_prepare_values(self):
|
||||||
|
values = super(SaleOrderLine, self)._timesheet_create_project_prepare_values()
|
||||||
|
values["name"] = self.order_id.so_title
|
||||||
|
return values
|
45
project_request_data/README.rst
Normal file
45
project_request_data/README.rst
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
====================
|
||||||
|
project_request_data
|
||||||
|
====================
|
||||||
|
|
||||||
|
Add several fields in tasks, that provide several data on the request
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install ``project_request_data``.
|
||||||
|
- To configure the services, go to Project > Configuration > Task Services
|
||||||
|
- To configure the request types, go to Project > Configuration > Request Types
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This module is maintained by Elabore.
|
1
project_request_data/__init__.py
Normal file
1
project_request_data/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
92
project_request_data/__manifest__.py
Normal file
92
project_request_data/__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_request_data",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://elabore.coop",
|
||||||
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Project",
|
||||||
|
"summary": "Add several fields in tasks, that provide several data on the request",
|
||||||
|
"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_request_data
|
||||||
|
====================
|
||||||
|
|
||||||
|
Add several fields in tasks, that provide several data on the request
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install ``project_request_data``.
|
||||||
|
- To configure the services, go to Project > Configuration > Task Services
|
||||||
|
- To configure the request types, go to Project > Configuration > Request Types
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
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/request_type.xml",
|
||||||
|
"views/task_service.xml",
|
||||||
|
"views/portal_template.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_request_data/i18n/README
Normal file
1
project_request_data/i18n/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This directory should contain the *.po for Odoo translation.
|
116
project_request_data/i18n/fr.po
Normal file
116
project_request_data/i18n/fr.po
Normal file
@@ -0,0 +1,116 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_request_data
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-08-26 12:51+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-08-26 12:51+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_request_data
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_request_data.portal_my_task_request_data
|
||||||
|
msgid "<strong>Request type:</strong>"
|
||||||
|
msgstr "<strong>Type de demande :</strong>"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_request_data.portal_my_task_request_data
|
||||||
|
msgid "<strong>Service:</strong>"
|
||||||
|
msgstr "<strong>Service :</strong>"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__create_uid
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__create_uid
|
||||||
|
msgid "Created by"
|
||||||
|
msgstr "Créé par"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__create_date
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__create_date
|
||||||
|
msgid "Created on"
|
||||||
|
msgstr "Créé le"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__display_name
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr "Nom affiché"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__id
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type____last_update
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service____last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr "Dernière modification le"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__write_uid
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__write_uid
|
||||||
|
msgid "Last Updated by"
|
||||||
|
msgstr "Dernière mise à jour par"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__write_date
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__write_date
|
||||||
|
msgid "Last Updated on"
|
||||||
|
msgstr "Dernière mise à jour le"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model,name:project_request_data.model_request_type
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_project_task__request_type_id
|
||||||
|
msgid "Request Type"
|
||||||
|
msgstr "Type de demande"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.actions.act_window,name:project_request_data.act_request_types_list
|
||||||
|
#: model:ir.ui.menu,name:project_request_data.menu_request_types
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_request_data.request_type_view_tree
|
||||||
|
msgid "Request Types"
|
||||||
|
msgstr "Types de demande"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__sequence
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__sequence
|
||||||
|
msgid "Sequence"
|
||||||
|
msgstr "Séquence"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_project_task__service_id
|
||||||
|
msgid "Service"
|
||||||
|
msgstr "Service"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model,name:project_request_data.model_project_task
|
||||||
|
msgid "Task"
|
||||||
|
msgstr "Tâche"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.actions.act_window,name:project_request_data.act_task_services_list
|
||||||
|
#: model:ir.ui.menu,name:project_request_data.menu_task_services
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_request_data.task_service_view_tree
|
||||||
|
msgid "Task Services"
|
||||||
|
msgstr "Services"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model,name:project_request_data.model_task_service
|
||||||
|
msgid "Task service"
|
||||||
|
msgstr "Service"
|
||||||
|
|
||||||
|
#. module: project_request_data
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_request_type__name
|
||||||
|
#: model:ir.model.fields,field_description:project_request_data.field_task_service__name
|
||||||
|
msgid "name"
|
||||||
|
msgstr "nom"
|
||||||
|
|
3
project_request_data/models/__init__.py
Normal file
3
project_request_data/models/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from . import task_service
|
||||||
|
from . import request_type
|
||||||
|
from . import project_task
|
9
project_request_data/models/project_task.py
Normal file
9
project_request_data/models/project_task.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class Task(models.Model):
|
||||||
|
_inherit = "project.task"
|
||||||
|
|
||||||
|
service_id = fields.Many2one('task.service', string='Service')
|
||||||
|
request_type_id = fields.Many2one('request.type', string='Request Type')
|
9
project_request_data/models/request_type.py
Normal file
9
project_request_data/models/request_type.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class RequestType(models.Model):
|
||||||
|
_name = "request.type"
|
||||||
|
_description = "Request Type"
|
||||||
|
|
||||||
|
name = fields.Char('name', required=True)
|
||||||
|
sequence = fields.Integer()
|
9
project_request_data/models/task_service.py
Normal file
9
project_request_data/models/task_service.py
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
from odoo import models, fields
|
||||||
|
|
||||||
|
|
||||||
|
class TaskService(models.Model):
|
||||||
|
_name = "task.service"
|
||||||
|
_description = "Task service"
|
||||||
|
|
||||||
|
name = fields.Char('name', required=True)
|
||||||
|
sequence = fields.Integer()
|
5
project_request_data/security/ir.model.access.csv
Normal file
5
project_request_data/security/ir.model.access.csv
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
|
||||||
|
access_task_service_user,project.task_service.user,model_task_service,,1,0,0,0
|
||||||
|
access_task_service_manager,project.task_service.manager,model_task_service,project.group_project_manager,1,1,1,1
|
||||||
|
access_request_type_user,project.request_type.user,model_request_type,,1,0,0,0
|
||||||
|
access_request_type_manager,project.request_type.manager,model_request_type,project.group_project_manager,1,1,1,1
|
|
17
project_request_data/views/portal_template.xml
Normal file
17
project_request_data/views/portal_template.xml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<template id="portal_my_task_request_data" name="My Task: Request Data" inherit_id="project.portal_my_task" priority="40">
|
||||||
|
<xpath expr="//t[@t-set='card_body']/div[hasclass('row','mb-4')]" position="after">
|
||||||
|
<div id="request_data" class="row mb-4">
|
||||||
|
<div class="col-12 col-md-6" t-if="task.service_id">
|
||||||
|
<strong>Service:</strong>
|
||||||
|
<span t-field="task.service_id" />
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-6" t-if="task.request_type_id">
|
||||||
|
<strong>Request type:</strong>
|
||||||
|
<span t-field="task.request_type_id" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</odoo>
|
15
project_request_data/views/project_task.xml
Normal file
15
project_request_data/views/project_task.xml
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_task_form2_request_data" model="ir.ui.view">
|
||||||
|
<field name="name">project.task.form.request.data</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='tag_ids']" position="before">
|
||||||
|
<field name="service_id" widget="selection" />
|
||||||
|
<field name="request_type_id" widget="selection" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
23
project_request_data/views/request_type.xml
Normal file
23
project_request_data/views/request_type.xml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="request_type_view_tree" model="ir.ui.view">
|
||||||
|
<field name="name">request.type.view.tree</field>
|
||||||
|
<field name="model">request.type</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Request Types" editable="top" default_order="sequence">
|
||||||
|
<field name="sequence" widget="handle" />
|
||||||
|
<field name="name" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="act_request_types_list" model="ir.actions.act_window">
|
||||||
|
<field name="name">Request Types</field>
|
||||||
|
<field name="res_model">request.type</field>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_request_types" action="act_request_types_list" parent="project.menu_project_config" sequence="99" name="Request Types" />
|
||||||
|
|
||||||
|
</odoo>
|
23
project_request_data/views/task_service.xml
Normal file
23
project_request_data/views/task_service.xml
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
|
||||||
|
<record id="task_service_view_tree" model="ir.ui.view">
|
||||||
|
<field name="name">task.service.view.tree</field>
|
||||||
|
<field name="model">task.service</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="Task Services" editable="top" default_order="sequence">
|
||||||
|
<field name="sequence" widget="handle" />
|
||||||
|
<field name="name" />
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="act_task_services_list" model="ir.actions.act_window">
|
||||||
|
<field name="name">Task Services</field>
|
||||||
|
<field name="res_model">task.service</field>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem id="menu_task_services" action="act_task_services_list" parent="project.menu_project_config" sequence="99" name="Task Services" />
|
||||||
|
|
||||||
|
</odoo>
|
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
|
93
project_timebox/__manifest__.py
Normal file
93
project_timebox/__manifest__.py
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
# Copyright 2022 Stéphan Sainléger (Elabore)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_timebox",
|
||||||
|
"version": "14.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",
|
||||||
|
"views/portal_template.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
|
|
17
project_timebox/views/portal_template.xml
Normal file
17
project_timebox/views/portal_template.xml
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<template id="portal_my_task_timebox" name="My Task: Timebox" inherit_id="project.portal_my_task" priority="40">
|
||||||
|
<xpath expr="//t[@t-set='card_body']/div[hasclass('row','mb-4')]" position="before">
|
||||||
|
<div id="timebox" class="row mb-2">
|
||||||
|
<div class="col-12 col-md-6" t-if="task.timebox_min_id">
|
||||||
|
<strong>Timebox Min:</strong>
|
||||||
|
<span t-field="task.timebox_min_id" />
|
||||||
|
</div>
|
||||||
|
<div class="col-12 col-md-6" t-if="task.timebox_max_id">
|
||||||
|
<strong>Timebox Max:</strong>
|
||||||
|
<span t-field="task.timebox_max_id" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</xpath>
|
||||||
|
</template>
|
||||||
|
</odoo>
|
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>
|
47
project_timesheet_funding_wish/README.rst
Normal file
47
project_timesheet_funding_wish/README.rst
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
==============================
|
||||||
|
project_timesheet_funding_wish
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Add a funding wish select field to timesheet line.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal procedure to install add-ons to install
|
||||||
|
``project_timesheet_funding_wish``.
|
||||||
|
|
||||||
|
Known issues / Roadmap
|
||||||
|
======================
|
||||||
|
|
||||||
|
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
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
|
* Valentin Lab <valentin.lab@kalysto.org>
|
||||||
|
* Nicolas Jeudy <https://github.com/njeudy>
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
This module is maintained by Elabore.
|
||||||
|
|
||||||
|
|
1
project_timesheet_funding_wish/__init__.py
Normal file
1
project_timesheet_funding_wish/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import models
|
88
project_timesheet_funding_wish/__manifest__.py
Normal file
88
project_timesheet_funding_wish/__manifest__.py
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# Copyright 2022 Stéphan Sainléger (Elabore)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_timesheet_funding_wish",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://github.com/elabore-coop/project-tools",
|
||||||
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Tools",
|
||||||
|
"summary": "Add a funding wish select field to timesheet line.",
|
||||||
|
"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_timesheet_funding_wish
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Add a funding wish select field to timesheet line.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal procedure to install add-ons to install
|
||||||
|
``project_timesheet_funding_wish``.
|
||||||
|
|
||||||
|
Known issues / Roadmap
|
||||||
|
======================
|
||||||
|
|
||||||
|
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
|
||||||
|
=======
|
||||||
|
|
||||||
|
Images
|
||||||
|
------
|
||||||
|
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
||||||
|
|
||||||
|
Contributors
|
||||||
|
------------
|
||||||
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
|
* Valentin Lab <valentin.lab@kalysto.org>
|
||||||
|
* Nicolas Jeudy <https://github.com/njeudy>
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
This module is maintained by Elabore.
|
||||||
|
|
||||||
|
""",
|
||||||
|
# any module necessary for this one to work correctly
|
||||||
|
"depends": [
|
||||||
|
"base",
|
||||||
|
"hr_timesheet",
|
||||||
|
],
|
||||||
|
"qweb": [
|
||||||
|
# "static/src/xml/*.xml",
|
||||||
|
],
|
||||||
|
"external_dependencies": {
|
||||||
|
"python": [],
|
||||||
|
},
|
||||||
|
# always loaded
|
||||||
|
"data": [
|
||||||
|
"views/hr_timesheet.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_timesheet_funding_wish/i18n/README
Normal file
1
project_timesheet_funding_wish/i18n/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This directory should contain the *.po for Odoo translation.
|
65
project_timesheet_funding_wish/i18n/fr.po
Normal file
65
project_timesheet_funding_wish/i18n/fr.po
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_timesheet_funding_wish
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-07-25 17:02+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-07-25 17:02+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_timesheet_funding_wish
|
||||||
|
#: model:ir.model,name:project_timesheet_funding_wish.model_account_analytic_line
|
||||||
|
msgid "Analytic Line"
|
||||||
|
msgstr "Ligne analytique"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: model:ir.model.fields,field_description:project_timesheet_funding_wish.field_account_analytic_line__display_name
|
||||||
|
msgid "Display Name"
|
||||||
|
msgstr "Nom affiché"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: model:ir.model.fields.selection,name:project_timesheet_funding_wish.selection__account_analytic_line__funding_wish__free
|
||||||
|
msgid "Free"
|
||||||
|
msgstr "Offert"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: code:addons/project_timesheet_funding_wish/models/hr_timesheet.py:0
|
||||||
|
#: model:ir.model.fields,field_description:project_timesheet_funding_wish.field_account_analytic_line__funding_wish
|
||||||
|
#, python-format
|
||||||
|
msgid "Funding wish"
|
||||||
|
msgstr "Type de financement"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: model:ir.model.fields,field_description:project_timesheet_funding_wish.field_account_analytic_line__id
|
||||||
|
msgid "ID"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: model:ir.model.fields,field_description:project_timesheet_funding_wish.field_account_analytic_line____last_update
|
||||||
|
msgid "Last Modified on"
|
||||||
|
msgstr "Dernière modification le"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: model:ir.model.fields.selection,name:project_timesheet_funding_wish.selection__account_analytic_line__funding_wish__accepted
|
||||||
|
msgid "Payment accepted"
|
||||||
|
msgstr "Paiement accepté"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: model:ir.model.fields.selection,name:project_timesheet_funding_wish.selection__account_analytic_line__funding_wish__expected
|
||||||
|
msgid "Payment expected"
|
||||||
|
msgstr "Paiement attendu"
|
||||||
|
|
||||||
|
#. module: project_timesheet_funding_wish
|
||||||
|
#: code:addons/project_timesheet_funding_wish/models/hr_timesheet.py:0
|
||||||
|
#: model:ir.model.fields,field_description:project_timesheet_funding_wish.field_account_analytic_line__treated
|
||||||
|
#, python-format
|
||||||
|
msgid "Treated"
|
||||||
|
msgstr "Traité"
|
1
project_timesheet_funding_wish/models/__init__.py
Normal file
1
project_timesheet_funding_wish/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import hr_timesheet
|
16
project_timesheet_funding_wish/models/hr_timesheet.py
Normal file
16
project_timesheet_funding_wish/models/hr_timesheet.py
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
from odoo import _, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class AccountAnalyticLine(models.Model):
|
||||||
|
_inherit = "account.analytic.line"
|
||||||
|
|
||||||
|
funding_wish = fields.Selection(
|
||||||
|
[
|
||||||
|
("free", "Free"),
|
||||||
|
("accepted", "Payment accepted"),
|
||||||
|
("expected", "Payment expected"),
|
||||||
|
],
|
||||||
|
string=_("Funding wish"),
|
||||||
|
copy=False,
|
||||||
|
)
|
||||||
|
treated = fields.Boolean(string=_("Treated"), copy=False)
|
27
project_timesheet_funding_wish/views/hr_timesheet.xml
Normal file
27
project_timesheet_funding_wish/views/hr_timesheet.xml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="hr_timesheet_line_tree_funding_view" model="ir.ui.view">
|
||||||
|
<field name="name">hr.timesheet.line.tree.funding.view</field>
|
||||||
|
<field name="model">account.analytic.line</field>
|
||||||
|
<field name="inherit_id" ref="hr_timesheet.hr_timesheet_line_tree" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='date']" position="after">
|
||||||
|
<field name="treated" />
|
||||||
|
<field name="funding_wish" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_task_form2_inherited_funding" model="ir.ui.view">
|
||||||
|
<field name="name">view.task.form2.inherited.funding</field>
|
||||||
|
<field name="model">project.task</field>
|
||||||
|
<field name="inherit_id" ref="hr_timesheet.view_task_form2_inherited" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='timesheet_ids']/tree/field[@name='date']" position="after">
|
||||||
|
<field name="treated" />
|
||||||
|
<field name="funding_wish" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
</odoo>
|
2
project_user_default_project/.gitignore
vendored
Normal file
2
project_user_default_project/.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.*~
|
||||||
|
*pyc
|
44
project_user_default_project/README.rst
Normal file
44
project_user_default_project/README.rst
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
============================
|
||||||
|
project_user_default_project
|
||||||
|
============================
|
||||||
|
|
||||||
|
Add default project field in user model
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install
|
||||||
|
``project_user_default_project``.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
Maintainer
|
||||||
|
----------
|
||||||
|
|
||||||
|
This module is maintained by Elabore.
|
3
project_user_default_project/__init__.py
Normal file
3
project_user_default_project/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
from . import models
|
86
project_user_default_project/__manifest__.py
Normal file
86
project_user_default_project/__manifest__.py
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
# Copyright 2022 Stéphan Sainléger (Elabore)
|
||||||
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "project_user_default_project",
|
||||||
|
"version": "14.0.1.0.0",
|
||||||
|
"author": "Elabore",
|
||||||
|
"website": "https://elabore.coop",
|
||||||
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
"license": "AGPL-3",
|
||||||
|
"category": "Tools",
|
||||||
|
"summary": "Add default project field in user model",
|
||||||
|
"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_user_default_project
|
||||||
|
============================
|
||||||
|
|
||||||
|
Add default project field in user model
|
||||||
|
|
||||||
|
Installation
|
||||||
|
============
|
||||||
|
|
||||||
|
Use Odoo normal module installation procedure to install
|
||||||
|
``project_user_default_project``.
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
Funders
|
||||||
|
-------
|
||||||
|
|
||||||
|
The development of this module has been financially supported by:
|
||||||
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
|
|
||||||
|
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": [
|
||||||
|
"views/res_users_views.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_user_default_project/i18n/README
Normal file
1
project_user_default_project/i18n/README
Normal file
@@ -0,0 +1 @@
|
|||||||
|
This directory should contain the *.po for Odoo translation.
|
27
project_user_default_project/i18n/fr.po
Normal file
27
project_user_default_project/i18n/fr.po
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Translation of Odoo Server.
|
||||||
|
# This file contains the translation of the following modules:
|
||||||
|
# * project_user_default_project
|
||||||
|
#
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Odoo Server 14.0\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2022-08-25 15:58+0000\n"
|
||||||
|
"PO-Revision-Date: 2022-08-25 15:58+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_user_default_project
|
||||||
|
#: model:ir.model.fields,field_description:project_user_default_project.field_res_users__default_project_id
|
||||||
|
msgid "Default Project"
|
||||||
|
msgstr "Projet par défaut"
|
||||||
|
|
||||||
|
#. module: project_user_default_project
|
||||||
|
#: model:ir.model,name:project_user_default_project.model_res_users
|
||||||
|
msgid "Users"
|
||||||
|
msgstr "Utilisateurs"
|
||||||
|
|
1
project_user_default_project/models/__init__.py
Normal file
1
project_user_default_project/models/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from . import res_users
|
6
project_user_default_project/models/res_users.py
Normal file
6
project_user_default_project/models/res_users.py
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
from odoo import _, api, fields, models
|
||||||
|
|
||||||
|
class Users(models.Model):
|
||||||
|
_inherit = "res.users"
|
||||||
|
|
||||||
|
default_project_id = fields.Many2one('project.project', string='Default Project')
|
13
project_user_default_project/views/res_users_views.xml
Normal file
13
project_user_default_project/views/res_users_views.xml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_users_form_inherit_default_project" model="ir.ui.view">
|
||||||
|
<field name="name">view.users.form.inherit.default.project</field>
|
||||||
|
<field name="model">res.users</field>
|
||||||
|
<field name="inherit_id" ref="base.view_users_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<xpath expr="//field[@name='action_id']" position="after">
|
||||||
|
<field name="default_project_id" />
|
||||||
|
</xpath>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
Reference in New Issue
Block a user