odoo-addon-stock-release-channel 18.0.1.3.2__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.
- odoo/addons/stock_release_channel/README.rst +1 -1
- odoo/addons/stock_release_channel/__manifest__.py +1 -1
- odoo/addons/stock_release_channel/demo/stock_release_channel.xml +1 -0
- odoo/addons/stock_release_channel/i18n/stock_release_channel.pot +88 -12
- odoo/addons/stock_release_channel/migrations/18.0.1.4.0/post-migration.py +12 -0
- odoo/addons/stock_release_channel/migrations/18.0.1.4.0/pre-migration.py +21 -0
- odoo/addons/stock_release_channel/models/res_company.py +0 -4
- odoo/addons/stock_release_channel/models/res_config_settings.py +0 -4
- odoo/addons/stock_release_channel/models/stock_move.py +3 -6
- odoo/addons/stock_release_channel/models/stock_picking.py +1 -2
- odoo/addons/stock_release_channel/models/stock_release_channel.py +106 -6
- odoo/addons/stock_release_channel/static/description/index.html +1 -1
- odoo/addons/stock_release_channel/tests/common.py +1 -1
- odoo/addons/stock_release_channel/tests/test_release_channel.py +2 -2
- odoo/addons/stock_release_channel/tests/test_release_channel_lifecycle.py +41 -1
- odoo/addons/stock_release_channel/views/res_config_settings.xml +0 -7
- odoo/addons/stock_release_channel/views/stock_release_channel_views.xml +63 -18
- {odoo_addon_stock_release_channel-18.0.1.3.2.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/METADATA +2 -2
- {odoo_addon_stock_release_channel-18.0.1.3.2.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/RECORD +21 -19
- {odoo_addon_stock_release_channel-18.0.1.3.2.dist-info → odoo_addon_stock_release_channel-18.0.1.4.0.3.dist-info}/WHEEL +0 -0
- {odoo_addon_stock_release_channel-18.0.1.3.2.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:
|
|
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.
|
|
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)",
|
|
@@ -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.
|
|
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:
|
|
668
|
-
"* Locked: Release operations are forbidden
|
|
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.
|
|
767
|
-
|
|
768
|
-
|
|
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
|
|
23
|
-
if
|
|
24
|
-
|
|
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
|
-
("
|
|
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:
|
|
209
|
-
"
|
|
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(
|
|
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.
|
|
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:
|
|
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&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.
|
|
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"
|
|
@@ -94,6 +110,9 @@
|
|
|
94
110
|
<group name="options">
|
|
95
111
|
<field name="state_at_wakeup" />
|
|
96
112
|
<field name="release_forbidden" />
|
|
113
|
+
<field
|
|
114
|
+
name="recompute_channel_on_pickings_at_release"
|
|
115
|
+
/>
|
|
97
116
|
<field
|
|
98
117
|
name="release_mode"
|
|
99
118
|
invisible="release_forbidden"
|
|
@@ -248,7 +267,14 @@
|
|
|
248
267
|
<field name="count_picking_chain" />
|
|
249
268
|
<field name="show_last_picking_done" />
|
|
250
269
|
<field name="state" />
|
|
270
|
+
<field name="collect_pickings" />
|
|
251
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" />
|
|
252
278
|
<templates>
|
|
253
279
|
<t t-name="menu">
|
|
254
280
|
<div class="container o_kanban_card_manage_pane">
|
|
@@ -256,22 +282,6 @@
|
|
|
256
282
|
<div
|
|
257
283
|
class="col-6 o_kanban_card_manage_section o_kanban_manage_view"
|
|
258
284
|
>
|
|
259
|
-
<field
|
|
260
|
-
name="is_action_lock_allowed"
|
|
261
|
-
invisible="1"
|
|
262
|
-
/>
|
|
263
|
-
<field
|
|
264
|
-
name="is_action_unlock_allowed"
|
|
265
|
-
invisible="1"
|
|
266
|
-
/>
|
|
267
|
-
<field
|
|
268
|
-
name="is_action_sleep_allowed"
|
|
269
|
-
invisible="1"
|
|
270
|
-
/>
|
|
271
|
-
<field
|
|
272
|
-
name="is_action_wake_up_allowed"
|
|
273
|
-
invisible="1"
|
|
274
|
-
/>
|
|
275
285
|
<div
|
|
276
286
|
role="menuitem"
|
|
277
287
|
class="o_kanban_card_manage_title"
|
|
@@ -300,6 +310,36 @@
|
|
|
300
310
|
</a>
|
|
301
311
|
</div>
|
|
302
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>
|
|
303
343
|
<t t-if="record.is_action_sleep_allowed.raw_value">
|
|
304
344
|
<div role="menuitem">
|
|
305
345
|
<a
|
|
@@ -357,7 +397,12 @@
|
|
|
357
397
|
<div class="o_kanban_card_header_title">
|
|
358
398
|
<div class="o_primary">
|
|
359
399
|
<field name="name" />
|
|
360
|
-
<
|
|
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
|
+
/>
|
|
361
406
|
<t
|
|
362
407
|
t-set="classname"
|
|
363
408
|
t-value="{'open': 'fa fa-unlock', 'locked': 'fa fa-lock', 'asleep': 'fa fa-bed'}[record.state.raw_value] || ''"
|
|
@@ -366,7 +411,7 @@
|
|
|
366
411
|
t-attf-class="{{ classname }}"
|
|
367
412
|
role="img"
|
|
368
413
|
title="state"
|
|
369
|
-
style="float: right; margin-right:
|
|
414
|
+
style="float: right; margin-right: 8px; line-height: 24px"
|
|
370
415
|
/>
|
|
371
416
|
</div>
|
|
372
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
|
|
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:
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
13
|
-
odoo/addons/stock_release_channel/models/res_config_settings.py,sha256
|
|
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=
|
|
16
|
-
odoo/addons/stock_release_channel/models/stock_picking.py,sha256=
|
|
17
|
-
odoo/addons/stock_release_channel/models/stock_release_channel.py,sha256=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
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=
|
|
45
|
-
odoo_addon_stock_release_channel-18.0.1.3.
|
|
46
|
-
odoo_addon_stock_release_channel-18.0.1.3.
|
|
47
|
-
odoo_addon_stock_release_channel-18.0.1.3.
|
|
48
|
-
odoo_addon_stock_release_channel-18.0.1.3.
|
|
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,,
|
|
File without changes
|