From 38b58dda95b0c0e2b9cf7fa19611d8c028cf46e5 Mon Sep 17 00:00:00 2001
From: ernesto <ernesto.tejeda87@gmail.com>
Date: Thu, 19 Sep 2019 13:04:31 -0400
Subject: [PATCH 01/32] [ADD] stock_product_pack: new module

---
 stock_product_pack/README.rst                 | 110 +++++
 stock_product_pack/__init__.py                |   2 +
 stock_product_pack/__manifest__.py            |  24 +
 stock_product_pack/i18n/es.po                 |  22 +
 stock_product_pack/models/__init__.py         |   3 +
 stock_product_pack/models/product_product.py  |  37 ++
 stock_product_pack/readme/CONFIGURE.rst       |   6 +
 stock_product_pack/readme/CONTRIBUTORS.rst    |   5 +
 stock_product_pack/readme/DESCRIPTION.rst     |   2 +
 stock_product_pack/readme/USAGE.rst           |   8 +
 .../static/description/index.html             | 452 ++++++++++++++++++
 stock_product_pack/tests/__init__.py          |   3 +
 .../tests/test_stock_product_pack.py          |  80 ++++
 13 files changed, 754 insertions(+)
 create mode 100644 stock_product_pack/README.rst
 create mode 100644 stock_product_pack/__init__.py
 create mode 100644 stock_product_pack/__manifest__.py
 create mode 100644 stock_product_pack/i18n/es.po
 create mode 100644 stock_product_pack/models/__init__.py
 create mode 100644 stock_product_pack/models/product_product.py
 create mode 100644 stock_product_pack/readme/CONFIGURE.rst
 create mode 100644 stock_product_pack/readme/CONTRIBUTORS.rst
 create mode 100644 stock_product_pack/readme/DESCRIPTION.rst
 create mode 100644 stock_product_pack/readme/USAGE.rst
 create mode 100644 stock_product_pack/static/description/index.html
 create mode 100644 stock_product_pack/tests/__init__.py
 create mode 100644 stock_product_pack/tests/test_stock_product_pack.py

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
new file mode 100644
index 000000000..856de3a65
--- /dev/null
+++ b/stock_product_pack/README.rst
@@ -0,0 +1,110 @@
+==================
+Stock product Pack
+==================
+
+.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! This file is generated by oca-gen-addon-readme !!
+   !! changes will be overwritten.                   !!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
+    :target: https://odoo-community.org/page/development-status
+    :alt: Beta
+.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
+    :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
+    :alt: License: AGPL-3
+.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
+    :target: https://github.com/OCA/product-pack/tree/12.0/stock_product_pack
+    :alt: OCA/product-pack
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+    :target: https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack
+    :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
+    :target: https://runbot.odoo-community.org/runbot/286/12.0
+    :alt: Try me on Runbot
+
+|badge1| |badge2| |badge3| |badge4| |badge5| 
+
+This module allows you to get the right available *On Hand* and *Forecasted*
+quantities of the packs.
+
+**Table of contents**
+
+.. contents::
+   :local:
+
+Configuration
+=============
+
+To configure this module, you need to:
+
+#. Go to *Inventory -> Master Data -> Product*, create a product and check
+   "Is Pack?" field, then set the products has to include in the Pack.
+#. Set type of product pack.
+
+
+Usage
+=====
+
+To use this module, you need to:
+
+#. Go to *Inventory -> Operations -> Transfers* and create transfer related to
+   components of a Pack 'X'.
+#. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X' and you
+   will see in the smart buttons that show *On Hand* and *Forecasted* the
+   quantities based on the *On Hand* and *Forecasted* quantities of
+   its components. That is the minimum quantities of its components.
+
+Bug Tracker
+===========
+
+Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+~~~~~~~
+
+* NaN·tic
+* ADHOC SA
+* Tecnativa
+
+Contributors
+~~~~~~~~~~~~
+
+* `Tecnativa <https://www.tecnativa.com>`_:
+
+  * Ernesto Tejeda
+  * Pedro M. Baeza
+  * Sergio Teruel
+
+Maintainers
+~~~~~~~~~~~
+
+This module is maintained by the OCA.
+
+.. image:: https://odoo-community.org/logo.png
+   :alt: Odoo Community Association
+   :target: https://odoo-community.org
+
+OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.
+
+.. |maintainer-ernestotejeda| image:: https://github.com/ernestotejeda.png?size=40px
+    :target: https://github.com/ernestotejeda
+    :alt: ernestotejeda
+
+Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
+
+|maintainer-ernestotejeda| 
+
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/12.0/stock_product_pack>`_ project on GitHub.
+
+You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/__init__.py b/stock_product_pack/__init__.py
new file mode 100644
index 000000000..cb45f2710
--- /dev/null
+++ b/stock_product_pack/__init__.py
@@ -0,0 +1,2 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+from . import models
diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
new file mode 100644
index 000000000..81689daf4
--- /dev/null
+++ b/stock_product_pack/__manifest__.py
@@ -0,0 +1,24 @@
+# Copyright 2019 NaN (http://www.nan-tic.com) - Àngel Àlvarez
+# Copyright 2019 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+{
+    'name': 'Stock product Pack',
+    'version': '12.0.1.0.0',
+    'category': 'Warehouse',
+    'summary': 'This module allows you to get the right available quantities '
+               'of the packs',
+    'website': 'https://github.com/OCA/product-pack',
+    'author': 'NaN·tic, '
+              'ADHOC SA, '
+              'Tecnativa, '
+              'Odoo Community Association (OCA)',
+    'maintainers': ['ernestotejeda'],
+    'license': 'AGPL-3',
+    'depends': [
+        'product_pack',
+        'stock',
+    ],
+    'installable': True,
+    'auto_install': True,
+    'application': False,
+}
diff --git a/stock_product_pack/i18n/es.po b/stock_product_pack/i18n/es.po
new file mode 100644
index 000000000..15ebbb444
--- /dev/null
+++ b/stock_product_pack/i18n/es.po
@@ -0,0 +1,22 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* stock_product_pack
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-09-18 14:54+0000\n"
+"PO-Revision-Date: 2019-09-18 14:54+0000\n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product"
+msgstr "Producto"
+
diff --git a/stock_product_pack/models/__init__.py b/stock_product_pack/models/__init__.py
new file mode 100644
index 000000000..586a7eff4
--- /dev/null
+++ b/stock_product_pack/models/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import product_product
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
new file mode 100644
index 000000000..f7c75a690
--- /dev/null
+++ b/stock_product_pack/models/product_product.py
@@ -0,0 +1,37 @@
+# Copyright 2019 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import models
+import math
+
+
+class ProductProduct(models.Model):
+    _inherit = 'product.product'
+
+    def _compute_quantities_dict(
+            self, lot_id, owner_id, package_id,
+            from_date=False, to_date=False):
+        res = super()._compute_quantities_dict(
+            lot_id, owner_id, package_id, from_date=from_date, to_date=to_date)
+        packs = self.filtered('pack_ok')
+        for product in packs.with_context(prefetch_fields=False):
+            pack_qty_available = []
+            pack_virtual_available = []
+            for subproduct in product.pack_line_ids:
+                subproduct_stock = subproduct.product_id
+                sub_qty = subproduct.quantity
+                if sub_qty:
+                    pack_qty_available.append(math.floor(
+                        subproduct_stock.qty_available / sub_qty))
+                    pack_virtual_available.append(math.floor(
+                        subproduct_stock.virtual_available / sub_qty))
+            res[product.id] = {
+                'qty_available': (
+                    pack_qty_available and min(pack_qty_available) or False),
+                'incoming_qty': 0,
+                'outgoing_qty': 0,
+                'virtual_available': (
+                    pack_virtual_available and
+                    min(pack_virtual_available) or False),
+            }
+        return res
diff --git a/stock_product_pack/readme/CONFIGURE.rst b/stock_product_pack/readme/CONFIGURE.rst
new file mode 100644
index 000000000..158211068
--- /dev/null
+++ b/stock_product_pack/readme/CONFIGURE.rst
@@ -0,0 +1,6 @@
+To configure this module, you need to:
+
+#. Go to *Inventory -> Master Data -> Product*, create a product and check
+   "Is Pack?" field, then set the products has to include in the Pack.
+#. Set type of product pack.
+
diff --git a/stock_product_pack/readme/CONTRIBUTORS.rst b/stock_product_pack/readme/CONTRIBUTORS.rst
new file mode 100644
index 000000000..0c7110256
--- /dev/null
+++ b/stock_product_pack/readme/CONTRIBUTORS.rst
@@ -0,0 +1,5 @@
+* `Tecnativa <https://www.tecnativa.com>`_:
+
+  * Ernesto Tejeda
+  * Pedro M. Baeza
+  * Sergio Teruel
diff --git a/stock_product_pack/readme/DESCRIPTION.rst b/stock_product_pack/readme/DESCRIPTION.rst
new file mode 100644
index 000000000..f93336075
--- /dev/null
+++ b/stock_product_pack/readme/DESCRIPTION.rst
@@ -0,0 +1,2 @@
+This module allows you to get the right available *On Hand* and *Forecasted*
+quantities of the packs.
diff --git a/stock_product_pack/readme/USAGE.rst b/stock_product_pack/readme/USAGE.rst
new file mode 100644
index 000000000..db8b69e59
--- /dev/null
+++ b/stock_product_pack/readme/USAGE.rst
@@ -0,0 +1,8 @@
+To use this module, you need to:
+
+#. Go to *Inventory -> Operations -> Transfers* and create transfer related to
+   components of a Pack 'X'.
+#. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X' and you
+   will see in the smart buttons that show *On Hand* and *Forecasted* the
+   quantities based on the *On Hand* and *Forecasted* quantities of
+   its components. That is the minimum quantities of its components.
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
new file mode 100644
index 000000000..1db793079
--- /dev/null
+++ b/stock_product_pack/static/description/index.html
@@ -0,0 +1,452 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<title>Stock product Pack</title>
+<style type="text/css">
+
+/*
+:Author: David Goodger (goodger@python.org)
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Copyright: This stylesheet has been placed in the public domain.
+
+Default cascading style sheet for the HTML output of Docutils.
+
+See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+customize this style sheet.
+*/
+
+/* used to remove borders from tables and images */
+.borderless, table.borderless td, table.borderless th {
+  border: 0 }
+
+table.borderless td, table.borderless th {
+  /* Override padding for "table.docutils td" with "! important".
+     The right padding separates the table cells. */
+  padding: 0 0.5em 0 0 ! important }
+
+.first {
+  /* Override more specific margin styles with "! important". */
+  margin-top: 0 ! important }
+
+.last, .with-subtitle {
+  margin-bottom: 0 ! important }
+
+.hidden {
+  display: none }
+
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
+a.toc-backref {
+  text-decoration: none ;
+  color: black }
+
+blockquote.epigraph {
+  margin: 2em 5em ; }
+
+dl.docutils dd {
+  margin-bottom: 0.5em }
+
+object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
+  overflow: hidden;
+}
+
+/* Uncomment (and remove this text!) to get bold-faced definition list terms
+dl.docutils dt {
+  font-weight: bold }
+*/
+
+div.abstract {
+  margin: 2em 5em }
+
+div.abstract p.topic-title {
+  font-weight: bold ;
+  text-align: center }
+
+div.admonition, div.attention, div.caution, div.danger, div.error,
+div.hint, div.important, div.note, div.tip, div.warning {
+  margin: 2em ;
+  border: medium outset ;
+  padding: 1em }
+
+div.admonition p.admonition-title, div.hint p.admonition-title,
+div.important p.admonition-title, div.note p.admonition-title,
+div.tip p.admonition-title {
+  font-weight: bold ;
+  font-family: sans-serif }
+
+div.attention p.admonition-title, div.caution p.admonition-title,
+div.danger p.admonition-title, div.error p.admonition-title,
+div.warning p.admonition-title, .code .error {
+  color: red ;
+  font-weight: bold ;
+  font-family: sans-serif }
+
+/* Uncomment (and remove this text!) to get reduced vertical space in
+   compound paragraphs.
+div.compound .compound-first, div.compound .compound-middle {
+  margin-bottom: 0.5em }
+
+div.compound .compound-last, div.compound .compound-middle {
+  margin-top: 0.5em }
+*/
+
+div.dedication {
+  margin: 2em 5em ;
+  text-align: center ;
+  font-style: italic }
+
+div.dedication p.topic-title {
+  font-weight: bold ;
+  font-style: normal }
+
+div.figure {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+div.footer, div.header {
+  clear: both;
+  font-size: smaller }
+
+div.line-block {
+  display: block ;
+  margin-top: 1em ;
+  margin-bottom: 1em }
+
+div.line-block div.line-block {
+  margin-top: 0 ;
+  margin-bottom: 0 ;
+  margin-left: 1.5em }
+
+div.sidebar {
+  margin: 0 0 0.5em 1em ;
+  border: medium outset ;
+  padding: 1em ;
+  background-color: #ffffee ;
+  width: 40% ;
+  float: right ;
+  clear: right }
+
+div.sidebar p.rubric {
+  font-family: sans-serif ;
+  font-size: medium }
+
+div.system-messages {
+  margin: 5em }
+
+div.system-messages h1 {
+  color: red }
+
+div.system-message {
+  border: medium outset ;
+  padding: 1em }
+
+div.system-message p.system-message-title {
+  color: red ;
+  font-weight: bold }
+
+div.topic {
+  margin: 2em }
+
+h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
+h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
+  margin-top: 0.4em }
+
+h1.title {
+  text-align: center }
+
+h2.subtitle {
+  text-align: center }
+
+hr.docutils {
+  width: 75% }
+
+img.align-left, .figure.align-left, object.align-left, table.align-left {
+  clear: left ;
+  float: left ;
+  margin-right: 1em }
+
+img.align-right, .figure.align-right, object.align-right, table.align-right {
+  clear: right ;
+  float: right ;
+  margin-left: 1em }
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+  text-align: left }
+
+.align-center {
+  clear: both ;
+  text-align: center }
+
+.align-right {
+  text-align: right }
+
+/* reset inner alignment in figures */
+div.align-right {
+  text-align: inherit }
+
+/* div.align-center * { */
+/*   text-align: left } */
+
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
+ol.simple, ul.simple {
+  margin-bottom: 1em }
+
+ol.arabic {
+  list-style: decimal }
+
+ol.loweralpha {
+  list-style: lower-alpha }
+
+ol.upperalpha {
+  list-style: upper-alpha }
+
+ol.lowerroman {
+  list-style: lower-roman }
+
+ol.upperroman {
+  list-style: upper-roman }
+
+p.attribution {
+  text-align: right ;
+  margin-left: 50% }
+
+p.caption {
+  font-style: italic }
+
+p.credits {
+  font-style: italic ;
+  font-size: smaller }
+
+p.label {
+  white-space: nowrap }
+
+p.rubric {
+  font-weight: bold ;
+  font-size: larger ;
+  color: maroon ;
+  text-align: center }
+
+p.sidebar-title {
+  font-family: sans-serif ;
+  font-weight: bold ;
+  font-size: larger }
+
+p.sidebar-subtitle {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+p.topic-title {
+  font-weight: bold }
+
+pre.address {
+  margin-bottom: 0 ;
+  margin-top: 0 ;
+  font: inherit }
+
+pre.literal-block, pre.doctest-block, pre.math, pre.code {
+  margin-left: 2em ;
+  margin-right: 2em }
+
+pre.code .ln { color: grey; } /* line numbers */
+pre.code, code { background-color: #eeeeee }
+pre.code .comment, code .comment { color: #5C6576 }
+pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
+pre.code .literal.string, code .literal.string { color: #0C5404 }
+pre.code .name.builtin, code .name.builtin { color: #352B84 }
+pre.code .deleted, code .deleted { background-color: #DEB0A1}
+pre.code .inserted, code .inserted { background-color: #A3D289}
+
+span.classifier {
+  font-family: sans-serif ;
+  font-style: oblique }
+
+span.classifier-delimiter {
+  font-family: sans-serif ;
+  font-weight: bold }
+
+span.interpreted {
+  font-family: sans-serif }
+
+span.option {
+  white-space: nowrap }
+
+span.pre {
+  white-space: pre }
+
+span.problematic {
+  color: red }
+
+span.section-subtitle {
+  /* font-size relative to parent (h1..h6 element) */
+  font-size: 80% }
+
+table.citation {
+  border-left: solid 1px gray;
+  margin-left: 1px }
+
+table.docinfo {
+  margin: 2em 4em }
+
+table.docutils {
+  margin-top: 0.5em ;
+  margin-bottom: 0.5em }
+
+table.footnote {
+  border-left: solid 1px black;
+  margin-left: 1px }
+
+table.docutils td, table.docutils th,
+table.docinfo td, table.docinfo th {
+  padding-left: 0.5em ;
+  padding-right: 0.5em ;
+  vertical-align: top }
+
+table.docutils th.field-name, table.docinfo th.docinfo-name {
+  font-weight: bold ;
+  text-align: left ;
+  white-space: nowrap ;
+  padding-left: 0 }
+
+/* "booktabs" style (no vertical lines) */
+table.docutils.booktabs {
+  border: 0px;
+  border-top: 2px solid;
+  border-bottom: 2px solid;
+  border-collapse: collapse;
+}
+table.docutils.booktabs * {
+  border: 0px;
+}
+table.docutils.booktabs th {
+  border-bottom: thin solid;
+  text-align: left;
+}
+
+h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
+h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
+  font-size: 100% }
+
+ul.auto-toc {
+  list-style-type: none }
+
+</style>
+</head>
+<body>
+<div class="document" id="stock-product-pack">
+<h1 class="title">Stock product Pack</h1>
+
+<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! This file is generated by oca-gen-addon-readme !!
+!! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
+<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/12.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p>This module allows you to get the right available <em>On Hand</em> and <em>Forecasted</em>
+quantities of the packs.</p>
+<p><strong>Table of contents</strong></p>
+<div class="contents local topic" id="contents">
+<ul class="simple">
+<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
+<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="configuration">
+<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
+<p>To configure this module, you need to:</p>
+<ol class="arabic simple">
+<li>Go to <em>Inventory -&gt; Master Data -&gt; Product</em>, create a product and check
+“Is Pack?” field, then set the products has to include in the Pack.</li>
+<li>Set type of product pack.</li>
+</ol>
+</div>
+<div class="section" id="usage">
+<h1><a class="toc-backref" href="#id2">Usage</a></h1>
+<p>To use this module, you need to:</p>
+<ol class="arabic simple">
+<li>Go to <em>Inventory -&gt; Operations -&gt; Transfers</em> and create transfer related to
+components of a Pack ‘X’.</li>
+<li>Then go to <em>Inventory -&gt; Master Data -&gt; Product</em>, find the Pack ‘X’ and you
+will see in the smart buttons that show <em>On Hand</em> and <em>Forecasted</em> the
+quantities based on the <em>On Hand</em> and <em>Forecasted</em> quantities of
+its components. That is the minimum quantities of its components.</li>
+</ol>
+</div>
+<div class="section" id="bug-tracker">
+<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
+<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
+In case of trouble, please check there if your issue has already been reported.
+If you spotted it first, help us smashing it by providing a detailed and welcomed
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<p>Do not contact contributors directly about support or help with technical issues.</p>
+</div>
+<div class="section" id="credits">
+<h1><a class="toc-backref" href="#id4">Credits</a></h1>
+<div class="section" id="authors">
+<h2><a class="toc-backref" href="#id5">Authors</a></h2>
+<ul class="simple">
+<li>NaN·tic</li>
+<li>ADHOC SA</li>
+<li>Tecnativa</li>
+</ul>
+</div>
+<div class="section" id="contributors">
+<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
+<ul class="simple">
+<li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
+<li>Ernesto Tejeda</li>
+<li>Pedro M. Baeza</li>
+<li>Sergio Teruel</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="section" id="maintainers">
+<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
+<p>This module is maintained by the OCA.</p>
+<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
+<p>OCA, or the Odoo Community Association, is a nonprofit organization whose
+mission is to support the collaborative development of Odoo features and
+promote its widespread use.</p>
+<p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
+<p><a class="reference external" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/12.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
+</div>
+</div>
+</div>
+</body>
+</html>
diff --git a/stock_product_pack/tests/__init__.py b/stock_product_pack/tests/__init__.py
new file mode 100644
index 000000000..21c96b0cc
--- /dev/null
+++ b/stock_product_pack/tests/__init__.py
@@ -0,0 +1,3 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from . import test_stock_product_pack
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
new file mode 100644
index 000000000..2c6ff7440
--- /dev/null
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -0,0 +1,80 @@
+# Copyright 2019 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo.tests import SavepointCase
+import logging
+
+_logger = logging.getLogger(__name__)
+
+
+class TestSaleProductPack(SavepointCase):
+
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        category_all_id = cls.env.ref('product.product_category_all').id
+        product_obj = cls.env['product.product']
+        cls.pack_dc = cls.env['product.product'].create({
+            'name': 'Pack',
+            'type': 'product',
+            'pack_ok': True,
+            'pack_type': 'detailed',
+            'pack_component_price': 'detailed',
+            'categ_id': category_all_id,
+            'pack_line_ids': [
+                (0, 0, {
+                    'product_id': product_obj.create({
+                        'name': 'Component 1',
+                        'type': 'product',
+                        'categ_id': category_all_id,
+                    }).id,
+                    'quantity': 1,
+                }),
+                (0, 0, {
+                    'product_id': product_obj.create({
+                        'name': 'Component 2',
+                        'type': 'product',
+                        'categ_id': category_all_id,
+                    }).id,
+                    'quantity': 1,
+                }),
+            ]
+        })
+
+    def test_compute_quantities_dict(self):
+        location_id = self.env.ref('stock.stock_location_suppliers').id,
+        location_dest_id = self.env.ref('stock.stock_location_stock').id,
+        components = self.pack_dc.pack_line_ids.mapped('product_id')
+        picking = self.env['stock.picking'].create({
+            'partner_id': self.env.ref('base.res_partner_4').id,
+            'picking_type_id': self.env.ref('stock.picking_type_in').id,
+            'location_id': location_id,
+            'location_dest_id': location_dest_id,
+            'move_lines': [
+                (0, 0, {
+                    'name': 'incoming_move_test_01',
+                    'product_id': components[0].id,
+                    'product_uom_qty': 5,
+                    'product_uom': components[0].uom_id.id,
+                    'location_id': location_id,
+                    'location_dest_id': location_dest_id,
+                }),
+                (0, 0, {
+                    'name': 'incoming_move_test_02',
+                    'product_id': components[1].id,
+                    'product_uom_qty': 7,
+                    'product_uom': components[1].uom_id.id,
+                    'location_id': location_id,
+                    'location_dest_id': location_dest_id,
+                }),
+            ]
+        })
+        picking.action_confirm()
+        self.assertEqual(self.pack_dc.virtual_available, 5)
+        self.assertEqual(self.pack_dc.qty_available, 0)
+        wizard_dict = picking.button_validate()
+        wizard = self.env[wizard_dict['res_model']].browse(
+            wizard_dict['res_id'])
+        wizard.process()
+        self.assertEqual(self.pack_dc.virtual_available, 5)
+        self.assertEqual(self.pack_dc.qty_available, 5)

From cefad52e755c340f809f458f6d5b814be5085a1b Mon Sep 17 00:00:00 2001
From: OCA-git-bot <oca-git-bot@odoo-community.org>
Date: Tue, 22 Oct 2019 15:57:07 +0000
Subject: [PATCH 02/32] [ADD] icon.png

---
 stock_product_pack/i18n/es.po                 |   4 ++--
 .../i18n/stock_product_pack.pot               |  20 ++++++++++++++++++
 .../static/description/icon.png               | Bin 0 -> 9455 bytes
 3 files changed, 22 insertions(+), 2 deletions(-)
 create mode 100644 stock_product_pack/i18n/stock_product_pack.pot
 create mode 100644 stock_product_pack/static/description/icon.png

diff --git a/stock_product_pack/i18n/es.po b/stock_product_pack/i18n/es.po
index 15ebbb444..9be1296dc 100644
--- a/stock_product_pack/i18n/es.po
+++ b/stock_product_pack/i18n/es.po
@@ -1,6 +1,6 @@
 # Translation of Odoo Server.
 # This file contains the translation of the following modules:
-#	* stock_product_pack
+# 	* stock_product_pack
 #
 msgid ""
 msgstr ""
@@ -10,6 +10,7 @@ msgstr ""
 "PO-Revision-Date: 2019-09-18 14:54+0000\n"
 "Last-Translator: <>\n"
 "Language-Team: \n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
@@ -19,4 +20,3 @@ msgstr ""
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
 msgstr "Producto"
-
diff --git a/stock_product_pack/i18n/stock_product_pack.pot b/stock_product_pack/i18n/stock_product_pack.pot
new file mode 100644
index 000000000..9a5bc0927
--- /dev/null
+++ b/stock_product_pack/i18n/stock_product_pack.pot
@@ -0,0 +1,20 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* stock_product_pack
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: <>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product"
+msgstr ""
+
diff --git a/stock_product_pack/static/description/icon.png b/stock_product_pack/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I

literal 0
HcmV?d00001


From 27b74301179d64108baf9138bf099d11f5de52aa Mon Sep 17 00:00:00 2001
From: ernesto <ernesto.tejeda87@gmail.com>
Date: Tue, 22 Oct 2019 16:20:03 -0400
Subject: [PATCH 03/32] [IMP] stock_product_pack: improve description and usage
 readme section

---
 stock_product_pack/README.rst                 | 17 +++-----
 stock_product_pack/readme/CONFIGURE.rst       |  6 ---
 stock_product_pack/readme/DESCRIPTION.rst     |  4 +-
 stock_product_pack/readme/USAGE.rst           |  3 ++
 .../static/description/index.html             | 41 ++++++++-----------
 5 files changed, 27 insertions(+), 44 deletions(-)
 delete mode 100644 stock_product_pack/readme/CONFIGURE.rst

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index 856de3a65..4624f0a10 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -25,29 +25,22 @@ Stock product Pack
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
 
-This module allows you to get the right available *On Hand* and *Forecasted*
-quantities of the packs.
+This module allows you to get *On Hand* and *Forecasted* values calculated from
+components of the pack.
 
 **Table of contents**
 
 .. contents::
    :local:
 
-Configuration
-=============
-
-To configure this module, you need to:
-
-#. Go to *Inventory -> Master Data -> Product*, create a product and check
-   "Is Pack?" field, then set the products has to include in the Pack.
-#. Set type of product pack.
-
-
 Usage
 =====
 
 To use this module, you need to:
 
+#. Go to *Inventory -> Master Data -> Product*, create a product and check
+   "Is Pack?" field then set Pack Type and Pack component price.
+#. Choose products to include in the pack.
 #. Go to *Inventory -> Operations -> Transfers* and create transfer related to
    components of a Pack 'X'.
 #. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X' and you
diff --git a/stock_product_pack/readme/CONFIGURE.rst b/stock_product_pack/readme/CONFIGURE.rst
deleted file mode 100644
index 158211068..000000000
--- a/stock_product_pack/readme/CONFIGURE.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-To configure this module, you need to:
-
-#. Go to *Inventory -> Master Data -> Product*, create a product and check
-   "Is Pack?" field, then set the products has to include in the Pack.
-#. Set type of product pack.
-
diff --git a/stock_product_pack/readme/DESCRIPTION.rst b/stock_product_pack/readme/DESCRIPTION.rst
index f93336075..b7a03ce15 100644
--- a/stock_product_pack/readme/DESCRIPTION.rst
+++ b/stock_product_pack/readme/DESCRIPTION.rst
@@ -1,2 +1,2 @@
-This module allows you to get the right available *On Hand* and *Forecasted*
-quantities of the packs.
+This module allows you to get *On Hand* and *Forecasted* values calculated from
+components of the pack.
diff --git a/stock_product_pack/readme/USAGE.rst b/stock_product_pack/readme/USAGE.rst
index db8b69e59..40b2439e7 100644
--- a/stock_product_pack/readme/USAGE.rst
+++ b/stock_product_pack/readme/USAGE.rst
@@ -1,5 +1,8 @@
 To use this module, you need to:
 
+#. Go to *Inventory -> Master Data -> Product*, create a product and check
+   "Is Pack?" field then set Pack Type and Pack component price.
+#. Choose products to include in the pack.
 #. Go to *Inventory -> Operations -> Transfers* and create transfer related to
    components of a Pack 'X'.
 #. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X' and you
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index 1db793079..5af35443f 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -368,35 +368,28 @@ <h1 class="title">Stock product Pack</h1>
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
 <p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/12.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
-<p>This module allows you to get the right available <em>On Hand</em> and <em>Forecasted</em>
-quantities of the packs.</p>
+<p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
+components of the pack.</p>
 <p><strong>Table of contents</strong></p>
 <div class="contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#configuration" id="id1">Configuration</a></li>
-<li><a class="reference internal" href="#usage" id="id2">Usage</a></li>
-<li><a class="reference internal" href="#bug-tracker" id="id3">Bug Tracker</a></li>
-<li><a class="reference internal" href="#credits" id="id4">Credits</a><ul>
-<li><a class="reference internal" href="#authors" id="id5">Authors</a></li>
-<li><a class="reference internal" href="#contributors" id="id6">Contributors</a></li>
-<li><a class="reference internal" href="#maintainers" id="id7">Maintainers</a></li>
+<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
 </ul>
 </li>
 </ul>
 </div>
-<div class="section" id="configuration">
-<h1><a class="toc-backref" href="#id1">Configuration</a></h1>
-<p>To configure this module, you need to:</p>
-<ol class="arabic simple">
-<li>Go to <em>Inventory -&gt; Master Data -&gt; Product</em>, create a product and check
-“Is Pack?” field, then set the products has to include in the Pack.</li>
-<li>Set type of product pack.</li>
-</ol>
-</div>
 <div class="section" id="usage">
-<h1><a class="toc-backref" href="#id2">Usage</a></h1>
+<h1><a class="toc-backref" href="#id1">Usage</a></h1>
 <p>To use this module, you need to:</p>
 <ol class="arabic simple">
+<li>Go to <em>Inventory -&gt; Master Data -&gt; Product</em>, create a product and check
+“Is Pack?” field then set Pack Type and Pack component price.</li>
+<li>Choose products to include in the pack.</li>
 <li>Go to <em>Inventory -&gt; Operations -&gt; Transfers</em> and create transfer related to
 components of a Pack ‘X’.</li>
 <li>Then go to <em>Inventory -&gt; Master Data -&gt; Product</em>, find the Pack ‘X’ and you
@@ -406,7 +399,7 @@ <h1><a class="toc-backref" href="#id2">Usage</a></h1>
 </ol>
 </div>
 <div class="section" id="bug-tracker">
-<h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
+<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
@@ -414,9 +407,9 @@ <h1><a class="toc-backref" href="#id3">Bug Tracker</a></h1>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
-<h1><a class="toc-backref" href="#id4">Credits</a></h1>
+<h1><a class="toc-backref" href="#id3">Credits</a></h1>
 <div class="section" id="authors">
-<h2><a class="toc-backref" href="#id5">Authors</a></h2>
+<h2><a class="toc-backref" href="#id4">Authors</a></h2>
 <ul class="simple">
 <li>NaN·tic</li>
 <li>ADHOC SA</li>
@@ -424,7 +417,7 @@ <h2><a class="toc-backref" href="#id5">Authors</a></h2>
 </ul>
 </div>
 <div class="section" id="contributors">
-<h2><a class="toc-backref" href="#id6">Contributors</a></h2>
+<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
 <ul class="simple">
 <li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
 <li>Ernesto Tejeda</li>
@@ -435,7 +428,7 @@ <h2><a class="toc-backref" href="#id6">Contributors</a></h2>
 </ul>
 </div>
 <div class="section" id="maintainers">
-<h2><a class="toc-backref" href="#id7">Maintainers</a></h2>
+<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
 <p>This module is maintained by the OCA.</p>
 <a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose

From e11770ea134c08d77537094fdd120f4c86bf3c23 Mon Sep 17 00:00:00 2001
From: Pedro Castro Silva <pedrocs@exo.pt>
Date: Thu, 12 Dec 2019 19:31:43 +0000
Subject: [PATCH 04/32] Added translation using Weblate (Portuguese)

---
 stock_product_pack/i18n/pt.po | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
 create mode 100644 stock_product_pack/i18n/pt.po

diff --git a/stock_product_pack/i18n/pt.po b/stock_product_pack/i18n/pt.po
new file mode 100644
index 000000000..0977feefd
--- /dev/null
+++ b/stock_product_pack/i18n/pt.po
@@ -0,0 +1,20 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* stock_product_pack
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: pt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product"
+msgstr ""

From a29452ae1a3cd561ef43c08da06a0b93b9315038 Mon Sep 17 00:00:00 2001
From: Pedro Castro Silva <pedrocs@exo.pt>
Date: Thu, 12 Dec 2019 19:31:53 +0000
Subject: [PATCH 05/32] Translated using Weblate (Portuguese)

Currently translated at 100.0% (1 of 1 strings)

Translation: product-pack-12.0/product-pack-12.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack/pt/
---
 stock_product_pack/i18n/pt.po | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/stock_product_pack/i18n/pt.po b/stock_product_pack/i18n/pt.po
index 0977feefd..99ce2bd80 100644
--- a/stock_product_pack/i18n/pt.po
+++ b/stock_product_pack/i18n/pt.po
@@ -6,15 +6,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 12.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2019-12-12 22:05+0000\n"
+"Last-Translator: Pedro Castro Silva <pedrocs@exo.pt>\n"
 "Language-Team: none\n"
 "Language: pt\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 3.9.1\n"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
-msgstr ""
+msgstr "Produto"

From a556801f64d6ff123b9e0c9750186a6cc2f6f703 Mon Sep 17 00:00:00 2001
From: Azucena Luque <azucena@trey.es>
Date: Wed, 29 Apr 2020 15:11:10 +0200
Subject: [PATCH 06/32] [FIX] stock_product_pack: only use stockable products
 to calculate the stock.

---
 stock_product_pack/__manifest__.py               |  2 +-
 stock_product_pack/models/product_product.py     |  4 +++-
 .../tests/test_stock_product_pack.py             | 16 ++++++++++++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 81689daf4..1eb726382 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -3,7 +3,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     'name': 'Stock product Pack',
-    'version': '12.0.1.0.0',
+    'version': '12.0.1.0.1',
     'category': 'Warehouse',
     'summary': 'This module allows you to get the right available quantities '
                'of the packs',
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index f7c75a690..78b0f9467 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -17,7 +17,9 @@ def _compute_quantities_dict(
         for product in packs.with_context(prefetch_fields=False):
             pack_qty_available = []
             pack_virtual_available = []
-            for subproduct in product.pack_line_ids:
+            subproducts = product.pack_line_ids.filtered(
+                lambda p: p.product_id.type == 'product')
+            for subproduct in subproducts:
                 subproduct_stock = subproduct.product_id
                 sub_qty = subproduct.quantity
                 if sub_qty:
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index 2c6ff7440..0211d9852 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -38,6 +38,22 @@ def setUpClass(cls):
                     }).id,
                     'quantity': 1,
                 }),
+                (0, 0, {
+                    'product_id': product_obj.create({
+                        'name': 'Component 3',
+                        'type': 'service',
+                        'categ_id': category_all_id,
+                    }).id,
+                    'quantity': 1,
+                }),
+                (0, 0, {
+                    'product_id': product_obj.create({
+                        'name': 'Component 4',
+                        'type': 'consu',
+                        'categ_id': category_all_id,
+                    }).id,
+                    'quantity': 1,
+                }),
             ]
         })
 

From 81dacecb51268a05d749d23b45907bfa70159b4e Mon Sep 17 00:00:00 2001
From: Yann Papouin <y.papouin@dec-industrie.com>
Date: Thu, 28 May 2020 09:23:10 +0000
Subject: [PATCH 07/32] Added translation using Weblate (French)

---
 stock_product_pack/i18n/fr.po | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
 create mode 100644 stock_product_pack/i18n/fr.po

diff --git a/stock_product_pack/i18n/fr.po b/stock_product_pack/i18n/fr.po
new file mode 100644
index 000000000..1ae854f65
--- /dev/null
+++ b/stock_product_pack/i18n/fr.po
@@ -0,0 +1,20 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+#	* stock_product_pack
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 12.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: fr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product"
+msgstr ""

From 5686e7053e05df1ddc91c7ac99b519aa564544f3 Mon Sep 17 00:00:00 2001
From: Yann Papouin <y.papouin@dec-industrie.com>
Date: Thu, 28 May 2020 09:23:29 +0000
Subject: [PATCH 08/32] Translated using Weblate (French)

Currently translated at 100.0% (1 of 1 strings)

Translation: product-pack-12.0/product-pack-12.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack/fr/
---
 stock_product_pack/i18n/fr.po | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/stock_product_pack/i18n/fr.po b/stock_product_pack/i18n/fr.po
index 1ae854f65..4e06b0c76 100644
--- a/stock_product_pack/i18n/fr.po
+++ b/stock_product_pack/i18n/fr.po
@@ -6,15 +6,17 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 12.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2020-05-28 12:19+0000\n"
+"Last-Translator: Yann Papouin <y.papouin@dec-industrie.com>\n"
 "Language-Team: none\n"
 "Language: fr\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 3.10\n"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
-msgstr ""
+msgstr "Article"

From c6fe7cf25461a41347dac9fa768433553b1f4501 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Marques?= <joao.marques@tecnativa.com>
Date: Fri, 18 Sep 2020 15:43:01 +0200
Subject: [PATCH 09/32] [IMP] stock_product_pack: black, isort, prettier

---
 stock_product_pack/__manifest__.py            |  32 ++-
 stock_product_pack/models/product_product.py  |  42 ++--
 .../tests/test_stock_product_pack.py          | 185 +++++++++++-------
 3 files changed, 147 insertions(+), 112 deletions(-)

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 1eb726382..e3ce18c7e 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -2,23 +2,17 @@
 # Copyright 2019 Tecnativa - Ernesto Tejeda
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
-    'name': 'Stock product Pack',
-    'version': '12.0.1.0.1',
-    'category': 'Warehouse',
-    'summary': 'This module allows you to get the right available quantities '
-               'of the packs',
-    'website': 'https://github.com/OCA/product-pack',
-    'author': 'NaN·tic, '
-              'ADHOC SA, '
-              'Tecnativa, '
-              'Odoo Community Association (OCA)',
-    'maintainers': ['ernestotejeda'],
-    'license': 'AGPL-3',
-    'depends': [
-        'product_pack',
-        'stock',
-    ],
-    'installable': True,
-    'auto_install': True,
-    'application': False,
+    "name": "Stock product Pack",
+    "version": "12.0.1.0.1",
+    "category": "Warehouse",
+    "summary": "This module allows you to get the right available quantities "
+    "of the packs",
+    "website": "https://github.com/OCA/product-pack",
+    "author": "NaN·tic, " "ADHOC SA, " "Tecnativa, " "Odoo Community Association (OCA)",
+    "maintainers": ["ernestotejeda"],
+    "license": "AGPL-3",
+    "depends": ["product_pack", "stock",],
+    "installable": True,
+    "auto_install": True,
+    "application": False,
 }
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index 78b0f9467..c7fc541d9 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -1,39 +1,45 @@
 # Copyright 2019 Tecnativa - Ernesto Tejeda
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import models
 import math
 
+from odoo import models
+
 
 class ProductProduct(models.Model):
-    _inherit = 'product.product'
+    _inherit = "product.product"
 
     def _compute_quantities_dict(
-            self, lot_id, owner_id, package_id,
-            from_date=False, to_date=False):
+        self, lot_id, owner_id, package_id, from_date=False, to_date=False
+    ):
         res = super()._compute_quantities_dict(
-            lot_id, owner_id, package_id, from_date=from_date, to_date=to_date)
-        packs = self.filtered('pack_ok')
+            lot_id, owner_id, package_id, from_date=from_date, to_date=to_date
+        )
+        packs = self.filtered("pack_ok")
         for product in packs.with_context(prefetch_fields=False):
             pack_qty_available = []
             pack_virtual_available = []
             subproducts = product.pack_line_ids.filtered(
-                lambda p: p.product_id.type == 'product')
+                lambda p: p.product_id.type == "product"
+            )
             for subproduct in subproducts:
                 subproduct_stock = subproduct.product_id
                 sub_qty = subproduct.quantity
                 if sub_qty:
-                    pack_qty_available.append(math.floor(
-                        subproduct_stock.qty_available / sub_qty))
-                    pack_virtual_available.append(math.floor(
-                        subproduct_stock.virtual_available / sub_qty))
+                    pack_qty_available.append(
+                        math.floor(subproduct_stock.qty_available / sub_qty)
+                    )
+                    pack_virtual_available.append(
+                        math.floor(subproduct_stock.virtual_available / sub_qty)
+                    )
             res[product.id] = {
-                'qty_available': (
-                    pack_qty_available and min(pack_qty_available) or False),
-                'incoming_qty': 0,
-                'outgoing_qty': 0,
-                'virtual_available': (
-                    pack_virtual_available and
-                    min(pack_virtual_available) or False),
+                "qty_available": (
+                    pack_qty_available and min(pack_qty_available) or False
+                ),
+                "incoming_qty": 0,
+                "outgoing_qty": 0,
+                "virtual_available": (
+                    pack_virtual_available and min(pack_virtual_available) or False
+                ),
             }
         return res
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index 0211d9852..664fcd608 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -1,96 +1,131 @@
 # Copyright 2019 Tecnativa - Ernesto Tejeda
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo.tests import SavepointCase
 import logging
 
+from odoo.tests import SavepointCase
+
 _logger = logging.getLogger(__name__)
 
 
 class TestSaleProductPack(SavepointCase):
-
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
-        category_all_id = cls.env.ref('product.product_category_all').id
-        product_obj = cls.env['product.product']
-        cls.pack_dc = cls.env['product.product'].create({
-            'name': 'Pack',
-            'type': 'product',
-            'pack_ok': True,
-            'pack_type': 'detailed',
-            'pack_component_price': 'detailed',
-            'categ_id': category_all_id,
-            'pack_line_ids': [
-                (0, 0, {
-                    'product_id': product_obj.create({
-                        'name': 'Component 1',
-                        'type': 'product',
-                        'categ_id': category_all_id,
-                    }).id,
-                    'quantity': 1,
-                }),
-                (0, 0, {
-                    'product_id': product_obj.create({
-                        'name': 'Component 2',
-                        'type': 'product',
-                        'categ_id': category_all_id,
-                    }).id,
-                    'quantity': 1,
-                }),
-                (0, 0, {
-                    'product_id': product_obj.create({
-                        'name': 'Component 3',
-                        'type': 'service',
-                        'categ_id': category_all_id,
-                    }).id,
-                    'quantity': 1,
-                }),
-                (0, 0, {
-                    'product_id': product_obj.create({
-                        'name': 'Component 4',
-                        'type': 'consu',
-                        'categ_id': category_all_id,
-                    }).id,
-                    'quantity': 1,
-                }),
-            ]
-        })
+        category_all_id = cls.env.ref("product.product_category_all").id
+        product_obj = cls.env["product.product"]
+        cls.pack_dc = cls.env["product.product"].create(
+            {
+                "name": "Pack",
+                "type": "product",
+                "pack_ok": True,
+                "pack_type": "detailed",
+                "pack_component_price": "detailed",
+                "categ_id": category_all_id,
+                "pack_line_ids": [
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": product_obj.create(
+                                {
+                                    "name": "Component 1",
+                                    "type": "product",
+                                    "categ_id": category_all_id,
+                                }
+                            ).id,
+                            "quantity": 1,
+                        },
+                    ),
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": product_obj.create(
+                                {
+                                    "name": "Component 2",
+                                    "type": "product",
+                                    "categ_id": category_all_id,
+                                }
+                            ).id,
+                            "quantity": 1,
+                        },
+                    ),
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": product_obj.create(
+                                {
+                                    "name": "Component 3",
+                                    "type": "service",
+                                    "categ_id": category_all_id,
+                                }
+                            ).id,
+                            "quantity": 1,
+                        },
+                    ),
+                    (
+                        0,
+                        0,
+                        {
+                            "product_id": product_obj.create(
+                                {
+                                    "name": "Component 4",
+                                    "type": "consu",
+                                    "categ_id": category_all_id,
+                                }
+                            ).id,
+                            "quantity": 1,
+                        },
+                    ),
+                ],
+            }
+        )
 
     def test_compute_quantities_dict(self):
-        location_id = self.env.ref('stock.stock_location_suppliers').id,
-        location_dest_id = self.env.ref('stock.stock_location_stock').id,
-        components = self.pack_dc.pack_line_ids.mapped('product_id')
-        picking = self.env['stock.picking'].create({
-            'partner_id': self.env.ref('base.res_partner_4').id,
-            'picking_type_id': self.env.ref('stock.picking_type_in').id,
-            'location_id': location_id,
-            'location_dest_id': location_dest_id,
-            'move_lines': [
-                (0, 0, {
-                    'name': 'incoming_move_test_01',
-                    'product_id': components[0].id,
-                    'product_uom_qty': 5,
-                    'product_uom': components[0].uom_id.id,
-                    'location_id': location_id,
-                    'location_dest_id': location_dest_id,
-                }),
-                (0, 0, {
-                    'name': 'incoming_move_test_02',
-                    'product_id': components[1].id,
-                    'product_uom_qty': 7,
-                    'product_uom': components[1].uom_id.id,
-                    'location_id': location_id,
-                    'location_dest_id': location_dest_id,
-                }),
-            ]
-        })
+        location_id = (self.env.ref("stock.stock_location_suppliers").id,)
+        location_dest_id = (self.env.ref("stock.stock_location_stock").id,)
+        components = self.pack_dc.pack_line_ids.mapped("product_id")
+        picking = self.env["stock.picking"].create(
+            {
+                "partner_id": self.env.ref("base.res_partner_4").id,
+                "picking_type_id": self.env.ref("stock.picking_type_in").id,
+                "location_id": location_id,
+                "location_dest_id": location_dest_id,
+                "move_lines": [
+                    (
+                        0,
+                        0,
+                        {
+                            "name": "incoming_move_test_01",
+                            "product_id": components[0].id,
+                            "product_uom_qty": 5,
+                            "product_uom": components[0].uom_id.id,
+                            "location_id": location_id,
+                            "location_dest_id": location_dest_id,
+                        },
+                    ),
+                    (
+                        0,
+                        0,
+                        {
+                            "name": "incoming_move_test_02",
+                            "product_id": components[1].id,
+                            "product_uom_qty": 7,
+                            "product_uom": components[1].uom_id.id,
+                            "location_id": location_id,
+                            "location_dest_id": location_dest_id,
+                        },
+                    ),
+                ],
+            }
+        )
         picking.action_confirm()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 0)
         wizard_dict = picking.button_validate()
-        wizard = self.env[wizard_dict['res_model']].browse(
-            wizard_dict['res_id'])
+        wizard = self.env[wizard_dict["res_model"]].browse(wizard_dict["res_id"])
         wizard.process()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 5)

From e710d6729bc43309cb6970ceb40ca2cca07210ec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Marques?= <joao.marques@tecnativa.com>
Date: Mon, 21 Sep 2020 15:08:42 +0200
Subject: [PATCH 10/32] [MIG] stock_product_pack: Migration to 13.0

---
 stock_product_pack/README.rst                 | 11 +--
 stock_product_pack/__manifest__.py            |  5 +-
 .../i18n/stock_product_pack.pot               |  7 +-
 stock_product_pack/models/product_product.py  | 12 ++-
 stock_product_pack/readme/CONTRIBUTORS.rst    |  1 +
 .../static/description/index.html             |  7 +-
 .../tests/test_stock_product_pack.py          | 76 +++++--------------
 7 files changed, 43 insertions(+), 76 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index 4624f0a10..e1cd4e42d 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -14,13 +14,13 @@ Stock product Pack
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
-    :target: https://github.com/OCA/product-pack/tree/12.0/stock_product_pack
+    :target: https://github.com/OCA/product-pack/tree/13.0/stock_product_pack
     :alt: OCA/product-pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack
+    :target: https://translation.odoo-community.org/projects/product-pack-13-0/product-pack-13-0-stock_product_pack
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/286/12.0
+    :target: https://runbot.odoo-community.org/runbot/286/13.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -54,7 +54,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -76,6 +76,7 @@ Contributors
   * Ernesto Tejeda
   * Pedro M. Baeza
   * Sergio Teruel
+  * João Marques
 
 Maintainers
 ~~~~~~~~~~~
@@ -98,6 +99,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-ernestotejeda| 
 
-This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/12.0/stock_product_pack>`_ project on GitHub.
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/13.0/stock_product_pack>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index e3ce18c7e..01c9b835f 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -1,9 +1,10 @@
 # Copyright 2019 NaN (http://www.nan-tic.com) - Àngel Àlvarez
 # Copyright 2019 Tecnativa - Ernesto Tejeda
+# Copyright 2020 Tecnativa - João Marques
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "12.0.1.0.1",
+    "version": "13.0.1.0.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
@@ -11,7 +12,7 @@
     "author": "NaN·tic, " "ADHOC SA, " "Tecnativa, " "Odoo Community Association (OCA)",
     "maintainers": ["ernestotejeda"],
     "license": "AGPL-3",
-    "depends": ["product_pack", "stock",],
+    "depends": ["product_pack", "stock"],
     "installable": True,
     "auto_install": True,
     "application": False,
diff --git a/stock_product_pack/i18n/stock_product_pack.pot b/stock_product_pack/i18n/stock_product_pack.pot
index 9a5bc0927..06129d7bd 100644
--- a/stock_product_pack/i18n/stock_product_pack.pot
+++ b/stock_product_pack/i18n/stock_product_pack.pot
@@ -1,12 +1,12 @@
 # Translation of Odoo Server.
 # This file contains the translation of the following modules:
-#	* stock_product_pack
+# 	* stock_product_pack
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 12.0\n"
+"Project-Id-Version: Odoo Server 13.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: <>\n"
+"Last-Translator: \n"
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -17,4 +17,3 @@ msgstr ""
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
 msgstr ""
-
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index c7fc541d9..8f35c6c1b 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -1,4 +1,5 @@
 # Copyright 2019 Tecnativa - Ernesto Tejeda
+# Copyright 2020 Tecnativa - João Marques
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 import math
@@ -19,6 +20,7 @@ def _compute_quantities_dict(
         for product in packs.with_context(prefetch_fields=False):
             pack_qty_available = []
             pack_virtual_available = []
+            pack_free_qty = []
             subproducts = product.pack_line_ids.filtered(
                 lambda p: p.product_id.type == "product"
             )
@@ -32,14 +34,16 @@ def _compute_quantities_dict(
                     pack_virtual_available.append(
                         math.floor(subproduct_stock.virtual_available / sub_qty)
                     )
+                    pack_free_qty.append(
+                        math.floor(subproduct_stock.free_qty / sub_qty)
+                    )
             res[product.id] = {
-                "qty_available": (
-                    pack_qty_available and min(pack_qty_available) or False
-                ),
+                "qty_available": (pack_qty_available and min(pack_qty_available) or 0),
+                "free_qty": (pack_free_qty and min(pack_free_qty) or 0),
                 "incoming_qty": 0,
                 "outgoing_qty": 0,
                 "virtual_available": (
-                    pack_virtual_available and min(pack_virtual_available) or False
+                    pack_virtual_available and min(pack_virtual_available) or 0
                 ),
             }
         return res
diff --git a/stock_product_pack/readme/CONTRIBUTORS.rst b/stock_product_pack/readme/CONTRIBUTORS.rst
index 0c7110256..7f0f6bd5d 100644
--- a/stock_product_pack/readme/CONTRIBUTORS.rst
+++ b/stock_product_pack/readme/CONTRIBUTORS.rst
@@ -3,3 +3,4 @@
   * Ernesto Tejeda
   * Pedro M. Baeza
   * Sergio Teruel
+  * João Marques
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index 5af35443f..adb0db838 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Stock product Pack</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/12.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-12-0/product-pack-12-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/12.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/13.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-13-0/product-pack-13-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
 components of the pack.</p>
 <p><strong>Table of contents</strong></p>
@@ -403,7 +403,7 @@ <h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -423,6 +423,7 @@ <h2><a class="toc-backref" href="#id5">Contributors</a></h2>
 <li>Ernesto Tejeda</li>
 <li>Pedro M. Baeza</li>
 <li>Sergio Teruel</li>
+<li>João Marques</li>
 </ul>
 </li>
 </ul>
@@ -436,7 +437,7 @@ <h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/12.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/13.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index 664fcd608..5dad44b49 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -1,4 +1,5 @@
 # Copyright 2019 Tecnativa - Ernesto Tejeda
+# Copyright 2020 Tecnativa - João Marques
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 import logging
@@ -13,8 +14,18 @@ class TestSaleProductPack(SavepointCase):
     def setUpClass(cls):
         super().setUpClass()
         category_all_id = cls.env.ref("product.product_category_all").id
-        product_obj = cls.env["product.product"]
-        cls.pack_dc = cls.env["product.product"].create(
+        cls.product_obj = cls.env["product.product"]
+        component_1 = cls.product_obj.create(
+            {"name": "Component 1", "type": "product", "categ_id": category_all_id}
+        )
+        component_2 = component_1.with_context({}).copy({"name": "Component 2"})
+        component_3 = component_1.with_context({}).copy(
+            {"name": "Component 3", "type": "service"}
+        )
+        component_4 = component_1.with_context({}).copy(
+            {"name": "Component 4", "type": "consu"}
+        )
+        cls.pack_dc = cls.product_obj.create(
             {
                 "name": "Pack",
                 "type": "product",
@@ -23,62 +34,10 @@ def setUpClass(cls):
                 "pack_component_price": "detailed",
                 "categ_id": category_all_id,
                 "pack_line_ids": [
-                    (
-                        0,
-                        0,
-                        {
-                            "product_id": product_obj.create(
-                                {
-                                    "name": "Component 1",
-                                    "type": "product",
-                                    "categ_id": category_all_id,
-                                }
-                            ).id,
-                            "quantity": 1,
-                        },
-                    ),
-                    (
-                        0,
-                        0,
-                        {
-                            "product_id": product_obj.create(
-                                {
-                                    "name": "Component 2",
-                                    "type": "product",
-                                    "categ_id": category_all_id,
-                                }
-                            ).id,
-                            "quantity": 1,
-                        },
-                    ),
-                    (
-                        0,
-                        0,
-                        {
-                            "product_id": product_obj.create(
-                                {
-                                    "name": "Component 3",
-                                    "type": "service",
-                                    "categ_id": category_all_id,
-                                }
-                            ).id,
-                            "quantity": 1,
-                        },
-                    ),
-                    (
-                        0,
-                        0,
-                        {
-                            "product_id": product_obj.create(
-                                {
-                                    "name": "Component 4",
-                                    "type": "consu",
-                                    "categ_id": category_all_id,
-                                }
-                            ).id,
-                            "quantity": 1,
-                        },
-                    ),
+                    (0, 0, {"product_id": component_1.id, "quantity": 1},),
+                    (0, 0, {"product_id": component_2.id, "quantity": 1},),
+                    (0, 0, {"product_id": component_3.id, "quantity": 1},),
+                    (0, 0, {"product_id": component_4.id, "quantity": 1},),
                 ],
             }
         )
@@ -127,5 +86,6 @@ def test_compute_quantities_dict(self):
         wizard_dict = picking.button_validate()
         wizard = self.env[wizard_dict["res_model"]].browse(wizard_dict["res_id"])
         wizard.process()
+        self.product_obj.invalidate_cache()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 5)

From 3e0828c267d712d0f8b5fc2d774bce028947b078 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Mac=20Rouillon?= <nmr@adhoc.com.ar>
Date: Tue, 2 Feb 2021 15:04:55 -0300
Subject: [PATCH 11/32] [IMP] stock_product_pack: Be able for stock manager to
 modify packs lines.

It seems to me that it would be if a user has the maximum stock permission, can edit the lines of packs, as well as a maximum sales permission.
---
 stock_product_pack/__manifest__.py              | 3 ++-
 stock_product_pack/security/ir.model.access.csv | 2 ++
 2 files changed, 4 insertions(+), 1 deletion(-)
 create mode 100644 stock_product_pack/security/ir.model.access.csv

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 01c9b835f..5960045e7 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -4,7 +4,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "13.0.1.0.0",
+    "version": "13.0.1.1.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
@@ -13,6 +13,7 @@
     "maintainers": ["ernestotejeda"],
     "license": "AGPL-3",
     "depends": ["product_pack", "stock"],
+    "data": ["security/ir.model.access.csv"],
     "installable": True,
     "auto_install": True,
     "application": False,
diff --git a/stock_product_pack/security/ir.model.access.csv b/stock_product_pack/security/ir.model.access.csv
new file mode 100644
index 000000000..124c24182
--- /dev/null
+++ b/stock_product_pack/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
+access_product_pack_line_stock_manager,product.pack.line,product_pack.model_product_pack_line,stock.group_stock_manager,1,1,1,1

From e8072fe043976a1672e120363c47cf487612b387 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Nicol=C3=A1s=20Mac=20Rouillon?= <nmr@adhoc.com.ar>
Date: Mon, 12 Apr 2021 08:51:10 -0300
Subject: [PATCH 12/32] [13.0] [IMP] stock_product_pack: Not add the product
 pack to the moves if the product is storable.

---
 stock_product_pack/__manifest__.py            |  4 +-
 .../i18n/stock_product_pack.pot               | 26 ++++++++
 stock_product_pack/models/__init__.py         |  3 +-
 stock_product_pack/models/product_template.py | 16 +++++
 stock_product_pack/models/stock_rule.py       | 23 +++++++
 .../tests/test_stock_product_pack.py          | 62 +++++++++++++++++++
 .../views/product_template_views.xml          | 19 ++++++
 7 files changed, 150 insertions(+), 3 deletions(-)
 create mode 100644 stock_product_pack/models/product_template.py
 create mode 100644 stock_product_pack/models/stock_rule.py
 create mode 100644 stock_product_pack/views/product_template_views.xml

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 5960045e7..45132ca25 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -4,7 +4,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "13.0.1.1.0",
+    "version": "13.0.1.2.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
@@ -13,7 +13,7 @@
     "maintainers": ["ernestotejeda"],
     "license": "AGPL-3",
     "depends": ["product_pack", "stock"],
-    "data": ["security/ir.model.access.csv"],
+    "data": ["security/ir.model.access.csv", "views/product_template_views.xml"],
     "installable": True,
     "auto_install": True,
     "application": False,
diff --git a/stock_product_pack/i18n/stock_product_pack.pot b/stock_product_pack/i18n/stock_product_pack.pot
index 06129d7bd..ae7e6c9cd 100644
--- a/stock_product_pack/i18n/stock_product_pack.pot
+++ b/stock_product_pack/i18n/stock_product_pack.pot
@@ -13,7 +13,33 @@ msgstr ""
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: \n"
 
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
+msgid "Don't create move"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_procurement_group
+msgid "Procurement Group"
+msgstr ""
+
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
 msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,help:stock_product_pack.field_product_template__dont_create_move
+msgid ""
+"With this option, the pack won't create an stock.move and will be set as "
+"delivered upon sale confirmation. This is useful to use get pack stock "
+"availability (type = 'product') but without actually having stock and moves "
+"of it."
+msgstr ""
diff --git a/stock_product_pack/models/__init__.py b/stock_product_pack/models/__init__.py
index 586a7eff4..0637be5c0 100644
--- a/stock_product_pack/models/__init__.py
+++ b/stock_product_pack/models/__init__.py
@@ -1,3 +1,4 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
+from . import product_template
 from . import product_product
+from . import stock_rule
diff --git a/stock_product_pack/models/product_template.py b/stock_product_pack/models/product_template.py
new file mode 100644
index 000000000..04aba34ff
--- /dev/null
+++ b/stock_product_pack/models/product_template.py
@@ -0,0 +1,16 @@
+# Copyright 2019 Tecnativa - Ernesto Tejeda
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import fields, models
+
+
+class ProductTemplate(models.Model):
+    _inherit = "product.template"
+
+    dont_create_move = fields.Boolean(
+        string="Don't create move",
+        help="With this option, the pack won't create an stock.move and will"
+        " be set as delivered upon sale confirmation. This is useful to use "
+        "get pack stock availability (type = 'product') but"
+        " without actually having stock and moves of it.",
+    )
diff --git a/stock_product_pack/models/stock_rule.py b/stock_product_pack/models/stock_rule.py
new file mode 100644
index 000000000..1cba587be
--- /dev/null
+++ b/stock_product_pack/models/stock_rule.py
@@ -0,0 +1,23 @@
+# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+from odoo import api, models
+
+
+class ProcurementGroup(models.Model):
+    _inherit = "procurement.group"
+
+    @api.model
+    def run(self, procurements):
+        """ If 'run' is called on a pack product storable.
+         we remove the procurement with this product pack.
+        """
+        for procurement in procurements:
+            if (
+                procurement.product_id
+                and procurement.product_id.pack_ok
+                and procurement.product_id.dont_create_move
+                and procurement.product_id.pack_type == "detailed"
+            ):
+                procurements.remove(procurement)
+
+        return super().run(procurements)
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index 5dad44b49..a8abe3506 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -15,6 +15,7 @@ def setUpClass(cls):
         super().setUpClass()
         category_all_id = cls.env.ref("product.product_category_all").id
         cls.product_obj = cls.env["product.product"]
+        cls.stock_rule_obj = cls.env["stock.rule"]
         component_1 = cls.product_obj.create(
             {"name": "Component 1", "type": "product", "categ_id": category_all_id}
         )
@@ -41,6 +42,37 @@ def setUpClass(cls):
                 ],
             }
         )
+        warehouse = cls.env["stock.warehouse"].search(
+            [("company_id", "=", cls.env.user.id)], limit=1
+        )
+        cls.stock_rule = cls.stock_rule_obj.create(
+            {
+                "name": "Stock to Costumers",
+                "action": "pull",
+                "picking_type_id": cls.env.ref("stock.picking_type_internal").id,
+                "route_id": cls.env.ref("stock.route_warehouse0_mto").id,
+                "procure_method": "make_to_stock",
+                "warehouse_id": warehouse.id,
+                "location_id": cls.env.ref("stock.stock_location_stock").id,
+            }
+        )
+        cls.pack_dc_with_dm = cls.product_obj.create(
+            {
+                "name": "Pack With storeable and not move product",
+                "type": "product",
+                "pack_ok": True,
+                "dont_create_move": True,
+                "pack_type": "detailed",
+                "pack_component_price": "detailed",
+                "categ_id": category_all_id,
+                "pack_line_ids": [
+                    (0, 0, {"product_id": component_1.id, "quantity": 1},),
+                    (0, 0, {"product_id": component_2.id, "quantity": 1},),
+                    (0, 0, {"product_id": component_3.id, "quantity": 1},),
+                    (0, 0, {"product_id": component_4.id, "quantity": 1},),
+                ],
+            }
+        )
 
     def test_compute_quantities_dict(self):
         location_id = (self.env.ref("stock.stock_location_suppliers").id,)
@@ -89,3 +121,33 @@ def test_compute_quantities_dict(self):
         self.product_obj.invalidate_cache()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 5)
+
+    def test_pack_with_dont_move_the_parent(self):
+        """ Run a procurement for prod pack products when there are only 5 in stock then
+        check that MTO is applied on the moves when the rule is set to 'mts_else_mto'
+        """
+
+        def create_orderpoint(product, qty_min, qty_max, location, group):
+            return self.env["stock.warehouse.orderpoint"].create(
+                {
+                    "name": "OP/%s" % product.name,
+                    "product_id": product.id,
+                    "product_min_qty": qty_min,
+                    "product_max_qty": qty_max,
+                    "location_id": location.id,
+                    "group_id": group.id,
+                }
+            )
+
+        pg = self.env["procurement.group"].create({"name": "Test-product Pack"})
+        create_orderpoint(
+            self.pack_dc_with_dm,
+            10,
+            155,
+            self.env.ref("stock.stock_location_stock"),
+            pg,
+        )
+        self.env["stock.scheduler.compute"].create({}).procure_calculation()
+        picking_ids = self.env["stock.picking"].search([("group_id", "=", pg.id)])
+        # we need to ensure that only the compents of the packs are in the moves.
+        self.assertFalse(self.pack_dc_with_dm in picking_ids.move_lines.product_id)
diff --git a/stock_product_pack/views/product_template_views.xml b/stock_product_pack/views/product_template_views.xml
new file mode 100644
index 000000000..180232011
--- /dev/null
+++ b/stock_product_pack/views/product_template_views.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- Copyright 2019 Tecnativa - Ernesto Tejeda
+     License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
+<odoo>
+    <!-- Generic Product Template view modification -->
+    <record id="product_template_form_view" model="ir.ui.view">
+        <field name="name">product.template.pack.form</field>
+        <field name="model">product.template</field>
+        <field name="inherit_id" ref="product_pack.product_template_form_view" />
+        <field name="arch" type="xml">
+            <field name="pack_modifiable" position="after">
+                <field
+                    name="dont_create_move"
+                    attrs="{'invisible':['|', ('pack_ok', '=', False), ('type', '=', 'service')]}"
+                />
+            </field>
+        </field>
+    </record>
+</odoo>

From cdf83b52c8f583c68e04d1208465b7fb1ae4f3db Mon Sep 17 00:00:00 2001
From: OCA Transbot <transbot@odoo-community.org>
Date: Fri, 30 Jul 2021 13:35:48 +0000
Subject: [PATCH 13/32] Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: product-pack-13.0/product-pack-13.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-13-0/product-pack-13-0-stock_product_pack/
---
 stock_product_pack/i18n/es.po | 26 ++++++++++++++++++++++++++
 stock_product_pack/i18n/fr.po | 28 +++++++++++++++++++++++++++-
 stock_product_pack/i18n/pt.po | 28 +++++++++++++++++++++++++++-
 3 files changed, 80 insertions(+), 2 deletions(-)

diff --git a/stock_product_pack/i18n/es.po b/stock_product_pack/i18n/es.po
index 9be1296dc..05493f240 100644
--- a/stock_product_pack/i18n/es.po
+++ b/stock_product_pack/i18n/es.po
@@ -16,7 +16,33 @@ msgstr ""
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: \n"
 
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
+msgid "Don't create move"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_procurement_group
+msgid "Procurement Group"
+msgstr ""
+
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
 msgstr "Producto"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,help:stock_product_pack.field_product_template__dont_create_move
+msgid ""
+"With this option, the pack won't create an stock.move and will be set as "
+"delivered upon sale confirmation. This is useful to use get pack stock "
+"availability (type = 'product') but without actually having stock and moves "
+"of it."
+msgstr ""
diff --git a/stock_product_pack/i18n/fr.po b/stock_product_pack/i18n/fr.po
index 4e06b0c76..bde733ab6 100644
--- a/stock_product_pack/i18n/fr.po
+++ b/stock_product_pack/i18n/fr.po
@@ -1,6 +1,6 @@
 # Translation of Odoo Server.
 # This file contains the translation of the following modules:
-#	* stock_product_pack
+# 	* stock_product_pack
 #
 msgid ""
 msgstr ""
@@ -16,7 +16,33 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
 "X-Generator: Weblate 3.10\n"
 
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
+msgid "Don't create move"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_procurement_group
+msgid "Procurement Group"
+msgstr ""
+
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
 msgstr "Article"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,help:stock_product_pack.field_product_template__dont_create_move
+msgid ""
+"With this option, the pack won't create an stock.move and will be set as "
+"delivered upon sale confirmation. This is useful to use get pack stock "
+"availability (type = 'product') but without actually having stock and moves "
+"of it."
+msgstr ""
diff --git a/stock_product_pack/i18n/pt.po b/stock_product_pack/i18n/pt.po
index 99ce2bd80..6188b3e78 100644
--- a/stock_product_pack/i18n/pt.po
+++ b/stock_product_pack/i18n/pt.po
@@ -1,6 +1,6 @@
 # Translation of Odoo Server.
 # This file contains the translation of the following modules:
-#	* stock_product_pack
+# 	* stock_product_pack
 #
 msgid ""
 msgstr ""
@@ -16,7 +16,33 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=n > 1;\n"
 "X-Generator: Weblate 3.9.1\n"
 
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
+msgid "Don't create move"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_procurement_group
+msgid "Procurement Group"
+msgstr ""
+
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product"
 msgstr "Produto"
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,help:stock_product_pack.field_product_template__dont_create_move
+msgid ""
+"With this option, the pack won't create an stock.move and will be set as "
+"delivered upon sale confirmation. This is useful to use get pack stock "
+"availability (type = 'product') but without actually having stock and moves "
+"of it."
+msgstr ""

From 2bf6e1e3d02908bf94b636821e1a0308d943f6ee Mon Sep 17 00:00:00 2001
From: Usdoo Wedoo <jbr@wedoo.tech>
Date: Sat, 18 Sep 2021 12:12:44 -0500
Subject: [PATCH 14/32] [14.0][MIG] stock_product_pack: Migration to 14.0

---
 stock_product_pack/README.rst                 | 10 ++--
 stock_product_pack/__manifest__.py            |  3 +-
 .../i18n/stock_product_pack.pot               | 23 +++++++-
 stock_product_pack/models/stock_rule.py       |  8 +--
 .../static/description/index.html             |  6 +-
 .../tests/test_stock_product_pack.py          | 59 +++++++++++++++----
 6 files changed, 84 insertions(+), 25 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index e1cd4e42d..34157850c 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -14,13 +14,13 @@ Stock product Pack
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
-    :target: https://github.com/OCA/product-pack/tree/13.0/stock_product_pack
+    :target: https://github.com/OCA/product-pack/tree/14.0/stock_product_pack
     :alt: OCA/product-pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/product-pack-13-0/product-pack-13-0-stock_product_pack
+    :target: https://translation.odoo-community.org/projects/product-pack-14-0/product-pack-14-0-stock_product_pack
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/286/13.0
+    :target: https://runbot.odoo-community.org/runbot/286/14.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -54,7 +54,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -99,6 +99,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-ernestotejeda| 
 
-This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/13.0/stock_product_pack>`_ project on GitHub.
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/14.0/stock_product_pack>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 45132ca25..16d0ba55f 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -1,10 +1,11 @@
+# Copyright 2021 Julio Cesar Bravo Rodriguez
 # Copyright 2019 NaN (http://www.nan-tic.com) - Àngel Àlvarez
 # Copyright 2019 Tecnativa - Ernesto Tejeda
 # Copyright 2020 Tecnativa - João Marques
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "13.0.1.2.0",
+    "version": "14.0.1.0.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
diff --git a/stock_product_pack/i18n/stock_product_pack.pot b/stock_product_pack/i18n/stock_product_pack.pot
index ae7e6c9cd..49cbe0314 100644
--- a/stock_product_pack/i18n/stock_product_pack.pot
+++ b/stock_product_pack/i18n/stock_product_pack.pot
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 13.0\n"
+"Project-Id-Version: Odoo Server 14.0\n"
 "Report-Msgid-Bugs-To: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -13,12 +13,33 @@ msgstr ""
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: \n"
 
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_procurement_group__display_name
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__display_name
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__display_name
+msgid "Display Name"
+msgstr ""
+
 #. module: stock_product_pack
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
 msgid "Don't create move"
 msgstr ""
 
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_procurement_group__id
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__id
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__id
+msgid "ID"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_procurement_group____last_update
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product____last_update
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template____last_update
+msgid "Last Modified on"
+msgstr ""
+
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_procurement_group
 msgid "Procurement Group"
diff --git a/stock_product_pack/models/stock_rule.py b/stock_product_pack/models/stock_rule.py
index 1cba587be..316977e36 100644
--- a/stock_product_pack/models/stock_rule.py
+++ b/stock_product_pack/models/stock_rule.py
@@ -7,9 +7,9 @@ class ProcurementGroup(models.Model):
     _inherit = "procurement.group"
 
     @api.model
-    def run(self, procurements):
-        """ If 'run' is called on a pack product storable.
-         we remove the procurement with this product pack.
+    def run(self, procurements, raise_user_error=True):
+        """If 'run' is called on a pack product storable.
+        we remove the procurement with this product pack.
         """
         for procurement in procurements:
             if (
@@ -20,4 +20,4 @@ def run(self, procurements):
             ):
                 procurements.remove(procurement)
 
-        return super().run(procurements)
+        return super().run(procurements, raise_user_error=raise_user_error)
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index adb0db838..7a4c2d88a 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Stock product Pack</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/13.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-13-0/product-pack-13-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/13.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/14.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-14-0/product-pack-14-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
 components of the pack.</p>
 <p><strong>Table of contents</strong></p>
@@ -403,7 +403,7 @@ <h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2013.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -437,7 +437,7 @@ <h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/13.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/14.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index a8abe3506..352a3791d 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -4,7 +4,7 @@
 
 import logging
 
-from odoo.tests import SavepointCase
+from odoo.tests import Form, SavepointCase
 
 _logger = logging.getLogger(__name__)
 
@@ -35,10 +35,26 @@ def setUpClass(cls):
                 "pack_component_price": "detailed",
                 "categ_id": category_all_id,
                 "pack_line_ids": [
-                    (0, 0, {"product_id": component_1.id, "quantity": 1},),
-                    (0, 0, {"product_id": component_2.id, "quantity": 1},),
-                    (0, 0, {"product_id": component_3.id, "quantity": 1},),
-                    (0, 0, {"product_id": component_4.id, "quantity": 1},),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_1.id, "quantity": 1},
+                    ),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_2.id, "quantity": 1},
+                    ),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_3.id, "quantity": 1},
+                    ),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_4.id, "quantity": 1},
+                    ),
                 ],
             }
         )
@@ -66,10 +82,26 @@ def setUpClass(cls):
                 "pack_component_price": "detailed",
                 "categ_id": category_all_id,
                 "pack_line_ids": [
-                    (0, 0, {"product_id": component_1.id, "quantity": 1},),
-                    (0, 0, {"product_id": component_2.id, "quantity": 1},),
-                    (0, 0, {"product_id": component_3.id, "quantity": 1},),
-                    (0, 0, {"product_id": component_4.id, "quantity": 1},),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_1.id, "quantity": 1},
+                    ),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_2.id, "quantity": 1},
+                    ),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_3.id, "quantity": 1},
+                    ),
+                    (
+                        0,
+                        0,
+                        {"product_id": component_4.id, "quantity": 1},
+                    ),
                 ],
             }
         )
@@ -78,6 +110,7 @@ def test_compute_quantities_dict(self):
         location_id = (self.env.ref("stock.stock_location_suppliers").id,)
         location_dest_id = (self.env.ref("stock.stock_location_stock").id,)
         components = self.pack_dc.pack_line_ids.mapped("product_id")
+
         picking = self.env["stock.picking"].create(
             {
                 "partner_id": self.env.ref("base.res_partner_4").id,
@@ -116,14 +149,18 @@ def test_compute_quantities_dict(self):
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 0)
         wizard_dict = picking.button_validate()
-        wizard = self.env[wizard_dict["res_model"]].browse(wizard_dict["res_id"])
+        wizard = Form(
+            self.env[(wizard_dict.get("res_model"))].with_context(
+                wizard_dict["context"]
+            )
+        ).save()
         wizard.process()
         self.product_obj.invalidate_cache()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 5)
 
     def test_pack_with_dont_move_the_parent(self):
-        """ Run a procurement for prod pack products when there are only 5 in stock then
+        """Run a procurement for prod pack products when there are only 5 in stock then
         check that MTO is applied on the moves when the rule is set to 'mts_else_mto'
         """
 

From e4c583eae529235f585e29dd963419d5ee9c3a52 Mon Sep 17 00:00:00 2001
From: "Bruno Zanotti (ADHOC)" <bz@adhoc.com.ar>
Date: Thu, 22 Apr 2021 13:37:22 -0300
Subject: [PATCH 15/32] [FIX] stock_product_pack: stock on services packs

In v13 Odoo sets the stock at zero for products that are not services.
This commit will keep the stock of the services if they are packs,
to remain the functionality of the lasts versions.
---
 stock_product_pack/__manifest__.py           |  2 +-
 stock_product_pack/models/product_product.py | 23 ++++++++++++++++++++
 2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 16d0ba55f..f2ba5aa97 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -5,7 +5,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "14.0.1.0.0",
+    "version": "14.0.1.0.1",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index 8f35c6c1b..5ec3d375d 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -47,3 +47,26 @@ def _compute_quantities_dict(
                 ),
             }
         return res
+
+    def _compute_quantities(self):
+        """ In v13 Odoo introduces a filter for products not services.
+        To keep how it was working on v12 we try to get stock for
+        service products if they are pack.
+        """
+        service_pack_products = self.filtered(
+            lambda p: p.type == "service" and p.pack_ok
+        )
+        super(ProductProduct, self - service_pack_products)._compute_quantities()
+        res = service_pack_products._compute_quantities_dict(
+            self._context.get("lot_id"),
+            self._context.get("owner_id"),
+            self._context.get("package_id"),
+            self._context.get("from_date"),
+            self._context.get("to_date"),
+        )
+        for product in service_pack_products:
+            product.qty_available = res[product.id]["qty_available"]
+            product.incoming_qty = res[product.id]["incoming_qty"]
+            product.outgoing_qty = res[product.id]["outgoing_qty"]
+            product.virtual_available = res[product.id]["virtual_available"]
+            product.free_qty = res[product.id]["free_qty"]

From ef1bf9b8908415a9cb12d1dacbb25164c75cb6de Mon Sep 17 00:00:00 2001
From: "Pedro M. Baeza" <pedro.baeza@tecnativa.com>
Date: Mon, 3 Jan 2022 19:43:46 +0100
Subject: [PATCH 16/32] [FIX] stock_product_pack: pre-commit

---
 stock_product_pack/models/product_product.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index 5ec3d375d..7c9297f27 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -49,7 +49,7 @@ def _compute_quantities_dict(
         return res
 
     def _compute_quantities(self):
-        """ In v13 Odoo introduces a filter for products not services.
+        """In v13 Odoo introduces a filter for products not services.
         To keep how it was working on v12 we try to get stock for
         service products if they are pack.
         """

From 1b443dbcfaf2a0ba2d4d2ef398f9e43a92c9a7e4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Luis=20Ernesto=20Garc=C3=ADa=20Medina?=
 <ernesto.garcia@tecnativa.com>
Date: Wed, 1 Mar 2023 12:49:27 -0600
Subject: [PATCH 17/32] [MIG] stock_product_pack: Migration to 15.0

---
 stock_product_pack/__manifest__.py            |  2 +-
 stock_product_pack/models/product_product.py  |  9 +++--
 .../tests/test_stock_product_pack.py          | 40 ++++++++++++++-----
 .../views/product_template_views.xml          |  2 +-
 4 files changed, 37 insertions(+), 16 deletions(-)

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index f2ba5aa97..ef2c01ca2 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -5,7 +5,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "14.0.1.0.1",
+    "version": "15.0.1.0.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index 7c9297f27..ba2989823 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -22,7 +22,7 @@ def _compute_quantities_dict(
             pack_virtual_available = []
             pack_free_qty = []
             subproducts = product.pack_line_ids.filtered(
-                lambda p: p.product_id.type == "product"
+                lambda p: p.product_id.detailed_type == "product"
             )
             for subproduct in subproducts:
                 subproduct_stock = subproduct.product_id
@@ -54,9 +54,11 @@ def _compute_quantities(self):
         service products if they are pack.
         """
         service_pack_products = self.filtered(
-            lambda p: p.type == "service" and p.pack_ok
+            lambda p: p.detailed_type == "service" and p.pack_ok
         )
-        super(ProductProduct, self - service_pack_products)._compute_quantities()
+        result = super(
+            ProductProduct, self - service_pack_products
+        )._compute_quantities()
         res = service_pack_products._compute_quantities_dict(
             self._context.get("lot_id"),
             self._context.get("owner_id"),
@@ -70,3 +72,4 @@ def _compute_quantities(self):
             product.outgoing_qty = res[product.id]["outgoing_qty"]
             product.virtual_available = res[product.id]["virtual_available"]
             product.free_qty = res[product.id]["free_qty"]
+        return result
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index 352a3791d..44afca2ad 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -4,12 +4,12 @@
 
 import logging
 
-from odoo.tests import Form, SavepointCase
+from odoo.tests import Form, TransactionCase
 
 _logger = logging.getLogger(__name__)
 
 
-class TestSaleProductPack(SavepointCase):
+class TestSaleProductPack(TransactionCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
@@ -17,19 +17,37 @@ def setUpClass(cls):
         cls.product_obj = cls.env["product.product"]
         cls.stock_rule_obj = cls.env["stock.rule"]
         component_1 = cls.product_obj.create(
-            {"name": "Component 1", "type": "product", "categ_id": category_all_id}
+            {
+                "name": "Component 1",
+                "detailed_type": "product",
+                "categ_id": category_all_id,
+            }
         )
-        component_2 = component_1.with_context({}).copy({"name": "Component 2"})
-        component_3 = component_1.with_context({}).copy(
-            {"name": "Component 3", "type": "service"}
+        component_2 = cls.product_obj.create(
+            {
+                "name": "Component 2",
+                "detailed_type": "product",
+                "categ_id": category_all_id,
+            }
         )
-        component_4 = component_1.with_context({}).copy(
-            {"name": "Component 4", "type": "consu"}
+        component_3 = cls.product_obj.create(
+            {
+                "name": "Component 3",
+                "detailed_type": "service",
+                "categ_id": category_all_id,
+            }
+        )
+        component_4 = cls.product_obj.create(
+            {
+                "name": "Component 4",
+                "detailed_type": "consu",
+                "categ_id": category_all_id,
+            }
         )
         cls.pack_dc = cls.product_obj.create(
             {
                 "name": "Pack",
-                "type": "product",
+                "detailed_type": "product",
                 "pack_ok": True,
                 "pack_type": "detailed",
                 "pack_component_price": "detailed",
@@ -75,7 +93,7 @@ def setUpClass(cls):
         cls.pack_dc_with_dm = cls.product_obj.create(
             {
                 "name": "Pack With storeable and not move product",
-                "type": "product",
+                "detailed_type": "product",
                 "pack_ok": True,
                 "dont_create_move": True,
                 "pack_type": "detailed",
@@ -151,7 +169,7 @@ def test_compute_quantities_dict(self):
         wizard_dict = picking.button_validate()
         wizard = Form(
             self.env[(wizard_dict.get("res_model"))].with_context(
-                wizard_dict["context"]
+                **wizard_dict["context"]
             )
         ).save()
         wizard.process()
diff --git a/stock_product_pack/views/product_template_views.xml b/stock_product_pack/views/product_template_views.xml
index 180232011..89c459003 100644
--- a/stock_product_pack/views/product_template_views.xml
+++ b/stock_product_pack/views/product_template_views.xml
@@ -11,7 +11,7 @@
             <field name="pack_modifiable" position="after">
                 <field
                     name="dont_create_move"
-                    attrs="{'invisible':['|', ('pack_ok', '=', False), ('type', '=', 'service')]}"
+                    attrs="{'invisible':['|', ('pack_ok', '=', False), ('detailed_type', '=', 'service')]}"
                 />
             </field>
         </field>

From 579520f060faf2b0d1aaeea1c0f5f3ecdd2f4a75 Mon Sep 17 00:00:00 2001
From: oca-ci <oca-ci@odoo-community.org>
Date: Mon, 6 Mar 2023 19:31:25 +0000
Subject: [PATCH 18/32] [UPD] Update stock_product_pack.pot

---
 .../i18n/stock_product_pack.pot               | 23 +------------------
 1 file changed, 1 insertion(+), 22 deletions(-)

diff --git a/stock_product_pack/i18n/stock_product_pack.pot b/stock_product_pack/i18n/stock_product_pack.pot
index 49cbe0314..eb6bf43e5 100644
--- a/stock_product_pack/i18n/stock_product_pack.pot
+++ b/stock_product_pack/i18n/stock_product_pack.pot
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 14.0\n"
+"Project-Id-Version: Odoo Server 15.0\n"
 "Report-Msgid-Bugs-To: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -13,33 +13,12 @@ msgstr ""
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: \n"
 
-#. module: stock_product_pack
-#: model:ir.model.fields,field_description:stock_product_pack.field_procurement_group__display_name
-#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__display_name
-#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__display_name
-msgid "Display Name"
-msgstr ""
-
 #. module: stock_product_pack
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
 msgid "Don't create move"
 msgstr ""
 
-#. module: stock_product_pack
-#: model:ir.model.fields,field_description:stock_product_pack.field_procurement_group__id
-#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__id
-#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__id
-msgid "ID"
-msgstr ""
-
-#. module: stock_product_pack
-#: model:ir.model.fields,field_description:stock_product_pack.field_procurement_group____last_update
-#: model:ir.model.fields,field_description:stock_product_pack.field_product_product____last_update
-#: model:ir.model.fields,field_description:stock_product_pack.field_product_template____last_update
-msgid "Last Modified on"
-msgstr ""
-
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_procurement_group
 msgid "Procurement Group"

From d70651115916174e1b28ab28820baf2d60fb0dc9 Mon Sep 17 00:00:00 2001
From: OCA-git-bot <oca-git-bot@odoo-community.org>
Date: Mon, 6 Mar 2023 19:34:08 +0000
Subject: [PATCH 19/32] [UPD] README.rst

---
 stock_product_pack/README.rst                    | 10 +++++-----
 stock_product_pack/static/description/index.html |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index 34157850c..8f7c3b9d2 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -14,13 +14,13 @@ Stock product Pack
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
-    :target: https://github.com/OCA/product-pack/tree/14.0/stock_product_pack
+    :target: https://github.com/OCA/product-pack/tree/15.0/stock_product_pack
     :alt: OCA/product-pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/product-pack-14-0/product-pack-14-0-stock_product_pack
+    :target: https://translation.odoo-community.org/projects/product-pack-15-0/product-pack-15-0-stock_product_pack
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/286/14.0
+    :target: https://runbot.odoo-community.org/runbot/286/15.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -54,7 +54,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -99,6 +99,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-ernestotejeda| 
 
-This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/14.0/stock_product_pack>`_ project on GitHub.
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/15.0/stock_product_pack>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index 7a4c2d88a..4e7b82228 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Stock product Pack</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/14.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-14-0/product-pack-14-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/14.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/15.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-15-0/product-pack-15-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
 components of the pack.</p>
 <p><strong>Table of contents</strong></p>
@@ -403,7 +403,7 @@ <h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2014.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -437,7 +437,7 @@ <h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/14.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/15.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>

From 5fa93c3680efbb61fda3ee0d4f67126217b9a10c Mon Sep 17 00:00:00 2001
From: Raf Ven <raf.ven@dynapps.be>
Date: Thu, 23 Feb 2023 17:12:49 +0100
Subject: [PATCH 20/32] [MIG] stock_product_pack: Migration to 16.0

---
 stock_product_pack/__manifest__.py                  | 4 ++--
 stock_product_pack/tests/test_stock_product_pack.py | 7 +++----
 2 files changed, 5 insertions(+), 6 deletions(-)

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index ef2c01ca2..7ab78dc1c 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -5,12 +5,12 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "15.0.1.0.0",
+    "version": "16.0.1.0.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
     "website": "https://github.com/OCA/product-pack",
-    "author": "NaN·tic, " "ADHOC SA, " "Tecnativa, " "Odoo Community Association (OCA)",
+    "author": "NaN·tic, ADHOC SA, Tecnativa, Odoo Community Association (OCA)",
     "maintainers": ["ernestotejeda"],
     "license": "AGPL-3",
     "depends": ["product_pack", "stock"],
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index 44afca2ad..cf789af2b 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -87,7 +87,7 @@ def setUpClass(cls):
                 "route_id": cls.env.ref("stock.route_warehouse0_mto").id,
                 "procure_method": "make_to_stock",
                 "warehouse_id": warehouse.id,
-                "location_id": cls.env.ref("stock.stock_location_stock").id,
+                "location_dest_id": cls.env.ref("stock.stock_location_stock").id,
             }
         )
         cls.pack_dc_with_dm = cls.product_obj.create(
@@ -135,7 +135,7 @@ def test_compute_quantities_dict(self):
                 "picking_type_id": self.env.ref("stock.picking_type_in").id,
                 "location_id": location_id,
                 "location_dest_id": location_dest_id,
-                "move_lines": [
+                "move_ids": [
                     (
                         0,
                         0,
@@ -173,7 +173,6 @@ def test_compute_quantities_dict(self):
             )
         ).save()
         wizard.process()
-        self.product_obj.invalidate_cache()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 5)
 
@@ -205,4 +204,4 @@ def create_orderpoint(product, qty_min, qty_max, location, group):
         self.env["stock.scheduler.compute"].create({}).procure_calculation()
         picking_ids = self.env["stock.picking"].search([("group_id", "=", pg.id)])
         # we need to ensure that only the compents of the packs are in the moves.
-        self.assertFalse(self.pack_dc_with_dm in picking_ids.move_lines.product_id)
+        self.assertFalse(self.pack_dc_with_dm in picking_ids.move_ids.product_id)

From 5dae34ac4858bde2420cdbf6aca57e29eec95c0f Mon Sep 17 00:00:00 2001
From: oca-ci <oca-ci@odoo-community.org>
Date: Mon, 5 Jun 2023 15:35:16 +0000
Subject: [PATCH 21/32] [UPD] Update stock_product_pack.pot

---
 stock_product_pack/i18n/stock_product_pack.pot | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/stock_product_pack/i18n/stock_product_pack.pot b/stock_product_pack/i18n/stock_product_pack.pot
index eb6bf43e5..4620ff5f0 100644
--- a/stock_product_pack/i18n/stock_product_pack.pot
+++ b/stock_product_pack/i18n/stock_product_pack.pot
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: Odoo Server 15.0\n"
+"Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
 "Last-Translator: \n"
 "Language-Team: \n"
@@ -25,13 +25,13 @@ msgid "Procurement Group"
 msgstr ""
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_product
+#: model:ir.model,name:stock_product_pack.model_product_template
 msgid "Product"
 msgstr ""
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_template
-msgid "Product Template"
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product Variant"
 msgstr ""
 
 #. module: stock_product_pack

From 864e9ee458f3547ea680b32c698f679602aba671 Mon Sep 17 00:00:00 2001
From: OCA-git-bot <oca-git-bot@odoo-community.org>
Date: Mon, 5 Jun 2023 15:41:03 +0000
Subject: [PATCH 22/32] [UPD] README.rst

---
 stock_product_pack/README.rst                    | 10 +++++-----
 stock_product_pack/static/description/index.html |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index 8f7c3b9d2..d1163025d 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -14,13 +14,13 @@ Stock product Pack
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
-    :target: https://github.com/OCA/product-pack/tree/15.0/stock_product_pack
+    :target: https://github.com/OCA/product-pack/tree/16.0/stock_product_pack
     :alt: OCA/product-pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/product-pack-15-0/product-pack-15-0-stock_product_pack
+    :target: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/286/15.0
+    :target: https://runbot.odoo-community.org/runbot/286/16.0
     :alt: Try me on Runbot
 
 |badge1| |badge2| |badge3| |badge4| |badge5| 
@@ -54,7 +54,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -99,6 +99,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-ernestotejeda| 
 
-This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/15.0/stock_product_pack>`_ project on GitHub.
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/16.0/stock_product_pack>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index 4e7b82228..0fb543e27 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -367,7 +367,7 @@ <h1 class="title">Stock product Pack</h1>
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/15.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-15-0/product-pack-15-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/15.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/16.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/16.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
 <p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
 components of the pack.</p>
 <p><strong>Table of contents</strong></p>
@@ -403,7 +403,7 @@ <h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us smashing it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2015.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -437,7 +437,7 @@ <h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/15.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/16.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>

From 0942abf669266c40d7ac6dfccbb3e0f76c5d4b9d Mon Sep 17 00:00:00 2001
From: Weblate <noreply@weblate.org>
Date: Mon, 5 Jun 2023 19:09:02 +0000
Subject: [PATCH 23/32] Update translation files

Updated by "Update PO files to match POT (msgmerge)" hook in Weblate.

Translation: product-pack-16.0/product-pack-16.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack/
---
 stock_product_pack/i18n/es.po | 6 +++---
 stock_product_pack/i18n/fr.po | 6 +++---
 stock_product_pack/i18n/pt.po | 6 +++---
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/stock_product_pack/i18n/es.po b/stock_product_pack/i18n/es.po
index 05493f240..4d56a62a2 100644
--- a/stock_product_pack/i18n/es.po
+++ b/stock_product_pack/i18n/es.po
@@ -28,13 +28,13 @@ msgid "Procurement Group"
 msgstr ""
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_product
+#: model:ir.model,name:stock_product_pack.model_product_template
 msgid "Product"
 msgstr "Producto"
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_template
-msgid "Product Template"
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product Variant"
 msgstr ""
 
 #. module: stock_product_pack
diff --git a/stock_product_pack/i18n/fr.po b/stock_product_pack/i18n/fr.po
index bde733ab6..92e6eece6 100644
--- a/stock_product_pack/i18n/fr.po
+++ b/stock_product_pack/i18n/fr.po
@@ -28,13 +28,13 @@ msgid "Procurement Group"
 msgstr ""
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_product
+#: model:ir.model,name:stock_product_pack.model_product_template
 msgid "Product"
 msgstr "Article"
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_template
-msgid "Product Template"
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product Variant"
 msgstr ""
 
 #. module: stock_product_pack
diff --git a/stock_product_pack/i18n/pt.po b/stock_product_pack/i18n/pt.po
index 6188b3e78..f6fadc0df 100644
--- a/stock_product_pack/i18n/pt.po
+++ b/stock_product_pack/i18n/pt.po
@@ -28,13 +28,13 @@ msgid "Procurement Group"
 msgstr ""
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_product
+#: model:ir.model,name:stock_product_pack.model_product_template
 msgid "Product"
 msgstr "Produto"
 
 #. module: stock_product_pack
-#: model:ir.model,name:stock_product_pack.model_product_template
-msgid "Product Template"
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product Variant"
 msgstr ""
 
 #. module: stock_product_pack

From 9fd6761edfa3c590119b83396df86078eef4a7c1 Mon Sep 17 00:00:00 2001
From: OCA-git-bot <oca-git-bot@odoo-community.org>
Date: Sun, 3 Sep 2023 15:27:03 +0000
Subject: [PATCH 24/32] [UPD] README.rst

---
 stock_product_pack/README.rst                 | 15 ++++---
 .../static/description/index.html             | 40 ++++++++++---------
 2 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index d1163025d..c0708f8df 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -2,10 +2,13 @@
 Stock product Pack
 ==================
 
-.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.. 
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    !! This file is generated by oca-gen-addon-readme !!
    !! changes will be overwritten.                   !!
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !! source digest: sha256:ebc372d1ed11084b43923fe380d6ec0197ee89b67458ebb1aebadc39d0a93953
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
     :target: https://odoo-community.org/page/development-status
@@ -19,11 +22,11 @@ Stock product Pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
     :target: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack
     :alt: Translate me on Weblate
-.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
-    :target: https://runbot.odoo-community.org/runbot/286/16.0
-    :alt: Try me on Runbot
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+    :target: https://runboat.odoo-community.org/builds?repo=OCA/product-pack&target_branch=16.0
+    :alt: Try me on Runboat
 
-|badge1| |badge2| |badge3| |badge4| |badge5| 
+|badge1| |badge2| |badge3| |badge4| |badge5|
 
 This module allows you to get *On Hand* and *Forecasted* values calculated from
 components of the pack.
@@ -53,7 +56,7 @@ Bug Tracker
 
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
 `feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index 0fb543e27..e38f3566c 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -1,20 +1,20 @@
-<?xml version="1.0" encoding="utf-8" ?>
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.15.1: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
 <title>Stock product Pack</title>
 <style type="text/css">
 
 /*
 :Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
+:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
 :Copyright: This stylesheet has been placed in the public domain.
 
 Default cascading style sheet for the HTML output of Docutils.
 
-See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
+See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
 customize this style sheet.
 */
 
@@ -366,25 +366,27 @@ <h1 class="title">Stock product Pack</h1>
 <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !! This file is generated by oca-gen-addon-readme !!
 !! changes will be overwritten.                   !!
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!! source digest: sha256:ebc372d1ed11084b43923fe380d6ec0197ee89b67458ebb1aebadc39d0a93953
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<p><a class="reference external" 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" 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" href="https://github.com/OCA/product-pack/tree/16.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external" href="https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external" href="https://runbot.odoo-community.org/runbot/286/16.0"><img alt="Try me on Runbot" src="https://img.shields.io/badge/runbot-Try%20me-875A7B.png" /></a></p>
+<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/product-pack/tree/16.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack"><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/product-pack&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
 components of the pack.</p>
 <p><strong>Table of contents</strong></p>
 <div class="contents local topic" id="contents">
 <ul class="simple">
-<li><a class="reference internal" href="#usage" id="id1">Usage</a></li>
-<li><a class="reference internal" href="#bug-tracker" id="id2">Bug Tracker</a></li>
-<li><a class="reference internal" href="#credits" id="id3">Credits</a><ul>
-<li><a class="reference internal" href="#authors" id="id4">Authors</a></li>
-<li><a class="reference internal" href="#contributors" id="id5">Contributors</a></li>
-<li><a class="reference internal" href="#maintainers" id="id6">Maintainers</a></li>
+<li><a class="reference internal" href="#usage" id="toc-entry-1">Usage</a></li>
+<li><a class="reference internal" href="#bug-tracker" id="toc-entry-2">Bug Tracker</a></li>
+<li><a class="reference internal" href="#credits" id="toc-entry-3">Credits</a><ul>
+<li><a class="reference internal" href="#authors" id="toc-entry-4">Authors</a></li>
+<li><a class="reference internal" href="#contributors" id="toc-entry-5">Contributors</a></li>
+<li><a class="reference internal" href="#maintainers" id="toc-entry-6">Maintainers</a></li>
 </ul>
 </li>
 </ul>
 </div>
 <div class="section" id="usage">
-<h1><a class="toc-backref" href="#id1">Usage</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
 <p>To use this module, you need to:</p>
 <ol class="arabic simple">
 <li>Go to <em>Inventory -&gt; Master Data -&gt; Product</em>, create a product and check
@@ -399,17 +401,17 @@ <h1><a class="toc-backref" href="#id1">Usage</a></h1>
 </ol>
 </div>
 <div class="section" id="bug-tracker">
-<h1><a class="toc-backref" href="#id2">Bug Tracker</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
-If you spotted it first, help us smashing it by providing a detailed and welcomed
+If you spotted it first, help us to smash it by providing a detailed and welcomed
 <a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
-<h1><a class="toc-backref" href="#id3">Credits</a></h1>
+<h1><a class="toc-backref" href="#toc-entry-3">Credits</a></h1>
 <div class="section" id="authors">
-<h2><a class="toc-backref" href="#id4">Authors</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-4">Authors</a></h2>
 <ul class="simple">
 <li>NaN·tic</li>
 <li>ADHOC SA</li>
@@ -417,7 +419,7 @@ <h2><a class="toc-backref" href="#id4">Authors</a></h2>
 </ul>
 </div>
 <div class="section" id="contributors">
-<h2><a class="toc-backref" href="#id5">Contributors</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
 <ul class="simple">
 <li><a class="reference external" href="https://www.tecnativa.com">Tecnativa</a>:<ul>
 <li>Ernesto Tejeda</li>
@@ -429,14 +431,14 @@ <h2><a class="toc-backref" href="#id5">Contributors</a></h2>
 </ul>
 </div>
 <div class="section" id="maintainers">
-<h2><a class="toc-backref" href="#id6">Maintainers</a></h2>
+<h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
 <p>This module is maintained by the OCA.</p>
 <a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
 mission is to support the collaborative development of Odoo features and
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
-<p><a class="reference external" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
+<p><a class="reference external image-reference" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
 <p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/16.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>

From 3ccd0df08610efe5d1306c8b4331147f4d8d436f Mon Sep 17 00:00:00 2001
From: Ivorra78 <informatica@totmaterial.es>
Date: Wed, 23 Aug 2023 11:35:29 +0000
Subject: [PATCH 25/32] Translated using Weblate (Spanish)

Currently translated at 100.0% (5 of 5 strings)

Translation: product-pack-16.0/product-pack-16.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack/es/
---
 stock_product_pack/i18n/es.po | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/stock_product_pack/i18n/es.po b/stock_product_pack/i18n/es.po
index 4d56a62a2..ba2bf64d5 100644
--- a/stock_product_pack/i18n/es.po
+++ b/stock_product_pack/i18n/es.po
@@ -7,25 +7,26 @@ msgstr ""
 "Project-Id-Version: Odoo Server 12.0\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2019-09-18 14:54+0000\n"
-"PO-Revision-Date: 2019-09-18 14:54+0000\n"
-"Last-Translator: <>\n"
+"PO-Revision-Date: 2023-09-03 13:43+0000\n"
+"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
 "Language-Team: \n"
-"Language: \n"
+"Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
-"Plural-Forms: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: stock_product_pack
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
 msgid "Don't create move"
-msgstr ""
+msgstr "No crear movimiento"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_procurement_group
 msgid "Procurement Group"
-msgstr ""
+msgstr "Grupo de Adquisiciones"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_template
@@ -35,7 +36,7 @@ msgstr "Producto"
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product Variant"
-msgstr ""
+msgstr "Variante del producto"
 
 #. module: stock_product_pack
 #: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
@@ -46,3 +47,7 @@ msgid ""
 "availability (type = 'product') but without actually having stock and moves "
 "of it."
 msgstr ""
+"Con esta opción, el paquete no creará un stock.move y se establecerá como "
+"entregado tras la confirmación de la venta. Esto es útil para obtener la "
+"disponibilidad de existencias del paquete (type = 'product') pero sin tener "
+"existencias ni movimientos del mismo."

From d0d46ca4819e72eee397ac1c7f4d5cb41504f92a Mon Sep 17 00:00:00 2001
From: mymage <stefano.consolaro@mymage.it>
Date: Wed, 8 Nov 2023 07:18:20 +0000
Subject: [PATCH 26/32] Added translation using Weblate (Italian)

---
 stock_product_pack/i18n/it.po | 46 +++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)
 create mode 100644 stock_product_pack/i18n/it.po

diff --git a/stock_product_pack/i18n/it.po b/stock_product_pack/i18n/it.po
new file mode 100644
index 000000000..b223738d0
--- /dev/null
+++ b/stock_product_pack/i18n/it.po
@@ -0,0 +1,46 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* stock_product_pack
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 16.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: stock_product_pack
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
+msgid "Don't create move"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_procurement_group
+msgid "Procurement Group"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_template
+msgid "Product"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model,name:stock_product_pack.model_product_product
+msgid "Product Variant"
+msgstr ""
+
+#. module: stock_product_pack
+#: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
+#: model:ir.model.fields,help:stock_product_pack.field_product_template__dont_create_move
+msgid ""
+"With this option, the pack won't create an stock.move and will be set as "
+"delivered upon sale confirmation. This is useful to use get pack stock "
+"availability (type = 'product') but without actually having stock and moves "
+"of it."
+msgstr ""

From 84d2a00cb68164ecc9d2bf9e27c81c1b07dbf449 Mon Sep 17 00:00:00 2001
From: mymage <stefano.consolaro@mymage.it>
Date: Thu, 9 Nov 2023 16:03:22 +0000
Subject: [PATCH 27/32] Translated using Weblate (Italian)

Currently translated at 100.0% (5 of 5 strings)

Translation: product-pack-16.0/product-pack-16.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack/it/
---
 stock_product_pack/i18n/it.po | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

diff --git a/stock_product_pack/i18n/it.po b/stock_product_pack/i18n/it.po
index b223738d0..f5cc5e4e2 100644
--- a/stock_product_pack/i18n/it.po
+++ b/stock_product_pack/i18n/it.po
@@ -6,34 +6,36 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2023-11-09 18:38+0000\n"
+"Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
 "Language-Team: none\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: \n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.17\n"
 
 #. module: stock_product_pack
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_product__dont_create_move
 #: model:ir.model.fields,field_description:stock_product_pack.field_product_template__dont_create_move
 msgid "Don't create move"
-msgstr ""
+msgstr "Non creare il movimento"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_procurement_group
 msgid "Procurement Group"
-msgstr ""
+msgstr "Gruppo approvvigionamento"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_template
 msgid "Product"
-msgstr ""
+msgstr "Prodotto"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_product
 msgid "Product Variant"
-msgstr ""
+msgstr "Variante prodotto"
 
 #. module: stock_product_pack
 #: model:ir.model.fields,help:stock_product_pack.field_product_product__dont_create_move
@@ -44,3 +46,7 @@ msgid ""
 "availability (type = 'product') but without actually having stock and moves "
 "of it."
 msgstr ""
+"Con questa opzione, il collo non creerà un movimento di magazzino e verrà "
+"impostato a consegnato alla conferma della vendita. Questo è utile per "
+"utilizzare la disponibilità di magazzino del collo (tipo = 'prodotto') ma "
+"senza avere realmente movimenti."

From 900e1a0157e3f23938ab27f758044b1171ab7b17 Mon Sep 17 00:00:00 2001
From: mymage <stefano.consolaro@mymage.it>
Date: Tue, 21 Nov 2023 11:36:10 +0000
Subject: [PATCH 28/32] Translated using Weblate (Italian)

Currently translated at 100.0% (5 of 5 strings)

Translation: product-pack-16.0/product-pack-16.0-stock_product_pack
Translate-URL: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack/it/
---
 stock_product_pack/i18n/it.po | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/stock_product_pack/i18n/it.po b/stock_product_pack/i18n/it.po
index f5cc5e4e2..6afb1bf24 100644
--- a/stock_product_pack/i18n/it.po
+++ b/stock_product_pack/i18n/it.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: Odoo Server 16.0\n"
 "Report-Msgid-Bugs-To: \n"
-"PO-Revision-Date: 2023-11-09 18:38+0000\n"
+"PO-Revision-Date: 2023-11-21 11:36+0000\n"
 "Last-Translator: mymage <stefano.consolaro@mymage.it>\n"
 "Language-Team: none\n"
 "Language: it\n"
@@ -25,7 +25,7 @@ msgstr "Non creare il movimento"
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_procurement_group
 msgid "Procurement Group"
-msgstr "Gruppo approvvigionamento"
+msgstr "Gruppo di approvvigionamento"
 
 #. module: stock_product_pack
 #: model:ir.model,name:stock_product_pack.model_product_template

From 83e6e2ee37046d788c56a1d8749a6ac2935aed69 Mon Sep 17 00:00:00 2001
From: Bruno Zanotti <bz@adhoc.com.ar>
Date: Mon, 18 Dec 2023 16:09:09 -0300
Subject: [PATCH 29/32] [IMP] stock_product_pack: pre-commit execution

---
 stock_product_pack/README.rst                 | 49 ++++++++++---------
 stock_product_pack/pyproject.toml             |  3 ++
 stock_product_pack/readme/CONTRIBUTORS.md     |  5 ++
 stock_product_pack/readme/CONTRIBUTORS.rst    |  6 ---
 stock_product_pack/readme/DESCRIPTION.md      |  2 +
 stock_product_pack/readme/DESCRIPTION.rst     |  2 -
 stock_product_pack/readme/USAGE.md            | 12 +++++
 stock_product_pack/readme/USAGE.rst           | 11 -----
 .../static/description/index.html             | 27 +++++-----
 9 files changed, 61 insertions(+), 56 deletions(-)
 create mode 100644 stock_product_pack/pyproject.toml
 create mode 100644 stock_product_pack/readme/CONTRIBUTORS.md
 delete mode 100644 stock_product_pack/readme/CONTRIBUTORS.rst
 create mode 100644 stock_product_pack/readme/DESCRIPTION.md
 delete mode 100644 stock_product_pack/readme/DESCRIPTION.rst
 create mode 100644 stock_product_pack/readme/USAGE.md
 delete mode 100644 stock_product_pack/readme/USAGE.rst

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index c0708f8df..033cd84c0 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -17,19 +17,19 @@ Stock product Pack
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
-    :target: https://github.com/OCA/product-pack/tree/16.0/stock_product_pack
+    :target: https://github.com/OCA/product-pack/tree/17.0/stock_product_pack
     :alt: OCA/product-pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack
+    :target: https://translation.odoo-community.org/projects/product-pack-17-0/product-pack-17-0-stock_product_pack
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
-    :target: https://runboat.odoo-community.org/builds?repo=OCA/product-pack&target_branch=16.0
+    :target: https://runboat.odoo-community.org/builds?repo=OCA/product-pack&target_branch=17.0
     :alt: Try me on Runboat
 
 |badge1| |badge2| |badge3| |badge4| |badge5|
 
-This module allows you to get *On Hand* and *Forecasted* values calculated from
-components of the pack.
+This module allows you to get *On Hand* and *Forecasted* values
+calculated from components of the pack.
 
 **Table of contents**
 
@@ -41,15 +41,16 @@ Usage
 
 To use this module, you need to:
 
-#. Go to *Inventory -> Master Data -> Product*, create a product and check
-   "Is Pack?" field then set Pack Type and Pack component price.
-#. Choose products to include in the pack.
-#. Go to *Inventory -> Operations -> Transfers* and create transfer related to
-   components of a Pack 'X'.
-#. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X' and you
-   will see in the smart buttons that show *On Hand* and *Forecasted* the
-   quantities based on the *On Hand* and *Forecasted* quantities of
-   its components. That is the minimum quantities of its components.
+1. Go to *Inventory -> Master Data -> Product*, create a product and
+   check "Is Pack?" field then set Pack Type and Pack component price.
+2. Choose products to include in the pack.
+3. Go to *Inventory -> Operations -> Transfers* and create transfer
+   related to components of a Pack 'X'.
+4. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X'
+   and you will see in the smart buttons that show *On Hand* and
+   *Forecasted* the quantities based on the *On Hand* and *Forecasted*
+   quantities of its components. That is the minimum quantities of its
+   components.
 
 Bug Tracker
 ===========
@@ -57,7 +58,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -65,24 +66,24 @@ Credits
 =======
 
 Authors
-~~~~~~~
+-------
 
 * NaN·tic
 * ADHOC SA
 * Tecnativa
 
 Contributors
-~~~~~~~~~~~~
+------------
 
-* `Tecnativa <https://www.tecnativa.com>`_:
+-  `Tecnativa <https://www.tecnativa.com>`__:
 
-  * Ernesto Tejeda
-  * Pedro M. Baeza
-  * Sergio Teruel
-  * João Marques
+   -  Ernesto Tejeda
+   -  Pedro M. Baeza
+   -  Sergio Teruel
+   -  João Marques
 
 Maintainers
-~~~~~~~~~~~
+-----------
 
 This module is maintained by the OCA.
 
@@ -102,6 +103,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-ernestotejeda| 
 
-This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/16.0/stock_product_pack>`_ project on GitHub.
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/17.0/stock_product_pack>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/pyproject.toml b/stock_product_pack/pyproject.toml
new file mode 100644
index 000000000..4231d0ccc
--- /dev/null
+++ b/stock_product_pack/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
diff --git a/stock_product_pack/readme/CONTRIBUTORS.md b/stock_product_pack/readme/CONTRIBUTORS.md
new file mode 100644
index 000000000..8f03a6bba
--- /dev/null
+++ b/stock_product_pack/readme/CONTRIBUTORS.md
@@ -0,0 +1,5 @@
+- [Tecnativa](https://www.tecnativa.com):
+  - Ernesto Tejeda
+  - Pedro M. Baeza
+  - Sergio Teruel
+  - João Marques
diff --git a/stock_product_pack/readme/CONTRIBUTORS.rst b/stock_product_pack/readme/CONTRIBUTORS.rst
deleted file mode 100644
index 7f0f6bd5d..000000000
--- a/stock_product_pack/readme/CONTRIBUTORS.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-* `Tecnativa <https://www.tecnativa.com>`_:
-
-  * Ernesto Tejeda
-  * Pedro M. Baeza
-  * Sergio Teruel
-  * João Marques
diff --git a/stock_product_pack/readme/DESCRIPTION.md b/stock_product_pack/readme/DESCRIPTION.md
new file mode 100644
index 000000000..0fb4d3844
--- /dev/null
+++ b/stock_product_pack/readme/DESCRIPTION.md
@@ -0,0 +1,2 @@
+This module allows you to get *On Hand* and *Forecasted* values
+calculated from components of the pack.
diff --git a/stock_product_pack/readme/DESCRIPTION.rst b/stock_product_pack/readme/DESCRIPTION.rst
deleted file mode 100644
index b7a03ce15..000000000
--- a/stock_product_pack/readme/DESCRIPTION.rst
+++ /dev/null
@@ -1,2 +0,0 @@
-This module allows you to get *On Hand* and *Forecasted* values calculated from
-components of the pack.
diff --git a/stock_product_pack/readme/USAGE.md b/stock_product_pack/readme/USAGE.md
new file mode 100644
index 000000000..bd357773f
--- /dev/null
+++ b/stock_product_pack/readme/USAGE.md
@@ -0,0 +1,12 @@
+To use this module, you need to:
+
+1.  Go to *Inventory -\> Master Data -\> Product*, create a product and
+    check "Is Pack?" field then set Pack Type and Pack component price.
+2.  Choose products to include in the pack.
+3.  Go to *Inventory -\> Operations -\> Transfers* and create transfer
+    related to components of a Pack 'X'.
+4.  Then go to *Inventory -\> Master Data -\> Product*, find the Pack
+    'X' and you will see in the smart buttons that show *On Hand* and
+    *Forecasted* the quantities based on the *On Hand* and *Forecasted*
+    quantities of its components. That is the minimum quantities of its
+    components.
diff --git a/stock_product_pack/readme/USAGE.rst b/stock_product_pack/readme/USAGE.rst
deleted file mode 100644
index 40b2439e7..000000000
--- a/stock_product_pack/readme/USAGE.rst
+++ /dev/null
@@ -1,11 +0,0 @@
-To use this module, you need to:
-
-#. Go to *Inventory -> Master Data -> Product*, create a product and check
-   "Is Pack?" field then set Pack Type and Pack component price.
-#. Choose products to include in the pack.
-#. Go to *Inventory -> Operations -> Transfers* and create transfer related to
-   components of a Pack 'X'.
-#. Then go to *Inventory -> Master Data -> Product*, find the Pack 'X' and you
-   will see in the smart buttons that show *On Hand* and *Forecasted* the
-   quantities based on the *On Hand* and *Forecasted* quantities of
-   its components. That is the minimum quantities of its components.
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index e38f3566c..d1d398c9c 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -369,9 +369,9 @@ <h1 class="title">Stock product Pack</h1>
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !! source digest: sha256:ebc372d1ed11084b43923fe380d6ec0197ee89b67458ebb1aebadc39d0a93953
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<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/product-pack/tree/16.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/product-pack-16-0/product-pack-16-0-stock_product_pack"><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/product-pack&amp;target_branch=16.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
-<p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values calculated from
-components of the pack.</p>
+<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/product-pack/tree/17.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/product-pack-17-0/product-pack-17-0-stock_product_pack"><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/product-pack&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
+<p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values
+calculated from components of the pack.</p>
 <p><strong>Table of contents</strong></p>
 <div class="contents local topic" id="contents">
 <ul class="simple">
@@ -389,15 +389,16 @@ <h1 class="title">Stock product Pack</h1>
 <h1><a class="toc-backref" href="#toc-entry-1">Usage</a></h1>
 <p>To use this module, you need to:</p>
 <ol class="arabic simple">
-<li>Go to <em>Inventory -&gt; Master Data -&gt; Product</em>, create a product and check
-“Is Pack?” field then set Pack Type and Pack component price.</li>
+<li>Go to <em>Inventory -&gt; Master Data -&gt; Product</em>, create a product and
+check “Is Pack?” field then set Pack Type and Pack component price.</li>
 <li>Choose products to include in the pack.</li>
-<li>Go to <em>Inventory -&gt; Operations -&gt; Transfers</em> and create transfer related to
-components of a Pack ‘X’.</li>
-<li>Then go to <em>Inventory -&gt; Master Data -&gt; Product</em>, find the Pack ‘X’ and you
-will see in the smart buttons that show <em>On Hand</em> and <em>Forecasted</em> the
-quantities based on the <em>On Hand</em> and <em>Forecasted</em> quantities of
-its components. That is the minimum quantities of its components.</li>
+<li>Go to <em>Inventory -&gt; Operations -&gt; Transfers</em> and create transfer
+related to components of a Pack ‘X’.</li>
+<li>Then go to <em>Inventory -&gt; Master Data -&gt; Product</em>, find the Pack ‘X’
+and you will see in the smart buttons that show <em>On Hand</em> and
+<em>Forecasted</em> the quantities based on the <em>On Hand</em> and <em>Forecasted</em>
+quantities of its components. That is the minimum quantities of its
+components.</li>
 </ol>
 </div>
 <div class="section" id="bug-tracker">
@@ -405,7 +406,7 @@ <h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us to smash it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2016.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -439,7 +440,7 @@ <h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external image-reference" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/16.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/17.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>

From a442d2edbfed11f7ea422c565b5ed9de3a88e886 Mon Sep 17 00:00:00 2001
From: Bruno Zanotti <bz@adhoc.com.ar>
Date: Mon, 18 Dec 2023 16:09:10 -0300
Subject: [PATCH 30/32] [MIG] stock_product_pack: Migration to 17.0

---
 stock_product_pack/README.rst                 | 14 +++++++----
 stock_product_pack/__manifest__.py            |  2 +-
 stock_product_pack/models/product_product.py  | 23 ++++++++++++++++---
 stock_product_pack/readme/CONTRIBUTORS.md     |  2 ++
 .../static/description/index.html             | 16 +++++++++----
 .../tests/test_stock_product_pack.py          | 18 ++++++++-------
 .../views/product_template_views.xml          |  2 +-
 7 files changed, 54 insertions(+), 23 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index 033cd84c0..a57a215e3 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -75,12 +75,16 @@ Authors
 Contributors
 ------------
 
--  `Tecnativa <https://www.tecnativa.com>`__:
+- `Tecnativa <https://www.tecnativa.com>`__:
 
-   -  Ernesto Tejeda
-   -  Pedro M. Baeza
-   -  Sergio Teruel
-   -  João Marques
+  - Ernesto Tejeda
+  - Pedro M. Baeza
+  - Sergio Teruel
+  - João Marques
+
+- `ADHOC SA <https://www.adhoc.com.ar>`__:
+
+  - Bruno Zanotti
 
 Maintainers
 -----------
diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index 7ab78dc1c..f58301350 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -5,7 +5,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "16.0.1.0.0",
+    "version": "17.0.1.0.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index ba2989823..32142dc7e 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -4,7 +4,7 @@
 
 import math
 
-from odoo import models
+from odoo import api, models
 
 
 class ProductProduct(models.Model):
@@ -13,10 +13,10 @@ class ProductProduct(models.Model):
     def _compute_quantities_dict(
         self, lot_id, owner_id, package_id, from_date=False, to_date=False
     ):
-        res = super()._compute_quantities_dict(
+        packs = self.filtered("pack_ok")
+        res = super(ProductProduct, self - packs)._compute_quantities_dict(
             lot_id, owner_id, package_id, from_date=from_date, to_date=to_date
         )
-        packs = self.filtered("pack_ok")
         for product in packs.with_context(prefetch_fields=False):
             pack_qty_available = []
             pack_virtual_available = []
@@ -48,6 +48,23 @@ def _compute_quantities_dict(
             }
         return res
 
+    @api.depends(
+        "stock_move_ids.product_qty",
+        "pack_line_ids.product_id.stock_move_ids.product_qty",
+        "stock_move_ids.state",
+        "pack_line_ids.product_id.stock_move_ids.state",
+        "stock_move_ids.quantity",
+        "pack_line_ids.product_id.stock_move_ids.quantity",
+    )
+    @api.depends_context(
+        "lot_id",
+        "owner_id",
+        "package_id",
+        "from_date",
+        "to_date",
+        "location",
+        "warehouse",
+    )
     def _compute_quantities(self):
         """In v13 Odoo introduces a filter for products not services.
         To keep how it was working on v12 we try to get stock for
diff --git a/stock_product_pack/readme/CONTRIBUTORS.md b/stock_product_pack/readme/CONTRIBUTORS.md
index 8f03a6bba..139c58419 100644
--- a/stock_product_pack/readme/CONTRIBUTORS.md
+++ b/stock_product_pack/readme/CONTRIBUTORS.md
@@ -3,3 +3,5 @@
   - Pedro M. Baeza
   - Sergio Teruel
   - João Marques
+- [ADHOC SA](https://www.adhoc.com.ar):
+  - Bruno Zanotti
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index d1d398c9c..923aed1fe 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -1,4 +1,3 @@
-<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
@@ -9,10 +8,11 @@
 
 /*
 :Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
+:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
 :Copyright: This stylesheet has been placed in the public domain.
 
 Default cascading style sheet for the HTML output of Docutils.
+Despite the name, some widely supported CSS2 features are used.
 
 See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
 customize this style sheet.
@@ -275,7 +275,7 @@
   margin-left: 2em ;
   margin-right: 2em }
 
-pre.code .ln { color: grey; } /* line numbers */
+pre.code .ln { color: gray; } /* line numbers */
 pre.code, code { background-color: #eeeeee }
 pre.code .comment, code .comment { color: #5C6576 }
 pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -301,7 +301,7 @@
 span.pre {
   white-space: pre }
 
-span.problematic {
+span.problematic, pre.problematic {
   color: red }
 
 span.section-subtitle {
@@ -429,12 +429,18 @@ <h2><a class="toc-backref" href="#toc-entry-5">Contributors</a></h2>
 <li>João Marques</li>
 </ul>
 </li>
+<li><a class="reference external" href="https://www.adhoc.com.ar">ADHOC SA</a>:<ul>
+<li>Bruno Zanotti</li>
+</ul>
+</li>
 </ul>
 </div>
 <div class="section" id="maintainers">
 <h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
 <p>This module is maintained by the OCA.</p>
-<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
+<a class="reference external image-reference" href="https://odoo-community.org">
+<img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" />
+</a>
 <p>OCA, or the Odoo Community Association, is a nonprofit organization whose
 mission is to support the collaborative development of Odoo features and
 promote its widespread use.</p>
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index cf789af2b..d0ec2a778 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -4,12 +4,13 @@
 
 import logging
 
-from odoo.tests import Form, TransactionCase
+from odoo.tests import Form, TransactionCase, tagged
 
 _logger = logging.getLogger(__name__)
 
 
-class TestSaleProductPack(TransactionCase):
+@tagged("post_install", "-at_install")
+class TestStockProductPack(TransactionCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass()
@@ -167,12 +168,13 @@ def test_compute_quantities_dict(self):
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 0)
         wizard_dict = picking.button_validate()
-        wizard = Form(
-            self.env[(wizard_dict.get("res_model"))].with_context(
-                **wizard_dict["context"]
-            )
-        ).save()
-        wizard.process()
+        if wizard_dict is not True:
+            wizard = Form(
+                self.env[(wizard_dict.get("res_model"))].with_context(
+                    **wizard_dict["context"]
+                )
+            ).save()
+            wizard.process()
         self.assertEqual(self.pack_dc.virtual_available, 5)
         self.assertEqual(self.pack_dc.qty_available, 5)
 
diff --git a/stock_product_pack/views/product_template_views.xml b/stock_product_pack/views/product_template_views.xml
index 89c459003..79239a54a 100644
--- a/stock_product_pack/views/product_template_views.xml
+++ b/stock_product_pack/views/product_template_views.xml
@@ -11,7 +11,7 @@
             <field name="pack_modifiable" position="after">
                 <field
                     name="dont_create_move"
-                    attrs="{'invisible':['|', ('pack_ok', '=', False), ('detailed_type', '=', 'service')]}"
+                    invisible="not pack_ok or detailed_type == 'service'"
                 />
             </field>
         </field>

From 054aebb6f343a96c3d094825df958fd2259db949 Mon Sep 17 00:00:00 2001
From: Alexis Lopez <loa@adhoc.com.ar>
Date: Mon, 25 Nov 2024 12:40:37 -0300
Subject: [PATCH 31/32] [IMP] stock_product_pack: pre-commit execution

---
 stock_product_pack/README.rst                    | 10 +++++-----
 stock_product_pack/static/description/index.html |  6 +++---
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/stock_product_pack/README.rst b/stock_product_pack/README.rst
index a57a215e3..31221ec62 100644
--- a/stock_product_pack/README.rst
+++ b/stock_product_pack/README.rst
@@ -17,13 +17,13 @@ Stock product Pack
     :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
     :alt: License: AGPL-3
 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github
-    :target: https://github.com/OCA/product-pack/tree/17.0/stock_product_pack
+    :target: https://github.com/OCA/product-pack/tree/18.0/stock_product_pack
     :alt: OCA/product-pack
 .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
-    :target: https://translation.odoo-community.org/projects/product-pack-17-0/product-pack-17-0-stock_product_pack
+    :target: https://translation.odoo-community.org/projects/product-pack-18-0/product-pack-18-0-stock_product_pack
     :alt: Translate me on Weblate
 .. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
-    :target: https://runboat.odoo-community.org/builds?repo=OCA/product-pack&target_branch=17.0
+    :target: https://runboat.odoo-community.org/builds?repo=OCA/product-pack&target_branch=18.0
     :alt: Try me on Runboat
 
 |badge1| |badge2| |badge3| |badge4| |badge5|
@@ -58,7 +58,7 @@ Bug Tracker
 Bugs are tracked on `GitHub Issues <https://github.com/OCA/product-pack/issues>`_.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us to smash it by providing a detailed and welcomed
-`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
+`feedback <https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
 
 Do not contact contributors directly about support or help with technical issues.
 
@@ -107,6 +107,6 @@ Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:
 
 |maintainer-ernestotejeda| 
 
-This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/17.0/stock_product_pack>`_ project on GitHub.
+This module is part of the `OCA/product-pack <https://github.com/OCA/product-pack/tree/18.0/stock_product_pack>`_ project on GitHub.
 
 You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
diff --git a/stock_product_pack/static/description/index.html b/stock_product_pack/static/description/index.html
index 923aed1fe..cb2ecb6ee 100644
--- a/stock_product_pack/static/description/index.html
+++ b/stock_product_pack/static/description/index.html
@@ -369,7 +369,7 @@ <h1 class="title">Stock product Pack</h1>
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !! source digest: sha256:ebc372d1ed11084b43923fe380d6ec0197ee89b67458ebb1aebadc39d0a93953
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-<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/product-pack/tree/17.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/product-pack-17-0/product-pack-17-0-stock_product_pack"><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/product-pack&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
+<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/product-pack/tree/18.0/stock_product_pack"><img alt="OCA/product-pack" src="https://img.shields.io/badge/github-OCA%2Fproduct--pack-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/product-pack-18-0/product-pack-18-0-stock_product_pack"><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/product-pack&amp;target_branch=18.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
 <p>This module allows you to get <em>On Hand</em> and <em>Forecasted</em> values
 calculated from components of the pack.</p>
 <p><strong>Table of contents</strong></p>
@@ -406,7 +406,7 @@ <h1><a class="toc-backref" href="#toc-entry-2">Bug Tracker</a></h1>
 <p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/product-pack/issues">GitHub Issues</a>.
 In case of trouble, please check there if your issue has already been reported.
 If you spotted it first, help us to smash it by providing a detailed and welcomed
-<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
+<a class="reference external" href="https://github.com/OCA/product-pack/issues/new?body=module:%20stock_product_pack%0Aversion:%2018.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
 <p>Do not contact contributors directly about support or help with technical issues.</p>
 </div>
 <div class="section" id="credits">
@@ -446,7 +446,7 @@ <h2><a class="toc-backref" href="#toc-entry-6">Maintainers</a></h2>
 promote its widespread use.</p>
 <p>Current <a class="reference external" href="https://odoo-community.org/page/maintainer-role">maintainer</a>:</p>
 <p><a class="reference external image-reference" href="https://github.com/ernestotejeda"><img alt="ernestotejeda" src="https://github.com/ernestotejeda.png?size=40px" /></a></p>
-<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/17.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
+<p>This module is part of the <a class="reference external" href="https://github.com/OCA/product-pack/tree/18.0/stock_product_pack">OCA/product-pack</a> project on GitHub.</p>
 <p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
 </div>
 </div>

From dbecfd2d78951993acfe81af5674d3bfc2d92767 Mon Sep 17 00:00:00 2001
From: Alexis Lopez <loa@adhoc.com.ar>
Date: Mon, 25 Nov 2024 12:40:39 -0300
Subject: [PATCH 32/32] [MIG] stock_product_pack: Migration to 18.0

---
 stock_product_pack/__manifest__.py            |  2 +-
 stock_product_pack/models/product_product.py  | 36 ++++++++++++-------
 .../tests/test_stock_product_pack.py          | 34 +++++++++++++-----
 .../views/product_template_views.xml          |  2 +-
 4 files changed, 51 insertions(+), 23 deletions(-)

diff --git a/stock_product_pack/__manifest__.py b/stock_product_pack/__manifest__.py
index f58301350..882d28475 100644
--- a/stock_product_pack/__manifest__.py
+++ b/stock_product_pack/__manifest__.py
@@ -5,7 +5,7 @@
 # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
 {
     "name": "Stock product Pack",
-    "version": "17.0.1.0.0",
+    "version": "18.0.1.0.0",
     "category": "Warehouse",
     "summary": "This module allows you to get the right available quantities "
     "of the packs",
diff --git a/stock_product_pack/models/product_product.py b/stock_product_pack/models/product_product.py
index 32142dc7e..a24a6559b 100644
--- a/stock_product_pack/models/product_product.py
+++ b/stock_product_pack/models/product_product.py
@@ -14,30 +14,40 @@ def _compute_quantities_dict(
         self, lot_id, owner_id, package_id, from_date=False, to_date=False
     ):
         packs = self.filtered("pack_ok")
-        res = super(ProductProduct, self - packs)._compute_quantities_dict(
+        subproducts = packs.pack_line_ids.filtered(
+            lambda p: p.product_id.type == "consu"
+        ).mapped("product_id")
+        res = super(ProductProduct, self | subproducts)._compute_quantities_dict(
             lot_id, owner_id, package_id, from_date=from_date, to_date=to_date
         )
-        for product in packs.with_context(prefetch_fields=False):
+        for pack in packs.with_context(prefetch_fields=False):
             pack_qty_available = []
             pack_virtual_available = []
             pack_free_qty = []
-            subproducts = product.pack_line_ids.filtered(
-                lambda p: p.product_id.detailed_type == "product"
-            )
-            for subproduct in subproducts:
-                subproduct_stock = subproduct.product_id
-                sub_qty = subproduct.quantity
+
+            for line in pack.pack_line_ids.filtered(
+                lambda p: p.product_id.type == "consu"
+            ):
+                sub_qty = line.quantity
                 if sub_qty:
                     pack_qty_available.append(
-                        math.floor(subproduct_stock.qty_available / sub_qty)
+                        math.floor(
+                            (
+                                res[line.product_id.id]["qty_available"]
+                                - res[line.product_id.id]["outgoing_qty"]
+                            )
+                            / sub_qty
+                        )
                     )
                     pack_virtual_available.append(
-                        math.floor(subproduct_stock.virtual_available / sub_qty)
+                        math.floor(
+                            res[line.product_id.id]["virtual_available"] / sub_qty
+                        )
                     )
                     pack_free_qty.append(
-                        math.floor(subproduct_stock.free_qty / sub_qty)
+                        math.floor(res[line.product_id.id]["free_qty"] / sub_qty)
                     )
-            res[product.id] = {
+            res[pack.id] = {
                 "qty_available": (pack_qty_available and min(pack_qty_available) or 0),
                 "free_qty": (pack_free_qty and min(pack_free_qty) or 0),
                 "incoming_qty": 0,
@@ -71,7 +81,7 @@ def _compute_quantities(self):
         service products if they are pack.
         """
         service_pack_products = self.filtered(
-            lambda p: p.detailed_type == "service" and p.pack_ok
+            lambda p: p.type == "service" and p.pack_ok
         )
         result = super(
             ProductProduct, self - service_pack_products
diff --git a/stock_product_pack/tests/test_stock_product_pack.py b/stock_product_pack/tests/test_stock_product_pack.py
index d0ec2a778..785d31ef0 100644
--- a/stock_product_pack/tests/test_stock_product_pack.py
+++ b/stock_product_pack/tests/test_stock_product_pack.py
@@ -17,38 +17,44 @@ def setUpClass(cls):
         category_all_id = cls.env.ref("product.product_category_all").id
         cls.product_obj = cls.env["product.product"]
         cls.stock_rule_obj = cls.env["stock.rule"]
+        # The model stock doesn't add anymore the 'product'
+        # selection to the product type.
+        # Thus the type is changed to 'consu'
         component_1 = cls.product_obj.create(
             {
                 "name": "Component 1",
-                "detailed_type": "product",
+                "type": "consu",
+                "is_storable": True,
                 "categ_id": category_all_id,
             }
         )
         component_2 = cls.product_obj.create(
             {
                 "name": "Component 2",
-                "detailed_type": "product",
+                "type": "consu",
+                "is_storable": True,
                 "categ_id": category_all_id,
             }
         )
         component_3 = cls.product_obj.create(
             {
                 "name": "Component 3",
-                "detailed_type": "service",
+                "type": "service",
                 "categ_id": category_all_id,
             }
         )
         component_4 = cls.product_obj.create(
             {
                 "name": "Component 4",
-                "detailed_type": "consu",
+                "type": "consu",
+                "is_storable": True,
                 "categ_id": category_all_id,
             }
         )
         cls.pack_dc = cls.product_obj.create(
             {
                 "name": "Pack",
-                "detailed_type": "product",
+                "type": "consu",
                 "pack_ok": True,
                 "pack_type": "detailed",
                 "pack_component_price": "detailed",
@@ -94,7 +100,7 @@ def setUpClass(cls):
         cls.pack_dc_with_dm = cls.product_obj.create(
             {
                 "name": "Pack With storeable and not move product",
-                "detailed_type": "product",
+                "type": "consu",
                 "pack_ok": True,
                 "dont_create_move": True,
                 "pack_type": "detailed",
@@ -161,6 +167,18 @@ def test_compute_quantities_dict(self):
                             "location_dest_id": location_dest_id,
                         },
                     ),
+                    (
+                        0,
+                        0,
+                        {
+                            "name": "incoming_move_test_03",
+                            "product_id": components[3].id,
+                            "product_uom_qty": 9,
+                            "product_uom": components[3].uom_id.id,
+                            "location_id": location_id,
+                            "location_dest_id": location_dest_id,
+                        },
+                    ),
                 ],
             }
         )
@@ -186,7 +204,7 @@ def test_pack_with_dont_move_the_parent(self):
         def create_orderpoint(product, qty_min, qty_max, location, group):
             return self.env["stock.warehouse.orderpoint"].create(
                 {
-                    "name": "OP/%s" % product.name,
+                    "name": f"OP/{product.name}",
                     "product_id": product.id,
                     "product_min_qty": qty_min,
                     "product_max_qty": qty_max,
@@ -203,7 +221,7 @@ def create_orderpoint(product, qty_min, qty_max, location, group):
             self.env.ref("stock.stock_location_stock"),
             pg,
         )
-        self.env["stock.scheduler.compute"].create({}).procure_calculation()
+        # self.env["stock.scheduler.compute"].create({}).procure_calculation()
         picking_ids = self.env["stock.picking"].search([("group_id", "=", pg.id)])
         # we need to ensure that only the compents of the packs are in the moves.
         self.assertFalse(self.pack_dc_with_dm in picking_ids.move_ids.product_id)
diff --git a/stock_product_pack/views/product_template_views.xml b/stock_product_pack/views/product_template_views.xml
index 79239a54a..5b3414fc2 100644
--- a/stock_product_pack/views/product_template_views.xml
+++ b/stock_product_pack/views/product_template_views.xml
@@ -11,7 +11,7 @@
             <field name="pack_modifiable" position="after">
                 <field
                     name="dont_create_move"
-                    invisible="not pack_ok or detailed_type == 'service'"
+                    invisible="not pack_ok or type == 'service'"
                 />
             </field>
         </field>