odoo-addon-shipment-advice 16.0.1.5.0__py3-none-any.whl → 16.0.1.6.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (27) hide show
  1. odoo/addons/shipment_advice/README.rst +2 -1
  2. odoo/addons/shipment_advice/__manifest__.py +1 -1
  3. odoo/addons/shipment_advice/i18n/shipment_advice.pot +32 -0
  4. odoo/addons/shipment_advice/models/res_company.py +9 -0
  5. odoo/addons/shipment_advice/models/res_config_settings.py +4 -0
  6. odoo/addons/shipment_advice/models/shipment_advice.py +29 -5
  7. odoo/addons/shipment_advice/models/stock_move.py +17 -0
  8. odoo/addons/shipment_advice/models/stock_picking.py +9 -0
  9. odoo/addons/shipment_advice/readme/CONTRIBUTORS.rst +1 -0
  10. odoo/addons/shipment_advice/static/description/index.html +2 -1
  11. odoo/addons/shipment_advice/tests/__init__.py +2 -0
  12. odoo/addons/shipment_advice/tests/common.py +50 -16
  13. odoo/addons/shipment_advice/tests/test_shipment_advice.py +17 -13
  14. odoo/addons/shipment_advice/tests/test_shipment_advice_async.py +15 -15
  15. odoo/addons/shipment_advice/tests/test_shipment_advice_auto_close.py +46 -0
  16. odoo/addons/shipment_advice/tests/test_shipment_advice_load.py +13 -13
  17. odoo/addons/shipment_advice/tests/test_shipment_advice_picking_values.py +20 -0
  18. odoo/addons/shipment_advice/tests/test_shipment_advice_plan.py +2 -2
  19. odoo/addons/shipment_advice/tests/test_shipment_advice_stock_user.py +3 -3
  20. odoo/addons/shipment_advice/tests/test_shipment_advice_unload.py +8 -8
  21. odoo/addons/shipment_advice/views/res_config_settings.xml +18 -0
  22. odoo/addons/shipment_advice/views/shipment_advice.xml +4 -1
  23. odoo/addons/shipment_advice/views/stock_picking.xml +1 -0
  24. {odoo_addon_shipment_advice-16.0.1.5.0.dist-info → odoo_addon_shipment_advice-16.0.1.6.0.dist-info}/METADATA +6 -5
  25. {odoo_addon_shipment_advice-16.0.1.5.0.dist-info → odoo_addon_shipment_advice-16.0.1.6.0.dist-info}/RECORD +27 -25
  26. {odoo_addon_shipment_advice-16.0.1.5.0.dist-info → odoo_addon_shipment_advice-16.0.1.6.0.dist-info}/WHEEL +1 -1
  27. {odoo_addon_shipment_advice-16.0.1.5.0.dist-info → odoo_addon_shipment_advice-16.0.1.6.0.dist-info}/top_level.txt +0 -0
@@ -7,7 +7,7 @@ Shipment Advice
7
7
  !! This file is generated by oca-gen-addon-readme !!
8
8
  !! changes will be overwritten. !!
9
9
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
10
- !! source digest: sha256:60951d59c7ca7c14de9a7e490200a900d1aec0483212ef3f936e724c5f06e98a
10
+ !! source digest: sha256:34e6a179b9a0304d4d12e6a1ec5e161d7ad127fec1463f2061c083e562a5f789
11
11
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
12
12
 
13
13
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -61,6 +61,7 @@ Contributors
61
61
  * Simone Orsi <simahawk@gmail.com>
62
62
  * `Trobz <https://trobz.com>`_:
63
63
  * Dung Tran <dungtd@trobz.com>
64
+ * Michael Tietz (MT Software) <mtietz@mt-software.de>
64
65
 
65
66
  Design
66
67
  ~~~~~~
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "name": "Shipment Advice",
6
6
  "summary": "Manage your (un)loading process through shipment advices.",
7
- "version": "16.0.1.5.0",
7
+ "version": "16.0.1.6.0",
8
8
  "author": "Camptocamp, Odoo Community Association (OCA)",
9
9
  "website": "https://github.com/OCA/stock-logistics-transport",
10
10
  "category": "Warehouse Management",
@@ -973,6 +973,12 @@ msgstr ""
973
973
  msgid "Shipment Advice"
974
974
  msgstr ""
975
975
 
976
+ #. module: shipment_advice
977
+ #: model:ir.model.fields,field_description:shipment_advice.field_res_company__shipment_advice_auto_close_incoming
978
+ #: model:ir.model.fields,field_description:shipment_advice.field_res_config_settings__shipment_advice_auto_close_incoming
979
+ msgid "Shipment Advice: Auto Close Incoming Advices"
980
+ msgstr ""
981
+
976
982
  #. module: shipment_advice
977
983
  #: model:ir.model.fields,field_description:shipment_advice.field_res_company__shipment_advice_outgoing_backorder_policy
978
984
  #: model:ir.model.fields,field_description:shipment_advice.field_res_config_settings__shipment_advice_outgoing_backorder_policy
@@ -1068,6 +1074,22 @@ msgstr ""
1068
1074
  msgid "This Week"
1069
1075
  msgstr ""
1070
1076
 
1077
+ #. module: shipment_advice
1078
+ #: model_terms:ir.ui.view,arch_db:shipment_advice.res_config_settings_view_form
1079
+ msgid ""
1080
+ "This flag indicates if an incoming shipment advice\n"
1081
+ " will be automatically set to done\n"
1082
+ " if all related moves are done or canceled"
1083
+ msgstr ""
1084
+
1085
+ #. module: shipment_advice
1086
+ #: model:ir.model.fields,help:shipment_advice.field_res_company__shipment_advice_auto_close_incoming
1087
+ #: model:ir.model.fields,help:shipment_advice.field_res_config_settings__shipment_advice_auto_close_incoming
1088
+ msgid ""
1089
+ "This flag indicates if an incoming shipment advice will be automatically set"
1090
+ " to done if all related moves are done or canceled"
1091
+ msgstr ""
1092
+
1071
1093
  #. module: shipment_advice
1072
1094
  #. odoo-python
1073
1095
  #: code:addons/shipment_advice/models/stock_move_line.py:0
@@ -1285,6 +1307,11 @@ msgstr ""
1285
1307
  msgid "Validate"
1286
1308
  msgstr ""
1287
1309
 
1310
+ #. module: shipment_advice
1311
+ #: model:ir.model.fields,field_description:shipment_advice.field_stock_picking__loaded_waiting_quantity
1312
+ msgid "Waiting Quantity"
1313
+ msgstr ""
1314
+
1288
1315
  #. module: shipment_advice
1289
1316
  #: model:ir.model.fields,field_description:shipment_advice.field_shipment_advice__warehouse_id
1290
1317
  #: model_terms:ir.ui.view,arch_db:shipment_advice.shipment_advice_view_search
@@ -1388,6 +1415,11 @@ msgid ""
1388
1415
  " content."
1389
1416
  msgstr ""
1390
1417
 
1418
+ #. module: shipment_advice
1419
+ #: model_terms:ir.ui.view,arch_db:shipment_advice.res_config_settings_view_form
1420
+ msgid "shipment_advice_auto_close_incoming"
1421
+ msgstr ""
1422
+
1391
1423
  #. module: shipment_advice
1392
1424
  #: model_terms:ir.ui.view,arch_db:shipment_advice.res_config_settings_view_form
1393
1425
  msgid "shipment_advice_run_in_queue_job"
@@ -1,4 +1,5 @@
1
1
  # Copyright 2021 Camptocamp SA
2
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
4
 
4
5
  from odoo import fields, models
@@ -29,3 +30,11 @@ class ResCompany(models.Model):
29
30
  "shipment advice validation through a queued jobs. Each picking will be "
30
31
  "validated in a separate job.",
31
32
  )
33
+ shipment_advice_auto_close_incoming = fields.Boolean(
34
+ string="Shipment Advice: Auto Close Incoming Advices",
35
+ help=(
36
+ "This flag indicates if an incoming shipment advice "
37
+ "will be automatically set to done "
38
+ "if all related moves are done or canceled"
39
+ ),
40
+ )
@@ -1,4 +1,5 @@
1
1
  # Copyright 2021 Camptocamp SA
2
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
4
 
4
5
  from odoo import fields, models
@@ -13,3 +14,6 @@ class ResConfigSettings(models.TransientModel):
13
14
  shipment_advice_run_in_queue_job = fields.Boolean(
14
15
  related="company_id.shipment_advice_run_in_queue_job", readonly=False
15
16
  )
17
+ shipment_advice_auto_close_incoming = fields.Boolean(
18
+ related="company_id.shipment_advice_auto_close_incoming", readonly=False
19
+ )
@@ -1,4 +1,5 @@
1
1
  # Copyright 2021 Camptocamp SA
2
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
4
 
4
5
  from odoo import _, api, fields, models
@@ -58,7 +59,6 @@ class ShipmentAdvice(models.Model):
58
59
  string="Type",
59
60
  default="outgoing",
60
61
  required=True,
61
- states={"draft": [("readonly", False)]},
62
62
  readonly=True,
63
63
  help="Use incoming to plan receptions, use outgoing for deliveries.",
64
64
  )
@@ -254,7 +254,7 @@ class ShipmentAdvice(models.Model):
254
254
 
255
255
  @api.model_create_multi
256
256
  def create(self, vals_list):
257
- defaults = self.default_get(["name"])
257
+ defaults = self.default_get(["name", "shipment_type"])
258
258
  outgoing_sequence = self.env.ref(
259
259
  "shipment_advice.shipment_advice_outgoing_sequence"
260
260
  )
@@ -263,7 +263,7 @@ class ShipmentAdvice(models.Model):
263
263
  )
264
264
  for vals in vals_list:
265
265
  sequence = outgoing_sequence
266
- if vals["shipment_type"] == "incoming":
266
+ if vals.get("shipment_type", defaults["shipment_type"]) == "incoming":
267
267
  sequence = incomig_sequence
268
268
  if vals.get("name", "/") == "/" and defaults.get("name", "/") == "/":
269
269
  vals["name"] = sequence.next_by_id()
@@ -314,6 +314,7 @@ class ShipmentAdvice(models.Model):
314
314
 
315
315
  def action_done(self):
316
316
  self._check_action_done_allowed()
317
+ self = self.with_context(shipment_advice_ignore_auto_close=True)
317
318
  for shipment in self:
318
319
  shipment._action_done()
319
320
  return True
@@ -417,8 +418,12 @@ class ShipmentAdvice(models.Model):
417
418
  }
418
419
  )
419
420
  return
420
- if not self.departure_date:
421
- self.departure_date = fields.Datetime.now()
421
+ self._close_shipments()
422
+
423
+ def _close_shipments(self):
424
+ for shipment in self:
425
+ if not shipment.departure_date:
426
+ shipment.departure_date = fields.Datetime.now()
422
427
  self.write({"state": "done", "error_message": False})
423
428
 
424
429
  @api.model
@@ -429,6 +434,25 @@ class ShipmentAdvice(models.Model):
429
434
  error=str(error),
430
435
  )
431
436
 
437
+ def auto_close_incoming_shipment_advices(self):
438
+ """Set incoming shipment advice to done when all planned moves are processed"""
439
+ if self.env.context.get("shipment_advice_ignore_auto_close"):
440
+ return
441
+ shipment_ids_to_close = []
442
+ for shipment in self:
443
+ if (
444
+ shipment.shipment_type != "incoming"
445
+ or not shipment.company_id.shipment_advice_auto_close_incoming
446
+ or any(
447
+ move.state not in ("cancel", "done")
448
+ for move in shipment.planned_move_ids
449
+ )
450
+ ):
451
+ continue
452
+ shipment_ids_to_close.append(shipment.id)
453
+ if shipment_ids_to_close:
454
+ self.browse(shipment_ids_to_close)._close_shipments()
455
+
432
456
  def action_cancel(self):
433
457
  for shipment in self:
434
458
  if shipment.state not in ("confirmed", "in_progress"):
@@ -1,4 +1,5 @@
1
1
  # Copyright 2021 Camptocamp SA
2
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
4
 
4
5
  from odoo import fields, models
@@ -18,3 +19,19 @@ class StockMove(models.Model):
18
19
  def _plan_in_shipment(self, shipment_advice):
19
20
  """Plan the moves into the given shipment advice."""
20
21
  self.shipment_advice_id = shipment_advice
22
+
23
+ def _prepare_merge_moves_distinct_fields(self):
24
+ res = super()._prepare_merge_moves_distinct_fields()
25
+ # Avoid having stock move assign to different shipment merged together
26
+ res.append("shipment_advice_id")
27
+ return res
28
+
29
+ def _action_done(self, cancel_backorder=False):
30
+ res = super()._action_done(cancel_backorder=cancel_backorder)
31
+ res.shipment_advice_id.auto_close_incoming_shipment_advices()
32
+ return res
33
+
34
+ def _action_cancel(self):
35
+ res = super()._action_cancel()
36
+ self.shipment_advice_id.auto_close_incoming_shipment_advices()
37
+ return res
@@ -68,6 +68,9 @@ class StockPicking(models.Model):
68
68
  "shipment.advice",
69
69
  compute="_compute_loaded_in_shipment",
70
70
  )
71
+ loaded_waiting_quantity = fields.Float(
72
+ "Waiting Quantity", compute="_compute_shipment_loaded_progress"
73
+ )
71
74
 
72
75
  @api.depends("move_line_ids.shipment_advice_id")
73
76
  def _compute_loaded_in_shipment(self):
@@ -157,6 +160,12 @@ class StockPicking(models.Model):
157
160
  picking.loaded_weight_progress = (
158
161
  f"{picking.loaded_weight} / {total_weight}"
159
162
  )
163
+ waiting_moves = picking.move_ids.filtered(
164
+ lambda ml: ml.state not in ["done", "cancel"]
165
+ )
166
+ picking.loaded_waiting_quantity = sum(
167
+ waiting_moves.mapped("product_qty")
168
+ ) - sum(waiting_moves.mapped("reserved_availability"))
160
169
  # Overall progress based on the operation type
161
170
  if picking.picking_type_id.show_entire_packs:
162
171
  picking.loaded_progress_f = picking.loaded_packages_progress_f
@@ -3,6 +3,7 @@
3
3
  * Simone Orsi <simahawk@gmail.com>
4
4
  * `Trobz <https://trobz.com>`_:
5
5
  * Dung Tran <dungtd@trobz.com>
6
+ * Michael Tietz (MT Software) <mtietz@mt-software.de>
6
7
 
7
8
  Design
8
9
  ~~~~~~
@@ -367,7 +367,7 @@ 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:60951d59c7ca7c14de9a7e490200a900d1aec0483212ef3f936e724c5f06e98a
370
+ !! source digest: sha256:34e6a179b9a0304d4d12e6a1ec5e161d7ad127fec1463f2061c083e562a5f789
371
371
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
372
372
  <p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/stock-logistics-transport/tree/16.0/shipment_advice"><img alt="OCA/stock-logistics-transport" src="https://img.shields.io/badge/github-OCA%2Fstock--logistics--transport-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/stock-logistics-transport-16-0/stock-logistics-transport-16-0-shipment_advice"><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-transport&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
373
373
  <p>Manage your (un)loading process through shipment advices.</p>
@@ -409,6 +409,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
409
409
  <li>Simone Orsi &lt;<a class="reference external" href="mailto:simahawk&#64;gmail.com">simahawk&#64;gmail.com</a>&gt;</li>
410
410
  <li><a class="reference external" href="https://trobz.com">Trobz</a>:
411
411
  * Dung Tran &lt;<a class="reference external" href="mailto:dungtd&#64;trobz.com">dungtd&#64;trobz.com</a>&gt;</li>
412
+ <li>Michael Tietz (MT Software) &lt;<a class="reference external" href="mailto:mtietz&#64;mt-software.de">mtietz&#64;mt-software.de</a>&gt;</li>
412
413
  </ul>
413
414
  </div>
414
415
  <div class="section" id="design">
@@ -2,5 +2,7 @@ from . import test_shipment_advice
2
2
  from . import test_shipment_advice_async
3
3
  from . import test_shipment_advice_plan
4
4
  from . import test_shipment_advice_load
5
+ from . import test_shipment_advice_picking_values
5
6
  from . import test_shipment_advice_unload
6
7
  from . import test_shipment_advice_stock_user
8
+ from . import test_shipment_advice_auto_close
@@ -1,8 +1,9 @@
1
1
  # Copyright 2021 Camptocamp SA
2
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
3
  # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
4
 
4
5
  from odoo import fields
5
- from odoo.tests.common import TransactionCase, new_test_user
6
+ from odoo.tests.common import Form, TransactionCase, new_test_user
6
7
 
7
8
 
8
9
  class Common(TransactionCase):
@@ -124,30 +125,33 @@ class Common(TransactionCase):
124
125
  else:
125
126
  self.assertIn("IN", shipment_advice.name)
126
127
 
127
- def _confirm_shipment_advice(self, shipment_advice, arrival_date=None):
128
+ @classmethod
129
+ def confirm_shipment_advice(cls, shipment_advice, arrival_date=None):
128
130
  if shipment_advice.state != "draft":
129
131
  return
130
132
  if arrival_date is None:
131
133
  arrival_date = fields.Datetime.now()
132
134
  shipment_advice.arrival_date = arrival_date
133
135
  shipment_advice.action_confirm()
134
- self.assertEqual(shipment_advice.state, "confirmed")
135
136
 
136
- def _in_progress_shipment_advice(self, shipment_advice, dock=None):
137
- self._confirm_shipment_advice(shipment_advice)
137
+ @classmethod
138
+ def progress_shipment_advice(cls, shipment_advice, dock=None):
139
+ cls.confirm_shipment_advice(shipment_advice)
138
140
  if shipment_advice.state != "confirmed":
139
141
  return
140
- shipment_advice.dock_id = dock or self.dock
142
+ shipment_advice.dock_id = dock or cls.dock
141
143
  shipment_advice.action_in_progress()
142
- self.assertEqual(shipment_advice.state, "in_progress")
143
144
 
144
- def _cancel_shipment_advice(self, shipment_advice, dock=None):
145
- self._confirm_shipment_advice(shipment_advice)
145
+ @classmethod
146
+ def cancel_shipment_advice(cls, shipment_advice, dock=None):
147
+ cls.confirm_shipment_advice(shipment_advice)
148
+ if shipment_advice.state != "confirmed":
149
+ return
146
150
  shipment_advice.action_cancel()
147
- self.assertEqual(shipment_advice.state, "cancel")
148
151
 
149
- def _plan_records_in_shipment(self, shipment_advice, records, user=None):
150
- wiz_model = self.env["wizard.plan.shipment"].with_context(
152
+ @classmethod
153
+ def plan_records_in_shipment(cls, shipment_advice, records, user=None):
154
+ wiz_model = cls.env["wizard.plan.shipment"].with_context(
151
155
  active_model=records._name,
152
156
  active_ids=records.ids,
153
157
  )
@@ -157,9 +161,22 @@ class Common(TransactionCase):
157
161
  wiz.action_plan()
158
162
  return wiz
159
163
 
160
- def _load_records_in_shipment(self, shipment_advice, records, user=None):
164
+ @classmethod
165
+ def unplan_records_from_shipment(cls, records, user=None):
166
+ wiz_model = cls.env["wizard.unplan.shipment"].with_context(
167
+ active_model=records._name,
168
+ active_ids=records.ids,
169
+ )
170
+ wiz = wiz_model.create({})
171
+ if user:
172
+ wiz = wiz.with_user(user)
173
+ wiz.action_unplan()
174
+ return wiz
175
+
176
+ @classmethod
177
+ def load_records_in_shipment(cls, shipment_advice, records, user=None):
161
178
  """Load pickings, move lines or package levels in the givent shipment."""
162
- wiz_model = self.env["wizard.load.shipment"].with_context(
179
+ wiz_model = cls.env["wizard.load.shipment"].with_context(
163
180
  active_model=records._name,
164
181
  active_ids=records.ids,
165
182
  )
@@ -169,12 +186,29 @@ class Common(TransactionCase):
169
186
  wiz.action_load()
170
187
  return wiz
171
188
 
172
- def _unload_records_from_shipment(self, shipment_advice, records):
189
+ @classmethod
190
+ def unload_records_from_shipment(cls, shipment_advice, records):
173
191
  """Unload pickings, move lines or package levels from the givent shipment."""
174
- wiz_model = self.env["wizard.unload.shipment"].with_context(
192
+ wiz_model = cls.env["wizard.unload.shipment"].with_context(
175
193
  active_model=records._name,
176
194
  active_ids=records.ids,
177
195
  )
178
196
  wiz = wiz_model.create({})
179
197
  wiz.action_unload()
180
198
  return wiz
199
+
200
+ @classmethod
201
+ def validate_picking(cls, picking, qty_done=None):
202
+ picking.ensure_one()
203
+ for ml in picking.move_line_ids:
204
+ ml.qty_done = qty_done or ml.reserved_uom_qty
205
+ action_data = picking.button_validate()
206
+ if action_data is True:
207
+ return cls.env["stock.picking"]
208
+ backorder_wizard = Form(
209
+ cls.env["stock.backorder.confirmation"].with_context(
210
+ **action_data["context"]
211
+ )
212
+ ).save()
213
+ backorder_wizard.process()
214
+ return cls.env["stock.picking"].search([("backorder_id", "=", picking.id)])
@@ -24,7 +24,7 @@ class TestShipmentAdvice(Common):
24
24
  self.shipment_advice_out.action_confirm()
25
25
 
26
26
  def test_shipment_advice_in_progress(self):
27
- self._confirm_shipment_advice(self.shipment_advice_out)
27
+ self.confirm_shipment_advice(self.shipment_advice_out)
28
28
  with self.assertRaises(UserError):
29
29
  self.shipment_advice_out.action_in_progress()
30
30
  self.shipment_advice_out.dock_id = self.dock
@@ -41,8 +41,8 @@ class TestShipmentAdvice(Common):
41
41
  with self.assertRaises(UserError):
42
42
  self.shipment_advice_in.action_done()
43
43
  self._check_sequence(self.shipment_advice_in)
44
- self._plan_records_in_shipment(self.shipment_advice_in, picking)
45
- self._in_progress_shipment_advice(self.shipment_advice_in)
44
+ self.plan_records_in_shipment(self.shipment_advice_in, picking)
45
+ self.progress_shipment_advice(self.shipment_advice_in)
46
46
  for ml in picking.move_line_ids:
47
47
  ml.qty_done = ml.reserved_uom_qty
48
48
  picking._action_done()
@@ -62,8 +62,8 @@ class TestShipmentAdvice(Common):
62
62
  """
63
63
  picking = self.move_product_in1.picking_id
64
64
  # Plan a move
65
- self._plan_records_in_shipment(self.shipment_advice_in, self.move_product_in1)
66
- self._in_progress_shipment_advice(self.shipment_advice_in)
65
+ self.plan_records_in_shipment(self.shipment_advice_in, self.move_product_in1)
66
+ self.progress_shipment_advice(self.shipment_advice_in)
67
67
  # Receive it (making its related transfer partially received)
68
68
  for ml in self.move_product_in1.move_line_ids:
69
69
  ml.qty_done = ml.reserved_uom_qty
@@ -82,8 +82,8 @@ class TestShipmentAdvice(Common):
82
82
  validate all fully loaded transfers.
83
83
  """
84
84
  picking = self.move_product_out1.picking_id
85
- self._in_progress_shipment_advice(self.shipment_advice_out)
86
- self._load_records_in_shipment(self.shipment_advice_out, picking)
85
+ self.progress_shipment_advice(self.shipment_advice_out)
86
+ self.load_records_in_shipment(self.shipment_advice_out, picking)
87
87
  self.shipment_advice_out.action_done()
88
88
  self.assertEqual(self.shipment_advice_out.state, "done")
89
89
  self.assertTrue(
@@ -103,8 +103,8 @@ class TestShipmentAdvice(Common):
103
103
  company.shipment_advice_outgoing_backorder_policy = "leave_open"
104
104
  # Load a transfer partially (here a package)
105
105
  package_level = self.move_product_out2.move_line_ids.package_level_id
106
- self._in_progress_shipment_advice(self.shipment_advice_out)
107
- self._load_records_in_shipment(self.shipment_advice_out, package_level)
106
+ self.progress_shipment_advice(self.shipment_advice_out)
107
+ self.load_records_in_shipment(self.shipment_advice_out, package_level)
108
108
  # Validate the shipment => the transfer is still open
109
109
  self.shipment_advice_out.action_done()
110
110
  picking = package_level.picking_id
@@ -127,8 +127,8 @@ class TestShipmentAdvice(Common):
127
127
  company.shipment_advice_outgoing_backorder_policy = "create_backorder"
128
128
  # Load a transfer partially (here a package)
129
129
  package_level = self.move_product_out2.move_line_ids.package_level_id
130
- self._in_progress_shipment_advice(self.shipment_advice_out)
131
- self._load_records_in_shipment(self.shipment_advice_out, package_level)
130
+ self.progress_shipment_advice(self.shipment_advice_out)
131
+ self.load_records_in_shipment(self.shipment_advice_out, package_level)
132
132
  self.assertEqual(package_level.picking_id, self.move_product_out1.picking_id)
133
133
  # Validate the shipment => the transfer is validated, creating a backorder
134
134
  self.shipment_advice_out.action_done()
@@ -148,7 +148,7 @@ class TestShipmentAdvice(Common):
148
148
  self.assertEqual(picking2.state, "assigned")
149
149
 
150
150
  def test_shipment_advice_cancel(self):
151
- self._in_progress_shipment_advice(self.shipment_advice_out)
151
+ self.progress_shipment_advice(self.shipment_advice_out)
152
152
  self.shipment_advice_out.action_cancel()
153
153
  self.assertEqual(self.shipment_advice_out.state, "cancel")
154
154
 
@@ -160,6 +160,10 @@ class TestShipmentAdvice(Common):
160
160
  def test_shipment_advice_draft(self):
161
161
  with self.assertRaises(UserError):
162
162
  self.shipment_advice_out.action_draft()
163
- self._cancel_shipment_advice(self.shipment_advice_out)
163
+ self.cancel_shipment_advice(self.shipment_advice_out)
164
164
  self.shipment_advice_out.action_draft()
165
165
  self.assertEqual(self.shipment_advice_out.state, "draft")
166
+
167
+ def test_shipment_name(self):
168
+ self.assertTrue("OUT" in self.shipment_advice_out.name)
169
+ self.assertTrue("IN" in self.shipment_advice_in.name)
@@ -50,8 +50,8 @@ class TestShipmentAdvice(Common):
50
50
  transfers. Here the planned transfers have been fully received.
51
51
  """
52
52
  picking = self.move_product_in1.picking_id
53
- self._plan_records_in_shipment(self.shipment_advice_in, picking)
54
- self._in_progress_shipment_advice(self.shipment_advice_in)
53
+ self.plan_records_in_shipment(self.shipment_advice_in, picking)
54
+ self.progress_shipment_advice(self.shipment_advice_in)
55
55
  for ml in picking.move_line_ids:
56
56
  ml.qty_done = ml.reserved_uom_qty
57
57
  picking._action_done()
@@ -79,8 +79,8 @@ class TestShipmentAdvice(Common):
79
79
  """
80
80
  picking = self.move_product_in1.picking_id
81
81
  # Plan a move
82
- self._plan_records_in_shipment(self.shipment_advice_in, self.move_product_in1)
83
- self._in_progress_shipment_advice(self.shipment_advice_in)
82
+ self.plan_records_in_shipment(self.shipment_advice_in, self.move_product_in1)
83
+ self.progress_shipment_advice(self.shipment_advice_in)
84
84
  # Receive it (making its related transfer partially received)
85
85
  for ml in self.move_product_in1.move_line_ids:
86
86
  ml.qty_done = ml.reserved_uom_qty
@@ -107,8 +107,8 @@ class TestShipmentAdvice(Common):
107
107
  validate all fully loaded transfers.
108
108
  """
109
109
  pickings = self.move1.picking_id | self.move2.picking_id | self.move3.picking_id
110
- self._in_progress_shipment_advice(self.shipment_advice_out)
111
- self._load_records_in_shipment(self.shipment_advice_out, pickings)
110
+ self.progress_shipment_advice(self.shipment_advice_out)
111
+ self.load_records_in_shipment(self.shipment_advice_out, pickings)
112
112
  with trap_jobs() as trap:
113
113
  self.shipment_advice_out.action_done()
114
114
  trap.assert_jobs_count(5) # 3 pickings + 1 for unplan + 1 for postprocess
@@ -135,8 +135,8 @@ class TestShipmentAdvice(Common):
135
135
  company.shipment_advice_outgoing_backorder_policy = "leave_open"
136
136
  # Load a transfer partially (here a package)
137
137
  package_level = self.move_product_out2.move_line_ids.package_level_id
138
- self._in_progress_shipment_advice(self.shipment_advice_out)
139
- self._load_records_in_shipment(self.shipment_advice_out, package_level)
138
+ self.progress_shipment_advice(self.shipment_advice_out)
139
+ self.load_records_in_shipment(self.shipment_advice_out, package_level)
140
140
  # Validate the shipment => the transfer is still open
141
141
  with trap_jobs() as trap:
142
142
  self.shipment_advice_out.action_done()
@@ -167,8 +167,8 @@ class TestShipmentAdvice(Common):
167
167
  company.shipment_advice_outgoing_backorder_policy = "create_backorder"
168
168
  # Load a transfer partially (here a package)
169
169
  package_level = self.move_product_out2.move_line_ids.package_level_id
170
- self._in_progress_shipment_advice(self.shipment_advice_out)
171
- self._load_records_in_shipment(self.shipment_advice_out, package_level)
170
+ self.progress_shipment_advice(self.shipment_advice_out)
171
+ self.load_records_in_shipment(self.shipment_advice_out, package_level)
172
172
  self.assertEqual(package_level.picking_id, self.move_product_out1.picking_id)
173
173
  # Validate the shipment => the transfer is validated, creating a backorder
174
174
  with trap_jobs() as trap:
@@ -202,8 +202,8 @@ class TestShipmentAdvice(Common):
202
202
  - the shipment advice moves to the "error" state
203
203
  """
204
204
  pickings = self.move1.picking_id | self.move2.picking_id | self.move3.picking_id
205
- self._in_progress_shipment_advice(self.shipment_advice_out)
206
- self._load_records_in_shipment(self.shipment_advice_out, pickings)
205
+ self.progress_shipment_advice(self.shipment_advice_out)
206
+ self.load_records_in_shipment(self.shipment_advice_out, pickings)
207
207
  # provoke validation error by setting internal package as destination
208
208
  pickings[0].move_line_ids.result_package_id = self.package
209
209
  with trap_jobs() as trap:
@@ -279,10 +279,10 @@ class TestShipmentAdvice(Common):
279
279
  # Load a transfer partially (here a package)
280
280
  package_level = self.move_product_out2.move_line_ids.package_level_id
281
281
  picking = package_level.picking_id
282
- self._in_progress_shipment_advice(self.shipment_advice_out)
283
- self._plan_records_in_shipment(self.shipment_advice_out, picking)
282
+ self.progress_shipment_advice(self.shipment_advice_out)
283
+ self.plan_records_in_shipment(self.shipment_advice_out, picking)
284
284
  self.assertEqual(len(self.shipment_advice_out.planned_move_ids), 3)
285
- self._load_records_in_shipment(self.shipment_advice_out, package_level)
285
+ self.load_records_in_shipment(self.shipment_advice_out, package_level)
286
286
  self.assertEqual(len(package_level.move_line_ids.move_id), 2)
287
287
  # Validate the shipment => the transfer is validated, creating a backorder
288
288
  with trap_jobs() as trap:
@@ -0,0 +1,46 @@
1
+ # Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
+
4
+ from .common import Common
5
+
6
+
7
+ class TestShipmentAdviceAutoClose(Common):
8
+ @classmethod
9
+ def setUpClass(cls):
10
+ super().setUpClass()
11
+ cls.shipment_advice_in.company_id.shipment_advice_auto_close_incoming = True
12
+ cls.picking1 = cls.move_product_in1.picking_id
13
+ group = cls.env["procurement.group"].create({})
14
+ cls.move_product_in21 = cls._create_move(
15
+ cls.picking_type_in, cls.product_in, 5, group
16
+ )
17
+ cls.picking2 = cls.move_product_in21.picking_id
18
+ cls.pickings = cls.picking1 | cls.picking2
19
+ cls.plan_records_in_shipment(cls.shipment_advice_in, cls.pickings)
20
+ cls.progress_shipment_advice(cls.shipment_advice_in)
21
+
22
+ def test_auto_close_incoming_on_done(self):
23
+ self.validate_picking(self.picking1)
24
+ self.assertEqual(self.shipment_advice_in.state, "in_progress")
25
+ self.validate_picking(self.picking2)
26
+ self.assertEqual(self.shipment_advice_in.state, "done")
27
+
28
+ def test_auto_close_incoming_on_cancel(self):
29
+ self.validate_picking(self.picking1)
30
+ self.assertEqual(self.shipment_advice_in.state, "in_progress")
31
+ self.picking2.action_cancel()
32
+ self.assertEqual(self.shipment_advice_in.state, "done")
33
+
34
+ def test_no_auto_close_on_outgoing(self):
35
+ picking = self.move_product_out1.picking_id
36
+ self.plan_records_in_shipment(self.shipment_advice_out, picking)
37
+ self.progress_shipment_advice(self.shipment_advice_out)
38
+ self.validate_picking(picking)
39
+ self.assertEqual(picking.state, "done")
40
+ self.assertEqual(self.shipment_advice_out.state, "in_progress")
41
+
42
+ def test_no_auto_close_context(self):
43
+ pickings = self.pickings.with_context(shipment_advice_ignore_auto_close=True)
44
+ for picking in pickings:
45
+ self.validate_picking(picking)
46
+ self.assertEqual(self.shipment_advice_in.state, "in_progress")
@@ -8,7 +8,7 @@ from .common import Common
8
8
 
9
9
  class TestShipmentAdviceLoad(Common):
10
10
  def test_shipment_advice_load_picking_not_planned(self):
11
- self._in_progress_shipment_advice(self.shipment_advice_out)
11
+ self.progress_shipment_advice(self.shipment_advice_out)
12
12
  picking = self.move_product_out1.picking_id
13
13
  wiz_model = self.env["wizard.load.shipment"].with_context(
14
14
  active_model=picking._name,
@@ -42,9 +42,9 @@ class TestShipmentAdviceLoad(Common):
42
42
 
43
43
  def test_shipment_advice_load_picking_already_planned(self):
44
44
  picking = self.move_product_out1.picking_id
45
- self._plan_records_in_shipment(self.shipment_advice_out, picking)
46
- self._in_progress_shipment_advice(self.shipment_advice_out)
47
- wiz = self._load_records_in_shipment(self.shipment_advice_out, picking)
45
+ self.plan_records_in_shipment(self.shipment_advice_out, picking)
46
+ self.progress_shipment_advice(self.shipment_advice_out)
47
+ wiz = self.load_records_in_shipment(self.shipment_advice_out, picking)
48
48
  self.assertEqual(wiz.picking_ids, picking)
49
49
  self.assertFalse(wiz.move_line_ids)
50
50
  # Check planned entries
@@ -73,7 +73,7 @@ class TestShipmentAdviceLoad(Common):
73
73
  self.assertEqual(wiz.shipment_advice_id.loaded_package_ids, self.package)
74
74
 
75
75
  def test_shipment_advice_load_move_line_not_planned(self):
76
- self._in_progress_shipment_advice(self.shipment_advice_out)
76
+ self.progress_shipment_advice(self.shipment_advice_out)
77
77
  move = self.move_product_out1
78
78
  wiz_model = self.env["wizard.load.shipment"].with_context(
79
79
  active_model=move.move_line_ids._name,
@@ -101,9 +101,9 @@ class TestShipmentAdviceLoad(Common):
101
101
 
102
102
  def test_shipment_advice_load_move_line_already_planned(self):
103
103
  move = self.move_product_out1
104
- self._plan_records_in_shipment(self.shipment_advice_out, move)
105
- self._in_progress_shipment_advice(self.shipment_advice_out)
106
- wiz = self._load_records_in_shipment(
104
+ self.plan_records_in_shipment(self.shipment_advice_out, move)
105
+ self.progress_shipment_advice(self.shipment_advice_out)
106
+ wiz = self.load_records_in_shipment(
107
107
  self.shipment_advice_out, move.move_line_ids
108
108
  )
109
109
  self.assertEqual(wiz.move_line_ids, move.move_line_ids)
@@ -127,8 +127,8 @@ class TestShipmentAdviceLoad(Common):
127
127
  def test_shipment_advice_load_moves_different_pack(self):
128
128
  move = self.move_product_out1
129
129
  move_package_ids = self.move_product_out2 + self.move_product_out3
130
- self._plan_records_in_shipment(self.shipment_advice_out, move)
131
- self._in_progress_shipment_advice(self.shipment_advice_out)
130
+ self.plan_records_in_shipment(self.shipment_advice_out, move)
131
+ self.progress_shipment_advice(self.shipment_advice_out)
132
132
  wiz_model = self.env["wizard.load.shipment"].with_context(
133
133
  active_model=move.move_line_ids._name,
134
134
  active_ids=move.move_line_ids.ids + move_package_ids.move_line_ids.ids,
@@ -140,12 +140,12 @@ class TestShipmentAdviceLoad(Common):
140
140
  def test_shipment_advice_already_planned_load_move_line_not_planned(self):
141
141
  # Plan the first move
142
142
  move1 = self.move_product_out1
143
- self._plan_records_in_shipment(self.shipment_advice_out, move1)
143
+ self.plan_records_in_shipment(self.shipment_advice_out, move1)
144
144
  # But load something else => error
145
145
  package_level = self.move_product_out2.move_line_ids.package_level_id
146
- self._in_progress_shipment_advice(self.shipment_advice_out)
146
+ self.progress_shipment_advice(self.shipment_advice_out)
147
147
  with self.assertRaisesRegex(UserError, "planned already"):
148
- self._load_records_in_shipment(
148
+ self.load_records_in_shipment(
149
149
  self.shipment_advice_out,
150
150
  package_level,
151
151
  )
@@ -0,0 +1,20 @@
1
+ # Copyright 2024 Camptocamp SA
2
+ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
3
+
4
+ from .common import Common
5
+
6
+
7
+ class TestShipmentPickingValues(Common):
8
+ def test_picking_loaded_waiting_quantity_no(self):
9
+ move = self.move_product_out1
10
+ picking = move.picking_id
11
+ self.load_records_in_shipment(self.shipment_advice_out, picking)
12
+ self.assertEqual(picking.loaded_waiting_quantity, 0)
13
+
14
+ def test_picking_loaded_waiting_quantity_yes(self):
15
+ move = self.move_product_out1
16
+ picking = move.picking_id
17
+ quantity = move.product_qty
18
+ move.move_line_ids.reserved_uom_qty = quantity - 3
19
+ self.load_records_in_shipment(self.shipment_advice_out, picking)
20
+ self.assertEqual(picking.loaded_waiting_quantity, 3)
@@ -7,7 +7,7 @@ from .common import Common
7
7
  class TestShipmentAdvicePlan(Common):
8
8
  def test_shipment_advice_plan_picking(self):
9
9
  picking = self.move_product_out1.picking_id
10
- wiz = self._plan_records_in_shipment(self.shipment_advice_out, picking)
10
+ wiz = self.plan_records_in_shipment(self.shipment_advice_out, picking)
11
11
  self.assertEqual(wiz.picking_ids, picking)
12
12
  self.assertFalse(wiz.move_ids)
13
13
  self.assertEqual(wiz.shipment_advice_id, self.shipment_advice_out)
@@ -18,7 +18,7 @@ class TestShipmentAdvicePlan(Common):
18
18
 
19
19
  def test_shipment_advice_plan_move(self):
20
20
  picking = self.move_product_out1.picking_id
21
- wiz = self._plan_records_in_shipment(
21
+ wiz = self.plan_records_in_shipment(
22
22
  self.shipment_advice_out, self.move_product_out1
23
23
  )
24
24
  self.assertEqual(wiz.move_ids, self.move_product_out1)
@@ -80,13 +80,13 @@ class TestShipmentAdviceStockUser(Common):
80
80
 
81
81
  def test_wizard_plan_and_load_shipment(self):
82
82
  move = self.move_product_out1
83
- self._plan_records_in_shipment(
83
+ self.plan_records_in_shipment(
84
84
  self.shipment_advice_out,
85
85
  move,
86
86
  user=self.stock_user,
87
87
  )
88
- self._in_progress_shipment_advice(self.shipment_advice_out)
89
- wiz = self._load_records_in_shipment(
88
+ self.progress_shipment_advice(self.shipment_advice_out)
89
+ wiz = self.load_records_in_shipment(
90
90
  self.shipment_advice_out,
91
91
  move.move_line_ids,
92
92
  user=self.stock_user,
@@ -6,10 +6,10 @@ from .common import Common
6
6
 
7
7
  class TestShipmentAdviceUnload(Common):
8
8
  def test_shipment_advice_unload_picking(self):
9
- self._in_progress_shipment_advice(self.shipment_advice_out)
9
+ self.progress_shipment_advice(self.shipment_advice_out)
10
10
  # Load picking
11
11
  picking = self.move_product_out1.picking_id
12
- self._load_records_in_shipment(self.shipment_advice_out, picking)
12
+ self.load_records_in_shipment(self.shipment_advice_out, picking)
13
13
  self.assertEqual(self.shipment_advice_out.loaded_picking_ids, picking)
14
14
  self.assertEqual(
15
15
  self.shipment_advice_out.loaded_move_line_ids,
@@ -18,29 +18,29 @@ class TestShipmentAdviceUnload(Common):
18
18
  | self.move_product_out3.move_line_ids,
19
19
  )
20
20
  # Unload it
21
- self._unload_records_from_shipment(self.shipment_advice_out, picking)
21
+ self.unload_records_from_shipment(self.shipment_advice_out, picking)
22
22
  self.assertFalse(self.shipment_advice_out.loaded_picking_ids)
23
23
  self.assertFalse(self.shipment_advice_out.loaded_move_line_ids)
24
24
 
25
25
  def test_shipment_advice_unload_move_line(self):
26
- self._in_progress_shipment_advice(self.shipment_advice_out)
26
+ self.progress_shipment_advice(self.shipment_advice_out)
27
27
  # Load move line
28
28
  move_line = self.move_product_out1.move_line_ids
29
- self._load_records_in_shipment(self.shipment_advice_out, move_line)
29
+ self.load_records_in_shipment(self.shipment_advice_out, move_line)
30
30
  self.assertEqual(move_line.qty_done, 20)
31
31
  self.assertEqual(
32
32
  self.shipment_advice_out.loaded_move_line_without_package_ids, move_line
33
33
  )
34
34
  # Unload it
35
- self._unload_records_from_shipment(self.shipment_advice_out, move_line)
35
+ self.unload_records_from_shipment(self.shipment_advice_out, move_line)
36
36
  self.assertFalse(move_line.qty_done)
37
37
  self.assertFalse(self.shipment_advice_out.loaded_move_line_without_package_ids)
38
38
 
39
39
  def test_shipment_advice_unload_package_level(self):
40
- self._in_progress_shipment_advice(self.shipment_advice_out)
40
+ self.progress_shipment_advice(self.shipment_advice_out)
41
41
  # Load package level
42
42
  package_level = self.move_product_out2.move_line_ids.package_level_id
43
- self._load_records_in_shipment(self.shipment_advice_out, package_level)
43
+ self.load_records_in_shipment(self.shipment_advice_out, package_level)
44
44
  self.assertTrue(package_level.is_done)
45
45
  self.assertEqual(self.move_product_out2.move_line_ids.qty_done, 10)
46
46
  self.assertEqual(self.move_product_out3.move_line_ids.qty_done, 10)
@@ -1,5 +1,6 @@
1
1
  <?xml version="1.0" encoding="utf-8" ?>
2
2
  <!-- Copyright 2021 Camptocamp SA
3
+ Copyright 2024 Michael Tietz (MT Software) <mtietz@mt-software.de>
3
4
  License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
4
5
  <odoo>
5
6
  <record id="res_config_settings_view_form" model="ir.ui.view">
@@ -44,6 +45,23 @@
44
45
  </div>
45
46
  </div>
46
47
  </div>
48
+ <div
49
+ class="col-12 col-lg-6 o_setting_box"
50
+ id="shipment_advice_auto_close_incoming"
51
+ title="shipment_advice_auto_close_incoming"
52
+ >
53
+ <div class="o_setting_left_pane">
54
+ <field name="shipment_advice_auto_close_incoming" />
55
+ </div>
56
+ <div class="o_setting_right_pane">
57
+ <label for="shipment_advice_auto_close_incoming" />
58
+ <div class="text-muted">
59
+ This flag indicates if an incoming shipment advice
60
+ will be automatically set to done
61
+ if all related moves are done or canceled
62
+ </div>
63
+ </div>
64
+ </div>
47
65
  </xpath>
48
66
  </field>
49
67
  </record>
@@ -186,7 +186,10 @@
186
186
  groups="!base.group_multi_company"
187
187
  invisible="1"
188
188
  />
189
- <field name="shipment_type" />
189
+ <field
190
+ name="shipment_type"
191
+ attrs="{'readonly': [('name', '!=', '/')]}"
192
+ />
190
193
  </group>
191
194
  <group name="info2">
192
195
  <field
@@ -120,6 +120,7 @@
120
120
  <field name="loaded_move_lines_progress" />
121
121
  <field name="loaded_weight_progress" />
122
122
  <field name="state" />
123
+ <field name="loaded_waiting_quantity" />
123
124
  </tree>
124
125
  </field>
125
126
  </record>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: odoo-addon-shipment_advice
3
- Version: 16.0.1.5.0
3
+ Version: 16.0.1.6.0
4
4
  Summary: Manage your (un)loading process through shipment advices.
5
5
  Home-page: https://github.com/OCA/stock-logistics-transport
6
6
  Author: Camptocamp, Odoo Community Association (OCA)
@@ -11,9 +11,9 @@ Classifier: Framework :: Odoo
11
11
  Classifier: Framework :: Odoo :: 16.0
12
12
  Classifier: License :: OSI Approved :: GNU Affero General Public License v3
13
13
  Requires-Python: >=3.10
14
- Requires-Dist: odoo-addon-queue-job <16.1dev,>=16.0dev
15
- Requires-Dist: odoo-addon-stock-dock <16.1dev,>=16.0dev
16
- Requires-Dist: odoo <16.1dev,>=16.0a
14
+ Requires-Dist: odoo-addon-queue-job<16.1dev,>=16.0dev
15
+ Requires-Dist: odoo-addon-stock-dock<16.1dev,>=16.0dev
16
+ Requires-Dist: odoo<16.1dev,>=16.0a
17
17
 
18
18
  ===============
19
19
  Shipment Advice
@@ -24,7 +24,7 @@ Shipment Advice
24
24
  !! This file is generated by oca-gen-addon-readme !!
25
25
  !! changes will be overwritten. !!
26
26
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
27
- !! source digest: sha256:60951d59c7ca7c14de9a7e490200a900d1aec0483212ef3f936e724c5f06e98a
27
+ !! source digest: sha256:34e6a179b9a0304d4d12e6a1ec5e161d7ad127fec1463f2061c083e562a5f789
28
28
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
29
29
 
30
30
  .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -78,6 +78,7 @@ Contributors
78
78
  * Simone Orsi <simahawk@gmail.com>
79
79
  * `Trobz <https://trobz.com>`_:
80
80
  * Dung Tran <dungtd@trobz.com>
81
+ * Michael Tietz (MT Software) <mtietz@mt-software.de>
81
82
 
82
83
  Design
83
84
  ~~~~~~
@@ -1,6 +1,6 @@
1
- odoo/addons/shipment_advice/README.rst,sha256=fTPLxZpccDpUydPVvZnIWVBT4qFdMFRheK6LVOCEX2Y,3389
1
+ odoo/addons/shipment_advice/README.rst,sha256=4BR9JuVlUKKlqzSsM79Ku7OCNRF3FFW825zld4qXVoo,3443
2
2
  odoo/addons/shipment_advice/__init__.py,sha256=0XNpxETgFdVxFDEw03O8oL3NtTSk3we-HEZW2sPKzIU,43
3
- odoo/addons/shipment_advice/__manifest__.py,sha256=Tvr3KkRQd0cV_Xs2BfU2Vv7tvSGltqsKKtvvYDH_4x0,1301
3
+ odoo/addons/shipment_advice/__manifest__.py,sha256=pdIxMoAVumfKpxQYTj_KRRtZTIsN6NsY7PWXEV02RdM,1301
4
4
  odoo/addons/shipment_advice/data/ir_sequence.xml,sha256=7y13W1xPr3o_deB6s5a_UHSJGMpFGCA8JTc7xI5L0-c,1066
5
5
  odoo/addons/shipment_advice/data/queue_job_channel.xml,sha256=wZSQNo7aAknlMpTC-mxXRvYf0rXSF53B3hI7NXwKciA,350
6
6
  odoo/addons/shipment_advice/data/queue_job_function.xml,sha256=cEy-z8znwYUB8GDNjouWgwS-Rbfn1zl7nbpLvdXRD_U,1151
@@ -8,37 +8,39 @@ odoo/addons/shipment_advice/demo/stock_dock.xml,sha256=hhwcQa6JGbN-oQYrkrrgPmH1h
8
8
  odoo/addons/shipment_advice/i18n/es.po,sha256=qhiD9JC2UyeRo2xs6I0JHvd9C-xy-dZBKFXB-Sc2ln8,56392
9
9
  odoo/addons/shipment_advice/i18n/fr.po,sha256=zjcmIhOGCnvZLOxJiV9qPlvRW45ufR-hGRSB9qCn-4w,54240
10
10
  odoo/addons/shipment_advice/i18n/it.po,sha256=qjB8UWhsxReSrKww7W224JtKqdVXxi0595SbgC-b7Lg,57275
11
- odoo/addons/shipment_advice/i18n/shipment_advice.pot,sha256=F8VfgXnUV9kgaYcs0CB4FX62wvaE_rFzNZLn8ctIwvw,46856
11
+ odoo/addons/shipment_advice/i18n/shipment_advice.pot,sha256=Rw4a6mSDBSWYieFLAlPquPeVaIg8M6y44JVcPgzh640,48221
12
12
  odoo/addons/shipment_advice/models/__init__.py,sha256=kvmDs7RDo8Tnvv0w_2GcxgVcw9nATFSixZ1tFlVNNz8,207
13
- odoo/addons/shipment_advice/models/res_company.py,sha256=fXtG4UK67RJNoRRXsdL3el5hxsGBLx_lqUKaylg6LEs,1276
14
- odoo/addons/shipment_advice/models/res_config_settings.py,sha256=XsOdwRyr3_L07kEoabJN2InBQ6aVXSq0qHtTn-OG8r8,513
15
- odoo/addons/shipment_advice/models/shipment_advice.py,sha256=FIR1uVoU9KlDMdqmc6KG0EWM1eFKgnSXpTyE0XqTTJs,20305
16
- odoo/addons/shipment_advice/models/stock_move.py,sha256=76z93nLjxFO3et79ogYALXsZadBBz-wqnpwENyDPtbY,543
13
+ odoo/addons/shipment_advice/models/res_company.py,sha256=PXjmBwOvjDagL2xLA0JBD40E1cBJVyh_lVQc3R1I5tk,1669
14
+ odoo/addons/shipment_advice/models/res_config_settings.py,sha256=VGgAvuRnmaN2EoV3fZPdqW3gOJeKtFJX5w3R8cLHYeE,727
15
+ odoo/addons/shipment_advice/models/shipment_advice.py,sha256=EQDsyXfVBvdeaXtazV3pQSokzi-07qYKhRX7icec7sU,21352
16
+ odoo/addons/shipment_advice/models/stock_move.py,sha256=P6dman_04CcGZkQmfzcAn0O7DgR0FLrugCuVPW4IMtA,1237
17
17
  odoo/addons/shipment_advice/models/stock_move_line.py,sha256=gkGBrDFJ1BZC8uY9wwwFSuk_xw__HdRTW2DTGk2WdxI,5378
18
18
  odoo/addons/shipment_advice/models/stock_package_level.py,sha256=0_S4KRBy02kkmBu5Pbcw6g-etJtATveTZh42Srz1R_o,1431
19
- odoo/addons/shipment_advice/models/stock_picking.py,sha256=EPZ-DNhMWDraIThBveOUBiCBel86ea_uAGuKO-z-QeE,8438
20
- odoo/addons/shipment_advice/readme/CONTRIBUTORS.rst,sha256=IWUYnivo0DXa4JN3euivIwPkudMEjRYeoY4qPiUvHSw,319
19
+ odoo/addons/shipment_advice/models/stock_picking.py,sha256=K1BbrAXPyKeIg_sPbxhwgdBkjND_FanjszY1DrMj8zw,8861
20
+ odoo/addons/shipment_advice/readme/CONTRIBUTORS.rst,sha256=BCvWvogVfa_k5j5jF5fkxv-ooTo_LjcBKSI-mas-HT0,373
21
21
  odoo/addons/shipment_advice/readme/CREDITS.rst,sha256=CuObn3b483zExCIho2SzTKfTU3M7H3vMQNHdTAc7UV4,138
22
22
  odoo/addons/shipment_advice/readme/DESCRIPTION.rst,sha256=m5Xql8e7i_F_7AMLc-1lBRGVCHUca9kJ78ZRxOUaOl8,58
23
23
  odoo/addons/shipment_advice/report/report_shipment_advice.xml,sha256=hKMUP7iuRLpeBOB7-bNr38d83WB5aet76mElIoTS_5Q,7696
24
24
  odoo/addons/shipment_advice/report/reports.xml,sha256=8LeKVB1M0a4gsLyrwd68RMnxoUw0xCYIn2KN4jlCuLA,1523
25
25
  odoo/addons/shipment_advice/security/ir.model.access.csv,sha256=FeiNV6yP6OOOwJw2MHyo1B3TQQ-umOz75A7QAlCTPZs,657
26
26
  odoo/addons/shipment_advice/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
27
- odoo/addons/shipment_advice/static/description/index.html,sha256=0QYesWG-4W4P01Z2zBa29sDLbiUBcSQ2bq_rcEuHO18,13650
28
- odoo/addons/shipment_advice/tests/__init__.py,sha256=NAs_27I19CYFy1t_xuuUDGuuyd0hoa7q1uHRydzdgRY,244
29
- odoo/addons/shipment_advice/tests/common.py,sha256=ry1jywQT7E5Rim0l732BRyEIfxBm0fvNH5XKQGFkVNg,7132
30
- odoo/addons/shipment_advice/tests/test_shipment_advice.py,sha256=GO7AV4O2Js8cZ9a7EmZY5-4n1uMWF6zhQwORZxsj5YY,7540
31
- odoo/addons/shipment_advice/tests/test_shipment_advice_async.py,sha256=PVWm8Gxn17l_DbZWIF_VFme34cn826uxKhxPbRUQLGM,14617
32
- odoo/addons/shipment_advice/tests/test_shipment_advice_load.py,sha256=DUvZ_yBJRj75XPaLecibA1vp-k7TPaUFYMF4XxXM1wc,8093
33
- odoo/addons/shipment_advice/tests/test_shipment_advice_plan.py,sha256=7hUY4RRYi8-6_ovmYFA7DH85KP_kfy1J3O14beKG0hk,1550
34
- odoo/addons/shipment_advice/tests/test_shipment_advice_stock_user.py,sha256=7fd0AqX-OrCQH2zGB4L2SO4UUzjcSgzxHOdhmsWgDLw,4334
35
- odoo/addons/shipment_advice/tests/test_shipment_advice_unload.py,sha256=2BEJUEVSsh1MW_ke8-LK4vLsi7Sb3Ijs0T794yQdwdE,2727
36
- odoo/addons/shipment_advice/views/res_config_settings.xml,sha256=KTNRG9hBnkeJGTjVpF3Bs4ScU512TaPwTSFh6yQjFmU,2501
37
- odoo/addons/shipment_advice/views/shipment_advice.xml,sha256=ME_BnA3sIgpbxKSHDDI_-tO8NFLgUHyd-nvMCBtyZjE,16723
27
+ odoo/addons/shipment_advice/static/description/index.html,sha256=YIGWG2hxw-d50PbRVFCDOMF_0COWvRhF3d2O6zlQf4A,13795
28
+ odoo/addons/shipment_advice/tests/__init__.py,sha256=nWHgeD6l3judyJhGVx996KU99UMvDI0TIl0QhG3LqLQ,340
29
+ odoo/addons/shipment_advice/tests/common.py,sha256=dEpqCye2-xBP8dPy5ftIX9ZY8w56F3pshUgR0qg0jXY,8159
30
+ odoo/addons/shipment_advice/tests/test_shipment_advice.py,sha256=tC1S1XsCZ1PauKplUjoMfa2EUbwhVFCz-iwzfMQ6JOo,7670
31
+ odoo/addons/shipment_advice/tests/test_shipment_advice_async.py,sha256=w-vBtm1771G4E_AD75iBNYgQikqLc7TASbVpRHMX3Yg,14581
32
+ odoo/addons/shipment_advice/tests/test_shipment_advice_auto_close.py,sha256=QHSAPsJH9p2NPMEo7gEAHrMBwRbPcr6RyG5bhsXNU38,2047
33
+ odoo/addons/shipment_advice/tests/test_shipment_advice_load.py,sha256=frf8-XkZyGwM-h21CZtec4ISLxodOcUkDWjkr69yFPM,8062
34
+ odoo/addons/shipment_advice/tests/test_shipment_advice_picking_values.py,sha256=VsQUqr0gwdqo8ppEoTOD6ii9hBmp3amNDa5xOV07-WU,784
35
+ odoo/addons/shipment_advice/tests/test_shipment_advice_plan.py,sha256=6-ArD_3ZjYo0q_TM8YLcRbEkEv3Y8bag6cz_F8WyCao,1548
36
+ odoo/addons/shipment_advice/tests/test_shipment_advice_stock_user.py,sha256=FrJCnl8jCytkuvN70H1_hmEN-QdLSTVqSAY5FsqZsHQ,4328
37
+ odoo/addons/shipment_advice/tests/test_shipment_advice_unload.py,sha256=FAkgou08zSIfBXY9t0-XOC8zGk-fuq8OQh7CfsXeq8s,2710
38
+ odoo/addons/shipment_advice/views/res_config_settings.xml,sha256=gFGVuzb54xVOJ22Poz9Q8vfvHzWfgNzJO4DBQCv3A0A,3425
39
+ odoo/addons/shipment_advice/views/shipment_advice.xml,sha256=Bz3gG4Mra1K_U86y9vzPUmV4npDrdkadsfIgrIYcE50,16859
38
40
  odoo/addons/shipment_advice/views/stock_move.xml,sha256=sQNoEgFOYNT4lUc4GRhDO9xWznjk-pPJqPVfzKoClnI,2275
39
41
  odoo/addons/shipment_advice/views/stock_move_line.xml,sha256=RJ-MCrapTt2uRhxHnEm7KFJmgz_ecQtsaHk_ah9RMos,3250
40
42
  odoo/addons/shipment_advice/views/stock_package_level.xml,sha256=0smz8ZWu9p6GsFn5Px3fSmFUZJgPif8wUJQBR1GFJoc,2171
41
- odoo/addons/shipment_advice/views/stock_picking.xml,sha256=R0TLnr9SE3s9-cN6KgIllvJSAMxFOGdeVQo3m5Vkgg4,8005
43
+ odoo/addons/shipment_advice/views/stock_picking.xml,sha256=gQh7ABERuDe6BU53eykYAJe2r11-p0zCJF7UkL6hXQ8,8062
42
44
  odoo/addons/shipment_advice/wizards/__init__.py,sha256=PWEljvfDbqYr3SrKAVpmaE25XvKFjuW2NCACSkyQzao,116
43
45
  odoo/addons/shipment_advice/wizards/load_shipment.py,sha256=eeoDAaYBDE94ZFb1NGcJhwAiW73zizUHbS5jvd7WK6w,8541
44
46
  odoo/addons/shipment_advice/wizards/load_shipment.xml,sha256=1kb49KAO08qWmYYGyskFojDvuUO11EuLMCK-XRpMx54,2734
@@ -48,7 +50,7 @@ odoo/addons/shipment_advice/wizards/unload_shipment.py,sha256=J0GtSHeykr5YsJH48a
48
50
  odoo/addons/shipment_advice/wizards/unload_shipment.xml,sha256=xYL7hKrlH11PfRPOV9uTGDeafSA7KlmZbm5AZ8icqyQ,1562
49
51
  odoo/addons/shipment_advice/wizards/unplan_shipment.py,sha256=zdzK3vRbZW0eY3iw9eOGxXhs5YDTjZhT9JBSyRoqqoM,4163
50
52
  odoo/addons/shipment_advice/wizards/unplan_shipment.xml,sha256=KX4lF5O-HOwcylK3odlqfQd-TDvQLTYtfsxptinIsIQ,1832
51
- odoo_addon_shipment_advice-16.0.1.5.0.dist-info/METADATA,sha256=vqICVKDSqw05KusAAzB1ZHR7VeB9HBkRnSa0-ifDK8M,4061
52
- odoo_addon_shipment_advice-16.0.1.5.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
53
- odoo_addon_shipment_advice-16.0.1.5.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
54
- odoo_addon_shipment_advice-16.0.1.5.0.dist-info/RECORD,,
53
+ odoo_addon_shipment_advice-16.0.1.6.0.dist-info/METADATA,sha256=zXTIdaELFoKtwfQjMqcXjgDF2MKsL46-g6X_hsQ9EE0,4112
54
+ odoo_addon_shipment_advice-16.0.1.6.0.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
55
+ odoo_addon_shipment_advice-16.0.1.6.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
56
+ odoo_addon_shipment_advice-16.0.1.6.0.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: bdist_wheel (0.44.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5