odoo-addon-project-task-stock 18.0.1.0.0.2__py3-none-any.whl → 18.0.1.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/project_task_stock/README.rst +12 -2
- odoo/addons/project_task_stock/__manifest__.py +1 -1
- odoo/addons/project_task_stock/i18n/project_task_stock.pot +17 -0
- odoo/addons/project_task_stock/models/account_analytic_line.py +3 -0
- odoo/addons/project_task_stock/models/project_task.py +4 -9
- odoo/addons/project_task_stock/models/stock_move.py +75 -1
- odoo/addons/project_task_stock/readme/ROADMAP.md +2 -0
- odoo/addons/project_task_stock/static/description/index.html +29 -17
- odoo/addons/project_task_stock/tests/test_project_task_stock.py +17 -0
- odoo/addons/project_task_stock/views/stock_move_view.xml +9 -0
- {odoo_addon_project_task_stock-18.0.1.0.0.2.dist-info → odoo_addon_project_task_stock-18.0.1.1.0.dist-info}/METADATA +14 -3
- {odoo_addon_project_task_stock-18.0.1.0.0.2.dist-info → odoo_addon_project_task_stock-18.0.1.1.0.dist-info}/RECORD +14 -13
- {odoo_addon_project_task_stock-18.0.1.0.0.2.dist-info → odoo_addon_project_task_stock-18.0.1.1.0.dist-info}/WHEEL +1 -1
- {odoo_addon_project_task_stock-18.0.1.0.0.2.dist-info → odoo_addon_project_task_stock-18.0.1.1.0.dist-info}/top_level.txt +0 -0
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
.. image:: https://odoo-community.org/readme-banner-image
|
|
2
|
+
:target: https://odoo-community.org/get-involved?utm_source=readme
|
|
3
|
+
:alt: Odoo Community Association
|
|
4
|
+
|
|
1
5
|
==================
|
|
2
6
|
Project Task Stock
|
|
3
7
|
==================
|
|
@@ -7,13 +11,13 @@ Project Task Stock
|
|
|
7
11
|
!! This file is generated by oca-gen-addon-readme !!
|
|
8
12
|
!! changes will be overwritten. !!
|
|
9
13
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
10
|
-
!! source digest: sha256:
|
|
14
|
+
!! source digest: sha256:242c581176cfc77f755cc535f6cd33d657b87ea678afb0ccaa09569d68d94aeb
|
|
11
15
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
12
16
|
|
|
13
17
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
|
14
18
|
:target: https://odoo-community.org/page/development-status
|
|
15
19
|
:alt: Beta
|
|
16
|
-
.. |badge2| image:: https://img.shields.io/badge/
|
|
20
|
+
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
|
17
21
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
18
22
|
:alt: License: AGPL-3
|
|
19
23
|
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github
|
|
@@ -94,6 +98,12 @@ Usage
|
|
|
94
98
|
- \`Cancel Materials\`: Set the moves of the products as cancelled.
|
|
95
99
|
- \`Scrap\`: Allows the defined products to be scrapped.
|
|
96
100
|
|
|
101
|
+
Known issues / Roadmap
|
|
102
|
+
======================
|
|
103
|
+
|
|
104
|
+
#. Lot compatibility (similar to what happens in pickings). #. Release
|
|
105
|
+
stock reserves if the task is deleted.
|
|
106
|
+
|
|
97
107
|
Bug Tracker
|
|
98
108
|
===========
|
|
99
109
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
|
|
3
3
|
{
|
|
4
4
|
"name": "Project Task Stock",
|
|
5
|
-
"version": "18.0.1.
|
|
5
|
+
"version": "18.0.1.1.0",
|
|
6
6
|
"category": "Project Management",
|
|
7
7
|
"website": "https://github.com/OCA/project",
|
|
8
8
|
"author": "Tecnativa, Odoo Community Association (OCA)",
|
|
@@ -38,11 +38,21 @@ msgstr ""
|
|
|
38
38
|
msgid "Analytic Line"
|
|
39
39
|
msgstr ""
|
|
40
40
|
|
|
41
|
+
#. module: project_task_stock
|
|
42
|
+
#: model:ir.model.fields,field_description:project_task_stock.field_stock_move__analytic_line_ids
|
|
43
|
+
msgid "Analytic Lines"
|
|
44
|
+
msgstr ""
|
|
45
|
+
|
|
41
46
|
#. module: project_task_stock
|
|
42
47
|
#: model:ir.model.fields,field_description:project_task_stock.field_project_task__analytic_precision
|
|
43
48
|
msgid "Analytic Precision"
|
|
44
49
|
msgstr ""
|
|
45
50
|
|
|
51
|
+
#. module: project_task_stock
|
|
52
|
+
#: model_terms:ir.ui.view,arch_db:project_task_stock.view_stock_move_raw_list
|
|
53
|
+
msgid "Are you sure you want to proceed?"
|
|
54
|
+
msgstr ""
|
|
55
|
+
|
|
46
56
|
#. module: project_task_stock
|
|
47
57
|
#: model:ir.model.fields.selection,name:project_task_stock.selection__project_task__stock_state__assigned
|
|
48
58
|
msgid "Assigned"
|
|
@@ -50,6 +60,7 @@ msgstr ""
|
|
|
50
60
|
|
|
51
61
|
#. module: project_task_stock
|
|
52
62
|
#: model:ir.model.fields.selection,name:project_task_stock.selection__project_task__stock_state__cancel
|
|
63
|
+
#: model_terms:ir.ui.view,arch_db:project_task_stock.view_stock_move_raw_list
|
|
53
64
|
msgid "Cancel"
|
|
54
65
|
msgstr ""
|
|
55
66
|
|
|
@@ -217,6 +228,11 @@ msgstr ""
|
|
|
217
228
|
msgid "Scraps"
|
|
218
229
|
msgstr ""
|
|
219
230
|
|
|
231
|
+
#. module: project_task_stock
|
|
232
|
+
#: model:ir.model.fields,field_description:project_task_stock.field_stock_move__show_cancel_button_in_task
|
|
233
|
+
msgid "Show Cancel Button In Task"
|
|
234
|
+
msgstr ""
|
|
235
|
+
|
|
220
236
|
#. module: project_task_stock
|
|
221
237
|
#: model:ir.model.fields,field_description:project_task_stock.field_project_project__location_id
|
|
222
238
|
#: model:ir.model.fields,field_description:project_task_stock.field_project_task__location_id
|
|
@@ -251,6 +267,7 @@ msgstr ""
|
|
|
251
267
|
|
|
252
268
|
#. module: project_task_stock
|
|
253
269
|
#: model:ir.model,name:project_task_stock.model_stock_move
|
|
270
|
+
#: model:ir.model.fields,field_description:project_task_stock.field_account_analytic_line__stock_move_id
|
|
254
271
|
msgid "Stock Move"
|
|
255
272
|
msgstr ""
|
|
256
273
|
|
|
@@ -9,6 +9,9 @@ class AccountAnalyticLine(models.Model):
|
|
|
9
9
|
stock_task_id = fields.Many2one(
|
|
10
10
|
comodel_name="project.task", string="Project Task", ondelete="cascade"
|
|
11
11
|
)
|
|
12
|
+
stock_move_id = fields.Many2one(
|
|
13
|
+
comodel_name="stock.move", string="Stock Move", ondelete="cascade", copy=False
|
|
14
|
+
)
|
|
12
15
|
|
|
13
16
|
def _timesheet_postprocess_values(self, values):
|
|
14
17
|
"""When hr_timesheet addon is installed, in the create() and write() methods,
|
|
@@ -208,8 +208,11 @@ class ProjectTask(models.Model):
|
|
|
208
208
|
"""Cancel the stock moves and remove the analytic lines created from
|
|
209
209
|
stock moves when cancelling the task.
|
|
210
210
|
"""
|
|
211
|
-
self.
|
|
211
|
+
for move in self.move_ids:
|
|
212
|
+
move.action_cancel_from_task()
|
|
212
213
|
# Use sudo to avoid error for users with no access to analytic
|
|
214
|
+
# Although the action_cancel_from_task() method should have deleted
|
|
215
|
+
# all analytical entries, we want to make sure there are no old records left.
|
|
213
216
|
self.sudo().stock_analytic_line_ids.unlink()
|
|
214
217
|
self.stock_moves_is_locked = True
|
|
215
218
|
return True
|
|
@@ -231,14 +234,6 @@ class ProjectTask(models.Model):
|
|
|
231
234
|
):
|
|
232
235
|
move.quantity = move.product_uom_qty
|
|
233
236
|
moves_to_do.picking_id.with_context(skip_sanity_check=True).button_validate()
|
|
234
|
-
moves_done = self.move_ids.filtered(lambda x: x.state == "done")
|
|
235
|
-
moves_todo = moves_done - moves_to_skip
|
|
236
|
-
# Use sudo to avoid error for users with no access to analytic
|
|
237
|
-
analytic_line_model = self.env["account.analytic.line"].sudo()
|
|
238
|
-
for move in moves_todo:
|
|
239
|
-
vals = move._prepare_analytic_line_from_task()
|
|
240
|
-
if vals:
|
|
241
|
-
analytic_line_model.create(vals)
|
|
242
237
|
|
|
243
238
|
def action_see_move_scrap(self):
|
|
244
239
|
self.ensure_one()
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
# Copyright 2022 Tecnativa - Víctor Martínez
|
|
1
|
+
# Copyright 2022-2025 Tecnativa - Víctor Martínez
|
|
2
2
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
|
|
3
3
|
from odoo import api, fields, models
|
|
4
|
+
from odoo.tools import float_is_zero
|
|
4
5
|
|
|
5
6
|
|
|
6
7
|
class StockMove(models.Model):
|
|
@@ -14,6 +15,14 @@ class StockMove(models.Model):
|
|
|
14
15
|
raw_material_task_id = fields.Many2one(
|
|
15
16
|
comodel_name="project.task", string="Task for material", check_company=True
|
|
16
17
|
)
|
|
18
|
+
analytic_line_ids = fields.One2many(
|
|
19
|
+
comodel_name="account.analytic.line",
|
|
20
|
+
inverse_name="stock_move_id",
|
|
21
|
+
string="Analytic Lines",
|
|
22
|
+
)
|
|
23
|
+
show_cancel_button_in_task = fields.Boolean(
|
|
24
|
+
compute="_compute_show_cancel_button_in_task"
|
|
25
|
+
)
|
|
17
26
|
|
|
18
27
|
@api.onchange("product_id")
|
|
19
28
|
def _onchange_product_id(self):
|
|
@@ -24,6 +33,59 @@ class StockMove(models.Model):
|
|
|
24
33
|
self.name = self.raw_material_task_id.name
|
|
25
34
|
return res
|
|
26
35
|
|
|
36
|
+
def _compute_show_cancel_button_in_task(self):
|
|
37
|
+
dp = self.env["decimal.precision"].precision_get("Product Unit of Measure")
|
|
38
|
+
for item in self:
|
|
39
|
+
item.show_cancel_button_in_task = bool(
|
|
40
|
+
item.raw_material_task_id
|
|
41
|
+
and item.raw_material_task_id.stock_moves_is_locked
|
|
42
|
+
and item.raw_material_task_id.done_stock_moves
|
|
43
|
+
and item.state not in ("draft", "cancel")
|
|
44
|
+
and (
|
|
45
|
+
(
|
|
46
|
+
item.state == "done"
|
|
47
|
+
and not float_is_zero(item.quantity, precision_digits=dp)
|
|
48
|
+
)
|
|
49
|
+
or (
|
|
50
|
+
item.state != "done"
|
|
51
|
+
and not float_is_zero(item.product_uom_qty, precision_digits=dp)
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def action_cancel_from_task(self):
|
|
57
|
+
self.ensure_one()
|
|
58
|
+
if not self.show_cancel_button_in_task:
|
|
59
|
+
return
|
|
60
|
+
# Use sudo to avoid error for users with no access to analytic
|
|
61
|
+
analytic_lines = self.sudo().analytic_line_ids
|
|
62
|
+
task_analytic_lines = self.raw_material_task_id.sudo().stock_analytic_line_ids
|
|
63
|
+
if analytic_lines:
|
|
64
|
+
analytic_lines.unlink()
|
|
65
|
+
elif not analytic_lines and task_analytic_lines and self.state == "done":
|
|
66
|
+
# Previously, analytic lines were not linked to the stock_move_id field,
|
|
67
|
+
# so we have to deduce which ones were linked.
|
|
68
|
+
data = self._prepare_analytic_line_from_task()
|
|
69
|
+
if data:
|
|
70
|
+
# Depending on whether the account module is installed or not, it will
|
|
71
|
+
# be filtered by one field or another.
|
|
72
|
+
f_name = "product_id" if "product_id" in data else "name"
|
|
73
|
+
f_value = data[f_name]
|
|
74
|
+
if f_name == "product_id":
|
|
75
|
+
f_value = self.env["product.product"].browse(f_value)
|
|
76
|
+
analytic_lines = task_analytic_lines.filtered(
|
|
77
|
+
lambda x: x.unit_amount == data["unit_amount"]
|
|
78
|
+
and x[f_name] == f_value
|
|
79
|
+
)
|
|
80
|
+
analytic_lines.unlink()
|
|
81
|
+
# It is important to do this process at the end, so that if
|
|
82
|
+
# the _prepare_analytic_line_from_task() method is used, it has the correct
|
|
83
|
+
# value.
|
|
84
|
+
if self.state == "done":
|
|
85
|
+
self.move_line_ids.write({"quantity": 0})
|
|
86
|
+
else:
|
|
87
|
+
self._action_cancel()
|
|
88
|
+
|
|
27
89
|
def _prepare_analytic_line_from_task(self):
|
|
28
90
|
product = self.product_id
|
|
29
91
|
company_id = self.env.company
|
|
@@ -47,6 +109,7 @@ class StockMove(models.Model):
|
|
|
47
109
|
"product_uom_id": self.product_uom.id,
|
|
48
110
|
"company_id": analytic_account.company_id.id or self.env.company.id,
|
|
49
111
|
"partner_id": task.partner_id.id or task.project_id.partner_id.id or False,
|
|
112
|
+
"stock_move_id": self.id,
|
|
50
113
|
"stock_task_id": task.id,
|
|
51
114
|
}
|
|
52
115
|
amount_unit = product.with_context(uom=self.product_uom.id)._price_compute(
|
|
@@ -100,6 +163,17 @@ class StockMove(models.Model):
|
|
|
100
163
|
)
|
|
101
164
|
return defaults
|
|
102
165
|
|
|
166
|
+
def _action_done(self, cancel_backorder=False):
|
|
167
|
+
"""Create the analytical notes for stock movements linked to tasks."""
|
|
168
|
+
moves_todo = super()._action_done(cancel_backorder)
|
|
169
|
+
# Use sudo to avoid error for users with no access to analytic
|
|
170
|
+
analytic_line_model = self.env["account.analytic.line"].sudo()
|
|
171
|
+
for move in moves_todo.filtered(lambda x: x.raw_material_task_id):
|
|
172
|
+
vals = move._prepare_analytic_line_from_task()
|
|
173
|
+
if vals:
|
|
174
|
+
analytic_line_model.create(vals)
|
|
175
|
+
return moves_todo
|
|
176
|
+
|
|
103
177
|
def action_task_product_forecast_report(self):
|
|
104
178
|
self.ensure_one()
|
|
105
179
|
action = self.product_id.action_product_forecast_report()
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
5
5
|
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
|
|
6
|
-
<title>
|
|
6
|
+
<title>README.rst</title>
|
|
7
7
|
<style type="text/css">
|
|
8
8
|
|
|
9
9
|
/*
|
|
@@ -360,33 +360,39 @@ ul.auto-toc {
|
|
|
360
360
|
</style>
|
|
361
361
|
</head>
|
|
362
362
|
<body>
|
|
363
|
-
<div class="document"
|
|
364
|
-
<h1 class="title">Project Task Stock</h1>
|
|
363
|
+
<div class="document">
|
|
365
364
|
|
|
365
|
+
|
|
366
|
+
<a class="reference external image-reference" href="https://odoo-community.org/get-involved?utm_source=readme">
|
|
367
|
+
<img alt="Odoo Community Association" src="https://odoo-community.org/readme-banner-image" />
|
|
368
|
+
</a>
|
|
369
|
+
<div class="section" id="project-task-stock">
|
|
370
|
+
<h1>Project Task Stock</h1>
|
|
366
371
|
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
367
372
|
!! This file is generated by oca-gen-addon-readme !!
|
|
368
373
|
!! changes will be overwritten. !!
|
|
369
374
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
370
|
-
!! source digest: sha256:
|
|
375
|
+
!! source digest: sha256:242c581176cfc77f755cc535f6cd33d657b87ea678afb0ccaa09569d68d94aeb
|
|
371
376
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
372
|
-
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/
|
|
377
|
+
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/license-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/project/tree/18.0/project_task_stock"><img alt="OCA/project" src="https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/project-18-0/project-18-0-project_task_stock"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/project&target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
373
378
|
<p>This module allows to consume products directly from a project task.</p>
|
|
374
379
|
<p><strong>Table of contents</strong></p>
|
|
375
380
|
<div class="contents local topic" id="contents">
|
|
376
381
|
<ul class="simple">
|
|
377
382
|
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
|
|
378
383
|
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
|
|
379
|
-
<li><a class="reference internal" href="#
|
|
380
|
-
<li><a class="reference internal" href="#
|
|
381
|
-
<li><a class="reference internal" href="#
|
|
382
|
-
<li><a class="reference internal" href="#
|
|
383
|
-
<li><a class="reference internal" href="#
|
|
384
|
+
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-3">Known issues / Roadmap</a></li>
|
|
385
|
+
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
|
|
386
|
+
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
|
|
387
|
+
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
|
|
388
|
+
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
|
|
389
|
+
<li><a class="reference internal" href="#maintainers" id="toc-entry-8">Maintainers</a></li>
|
|
384
390
|
</ul>
|
|
385
391
|
</li>
|
|
386
392
|
</ul>
|
|
387
393
|
</div>
|
|
388
394
|
<div class="section" id="configuration">
|
|
389
|
-
<
|
|
395
|
+
<h2><a class="toc-backref" href="#toc-entry-1">Configuration</a></h2>
|
|
390
396
|
<p>To configure this module, you need to:</p>
|
|
391
397
|
<ol class="arabic simple">
|
|
392
398
|
<li>Go to <em>Inventory -> Configuration -> Settings</em> and check “Storage
|
|
@@ -417,7 +423,7 @@ the created project.</li>
|
|
|
417
423
|
</ol>
|
|
418
424
|
</div>
|
|
419
425
|
<div class="section" id="usage">
|
|
420
|
-
<
|
|
426
|
+
<h2><a class="toc-backref" href="#toc-entry-2">Usage</a></h2>
|
|
421
427
|
<ol class="arabic simple">
|
|
422
428
|
<li>Go to <em>Projects -> Task material (project)</em> and create a task and
|
|
423
429
|
edit it.</li>
|
|
@@ -439,8 +445,13 @@ one location to another.</li>
|
|
|
439
445
|
</li>
|
|
440
446
|
</ol>
|
|
441
447
|
</div>
|
|
448
|
+
<div class="section" id="known-issues-roadmap">
|
|
449
|
+
<h2><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h2>
|
|
450
|
+
<p>#. Lot compatibility (similar to what happens in pickings). #. Release
|
|
451
|
+
stock reserves if the task is deleted.</p>
|
|
452
|
+
</div>
|
|
442
453
|
<div class="section" id="bug-tracker">
|
|
443
|
-
<
|
|
454
|
+
<h2><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h2>
|
|
444
455
|
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/project/issues">GitHub Issues</a>.
|
|
445
456
|
In case of trouble, please check there if your issue has already been reported.
|
|
446
457
|
If you spotted it first, help us to smash it by providing a detailed and welcomed
|
|
@@ -448,15 +459,15 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|
|
448
459
|
<p>Do not contact contributors directly about support or help with technical issues.</p>
|
|
449
460
|
</div>
|
|
450
461
|
<div class="section" id="credits">
|
|
451
|
-
<
|
|
462
|
+
<h2><a class="toc-backref" href="#toc-entry-5">Credits</a></h2>
|
|
452
463
|
<div class="section" id="authors">
|
|
453
|
-
<
|
|
464
|
+
<h3><a class="toc-backref" href="#toc-entry-6">Authors</a></h3>
|
|
454
465
|
<ul class="simple">
|
|
455
466
|
<li>Tecnativa</li>
|
|
456
467
|
</ul>
|
|
457
468
|
</div>
|
|
458
469
|
<div class="section" id="contributors">
|
|
459
|
-
<
|
|
470
|
+
<h3><a class="toc-backref" href="#toc-entry-7">Contributors</a></h3>
|
|
460
471
|
<ul class="simple">
|
|
461
472
|
<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
|
|
462
473
|
<li>Víctor Martínez</li>
|
|
@@ -466,7 +477,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|
|
466
477
|
</ul>
|
|
467
478
|
</div>
|
|
468
479
|
<div class="section" id="maintainers">
|
|
469
|
-
<
|
|
480
|
+
<h3><a class="toc-backref" href="#toc-entry-8">Maintainers</a></h3>
|
|
470
481
|
<p>This module is maintained by the OCA.</p>
|
|
471
482
|
<a class="reference external image-reference" href="https://odoo-community.org">
|
|
472
483
|
<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
|
|
@@ -481,5 +492,6 @@ promote its widespread use.</p>
|
|
|
481
492
|
</div>
|
|
482
493
|
</div>
|
|
483
494
|
</div>
|
|
495
|
+
</div>
|
|
484
496
|
</body>
|
|
485
497
|
</html>
|
|
@@ -79,6 +79,20 @@ class TestProjectTaskStock(TestProjectStockBase):
|
|
|
79
79
|
self.task.action_done()
|
|
80
80
|
self.assertFalse(self.task.sudo().stock_analytic_line_ids)
|
|
81
81
|
|
|
82
|
+
def test_project_task_picking_done_analytic_items(self):
|
|
83
|
+
self.task = self.env["project.task"].browse(self.task.id)
|
|
84
|
+
self.task.action_assign()
|
|
85
|
+
picking = self.task.move_ids.picking_id
|
|
86
|
+
for move in picking.move_ids:
|
|
87
|
+
move.quantity = move.product_uom_qty
|
|
88
|
+
picking.button_validate()
|
|
89
|
+
self.assertEqual(picking.state, "done")
|
|
90
|
+
self._test_task_analytic_lines_from_task(-40)
|
|
91
|
+
self.assertEqual(
|
|
92
|
+
fields.first(self.task.stock_analytic_line_ids).date,
|
|
93
|
+
fields.Date.from_string("1990-01-01"),
|
|
94
|
+
)
|
|
95
|
+
|
|
82
96
|
@users("manager-user")
|
|
83
97
|
def test_project_task_without_analytic_account_manager_user(self):
|
|
84
98
|
self.test_project_task_without_analytic_account()
|
|
@@ -197,6 +211,9 @@ class TestProjectTaskStock(TestProjectStockBase):
|
|
|
197
211
|
self.assertEqual(self.move_product_a.quantity, 2)
|
|
198
212
|
self.assertEqual(self.move_product_b.quantity, 1)
|
|
199
213
|
self.assertTrue(self.task.sudo().stock_analytic_line_ids)
|
|
214
|
+
# We do this to test the previous behavior (when an analytic
|
|
215
|
+
# lines was not linked to a stock move).
|
|
216
|
+
self.move_product_a.analytic_line_ids.stock_move_id = False
|
|
200
217
|
# action_cancel
|
|
201
218
|
self.task.action_cancel()
|
|
202
219
|
self.assertEqual(self.move_product_a.state, "done")
|
|
@@ -59,6 +59,15 @@
|
|
|
59
59
|
<field name="product_uom_category_id" column_invisible="1" />
|
|
60
60
|
<field name="quantity" string="Consumed" readonly="1" />
|
|
61
61
|
<field name="group_id" column_invisible="1" />
|
|
62
|
+
<field name="show_cancel_button_in_task" column_invisible="1" />
|
|
63
|
+
<button
|
|
64
|
+
name="action_cancel_from_task"
|
|
65
|
+
type="object"
|
|
66
|
+
class="btn-secondary"
|
|
67
|
+
string="Cancel"
|
|
68
|
+
invisible="not show_cancel_button_in_task"
|
|
69
|
+
confirm="Are you sure you want to proceed?"
|
|
70
|
+
/>
|
|
62
71
|
</list>
|
|
63
72
|
</field>
|
|
64
73
|
</record>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: odoo-addon-project_task_stock
|
|
3
|
-
Version: 18.0.1.
|
|
3
|
+
Version: 18.0.1.1.0
|
|
4
4
|
Requires-Python: >=3.10
|
|
5
5
|
Requires-Dist: odoo==18.0.*
|
|
6
6
|
Summary: Project Task Stock
|
|
@@ -12,6 +12,11 @@ Classifier: Programming Language :: Python
|
|
|
12
12
|
Classifier: Framework :: Odoo
|
|
13
13
|
Classifier: Framework :: Odoo :: 18.0
|
|
14
14
|
Classifier: License :: OSI Approved :: GNU Affero General Public License v3
|
|
15
|
+
Description-Content-Type: text/x-rst
|
|
16
|
+
|
|
17
|
+
.. image:: https://odoo-community.org/readme-banner-image
|
|
18
|
+
:target: https://odoo-community.org/get-involved?utm_source=readme
|
|
19
|
+
:alt: Odoo Community Association
|
|
15
20
|
|
|
16
21
|
==================
|
|
17
22
|
Project Task Stock
|
|
@@ -22,13 +27,13 @@ Project Task Stock
|
|
|
22
27
|
!! This file is generated by oca-gen-addon-readme !!
|
|
23
28
|
!! changes will be overwritten. !!
|
|
24
29
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
25
|
-
!! source digest: sha256:
|
|
30
|
+
!! source digest: sha256:242c581176cfc77f755cc535f6cd33d657b87ea678afb0ccaa09569d68d94aeb
|
|
26
31
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
27
32
|
|
|
28
33
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
|
|
29
34
|
:target: https://odoo-community.org/page/development-status
|
|
30
35
|
:alt: Beta
|
|
31
|
-
.. |badge2| image:: https://img.shields.io/badge/
|
|
36
|
+
.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png
|
|
32
37
|
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
|
|
33
38
|
:alt: License: AGPL-3
|
|
34
39
|
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproject-lightgray.png?logo=github
|
|
@@ -109,6 +114,12 @@ Usage
|
|
|
109
114
|
- \`Cancel Materials\`: Set the moves of the products as cancelled.
|
|
110
115
|
- \`Scrap\`: Allows the defined products to be scrapped.
|
|
111
116
|
|
|
117
|
+
Known issues / Roadmap
|
|
118
|
+
======================
|
|
119
|
+
|
|
120
|
+
#. Lot compatibility (similar to what happens in pickings). #. Release
|
|
121
|
+
stock reserves if the task is deleted.
|
|
122
|
+
|
|
112
123
|
Bug Tracker
|
|
113
124
|
===========
|
|
114
125
|
|
|
@@ -1,35 +1,36 @@
|
|
|
1
|
-
odoo/addons/project_task_stock/README.rst,sha256=
|
|
1
|
+
odoo/addons/project_task_stock/README.rst,sha256=pLBIxdWYtNWiObNyzUTOYW5XhisWB0tgbAshFVtaMvM,5159
|
|
2
2
|
odoo/addons/project_task_stock/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
|
|
3
|
-
odoo/addons/project_task_stock/__manifest__.py,sha256=
|
|
3
|
+
odoo/addons/project_task_stock/__manifest__.py,sha256=uU6kBxOzKrAPZb_wghhKWDy1hEr06E4NVuIfasuVwYg,775
|
|
4
4
|
odoo/addons/project_task_stock/demo/project_data.xml,sha256=GbYSbj5CiOQHyAeQtdBWMbHajJyVDytBf50cBJv4tpI,1123
|
|
5
5
|
odoo/addons/project_task_stock/demo/stock_picking_type_data.xml,sha256=c5i4QCAiyQe56NABAUPSJMEMQ9lgr7D1QzzW3M5N-hY,525
|
|
6
6
|
odoo/addons/project_task_stock/i18n/es.po,sha256=aS-DolEb3_OAn-qz5Nfx0LSFHF0Dy_1fQB8nl0i7ALY,12671
|
|
7
7
|
odoo/addons/project_task_stock/i18n/fr.po,sha256=xqZZROUbM_4vqkazjkUk1Bf02wd5nBwOl1M7VrP6Zvc,11126
|
|
8
8
|
odoo/addons/project_task_stock/i18n/hr.po,sha256=p6TdErMU-3xEvWzIcw93UfvTHoizCxEg0S8MPw3UUJI,12613
|
|
9
9
|
odoo/addons/project_task_stock/i18n/it.po,sha256=KR4YaCV7Ubyvg3BowFY25jbhHzI8rOqkdb8natC3fqg,12737
|
|
10
|
-
odoo/addons/project_task_stock/i18n/project_task_stock.pot,sha256=
|
|
10
|
+
odoo/addons/project_task_stock/i18n/project_task_stock.pot,sha256=7FDZwz977F9ZG8AuYuys87Nt1nv8C9qjaAlC6Riu9qg,11613
|
|
11
11
|
odoo/addons/project_task_stock/i18n/pt_BR.po,sha256=peCYNpMBp_FNJr9ZB0zi6c1G8Peb_rR7jTbnXiQKIO8,12843
|
|
12
12
|
odoo/addons/project_task_stock/models/__init__.py,sha256=I5RT15Ty8nTgrnFlAVrkxRbKuQIpIZAsACSqPzffQ4U,209
|
|
13
|
-
odoo/addons/project_task_stock/models/account_analytic_line.py,sha256=
|
|
13
|
+
odoo/addons/project_task_stock/models/account_analytic_line.py,sha256=RSND1vjwTJlunJoFa1mPaJqfns8Q0DtsHE-cxAToB7A,974
|
|
14
14
|
odoo/addons/project_task_stock/models/project_project.py,sha256=Qf_kkL7KUQxNo4XNJ28SruRlbK0Zy0sejYvWz6vLISk,1545
|
|
15
|
-
odoo/addons/project_task_stock/models/project_task.py,sha256=
|
|
16
|
-
odoo/addons/project_task_stock/models/stock_move.py,sha256=
|
|
15
|
+
odoo/addons/project_task_stock/models/project_task.py,sha256=GTSPAJVP0zokAS-13b1vUtg7_aDl_5_e6H8U_O49DTg,10182
|
|
16
|
+
odoo/addons/project_task_stock/models/stock_move.py,sha256=eV6JpeafFT_o1TLWBf_YUP_P4bVflbrl0rd54cKPmGg,8565
|
|
17
17
|
odoo/addons/project_task_stock/models/stock_scrap.py,sha256=zIHRHbc4cqtLeuIYtGGRvQDAKPFRdyGcJ-_NrrP3jlQ,875
|
|
18
18
|
odoo/addons/project_task_stock/readme/CONFIGURE.md,sha256=4XwAh_S4bnXRLEWh5qSs9odeJFvtDvPEArQfq3fQUhg,903
|
|
19
19
|
odoo/addons/project_task_stock/readme/CONTRIBUTORS.md,sha256=7B3TJAW9bVCbc9-u4HKUamqJSM0J1p_Z_47T3M3uXxE,83
|
|
20
20
|
odoo/addons/project_task_stock/readme/DESCRIPTION.md,sha256=QokztTE5MwpfnbAogx3VLWAA2YdNch7c4BAyxXHPLwM,69
|
|
21
|
+
odoo/addons/project_task_stock/readme/ROADMAP.md,sha256=O5Fz1skeLk6S4CTmbHzscRXYOGfCBY_gtCAEf_E47Gw,109
|
|
21
22
|
odoo/addons/project_task_stock/readme/USAGE.md,sha256=eOWL0QCwPpokebB-EJDovHkJSDT9ztTUSoEp1W0YY3I,845
|
|
22
23
|
odoo/addons/project_task_stock/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
|
23
|
-
odoo/addons/project_task_stock/static/description/index.html,sha256=
|
|
24
|
+
odoo/addons/project_task_stock/static/description/index.html,sha256=Wjbq8YFE4goQBMBPTXdeCVqq7jbyPmAVN4UQDYjCtYc,15358
|
|
24
25
|
odoo/addons/project_task_stock/tests/__init__.py,sha256=t2gqBJiFaqp2rOwkMCOmAnRKCBGKOddjpE4WVCMTJ3o,150
|
|
25
26
|
odoo/addons/project_task_stock/tests/common.py,sha256=D_YbTvpSut235e35T8oDK6wb4ODDfAZOzkd1q2gPRHM,3705
|
|
26
|
-
odoo/addons/project_task_stock/tests/test_project_task_stock.py,sha256=
|
|
27
|
+
odoo/addons/project_task_stock/tests/test_project_task_stock.py,sha256=ycaHyuI8E3iA_E-XX_JXbDhsfc79fdVEO1lYR9n3Oxg,16896
|
|
27
28
|
odoo/addons/project_task_stock/views/project_project_view.xml,sha256=guERwgs5MebLRq0EMA8Nu8oWjMdVPOwZlJE8P-ER1yw,994
|
|
28
29
|
odoo/addons/project_task_stock/views/project_task_type_view.xml,sha256=PuhMxiLk_brwDCFw9fQMUKCx6CmxjUcJXx_EnsY2G34,555
|
|
29
30
|
odoo/addons/project_task_stock/views/project_task_view.xml,sha256=UI3NQ3QeDAzkSlZtL_k_mr2aFrGNxFihb8PmdaAShuk,6451
|
|
30
|
-
odoo/addons/project_task_stock/views/stock_move_view.xml,sha256=
|
|
31
|
+
odoo/addons/project_task_stock/views/stock_move_view.xml,sha256=uguTAZaMh7bOwuo9f9G0hCVcr9-xOhKimOVT0zUw8_U,3236
|
|
31
32
|
odoo/addons/project_task_stock/views/stock_scrap_views.xml,sha256=sOCk3Nv159QHO3gqiuVubbUH1mWHgKTwOURXnkWsxno,507
|
|
32
|
-
odoo_addon_project_task_stock-18.0.1.
|
|
33
|
-
odoo_addon_project_task_stock-18.0.1.
|
|
34
|
-
odoo_addon_project_task_stock-18.0.1.
|
|
35
|
-
odoo_addon_project_task_stock-18.0.1.
|
|
33
|
+
odoo_addon_project_task_stock-18.0.1.1.0.dist-info/METADATA,sha256=4vPc0e0v8OkRdCOak5tfqsYwvPS5t-oI4VWxjlQHMVc,5693
|
|
34
|
+
odoo_addon_project_task_stock-18.0.1.1.0.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
|
|
35
|
+
odoo_addon_project_task_stock-18.0.1.1.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
|
|
36
|
+
odoo_addon_project_task_stock-18.0.1.1.0.dist-info/RECORD,,
|