odoo-addon-stock-restrict-lot 17.0.1.2.0__py3-none-any.whl → 18.0.1.0.0.2__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.

Potentially problematic release.


This version of odoo-addon-stock-restrict-lot might be problematic. Click here for more details.

@@ -7,7 +7,7 @@ Stock Restrict Lot
7
7
  !! This file is generated by oca-gen-addon-readme !!
8
8
  !! changes will be overwritten. !!
9
9
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10
- !! source digest: sha256:00ff8e2abcdd536138a0bf51463e00f076ac3fe94947998cda2b6792ef723d5b
10
+ !! source digest: sha256:dce023da3482003599a49ae27980bca635a30f0b86afd9ee1bcbeb8d3ae775d9
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -17,21 +17,22 @@ Stock Restrict Lot
17
17
  :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
18
18
  :alt: License: LGPL-3
19
19
  .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--workflow-lightgray.png?logo=github
20
- :target: https://github.com/OCA/stock-logistics-workflow/tree/17.0/stock_restrict_lot
20
+ :target: https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_restrict_lot
21
21
  :alt: OCA/stock-logistics-workflow
22
22
  .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
23
- :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-17-0/stock-logistics-workflow-17-0-stock_restrict_lot
23
+ :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-18-0/stock-logistics-workflow-18-0-stock_restrict_lot
24
24
  :alt: Translate me on Weblate
25
25
  .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
26
- :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-workflow&target_branch=17.0
26
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-workflow&target_branch=18.0
27
27
  :alt: Try me on Runboat
28
28
 
29
29
  |badge1| |badge2| |badge3| |badge4| |badge5|
30
30
 
31
- This module add a field to restrict a stock move to a specific lot. It
31
+ This module adds a field to restrict a stock move to a specific lot. It
32
32
  propagates it between chained moves. A move with a restrict lot will
33
33
  only be able to reserve or transfer products with the specified lot.
34
- This module is a based for other modules, it has not effect on its own.
34
+ This module serves as a basis for other modules, it has not effect on
35
+ its own.
35
36
 
36
37
  **Table of contents**
37
38
 
@@ -44,7 +45,7 @@ Bug Tracker
44
45
  Bugs are tracked on `GitHub Issues <https://github.com/OCA/stock-logistics-workflow/issues>`_.
45
46
  In case of trouble, please check there if your issue has already been reported.
46
47
  If you spotted it first, help us to smash it by providing a detailed and welcomed
47
- `feedback <https://github.com/OCA/stock-logistics-workflow/issues/new?body=module:%20stock_restrict_lot%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
48
+ `feedback <https://github.com/OCA/stock-logistics-workflow/issues/new?body=module:%20stock_restrict_lot%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
48
49
 
49
50
  Do not contact contributors directly about support or help with technical issues.
50
51
 
@@ -61,6 +62,7 @@ Contributors
61
62
 
62
63
  - Florian da Costa <florian.dacosta@akretion.com>
63
64
  - Ruchir Shukla <ruchir@bizzappdev.com>
65
+ - Stefan Rijnhart <stefan@opener.amsterdam>
64
66
 
65
67
  Maintainers
66
68
  -----------
@@ -83,6 +85,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
83
85
 
84
86
  |maintainer-florian-dacosta|
85
87
 
86
- This module is part of the `OCA/stock-logistics-workflow <https://github.com/OCA/stock-logistics-workflow/tree/17.0/stock_restrict_lot>`_ project on GitHub.
88
+ This module is part of the `OCA/stock-logistics-workflow <https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_restrict_lot>`_ project on GitHub.
87
89
 
88
90
  You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -1,7 +1,9 @@
1
+ # License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
2
+
1
3
  {
2
4
  "name": "Stock Restrict Lot",
3
5
  "summary": "Base module that add back the concept of restrict lot on stock move",
4
- "version": "17.0.1.2.0",
6
+ "version": "18.0.1.0.0",
5
7
  "category": "Warehouse Management",
6
8
  "website": "https://github.com/OCA/stock-logistics-workflow",
7
9
  "author": "Akretion, Odoo Community Association (OCA)",
@@ -4,7 +4,7 @@
4
4
  #
5
5
  msgid ""
6
6
  msgstr ""
7
- "Project-Id-Version: Odoo Server 17.0\n"
7
+ "Project-Id-Version: Odoo Server 18.0\n"
8
8
  "Report-Msgid-Bugs-To: \n"
9
9
  "Last-Translator: \n"
10
10
  "Language-Team: \n"
@@ -16,7 +16,6 @@ msgstr ""
16
16
  #. module: stock_restrict_lot
17
17
  #. odoo-python
18
18
  #: code:addons/stock_restrict_lot/models/stock_move.py:0
19
- #, python-format
20
19
  msgid ""
21
20
  "Inconsistencies between reserved quant and lot restriction on stock move"
22
21
  msgstr ""
@@ -50,7 +49,6 @@ msgstr ""
50
49
  #. module: stock_restrict_lot
51
50
  #. odoo-python
52
51
  #: code:addons/stock_restrict_lot/models/stock_move.py:0
53
- #, python-format
54
52
  msgid ""
55
53
  "The lot(s) %(move_line_lot)s being moved is inconsistent with the "
56
54
  "restriction on lot %(move_restrict_lot)s set on the move"
@@ -60,3 +58,11 @@ msgstr ""
60
58
  #: model:ir.model,name:stock_restrict_lot.model_stock_picking
61
59
  msgid "Transfer"
62
60
  msgstr ""
61
+
62
+ #. module: stock_restrict_lot
63
+ #. odoo-python
64
+ #: code:addons/stock_restrict_lot/models/stock_move.py:0
65
+ msgid ""
66
+ "You can't modify the Lot/Serial number because at least one move in the "
67
+ "chain has already been done with another Lot/Serial number."
68
+ msgstr ""
@@ -1,11 +1,14 @@
1
- from odoo import _, api, exceptions, fields, models
2
- from odoo.exceptions import UserError
1
+ # License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
2
+
3
+ from odoo import api, exceptions, fields, models
4
+ from odoo.exceptions import UserError, ValidationError
5
+ from odoo.tools.misc import OrderedSet
3
6
 
4
7
 
5
8
  class StockMove(models.Model):
6
9
  _inherit = "stock.move"
7
10
 
8
- # seems better to not copy this field except when a move is splitted, because a move
11
+ # seems better to not copy this field except when a move is split, because a move
9
12
  # can be copied in multiple different occasions and could even be copied with a
10
13
  # different product...
11
14
  restrict_lot_id = fields.Many2one(
@@ -34,7 +37,7 @@ class StockMove(models.Model):
34
37
  and vals["lot_id"] != self.restrict_lot_id.id
35
38
  ):
36
39
  raise exceptions.UserError(
37
- _(
40
+ self.env._(
38
41
  "Inconsistencies between reserved quant and lot restriction on "
39
42
  "stock move"
40
43
  )
@@ -67,7 +70,6 @@ class StockMove(models.Model):
67
70
  self,
68
71
  need,
69
72
  location_id,
70
- quant_ids=None,
71
73
  lot_id=None,
72
74
  package_id=None,
73
75
  owner_id=None,
@@ -79,7 +81,6 @@ class StockMove(models.Model):
79
81
  return super()._update_reserved_quantity(
80
82
  need,
81
83
  location_id,
82
- quant_ids=quant_ids,
83
84
  lot_id=lot_id,
84
85
  package_id=package_id,
85
86
  owner_id=owner_id,
@@ -108,7 +109,7 @@ class StockMove(models.Model):
108
109
  move_line_lot = move.mapped("move_line_ids.lot_id")
109
110
  if move.restrict_lot_id != move_line_lot:
110
111
  raise UserError(
111
- _(
112
+ self.env._(
112
113
  "The lot(s) %(move_line_lot)s being moved is "
113
114
  "inconsistent with the restriction on "
114
115
  "lot %(move_restrict_lot)s set on the move",
@@ -116,3 +117,44 @@ class StockMove(models.Model):
116
117
  move_restrict_lot=move.restrict_lot_id.display_name,
117
118
  )
118
119
  )
120
+
121
+ # Same as _rollup_move_origs but also for "done" moves.
122
+ def _rollup_not_cancelled_move_origs(self, seen=False):
123
+ if not seen:
124
+ seen = OrderedSet()
125
+ unseen = OrderedSet(self.ids) - seen
126
+ if not unseen:
127
+ return seen
128
+ seen.update(unseen)
129
+ self.filtered(lambda m: m.id in unseen).move_orig_ids.filtered(
130
+ lambda sm: sm.state != "cancel"
131
+ )._rollup_not_cancelled_move_origs(seen)
132
+ return seen
133
+
134
+ def write(self, vals):
135
+ if "restrict_lot_id" not in vals:
136
+ return super().write(vals)
137
+ else:
138
+ restrict_lot_id = vals.pop("restrict_lot_id")
139
+ restrict_lot = self.env["stock.lot"].browse(restrict_lot_id)
140
+ chained_move_ids = self._rollup_move_dests()
141
+ chained_move_ids = self._rollup_not_cancelled_move_origs(
142
+ chained_move_ids - self.ids
143
+ )
144
+ chained_moves = self.env["stock.move"].browse(chained_move_ids)
145
+ if any(
146
+ [
147
+ sm.state == "done" and sm.lot_ids and sm.lot_ids != restrict_lot
148
+ for sm in chained_moves
149
+ ]
150
+ ):
151
+ raise ValidationError(
152
+ self.env._(
153
+ "You can't modify the Lot/Serial number "
154
+ "because at least one move in the chain has "
155
+ "already been done with another Lot/Serial number."
156
+ )
157
+ )
158
+ for move in chained_moves:
159
+ super(StockMove, move).write({"restrict_lot_id": restrict_lot_id})
160
+ return super().write(vals)
@@ -1,4 +1,4 @@
1
- # License LGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
1
+ # License AGPL-3 - See http://www.gnu.org/licenses/agpl-3.0.html
2
2
  from odoo import fields, models
3
3
 
4
4
 
@@ -1,3 +1,5 @@
1
+ # License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
2
+
1
3
  from odoo import models
2
4
 
3
5
 
@@ -8,3 +10,8 @@ class StockRule(models.Model):
8
10
  fields = super()._get_custom_move_fields()
9
11
  fields += ["restrict_lot_id"]
10
12
  return fields
13
+
14
+ def _push_prepare_move_copy_values(self, move_to_copy, new_date):
15
+ values = super()._push_prepare_move_copy_values(move_to_copy, new_date)
16
+ values["restrict_lot_id"] = move_to_copy.restrict_lot_id.id
17
+ return values
@@ -1,2 +1,3 @@
1
1
  - Florian da Costa \<<florian.dacosta@akretion.com>\>
2
2
  - Ruchir Shukla \<<ruchir@bizzappdev.com>\>
3
+ - Stefan Rijnhart \<<stefan@opener.amsterdam>\>
@@ -1,4 +1,4 @@
1
- This module add a field to restrict a stock move to a specific lot. It
1
+ This module adds a field to restrict a stock move to a specific lot. It
2
2
  propagates it between chained moves. A move with a restrict lot will
3
3
  only be able to reserve or transfer products with the specified lot.
4
- This module is a based for other modules, it has not effect on its own.
4
+ This module serves as a basis for other modules, it has not effect on its own.
@@ -367,13 +367,14 @@ ul.auto-toc {
367
367
  !! This file is generated by oca-gen-addon-readme !!
368
368
  !! changes will be overwritten. !!
369
369
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
370
- !! source digest: sha256:00ff8e2abcdd536138a0bf51463e00f076ac3fe94947998cda2b6792ef723d5b
370
+ !! source digest: sha256:dce023da3482003599a49ae27980bca635a30f0b86afd9ee1bcbeb8d3ae775d9
371
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
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/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-workflow/tree/17.0/stock_restrict_lot"><img alt="OCA/stock-logistics-workflow" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-workflow-17-0/stock-logistics-workflow-17-0-stock_restrict_lot"><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/stock-logistics-workflow&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
- <p>This module add a field to restrict a stock move to a specific lot. It
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/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_restrict_lot"><img alt="OCA/stock-logistics-workflow" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--workflow-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-workflow-18-0/stock-logistics-workflow-18-0-stock_restrict_lot"><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/stock-logistics-workflow&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
+ <p>This module adds a field to restrict a stock move to a specific lot. It
374
374
  propagates it between chained moves. A move with a restrict lot will
375
375
  only be able to reserve or transfer products with the specified lot.
376
- This module is a based for other modules, it has not effect on its own.</p>
376
+ This module serves as a basis for other modules, it has not effect on
377
+ its own.</p>
377
378
  <p><strong>Table of contents</strong></p>
378
379
  <div class="contents local topic" id="contents">
379
380
  <ul class="simple">
@@ -391,7 +392,7 @@ This module is a based for other modules, it has not effect on its own.</p>
391
392
  <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/stock-logistics-workflow/issues">GitHub Issues</a>.
392
393
  In case of trouble, please check there if your issue has already been reported.
393
394
  If you spotted it first, help us to smash it by providing a detailed and welcomed
394
- <a class="reference external" href="https://github.com/OCA/stock-logistics-workflow/issues/new?body=module:%20stock_restrict_lot%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
395
+ <a class="reference external" href="https://github.com/OCA/stock-logistics-workflow/issues/new?body=module:%20stock_restrict_lot%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
395
396
  <p>Do not contact contributors directly about support or help with technical issues.</p>
396
397
  </div>
397
398
  <div class="section" id="credits">
@@ -407,6 +408,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
407
408
  <ul class="simple">
408
409
  <li>Florian da Costa &lt;<a class="reference external" href="mailto:florian.dacosta&#64;akretion.com">florian.dacosta&#64;akretion.com</a>&gt;</li>
409
410
  <li>Ruchir Shukla &lt;<a class="reference external" href="mailto:ruchir&#64;bizzappdev.com">ruchir&#64;bizzappdev.com</a>&gt;</li>
411
+ <li>Stefan Rijnhart &lt;<a class="reference external" href="mailto:stefan&#64;opener.amsterdam">stefan&#64;opener.amsterdam</a>&gt;</li>
410
412
  </ul>
411
413
  </div>
412
414
  <div class="section" id="maintainers">
@@ -420,7 +422,7 @@ mission is to support the collaborative development of Odoo features and
420
422
  promote its widespread use.</p>
421
423
  <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
422
424
  <p><a class="reference external image-reference" href="https://github.com/florian-dacosta"><img alt="florian-dacosta" src="https://github.com/florian-dacosta.png?size=40px" /></a></p>
423
- <p>This module is part of the <a class="reference external" href="https://github.com/OCA/stock-logistics-workflow/tree/17.0/stock_restrict_lot">OCA/stock-logistics-workflow</a> project on GitHub.</p>
425
+ <p>This module is part of the <a class="reference external" href="https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_restrict_lot">OCA/stock-logistics-workflow</a> project on GitHub.</p>
424
426
  <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
425
427
  </div>
426
428
  </div>
@@ -1,4 +1,6 @@
1
- from odoo.exceptions import UserError
1
+ # License LGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
2
+
3
+ from odoo.exceptions import UserError, ValidationError
2
4
  from odoo.tests.common import TransactionCase
3
5
 
4
6
 
@@ -8,10 +10,23 @@ class TestRestrictLot(TransactionCase):
8
10
  super().setUpClass()
9
11
  cls.customer_loc = cls.env.ref("stock.stock_location_customers")
10
12
  cls.output_loc = cls.env.ref("stock.stock_location_output")
11
- cls.product = cls.env.ref("product.product_product_16")
13
+ cls.product = cls.env.ref("product.product_product_16").copy()
12
14
  cls.product.write({"tracking": "lot"})
13
15
  cls.warehouse = cls.env.ref("stock.warehouse0")
14
16
  cls.warehouse.write({"delivery_steps": "pick_ship"})
17
+ cls.stock_loc = cls.warehouse.lot_stock_id
18
+
19
+ # Set up a pull route from an external warehouse
20
+ cls.warehouse2 = cls.env["stock.warehouse"].create(
21
+ {"name": __name__, "code": "_WH2"}
22
+ )
23
+ cls.warehouse.resupply_wh_ids = cls.warehouse2
24
+ route = cls.env["stock.route"].search(
25
+ [("supplied_wh_id", "=", cls.warehouse.id)]
26
+ )
27
+ assert route
28
+ cls.product.route_ids = route
29
+
15
30
  cls.lot = cls.env["stock.lot"].create(
16
31
  {
17
32
  "name": "lot1",
@@ -20,12 +35,56 @@ class TestRestrictLot(TransactionCase):
20
35
  }
21
36
  )
22
37
 
38
+ def _create_move_with_lot(self):
39
+ move = self.env["stock.move"].create(
40
+ {
41
+ "product_id": self.product.id,
42
+ "location_id": self.stock_loc.id,
43
+ "location_dest_id": self.output_loc.id,
44
+ "product_uom_qty": 1,
45
+ "product_uom": self.product.uom_id.id,
46
+ "name": "test",
47
+ "procure_method": "make_to_order",
48
+ "warehouse_id": self.warehouse.id,
49
+ "route_ids": [(6, 0, self.warehouse.delivery_route_id.ids)],
50
+ "restrict_lot_id": self.lot.id,
51
+ }
52
+ )
53
+ move._action_confirm()
54
+ move._action_assign()
55
+ new_lot = self.env["stock.lot"].create(
56
+ {
57
+ "name": "lot2",
58
+ "product_id": self.product.id,
59
+ "company_id": self.warehouse.company_id.id,
60
+ }
61
+ )
62
+ return move, new_lot
63
+
64
+ def _create_move_dest(self):
65
+ return self.env["stock.move"].create(
66
+ {
67
+ "product_id": self.product.id,
68
+ "location_id": self.customer_loc.id,
69
+ "product_uom_qty": 1,
70
+ "product_uom": self.product.uom_id.id,
71
+ "picking_type_id": self.warehouse.out_type_id.id,
72
+ "location_dest_id": self.output_loc.id,
73
+ "name": "test",
74
+ "procure_method": "make_to_order",
75
+ "warehouse_id": self.warehouse.id,
76
+ "route_ids": [(6, 0, self.warehouse.delivery_route_id.ids)],
77
+ "state": "waiting",
78
+ "restrict_lot_id": self.lot.id,
79
+ }
80
+ )
81
+
23
82
  def test_00_move_restrict_lot_propagation(self):
24
83
  move = self.env["stock.move"].create(
25
84
  {
26
85
  "product_id": self.product.id,
27
- "location_id": self.output_loc.id,
28
- "location_dest_id": self.customer_loc.id,
86
+ "location_id": self.stock_loc.id,
87
+ "location_dest_id": self.output_loc.id,
29
88
  "product_uom_qty": 1,
30
89
  "product_uom": self.product.uom_id.id,
31
90
  "name": "test",
@@ -43,8 +102,8 @@ class TestRestrictLot(TransactionCase):
43
102
  move = self.env["stock.move"].create(
44
103
  {
45
104
  "product_id": self.product.id,
46
- "location_id": self.output_loc.id,
47
- "location_dest_id": self.customer_loc.id,
105
+ "location_id": self.stock_loc.id,
106
+ "location_dest_id": self.output_loc.id,
48
107
  "product_uom_qty": 2,
49
108
  "product_uom": self.product.uom_id.id,
50
109
  "name": "test",
@@ -114,19 +173,13 @@ class TestRestrictLot(TransactionCase):
114
173
  "group_stock_multi_locations": True,
115
174
  }
116
175
  )
117
- warehouse = self.env["stock.warehouse"].search(
118
- [("company_id", "=", self.env.company.id)], limit=1
119
- )
120
- warehouse.delivery_steps = "pick_ship"
121
176
 
122
- self.product.categ_id.route_ids |= self.env["stock.route"].search(
123
- [("name", "ilike", "deliver in 2")]
124
- )
177
+ self.product.categ_id.route_ids |= self.warehouse.delivery_route_id
125
178
  location_1 = self.env["stock.location"].create(
126
- {"name": "loc1", "location_id": warehouse.lot_stock_id.id}
179
+ {"name": "loc1", "location_id": self.warehouse.lot_stock_id.id}
127
180
  )
128
181
  location_2 = self.env["stock.location"].create(
129
- {"name": "loc2", "location_id": warehouse.lot_stock_id.id}
182
+ {"name": "loc2", "location_id": self.warehouse.lot_stock_id.id}
130
183
  )
131
184
 
132
185
  # create goods in stock
@@ -185,9 +238,9 @@ class TestRestrictLot(TransactionCase):
185
238
  self.assertEqual(concern_move.product_uom_qty, expect_qty)
186
239
 
187
240
  def assert_move_line_per_lot_and_location(
188
- moves, expect_lot, expect_from_location, expect_reserved_qty
241
+ move_lines, expect_lot, expect_from_location, expect_reserved_qty
189
242
  ):
190
- concern_move_line = moves.filtered(
243
+ concern_move_line = move_lines.filtered(
191
244
  lambda mov: mov.lot_id == expect_lot
192
245
  and mov.location_id == expect_from_location
193
246
  )
@@ -196,23 +249,11 @@ class TestRestrictLot(TransactionCase):
196
249
  concern_move_line.quantity_product_uom, expect_reserved_qty
197
250
  )
198
251
 
199
- pickings = self.env["stock.picking"].search(
200
- [("group_id", "=", procurement_group.id)]
201
- )
202
- self.assertEqual(len(pickings), 2)
203
- delivery = pickings.filtered(
204
- lambda pick: pick.picking_type_id.code == "outgoing"
205
- )
206
- pick = pickings.filtered(lambda pick: pick.picking_type_id.code == "internal")
207
-
208
- self.assertEqual(delivery.state, "waiting")
209
- self.assertEqual(len(delivery.move_ids_without_package), 2)
210
- assert_move_qty_per_lot(delivery.move_ids_without_package, self.lot, 15)
211
- assert_move_qty_per_lot(delivery.move_ids_without_package, lot2, 30)
212
-
213
- pick.action_assign()
252
+ pick = procurement_group.stock_move_ids.picking_id
253
+ self.assertEqual(len(pick), 1)
254
+ self.assertEqual(pick.picking_type_id.code, "internal")
214
255
  self.assertEqual(pick.state, "assigned")
215
- self.assertEqual(len(pick.move_ids_without_package), 2)
256
+ self.assertEqual(len(pick.move_ids), 2)
216
257
  assert_move_qty_per_lot(pick.move_ids_without_package, self.lot, 15)
217
258
  assert_move_qty_per_lot(pick.move_ids_without_package, lot2, 30)
218
259
  assert_move_line_per_lot_and_location(
@@ -227,17 +268,26 @@ class TestRestrictLot(TransactionCase):
227
268
  assert_move_line_per_lot_and_location(
228
269
  pick.move_line_ids_without_package, lot2, location_2, 25
229
270
  )
271
+ pick.button_validate()
272
+ self.assertEqual(pick.state, "done")
273
+
274
+ delivery = procurement_group.stock_move_ids.picking_id - pick
275
+ self.assertEqual(delivery.picking_type_id.code, "outgoing")
276
+ self.assertEqual(delivery.state, "assigned")
277
+
278
+ assert_move_qty_per_lot(delivery.move_ids_without_package, self.lot, 15)
279
+ assert_move_qty_per_lot(delivery.move_ids_without_package, lot2, 30)
230
280
 
231
281
  def test_compute_quantites(self):
232
282
  move = self.env["stock.move"].create(
233
283
  {
234
284
  "product_id": self.product.id,
235
- "location_id": self.output_loc.id,
285
+ "location_id": self.stock_loc.id,
236
286
  "location_dest_id": self.customer_loc.id,
237
287
  "product_uom_qty": 1,
238
288
  "product_uom": self.product.uom_id.id,
239
289
  "name": "test",
240
- "procure_method": "make_to_order",
290
+ "procure_method": "make_to_stock",
241
291
  "warehouse_id": self.warehouse.id,
242
292
  "route_ids": [(6, 0, self.warehouse.delivery_route_id.ids)],
243
293
  "restrict_lot_id": self.lot.id,
@@ -252,6 +302,7 @@ class TestRestrictLot(TransactionCase):
252
302
 
253
303
  product = move.product_id
254
304
  self.assertEqual(product.outgoing_qty, 2)
305
+
255
306
  product.invalidate_recordset()
256
307
  product = product.with_context(lot_id=self.lot.id)
257
308
  self.assertEqual(product.outgoing_qty, 1)
@@ -301,3 +352,41 @@ class TestRestrictLot(TransactionCase):
301
352
  self.assertRaises(UserError, move._action_done)
302
353
  move_line.lot_id = self.lot
303
354
  move._action_done()
355
+
356
+ def test_restrict_lot_propagation_dest_moves(self):
357
+ move, new_lot = self._create_move_with_lot()
358
+ move_dest = self._create_move_dest()
359
+ move.move_dest_ids = [(4, move_dest.id)]
360
+ self.assertEqual(move_dest.restrict_lot_id, self.lot)
361
+ move.restrict_lot_id = new_lot.id
362
+ self.assertEqual(move_dest.restrict_lot_id, new_lot)
363
+
364
+ def test_restrict_lot_propagation_origin_moves(self):
365
+ move, new_lot = self._create_move_with_lot()
366
+ orig_move = move.move_orig_ids
367
+ self.assertEqual(orig_move.restrict_lot_id, self.lot)
368
+ move.restrict_lot_id = new_lot.id
369
+ self.assertEqual(orig_move.restrict_lot_id, new_lot)
370
+
371
+ def test_restrict_lot_propagation_origin_and_dest_moves(self):
372
+ move, new_lot = self._create_move_with_lot()
373
+ move_dest = self._create_move_dest()
374
+ move.move_dest_ids = [(4, move_dest.id)]
375
+ orig_move = move.move_orig_ids
376
+ self.assertEqual(move_dest.restrict_lot_id, self.lot)
377
+ self.assertEqual(orig_move.restrict_lot_id, self.lot)
378
+ move.restrict_lot_id = new_lot.id
379
+ self.assertEqual(orig_move.restrict_lot_id, new_lot)
380
+ self.assertEqual(move_dest.restrict_lot_id, new_lot)
381
+
382
+ def test_restrict_lot_no_propagation_error(self):
383
+ move, new_lot = self._create_move_with_lot()
384
+ orig_move = move.move_orig_ids
385
+ orig_move._action_assign()
386
+ orig_move.quantity = orig_move.product_uom_qty
387
+ orig_move.picked = True
388
+ orig_move._action_done()
389
+ self.assertEqual(orig_move.state, "done")
390
+ with self.assertRaises(ValidationError) as m:
391
+ move.restrict_lot_id = new_lot.id
392
+ self.assertIn("You can't modify the Lot/Serial number", m.exception.args[0])
@@ -1,34 +1,32 @@
1
1
  <?xml version="1.0" encoding="utf-8" ?>
2
2
  <odoo>
3
-
4
- <record id="stock_move_pick_tree_view" model="ir.ui.view">
5
- <field name="model">stock.move</field>
6
- <field name="inherit_id" ref="stock.view_picking_move_tree" />
7
- <field name="arch" type="xml">
8
- <field name="product_id" position="after">
9
- <field
3
+ <record id="stock_move_pick_tree_view" model="ir.ui.view">
4
+ <field name="model">stock.move</field>
5
+ <field name="inherit_id" ref="stock.view_picking_move_tree" />
6
+ <field name="arch" type="xml">
7
+ <field name="product_id" position="after">
8
+ <field
10
9
  name="restrict_lot_id"
11
10
  readonly="1"
12
11
  optional="show"
13
12
  groups="stock.group_production_lot"
14
13
  />
15
- </field>
16
14
  </field>
17
- </record>
15
+ </field>
16
+ </record>
18
17
 
19
- <record id="stock_move_tree_view" model="ir.ui.view">
20
- <field name="model">stock.move</field>
21
- <field name="inherit_id" ref="stock.view_move_tree" />
22
- <field name="arch" type="xml">
23
- <field name="product_id" position="after">
24
- <field
18
+ <record id="stock_move_tree_view" model="ir.ui.view">
19
+ <field name="model">stock.move</field>
20
+ <field name="inherit_id" ref="stock.view_move_tree" />
21
+ <field name="arch" type="xml">
22
+ <field name="product_id" position="after">
23
+ <field
25
24
  name="restrict_lot_id"
26
25
  readonly="1"
27
26
  optional="show"
28
27
  groups="stock.group_production_lot"
29
28
  />
30
- </field>
31
29
  </field>
32
- </record>
33
-
30
+ </field>
31
+ </record>
34
32
  </odoo>
@@ -1,36 +1,34 @@
1
1
  <?xml version="1.0" encoding="utf-8" ?>
2
2
  <odoo>
3
-
4
- <record id="custom_main_stock_picking_form_view" model="ir.ui.view">
5
- <field name="model">stock.picking</field>
6
- <field name="inherit_id" ref="stock.view_picking_form" />
7
- <field name="arch" type="xml">
8
- <xpath
9
- expr="//field[@name='move_ids_without_package']/tree/field[@name='product_id']"
3
+ <record id="custom_main_stock_picking_form_view" model="ir.ui.view">
4
+ <field name="model">stock.picking</field>
5
+ <field name="inherit_id" ref="stock.view_picking_form" />
6
+ <field name="arch" type="xml">
7
+ <xpath
8
+ expr="//field[@name='move_ids_without_package']/list/field[@name='product_id']"
10
9
  position="after"
11
10
  >
12
- <field
11
+ <field
13
12
  name="restrict_lot_id"
14
13
  readonly="1"
15
14
  optional="show"
16
15
  groups="stock.group_production_lot"
17
16
  />
18
- </xpath>
19
- </field>
20
- </record>
17
+ </xpath>
18
+ </field>
19
+ </record>
21
20
 
22
- <record id="custom_stock_picking_search_view" model="ir.ui.view">
23
- <field name="model">stock.picking</field>
24
- <field name="inherit_id" ref="stock.view_picking_internal_search" />
25
- <field name="arch" type="xml">
26
- <field name="product_id" position="after">
27
- <field
21
+ <record id="custom_stock_picking_search_view" model="ir.ui.view">
22
+ <field name="model">stock.picking</field>
23
+ <field name="inherit_id" ref="stock.view_picking_internal_search" />
24
+ <field name="arch" type="xml">
25
+ <field name="product_id" position="after">
26
+ <field
28
27
  name="restrict_lot_id"
29
28
  string="Lot"
30
29
  groups="stock.group_production_lot"
31
30
  />
32
- </field>
33
31
  </field>
34
- </record>
35
-
32
+ </field>
33
+ </record>
36
34
  </odoo>
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-stock_restrict_lot
3
- Version: 17.0.1.2.0
3
+ Version: 18.0.1.0.0.2
4
4
  Requires-Python: >=3.10
5
- Requires-Dist: odoo>=17.0a,<17.1dev
5
+ Requires-Dist: odoo==18.0.*
6
6
  Summary: Base module that add back the concept of restrict lot on stock move
7
7
  Home-page: https://github.com/OCA/stock-logistics-workflow
8
8
  License: LGPL-3
@@ -10,7 +10,7 @@ Author: Akretion, Odoo Community Association (OCA)
10
10
  Author-email: support@odoo-community.org
11
11
  Classifier: Programming Language :: Python
12
12
  Classifier: Framework :: Odoo
13
- Classifier: Framework :: Odoo :: 17.0
13
+ Classifier: Framework :: Odoo :: 18.0
14
14
  Classifier: License :: OSI Approved :: GNU Lesser General Public License v3 (LGPLv3)
15
15
 
16
16
  ==================
@@ -22,7 +22,7 @@ Stock Restrict Lot
22
22
  !! This file is generated by oca-gen-addon-readme !!
23
23
  !! changes will be overwritten. !!
24
24
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
25
- !! source digest: sha256:00ff8e2abcdd536138a0bf51463e00f076ac3fe94947998cda2b6792ef723d5b
25
+ !! source digest: sha256:dce023da3482003599a49ae27980bca635a30f0b86afd9ee1bcbeb8d3ae775d9
26
26
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
27
 
28
28
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -32,21 +32,22 @@ Stock Restrict Lot
32
32
  :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html
33
33
  :alt: License: LGPL-3
34
34
  .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fstock--logistics--workflow-lightgray.png?logo=github
35
- :target: https://github.com/OCA/stock-logistics-workflow/tree/17.0/stock_restrict_lot
35
+ :target: https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_restrict_lot
36
36
  :alt: OCA/stock-logistics-workflow
37
37
  .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
38
- :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-17-0/stock-logistics-workflow-17-0-stock_restrict_lot
38
+ :target: https://translation.odoo-community.org/projects/stock-logistics-workflow-18-0/stock-logistics-workflow-18-0-stock_restrict_lot
39
39
  :alt: Translate me on Weblate
40
40
  .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
41
- :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-workflow&target_branch=17.0
41
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/stock-logistics-workflow&target_branch=18.0
42
42
  :alt: Try me on Runboat
43
43
 
44
44
  |badge1| |badge2| |badge3| |badge4| |badge5|
45
45
 
46
- This module add a field to restrict a stock move to a specific lot. It
46
+ This module adds a field to restrict a stock move to a specific lot. It
47
47
  propagates it between chained moves. A move with a restrict lot will
48
48
  only be able to reserve or transfer products with the specified lot.
49
- This module is a based for other modules, it has not effect on its own.
49
+ This module serves as a basis for other modules, it has not effect on
50
+ its own.
50
51
 
51
52
  **Table of contents**
52
53
 
@@ -59,7 +60,7 @@ Bug Tracker
59
60
  Bugs are tracked on `GitHub Issues <https://github.com/OCA/stock-logistics-workflow/issues>`_.
60
61
  In case of trouble, please check there if your issue has already been reported.
61
62
  If you spotted it first, help us to smash it by providing a detailed and welcomed
62
- `feedback <https://github.com/OCA/stock-logistics-workflow/issues/new?body=module:%20stock_restrict_lot%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
63
+ `feedback <https://github.com/OCA/stock-logistics-workflow/issues/new?body=module:%20stock_restrict_lot%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
63
64
 
64
65
  Do not contact contributors directly about support or help with technical issues.
65
66
 
@@ -76,6 +77,7 @@ Contributors
76
77
 
77
78
  - Florian da Costa <florian.dacosta@akretion.com>
78
79
  - Ruchir Shukla <ruchir@bizzappdev.com>
80
+ - Stefan Rijnhart <stefan@opener.amsterdam>
79
81
 
80
82
  Maintainers
81
83
  -----------
@@ -98,6 +100,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
98
100
 
99
101
  |maintainer-florian-dacosta|
100
102
 
101
- This module is part of the `OCA/stock-logistics-workflow <https://github.com/OCA/stock-logistics-workflow/tree/17.0/stock_restrict_lot>`_ project on GitHub.
103
+ This module is part of the `OCA/stock-logistics-workflow <https://github.com/OCA/stock-logistics-workflow/tree/18.0/stock_restrict_lot>`_ project on GitHub.
102
104
 
103
105
  You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
@@ -0,0 +1,24 @@
1
+ odoo/addons/stock_restrict_lot/README.rst,sha256=L2SAcstft-Wa3ddB34vTd_FMymPvLd-4613euD878Io,3546
2
+ odoo/addons/stock_restrict_lot/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
3
+ odoo/addons/stock_restrict_lot/__manifest__.py,sha256=6oKtIpnmhsXQrb7b20kBYGwETT876fKB06zpShsVghA,576
4
+ odoo/addons/stock_restrict_lot/i18n/es.po,sha256=UKHL4vKheMhf0x2mZ_KwUmtjbwiCXnt-UJMeM82FwUs,2068
5
+ odoo/addons/stock_restrict_lot/i18n/hr.po,sha256=YTZunKeyiqSlJhW2cMSi2dQ8jzrrFXk1gDCyPvl847Y,2111
6
+ odoo/addons/stock_restrict_lot/i18n/it.po,sha256=p1GuTRBBNwL-2A5I00vhVf_9vekVVFpMBTOSishnong,2214
7
+ odoo/addons/stock_restrict_lot/i18n/stock_restrict_lot.pot,sha256=nvOiQgDpfOhBpgOFZVbVfgjs12txTi-2BjnxUph6s_k,1954
8
+ odoo/addons/stock_restrict_lot/models/__init__.py,sha256=3nhRO6ipFBMbcrlWXMEMR62djB3_7q2TxcUM42xYMGg,108
9
+ odoo/addons/stock_restrict_lot/models/product_product.py,sha256=sv-ZLxXqmf6UX4MII1lX7s1BsRgyiKOD_wDpo993KmU,888
10
+ odoo/addons/stock_restrict_lot/models/stock_move.py,sha256=lXtBPTeuVdu1WYWUuIONn7iCWk5FZtcuzYP9T594neo,5802
11
+ odoo/addons/stock_restrict_lot/models/stock_picking.py,sha256=0l60llnOb3tnmk-3pNF21kP1aR8vO0qu5BbbeqD3T6A,417
12
+ odoo/addons/stock_restrict_lot/models/stock_rule.py,sha256=1oOOLWBEC-inoLWHqhDxxH0Q9XXsInasxbIMLmYjQ5E,547
13
+ odoo/addons/stock_restrict_lot/readme/CONTRIBUTORS.md,sha256=Yzf9SONTbOQxjFZA7UFGibcNzh3pOkl5ZkBgHifmQvc,146
14
+ odoo/addons/stock_restrict_lot/readme/DESCRIPTION.md,sha256=jYTY5vmrg7LmJCnnJ2qwOpIVuvEaOepvYGAFy0vdlBA,289
15
+ odoo/addons/stock_restrict_lot/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
16
+ odoo/addons/stock_restrict_lot/static/description/index.html,sha256=21V4T7wSjIshHFjANDH5MbOiozLaaoYXX329MjvfICo,13078
17
+ odoo/addons/stock_restrict_lot/tests/__init__.py,sha256=5RimjaqBd8kD55SNoLqh-g9sCmmI28hPx7IQMUX6AOQ,32
18
+ odoo/addons/stock_restrict_lot/tests/test_restrict_lot.py,sha256=k-tOml6ti2jDKBh3SLJ-Ow-fKoHTTPNplSjWqa-b4Ws,15501
19
+ odoo/addons/stock_restrict_lot/views/stock_move_views.xml,sha256=w4zzez4f9fK-drmjnUh61ZZP4vyW_vM4ki4XcHPnFEA,1117
20
+ odoo/addons/stock_restrict_lot/views/stock_picking.xml,sha256=s6ONtCnjx151Ob_BOyQ4BvkTs98xqcv7QoysZb8WQ3c,1225
21
+ odoo_addon_stock_restrict_lot-18.0.1.0.0.2.dist-info/METADATA,sha256=BdWJg8pW9LmflQoEH28qw6L56yoiOEBMMtygdWXHi2k,4119
22
+ odoo_addon_stock_restrict_lot-18.0.1.0.0.2.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
23
+ odoo_addon_stock_restrict_lot-18.0.1.0.0.2.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
24
+ odoo_addon_stock_restrict_lot-18.0.1.0.0.2.dist-info/RECORD,,
@@ -1,24 +0,0 @@
1
- odoo/addons/stock_restrict_lot/README.rst,sha256=EFOZYRoPNMQz3M1wyDoD_ETAA3e3rLZ8MR623sh2mco,3494
2
- odoo/addons/stock_restrict_lot/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
3
- odoo/addons/stock_restrict_lot/__manifest__.py,sha256=XJabscO10DZ25wSD43kOc_qJK3_7HfgE3ewB-kTBx4I,506
4
- odoo/addons/stock_restrict_lot/i18n/es.po,sha256=UKHL4vKheMhf0x2mZ_KwUmtjbwiCXnt-UJMeM82FwUs,2068
5
- odoo/addons/stock_restrict_lot/i18n/hr.po,sha256=YTZunKeyiqSlJhW2cMSi2dQ8jzrrFXk1gDCyPvl847Y,2111
6
- odoo/addons/stock_restrict_lot/i18n/it.po,sha256=p1GuTRBBNwL-2A5I00vhVf_9vekVVFpMBTOSishnong,2214
7
- odoo/addons/stock_restrict_lot/i18n/stock_restrict_lot.pot,sha256=AhJ4X9RXaEtapVvWPhQk3dHKAIADrVe5fT6Z8mBkpGY,1729
8
- odoo/addons/stock_restrict_lot/models/__init__.py,sha256=3nhRO6ipFBMbcrlWXMEMR62djB3_7q2TxcUM42xYMGg,108
9
- odoo/addons/stock_restrict_lot/models/product_product.py,sha256=sv-ZLxXqmf6UX4MII1lX7s1BsRgyiKOD_wDpo993KmU,888
10
- odoo/addons/stock_restrict_lot/models/stock_move.py,sha256=stXDy4srK6L2qTNQ6bHfoO24v3ZdmgGCJeq8RBvKxi8,4047
11
- odoo/addons/stock_restrict_lot/models/stock_picking.py,sha256=TrMC6cSDlvCNMyRE1fRzFVbA7wYxhdTUbUBpqqLF21E,417
12
- odoo/addons/stock_restrict_lot/models/stock_rule.py,sha256=NXXjB8rooKS0kpG3zvqpDDpLkmh7mvbnHLItDwdCec0,236
13
- odoo/addons/stock_restrict_lot/readme/CONTRIBUTORS.md,sha256=JBjjiC74D-iWs-cRLAY7BTnLuOA83Nh0fCtABQTadHs,98
14
- odoo/addons/stock_restrict_lot/readme/DESCRIPTION.md,sha256=5PwOcvRp7HF_bK6A2P20xcbXvvFZaCj6BYY7moybpO4,281
15
- odoo/addons/stock_restrict_lot/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
16
- odoo/addons/stock_restrict_lot/static/description/index.html,sha256=YCf1HeHfrPlCPDW0kMqpLY-MTN7X9VJF__YLho_-Dbg,12933
17
- odoo/addons/stock_restrict_lot/tests/__init__.py,sha256=5RimjaqBd8kD55SNoLqh-g9sCmmI28hPx7IQMUX6AOQ,32
18
- odoo/addons/stock_restrict_lot/tests/test_restrict_lot.py,sha256=k2dsPmHa3IctRAr46SUpsBwhH9HS9lxZU-uD8hcLc98,11840
19
- odoo/addons/stock_restrict_lot/views/stock_move_views.xml,sha256=unNYn0AuYyBhxSnnPN6xf6X7J7S-G1KbXJVYF20scA4,1191
20
- odoo/addons/stock_restrict_lot/views/stock_picking.xml,sha256=X1N9S5g09NREC_DJAlM1CjZuV21nJgBxTANn_6kC64o,1299
21
- odoo_addon_stock_restrict_lot-17.0.1.2.0.dist-info/METADATA,sha256=yU1sCdCfXEnXKr4-291PcxfWHBBRtx6_vOSDSui1j2k,4073
22
- odoo_addon_stock_restrict_lot-17.0.1.2.0.dist-info/WHEEL,sha256=9fEMia4zL7ZuZbnCOrcYogUhmn4XFIVaJ8G4YGI31xc,81
23
- odoo_addon_stock_restrict_lot-17.0.1.2.0.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
24
- odoo_addon_stock_restrict_lot-17.0.1.2.0.dist-info/RECORD,,