odoo-addon-stock-release-channel 18.0.1.3.1__py3-none-any.whl → 18.0.1.4.0.3__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.
Files changed (21) hide show
  1. odoo/addons/stock_release_channel/README.rst +1 -1
  2. odoo/addons/stock_release_channel/__manifest__.py +1 -1
  3. odoo/addons/stock_release_channel/demo/stock_release_channel.xml +1 -0
  4. odoo/addons/stock_release_channel/i18n/stock_release_channel.pot +88 -12
  5. odoo/addons/stock_release_channel/migrations/18.0.1.4.0/post-migration.py +12 -0
  6. odoo/addons/stock_release_channel/migrations/18.0.1.4.0/pre-migration.py +21 -0
  7. odoo/addons/stock_release_channel/models/res_company.py +0 -4
  8. odoo/addons/stock_release_channel/models/res_config_settings.py +0 -4
  9. odoo/addons/stock_release_channel/models/stock_move.py +3 -6
  10. odoo/addons/stock_release_channel/models/stock_picking.py +1 -2
  11. odoo/addons/stock_release_channel/models/stock_release_channel.py +106 -6
  12. odoo/addons/stock_release_channel/static/description/index.html +1 -1
  13. odoo/addons/stock_release_channel/tests/common.py +1 -1
  14. odoo/addons/stock_release_channel/tests/test_release_channel.py +2 -2
  15. odoo/addons/stock_release_channel/tests/test_release_channel_lifecycle.py +41 -1
  16. odoo/addons/stock_release_channel/views/res_config_settings.xml +0 -7
  17. odoo/addons/stock_release_channel/views/stock_release_channel_views.xml +69 -22
  18. {odoo_addon_stock_release_channel-18.0.1.3.1.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/METADATA +2 -2
  19. {odoo_addon_stock_release_channel-18.0.1.3.1.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/RECORD +21 -19
  20. {odoo_addon_stock_release_channel-18.0.1.3.1.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/WHEEL +0 -0
  21. {odoo_addon_stock_release_channel-18.0.1.3.1.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/top_level.txt +0 -0
@@ -11,7 +11,7 @@ Stock Release Channels
11
11
  !! This file is generated by oca-gen-addon-readme !!
12
12
  !! changes will be overwritten. !!
13
13
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
14
- !! source digest: sha256:3096b2c65572f848cc55f06bbaa96516ab47c74f3c1b17fd161195cbc081d86d
14
+ !! source digest: sha256:80a2bf135f19dc957b0938eec220cfdd0dca964b6d6301b44fa69f1b7e56221b
15
15
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16
16
 
17
17
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -5,7 +5,7 @@
5
5
  {
6
6
  "name": "Stock Release Channels",
7
7
  "summary": "Manage workload in WMS with release channels",
8
- "version": "18.0.1.3.1",
8
+ "version": "18.0.1.4.0",
9
9
  "development_status": "Beta",
10
10
  "license": "AGPL-3",
11
11
  "author": "Camptocamp, BCIM, ACSONE SA/NV, Odoo Community Association (OCA)",
@@ -5,5 +5,6 @@
5
5
  <field name="sequence">999</field>
6
6
  <field name="rule_domain">[]</field>
7
7
  <field name="state">open</field>
8
+ <field name="collect_pickings" eval="True" />
8
9
  </record>
9
10
  </odoo>
@@ -25,11 +25,21 @@ msgstr ""
25
25
  msgid "<span class=\"ms-2\">Lock</span>"
26
26
  msgstr ""
27
27
 
28
+ #. module: stock_release_channel
29
+ #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
30
+ msgid "<span class=\"ms-2\">Restart Collecting</span>"
31
+ msgstr ""
32
+
28
33
  #. module: stock_release_channel
29
34
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
30
35
  msgid "<span class=\"ms-2\">Sleep</span>"
31
36
  msgstr ""
32
37
 
38
+ #. module: stock_release_channel
39
+ #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
40
+ msgid "<span class=\"ms-2\">Stop Collecting</span>"
41
+ msgstr ""
42
+
33
43
  #. module: stock_release_channel
34
44
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
35
45
  msgid "<span class=\"ms-2\">Unlock</span>"
@@ -45,6 +55,18 @@ msgstr ""
45
55
  msgid "<span>Actions</span>"
46
56
  msgstr ""
47
57
 
58
+ #. module: stock_release_channel
59
+ #. odoo-python
60
+ #: code:addons/stock_release_channel/models/stock_release_channel.py:0
61
+ msgid "Action 'Collect Restart' is not allowed for channel %(name)s."
62
+ msgstr ""
63
+
64
+ #. module: stock_release_channel
65
+ #. odoo-python
66
+ #: code:addons/stock_release_channel/models/stock_release_channel.py:0
67
+ msgid "Action 'Collect Stop' is not allowed for channel %(name)s."
68
+ msgstr ""
69
+
48
70
  #. module: stock_release_channel
49
71
  #. odoo-python
50
72
  #: code:addons/stock_release_channel/models/stock_release_channel.py:0
@@ -111,6 +133,11 @@ msgstr ""
111
133
  msgid "All transfers required to bring goods to the deliveries."
112
134
  msgstr ""
113
135
 
136
+ #. module: stock_release_channel
137
+ #: model:ir.model.fields,help:stock_release_channel.field_stock_release_channel__collect_pickings
138
+ msgid "Allows you to control if pickings are assigned to the release channel."
139
+ msgstr ""
140
+
114
141
  #. module: stock_release_channel
115
142
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_form_view
116
143
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_search_view
@@ -171,6 +198,11 @@ msgstr ""
171
198
  msgid "Channels dashboard - Show last delivery done"
172
199
  msgstr ""
173
200
 
201
+ #. module: stock_release_channel
202
+ #: model:ir.model.fields,field_description:stock_release_channel.field_stock_release_channel__collect_pickings
203
+ msgid "Collect Pickings"
204
+ msgstr ""
205
+
174
206
  #. module: stock_release_channel
175
207
  #: model:ir.model.fields,field_description:stock_release_channel.field_stock_release_channel__color
176
208
  msgid "Color"
@@ -288,6 +320,16 @@ msgstr ""
288
320
  msgid "Internal transfers"
289
321
  msgstr ""
290
322
 
323
+ #. module: stock_release_channel
324
+ #: model:ir.model.fields,field_description:stock_release_channel.field_stock_release_channel__is_action_collect_restart_allowed
325
+ msgid "Is Action Collect Restart Allowed"
326
+ msgstr ""
327
+
328
+ #. module: stock_release_channel
329
+ #: model:ir.model.fields,field_description:stock_release_channel.field_stock_release_channel__is_action_collect_stop_allowed
330
+ msgid "Is Action Collect Stop Allowed"
331
+ msgstr ""
332
+
291
333
  #. module: stock_release_channel
292
334
  #: model:ir.model.fields,field_description:stock_release_channel.field_stock_release_channel__is_action_lock_allowed
293
335
  msgid "Is Action Lock Allowed"
@@ -498,16 +540,10 @@ msgid "Re-assign release channel"
498
540
  msgstr ""
499
541
 
500
542
  #. module: stock_release_channel
501
- #: model:ir.model.fields,field_description:stock_release_channel.field_res_company__recompute_channel_on_pickings_at_release
502
- #: model:ir.model.fields,field_description:stock_release_channel.field_res_config_settings__recompute_channel_on_pickings_at_release
543
+ #: model:ir.model.fields,field_description:stock_release_channel.field_stock_release_channel__recompute_channel_on_pickings_at_release
503
544
  msgid "Recompute Channel On Pickings At Release"
504
545
  msgstr ""
505
546
 
506
- #. module: stock_release_channel
507
- #: model_terms:ir.ui.view,arch_db:stock_release_channel.res_config_settings_view
508
- msgid "Recompute channel when releasing a transfer"
509
- msgstr ""
510
-
511
547
  #. module: stock_release_channel
512
548
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_tree_view
513
549
  msgid "Related Done Total"
@@ -571,6 +607,11 @@ msgstr ""
571
607
  msgid "Released Transfers"
572
608
  msgstr ""
573
609
 
610
+ #. module: stock_release_channel
611
+ #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_form_view
612
+ msgid "Restart Collecting"
613
+ msgstr ""
614
+
574
615
  #. module: stock_release_channel
575
616
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_form_view
576
617
  msgid "Selection criteria"
@@ -621,6 +662,21 @@ msgstr ""
621
662
  msgid "Stock Release Channels"
622
663
  msgstr ""
623
664
 
665
+ #. module: stock_release_channel
666
+ #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_form_view
667
+ msgid "Stop Collecting"
668
+ msgstr ""
669
+
670
+ #. module: stock_release_channel
671
+ #: model:ir.model.fields,help:stock_release_channel.field_stock_release_channel__is_action_collect_restart_allowed
672
+ msgid "Technical field to check if the action 'Collect Restart' is allowed."
673
+ msgstr ""
674
+
675
+ #. module: stock_release_channel
676
+ #: model:ir.model.fields,help:stock_release_channel.field_stock_release_channel__is_action_collect_stop_allowed
677
+ msgid "Technical field to check if the action 'Collect Stop' is allowed."
678
+ msgstr ""
679
+
624
680
  #. module: stock_release_channel
625
681
  #: model:ir.model.fields,help:stock_release_channel.field_stock_release_channel__is_action_lock_allowed
626
682
  msgid "Technical field to check if the action 'Lock' is allowed."
@@ -664,8 +720,8 @@ msgstr ""
664
720
  #: model:ir.model.fields,help:stock_release_channel.field_stock_release_channel__state
665
721
  msgid ""
666
722
  "The state allows you to control the availability of the release channel.\n"
667
- " * Open: Manual and automatic picking assignment to the release is effective and release operations are allowed.\n"
668
- "* Locked: Release operations are forbidden. (Assignement processes are still working)\n"
723
+ " * Open: Release operations are allowed.\n"
724
+ "* Locked: Release operations are forbidden.\n"
669
725
  "* Asleep: Assigned pickings not processed are unassigned from the release channel.\n"
670
726
  msgstr ""
671
727
 
@@ -679,6 +735,12 @@ msgstr ""
679
735
  msgid "The total number of pickings to achieve 100% of progress."
680
736
  msgstr ""
681
737
 
738
+ #. module: stock_release_channel
739
+ #. odoo-python
740
+ #: code:addons/stock_release_channel/models/stock_release_channel.py:0
741
+ msgid "This channel is restricted for manual assignment!"
742
+ msgstr ""
743
+
682
744
  #. module: stock_release_channel
683
745
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
684
746
  msgid "To Do"
@@ -763,9 +825,12 @@ msgid ""
763
825
  msgstr ""
764
826
 
765
827
  #. module: stock_release_channel
766
- #: model:ir.model.fields,help:stock_release_channel.field_res_company__recompute_channel_on_pickings_at_release
767
- #: model:ir.model.fields,help:stock_release_channel.field_res_config_settings__recompute_channel_on_pickings_at_release
768
- msgid "When releasing a transfer, recompute channel"
828
+ #: model:ir.model.fields,help:stock_release_channel.field_stock_release_channel__recompute_channel_on_pickings_at_release
829
+ msgid ""
830
+ "When releasing a transfer, recompute the channel. Be carefull when using "
831
+ "this in conjuction with channel lifecycle (stop/start collecting, sleep/wake"
832
+ " up) as a delivery could be kicked out of a channel if you stop collecting "
833
+ "and recompute after release"
769
834
  msgstr ""
770
835
 
771
836
  #. module: stock_release_channel
@@ -773,6 +838,12 @@ msgstr ""
773
838
  msgid "Write Python code to filter out pickings."
774
839
  msgstr ""
775
840
 
841
+ #. module: stock_release_channel
842
+ #. odoo-python
843
+ #: code:addons/stock_release_channel/models/stock_release_channel.py:0
844
+ msgid "You cannot collect pickings with current state!"
845
+ msgstr ""
846
+
776
847
  #. module: stock_release_channel
777
848
  #. odoo-python
778
849
  #: code:addons/stock_release_channel/models/stock_picking.py:0
@@ -781,6 +852,11 @@ msgid ""
781
852
  "in the release channel configuration"
782
853
  msgstr ""
783
854
 
855
+ #. module: stock_release_channel
856
+ #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
857
+ msgid "collect pickings"
858
+ msgstr ""
859
+
784
860
  #. module: stock_release_channel
785
861
  #: model_terms:ir.ui.view,arch_db:stock_release_channel.stock_release_channel_kanban_view
786
862
  msgid "state"
@@ -0,0 +1,12 @@
1
+ # Copyright 2025 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
2
+
3
+ from openupgradelib import openupgrade
4
+
5
+
6
+ @openupgrade.migrate()
7
+ def migrate(env, version):
8
+ env["stock.release.channel"].search(
9
+ [
10
+ ("state", "in", ("open", "locked")),
11
+ ]
12
+ ).collect_pickings = True
@@ -0,0 +1,21 @@
1
+ # Copyright 2025 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
2
+
3
+ from odoo.tools.sql import column_exists
4
+
5
+
6
+ def migrate(cr, version):
7
+ if not column_exists(
8
+ cr, "stock_release_channel", "recompute_channel_on_pickings_at_release"
9
+ ) and column_exists(cr, "res_company", "recompute_channel_on_pickings_at_release"):
10
+ cr.execute(
11
+ """
12
+ ALTER TABLE stock_release_channel ADD COLUMN
13
+ recompute_channel_on_pickings_at_release boolean;
14
+
15
+ UPDATE stock_release_channel
16
+ SET recompute_channel_on_pickings_at_release =
17
+ res_company.recompute_channel_on_pickings_at_release
18
+ FROM res_company
19
+ WHERE res_company.id = stock_release_channel.company_id;
20
+ """
21
+ )
@@ -12,7 +12,3 @@ class ResCompany(models.Model):
12
12
  help="In release channels dashboard, add link to last done picking "
13
13
  "and show transfer date",
14
14
  )
15
- recompute_channel_on_pickings_at_release = fields.Boolean(
16
- help="When releasing a transfer, recompute channel",
17
- default=True,
18
- )
@@ -11,7 +11,3 @@ class ResConfigSettings(models.TransientModel):
11
11
  related="company_id.release_channel_show_last_picking_done",
12
12
  readonly=False,
13
13
  )
14
- recompute_channel_on_pickings_at_release = fields.Boolean(
15
- related="company_id.recompute_channel_on_pickings_at_release",
16
- readonly=False,
17
- )
@@ -2,10 +2,8 @@
2
2
  # Copyright 2022 Jacques-Etienne Baudoux (BCIM) <je@bcim.be>
3
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html)
4
4
 
5
- from operator import itemgetter
6
5
 
7
6
  from odoo import models
8
- from odoo.tools import groupby
9
7
 
10
8
 
11
9
  class StockMove(models.Model):
@@ -19,10 +17,9 @@ class StockMove(models.Model):
19
17
  # As moves can be merged (and then unlinked), we should ensure
20
18
  # they still exist.
21
19
  moves = self.exists()
22
- for company, imoves in groupby(moves, key=itemgetter("company_id")):
23
- if company.recompute_channel_on_pickings_at_release:
24
- moves = self.env["stock.move"].concat(*imoves)
25
- moves.picking_id.assign_release_channel()
20
+ for picking in moves.picking_id:
21
+ if picking.release_channel_id.recompute_channel_on_pickings_at_release:
22
+ picking.assign_release_channel()
26
23
  return res
27
24
 
28
25
  def _unreleased_to_backorder(self, split_order=False):
@@ -153,8 +153,7 @@ class StockPicking(models.Model):
153
153
  self.ensure_one()
154
154
  domain_base = self._release_channel_possible_candidate_domain_base
155
155
  domain = [
156
- ("is_manual_assignment", "=", False),
157
- ("state", "in", ("open", "locked")),
156
+ ("collect_pickings", "=", True),
158
157
  "|",
159
158
  ("picking_type_ids", "=", False),
160
159
  ("picking_type_ids", "in", self.picking_type_id.ids),
@@ -51,6 +51,12 @@ class StockReleaseChannel(models.Model):
51
51
 
52
52
  name = fields.Char(required=True)
53
53
  release_forbidden = fields.Boolean(string="Forbid to release this channel")
54
+ recompute_channel_on_pickings_at_release = fields.Boolean(
55
+ help="When releasing a transfer, recompute the channel. Be carefull "
56
+ "when using this in conjuction with channel lifecycle (stop/start "
57
+ "collecting, sleep/wake up) as a delivery could be kicked out of a "
58
+ "channel if you stop collecting and recompute after release",
59
+ )
54
60
  sequence = fields.Integer(default=lambda self: self._default_sequence())
55
61
  color = fields.Integer()
56
62
  company_id = fields.Many2one(
@@ -202,13 +208,16 @@ class StockReleaseChannel(models.Model):
202
208
  )
203
209
  last_done_picking_name = fields.Char(compute="_compute_last_done_picking")
204
210
  last_done_picking_date_done = fields.Datetime(compute="_compute_last_done_picking")
211
+ collect_pickings = fields.Boolean(
212
+ compute="_compute_collect_pickings",
213
+ store=True,
214
+ help="Allows you to control if pickings are assigned to the release channel.",
215
+ )
205
216
  state = fields.Selection(
206
217
  selection=[("open", "Open"), ("locked", "Locked"), ("asleep", "Asleep")],
207
218
  help="The state allows you to control the availability of the release channel."
208
- "\n * Open: Manual and automatic picking assignment to the release is effective"
209
- " and release operations are allowed.\n"
210
- "* Locked: Release operations are forbidden. (Assignement processes are "
211
- "still working)\n"
219
+ "\n * Open: Release operations are allowed.\n"
220
+ "* Locked: Release operations are forbidden.\n"
212
221
  "* Asleep: Assigned pickings not processed are unassigned from the release "
213
222
  "channel.\n",
214
223
  default="asleep",
@@ -227,6 +236,14 @@ class StockReleaseChannel(models.Model):
227
236
  compute="_compute_is_action_unlock_allowed",
228
237
  help="Technical field to check if the " "action 'Unlock' is allowed.",
229
238
  )
239
+ is_action_collect_restart_allowed = fields.Boolean(
240
+ compute="_compute_is_action_collect_restart_allowed",
241
+ help="Technical field to check if the " "action 'Collect Restart' is allowed.",
242
+ )
243
+ is_action_collect_stop_allowed = fields.Boolean(
244
+ compute="_compute_is_action_collect_stop_allowed",
245
+ help="Technical field to check if the " "action 'Collect Stop' is allowed.",
246
+ )
230
247
  is_action_sleep_allowed = fields.Boolean(
231
248
  compute="_compute_is_action_sleep_allowed",
232
249
  help="Technical field to check if the " "action 'Sleep' is allowed.",
@@ -255,6 +272,32 @@ class StockReleaseChannel(models.Model):
255
272
  )
256
273
  is_manual_assignment = fields.Boolean("Manual assignment")
257
274
 
275
+ @property
276
+ def _valid_states_for_collect_pickings(self):
277
+ return ("open", "locked")
278
+
279
+ @api.depends("state", "is_manual_assignment")
280
+ def _compute_collect_pickings(self):
281
+ for rec in self:
282
+ if (
283
+ rec.state not in rec._valid_states_for_collect_pickings
284
+ or rec.is_manual_assignment
285
+ ):
286
+ rec.collect_pickings = False
287
+
288
+ @api.constrains("collect_pickings")
289
+ def _check_collect_pickings(self):
290
+ for rec in self:
291
+ if rec.collect_pickings:
292
+ if rec.state not in rec._valid_states_for_collect_pickings:
293
+ raise exceptions.ValidationError(
294
+ self.env._("You cannot collect pickings with current state!")
295
+ )
296
+ if rec.is_manual_assignment:
297
+ raise exceptions.ValidationError(
298
+ self.env._("This channel is restricted for manual assignment!")
299
+ )
300
+
258
301
  @api.depends("state")
259
302
  def _compute_is_action_lock_allowed(self):
260
303
  for rec in self:
@@ -265,6 +308,20 @@ class StockReleaseChannel(models.Model):
265
308
  for rec in self:
266
309
  rec.is_action_unlock_allowed = rec.state == "locked"
267
310
 
311
+ @api.depends("state")
312
+ def _compute_is_action_collect_restart_allowed(self):
313
+ for rec in self:
314
+ rec.is_action_collect_restart_allowed = (
315
+ not rec.collect_pickings
316
+ and rec.state in rec._valid_states_for_collect_pickings
317
+ and not rec.is_manual_assignment
318
+ )
319
+
320
+ @api.depends("state")
321
+ def _compute_is_action_collect_stop_allowed(self):
322
+ for rec in self:
323
+ rec.is_action_collect_stop_allowed = rec.collect_pickings
324
+
268
325
  @api.depends("state")
269
326
  def _compute_is_action_sleep_allowed(self):
270
327
  for rec in self:
@@ -878,6 +935,26 @@ class StockReleaseChannel(models.Model):
878
935
  )
879
936
  )
880
937
 
938
+ def _check_is_action_collect_restart_allowed(self):
939
+ for rec in self:
940
+ if not rec.is_action_collect_restart_allowed:
941
+ raise exceptions.UserError(
942
+ self.env._(
943
+ "Action 'Collect Restart' is not allowed for channel %(name)s.",
944
+ name=rec.name,
945
+ )
946
+ )
947
+
948
+ def _check_is_action_collect_stop_allowed(self):
949
+ for rec in self:
950
+ if not rec.is_action_collect_stop_allowed:
951
+ raise exceptions.UserError(
952
+ self.env._(
953
+ "Action 'Collect Stop' is not allowed for channel %(name)s.",
954
+ name=rec.name,
955
+ )
956
+ )
957
+
881
958
  def _check_is_action_sleep_allowed(self):
882
959
  for rec in self:
883
960
  if not rec.is_action_sleep_allowed:
@@ -906,6 +983,19 @@ class StockReleaseChannel(models.Model):
906
983
  self._check_is_action_unlock_allowed()
907
984
  self.write({"state": "open"})
908
985
 
986
+ def action_collect_restart(self):
987
+ self._check_is_action_collect_restart_allowed()
988
+ self.collect_pickings = True
989
+ self.assign_pickings()
990
+
991
+ def action_collect_stop(self):
992
+ self._check_is_action_collect_stop_allowed()
993
+ self.collect_pickings = False
994
+ in_need_release = self.picking_ids.filtered("need_release")
995
+ to_unassign = in_need_release.filtered(lambda p: not p.release_ready)
996
+ to_unassign.release_channel_id = False
997
+ to_unassign._delay_assign_release_channel()
998
+
909
999
  def action_sleep(self):
910
1000
  self._check_is_action_sleep_allowed()
911
1001
  pickings_to_unassign = self.env["stock.picking"].search(
@@ -913,13 +1003,23 @@ class StockReleaseChannel(models.Model):
913
1003
  )
914
1004
  pickings_to_unassign.write({"release_channel_id": False})
915
1005
  pickings_to_unassign.unrelease()
916
- self.write({"state": "asleep"})
1006
+ self.write(
1007
+ {
1008
+ "state": "asleep",
1009
+ "collect_pickings": False,
1010
+ }
1011
+ )
917
1012
  pickings_to_unassign._delay_assign_release_channel()
918
1013
 
919
1014
  def action_wake_up(self):
920
1015
  self._check_is_action_wake_up_allowed()
921
1016
  for rec in self:
922
- rec.state = rec.state_at_wakeup
1017
+ rec.write(
1018
+ {
1019
+ "state": rec.state_at_wakeup,
1020
+ "collect_pickings": True,
1021
+ }
1022
+ )
923
1023
  self.assign_pickings()
924
1024
 
925
1025
  @api.model
@@ -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:3096b2c65572f848cc55f06bbaa96516ab47c74f3c1b17fd161195cbc081d86d
375
+ !! source digest: sha256:80a2bf135f19dc957b0938eec220cfdd0dca964b6d6301b44fa69f1b7e56221b
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/stock-logistics-release-channel/tree/18.0/stock_release_channel"><img alt="OCA/stock-logistics-release-channel" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--release--channel-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-release-channel-18-0/stock-logistics-release-channel-18-0-stock_release_channel"><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-release-channel&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>Release channels are:</p>
@@ -116,7 +116,7 @@ class ReleaseChannelCase(common.TransactionCase):
116
116
  @classmethod
117
117
  def _create_channel(cls, **vals):
118
118
  # Forced update state of channel to "open"
119
- vals.update({"state": "open"})
119
+ vals.update({"state": "open", "collect_pickings": True})
120
120
  return cls.env["stock.release.channel"].create(vals)
121
121
 
122
122
  def _run_customer_procurement(self, date=None):
@@ -106,6 +106,7 @@ class TestReleaseChannel(ReleaseChannelCase):
106
106
  self.assertEqual(move.picking_id.release_channel_id.id, False)
107
107
  # Automatic Assignment
108
108
  self.default_channel.is_manual_assignment = False
109
+ self.default_channel.collect_pickings = True
109
110
  move = self._create_single_move(self.product1, 10)
110
111
  move.picking_id.assign_release_channel()
111
112
  self.assertEqual(move.picking_id.release_channel_id.id, self.default_channel.id)
@@ -121,11 +122,10 @@ class TestReleaseChannel(ReleaseChannelCase):
121
122
  move.picking_id.priority = "1" # To find new suitable channel for this picking
122
123
 
123
124
  # Test with recompute_channel_on_pickings_at_release = False
124
- self.env.company.recompute_channel_on_pickings_at_release = False
125
125
  move.release_available_to_promise()
126
126
  self.assertEqual(move.picking_id.release_channel_id, self.default_channel)
127
127
  # Test with recompute_channel_on_pickings_at_release = False
128
- self.env.company.recompute_channel_on_pickings_at_release = True
128
+ self.default_channel.recompute_channel_on_pickings_at_release = True
129
129
  move.release_available_to_promise()
130
130
  self.assertEqual(move.picking_id.release_channel_id, channel)
131
131
 
@@ -47,13 +47,53 @@ class TestReleaseChannelLifeCycle(ReleaseChannelCase):
47
47
  move.picking_id.assign_release_channel()
48
48
  self.assertEqual(move.picking_id.release_channel_id, self.default_channel)
49
49
  copy_channel = self.default_channel.copy(
50
- {"name": "channel copy", "state": "open"}
50
+ {"name": "channel copy", "state": "open", "collect_pickings": True}
51
51
  )
52
52
  with trap_jobs() as trap:
53
53
  self.default_channel.action_sleep()
54
54
  trap.perform_enqueued_jobs()
55
55
  self.assertEqual(move.picking_id.release_channel_id, copy_channel)
56
56
 
57
+ def test_release_channel_collect_stop_unassign(self):
58
+ move = self._create_single_move(self.product1, 10)
59
+ move.need_release = True
60
+ move.picking_id.release_channel_id = self.default_channel
61
+ self.assertTrue(self.default_channel.collect_pickings)
62
+ self.assertFalse(move.picking_id.release_ready)
63
+ with trap_jobs() as trap:
64
+ self.default_channel.action_collect_stop()
65
+ trap.assert_jobs_count(1)
66
+ trap.assert_enqueued_job(
67
+ move.picking_id.assign_release_channel,
68
+ args=(),
69
+ kwargs={},
70
+ properties=dict(
71
+ identity_key=identity_exact,
72
+ ),
73
+ )
74
+ trap.enqueued_jobs[0].perform()
75
+ self.assertFalse(move.picking_id.release_channel_id)
76
+
77
+ def test_release_channel_collect_restart_assign(self):
78
+ self.default_channel.collect_pickings = False
79
+ move = self._create_single_move(self.product1, 10)
80
+ move.need_release = True
81
+ self.assertFalse(move.picking_id.release_channel_id)
82
+ with trap_jobs() as trap:
83
+ self.default_channel.action_collect_restart()
84
+ trap.assert_jobs_count(1)
85
+ trap.assert_enqueued_job(
86
+ move.picking_id.assign_release_channel,
87
+ args=(),
88
+ kwargs={},
89
+ properties=dict(
90
+ identity_key=identity_exact,
91
+ ),
92
+ )
93
+ trap.enqueued_jobs[0].perform()
94
+ self.assertTrue(self.default_channel.collect_pickings)
95
+ self.assertEqual(move.picking_id.release_channel_id, self.default_channel)
96
+
57
97
  def test_release_channel_wake_up_assign(self):
58
98
  self.default_channel.action_sleep()
59
99
  move = self._create_single_move(self.product1, 10)
@@ -17,13 +17,6 @@
17
17
  Show last delivery done in release channels dashboard
18
18
  </div>
19
19
  </setting>
20
-
21
- <setting name="recompute_channel_on_pickings_at_release">
22
- <field name="recompute_channel_on_pickings_at_release" />
23
- <div class="text-muted">
24
- Recompute channel when releasing a transfer
25
- </div>
26
- </setting>
27
20
  </xpath>
28
21
  </field>
29
22
  </record>
@@ -22,6 +22,22 @@
22
22
  icon="fa-unlock"
23
23
  invisible="not is_action_unlock_allowed"
24
24
  />
25
+ <button
26
+ name="action_collect_restart"
27
+ string="Restart Collecting"
28
+ type="object"
29
+ class="oe_stat_button"
30
+ icon="fa-hourglass-start"
31
+ invisible="not is_action_collect_restart_allowed"
32
+ />
33
+ <button
34
+ name="action_collect_stop"
35
+ string="Stop Collecting"
36
+ type="object"
37
+ class="oe_stat_button"
38
+ icon="fa-stop-circle"
39
+ invisible="not is_action_collect_stop_allowed"
40
+ />
25
41
  <button
26
42
  name="action_sleep"
27
43
  string="Sleep"
@@ -71,10 +87,12 @@
71
87
  bg_color="bg-danger"
72
88
  invisible="active"
73
89
  />
74
- <label for="name" class="oe_edit_only" />
75
- <h1>
76
- <field name="name" />
77
- </h1>
90
+ <div class="oe_title">
91
+ <label for="name" class="oe_edit_only" />
92
+ <h1>
93
+ <field name="name" />
94
+ </h1>
95
+ </div>
78
96
  <group>
79
97
  <field name="company_id" invisible="1" />
80
98
  <field
@@ -92,6 +110,9 @@
92
110
  <group name="options">
93
111
  <field name="state_at_wakeup" />
94
112
  <field name="release_forbidden" />
113
+ <field
114
+ name="recompute_channel_on_pickings_at_release"
115
+ />
95
116
  <field
96
117
  name="release_mode"
97
118
  invisible="release_forbidden"
@@ -246,7 +267,14 @@
246
267
  <field name="count_picking_chain" />
247
268
  <field name="show_last_picking_done" />
248
269
  <field name="state" />
270
+ <field name="collect_pickings" />
249
271
  <field name="is_release_allowed" />
272
+ <field name="is_action_lock_allowed" />
273
+ <field name="is_action_unlock_allowed" />
274
+ <field name="is_action_collect_restart_allowed" />
275
+ <field name="is_action_collect_stop_allowed" />
276
+ <field name="is_action_sleep_allowed" />
277
+ <field name="is_action_wake_up_allowed" />
250
278
  <templates>
251
279
  <t t-name="menu">
252
280
  <div class="container o_kanban_card_manage_pane">
@@ -254,22 +282,6 @@
254
282
  <div
255
283
  class="col-6 o_kanban_card_manage_section o_kanban_manage_view"
256
284
  >
257
- <field
258
- name="is_action_lock_allowed"
259
- invisible="1"
260
- />
261
- <field
262
- name="is_action_unlock_allowed"
263
- invisible="1"
264
- />
265
- <field
266
- name="is_action_sleep_allowed"
267
- invisible="1"
268
- />
269
- <field
270
- name="is_action_wake_up_allowed"
271
- invisible="1"
272
- />
273
285
  <div
274
286
  role="menuitem"
275
287
  class="o_kanban_card_manage_title"
@@ -298,6 +310,36 @@
298
310
  </a>
299
311
  </div>
300
312
  </t>
313
+ <t
314
+ t-if="record.is_action_collect_restart_allowed.raw_value"
315
+ >
316
+ <div role="menuitem">
317
+ <a
318
+ name="action_collect_restart"
319
+ type="object"
320
+ icon="fa-hourglass-start"
321
+ >
322
+ <span
323
+ class="ms-2"
324
+ >Restart Collecting</span>
325
+ </a>
326
+ </div>
327
+ </t>
328
+ <t
329
+ t-if="record.is_action_collect_stop_allowed.raw_value"
330
+ >
331
+ <div role="menuitem">
332
+ <a
333
+ name="action_collect_stop"
334
+ type="object"
335
+ icon="fa-stop-circle"
336
+ >
337
+ <span
338
+ class="ms-2"
339
+ >Stop Collecting</span>
340
+ </a>
341
+ </div>
342
+ </t>
301
343
  <t t-if="record.is_action_sleep_allowed.raw_value">
302
344
  <div role="menuitem">
303
345
  <a
@@ -355,7 +397,12 @@
355
397
  <div class="o_kanban_card_header_title">
356
398
  <div class="o_primary">
357
399
  <field name="name" />
358
- <field name="state" invisible="1" />
400
+ <i
401
+ t-attf-class="fa {{ record.collect_pickings.raw_value and 'fa-hourglass-start' or 'fa-stop-circle' }}"
402
+ role="img"
403
+ title="collect pickings"
404
+ style="float: right; margin-right: 14px; line-height: 24px"
405
+ />
359
406
  <t
360
407
  t-set="classname"
361
408
  t-value="{'open': 'fa fa-unlock', 'locked': 'fa fa-lock', 'asleep': 'fa fa-bed'}[record.state.raw_value] || ''"
@@ -364,7 +411,7 @@
364
411
  t-attf-class="{{ classname }}"
365
412
  role="img"
366
413
  title="state"
367
- style="float: right; margin-right: 14px; line-height: 24px"
414
+ style="float: right; margin-right: 8px; line-height: 24px"
368
415
  />
369
416
  </div>
370
417
  </div>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-stock_release_channel
3
- Version: 18.0.1.3.1
3
+ Version: 18.0.1.4.0.3
4
4
  Requires-Python: >=3.10
5
5
  Requires-Dist: odoo-addon-queue_job==18.0.*
6
6
  Requires-Dist: odoo-addon-stock_available_to_promise_release==18.0.*
@@ -30,7 +30,7 @@ Stock Release Channels
30
30
  !! This file is generated by oca-gen-addon-readme !!
31
31
  !! changes will be overwritten. !!
32
32
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
33
- !! source digest: sha256:3096b2c65572f848cc55f06bbaa96516ab47c74f3c1b17fd161195cbc081d86d
33
+ !! source digest: sha256:80a2bf135f19dc957b0938eec220cfdd0dca964b6d6301b44fa69f1b7e56221b
34
34
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
35
35
 
36
36
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -1,20 +1,22 @@
1
- odoo/addons/stock_release_channel/README.rst,sha256=o7nRbou_WjT4LDH5Z0XbQvdDt9c4yJm5s7QPtW_x2ek,6873
1
+ odoo/addons/stock_release_channel/README.rst,sha256=BYB8vrpo-bSPjCUMf1jLzH2V--X8kIJGOs0n1ORreCI,6873
2
2
  odoo/addons/stock_release_channel/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
3
- odoo/addons/stock_release_channel/__manifest__.py,sha256=5w5lhnTTTA5iDZN22O5I0VXj5I-s6T_XYIv6qI6qI_E,1351
3
+ odoo/addons/stock_release_channel/__manifest__.py,sha256=dCyLhZxalPlV1c6XX57-dUgH-f0hTpOgVgywMcvrs4c,1351
4
4
  odoo/addons/stock_release_channel/data/ir_cron_data.xml,sha256=XILvZIvmn14uZApFNSzzhtzI-M45fV711k5e9D0iN2g,593
5
5
  odoo/addons/stock_release_channel/data/queue_job_data.xml,sha256=brhyhM8YU_TKfSumeJtiGw_CxdQzm4H2tnZUJo3ze04,590
6
- odoo/addons/stock_release_channel/demo/stock_release_channel.xml,sha256=mFDJ2j1nbmAOGbQwFFbT0xrAjW8n893R2MdXTyNhL2c,332
6
+ odoo/addons/stock_release_channel/demo/stock_release_channel.xml,sha256=VXdDHaET-4TatxkrecPkUT7PClwk9qxooqFfPR27uNE,386
7
7
  odoo/addons/stock_release_channel/i18n/es.po,sha256=ebdLkZQ5eRYyxpPxK_sOTep0SBvGtWCBVEbwEs-F1G8,34138
8
8
  odoo/addons/stock_release_channel/i18n/fr.po,sha256=N_QnOAR7Pm6sAuI-aUvO8qnHNOjaduLuMZoLm1KiIVc,29711
9
9
  odoo/addons/stock_release_channel/i18n/it.po,sha256=aIDRijhem5Uj_zNq7Jyo4Q-PYRQ3n30oWjsFPoLGook,36455
10
- odoo/addons/stock_release_channel/i18n/stock_release_channel.pot,sha256=rKLaeO3V8HIWf7F9ABwBZxenh19JXwtiYIOp8Lvtruo,28332
10
+ odoo/addons/stock_release_channel/i18n/stock_release_channel.pot,sha256=bA5t76G9jRXjdeOSELEjZo4mMJnUHZeUQzii3e85x9w,30936
11
+ odoo/addons/stock_release_channel/migrations/18.0.1.4.0/post-migration.py,sha256=SA60inrzds8Oid9I0y2Hkc5Fj6f7I5VQDqEZWV3Vjfg,293
12
+ odoo/addons/stock_release_channel/migrations/18.0.1.4.0/pre-migration.py,sha256=Af3jj-DN6jmQDS9T7R_lTjb3FzuBIjDCYgWBkbdng1g,770
11
13
  odoo/addons/stock_release_channel/models/__init__.py,sha256=7bzf3wef0yG6SnmE67xQwGn1EM4phSOfm0o4t8k6-oU,175
12
- odoo/addons/stock_release_channel/models/res_company.py,sha256=Vj27CcrLlr8vsgMelp9ix5z8IkJYhfEb7FBdO23r2VI,616
13
- odoo/addons/stock_release_channel/models/res_config_settings.py,sha256=-oh2L7FWf60ACuqY5ojgRvlrqNBr9XXMCd78XVN_w9c,571
14
+ odoo/addons/stock_release_channel/models/res_company.py,sha256=UCNi7oLr0v00vlyoUUlYqarl6Py2sEHAVhsvCA1fjtw,464
15
+ odoo/addons/stock_release_channel/models/res_config_settings.py,sha256=vz4o-cSDoZXXZdLlC8mitXkExKazHtvLrUrqnEHNEcg,407
14
16
  odoo/addons/stock_release_channel/models/res_partner.py,sha256=P4gpRYE8euQzk7TuOPwCp-pvJfMUfVzZqwR5B7oe1Fk,877
15
- odoo/addons/stock_release_channel/models/stock_move.py,sha256=_keLrID94QyNfS1CxxWOF1ym8o9sEgUfPNQ1clL855Y,2127
16
- odoo/addons/stock_release_channel/models/stock_picking.py,sha256=e2zuh9XisKk_7arlOlg-bqyNDyql-g7O8RId8uzJjY0,8375
17
- odoo/addons/stock_release_channel/models/stock_release_channel.py,sha256=5ADIjauYeyVCHCivCl3wum8K0_vnNBA1Cv4OG4zbZMg,39682
17
+ odoo/addons/stock_release_channel/models/stock_move.py,sha256=WPAYPbfY2vXC2p4lS9R4VTkd2m1PKJ5J4x7yhAZZaOg,1975
18
+ odoo/addons/stock_release_channel/models/stock_picking.py,sha256=uhgZveV8Kp59JmWmK-oC4CZz7_Fam9MvzdROl1gO1ws,8321
19
+ odoo/addons/stock_release_channel/models/stock_release_channel.py,sha256=KN1U2asMG8NMp3Z1pKWVmQCLTBZkd4Y8qnLbyaQRnAA,43558
18
20
  odoo/addons/stock_release_channel/readme/CONFIGURE.md,sha256=0I_Dh2FtDqoO6y0tHxjwnY5j5SEeGK7_xjURpODgWSg,95
19
21
  odoo/addons/stock_release_channel/readme/CONTRIBUTORS.md,sha256=xrrJ3yIkmq6TyzXgi_Uu_C5WhkBmYPMgh46h9kuyCDg,426
20
22
  odoo/addons/stock_release_channel/readme/CREDITS.md,sha256=Q-HpCW3wq96Eb9WSup9SZYdgfKNTKnwMcOgCzALQ7jE,50
@@ -22,27 +24,27 @@ odoo/addons/stock_release_channel/readme/DESCRIPTION.md,sha256=fxYLZyWH-ndmc1VGz
22
24
  odoo/addons/stock_release_channel/readme/USAGE.md,sha256=EQWkBSmQwzakAkciBlkSek32TTkSVDSNRG1pRg7cB84,1600
23
25
  odoo/addons/stock_release_channel/security/stock_release_channel.xml,sha256=tSwRdeAVTiScbTCMLOiCJNbYcywepNPZy9rRv2b1SoY,1469
24
26
  odoo/addons/stock_release_channel/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
25
- odoo/addons/stock_release_channel/static/description/index.html,sha256=POedu3ut-lgKaRzO1LUM3rgXsERTZcWgseQd6kCVt7U,17933
27
+ odoo/addons/stock_release_channel/static/description/index.html,sha256=JU5DY70c7Pzh79mCzzKIOlyXPOBDBOE1mDes7vG29xI,17933
26
28
  odoo/addons/stock_release_channel/static/src/js/progressbar_fractional_widget.esm.js,sha256=GNoV3ZbDZXTLxRTyKkp0jwRL99Dr2EgH3TNuBWW80u0,1859
27
29
  odoo/addons/stock_release_channel/static/src/scss/stock_release_channel.scss,sha256=TvyOGHzF7XuxZlTPBmf4aUj3b_quOHPFalpZ0LW5vfM,977
28
30
  odoo/addons/stock_release_channel/tests/__init__.py,sha256=GKpdQIuWCHiN-e1yatgmy07kzgmlrXm8M66uTWfUjIk,266
29
- odoo/addons/stock_release_channel/tests/common.py,sha256=0o79MEowUitiyyBxWbw45OjxLX8wPySlR-qrO5uvAOs,8756
31
+ odoo/addons/stock_release_channel/tests/common.py,sha256=NbZupGOnmLCN10Bn6xtplRxypckDw9Hy0KaQRZ95ow8,8782
30
32
  odoo/addons/stock_release_channel/tests/test_assign_job.py,sha256=KCs3Bqa--ACosJXbK48YMlIeoLPQ9vMNgJ97MlHpr4w,2663
31
33
  odoo/addons/stock_release_channel/tests/test_channel_action.py,sha256=dtaYBCAOyNGyGWpDWDAAxVUgSWXNqR-AznKAq3iOLAI,5466
32
34
  odoo/addons/stock_release_channel/tests/test_channel_computed_fields.py,sha256=TbVkrpn5Sq6nt-QRQEi2OisjkwUuvwPJ75a0V77FsM0,4725
33
35
  odoo/addons/stock_release_channel/tests/test_channel_release_batch.py,sha256=nvLf6TqcnhaA78gSpmK7Pb9unqxTm0RnY4f1QcqFlkY,2247
34
- odoo/addons/stock_release_channel/tests/test_release_channel.py,sha256=jt1gnc9ZBh5FiwQ6rgr3YXXUYQVmNXKkRafh-zTqMFI,6478
36
+ odoo/addons/stock_release_channel/tests/test_release_channel.py,sha256=ZgQQJPcdVLEJn4LkKUMT6aJKz3H4p3dfg0Ac1HJZOC8,6461
35
37
  odoo/addons/stock_release_channel/tests/test_release_channel_delivery_date.py,sha256=VDfkf61KxMRuv3k0rGvrCuLz2Nux3dmK01Tmz6nNbSI,2039
36
- odoo/addons/stock_release_channel/tests/test_release_channel_lifecycle.py,sha256=hCtjqWMgLorYhdnzB8lp3ksmC3qTBrrVVtEMuifrVvE,4455
38
+ odoo/addons/stock_release_channel/tests/test_release_channel_lifecycle.py,sha256=up4P1W_BZT50fs9nNseTKjl02mYox0QR4p9OhDSPDzc,6158
37
39
  odoo/addons/stock_release_channel/tests/test_release_channel_partner.py,sha256=jMdMJRZ1UR6z6diA-DxRmHm-AN01J0YFEa1d9KqctPk,3471
38
40
  odoo/addons/stock_release_channel/tests/models/__init__.py,sha256=O2PABMBnRskr9BvR4dVDAJBQQUSH8B1Y5sVZAvWOYlQ,29
39
41
  odoo/addons/stock_release_channel/tests/models/generator_test.py,sha256=ovDRsU1aPKED_17RCAUcFYvsvbUu-4A3HqM5dmwgkVU,1227
40
42
  odoo/addons/stock_release_channel/tests/models/generator_test_impossible.py,sha256=83LPISkxFBQ1OTUlaBrT3mQxa-sBoooNDqXjlP33TG8,1062
41
- odoo/addons/stock_release_channel/views/res_config_settings.xml,sha256=ehTEpYyfEiyg0KPmU0gjMVhC_3zfW3MFDsY6ADnZYc4,1229
43
+ odoo/addons/stock_release_channel/views/res_config_settings.xml,sha256=mymVqAYtpmvR_KGJjpr5AllAk9xPzzt4yOR3dPeJcrs,909
42
44
  odoo/addons/stock_release_channel/views/res_partner.xml,sha256=01rh7UBBsNqDokHzXsPt7rZKtpT03YKy-e8DHctdbZI,993
43
45
  odoo/addons/stock_release_channel/views/stock_picking_views.xml,sha256=LesPS6bpRomZBpXX84b7ehO5cQvz-DuK6UF73nu1FLA,2963
44
- odoo/addons/stock_release_channel/views/stock_release_channel_views.xml,sha256=X2IzTo2VmYJR0K1in2fv2WHeczqaMyhNuRkSJIU24d8,46532
45
- odoo_addon_stock_release_channel-18.0.1.3.1.dist-info/METADATA,sha256=G1AP0a4j0mQJ_9xjfq-ju6ggOVhkYTy9s60ciOhAOT4,7637
46
- odoo_addon_stock_release_channel-18.0.1.3.1.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
47
- odoo_addon_stock_release_channel-18.0.1.3.1.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
48
- odoo_addon_stock_release_channel-18.0.1.3.1.dist-info/RECORD,,
46
+ odoo/addons/stock_release_channel/views/stock_release_channel_views.xml,sha256=V9q8cz4k8kITn3cpKuBaSjrB46-P3mtuTP8xXhXc5FU,49216
47
+ odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info/METADATA,sha256=vylFz58b9XbXRXTBlEVKgOpqTshwyCF0ahCdoULrzsg,7639
48
+ odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info/WHEEL,sha256=ZhOvUsYhy81Dx67gN3TV0RchQWBIIzutDZaJODDg2Vo,81
49
+ odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info/top_level.txt,sha256=QE6RBQ0QX5f4eFuUcGgU5Kbq1A_qJcDs-e_vpr6pmfU,4
50
+ odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info/RECORD,,