From 8220c548dc5da568eacd035b3531275413e95020 Mon Sep 17 00:00:00 2001 From: ernesto Date: Fri, 19 Jul 2019 12:54:21 -0400 Subject: [PATCH 1/8] [ADD] stock_inventory_cost_info: new module --- stock_quant_cost_info/README.rst | 96 ++++ stock_quant_cost_info/__init__.py | 4 + stock_quant_cost_info/__manifest__.py | 22 + stock_quant_cost_info/hooks.py | 11 + stock_quant_cost_info/i18n/es.po | 37 ++ .../i18n/stock_inventory_cost_info.pot | 35 ++ stock_quant_cost_info/models/__init__.py | 3 + .../models/stock_inventory.py | 26 + stock_quant_cost_info/readme/CONTRIBUTORS.rst | 4 + stock_quant_cost_info/readme/DESCRIPTION.rst | 4 + stock_quant_cost_info/readme/INSTALL.rst | 2 + stock_quant_cost_info/readme/USAGE.rst | 7 + .../static/description/icon.png | Bin 0 -> 9455 bytes .../static/description/index.html | 444 ++++++++++++++++++ stock_quant_cost_info/tests/__init__.py | 3 + .../tests/test_stock_inventory_cost_info.py | 67 +++ .../views/report_stockinventory.xml | 11 + .../views/stock_inventory_views.xml | 40 ++ 18 files changed, 816 insertions(+) create mode 100644 stock_quant_cost_info/README.rst create mode 100644 stock_quant_cost_info/__init__.py create mode 100644 stock_quant_cost_info/__manifest__.py create mode 100644 stock_quant_cost_info/hooks.py create mode 100644 stock_quant_cost_info/i18n/es.po create mode 100644 stock_quant_cost_info/i18n/stock_inventory_cost_info.pot create mode 100644 stock_quant_cost_info/models/__init__.py create mode 100644 stock_quant_cost_info/models/stock_inventory.py create mode 100644 stock_quant_cost_info/readme/CONTRIBUTORS.rst create mode 100644 stock_quant_cost_info/readme/DESCRIPTION.rst create mode 100644 stock_quant_cost_info/readme/INSTALL.rst create mode 100644 stock_quant_cost_info/readme/USAGE.rst create mode 100644 stock_quant_cost_info/static/description/icon.png create mode 100644 stock_quant_cost_info/static/description/index.html create mode 100644 stock_quant_cost_info/tests/__init__.py create mode 100644 stock_quant_cost_info/tests/test_stock_inventory_cost_info.py create mode 100644 stock_quant_cost_info/views/report_stockinventory.xml create mode 100644 stock_quant_cost_info/views/stock_inventory_views.xml diff --git a/stock_quant_cost_info/README.rst b/stock_quant_cost_info/README.rst new file mode 100644 index 000000000000..d9edbb868cd5 --- /dev/null +++ b/stock_quant_cost_info/README.rst @@ -0,0 +1,96 @@ +========================= +Stock Inventory Cost Info +========================= + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! 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%2Fstock--logistics--warehouse-lightgray.png?logo=github + :target: https://github.com/OCA/stock-logistics-warehouse/tree/11.0/stock_inventory_cost_info + :alt: OCA/stock-logistics-warehouse +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/stock-logistics-warehouse-11-0/stock-logistics-warehouse-11-0-stock_inventory_cost_info + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/153/11.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module extends the functionality of *Inventory Adjustments* to show a new +column *Adjustment cost* in *Inventory Details* list and PDF report table. The +value of *Adjustment cost* will be self-calculated according to: +(`Real Quantity` - `Theoretical Quantity`) * `Product Cost` + +**Table of contents** + +.. contents:: + :local: + +Installation +============ + +A pre_init_hook process is initiated in order to set the *Adjustment cost* to +zero in all existing *inventory adjustment* before installation. + +Usage +===== + +To use this module, you need to: + +#. Go to *Inventory > Operations > Inventory Adjustments* and create a new one. +#. Click on *Start Inventory* button. +#. In *Inventory Details* list you will see a new column named + *Adjustment cost*. +#. The cost will be recomputed when the inventory adjustment is validated. + +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 +~~~~~~~ + +* Tecnativa + +Contributors +~~~~~~~~~~~~ + +* `Tecnativa `_: + + * Ernesto Tejeda + * Pedro M. Baeza + +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. + +This module is part of the `OCA/stock-logistics-warehouse `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/stock_quant_cost_info/__init__.py b/stock_quant_cost_info/__init__.py new file mode 100644 index 000000000000..68b72dd03222 --- /dev/null +++ b/stock_quant_cost_info/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import models +from .hooks import pre_init_hook diff --git a/stock_quant_cost_info/__manifest__.py b/stock_quant_cost_info/__manifest__.py new file mode 100644 index 000000000000..ca561713d20a --- /dev/null +++ b/stock_quant_cost_info/__manifest__.py @@ -0,0 +1,22 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). +{ + "name": "Stock Inventory Cost Info", + "summary": "Shows the cost of the inventory adjustments", + "version": "11.0.1.0.0", + "author": "Tecnativa, " + "Odoo Community Association (OCA)", + "website": "https://github.com/OCA/stock-logistics-warehouse", + "category": "Warehouse Management", + "depends": [ + "stock", + ], + "data": [ + "views/stock_inventory_views.xml", + "views/report_stockinventory.xml", + ], + "pre_init_hook": "pre_init_hook", + "license": "AGPL-3", + 'installable': True, + 'application': False, +} diff --git a/stock_quant_cost_info/hooks.py b/stock_quant_cost_info/hooks.py new file mode 100644 index 000000000000..590b6175a48c --- /dev/null +++ b/stock_quant_cost_info/hooks.py @@ -0,0 +1,11 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html). + + +def pre_init_hook(cr): + cr.execute("""ALTER TABLE stock_inventory_line + ADD COLUMN adjustment_cost numeric + DEFAULT 0""") + + cr.execute("""ALTER TABLE stock_inventory_line + ALTER COLUMN adjustment_cost DROP DEFAULT;""") diff --git a/stock_quant_cost_info/i18n/es.po b/stock_quant_cost_info/i18n/es.po new file mode 100644 index 000000000000..76ff9f14ba80 --- /dev/null +++ b/stock_quant_cost_info/i18n/es.po @@ -0,0 +1,37 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_cost_info +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2019-07-19 18:15+0000\n" +"PO-Revision-Date: 2019-07-19 18:15+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" +"Plural-Forms: \n" + +#. module: stock_inventory_cost_info +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.report_inventory_cost_info +msgid "Adjustment cost" +msgstr "Coste de ajuste" + +#. module: stock_inventory_cost_info +#: model:ir.model.fields,field_description:stock_inventory_cost_info.field_stock_inventory_line_adjustment_cost +msgid "Adjustment cost" +msgstr "Coste de ajuste" + +#. module: stock_inventory_cost_info +#: model:ir.model.fields,field_description:stock_inventory_cost_info.field_stock_inventory_line_currency_id +msgid "Currency" +msgstr "Moneda" + +#. module: stock_inventory_cost_info +#: model:ir.model,name:stock_inventory_cost_info.model_stock_inventory_line +msgid "Inventory Line" +msgstr "Línea de inventario" diff --git a/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot b/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot new file mode 100644 index 000000000000..513a7939d5c1 --- /dev/null +++ b/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot @@ -0,0 +1,35 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * stock_inventory_cost_info +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 11.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_inventory_cost_info +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.report_inventory_cost_info +msgid "Adjustment cost" +msgstr "" + +#. module: stock_inventory_cost_info +#: model:ir.model.fields,field_description:stock_inventory_cost_info.field_stock_inventory_line_adjustment_cost +msgid "Adjustment cost" +msgstr "" + +#. module: stock_inventory_cost_info +#: model:ir.model.fields,field_description:stock_inventory_cost_info.field_stock_inventory_line_currency_id +msgid "Currency" +msgstr "" + +#. module: stock_inventory_cost_info +#: model:ir.model,name:stock_inventory_cost_info.model_stock_inventory_line +msgid "Inventory Line" +msgstr "" + diff --git a/stock_quant_cost_info/models/__init__.py b/stock_quant_cost_info/models/__init__.py new file mode 100644 index 000000000000..7ef50e944d34 --- /dev/null +++ b/stock_quant_cost_info/models/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import stock_inventory diff --git a/stock_quant_cost_info/models/stock_inventory.py b/stock_quant_cost_info/models/stock_inventory.py new file mode 100644 index 000000000000..65aa93393668 --- /dev/null +++ b/stock_quant_cost_info/models/stock_inventory.py @@ -0,0 +1,26 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class InventoryLine(models.Model): + _inherit = "stock.inventory.line" + + currency_id = fields.Many2one( + string="Currency", + related="inventory_id.company_id.currency_id", + readonly=True, + ) + adjustment_cost = fields.Monetary( + string="Adjustment cost", + compute="_compute_adjustment_cost", + store=True, + ) + + @api.depends("product_qty", "theoretical_qty", "inventory_id.state") + def _compute_adjustment_cost(self): + for record in self: + adjusted_qty = record.product_qty - record.theoretical_qty + adjustment_cost = adjusted_qty * record.product_id.standard_price + record.adjustment_cost = adjustment_cost diff --git a/stock_quant_cost_info/readme/CONTRIBUTORS.rst b/stock_quant_cost_info/readme/CONTRIBUTORS.rst new file mode 100644 index 000000000000..b31cef32173e --- /dev/null +++ b/stock_quant_cost_info/readme/CONTRIBUTORS.rst @@ -0,0 +1,4 @@ +* `Tecnativa `_: + + * Ernesto Tejeda + * Pedro M. Baeza diff --git a/stock_quant_cost_info/readme/DESCRIPTION.rst b/stock_quant_cost_info/readme/DESCRIPTION.rst new file mode 100644 index 000000000000..5fb286cd2966 --- /dev/null +++ b/stock_quant_cost_info/readme/DESCRIPTION.rst @@ -0,0 +1,4 @@ +This module extends the functionality of *Inventory Adjustments* to show a new +column *Adjustment cost* in *Inventory Details* list and PDF report table. The +value of *Adjustment cost* will be self-calculated according to: +(`Real Quantity` - `Theoretical Quantity`) * `Product Cost` diff --git a/stock_quant_cost_info/readme/INSTALL.rst b/stock_quant_cost_info/readme/INSTALL.rst new file mode 100644 index 000000000000..82cc8b75399c --- /dev/null +++ b/stock_quant_cost_info/readme/INSTALL.rst @@ -0,0 +1,2 @@ +A pre_init_hook process is initiated in order to set the *Adjustment cost* to +zero in all existing *inventory adjustment* before installation. diff --git a/stock_quant_cost_info/readme/USAGE.rst b/stock_quant_cost_info/readme/USAGE.rst new file mode 100644 index 000000000000..fb5b8ba85370 --- /dev/null +++ b/stock_quant_cost_info/readme/USAGE.rst @@ -0,0 +1,7 @@ +To use this module, you need to: + +#. Go to *Inventory > Operations > Inventory Adjustments* and create a new one. +#. Click on *Start Inventory* button. +#. In *Inventory Details* list you will see a new column named + *Adjustment cost*. +#. The cost will be recomputed when the inventory adjustment is validated. diff --git a/stock_quant_cost_info/static/description/icon.png b/stock_quant_cost_info/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 diff --git a/stock_quant_cost_info/static/description/index.html b/stock_quant_cost_info/static/description/index.html new file mode 100644 index 000000000000..b11d45cbd992 --- /dev/null +++ b/stock_quant_cost_info/static/description/index.html @@ -0,0 +1,444 @@ + + + + + + +Stock Inventory Cost Info + + + +
+

Stock Inventory Cost Info

+ + +

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

+

This module extends the functionality of Inventory Adjustments to show a new +column Adjustment cost in Inventory Details list and PDF report table. The +value of Adjustment cost will be self-calculated according to: +(Real Quantity - Theoretical Quantity) * Product Cost

+

Table of contents

+ +
+

Installation

+

A pre_init_hook process is initiated in order to set the Adjustment cost to +zero in all existing inventory adjustment before installation.

+
+
+

Usage

+

To use this module, you need to:

+
    +
  1. Go to Inventory > Operations > Inventory Adjustments and create a new one.
  2. +
  3. Click on Start Inventory button.
  4. +
  5. In Inventory Details list you will see a new column named +Adjustment cost.
  6. +
  7. The cost will be recomputed when the inventory adjustment is validated.
  8. +
+
+
+

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

+
    +
  • Tecnativa
  • +
+
+
+

Contributors

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

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.

+

This module is part of the OCA/stock-logistics-warehouse project on GitHub.

+

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

+
+
+
+ + diff --git a/stock_quant_cost_info/tests/__init__.py b/stock_quant_cost_info/tests/__init__.py new file mode 100644 index 000000000000..3fe71a462038 --- /dev/null +++ b/stock_quant_cost_info/tests/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). + +from . import test_stock_inventory_cost_info diff --git a/stock_quant_cost_info/tests/test_stock_inventory_cost_info.py b/stock_quant_cost_info/tests/test_stock_inventory_cost_info.py new file mode 100644 index 000000000000..72ceb3a2816c --- /dev/null +++ b/stock_quant_cost_info/tests/test_stock_inventory_cost_info.py @@ -0,0 +1,67 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase + + +class TestStockInventoryCostInfo(TransactionCase): + def setUp(self): + super(TestStockInventoryCostInfo, self).setUp() + product_obj = self.env['product.product'] + self.product_1 = product_obj.create({ + 'name': 'product test 1', + 'type': 'product', + 'standard_price': 1000, + }) + self.product_2 = product_obj.create({ + 'name': 'product test 2', + 'type': 'product', + 'standard_price': 2000, + }) + # Initial inventory: set quantities to zero + initial_inventory = self.env['stock.inventory'].create({ + 'name': 'Initial inventory', + 'filter': 'partial', + 'line_ids': [(0, 0, { + 'product_id': self.product_1.id, + 'location_id': self.env.ref('stock.warehouse0').lot_stock_id.id + }), (0, 0, { + 'product_id': self.product_2.id, + 'location_id': self.env.ref('stock.warehouse0').lot_stock_id.id + })] + }) + initial_inventory.action_reset_product_qty() + initial_inventory.action_done() + # Another inventory adjustment + self.inventory = self.env['stock.inventory'].create({ + 'name': 'Another inventory', + 'filter': 'partial', + }) + initial_inventory.action_start() + self.inventory.write({ + 'line_ids': [(0, 0, { + 'product_id': self.product_1.id, + 'product_qty': 10, + 'location_id': self.env.ref('stock.warehouse0').lot_stock_id.id + }), (0, 0, { + 'product_id': self.product_2.id, + 'product_qty': 20, + 'location_id': self.env.ref('stock.warehouse0').lot_stock_id.id + })] + }) + + def test_compute_adjustment_cost(self): + """Tests if the adjustment_cost is correctly computed.""" + lines = self.inventory.line_ids + line = lines.filtered(lambda r: r.product_id == self.product_1) + self.assertEqual(line.adjustment_cost, 10000) + line = lines.filtered(lambda r: r.product_id == self.product_2) + self.assertEqual(line.adjustment_cost, 40000) + # check the adjustment cost after validate the inventory + self.product_1.standard_price = 10000 + self.product_2.standard_price = 20000 + self.inventory.action_done() + line = lines.filtered(lambda r: r.product_id == self.product_1) + self.assertEqual(line.adjustment_cost, 100000) + line = lines.filtered(lambda r: r.product_id == self.product_2) + self.assertEqual(line.adjustment_cost, 400000) diff --git a/stock_quant_cost_info/views/report_stockinventory.xml b/stock_quant_cost_info/views/report_stockinventory.xml new file mode 100644 index 000000000000..e2f0da9d9353 --- /dev/null +++ b/stock_quant_cost_info/views/report_stockinventory.xml @@ -0,0 +1,11 @@ + + + + diff --git a/stock_quant_cost_info/views/stock_inventory_views.xml b/stock_quant_cost_info/views/stock_inventory_views.xml new file mode 100644 index 000000000000..9005f0f66483 --- /dev/null +++ b/stock_quant_cost_info/views/stock_inventory_views.xml @@ -0,0 +1,40 @@ + + + + + stock.inventory.line.tree.cost.info + stock.inventory.line + + + + + + + + + + + stock.inventory.line.tree2.cost.info + stock.inventory.line + + + + + + + + + + + stock.inventory.form + stock.inventory + + + + + + + + + + From a928ee4e5d94b26c83efb9d60f1baee15ea87e42 Mon Sep 17 00:00:00 2001 From: "Pedro M. Baeza" Date: Fri, 26 Jul 2019 13:42:10 +0200 Subject: [PATCH 2/8] [IMP] stock_inventory_cost_info: Add total in tree view --- stock_quant_cost_info/__manifest__.py | 2 +- stock_quant_cost_info/i18n/es.po | 7 +++++++ stock_quant_cost_info/i18n/stock_inventory_cost_info.pot | 7 +++++++ stock_quant_cost_info/static/description/index.html | 2 +- stock_quant_cost_info/views/stock_inventory_views.xml | 6 +++--- 5 files changed, 19 insertions(+), 5 deletions(-) diff --git a/stock_quant_cost_info/__manifest__.py b/stock_quant_cost_info/__manifest__.py index ca561713d20a..c5a2ffbbc14b 100644 --- a/stock_quant_cost_info/__manifest__.py +++ b/stock_quant_cost_info/__manifest__.py @@ -3,7 +3,7 @@ { "name": "Stock Inventory Cost Info", "summary": "Shows the cost of the inventory adjustments", - "version": "11.0.1.0.0", + "version": "11.0.1.1.0", "author": "Tecnativa, " "Odoo Community Association (OCA)", "website": "https://github.com/OCA/stock-logistics-warehouse", diff --git a/stock_quant_cost_info/i18n/es.po b/stock_quant_cost_info/i18n/es.po index 76ff9f14ba80..d5a1007033c2 100644 --- a/stock_quant_cost_info/i18n/es.po +++ b/stock_quant_cost_info/i18n/es.po @@ -35,3 +35,10 @@ msgstr "Moneda" #: model:ir.model,name:stock_inventory_cost_info.model_stock_inventory_line msgid "Inventory Line" msgstr "Línea de inventario" + +#. module: stock_inventory_cost_info +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.stock_inventory_line_tree +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.stock_inventory_line_tree2 +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.view_inventory_form +msgid "Total" +msgstr "" diff --git a/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot b/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot index 513a7939d5c1..4d89f085ab06 100644 --- a/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot +++ b/stock_quant_cost_info/i18n/stock_inventory_cost_info.pot @@ -33,3 +33,10 @@ msgstr "" msgid "Inventory Line" msgstr "" +#. module: stock_inventory_cost_info +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.stock_inventory_line_tree +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.stock_inventory_line_tree2 +#: model:ir.ui.view,arch_db:stock_inventory_cost_info.view_inventory_form +msgid "Total" +msgstr "" + diff --git a/stock_quant_cost_info/static/description/index.html b/stock_quant_cost_info/static/description/index.html index b11d45cbd992..35fde28427d6 100644 --- a/stock_quant_cost_info/static/description/index.html +++ b/stock_quant_cost_info/static/description/index.html @@ -3,7 +3,7 @@ - + Stock Inventory Cost Info -
-

Stock Inventory Cost Info

+
+

Stock Quant Cost Info

-

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runbot

-

This module extends the functionality of Inventory Adjustments to show a new -column Adjustment cost in Inventory Details list and PDF report table. The -value of Adjustment cost will be self-calculated according to: +

Beta License: AGPL-3 OCA/stock-logistics-warehouse Translate me on Weblate Try me on Runboat

+

This module extends the functionality of Quantity Adjustments in Stock Quants to +show a new column Adjustment cost in Quant Details list and PDF report table. +The value of Adjustment cost will be self-calculated according to: (Real Quantity - Theoretical Quantity) * Product Cost

Table of contents

@@ -389,17 +389,16 @@

Stock Inventory Cost Info

Installation

A pre_init_hook process is initiated in order to set the Adjustment cost to -zero in all existing inventory adjustment before installation.

+zero in all existing stock quant before installation.

Usage

To use this module, you need to:

    -
  1. Go to Inventory > Operations > Inventory Adjustments and create a new one.
  2. -
  3. Click on Start Inventory button.
  4. -
  5. In Inventory Details list you will see a new column named -Adjustment cost.
  6. -
  7. The cost will be recomputed when the inventory adjustment is validated.
  8. +
  9. Go to Inventory > Products > Products and create or select one.
  10. +
  11. Click on Update Quantity button.
  12. +
  13. In Quant list you will see a new column named Adjustment cost.
  14. +
  15. The cost will be recomputed when we change the Counted Quantity.
@@ -407,7 +406,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.

@@ -425,6 +424,7 @@

Contributors

  • Ernesto Tejeda
  • Pedro M. Baeza
  • Sergio Teruel
  • +
  • Carlos Roca
  • @@ -436,7 +436,7 @@

    Maintainers

    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.

    -

    This module is part of the OCA/stock-logistics-warehouse project on GitHub.

    +

    This module is part of the OCA/stock-logistics-warehouse project on GitHub.

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

    diff --git a/stock_quant_cost_info/tests/__init__.py b/stock_quant_cost_info/tests/__init__.py index 3fe71a462038..69414abc7657 100644 --- a/stock_quant_cost_info/tests/__init__.py +++ b/stock_quant_cost_info/tests/__init__.py @@ -1,3 +1,3 @@ # License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -from . import test_stock_inventory_cost_info +from . import test_stock_quant_cost_info diff --git a/stock_quant_cost_info/tests/test_stock_inventory_cost_info.py b/stock_quant_cost_info/tests/test_stock_inventory_cost_info.py deleted file mode 100644 index 188d88553e9a..000000000000 --- a/stock_quant_cost_info/tests/test_stock_inventory_cost_info.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2019 Tecnativa - Ernesto Tejeda -# Copyright 2019 Tecnativa - Pedro M. Baeza -# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). - -from odoo.tests.common import TransactionCase, tagged - - -@tagged("post_install", "-at_install") -class TestStockInventoryCostInfo(TransactionCase): - def setUp(self): - super().setUp() - product_obj = self.env["product.product"] - self.product_1 = product_obj.create( - {"name": "product test 1", "type": "product", "standard_price": 1000} - ) - self.product_2 = product_obj.create( - {"name": "product test 2", "type": "product", "standard_price": 2000} - ) - self.inventory = self.env["stock.inventory"].create( - { - "name": "Another inventory", - "line_ids": [ - ( - 0, - 0, - { - "product_id": self.product_1.id, - "product_qty": 10, - "location_id": self.env.ref( - "stock.warehouse0" - ).lot_stock_id.id, - }, - ), - ( - 0, - 0, - { - "product_id": self.product_2.id, - "product_qty": 20, - "location_id": self.env.ref( - "stock.warehouse0" - ).lot_stock_id.id, - }, - ), - ], - } - ) - - def test_compute_adjustment_cost(self): - """Tests if the adjustment_cost is correctly computed.""" - lines = self.inventory.line_ids - line1 = lines.filtered(lambda r: r.product_id == self.product_1) - self.assertEqual(line1.adjustment_cost, 10000) - line2 = lines.filtered(lambda r: r.product_id == self.product_2) - self.assertEqual(line2.adjustment_cost, 40000) diff --git a/stock_quant_cost_info/tests/test_stock_quant_cost_info.py b/stock_quant_cost_info/tests/test_stock_quant_cost_info.py new file mode 100644 index 000000000000..cf8dbe129fff --- /dev/null +++ b/stock_quant_cost_info/tests/test_stock_quant_cost_info.py @@ -0,0 +1,37 @@ +# Copyright 2019 Tecnativa - Ernesto Tejeda +# Copyright 2019 Tecnativa - Pedro M. Baeza +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + +from odoo.tests.common import TransactionCase, tagged + + +@tagged("post_install", "-at_install") +class TestStockQuantCostInfo(TransactionCase): + def setUp(self): + super().setUp() + product_obj = self.env["product.product"] + self.product_1 = product_obj.create( + {"name": "product test 1", "type": "product", "standard_price": 1000} + ) + self.product_2 = product_obj.create( + {"name": "product test 2", "type": "product", "standard_price": 2000} + ) + + def test_compute_adjustment_cost(self): + """Tests if the adjustment_cost is correctly computed.""" + quant_prod_1 = self.env["stock.quant"].create( + { + "product_id": self.product_1.id, + "location_id": self.env.ref("stock.stock_location_stock").id, + "inventory_quantity": 10.0, + } + ) + self.assertEqual(quant_prod_1.adjustment_cost, 10000) + quant_prod_2 = self.env["stock.quant"].create( + { + "product_id": self.product_2.id, + "location_id": self.env.ref("stock.stock_location_stock").id, + "inventory_quantity": 20.0, + } + ) + self.assertEqual(quant_prod_2.adjustment_cost, 40000) diff --git a/stock_quant_cost_info/views/report_stockinventory.xml b/stock_quant_cost_info/views/report_stockinventory.xml index 8d9dda2c3b6f..ccbbc3b8ae3b 100644 --- a/stock_quant_cost_info/views/report_stockinventory.xml +++ b/stock_quant_cost_info/views/report_stockinventory.xml @@ -2,14 +2,17 @@