odoo-addon-project-task-stock 18.0.1.1.0.2__py3-none-any.whl → 18.0.1.1.1__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.
@@ -11,7 +11,7 @@ Project Task Stock
11
11
  !! This file is generated by oca-gen-addon-readme !!
12
12
  !! changes will be overwritten. !!
13
13
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
- !! source digest: sha256:242c581176cfc77f755cc535f6cd33d657b87ea678afb0ccaa09569d68d94aeb
14
+ !! source digest: sha256:65971a0d7ce3f10a5014265783a2b32623bca6083f66874f109f4dfc8cf0f009
15
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
16
 
17
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -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.1.0",
5
+ "version": "18.0.1.1.1",
6
6
  "category": "Project Management",
7
7
  "website": "https://github.com/OCA/project",
8
8
  "author": "Tecnativa, Odoo Community Association (OCA)",
@@ -1,5 +1,6 @@
1
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
4
  from odoo import api, fields, models
4
5
  from odoo.tools import float_is_zero
5
6
 
@@ -90,32 +91,39 @@ class StockMove(models.Model):
90
91
  product = self.product_id
91
92
  company_id = self.env.company
92
93
  task = self.task_id or self.raw_material_task_id
93
- analytic_account = task.stock_analytic_account_id or task.project_id.account_id
94
+ project_id = task.project_id
95
+ analytic_account = task.stock_analytic_account_id or project_id.account_id
94
96
  if not analytic_account:
95
97
  return False
96
98
  # Apply sudo() in case there is any rule that does not allow access to
97
99
  # the analytic account, for example with analytic_hr_department_restriction
98
100
  analytic_account = analytic_account.sudo()
101
+ is_return = bool(
102
+ self.origin_returned_move_id
103
+ and self.location_id == project_id.location_dest_id
104
+ and self.location_dest_id == project_id.location_id
105
+ )
106
+ quantity_done = self.quantity * (-1 if is_return else 1)
99
107
  res = {
100
108
  "date": (
101
109
  task.stock_analytic_date
102
- or task.project_id.stock_analytic_date
110
+ or project_id.stock_analytic_date
103
111
  or fields.date.today()
104
112
  ),
105
113
  "name": task.name + ": " + product.name,
106
- "unit_amount": self.quantity,
114
+ "unit_amount": quantity_done,
107
115
  "account_id": analytic_account.id,
108
116
  "user_id": self.env.user.id,
109
117
  "product_uom_id": self.product_uom.id,
110
118
  "company_id": analytic_account.company_id.id or self.env.company.id,
111
- "partner_id": task.partner_id.id or task.project_id.partner_id.id or False,
119
+ "partner_id": task.partner_id.id or project_id.partner_id.id or False,
112
120
  "stock_move_id": self.id,
113
121
  "stock_task_id": task.id,
114
122
  }
115
123
  amount_unit = product.with_context(uom=self.product_uom.id)._price_compute(
116
124
  "standard_price"
117
125
  )[product.id]
118
- amount = amount_unit * self.quantity or 0.0
126
+ amount = amount_unit * quantity_done or 0.0
119
127
  result = round(amount, company_id.currency_id.decimal_places) * -1
120
128
  vals = {"amount": result}
121
129
  analytic_line_fields = self.env["account.analytic.line"]._fields
@@ -372,7 +372,7 @@ ul.auto-toc {
372
372
  !! This file is generated by oca-gen-addon-readme !!
373
373
  !! changes will be overwritten. !!
374
374
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
375
- !! source digest: sha256:242c581176cfc77f755cc535f6cd33d657b87ea678afb0ccaa09569d68d94aeb
375
+ !! source digest: sha256:65971a0d7ce3f10a5014265783a2b32623bca6083f66874f109f4dfc8cf0f009
376
376
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
377
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&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
378
378
  <p>This module allows to consume products directly from a project task.</p>
@@ -147,6 +147,45 @@ class TestProjectTaskStock(TestProjectStockBase):
147
147
  fields.first(self.task.stock_analytic_line_ids).date, fields.date.today()
148
148
  )
149
149
 
150
+ def test_project_task_analytic_lines_with_returned_picking(self):
151
+ # Create initial moves
152
+ self.task = self.env["project.task"].browse(self.task.id)
153
+ self.task.action_assign()
154
+ picking = self.task.move_ids.picking_id
155
+ for move in picking.move_ids:
156
+ move.quantity = move.product_uom_qty
157
+ picking.button_validate()
158
+ self.assertEqual(picking.state, "done")
159
+ # Return the initial moves
160
+ stock_return_picking_form = Form(
161
+ self.env["stock.return.picking"].with_context(
162
+ active_ids=picking.ids,
163
+ active_id=picking.id,
164
+ active_model="stock.picking",
165
+ )
166
+ )
167
+ stock_return_picking = stock_return_picking_form.save()
168
+ for return_line in stock_return_picking.product_return_moves:
169
+ return_line.quantity = return_line.move_id.product_uom_qty
170
+ stock_return_picking_action = stock_return_picking.action_create_returns()
171
+ return_pick = self.env["stock.picking"].browse(
172
+ stock_return_picking_action["res_id"]
173
+ )
174
+ return_pick.action_assign()
175
+ for return_line in return_pick.move_ids:
176
+ return_line.quantity = return_line.origin_returned_move_id.quantity
177
+ return_pick.button_validate()
178
+ self.assertEqual(return_pick.state, "done")
179
+ # Check that the resulting analytic lines sum is 0
180
+ stock_analytic_lines = self.task.sudo().stock_analytic_line_ids
181
+ self.assertEqual(len(stock_analytic_lines), 4)
182
+ self.assertEqual(sum(stock_analytic_lines.mapped("unit_amount")), 0)
183
+ self.assertEqual(sum(stock_analytic_lines.mapped("amount")), 0)
184
+ self.assertIn(
185
+ self.analytic_account,
186
+ stock_analytic_lines.mapped("account_id"),
187
+ )
188
+
150
189
  @users("manager-user")
151
190
  def test_project_task_analytic_lines_with_tag_2_manager_user(self):
152
191
  self.task.stock_analytic_distribution = {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-project_task_stock
3
- Version: 18.0.1.1.0.2
3
+ Version: 18.0.1.1.1
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: odoo==18.0.*
6
6
  Summary: Project Task Stock
@@ -27,7 +27,7 @@ Project Task Stock
27
27
  !! This file is generated by oca-gen-addon-readme !!
28
28
  !! changes will be overwritten. !!
29
29
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
30
- !! source digest: sha256:242c581176cfc77f755cc535f6cd33d657b87ea678afb0ccaa09569d68d94aeb
30
+ !! source digest: sha256:65971a0d7ce3f10a5014265783a2b32623bca6083f66874f109f4dfc8cf0f009
31
31
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
32
32
 
33
33
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -1,6 +1,6 @@
1
- odoo/addons/project_task_stock/README.rst,sha256=pLBIxdWYtNWiObNyzUTOYW5XhisWB0tgbAshFVtaMvM,5159
1
+ odoo/addons/project_task_stock/README.rst,sha256=qgmBXgjN-TboYRKaphNJ9nLwcgUdnauUfWR6hK-8C3k,5159
2
2
  odoo/addons/project_task_stock/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
3
- odoo/addons/project_task_stock/__manifest__.py,sha256=uU6kBxOzKrAPZb_wghhKWDy1hEr06E4NVuIfasuVwYg,775
3
+ odoo/addons/project_task_stock/__manifest__.py,sha256=SQ2l4w2u1cKpm052oSwahgElows2J9N17wzviwGxHI0,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=s3RyWdAFRh7OmgK9cuDcjVONSzzoxDvc4J9GtbuX87Q,13360
@@ -13,7 +13,7 @@ odoo/addons/project_task_stock/models/__init__.py,sha256=I5RT15Ty8nTgrnFlAVrkxRb
13
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
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
16
+ odoo/addons/project_task_stock/models/stock_move.py,sha256=5a2PIa5YZtGsK_UutJV27pii0M2bEc-MfCvCuHS8jTM,8858
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
@@ -21,16 +21,16 @@ odoo/addons/project_task_stock/readme/DESCRIPTION.md,sha256=QokztTE5MwpfnbAogx3V
21
21
  odoo/addons/project_task_stock/readme/ROADMAP.md,sha256=O5Fz1skeLk6S4CTmbHzscRXYOGfCBY_gtCAEf_E47Gw,109
22
22
  odoo/addons/project_task_stock/readme/USAGE.md,sha256=eOWL0QCwPpokebB-EJDovHkJSDT9ztTUSoEp1W0YY3I,845
23
23
  odoo/addons/project_task_stock/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
24
- odoo/addons/project_task_stock/static/description/index.html,sha256=Wjbq8YFE4goQBMBPTXdeCVqq7jbyPmAVN4UQDYjCtYc,15358
24
+ odoo/addons/project_task_stock/static/description/index.html,sha256=Z8o7M7bhiL-0JcVJJrJkquY8hKLr3QxT1sYypjP7CBc,15358
25
25
  odoo/addons/project_task_stock/tests/__init__.py,sha256=t2gqBJiFaqp2rOwkMCOmAnRKCBGKOddjpE4WVCMTJ3o,150
26
26
  odoo/addons/project_task_stock/tests/common.py,sha256=D_YbTvpSut235e35T8oDK6wb4ODDfAZOzkd1q2gPRHM,3705
27
- odoo/addons/project_task_stock/tests/test_project_task_stock.py,sha256=ycaHyuI8E3iA_E-XX_JXbDhsfc79fdVEO1lYR9n3Oxg,16896
27
+ odoo/addons/project_task_stock/tests/test_project_task_stock.py,sha256=6ZIdMbUtN1kDLVUbNTfkAySznP9qLenUS3mQXf62xGc,18716
28
28
  odoo/addons/project_task_stock/views/project_project_view.xml,sha256=guERwgs5MebLRq0EMA8Nu8oWjMdVPOwZlJE8P-ER1yw,994
29
29
  odoo/addons/project_task_stock/views/project_task_type_view.xml,sha256=PuhMxiLk_brwDCFw9fQMUKCx6CmxjUcJXx_EnsY2G34,555
30
30
  odoo/addons/project_task_stock/views/project_task_view.xml,sha256=UI3NQ3QeDAzkSlZtL_k_mr2aFrGNxFihb8PmdaAShuk,6451
31
31
  odoo/addons/project_task_stock/views/stock_move_view.xml,sha256=uguTAZaMh7bOwuo9f9G0hCVcr9-xOhKimOVT0zUw8_U,3236
32
32
  odoo/addons/project_task_stock/views/stock_scrap_views.xml,sha256=sOCk3Nv159QHO3gqiuVubbUH1mWHgKTwOURXnkWsxno,507
33
- odoo_addon_project_task_stock-18.0.1.1.0.2.dist-info/METADATA,sha256=u3a7yYADqbMLtjz48JZuTXSs_KWlvMaD4WeX2-LHGLs,5695
34
- odoo_addon_project_task_stock-18.0.1.1.0.2.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
35
- odoo_addon_project_task_stock-18.0.1.1.0.2.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
36
- odoo_addon_project_task_stock-18.0.1.1.0.2.dist-info/RECORD,,
33
+ odoo_addon_project_task_stock-18.0.1.1.1.dist-info/METADATA,sha256=pHASiN3VCAKtnfiUaDf3F3Z5UITpUJMS7ek1O-yl5jA,5693
34
+ odoo_addon_project_task_stock-18.0.1.1.1.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
35
+ odoo_addon_project_task_stock-18.0.1.1.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
36
+ odoo_addon_project_task_stock-18.0.1.1.1.dist-info/RECORD,,