mirror of
https://github.com/OCA/stock-logistics-warehouse.git
synced 2025-01-21 14:27:28 +02:00
Add new module to manage change product quantity reason
This commit is contained in:
committed by
GuillemCForgeFlow
parent
2bf21d0b22
commit
a7ce11509a
47
stock_change_qty_reason/README.rst
Normal file
47
stock_change_qty_reason/README.rst
Normal file
@@ -0,0 +1,47 @@
|
||||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
|
||||
:alt: License: AGPL-3
|
||||
|
||||
Stock Change Quantity Reason
|
||||
============================
|
||||
|
||||
This module extends the product stock management and allows to set a reason
|
||||
in the wizard when changing the product quantity.
|
||||
|
||||
Bug Tracker
|
||||
===========
|
||||
|
||||
Bugs are tracked on `GitHub Issues <https://github.com/OCA/purchase-workflow/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
|
||||
`here <https://github.com/OCA/stock-logistics-warehouse/issues/new?body=module:%20stock_change_qty_reason%0Aversion:%208.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
|
||||
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas
|
||||
:alt: Try me on Runbot
|
||||
:target: https://runbot.odoo-community.org/runbot/167/8.0
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
Contributors
|
||||
------------
|
||||
|
||||
* Denis Roussel <denis.roussel@acsone.eu>
|
||||
|
||||
Maintainer
|
||||
----------
|
||||
|
||||
.. image:: https://odoo-community.org/logo.png
|
||||
:alt: Odoo Community Association
|
||||
:target: https://odoo-community.org
|
||||
|
||||
This module is maintained by the OCA.
|
||||
|
||||
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.
|
||||
|
||||
To contribute to this module, please visit https://odoo-community.org.
|
||||
3
stock_change_qty_reason/__init__.py
Normal file
3
stock_change_qty_reason/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import models
|
||||
from . import wizard
|
||||
19
stock_change_qty_reason/__openerp__.py
Normal file
19
stock_change_qty_reason/__openerp__.py
Normal file
@@ -0,0 +1,19 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 ACSONE SA/NV (<http://acsone.eu>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
{
|
||||
'name': "Stock Change Quantity Reason",
|
||||
'summary': """
|
||||
Stock Quantity Change Reason """,
|
||||
'author': 'ACSONE SA/NV, Odoo Community Association (OCA)',
|
||||
'website': "http://acsone.eu",
|
||||
'category': 'Warehouse Management',
|
||||
'version': '8.0.1.0.0',
|
||||
'license': 'AGPL-3',
|
||||
'depends': [
|
||||
'stock',
|
||||
],
|
||||
'data': [
|
||||
'wizard/stock_product_change_qty.xml'
|
||||
],
|
||||
}
|
||||
2
stock_change_qty_reason/models/__init__.py
Normal file
2
stock_change_qty_reason/models/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import stock
|
||||
25
stock_change_qty_reason/models/stock.py
Normal file
25
stock_change_qty_reason/models/stock.py
Normal file
@@ -0,0 +1,25 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 ACSONE SA/NV (<http://acsone.eu>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openerp import models, api
|
||||
|
||||
|
||||
class StockInventoryLine(models.Model):
|
||||
_inherit = "stock.inventory.line"
|
||||
|
||||
@api.model
|
||||
def _resolve_inventory_line(self, inventory_line):
|
||||
|
||||
move_id = super(StockInventoryLine,
|
||||
self)._resolve_inventory_line(inventory_line)
|
||||
|
||||
reason = self.env.context.get('change_quantity_reason', False)
|
||||
if reason and move_id:
|
||||
move = self.env['stock.move'].browse(move_id)
|
||||
|
||||
if move.origin:
|
||||
move.origin = ' ,'.join([move.origin, reason])
|
||||
else:
|
||||
move.origin = reason
|
||||
|
||||
return move_id
|
||||
2
stock_change_qty_reason/tests/__init__.py
Normal file
2
stock_change_qty_reason/tests/__init__.py
Normal file
@@ -0,0 +1,2 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from . import test_stock_change_qty_reason
|
||||
@@ -0,0 +1,54 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 Denis Roussel, Acsone SA/NV (http://www.acsone.eu)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
|
||||
import openerp.tests.common as common
|
||||
|
||||
|
||||
class TestStockQuantityChangeReason(common.TransactionCase):
|
||||
|
||||
def _product_change_qty(self, product, new_qty, reason):
|
||||
wizard_model = self.env['stock.change.product.qty']
|
||||
wizard = wizard_model.create({'product_id': product.id,
|
||||
'new_quantity': new_qty,
|
||||
'reason': reason})
|
||||
wizard.change_product_qty()
|
||||
|
||||
def test_product_change_qty(self):
|
||||
""" Check product quantity update move reason is well set
|
||||
"""
|
||||
|
||||
# set product in each period
|
||||
product2 = self.env.ref('product.product_product_37')
|
||||
product3 = self.env.ref('product.product_product_38')
|
||||
product4 = self.env.ref('product.product_product_39')
|
||||
product5 = self.env.ref('product.product_product_40')
|
||||
product6 = self.env.ref('product.product_product_41')
|
||||
|
||||
self._product_change_qty(product2, 10, 'product_37_reason')
|
||||
self._product_change_qty(product3, 0, 'product_38_reason')
|
||||
self._product_change_qty(product4, 0, 'product_39_reason')
|
||||
self._product_change_qty(product5, 10, 'product_40_reason')
|
||||
self._product_change_qty(product6, 0, 'product_41_reason')
|
||||
|
||||
move2 = self.env['stock.move'].search([('product_id', '=',
|
||||
product2.id)], limit=1,
|
||||
order='id desc')
|
||||
move3 = self.env['stock.move'].search([('product_id', '=',
|
||||
product3.id)],
|
||||
limit=1, order='id desc')
|
||||
move4 = self.env['stock.move'].search([('product_id', '=',
|
||||
product4.id)],
|
||||
limit=1, order='id desc')
|
||||
move5 = self.env['stock.move'].search([('product_id', '=',
|
||||
product5.id)],
|
||||
limit=1, order='id desc')
|
||||
move6 = self.env['stock.move'].search([('product_id', '=',
|
||||
product6.id)],
|
||||
limit=1, order='id desc')
|
||||
|
||||
self.assertEqual(move2.origin, 'product_37_reason')
|
||||
self.assertFalse(move3)
|
||||
self.assertFalse(move4)
|
||||
self.assertEqual(move5.origin, 'product_40_reason')
|
||||
self.assertFalse(move6)
|
||||
1
stock_change_qty_reason/wizard/__init__.py
Normal file
1
stock_change_qty_reason/wizard/__init__.py
Normal file
@@ -0,0 +1 @@
|
||||
from . import stock_change_product_qty
|
||||
21
stock_change_qty_reason/wizard/stock_change_product_qty.py
Normal file
21
stock_change_qty_reason/wizard/stock_change_product_qty.py
Normal file
@@ -0,0 +1,21 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# © 2016 ACSONE SA/NV (<http://acsone.eu>)
|
||||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
||||
from openerp import models, fields, api
|
||||
|
||||
|
||||
class StockChangeProductQty(models.TransientModel):
|
||||
_inherit = 'stock.change.product.qty'
|
||||
|
||||
reason = fields.Char('Reason',
|
||||
help='Type in a reason for the '
|
||||
'product quantity change')
|
||||
|
||||
@api.multi
|
||||
def change_product_qty(self):
|
||||
if self.reason:
|
||||
this = self.with_context(change_quantity_reason=self.reason)
|
||||
|
||||
return super(StockChangeProductQty, this).change_product_qty()
|
||||
|
||||
return super(StockChangeProductQty, self).change_product_qty()
|
||||
15
stock_change_qty_reason/wizard/stock_product_change_qty.xml
Normal file
15
stock_change_qty_reason/wizard/stock_product_change_qty.xml
Normal file
@@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_change_product_quantity_reason" model="ir.ui.view">
|
||||
<field name="name">Change Product Quantity Reason</field>
|
||||
<field name="model">stock.change.product.qty</field>
|
||||
<field name="inherit_id" ref="stock.view_change_product_quantity"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="new_quantity" position="after">
|
||||
<field name="reason" attrs="{'required':True}"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
Reference in New Issue
Block a user