Skip to content

Commit

Permalink
[MIG] stock_location_lockdown : Migration to 12.0
Browse files Browse the repository at this point in the history
  • Loading branch information
clementmbr committed Sep 19, 2019
1 parent 039b4ad commit 2935fe7
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 35 deletions.
1 change: 0 additions & 1 deletion stock_location_lockdown/__init__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand Down
3 changes: 1 addition & 2 deletions stock_location_lockdown/__manifest__.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

Expand All @@ -8,7 +7,7 @@
"author": "Akretion, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/stock-logistics-warehouse",
"category": "Warehouse",
"version": "10.0.1.1.0",
"version": "12.0.1.0.0",
"license": "AGPL-3",
"application": False,
"installable": True,
Expand Down
3 changes: 1 addition & 2 deletions stock_location_lockdown/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion
# Copyright 2019 Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import stock_location
Expand Down
23 changes: 20 additions & 3 deletions stock_location_lockdown/models/stock_location.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion
# Copyright 2019 Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import fields, models
from odoo import fields, models, _
from odoo.exceptions import UserError


class StockLocation(models.Model):
Expand All @@ -12,3 +12,20 @@ class StockLocation(models.Model):
help="if this box is checked, putting stock on this location won't be "
"allowed. Usually used for a virtual location that has "
"childrens.")

# Raise error if the location that you're trying to block
# has already got quants
def write(self, values):
res = super().write(values)

if ('block_stock_entrance' in values \
and values['block_stock_entrance']):
# Unlink zero quants before checking
# if there are quants on the location
self.env['stock.quant']._unlink_zero_quants()
if self.mapped('quant_ids'):
raise UserError(
_("It is impossible to prohibit this location from\
receiving products as it already contains some.")
)
return res
7 changes: 4 additions & 3 deletions stock_location_lockdown/models/stock_quant.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion
# Copyright 2019 Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import api, models, _
Expand All @@ -9,8 +8,10 @@
class StockQuant(models.Model):
_inherit = 'stock.quant'

# Raise an error when trying to change a quant
# which corresponding stock location is blocked
@api.constrains('location_id')
def _check_location_blocked(self):
def check_location_blocked(self):
for record in self:
if record.location_id.block_stock_entrance:
raise ValidationError(
Expand Down
3 changes: 1 addition & 2 deletions stock_location_lockdown/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion
# Copyright 2019 Akretion
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import test_block_stock_location_entrance
50 changes: 28 additions & 22 deletions stock_location_lockdown/tests/test_block_stock_location_entrance.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,26 @@
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion France
# Copyright 2019 Akretion France
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo.exceptions import ValidationError
from odoo.exceptions import ValidationError, UserError
from odoo.tests.common import TransactionCase


class TestStockLocationLockdown(TransactionCase):

def setUp(self, *args, **kwargs):
super(TestStockLocationLockdown, self).setUp(*args, **kwargs)
self.main_stock_location = self.env.ref('stock.stock_location_stock')
self.main_stock_location.block_stock_entrance = True

# Create a new stock location with no quants and blocked stock entrance
new_loc = {'name' : 'location_test', 'usage' : 'internal'}
self.new_stock_location = self.env['stock.location'].create(new_loc)
self.new_stock_location.block_stock_entrance = True

self.supplier_location = self.env.ref('stock.stock_location_suppliers')
self.customer_location = self.env.ref('stock.stock_location_customers')
self.product = self.env.ref('product.product_product_27')
self.product = self.env['product.product'].search([])[1]

# Catch the first quant's stock location
self.stock_location = self.env['stock.quant'].search([])[0].location_id

def test_transfer_stock_in_locked_location(self):
"""
Expand All @@ -23,29 +29,29 @@ def test_transfer_stock_in_locked_location(self):
"""
move_vals = {
'location_id': self.supplier_location.id,
'location_dest_id': self.main_stock_location.id,
'location_dest_id': self.new_stock_location.id,
'product_id': self.product.id,
'product_uom_qty': self.product.qty_available + 1,
'product_uom': 1,
'name': 'test',
'move_line_ids': [(0, 0, {
'product_id': self.product.id,
'product_uom_qty': 0,
'product_uom_id': 1,
'qty_done': self.product.qty_available + 1,
'location_id': self.supplier_location.id,
'location_dest_id': self.new_stock_location.id,
})]
}
stock_move = self.env['stock.move'].create(move_vals)

with self.assertRaises(ValidationError):
stock_move.action_done()
stock_move._action_done()

def test_transfer_stock_out_locked_location(self):
def test_block_location_with_quants(self):
"""
Test to move stock within a location that should not accept
Stock entrance.
Test to click on block_stock_entrance checkbox in a location
that should not be blocked because has already got quants
"""
move_vals = {
'location_id': self.main_stock_location.id,
'location_dest_id': self.customer_location.id,
'product_id': self.product.id,
'product_uom_qty': self.product.qty_available + 1,
'product_uom': 1,
'name': 'test',
}
stock_move = self.env['stock.move'].create(move_vals)
with self.assertRaises(ValidationError):
stock_move.action_done()
with self.assertRaises(UserError):
self.stock_location.write({'block_stock_entrance' : True})

0 comments on commit 2935fe7

Please sign in to comment.