Compare commits
18 Commits
16.0-proje
...
13.0
Author | SHA1 | Date | |
---|---|---|---|
|
d4d16a092a | ||
|
c06be663f0 | ||
|
30ad8bacc6 | ||
|
8ee9f1d014 | ||
|
80a3b0b7e2 | ||
|
caf5dba0c2 | ||
|
adcd1c8381 | ||
|
ed987d03b9 | ||
|
0dd04c8ec6 | ||
|
bab8138f11 | ||
|
75950af5a6 | ||
|
3b045229d1 | ||
|
5ad7c22034 | ||
|
1952cd17e8 | ||
|
fd63ab1709 | ||
|
d6fce31db5 | ||
|
677999bf9f | ||
|
d4f7f9626d |
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_assignees",
|
"name": "project_assignees",
|
||||||
"version": "16.0.1.1.0",
|
"version": "13.0.1.0.0",
|
||||||
"author": "Elabore",
|
"author": "Elabore",
|
||||||
"website": "https://github.com/elabore-coop/project-tools",
|
"website": "https://github.com/elabore-coop/project-tools",
|
||||||
"maintainer": "Stéphan Sainléger",
|
"maintainer": "Stéphan Sainléger",
|
||||||
@@ -69,7 +69,6 @@ This module is maintained by Elabore.
|
|||||||
"depends": [
|
"depends": [
|
||||||
"base",
|
"base",
|
||||||
"project",
|
"project",
|
||||||
"project_task_portal_form",
|
|
||||||
],
|
],
|
||||||
"qweb": [
|
"qweb": [
|
||||||
# "static/src/xml/*.xml",
|
# "static/src/xml/*.xml",
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
# Translation of Odoo Server.
|
# Translation of Odoo Server.
|
||||||
# This file contains the translation of the following modules:
|
# This file contains the translation of the following modules:
|
||||||
# * project_assignees
|
# * project_assignees
|
||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 16.0\n"
|
"Project-Id-Version: Odoo Server 13.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2023-11-02 07:56+0000\n"
|
"POT-Creation-Date: 2022-08-25 15:14+0000\n"
|
||||||
"PO-Revision-Date: 2023-11-02 07:56+0000\n"
|
"PO-Revision-Date: 2022-08-25 15:14+0000\n"
|
||||||
"Last-Translator: \n"
|
"Last-Translator: <>\n"
|
||||||
"Language-Team: \n"
|
"Language-Team: \n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@@ -22,15 +22,11 @@ msgstr "<strong>Autres intervenants</strong>"
|
|||||||
|
|
||||||
#. module: project_assignees
|
#. module: project_assignees
|
||||||
#: model:ir.model.fields,field_description:project_assignees.field_project_task__assignee_ids
|
#: model:ir.model.fields,field_description:project_assignees.field_project_task__assignee_ids
|
||||||
msgid "Assignees"
|
msgid "Other Assignees"
|
||||||
msgstr "Autres assignations"
|
msgstr "Autres intervenants"
|
||||||
|
|
||||||
#. module: project_assignees
|
|
||||||
#: model_terms:ir.ui.view,arch_db:project_assignees.portal_my_task_assignees
|
|
||||||
msgid "Contact"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: project_assignees
|
#. module: project_assignees
|
||||||
#: model:ir.model,name:project_assignees.model_project_task
|
#: model:ir.model,name:project_assignees.model_project_task
|
||||||
msgid "Task"
|
msgid "Task"
|
||||||
msgstr "Tâche"
|
msgstr "Tâche"
|
||||||
|
|
||||||
|
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
from odoo import models, fields
|
from odoo import models, fields, _
|
||||||
|
|
||||||
|
|
||||||
class Task(models.Model):
|
class Task(models.Model):
|
||||||
_inherit = "project.task"
|
_inherit = "project.task"
|
||||||
|
|
||||||
assignee_ids = fields.Many2many('res.users', 'assignee_ids_rel', string='Assignees')
|
assignee_ids = fields.Many2many('res.users', 'assignee_ids_rel', string='Other Assignees')
|
||||||
|
|
||||||
|
@@ -1,20 +1,21 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<template id="portal_my_task_assignees" name="My Task: Assignees" inherit_id="project.portal_my_task" priority="40">
|
<template id="portal_my_task_assignees" name="My Task: Assignees" inherit_id="project.portal_my_task" priority="40">
|
||||||
<xpath expr="//t[@t-foreach='task.user_ids']" position="after">
|
<xpath expr="//div[hasclass('flex-grow-0')]/../../.." position="inside">
|
||||||
<div class="col-12 col-md-12 pb-2" t-if="task.assignee_ids">
|
<div class="col-12 col-md-6 pb-2" t-if="task.assignee_ids">
|
||||||
<strong>Other assignees</strong>
|
<strong>Other assignees</strong>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<t t-foreach="task.assignee_ids" t-as="user">
|
<t t-foreach="task.assignee_ids" t-as="assignee">
|
||||||
<div class="d-flex mb-3 flex-nowrap">
|
<div class="col flex-grow-0 pr-3">
|
||||||
<img class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(user.avatar_1024)" alt="Contact"/>
|
<img t-if="assignee.image" class="rounded-circle mt-1 o_portal_contact_img" t-att-src="image_data_uri(assignee.image)" alt="Contact" />
|
||||||
<div class="ms-2">
|
<img t-else="" class="rounded-circle mt-1 o_portal_contact_img" src="/web/static/src/img/user_menu_avatar.png" alt="Contact" />
|
||||||
<div t-esc="user" t-options='{"widget": "contact", "fields": ["name"]}'/>
|
</div>
|
||||||
<a t-attf-href="tel:{{user.phone}}" t-if="user.phone"><div t-esc="user" t-options='{"widget": "contact", "fields": ["phone"]}'/></a>
|
<div class="col pl-md-0">
|
||||||
<a t-if="user.email" class="text-break" t-attf-href="mailto:{{user.email}}">
|
<strong>
|
||||||
<div t-out="user" t-options='{"widget": "contact", "fields": ["email"]}'/>
|
<span t-field="assignee.name" />
|
||||||
</a>
|
</strong>
|
||||||
</div>
|
<span t-field="assignee.email" />
|
||||||
|
<span t-field="assignee.phone" />
|
||||||
</div>
|
</div>
|
||||||
</t>
|
</t>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -6,7 +6,7 @@
|
|||||||
<field name="inherit_id" ref="project.view_task_form2" />
|
<field name="inherit_id" ref="project.view_task_form2" />
|
||||||
<field name="priority" eval="99" />
|
<field name="priority" eval="99" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<xpath expr="//field[@name='user_ids']" position="after">
|
<xpath expr="//field[@name='user_id']" position="after">
|
||||||
<field name="assignee_ids" widget="many2many_tags" />
|
<field name="assignee_ids" widget="many2many_tags" />
|
||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
@@ -19,11 +19,8 @@
|
|||||||
<field name="priority" eval="99" />
|
<field name="priority" eval="99" />
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<filter name="my_tasks" position="attributes">
|
<filter name="my_tasks" position="attributes">
|
||||||
<attribute name="domain">['|', ('user_ids', 'in', uid), ('assignee_ids', 'in', uid)]</attribute>
|
<attribute name="domain">['|', ('user_id', '=', uid), ('assignee_ids', 'in', uid)]</attribute>
|
||||||
</filter>
|
</filter>
|
||||||
<xpath expr="//field[@name='partner_id']" position="after">
|
|
||||||
<field name="assignee_ids" filter_domain="[('assignee_ids.user_ids.name', 'ilike', self)]"/>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
</odoo>
|
</odoo>
|
@@ -1,3 +0,0 @@
|
|||||||
# -*- coding: utf-8 -*-
|
|
||||||
|
|
||||||
from . import models, controllers
|
|
@@ -1,93 +0,0 @@
|
|||||||
# Copyright 2022 Stéphan Sainléger (Elabore)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "project_average_acceptable_time",
|
|
||||||
"version": "16.0.1.0.0",
|
|
||||||
"author": "Elabore",
|
|
||||||
"website": "https://github.com/elabore-coop/project-tools",
|
|
||||||
"maintainer": "Clément Thomas",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"category": "Tools",
|
|
||||||
"summary": "Task validation without customer agreement",
|
|
||||||
"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_average_acceptable_time
|
|
||||||
=================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Install ``project_average_acceptable_time``, 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
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Clément Thomas
|
|
||||||
|
|
||||||
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",
|
|
||||||
"project_user_default_project"
|
|
||||||
],
|
|
||||||
"qweb": [
|
|
||||||
# "static/src/xml/*.xml",
|
|
||||||
],
|
|
||||||
"external_dependencies": {
|
|
||||||
"python": [],
|
|
||||||
},
|
|
||||||
# always loaded
|
|
||||||
"data": [
|
|
||||||
"views/project_project.xml",
|
|
||||||
"views/portal_home_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,2 +0,0 @@
|
|||||||
|
|
||||||
from . import custom_portal
|
|
@@ -1,21 +0,0 @@
|
|||||||
# Copyright 2020 Lokavaluto ()
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
from odoo.http import request, route
|
|
||||||
from odoo.addons.portal.controllers.portal import CustomerPortal
|
|
||||||
|
|
||||||
|
|
||||||
class CustomCustomerPortal(CustomerPortal):
|
|
||||||
@route(["/my/account"], type="http", auth="user", website=True)
|
|
||||||
def account(self, redirect=None, **post):
|
|
||||||
self.OPTIONAL_BILLING_FIELDS.append("average_acceptable_time") #unecessary save in res partner, but necessary to avoid error on form post
|
|
||||||
|
|
||||||
response = super(CustomCustomerPortal, self).account(redirect, **post)
|
|
||||||
|
|
||||||
if post and request.httprequest.method == "POST":
|
|
||||||
error, error_message = self.details_form_validate(post)
|
|
||||||
if not error:
|
|
||||||
user = request.env.user
|
|
||||||
if user.default_project_id and post["average_acceptable_time"]:
|
|
||||||
user.default_project_id.average_acceptable_time = post["average_acceptable_time"]
|
|
||||||
|
|
||||||
return response
|
|
@@ -1,46 +0,0 @@
|
|||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * project_average_acceptable_time
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 12.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2023-03-31 09:33+0000\n"
|
|
||||||
"PO-Revision-Date: 2023-03-31 09:33+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_average_acceptable_time
|
|
||||||
#: model_terms:ir.ui.view,arch_db:project_average_acceptable_time.portal_my_home_average_acceptable_time
|
|
||||||
msgid "<b>Average acceptable time</b>:"
|
|
||||||
msgstr "<b>Temps moyen acceptable</b>:"
|
|
||||||
|
|
||||||
#. module: project_average_acceptable_time
|
|
||||||
#: model_terms:ir.ui.view,arch_db:project_average_acceptable_time.portal_my_home_average_acceptable_time
|
|
||||||
msgid "Average acceptable time"
|
|
||||||
msgstr "Temps moyen acceptable"
|
|
||||||
|
|
||||||
#. module: project_average_acceptable_time
|
|
||||||
#: model_terms:ir.ui.view,arch_db:project_average_acceptable_time.project_project_view_kanban_inherit_average_acceptable_time
|
|
||||||
msgid "<span>Average acceptable time:&nbsp;</span>"
|
|
||||||
msgstr "<span>Temps moyen acceptable&nbsp;:&nbsp;</span>"
|
|
||||||
|
|
||||||
#. module: project_average_acceptable_time
|
|
||||||
#: model:ir.model.fields,field_description:project_average_acceptable_time.field_project_project__average_acceptable_time
|
|
||||||
msgid "Average acceptable time"
|
|
||||||
msgstr "Temps moyen acceptable"
|
|
||||||
|
|
||||||
#. module: project_average_acceptable_time
|
|
||||||
#: model_terms:ir.ui.view,arch_db:project_average_acceptable_time.portal_my_details_average_acceptable_time
|
|
||||||
msgid "Average acceptable time (h)"
|
|
||||||
msgstr "Temps moyen acceptable (h)"
|
|
||||||
|
|
||||||
#. module: project_average_acceptable_time
|
|
||||||
#: model:ir.model,name:project_average_acceptable_time.model_project_project
|
|
||||||
msgid "Project"
|
|
||||||
msgstr "Projet"
|
|
@@ -1,3 +0,0 @@
|
|||||||
|
|
||||||
from . import project_project
|
|
||||||
from . import res_partner
|
|
@@ -1,10 +0,0 @@
|
|||||||
|
|
||||||
from odoo import models, fields, _, api
|
|
||||||
|
|
||||||
|
|
||||||
class Project(models.Model):
|
|
||||||
_inherit = "project.project"
|
|
||||||
|
|
||||||
average_acceptable_time = fields.Float('Average acceptable time')
|
|
||||||
|
|
||||||
|
|
@@ -1,10 +0,0 @@
|
|||||||
|
|
||||||
from odoo import models, fields, _, api
|
|
||||||
|
|
||||||
|
|
||||||
class ResPartner(models.Model):
|
|
||||||
_inherit = "res.partner"
|
|
||||||
|
|
||||||
average_acceptable_time = fields.Float('Average acceptable time') # not used, but necessary to post custom field from /my/account
|
|
||||||
|
|
||||||
|
|
@@ -1,26 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<odoo>
|
|
||||||
<!-- Template /my/home -->
|
|
||||||
<template id="portal_my_home_average_acceptable_time" name="Portal My Home: Average acceptable time" inherit_id="portal.portal_layout" priority="40">
|
|
||||||
<xpath expr="//div[hasclass('o_portal_my_details')]" position="inside">
|
|
||||||
<hr class="mt-1 mb-0"/>
|
|
||||||
<b>Average acceptable time</b>: <t t-esc="user_id.default_project_id.average_acceptable_time" t-options="{'widget': 'float_time'}"/>
|
|
||||||
</xpath>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<!-- Template /my/account -->
|
|
||||||
<template id="portal_my_details_average_acceptable_time" name="Portal My details: Average acceptable time" inherit_id="portal.portal_my_details">
|
|
||||||
<xpath expr="//input[@name='redirect']" position="before">
|
|
||||||
<div t-attf-class="form-group #{error.get('average_acceptable_time') and 'o_has_error' or ''} col-xl-6">
|
|
||||||
<label class="col-form-label" for="average_acceptable_time">Average acceptable time (h)</label>
|
|
||||||
<input
|
|
||||||
type="text"
|
|
||||||
name="average_acceptable_time"
|
|
||||||
t-attf-class="form-control #{error.get('average_acceptable_time') and 'is-invalid' or ''}"
|
|
||||||
t-att-value="average_acceptable_time or user_id.default_project_id.average_acceptable_time"
|
|
||||||
t-options="{'widget': 'float_time'}"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</xpath>
|
|
||||||
</template>
|
|
||||||
</odoo>
|
|
@@ -1,36 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<!--Project KANBAN -->
|
|
||||||
<record id="project_project_view_kanban_inherit_average_acceptable_time" model="ir.ui.view">
|
|
||||||
<field name="name">project.project.kanban.inherit.average.acceptable.time</field>
|
|
||||||
<field name="model">project.project</field>
|
|
||||||
<field name="inherit_id" ref="project.view_project_kanban"/>
|
|
||||||
<field name="priority">999</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//div[@class='o_project_kanban_main ']" position="inside">
|
|
||||||
<div class="o_project_kanban_boxes">
|
|
||||||
<span>Average acceptable time:<![CDATA[ ]]></span>
|
|
||||||
<field name="average_acceptable_time" widget="float_time"/>
|
|
||||||
</div>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<!-- Project FORM -->
|
|
||||||
<record id="project_project_form_inherit_average_acceptable_time" model="ir.ui.view">
|
|
||||||
<field name="name">project.project.form.inherit.average.acceptable.time</field>
|
|
||||||
<field name="model">project.project</field>
|
|
||||||
<field name="inherit_id" ref="project.edit_project"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//div[@id='subtask_settings']/div[@class='o_setting_right_pane']" position="inside">
|
|
||||||
<div class="o_settings_average_acceptable_time" style="margin-top:10px;">
|
|
||||||
<!-- <span>Average acceptable time:<![CDATA[ ]]></span> -->
|
|
||||||
<label for="average_acceptable_time"/>
|
|
||||||
<field name="average_acceptable_time" widget="float_time"/>
|
|
||||||
</div>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
@@ -1,43 +0,0 @@
|
|||||||
==========================================
|
|
||||||
project_disable_last_sol_as_sol_by_default
|
|
||||||
==========================================
|
|
||||||
|
|
||||||
If there is no sale order line in a task, do not add automaticly the last sol of customer as the sale order line by default
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Use Odoo normal module installation procedure to install ``project_disable_last_sol_as_sol_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
|
|
||||||
=======
|
|
||||||
|
|
||||||
Contributors
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Laetitia Da Costa (https://github.com/LaetitiaElabore)
|
|
||||||
|
|
||||||
Funders
|
|
||||||
-------
|
|
||||||
|
|
||||||
The development of this module has been financially supported by:
|
|
||||||
* Elabore (https://elabore.coop)
|
|
||||||
|
|
||||||
|
|
||||||
Maintainer
|
|
||||||
----------
|
|
||||||
|
|
||||||
This module is maintained by Elabore.
|
|
@@ -1 +0,0 @@
|
|||||||
from . import models
|
|
@@ -1,37 +0,0 @@
|
|||||||
# Copyright 2022 Stéphan Sainléger (Elabore)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "project_disable_last_sol_as_sol_by_default",
|
|
||||||
"version": "14.0.1.0.0",
|
|
||||||
"author": "Elabore",
|
|
||||||
"website": "https://elabore.coop",
|
|
||||||
"maintainer": "Laetitia Da Costa",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"category": "Project",
|
|
||||||
"summary": "Do not add last sale order line automaticly as the sale order line by default in a task",
|
|
||||||
# any module necessary for this one to work correctly
|
|
||||||
"depends": [
|
|
||||||
"base",
|
|
||||||
"project",
|
|
||||||
"sale_timesheet"
|
|
||||||
],
|
|
||||||
"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 +0,0 @@
|
|||||||
from . import project_task
|
|
@@ -1,7 +0,0 @@
|
|||||||
from odoo import models
|
|
||||||
|
|
||||||
class Task(models.Model):
|
|
||||||
_inherit = "project.task"
|
|
||||||
|
|
||||||
def _get_last_sol_of_customer(self):
|
|
||||||
return False
|
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_funders",
|
"name": "project_funders",
|
||||||
"version": "16.0.1.0.0",
|
"version": "13.0.0.1.0",
|
||||||
"author": "Alusage",
|
"author": "Alusage",
|
||||||
"website": "https://alusage.fr",
|
"website": "https://alusage.fr",
|
||||||
"data": [
|
"data": [
|
||||||
|
@@ -1,47 +0,0 @@
|
|||||||
=================
|
|
||||||
project_link_from_invoice
|
|
||||||
=================
|
|
||||||
|
|
||||||
Easily access to your projects from invoices
|
|
||||||
View project(s) in invoices tree view
|
|
||||||
Access to related projects of an invoice from a button
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Use Odoo normal procedure to install add-ons to install
|
|
||||||
``project_link_from_invoice``.
|
|
||||||
|
|
||||||
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
|
|
||||||
------------
|
|
||||||
* Clément Thomas
|
|
||||||
|
|
||||||
Funders
|
|
||||||
-------
|
|
||||||
The development of this module has been financially supported by:
|
|
||||||
* Elabore (https://elabore.coop)
|
|
||||||
|
|
||||||
|
|
||||||
Maintainer
|
|
||||||
----------
|
|
||||||
|
|
||||||
This module is maintained by Elabore.
|
|
@@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
from . import models
|
|
@@ -1,58 +0,0 @@
|
|||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * project_link_from_invoice
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 14.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2023-04-27 12:47+0000\n"
|
|
||||||
"PO-Revision-Date: 2023-04-27 12:47+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_link_from_invoice
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_move__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Nom affiché"
|
|
||||||
|
|
||||||
#. module: project_link_from_invoice
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_move__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: project_link_from_invoice
|
|
||||||
#: model:ir.model,name:project_link_from_invoice.model_account_move
|
|
||||||
msgid "Journal Entry"
|
|
||||||
msgstr "Pièce comptable"
|
|
||||||
|
|
||||||
#. module: project_link_from_invoice
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_move____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Dernière modification le"
|
|
||||||
|
|
||||||
#. module: project_link_from_invoice
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_bank_statement_line__project_ids
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_move__project_ids
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_payment__project_ids
|
|
||||||
msgid "Project"
|
|
||||||
msgstr "Projet"
|
|
||||||
|
|
||||||
#. module: project_link_from_invoice
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_bank_statement_line__project_count
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_move__project_count
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_payment__project_count
|
|
||||||
msgid "Project Count"
|
|
||||||
msgstr "Numbre de projets"
|
|
||||||
|
|
||||||
#. module: project_link_from_invoice
|
|
||||||
#: model_terms:ir.ui.view,arch_db:project_link_from_invoice.view_move_form_project_link_from_invoice_inherit
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_bank_statement_line__projects_name
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_move__projects_name
|
|
||||||
#: model:ir.model.fields,field_description:project_link_from_invoice.field_account_payment__projects_name
|
|
||||||
msgid "Project(s)"
|
|
||||||
msgstr "Projet(s)"
|
|
@@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
from . import account_move
|
|
@@ -1,38 +0,0 @@
|
|||||||
|
|
||||||
from odoo import models, fields, api
|
|
||||||
|
|
||||||
|
|
||||||
class AccountMove(models.Model):
|
|
||||||
_inherit = "account.move"
|
|
||||||
|
|
||||||
project_ids = fields.Many2many('project.project', name="Projects", compute='get_related_project_ids')
|
|
||||||
project_count = fields.Integer("Project Count", compute='get_related_project_ids')
|
|
||||||
projects_name = fields.Char('Project(s)', compute='get_related_project_ids')
|
|
||||||
|
|
||||||
def action_open_projects(self):
|
|
||||||
'''
|
|
||||||
Open related projects, in form or tree view depending on project numbers
|
|
||||||
'''
|
|
||||||
project_ids = self.project_ids.ids
|
|
||||||
action = self.env["ir.actions.actions"]._for_xml_id("project.open_view_project_all")
|
|
||||||
|
|
||||||
if self.project_count == 1:
|
|
||||||
action['res_id'] = project_ids[0]
|
|
||||||
action['views'] = [[False, "form"]]
|
|
||||||
else:
|
|
||||||
action['views'] = [[False, "tree"], [False, "form"]]
|
|
||||||
|
|
||||||
action['domain'] = [('id', 'in', project_ids)]
|
|
||||||
|
|
||||||
del action['target'] #to display breadcrumbs
|
|
||||||
|
|
||||||
return action
|
|
||||||
|
|
||||||
|
|
||||||
@api.depends('line_ids.sale_line_ids')
|
|
||||||
def get_related_project_ids(self):
|
|
||||||
for move in self:
|
|
||||||
projects = self.env['project.task'].search([('sale_order_id','in',move.line_ids.sale_line_ids.order_id.ids)]).project_id
|
|
||||||
move.project_ids = projects.ids
|
|
||||||
move.projects_name = ' ; '.join([p.name for p in projects])
|
|
||||||
move.project_count = len(projects)
|
|
@@ -1,32 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<odoo>
|
|
||||||
<record id="view_move_form_project_link_from_invoice_inherit" model="ir.ui.view">
|
|
||||||
<field name="name">account.move.form.project.link</field>
|
|
||||||
<field name="model">account.move</field>
|
|
||||||
<field name="inherit_id" ref="account.view_move_form" />
|
|
||||||
<field name="priority" eval="99" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//header" position="inside">
|
|
||||||
<button name="action_open_projects"
|
|
||||||
string="Project(s)" class="oe_highlight" type="object" icon="fa-puzzle-piece"
|
|
||||||
invisible="[]" attrs="{'invisible': [('project_count', '=', 0)]}" />
|
|
||||||
</xpath>
|
|
||||||
<xpath expr="//header" position="after">
|
|
||||||
<field name="project_count" invisible="1" />
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record id="view_invoice_tree_project_link_from_invoice_inherit" model="ir.ui.view">
|
|
||||||
<field name="name">account.invoice.tree.project.link</field>
|
|
||||||
<field name="model">account.move</field>
|
|
||||||
<field name="inherit_id" ref="account.view_invoice_tree"/>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//tree/field[@name='invoice_date']" position="before">
|
|
||||||
<field name="projects_name" />
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</odoo>
|
|
||||||
|
|
2
project_name_from_lead/.gitignore
vendored
2
project_name_from_lead/.gitignore
vendored
@@ -1,2 +0,0 @@
|
|||||||
*.*~
|
|
||||||
*pyc
|
|
@@ -1,57 +0,0 @@
|
|||||||
=======================
|
|
||||||
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.
|
|
@@ -1,36 +0,0 @@
|
|||||||
# Copyright 2022 Stéphan Sainléger (Elabore)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "project_name_from_lead",
|
|
||||||
"version": "16.0.1.0.0",
|
|
||||||
"author": "Elabore",
|
|
||||||
"website": "https://elabore.coop",
|
|
||||||
"maintainer": "Clément Thomas",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"category": "Tools",
|
|
||||||
"summary": "Use lead name as project name",
|
|
||||||
# any module necessary for this one to work correctly
|
|
||||||
"depends": [
|
|
||||||
"base",
|
|
||||||
"crm",
|
|
||||||
"sale_project",
|
|
||||||
],
|
|
||||||
"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 +0,0 @@
|
|||||||
from . import sale_order, crm_lead
|
|
@@ -1,17 +0,0 @@
|
|||||||
from odoo import models
|
|
||||||
|
|
||||||
class Lead(models.Model):
|
|
||||||
_inherit = 'crm.lead'
|
|
||||||
|
|
||||||
def write(self, vals):
|
|
||||||
"""update project name if project created from lead
|
|
||||||
"""
|
|
||||||
for lead in self:
|
|
||||||
if 'name' in vals:
|
|
||||||
sale = self.env['sale.order'].search([('opportunity_id','=',lead.id)])
|
|
||||||
if sale:
|
|
||||||
project = self.env['project.project'].search([('sale_order_id','=',sale.id)])
|
|
||||||
if project:
|
|
||||||
project.name = vals['name']
|
|
||||||
|
|
||||||
return super(Lead, self).write(vals)
|
|
@@ -1,12 +0,0 @@
|
|||||||
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()
|
|
||||||
if self.order_id and self.order_id.opportunity_id:
|
|
||||||
values['name'] = self.order_id.opportunity_id.name
|
|
||||||
return values
|
|
2
project_name_from_quote/.gitignore
vendored
2
project_name_from_quote/.gitignore
vendored
@@ -1,2 +0,0 @@
|
|||||||
*.*~
|
|
||||||
*pyc
|
|
@@ -1,57 +0,0 @@
|
|||||||
=======================
|
|
||||||
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.
|
|
@@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
from . import models
|
|
@@ -1,36 +0,0 @@
|
|||||||
# 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": "16.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 +0,0 @@
|
|||||||
from . import sale_order
|
|
@@ -1,11 +0,0 @@
|
|||||||
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
|
|
@@ -1,86 +0,0 @@
|
|||||||
# Copyright 2022 Laetitia Da Costa (Elabore)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "project_parent_tasks",
|
|
||||||
"version": "14.0.1.0.0",
|
|
||||||
"author": "Elabore",
|
|
||||||
"website": "https://elabore.coop",
|
|
||||||
"maintainer": "Laetitia Da Costa",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"category": "Project",
|
|
||||||
"summary": "in parent's tasks dropdown field, show only tasks from the current projet",
|
|
||||||
"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_parent_tasks
|
|
||||||
====================
|
|
||||||
|
|
||||||
when selecting a parent task in a task, display only tasks from the current project
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Use Odoo normal module installation procedure to install ``project_parent_tasks``.
|
|
||||||
|
|
||||||
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
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Laetitia Da Costa (https://github.com/LaetitiaElabore)
|
|
||||||
|
|
||||||
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",
|
|
||||||
],
|
|
||||||
# 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,13 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<odoo>
|
|
||||||
<record model="ir.ui.view" id="view_tasks_form2_parent_project_inherited">
|
|
||||||
<field name="name">view.tasks.form2.parent.project.inherited</field>
|
|
||||||
<field name="model">project.task</field>
|
|
||||||
<field name="inherit_id" ref="project.view_task_form2" />
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//page[@name='extra_info']//field[@name='parent_id']" position="attributes">
|
|
||||||
<attribute name="domain">[('project_id','=', project_id)]</attribute>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
</odoo>
|
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_request_data",
|
"name": "project_request_data",
|
||||||
"version": "16.0.1.2.0",
|
"version": "13.0.1.0.0",
|
||||||
"author": "Elabore",
|
"author": "Elabore",
|
||||||
"website": "https://elabore.coop",
|
"website": "https://elabore.coop",
|
||||||
"maintainer": "Stéphan Sainléger",
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 14.0\n"
|
"Project-Id-Version: Odoo Server 13.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-08-26 12:51+0000\n"
|
"POT-Creation-Date: 2022-08-26 12:51+0000\n"
|
||||||
"PO-Revision-Date: 2022-08-26 12:51+0000\n"
|
"PO-Revision-Date: 2022-08-26 12:51+0000\n"
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<template id="portal_my_task_request_data" name="My Task: Request Data" inherit_id="project.portal_my_task" priority="40">
|
<template id="portal_my_task_request_data" name="My Task: Request Data" inherit_id="project.portal_my_task" priority="40">
|
||||||
<xpath expr="//div[@id='card_body']/div[hasclass('row','mb-4','container')]" position="after">
|
<xpath expr="//t[@t-set='card_body']/div[hasclass('row','mb-4')]" position="after">
|
||||||
<div id="request_data" class="row mb-4">
|
<div id="request_data" class="row mb-4">
|
||||||
<div class="col-12 col-md-6" t-if="task.service_id">
|
<div class="col-12 col-md-6" t-if="task.service_id">
|
||||||
<strong>Service:</strong>
|
<strong>Service:</strong>
|
||||||
|
@@ -12,18 +12,4 @@
|
|||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="view_task_kanban_request_data" model="ir.ui.view">
|
|
||||||
<field name="name">project.task.kanban.request.data</field>
|
|
||||||
<field name="inherit_id" ref="project.view_task_kanban" />
|
|
||||||
<field name="model">project.task</field>
|
|
||||||
<field name="arch" type="xml">
|
|
||||||
<xpath expr="//field[@name='name']" position="before">
|
|
||||||
<div style="font-size:11px; margin-bottom: 8px;"><field name="create_date" widget="date"/></div>
|
|
||||||
</xpath>
|
|
||||||
<xpath expr="//field[@name='tag_ids']" position="before">
|
|
||||||
<span style="background:lightblue; font-size:11px"><field name="service_id"/></span>
|
|
||||||
<span style="background:lightsteelblue; font-size:11px"><field name="request_type_id"/></span>
|
|
||||||
</xpath>
|
|
||||||
</field>
|
|
||||||
</record>
|
|
||||||
</odoo>
|
</odoo>
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_task_portal_form",
|
"name": "project_task_portal_form",
|
||||||
"version": "16.0.1.1.0",
|
"version": "13.0.1.1.0",
|
||||||
"author": "Elabore",
|
"author": "Elabore",
|
||||||
"website": "https://elabore.coop",
|
"website": "https://elabore.coop",
|
||||||
"maintainer": "Stéphan Sainléger",
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
@@ -11,9 +11,9 @@ class PortalTaskCreation(CustomerPortal):
|
|||||||
"name",
|
"name",
|
||||||
"service_id",
|
"service_id",
|
||||||
"request_type_id",
|
"request_type_id",
|
||||||
"small_description", #not in v14
|
"small_description",
|
||||||
"access", #not in v14
|
"access",
|
||||||
"bug_report", #not in v14
|
"bug_report",
|
||||||
"priority",
|
"priority",
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ class PortalTaskCreation(CustomerPortal):
|
|||||||
website=True,
|
website=True,
|
||||||
)
|
)
|
||||||
def portal_task_creation(self, access_token=None, redirect=None, **kw):
|
def portal_task_creation(self, access_token=None, redirect=None, **kw):
|
||||||
values = self._taskform_get_page_view_values(request.env.user.partner_id, access_token, **kw)
|
values = self._task_get_page_view_values(request.env.user.partner_id, access_token, **kw)
|
||||||
request_types = request.env["request.type"].sudo().search([])
|
request_types = request.env["request.type"].sudo().search([])
|
||||||
task_services = request.env["task.service"].sudo().search([])
|
task_services = request.env["task.service"].sudo().search([])
|
||||||
priorities = self._get_task_priorities()
|
priorities = self._get_task_priorities()
|
||||||
@@ -79,17 +79,17 @@ class PortalTaskCreation(CustomerPortal):
|
|||||||
description = ""
|
description = ""
|
||||||
if values.get("small_description", False):
|
if values.get("small_description", False):
|
||||||
description = description + "<b>DESCRIPTION:</b><br/>" + values["small_description"]
|
description = description + "<b>DESCRIPTION:</b><br/>" + values["small_description"]
|
||||||
del values['small_description']
|
|
||||||
if values.get("access", False):
|
if values.get("access", False):
|
||||||
description = description + "<br/><br/><b>ACCESS:</b><br/>" + values["access"]
|
description = description + "<br/><br/><b>ACCESS:</b><br/>" + values["access"]
|
||||||
del values['access']
|
|
||||||
if values.get("bug_report", False):
|
if values.get("bug_report", False):
|
||||||
description = description + "<br/><br/><b>BUG REPORT:</b><br/>" + values["bug_report"]
|
description = description + "<br/><br/><b>BUG REPORT:</b><br/>" + values["bug_report"]
|
||||||
del values['bug_report']
|
|
||||||
|
|
||||||
values["description"] = description
|
values["description"] = description
|
||||||
values["attachments"] = request.httprequest.files.getlist("attachment")
|
values["attachments"] = []
|
||||||
|
for field_name, field_value in request.params.items():
|
||||||
|
# If the value of the field if a file
|
||||||
|
if field_name == 'attachment' and field_value != "":
|
||||||
|
field_value.field_name = field_name
|
||||||
|
values["attachments"].append(field_value)
|
||||||
return values
|
return values
|
||||||
|
|
||||||
@http.route(
|
@http.route(
|
||||||
@@ -105,21 +105,17 @@ class PortalTaskCreation(CustomerPortal):
|
|||||||
values = self._compute_form_data(kwargs)
|
values = self._compute_form_data(kwargs)
|
||||||
values["project_id"] = user.default_project_id.id
|
values["project_id"] = user.default_project_id.id
|
||||||
values["partner_id"] = user.partner_id.id
|
values["partner_id"] = user.partner_id.id
|
||||||
values["user_ids"] = [(6, 0, [user.id])]
|
values["user_id"] = None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
files = values.get("attachments", False)
|
|
||||||
del values['attachments']
|
|
||||||
|
|
||||||
# Create task
|
# Create task
|
||||||
task_id = request.env["project.task"].sudo().create(values) #use sudo to avoid access error on resource calendar when user_id is set
|
task_id = request.env["project.task"].create(values)
|
||||||
|
|
||||||
# Add attachments
|
# Add attachments
|
||||||
for file in files:
|
for file in values.get("attachments", False):
|
||||||
attachment_value = {
|
attachment_value = {
|
||||||
'name': file.filename,
|
'name': file.filename,
|
||||||
'datas': base64.encodestring(file.read()),
|
'datas': base64.encodestring(file.read()),
|
||||||
|
'datas_fname': file.filename,
|
||||||
'res_model': "project.task",
|
'res_model': "project.task",
|
||||||
'res_id': task_id,
|
'res_id': task_id,
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 12.0\n"
|
"Project-Id-Version: Odoo Server 13.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-22 09:34+0000\n"
|
"POT-Creation-Date: 2022-09-22 09:34+0000\n"
|
||||||
"PO-Revision-Date: 2022-09-22 09:34+0000\n"
|
"PO-Revision-Date: 2022-09-22 09:34+0000\n"
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 12.0\n"
|
"Project-Id-Version: Odoo Server 13.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-09-22 09:35+0000\n"
|
"POT-Creation-Date: 2022-09-22 09:35+0000\n"
|
||||||
"PO-Revision-Date: 2022-09-22 09:35+0000\n"
|
"PO-Revision-Date: 2022-09-22 09:35+0000\n"
|
||||||
|
@@ -4,16 +4,7 @@
|
|||||||
<t t-call="portal.portal_layout">
|
<t t-call="portal.portal_layout">
|
||||||
<!-- <div id="wrap" class="col-lg-6 container"></div> -->
|
<!-- <div id="wrap" class="col-lg-6 container"></div> -->
|
||||||
<t t-set="additional_title">Task creation form</t>
|
<t t-set="additional_title">Task creation form</t>
|
||||||
<form
|
<form action="/task/create" method="post" accept-charset="UTF-8" class="s_website_form col-md-12 mt32" data-model_name="project.task" data-force_action="" data-success_page="" enctype="multipart/form-data">
|
||||||
action="/task/create"
|
|
||||||
method="post"
|
|
||||||
accept-charset="UTF-8"
|
|
||||||
class="s_website_form col-md-12 mt32"
|
|
||||||
data-model_name="project.task"
|
|
||||||
data-force_action=""
|
|
||||||
data-success_page=""
|
|
||||||
enctype="multipart/form-data">
|
|
||||||
|
|
||||||
<div class="oe_structure" id="oe_structure_portal_task_creation_form_1" />
|
<div class="oe_structure" id="oe_structure_portal_task_creation_form_1" />
|
||||||
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
|
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()" />
|
||||||
<div class="row">
|
<div class="row">
|
||||||
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_timebox",
|
"name": "project_timebox",
|
||||||
"version": "16.0.1.0.0",
|
"version": "13.0.1.0.0",
|
||||||
"author": "Elabore",
|
"author": "Elabore",
|
||||||
"website": "https://elabore.coop",
|
"website": "https://elabore.coop",
|
||||||
"maintainer": "Stéphan Sainléger",
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
@@ -15,6 +15,16 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: \n"
|
"Content-Transfer-Encoding: \n"
|
||||||
"Plural-Forms: \n"
|
"Plural-Forms: \n"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_timebox.portal_my_task_timebox
|
||||||
|
msgid "<strong>Timebox Max:</strong>"
|
||||||
|
msgstr "<strong>Temps estimé maxi :</strong>"
|
||||||
|
|
||||||
|
#. module: project_timebox
|
||||||
|
#: model_terms:ir.ui.view,arch_db:project_timebox.portal_my_task_timebox
|
||||||
|
msgid "<strong>Timebox Min:</strong>"
|
||||||
|
msgstr "<strong>Temps estimé mini :</strong>"
|
||||||
|
|
||||||
#. module: project_timebox
|
#. module: project_timebox
|
||||||
#: model:ir.model.fields,field_description:project_timebox.field_timebox__create_uid
|
#: model:ir.model.fields,field_description:project_timebox.field_timebox__create_uid
|
||||||
msgid "Created by"
|
msgid "Created by"
|
||||||
|
@@ -1,13 +1,13 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<template id="portal_my_task_timebox" name="My Task: Timebox" inherit_id="project.portal_my_task" priority="40">
|
<template id="portal_my_task_timebox" name="My Task: Timebox" inherit_id="project.portal_my_task" priority="40">
|
||||||
<xpath expr="//div[@t-if='task.date_deadline']" position="after">
|
<xpath expr="//t[@t-set='card_body']/div[hasclass('row','mb-4')]" position="after">
|
||||||
<div id="timebox" class="row mb-2">
|
<div id="timebox" class="row mb-2">
|
||||||
<div t-if="task.timebox_min_id">
|
<div class="col-12 col-md-6" t-if="task.timebox_min_id">
|
||||||
<strong>Timebox Min:</strong>
|
<strong>Timebox Min:</strong>
|
||||||
<span t-field="task.timebox_min_id" />
|
<span t-field="task.timebox_min_id" />
|
||||||
</div>
|
</div>
|
||||||
<div t-if="task.timebox_max_id">
|
<div class="col-12 col-md-6" t-if="task.timebox_max_id">
|
||||||
<strong>Timebox Max:</strong>
|
<strong>Timebox Max:</strong>
|
||||||
<span t-field="task.timebox_max_id" />
|
<span t-field="task.timebox_max_id" />
|
||||||
</div>
|
</div>
|
||||||
|
@@ -1,14 +1,14 @@
|
|||||||
=================
|
==============================
|
||||||
project_assignees
|
project_timesheet_funding_wish
|
||||||
=================
|
==============================
|
||||||
|
|
||||||
Add multiple assignees field to project task
|
Add a funding wish select field to timesheet line.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
Use Odoo normal procedure to install add-ons to install
|
Use Odoo normal procedure to install add-ons to install
|
||||||
``project_assignees``.
|
``project_timesheet_funding_wish``.
|
||||||
|
|
||||||
Known issues / Roadmap
|
Known issues / Roadmap
|
||||||
======================
|
======================
|
||||||
@@ -16,9 +16,8 @@ Known issues / Roadmap
|
|||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Bugs are tracked on `our issues website
|
Bugs are tracked on `our issues website <https://github.com/elabore-coop/project-tools/issues>`_. In
|
||||||
<https://github.com/elabore-coop/project-tools/issues>`_. In case of
|
case of trouble, please check there if your issue has already been
|
||||||
trouble, please check there if your issue has already been
|
|
||||||
reported. If you spotted it first, help us smashing it by providing a
|
reported. If you spotted it first, help us smashing it by providing a
|
||||||
detailed and welcomed feedback.
|
detailed and welcomed feedback.
|
||||||
|
|
||||||
@@ -32,6 +31,8 @@ Images
|
|||||||
Contributors
|
Contributors
|
||||||
------------
|
------------
|
||||||
* Stéphan Sainléger <https://github.com/stephansainleger>
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
|
* Valentin Lab <valentin.lab@kalysto.org>
|
||||||
|
* Nicolas Jeudy <https://github.com/njeudy>
|
||||||
|
|
||||||
Funders
|
Funders
|
||||||
-------
|
-------
|
||||||
@@ -41,5 +42,6 @@ The development of this module has been financially supported by:
|
|||||||
|
|
||||||
Maintainer
|
Maintainer
|
||||||
----------
|
----------
|
||||||
|
|
||||||
This module is maintained by Elabore.
|
This module is maintained by Elabore.
|
||||||
|
|
||||||
|
|
@@ -1,2 +1 @@
|
|||||||
|
|
||||||
from . import models
|
from . import models
|
@@ -2,40 +2,38 @@
|
|||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_link_from_invoice",
|
"name": "project_timesheet_funding_wish",
|
||||||
"version": "16.0.1.0.0",
|
"version": "13.0.1.0.0",
|
||||||
"author": "Elabore",
|
"author": "Elabore",
|
||||||
"website": "https://github.com/elabore-coop/project-tools",
|
"website": "https://github.com/elabore-coop/project-tools",
|
||||||
"maintainer": "Clément Thomas",
|
"maintainer": "Stéphan Sainléger",
|
||||||
"license": "AGPL-3",
|
"license": "AGPL-3",
|
||||||
"category": "Tools",
|
"category": "Tools",
|
||||||
"summary": "Add link from invoice to project",
|
"summary": "Add a funding wish select field to timesheet line.",
|
||||||
"description": """
|
"description": """
|
||||||
:image: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
:image: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
||||||
:alt: License: AGPL-3
|
:alt: License: AGPL-3
|
||||||
=================
|
==============================
|
||||||
project_link_from_invoice
|
project_timesheet_funding_wish
|
||||||
=================
|
==============================
|
||||||
|
|
||||||
Users can access to related project from invoices
|
Add a funding wish select field to timesheet line.
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
Install ``project_link_from_invoice``, all dependencies will be installed by default.
|
Use Odoo normal procedure to install add-ons to install
|
||||||
|
``project_timesheet_funding_wish``.
|
||||||
|
|
||||||
Known issues / Roadmap
|
Known issues / Roadmap
|
||||||
======================
|
======================
|
||||||
|
|
||||||
None yet.
|
|
||||||
|
|
||||||
Bug Tracker
|
Bug Tracker
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Bugs are tracked on `our issues website
|
Bugs are tracked on `our issues website <https://github.com/elabore-coop/project-tools/issues>`_. In
|
||||||
<https://github.com/elabore-coop/project-tools/issues>`_. In case of
|
case of trouble, please check there if your issue has already been
|
||||||
trouble, please check there if your issue has already been
|
|
||||||
reported. If you spotted it first, help us smashing it by providing a
|
reported. If you spotted it first, help us smashing it by providing a
|
||||||
detailed and welcomed feedback.
|
detailed and welcomed feedback.
|
||||||
|
|
||||||
@@ -44,17 +42,16 @@ Credits
|
|||||||
|
|
||||||
Images
|
Images
|
||||||
------
|
------
|
||||||
|
|
||||||
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
* Elabore: `Icon <https://elabore.coop/web/image/res.company/1/logo?unique=f3db262>`_.
|
||||||
|
|
||||||
Contributors
|
Contributors
|
||||||
------------
|
------------
|
||||||
|
* Stéphan Sainléger <https://github.com/stephansainleger>
|
||||||
* Clément Thomas <https://github.com/stephansainleger>
|
* Valentin Lab <valentin.lab@kalysto.org>
|
||||||
|
* Nicolas Jeudy <https://github.com/njeudy>
|
||||||
|
|
||||||
Funders
|
Funders
|
||||||
-------
|
-------
|
||||||
|
|
||||||
The development of this module has been financially supported by:
|
The development of this module has been financially supported by:
|
||||||
* Elabore (https://elabore.coop)
|
* Elabore (https://elabore.coop)
|
||||||
|
|
||||||
@@ -67,9 +64,7 @@ This module is maintained by Elabore.
|
|||||||
# any module necessary for this one to work correctly
|
# any module necessary for this one to work correctly
|
||||||
"depends": [
|
"depends": [
|
||||||
"base",
|
"base",
|
||||||
"project",
|
"hr_timesheet",
|
||||||
"account",
|
|
||||||
"sale"
|
|
||||||
],
|
],
|
||||||
"qweb": [
|
"qweb": [
|
||||||
# "static/src/xml/*.xml",
|
# "static/src/xml/*.xml",
|
||||||
@@ -79,7 +74,7 @@ This module is maintained by Elabore.
|
|||||||
},
|
},
|
||||||
# always loaded
|
# always loaded
|
||||||
"data": [
|
"data": [
|
||||||
"views/account_move_view.xml",
|
"views/hr_timesheet.xml",
|
||||||
],
|
],
|
||||||
# only loaded in demonstration mode
|
# only loaded in demonstration mode
|
||||||
"demo": [],
|
"demo": [],
|
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>
|
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
{
|
{
|
||||||
"name": "project_user_default_project",
|
"name": "project_user_default_project",
|
||||||
"version": "16.0.1.0.0",
|
"version": "13.0.1.0.0",
|
||||||
"author": "Elabore",
|
"author": "Elabore",
|
||||||
"website": "https://elabore.coop",
|
"website": "https://elabore.coop",
|
||||||
"maintainer": "Stéphan Sainléger",
|
"maintainer": "Stéphan Sainléger",
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
#
|
#
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Odoo Server 14.0\n"
|
"Project-Id-Version: Odoo Server 13.0\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-08-25 15:58+0000\n"
|
"POT-Creation-Date: 2022-08-25 15:58+0000\n"
|
||||||
"PO-Revision-Date: 2022-08-25 15:58+0000\n"
|
"PO-Revision-Date: 2022-08-25 15:58+0000\n"
|
||||||
|
@@ -1,45 +0,0 @@
|
|||||||
=================
|
|
||||||
project_visibility_followers_portal
|
|
||||||
=================
|
|
||||||
|
|
||||||
Add project visibility : some employees and some portal users
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Use Odoo normal procedure to install add-ons to install
|
|
||||||
``project_visibility_followers_portal``.
|
|
||||||
|
|
||||||
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
|
|
||||||
------------
|
|
||||||
* Clément Thomas
|
|
||||||
|
|
||||||
Funders
|
|
||||||
-------
|
|
||||||
The development of this module has been financially supported by:
|
|
||||||
* Elabore (https://elabore.coop)
|
|
||||||
|
|
||||||
|
|
||||||
Maintainer
|
|
||||||
----------
|
|
||||||
|
|
||||||
This module is maintained by Elabore.
|
|
@@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
from . import models
|
|
@@ -1,91 +0,0 @@
|
|||||||
# Copyright 2022 Stéphan Sainléger (Elabore)
|
|
||||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "project_visibility_followers_portal",
|
|
||||||
"version": "16.0.1.0.0",
|
|
||||||
"author": "Elabore",
|
|
||||||
"website": "https://github.com/elabore-coop/project-tools",
|
|
||||||
"maintainer": "Clément Thomas",
|
|
||||||
"license": "AGPL-3",
|
|
||||||
"category": "Tools",
|
|
||||||
"summary": "Add project visibility : some employees and some portal users",
|
|
||||||
"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_visibility_followers_portal
|
|
||||||
=================
|
|
||||||
|
|
||||||
Add project visibility : some employees and some portal users
|
|
||||||
|
|
||||||
Installation
|
|
||||||
============
|
|
||||||
|
|
||||||
Install ``project_visibility_followers_portal``, 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
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Clément Thomas
|
|
||||||
|
|
||||||
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/project_security.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,100 +0,0 @@
|
|||||||
# Translation of Odoo Server.
|
|
||||||
# This file contains the translation of the following modules:
|
|
||||||
# * project_visibility_followers_portal
|
|
||||||
#
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"Project-Id-Version: Odoo Server 14.0\n"
|
|
||||||
"Report-Msgid-Bugs-To: \n"
|
|
||||||
"POT-Creation-Date: 2023-05-22 13:09+0000\n"
|
|
||||||
"PO-Revision-Date: 2023-05-22 13:09+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_visibility_followers_portal
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_project__display_name
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_task__display_name
|
|
||||||
msgid "Display Name"
|
|
||||||
msgstr "Nom affiché"
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_project__id
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_task__id
|
|
||||||
msgid "ID"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model.fields.selection,name:project_visibility_followers_portal.selection__project_project__privacy_visibility__followers_portal
|
|
||||||
msgid "Invited portal users and invited internal users"
|
|
||||||
msgstr "Utilisateurs portail invités et utilisateurs internes invités"
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_project____last_update
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_task____last_update
|
|
||||||
msgid "Last Modified on"
|
|
||||||
msgstr "Dernière modification le"
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model.fields,help:project_visibility_followers_portal.field_project_project__privacy_visibility
|
|
||||||
msgid ""
|
|
||||||
"People to whom this project and its tasks will be visible.\n"
|
|
||||||
"\n"
|
|
||||||
"- Invited internal users: when following a project, internal users will get access to all of its tasks without distinction. Otherwise, they will only get access to the specific tasks they are following.\n"
|
|
||||||
" A user with the project > administrator access right level can still access this project and its tasks, even if they are not explicitly part of the followers.\n"
|
|
||||||
"\n"
|
|
||||||
"- All internal users: all internal users can access the project and all of its tasks without distinction.\n"
|
|
||||||
"\n"
|
|
||||||
"- Invited portal users and all internal users: all internal users can access the project and all of its tasks without distinction.\n"
|
|
||||||
"When following a project, portal users will get access to all of its tasks without distinction. Otherwise, they will only get access to the specific tasks they are following."
|
|
||||||
msgstr ""
|
|
||||||
"Personnes pour lesquelles ce projet et ses tâches seront visibles.\n"
|
|
||||||
"\n"
|
|
||||||
"- Utilisateurs internes invités : lorsqu'ils sont abonnés à un projet, les utilisateurs internes auront accès à toutes ses tâches sans distinction. Autrement, ils auront uniquement accès aux tâches spécifiques auxquelles ils sont abonnés.\n"
|
|
||||||
" Un utilisateur avec le niveau de droits d'accès projet > administrateur peut toujours accéder au projet et à ses tâches, même s'il ne fait pas explicitement partie des abonnés.\n"
|
|
||||||
"\n"
|
|
||||||
"- Tous les utilisateurs internes : tous les utilisateurs internes peuvent accéder au projet et à toutes ses tâches sans distinction.\n"
|
|
||||||
"\n"
|
|
||||||
"- Les utilisateurs portail invités et tous les utilisateurs internes : tous les utilisateurs internes peuvent accéder au projet et à toutes ses tâches sans distinction.\n"
|
|
||||||
"Quand ils suivent un projet, les utilisateurs portail auront accès à toutes ses tâches sans distinction. Autrement, ils auront uniquement accès aux tâches spécifiques auxquelles ils sont abonnés."
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model,name:project_visibility_followers_portal.model_project_project
|
|
||||||
msgid "Project"
|
|
||||||
msgstr "Projet"
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model,name:project_visibility_followers_portal.model_project_task
|
|
||||||
msgid "Task"
|
|
||||||
msgstr "Tâche"
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: code:addons/project_visibility_followers_portal/models/project_task.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"The project visibility setting doesn't allow portal users to see the "
|
|
||||||
"project's tasks. (%s)"
|
|
||||||
msgstr ""
|
|
||||||
"Le paramètre de visibilité du projet ne permet pas aux utilisateurs portail "
|
|
||||||
"de voir les tâches du projet. (%s)"
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: code:addons/project_visibility_followers_portal/models/project_task.py:0
|
|
||||||
#, python-format
|
|
||||||
msgid ""
|
|
||||||
"The task cannot be shared with the recipient(s) because the privacy of the "
|
|
||||||
"project is too restricted. Set the privacy of the project to 'Visible by "
|
|
||||||
"following customers' in order to make it accessible by the recipient(s)."
|
|
||||||
msgstr ""
|
|
||||||
"La tâche ne peut pas être partagée avec le(s) destinataire(s) car la "
|
|
||||||
"confidentialité du projet est trop restreinte. Définissez la confidentialité"
|
|
||||||
" sur \"Visible par les clients suiveurs\" afin de la rendre accessible au(x)"
|
|
||||||
" destinataire(s)."
|
|
||||||
|
|
||||||
#. module: project_visibility_followers_portal
|
|
||||||
#: model:ir.model.fields,field_description:project_visibility_followers_portal.field_project_project__privacy_visibility
|
|
||||||
msgid "Visibility"
|
|
||||||
msgstr "Visibilité"
|
|
@@ -1,2 +0,0 @@
|
|||||||
|
|
||||||
from . import project_project, project_task
|
|
@@ -1,32 +0,0 @@
|
|||||||
|
|
||||||
from odoo import models, fields, api
|
|
||||||
|
|
||||||
|
|
||||||
class Project(models.Model):
|
|
||||||
_inherit = "project.project"
|
|
||||||
|
|
||||||
# A reprendre pour ajouter l’option de visibilité
|
|
||||||
privacy_visibility = fields.Selection(
|
|
||||||
selection_add=[('followers_portal','Invited portal users and invited internal users')],
|
|
||||||
ondelete={'followers_portal': 'set default'})
|
|
||||||
|
|
||||||
@api.model
|
|
||||||
def create(self, vals):
|
|
||||||
"""In case of "followers_portal" privacy visibility, add current user to list of allowed users.
|
|
||||||
Same behaviour than "portal" privacy visibility.
|
|
||||||
"""
|
|
||||||
project = super(Project, self).create(vals)
|
|
||||||
if project.privacy_visibility == 'followers_portal' and project.partner_id.user_ids:
|
|
||||||
project.message_partner_ids |= project.partner_id
|
|
||||||
return project
|
|
||||||
|
|
||||||
def write(self, vals):
|
|
||||||
"""In case of "followers_portal" privacy visibility, add current user to list of allowed users.
|
|
||||||
Same behaviour than "portal" privacy visibility.
|
|
||||||
"""
|
|
||||||
res = super(Project, self).write(vals)
|
|
||||||
if vals.get('partner_id') or vals.get('privacy_visibility'):
|
|
||||||
for project in self.filtered(lambda project: project.privacy_visibility == 'followers_portal'):
|
|
||||||
project.message_partner_ids |= project.partner_id
|
|
||||||
return res
|
|
||||||
|
|
@@ -1,60 +0,0 @@
|
|||||||
|
|
||||||
from odoo import models, fields, api, _
|
|
||||||
from odoo.exceptions import ValidationError
|
|
||||||
|
|
||||||
|
|
||||||
class Task(models.Model):
|
|
||||||
_inherit = "project.task"
|
|
||||||
|
|
||||||
@api.constrains('message_partner_ids')
|
|
||||||
def _check_no_portal_allowed(self):
|
|
||||||
for task in self.filtered(lambda t: t.project_id.privacy_visibility not in ('portal','followers_portal')):
|
|
||||||
portal_users = task.message_partner_ids.user_ids.filtered('share')
|
|
||||||
if portal_users:
|
|
||||||
user_names = ', '.join(portal_users[:10].mapped('name'))
|
|
||||||
raise ValidationError(_("The project visibility setting doesn't allow portal users to see the project's tasks. (%s)", user_names))
|
|
||||||
|
|
||||||
def _compute_access_warning(self):
|
|
||||||
for task in self.filtered(lambda x: x.project_id.privacy_visibility not in ('portal','followers_portal')):
|
|
||||||
task.access_warning = _(
|
|
||||||
"The task cannot be shared with the recipient(s) because the privacy of the project is too restricted. Set the privacy of the project to 'Visible by following customers' in order to make it accessible by the recipient(s).")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@api.model_create_multi
|
|
||||||
def create(self, vals_list):
|
|
||||||
tasks = super(Task, self).create(vals_list)
|
|
||||||
for task in tasks:
|
|
||||||
if task.project_id.privacy_visibility == 'followers_portal':
|
|
||||||
task._portal_ensure_token()
|
|
||||||
return tasks
|
|
||||||
|
|
||||||
def _notify_get_groups(self, msg_vals=None):
|
|
||||||
groups = super(Task, self)._notify_get_groups(msg_vals=msg_vals)
|
|
||||||
""" Handle project users and managers recipients that can assign
|
|
||||||
tasks and create new one directly from notification emails. Also give
|
|
||||||
access button to portal users and portal customers. If they are notified
|
|
||||||
they should probably have access to the document. """
|
|
||||||
self.ensure_one()
|
|
||||||
|
|
||||||
project_user_group_id = self.env.ref('project.group_project_user').id
|
|
||||||
project_manager_group_id = self.env.ref('project.group_project_manager').id
|
|
||||||
|
|
||||||
group_func = lambda pdata: pdata['type'] == 'user' and project_user_group_id in pdata['groups']
|
|
||||||
if self.project_id.privacy_visibility == 'followers_portal':
|
|
||||||
message_partner_ids = self.project_id.message_partner_ids.partner_id.ids
|
|
||||||
group_func = lambda pdata:\
|
|
||||||
pdata['type'] == 'user'\
|
|
||||||
and (
|
|
||||||
project_manager_group_id in pdata['groups']\
|
|
||||||
or (project_user_group_id in pdata['groups'] and pdata['id'] in message_partner_ids)
|
|
||||||
)
|
|
||||||
groups = [('group_project_user', group_func, {})]+groups
|
|
||||||
message_partner_ids = self.project_id.message_partner_ids
|
|
||||||
groups.insert(0, (
|
|
||||||
'message_partner_ids',
|
|
||||||
lambda pdata: pdata['type'] == 'portal' and pdata['id'] in message_partner_ids,
|
|
||||||
{}
|
|
||||||
))
|
|
||||||
|
|
||||||
return groups
|
|
@@ -1,63 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<odoo>
|
|
||||||
|
|
||||||
<data noupdate="0">
|
|
||||||
|
|
||||||
<record model="ir.rule" id="project_project_rule_followers_portal">
|
|
||||||
<field name="name">Project: Invited internal users and invited portal users</field>
|
|
||||||
<field name="model_id" ref="model_project_project"/>
|
|
||||||
<field name="domain_force">[
|
|
||||||
('privacy_visibility', '=', 'followers_portal'),
|
|
||||||
('message_partner_ids', 'in', [user.partner_id.id])
|
|
||||||
]</field>
|
|
||||||
<field name="groups" eval="[(4, ref('base.group_user')),(4, ref('base.group_portal'))]"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.rule" id="project_task_rule_followers_portal">
|
|
||||||
<field name="name">Task: Invited internal users and invited portal users</field>
|
|
||||||
<field name="model_id" ref="model_project_task"/>
|
|
||||||
<field name="domain_force">[
|
|
||||||
('project_id.privacy_visibility', '=', 'followers_portal'),
|
|
||||||
'|',
|
|
||||||
('project_id.message_partner_ids', 'child_of', [user.partner_id.commercial_partner_id.id]),
|
|
||||||
('message_partner_ids', 'child_of', [user.partner_id.commercial_partner_id.id]),
|
|
||||||
]</field>
|
|
||||||
<field name="groups" eval="[(4, ref('base.group_user')),(4, ref('base.group_portal'))]"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- extend existing rule -->
|
|
||||||
<record model="ir.rule" id="project.project_public_members_rule">
|
|
||||||
<field name="domain_force">[
|
|
||||||
'|',
|
|
||||||
('privacy_visibility', '!=', 'followers_portal'),
|
|
||||||
('message_partner_ids', 'in', [user.partner_id.id]),
|
|
||||||
'|',
|
|
||||||
('privacy_visibility', '!=', 'followers'),
|
|
||||||
('message_partner_ids', 'in', [user.partner_id.id])
|
|
||||||
]</field>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
<record model="ir.rule" id="project.task_visibility_rule">
|
|
||||||
<field name="domain_force">[
|
|
||||||
'|',
|
|
||||||
'&',
|
|
||||||
('project_id', '!=', False),
|
|
||||||
(
|
|
||||||
'|',
|
|
||||||
('project_id.privacy_visibility', '!=', 'followers_portal'),
|
|
||||||
('project_id.message_partner_ids', 'in', [user.partner_id.id]),
|
|
||||||
'|',
|
|
||||||
('project_id.privacy_visibility', '!=', 'followers'),
|
|
||||||
('project_id.message_partner_ids', 'in', [user.partner_id.id]),
|
|
||||||
),
|
|
||||||
'|',
|
|
||||||
('message_partner_ids', 'in', [user.partner_id.id]),
|
|
||||||
# to subscribe check access to the record, follower is not enough at creation
|
|
||||||
('user_ids', 'in', user.id)
|
|
||||||
]</field>
|
|
||||||
<field name="groups" eval="[(4,ref('base.group_user'))]"/>
|
|
||||||
</record>
|
|
||||||
|
|
||||||
</data>
|
|
||||||
</odoo>
|
|
Reference in New Issue
Block a user