From cd22dac68509337b6348a597dba20f9b34b21670 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Eduardo=20L=C3=B3pez=20Pe=C3=B1alver?=
Date: Wed, 21 Feb 2024 10:58:01 +0100
Subject: [PATCH 1/6] [ADD] sale_timesheet_analytic_propagation: update
timesheet analytic account from task.
This module allows to update the timesheet's analytic account when the task related to
it changes the analytic account. This only happens if the timesheet is not invoiced yet.
@moduon MT-5142
---
project_task_analytic_propagation/README.rst | 114 +++++
project_task_analytic_propagation/__init__.py | 1 +
.../__manifest__.py | 19 +
.../project_task_analytic_propagation.pot | 24 +
.../models/__init__.py | 1 +
.../models/account_analytic_line.py | 24 +
.../readme/CONTRIBUTORS.md | 2 +
.../readme/DESCRIPTION.md | 2 +
.../readme/USAGE.md | 11 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 452 ++++++++++++++++++
.../tests/__init__.py | 1 +
.../tests/test_hr_timesheet.py | 129 +++++
13 files changed, 780 insertions(+)
create mode 100644 project_task_analytic_propagation/README.rst
create mode 100644 project_task_analytic_propagation/__init__.py
create mode 100644 project_task_analytic_propagation/__manifest__.py
create mode 100644 project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot
create mode 100644 project_task_analytic_propagation/models/__init__.py
create mode 100644 project_task_analytic_propagation/models/account_analytic_line.py
create mode 100644 project_task_analytic_propagation/readme/CONTRIBUTORS.md
create mode 100644 project_task_analytic_propagation/readme/DESCRIPTION.md
create mode 100644 project_task_analytic_propagation/readme/USAGE.md
create mode 100644 project_task_analytic_propagation/static/description/icon.png
create mode 100644 project_task_analytic_propagation/static/description/index.html
create mode 100644 project_task_analytic_propagation/tests/__init__.py
create mode 100644 project_task_analytic_propagation/tests/test_hr_timesheet.py
diff --git a/project_task_analytic_propagation/README.rst b/project_task_analytic_propagation/README.rst
new file mode 100644
index 0000000000..499fc3b1fc
--- /dev/null
+++ b/project_task_analytic_propagation/README.rst
@@ -0,0 +1,114 @@
+=================================
+Project Task Analytic Propagation
+=================================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:cd89d301e3b1fc9a8d09fed055da543c8997957de72b6f1c5d5369e093b01023
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png
+ :target: https://odoo-community.org/page/development-status
+ :alt: Alpha
+.. |badge2| image:: https://img.shields.io/badge/licence-LGPL--3-blue.png
+ :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
+ :alt: License: LGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftimesheet-lightgray.png?logo=github
+ :target: https://github.com/OCA/timesheet/tree/16.0/project_task_analytic_propagation
+ :alt: OCA/timesheet
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/timesheet&target_branch=16.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module allows you to change the analytical account of the unbilled
+timesheet when your related task changes the account as it does with the
+sales order item.
+
+.. IMPORTANT::
+ This is an alpha version, the data model and design can change at any time without warning.
+ Only for development or testing purpose, do not use in production.
+ `More details on development status `_
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Usage
+=====
+
+To use this module, you need to:
+
+1. Go to Sales > Order and select an order with a project related to it
+ but not invoiced yet.
+2. Click on task's smart button and select a task with 'Sales Order
+ Item' set (or create a new task in other case).
+3. Select any analytic account in 'Extra Info'.
+4. Record some time on timesheets page.
+5. Go back to your order and create an invoice.
+6. Go to the previous task and record some time. Then change the
+ analytic account.
+7. In timesheet's page only not invoiced timesheets changed the analytic
+ account.
+8. To check this go to Timesheets > Reporting > by Task.
+9. Change to list view and group by Project > Task > Analytic Account.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues `_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Moduon
+
+Contributors
+------------
+
+- Eduardo López (`Moduon `__)
+- Rafael Blasco (`Moduon `__)
+
+Maintainers
+-----------
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+ :alt: Odoo Community Association
+ :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-edlopen| image:: https://github.com/edlopen.png?size=40px
+ :target: https://github.com/edlopen
+ :alt: edlopen
+.. |maintainer-rafaelbn| image:: https://github.com/rafaelbn.png?size=40px
+ :target: https://github.com/rafaelbn
+ :alt: rafaelbn
+
+Current `maintainers `__:
+
+|maintainer-edlopen| |maintainer-rafaelbn|
+
+This module is part of the `OCA/timesheet `_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/project_task_analytic_propagation/__init__.py b/project_task_analytic_propagation/__init__.py
new file mode 100644
index 0000000000..0650744f6b
--- /dev/null
+++ b/project_task_analytic_propagation/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/project_task_analytic_propagation/__manifest__.py b/project_task_analytic_propagation/__manifest__.py
new file mode 100644
index 0000000000..e59f01d504
--- /dev/null
+++ b/project_task_analytic_propagation/__manifest__.py
@@ -0,0 +1,19 @@
+# Copyright 2024 Moduon Team S.L.
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0)
+
+{
+ "name": "Project Task Analytic Propagation",
+ "summary": "Updates timesheet's analytic account when their task changes the analytic.",
+ "version": "16.0.1.0.0",
+ "development_status": "Alpha",
+ "category": "Timesheet",
+ "website": "https://github.com/OCA/timesheet",
+ "author": "Moduon, Odoo Community Association (OCA)",
+ "maintainers": ["edlopen", "rafaelbn"],
+ "license": "LGPL-3",
+ "application": False,
+ "installable": True,
+ "depends": [
+ "sale_timesheet",
+ ],
+}
diff --git a/project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot b/project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot
new file mode 100644
index 0000000000..5212997311
--- /dev/null
+++ b/project_task_analytic_propagation/i18n/project_task_analytic_propagation.pot
@@ -0,0 +1,24 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * project_task_analytic_propagation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: project_task_analytic_propagation
+#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: project_task_analytic_propagation
+#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line
+msgid "Analytic Line"
+msgstr ""
diff --git a/project_task_analytic_propagation/models/__init__.py b/project_task_analytic_propagation/models/__init__.py
new file mode 100644
index 0000000000..f69550ae91
--- /dev/null
+++ b/project_task_analytic_propagation/models/__init__.py
@@ -0,0 +1 @@
+from . import account_analytic_line
diff --git a/project_task_analytic_propagation/models/account_analytic_line.py b/project_task_analytic_propagation/models/account_analytic_line.py
new file mode 100644
index 0000000000..1169727f98
--- /dev/null
+++ b/project_task_analytic_propagation/models/account_analytic_line.py
@@ -0,0 +1,24 @@
+# Copyright 2024 Moduon Team S.L.
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0)
+from odoo import api, fields, models
+
+
+class AccountAnalyticLine(models.Model):
+ _inherit = "account.analytic.line"
+
+ account_id = fields.Many2one(
+ compute="_compute_account_id",
+ store=True,
+ readonly=False,
+ )
+
+ @api.depends("task_id.analytic_account_id")
+ def _compute_account_id(self):
+ """Change the analytic account non billed lines."""
+ timesheet_ids = self.filtered(
+ lambda t: not t.is_so_line_edited
+ and t._is_not_billed()
+ and t.task_id.analytic_account_id
+ )
+ for timesheet in timesheet_ids:
+ timesheet.account_id = timesheet.task_id.analytic_account_id
diff --git a/project_task_analytic_propagation/readme/CONTRIBUTORS.md b/project_task_analytic_propagation/readme/CONTRIBUTORS.md
new file mode 100644
index 0000000000..43dd2e5acd
--- /dev/null
+++ b/project_task_analytic_propagation/readme/CONTRIBUTORS.md
@@ -0,0 +1,2 @@
+- Eduardo López ([Moduon](https://www.moduon.team/))
+- Rafael Blasco ([Moduon](https://www.moduon.team/))
diff --git a/project_task_analytic_propagation/readme/DESCRIPTION.md b/project_task_analytic_propagation/readme/DESCRIPTION.md
new file mode 100644
index 0000000000..f2ae2c07b6
--- /dev/null
+++ b/project_task_analytic_propagation/readme/DESCRIPTION.md
@@ -0,0 +1,2 @@
+This module allows you to change the analytical account of the unbilled timesheet when your
+related task changes the account as it does with the sales order item.
diff --git a/project_task_analytic_propagation/readme/USAGE.md b/project_task_analytic_propagation/readme/USAGE.md
new file mode 100644
index 0000000000..9a8bebb750
--- /dev/null
+++ b/project_task_analytic_propagation/readme/USAGE.md
@@ -0,0 +1,11 @@
+To use this module, you need to:
+
+1. Go to Sales > Order and select an order with a project related to it but not invoiced yet.
+2. Click on task's smart button and select a task with 'Sales Order Item' set (or create a new task in other case).
+3. Select any analytic account in 'Extra Info'.
+4. Record some time on timesheets page.
+5. Go back to your order and create an invoice.
+6. Go to the previous task and record some time. Then change the analytic account.
+7. In timesheet's page only not invoiced timesheets changed the analytic account.
+8. To check this go to Timesheets > Reporting > by Task.
+9. Change to list view and group by Project > Task > Analytic Account.
diff --git a/project_task_analytic_propagation/static/description/icon.png b/project_task_analytic_propagation/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/project_task_analytic_propagation/static/description/index.html b/project_task_analytic_propagation/static/description/index.html
new file mode 100644
index 0000000000..45fa454a9a
--- /dev/null
+++ b/project_task_analytic_propagation/static/description/index.html
@@ -0,0 +1,452 @@
+
+
+
+
+
+
+Project Task Analytic Propagation
+
+
+
+
+
Project Task Analytic Propagation
+
+
+
![Try me on Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)
+
This module allows you to change the analytical account of the unbilled
+timesheet when your related task changes the account as it does with the
+sales order item.
+
+
Important
+
This is an alpha version, the data model and design can change at any time without warning.
+Only for development or testing purpose, do not use in production.
+More details on development status
+
+
Table of contents
+
+
+
+
To use this module, you need to:
+
+- Go to Sales > Order and select an order with a project related to it
+but not invoiced yet.
+- Click on task’s smart button and select a task with ‘Sales Order
+Item’ set (or create a new task in other case).
+- Select any analytic account in ‘Extra Info’.
+- Record some time on timesheets page.
+- Go back to your order and create an invoice.
+- Go to the previous task and record some time. Then change the
+analytic account.
+- In timesheet’s page only not invoiced timesheets changed the analytic
+account.
+- To check this go to Timesheets > Reporting > by Task.
+- Change to list view and group by Project > Task > Analytic Account.
+
+
+
+
+
Bugs are tracked on GitHub Issues.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+
![Odoo Community Association](https://odoo-community.org/logo.png)
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
Current maintainers:
+
![rafaelbn](https://github.com/rafaelbn.png?size=40px)
+
This module is part of the OCA/timesheet project on GitHub.
+
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
+
+
+
+
+
diff --git a/project_task_analytic_propagation/tests/__init__.py b/project_task_analytic_propagation/tests/__init__.py
new file mode 100644
index 0000000000..48a7960b7e
--- /dev/null
+++ b/project_task_analytic_propagation/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_hr_timesheet
diff --git a/project_task_analytic_propagation/tests/test_hr_timesheet.py b/project_task_analytic_propagation/tests/test_hr_timesheet.py
new file mode 100644
index 0000000000..c07185a851
--- /dev/null
+++ b/project_task_analytic_propagation/tests/test_hr_timesheet.py
@@ -0,0 +1,129 @@
+# Copyright 2024 Moduon Team S.L.
+# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0)
+from odoo.tests import new_test_user, tagged, users
+
+from odoo.addons.sale_timesheet.tests.common import TestCommonSaleTimesheet
+
+
+@tagged("-at_install", "post_install")
+class HrTimesheet(TestCommonSaleTimesheet):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ cls.analytic_user = new_test_user(
+ cls.env, "test_user", "analytic.group_analytic_accounting,base.group_user"
+ )
+ cls.employee_user.user_id = cls.analytic_user.id
+ cls.task1 = cls.env["project.task"].create(
+ {
+ "name": "Task One",
+ "priority": "0",
+ "kanban_state": "normal",
+ "project_id": cls.project_global.id,
+ "partner_id": cls.partner_b.id,
+ "user_ids": [(6, 0, cls.analytic_user.ids)],
+ }
+ )
+ cls.env["account.analytic.line"].create(
+ [
+ {
+ "project_id": cls.project_global.id,
+ "task_id": cls.task1.id,
+ "name": "my first timesheet",
+ "unit_amount": 4,
+ "employee_id": cls.employee_user.id,
+ },
+ {
+ "project_id": cls.project_global.id,
+ "task_id": cls.task1.id,
+ "name": "my second timesheet",
+ "unit_amount": 4,
+ "employee_id": cls.employee_user.id,
+ },
+ {
+ "project_id": cls.project_global.id,
+ "task_id": cls.task1.id,
+ "name": "my third timesheet",
+ "unit_amount": 4,
+ "employee_id": cls.employee_user.id,
+ },
+ ]
+ )
+ cls.plan = cls.env["account.analytic.plan"].create(
+ {
+ "name": "Projects Plan",
+ "company_id": False,
+ }
+ )
+ cls.analytic_account_maintenance = cls.env["account.analytic.account"].create(
+ {
+ "name": "Maintenance Analytic Account for Test Customer",
+ "partner_id": cls.partner_b.id,
+ "code": "MAINTENANCE",
+ "plan_id": cls.plan.id,
+ }
+ )
+
+ cls.so = (
+ cls.env["sale.order"]
+ .with_context(mail_notrack=True, mail_create_nolog=True)
+ .create(
+ {
+ "partner_id": cls.partner_b.id,
+ "partner_invoice_id": cls.partner_b.id,
+ "partner_shipping_id": cls.partner_b.id,
+ }
+ )
+ )
+ cls.so_line_1 = cls.env["sale.order.line"].create(
+ [
+ {
+ "order_id": cls.so.id,
+ "name": cls.product_delivery_timesheet1.name,
+ "product_id": cls.product_delivery_timesheet1.id,
+ "product_uom_qty": 10,
+ "price_unit": cls.product_delivery_timesheet1.list_price,
+ }
+ ]
+ )
+ cls.task1.sale_line_id = cls.so_line_1
+ cls.so.action_confirm()
+ cls.so._create_invoices()
+
+ @users("test_user")
+ def test_compute_account_id_01(self):
+ """Test analytic account doesn't change if timesheets are invoiced."""
+ self.assertEqual(
+ self.task1.timesheet_ids.mapped("account_id"),
+ self.analytic_account_sale,
+ )
+ self.task1.analytic_account_id = self.analytic_account_maintenance
+ self.assertEqual(
+ self.task1.timesheet_ids.mapped("account_id"),
+ self.analytic_account_sale,
+ )
+
+ @users("test_user")
+ def test_compute_account_id_02(self):
+ """Test only not billed analytic account lines change."""
+ self.assertEqual(
+ self.task1.timesheet_ids.mapped("account_id"),
+ self.analytic_account_sale,
+ )
+ timesheet_id = self.env["account.analytic.line"].create(
+ [
+ {
+ "project_id": self.project_global.id,
+ "task_id": self.task1.id,
+ "name": "Log additional time",
+ "unit_amount": 4,
+ "employee_id": self.employee_user.id,
+ }
+ ]
+ )
+ self.task1.analytic_account_id = self.analytic_account_maintenance
+ self.assertEqual(timesheet_id.account_id, self.analytic_account_maintenance)
+ self.assertNotEqual(
+ self.task1.timesheet_ids.mapped("account_id"),
+ self.analytic_account_maintenance,
+ )
From e56839be045e5be60b9a72085925f0ef7ee38b17 Mon Sep 17 00:00:00 2001
From: mymage
Date: Mon, 26 Feb 2024 13:35:18 +0000
Subject: [PATCH 2/6] Added translation using Weblate (Italian)
---
project_task_analytic_propagation/i18n/it.po | 25 ++++++++++++++++++++
1 file changed, 25 insertions(+)
create mode 100644 project_task_analytic_propagation/i18n/it.po
diff --git a/project_task_analytic_propagation/i18n/it.po b/project_task_analytic_propagation/i18n/it.po
new file mode 100644
index 0000000000..2e593805ad
--- /dev/null
+++ b/project_task_analytic_propagation/i18n/it.po
@@ -0,0 +1,25 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * project_task_analytic_propagation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: project_task_analytic_propagation
+#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: project_task_analytic_propagation
+#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line
+msgid "Analytic Line"
+msgstr ""
From ad784628b86d65e4de7aaac23f6af7712ec2bb5c Mon Sep 17 00:00:00 2001
From: mymage
Date: Mon, 26 Feb 2024 13:35:35 +0000
Subject: [PATCH 3/6] Translated using Weblate (Italian)
Currently translated at 100.0% (2 of 2 strings)
Translation: timesheet-16.0/timesheet-16.0-project_task_analytic_propagation
Translate-URL: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation/it/
---
project_task_analytic_propagation/i18n/it.po | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/project_task_analytic_propagation/i18n/it.po b/project_task_analytic_propagation/i18n/it.po
index 2e593805ad..ed9e3aef2e 100644
--- a/project_task_analytic_propagation/i18n/it.po
+++ b/project_task_analytic_propagation/i18n/it.po
@@ -6,20 +6,22 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2024-02-26 16:34+0000\n"
+"Last-Translator: mymage \n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.17\n"
#. module: project_task_analytic_propagation
#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id
msgid "Analytic Account"
-msgstr ""
+msgstr "Conto analitico"
#. module: project_task_analytic_propagation
#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line
msgid "Analytic Line"
-msgstr ""
+msgstr "Riga analitica"
From c67be9acf27c805ccd1296e35e286329bc5b932f Mon Sep 17 00:00:00 2001
From: Rodrigo Macedo
Date: Mon, 20 May 2024 22:53:02 +0000
Subject: [PATCH 4/6] Added translation using Weblate (Portuguese (Brazil))
---
.../i18n/pt_BR.po | 25 +++++++++++++++++++
1 file changed, 25 insertions(+)
create mode 100644 project_task_analytic_propagation/i18n/pt_BR.po
diff --git a/project_task_analytic_propagation/i18n/pt_BR.po b/project_task_analytic_propagation/i18n/pt_BR.po
new file mode 100644
index 0000000000..178ceda946
--- /dev/null
+++ b/project_task_analytic_propagation/i18n/pt_BR.po
@@ -0,0 +1,25 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * project_task_analytic_propagation
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#. module: project_task_analytic_propagation
+#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id
+msgid "Analytic Account"
+msgstr ""
+
+#. module: project_task_analytic_propagation
+#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line
+msgid "Analytic Line"
+msgstr ""
From bcfe78a0c3c2ea47cdf8150d6ae8c6c4f25036a2 Mon Sep 17 00:00:00 2001
From: Rodrigo Macedo
Date: Wed, 22 May 2024 00:38:50 +0000
Subject: [PATCH 5/6] Translated using Weblate (Portuguese (Brazil))
Currently translated at 100.0% (2 of 2 strings)
Translation: timesheet-16.0/timesheet-16.0-project_task_analytic_propagation
Translate-URL: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation/pt_BR/
---
project_task_analytic_propagation/i18n/pt_BR.po | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/project_task_analytic_propagation/i18n/pt_BR.po b/project_task_analytic_propagation/i18n/pt_BR.po
index 178ceda946..b6ea341226 100644
--- a/project_task_analytic_propagation/i18n/pt_BR.po
+++ b/project_task_analytic_propagation/i18n/pt_BR.po
@@ -6,20 +6,23 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2024-05-22 03:22+0000\n"
+"Last-Translator: Rodrigo Macedo \n"
"Language-Team: none\n"
"Language: pt_BR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.17\n"
#. module: project_task_analytic_propagation
#: model:ir.model.fields,field_description:project_task_analytic_propagation.field_account_analytic_line__account_id
msgid "Analytic Account"
-msgstr ""
+msgstr "Conta Analítica"
#. module: project_task_analytic_propagation
#: model:ir.model,name:project_task_analytic_propagation.model_account_analytic_line
msgid "Analytic Line"
-msgstr ""
+msgstr "Linha Analítica"
From b2df0cf1df93d32ad35777bb0d1c1aa0ed600f1f Mon Sep 17 00:00:00 2001
From: JordiToledo
Date: Mon, 3 Feb 2025 10:33:09 +0100
Subject: [PATCH 6/6] [MIG] project_task_analytic_propagation: Migration to
17.0
---
project_task_analytic_propagation/README.rst | 14 +++++++-------
.../__manifest__.py | 5 +++--
.../pyproject.toml | 3 +++
.../static/description/index.html | 18 ++++++++++--------
.../tests/test_hr_timesheet.py | 11 ++++++++---
5 files changed, 31 insertions(+), 20 deletions(-)
create mode 100644 project_task_analytic_propagation/pyproject.toml
diff --git a/project_task_analytic_propagation/README.rst b/project_task_analytic_propagation/README.rst
index 499fc3b1fc..5529bada92 100644
--- a/project_task_analytic_propagation/README.rst
+++ b/project_task_analytic_propagation/README.rst
@@ -17,13 +17,13 @@ Project Task Analytic Propagation
:target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
:alt: License: LGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Ftimesheet-lightgray.png?logo=github
- :target: https://github.com/OCA/timesheet/tree/16.0/project_task_analytic_propagation
+ :target: https://github.com/OCA/timesheet/tree/17.0/project_task_analytic_propagation
:alt: OCA/timesheet
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/timesheet-16-0/timesheet-16-0-project_task_analytic_propagation
+ :target: https://translation.odoo-community.org/projects/timesheet-17-0/timesheet-17-0-project_task_analytic_propagation
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/timesheet&target_branch=16.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/timesheet&target_branch=17.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -67,7 +67,7 @@ Bug Tracker
Bugs are tracked on `GitHub Issues `_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -82,8 +82,8 @@ Authors
Contributors
------------
-- Eduardo López (`Moduon `__)
-- Rafael Blasco (`Moduon `__)
+- Eduardo López (`Moduon `__)
+- Rafael Blasco (`Moduon `__)
Maintainers
-----------
@@ -109,6 +109,6 @@ Current `maintainers `__:
|maintainer-edlopen| |maintainer-rafaelbn|
-This module is part of the `OCA/timesheet `_ project on GitHub.
+This module is part of the `OCA/timesheet `_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/project_task_analytic_propagation/__manifest__.py b/project_task_analytic_propagation/__manifest__.py
index e59f01d504..240b36bb28 100644
--- a/project_task_analytic_propagation/__manifest__.py
+++ b/project_task_analytic_propagation/__manifest__.py
@@ -3,8 +3,9 @@
{
"name": "Project Task Analytic Propagation",
- "summary": "Updates timesheet's analytic account when their task changes the analytic.",
- "version": "16.0.1.0.0",
+ "summary": "Updates timesheet's analytic account"
+ " when their task changes the analytic.",
+ "version": "17.0.1.0.0",
"development_status": "Alpha",
"category": "Timesheet",
"website": "https://github.com/OCA/timesheet",
diff --git a/project_task_analytic_propagation/pyproject.toml b/project_task_analytic_propagation/pyproject.toml
new file mode 100644
index 0000000000..4231d0cccb
--- /dev/null
+++ b/project_task_analytic_propagation/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/project_task_analytic_propagation/static/description/index.html b/project_task_analytic_propagation/static/description/index.html
index 45fa454a9a..204639f087 100644
--- a/project_task_analytic_propagation/static/description/index.html
+++ b/project_task_analytic_propagation/static/description/index.html
@@ -1,4 +1,3 @@
-
@@ -9,10 +8,11 @@
/*
:Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
+:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
+Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
@@ -275,7 +275,7 @@
margin-left: 2em ;
margin-right: 2em }
-pre.code .ln { color: grey; } /* line numbers */
+pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -301,7 +301,7 @@
span.pre {
white-space: pre }
-span.problematic {
+span.problematic, pre.problematic {
color: red }
span.section-subtitle {
@@ -369,7 +369,7 @@ Project Task Analytic Propagation
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:cd89d301e3b1fc9a8d09fed055da543c8997957de72b6f1c5d5369e093b01023
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-
![Try me on Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)
+
![Try me on Runboat](https://img.shields.io/badge/runboat-Try%20me-875A7B.png)
This module allows you to change the analytical account of the unbilled
timesheet when your related task changes the account as it does with the
sales order item.
@@ -416,7 +416,7 @@
Bugs are tracked on GitHub Issues.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -437,13 +437,15 @@
This module is maintained by the OCA.
-
![Odoo Community Association](https://odoo-community.org/logo.png)
+
+
+
OCA, or the Odoo Community Association, is a nonprofit organization whose
mission is to support the collaborative development of Odoo features and
promote its widespread use.
Current maintainers:
![rafaelbn](https://github.com/rafaelbn.png?size=40px)
-
This module is part of the OCA/timesheet project on GitHub.
+
This module is part of the OCA/timesheet project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/project_task_analytic_propagation/tests/test_hr_timesheet.py b/project_task_analytic_propagation/tests/test_hr_timesheet.py
index c07185a851..b55b828c57 100644
--- a/project_task_analytic_propagation/tests/test_hr_timesheet.py
+++ b/project_task_analytic_propagation/tests/test_hr_timesheet.py
@@ -1,5 +1,7 @@
# Copyright 2024 Moduon Team S.L.
# License LGPL-3.0 or later (https://www.gnu.org/licenses/LGPL-3.0)
+import requests
+
from odoo.tests import new_test_user, tagged, users
from odoo.addons.sale_timesheet.tests.common import TestCommonSaleTimesheet
@@ -9,6 +11,7 @@
class HrTimesheet(TestCommonSaleTimesheet):
@classmethod
def setUpClass(cls):
+ cls._super_send = requests.Session.send
super().setUpClass()
cls.analytic_user = new_test_user(
cls.env, "test_user", "analytic.group_analytic_accounting,base.group_user"
@@ -18,7 +21,6 @@ def setUpClass(cls):
{
"name": "Task One",
"priority": "0",
- "kanban_state": "normal",
"project_id": cls.project_global.id,
"partner_id": cls.partner_b.id,
"user_ids": [(6, 0, cls.analytic_user.ids)],
@@ -52,7 +54,6 @@ def setUpClass(cls):
cls.plan = cls.env["account.analytic.plan"].create(
{
"name": "Projects Plan",
- "company_id": False,
}
)
cls.analytic_account_maintenance = cls.env["account.analytic.account"].create(
@@ -87,9 +88,13 @@ def setUpClass(cls):
]
)
cls.task1.sale_line_id = cls.so_line_1
- cls.so.action_confirm()
cls.so._create_invoices()
+ @classmethod
+ def _request_handler(cls, s, r, /, **kw):
+ """Don't block external requests."""
+ return cls._super_send(s, r, **kw)
+
@users("test_user")
def test_compute_account_id_01(self):
"""Test analytic account doesn't change if timesheets are invoiced."""