From 38b58dda95b0c0e2b9cf7fa19611d8c028cf46e5 Mon Sep 17 00:00:00 2001 From: ernesto 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 `_. +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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* NaN·tic +* ADHOC SA +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * 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 `__: + +|maintainer-ernestotejeda| + +This module is part of the `OCA/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 `_: + + * 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 @@ + + + + + + +Stock product Pack + + + +
+

Stock product Pack

+ + +

Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

+

This module allows you to get the right available On Hand and Forecasted +quantities of the packs.

+

Table of contents

+ +
+

Configuration

+

To configure this module, you need to:

+
    +
  1. Go to Inventory -> Master Data -> Product, create a product and check +“Is Pack?” field, then set the products has to include in the Pack.
  2. +
  3. Set type of product pack.
  4. +
+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Inventory -> Operations -> Transfers and create transfer related to +components of a Pack ‘X’.
  2. +
  3. 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.
  4. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • NaN·tic
  • +
  • ADHOC SA
  • +
  • Tecnativa
  • +
+
+
+

Contributors

+
    +
  • Tecnativa:
      +
    • Ernesto Tejeda
    • +
    • Pedro M. Baeza
    • +
    • Sergio Teruel
    • +
    +
  • +
+
+
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainer:

+

ernestotejeda

+

This module is part of the OCA/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/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 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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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 From 27b74301179d64108baf9138bf099d11f5de52aa Mon Sep 17 00:00:00 2001 From: ernesto 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 @@

Stock product Pack

!! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

-

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

-
-

Configuration

-

To configure this module, you need to:

-
    -
  1. Go to Inventory -> Master Data -> Product, create a product and check -“Is Pack?” field, then set the products has to include in the Pack.
  2. -
  3. Set type of product pack.
  4. -
-
-

Usage

+

Usage

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. +
  3. Choose products to include in the pack.
  4. Go to Inventory -> Operations -> Transfers and create transfer related to components of a Pack ‘X’.
  5. Then go to Inventory -> Master Data -> Product, find the Pack ‘X’ and you @@ -406,7 +399,7 @@

    Usage

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub 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 @@ -414,9 +407,9 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • NaN·tic
  • ADHOC SA
  • @@ -424,7 +417,7 @@

    Authors

-

Contributors

+

Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From e11770ea134c08d77537094fdd120f4c86bf3c23 Mon Sep 17 00:00:00 2001 From: Pedro Castro Silva 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 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 \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 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 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 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 \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?= 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?= 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 `_. 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 `_. +`feedback `_. 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 `__: |maintainer-ernestotejeda| -This module is part of the `OCA/product-pack `_ project on GitHub. +This module is part of the `OCA/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 @@

Stock product Pack

!! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

+

Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

This module allows you to get On Hand and Forecasted values calculated from components of the pack.

Table of contents

@@ -403,7 +403,7 @@

Bug Tracker

Bugs are tracked on GitHub 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.

+feedback.

Do not contact contributors directly about support or help with technical issues.

@@ -423,6 +423,7 @@

Contributors

  • Ernesto Tejeda
  • Pedro M. Baeza
  • Sergio Teruel
  • +
  • João Marques
  • @@ -436,7 +437,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    ernestotejeda

    -

    This module is part of the OCA/product-pack project on GitHub.

    +

    This module is part of the OCA/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/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?= 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?= 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 @@ + + + + + + product.template.pack.form + product.template + + + + + + + + From cdf83b52c8f583c68e04d1208465b7fb1ae4f3db Mon Sep 17 00:00:00 2001 From: OCA Transbot 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 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 `_. 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -99,6 +99,6 @@ Current `maintainer `__: |maintainer-ernestotejeda| -This module is part of the `OCA/product-pack `_ project on GitHub. +This module is part of the `OCA/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 @@

    Stock product Pack

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

    This module allows you to get On Hand and Forecasted values calculated from components of the pack.

    Table of contents

    @@ -403,7 +403,7 @@

    Bug Tracker

    Bugs are tracked on GitHub 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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -437,7 +437,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    ernestotejeda

    -

    This module is part of the OCA/product-pack project on GitHub.

    +

    This module is part of the OCA/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/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)" 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" 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?= 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 @@ From 579520f060faf2b0d1aaeea1c0f5f3ecdd2f4a75 Mon Sep 17 00:00:00 2001 From: oca-ci 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 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 `_. 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -99,6 +99,6 @@ Current `maintainer `__: |maintainer-ernestotejeda| -This module is part of the `OCA/product-pack `_ project on GitHub. +This module is part of the `OCA/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 @@

    Stock product Pack

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

    This module allows you to get On Hand and Forecasted values calculated from components of the pack.

    Table of contents

    @@ -403,7 +403,7 @@

    Bug Tracker

    Bugs are tracked on GitHub 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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -437,7 +437,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    ernestotejeda

    -

    This module is part of the OCA/product-pack project on GitHub.

    +

    This module is part of the OCA/product-pack project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    From 5fa93c3680efbb61fda3ee0d4f67126217b9a10c Mon Sep 17 00:00:00 2001 From: Raf Ven 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 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 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 `_. 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -99,6 +99,6 @@ Current `maintainer `__: |maintainer-ernestotejeda| -This module is part of the `OCA/product-pack `_ project on GitHub. +This module is part of the `OCA/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 @@

    Stock product Pack

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

    +

    Beta License: AGPL-3 OCA/product-pack Translate me on Weblate Try me on Runbot

    This module allows you to get On Hand and Forecasted values calculated from components of the pack.

    Table of contents

    @@ -403,7 +403,7 @@

    Bug Tracker

    Bugs are tracked on GitHub 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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -437,7 +437,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    ernestotejeda

    -

    This module is part of the OCA/product-pack project on GitHub.

    +

    This module is part of the OCA/product-pack project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    From 0942abf669266c40d7ac6dfccbb3e0f76c5d4b9d Mon Sep 17 00:00:00 2001 From: Weblate 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 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 `_. 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 `_. 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 @@ - + - + Stock product Pack