From fa5037650db987c0aece183758d59ce6026add4e Mon Sep 17 00:00:00 2001 From: Hetal Dhanak Date: Tue, 22 Jan 2019 05:21:18 +0000 Subject: [PATCH] [IMP] stock, mrp: company dependant scrap orders. This commit adds fields 'company_id' on stock.scrap model. The company will filter locations and stock moves linked to the scrap document. We add also a specific sequence by company. Task-1930055 closes odoo/odoo#30498 Signed-off-by: Simon Lejeune (sle) --- addons/mrp/models/mrp_production.py | 1 + addons/mrp/models/mrp_workorder.py | 6 ++++-- addons/mrp/views/stock_scrap_views.xml | 8 +++---- addons/stock/data/stock_data.xml | 10 +-------- addons/stock/models/res_company.py | 27 ++++++++++++++++++++++++ addons/stock/models/stock_picking.py | 2 +- addons/stock/models/stock_scrap.py | 11 ++++++---- addons/stock/security/stock_security.xml | 8 +++++++ addons/stock/views/stock_scrap_views.xml | 7 ++++-- 9 files changed, 58 insertions(+), 22 deletions(-) diff --git a/addons/mrp/models/mrp_production.py b/addons/mrp/models/mrp_production.py index 7b740365b93..90f21112012 100644 --- a/addons/mrp/models/mrp_production.py +++ b/addons/mrp/models/mrp_production.py @@ -891,6 +891,7 @@ class MrpProduction(models.Model): 'type': 'ir.actions.act_window', 'context': {'default_production_id': self.id, 'product_ids': (self.move_raw_ids.filtered(lambda x: x.state not in ('done', 'cancel')) | self.move_finished_ids.filtered(lambda x: x.state == 'done')).mapped('product_id').ids, + 'default_company_id': self.company_id.id }, 'target': 'new', } diff --git a/addons/mrp/models/mrp_workorder.py b/addons/mrp/models/mrp_workorder.py index 76cce1b978f..5a7e1c257f9 100644 --- a/addons/mrp/models/mrp_workorder.py +++ b/addons/mrp/models/mrp_workorder.py @@ -554,8 +554,10 @@ class MrpWorkorder(models.Model): 'res_model': 'stock.scrap', 'view_id': self.env.ref('stock.stock_scrap_form_view2').id, 'type': 'ir.actions.act_window', - 'context': {'default_workorder_id': self.id, 'default_production_id': self.production_id.id, 'product_ids': (self.production_id.move_raw_ids.filtered(lambda x: x.state not in ('done', 'cancel')) | self.production_id.move_finished_ids.filtered(lambda x: x.state == 'done')).mapped('product_id').ids}, - # 'context': {'product_ids': self.move_raw_ids.filtered(lambda x: x.state not in ('done', 'cancel')).mapped('product_id').ids + [self.production_id.product_id.id]}, + 'context': {'default_company_id': self.production_id.company_id.id, + 'default_workorder_id': self.id, + 'default_production_id': self.production_id.id, + 'product_ids': (self.production_id.move_raw_ids.filtered(lambda x: x.state not in ('done', 'cancel')) | self.production_id.move_finished_ids.filtered(lambda x: x.state == 'done')).mapped('product_id').ids}, 'target': 'new', } diff --git a/addons/mrp/views/stock_scrap_views.xml b/addons/mrp/views/stock_scrap_views.xml index 22021e9d475..c485437cdaa 100644 --- a/addons/mrp/views/stock_scrap_views.xml +++ b/addons/mrp/views/stock_scrap_views.xml @@ -6,8 +6,8 @@ - - + + @@ -17,8 +17,8 @@ - - + + diff --git a/addons/stock/data/stock_data.xml b/addons/stock/data/stock_data.xml index 199c6207c7b..098ae87bc7d 100644 --- a/addons/stock/data/stock_data.xml +++ b/addons/stock/data/stock_data.xml @@ -102,15 +102,6 @@ - - Scrap - stock.scrap - SP/ - 5 - 1 - 1 - - + diff --git a/addons/stock/models/res_company.py b/addons/stock/models/res_company.py index 121f3c1e81e..af6384cbff9 100644 --- a/addons/stock/models/res_company.py +++ b/addons/stock/models/res_company.py @@ -77,6 +77,21 @@ class Company(models.Model): 'scrap_location': True, }) + def _create_scrap_sequence(self): + scrap_vals = [] + for company in self: + scrap_vals.append({ + 'name': '%s Sequence scrap' % company.name, + 'code': 'stock.scrap', + 'company_id': company.id, + 'prefix': 'SP/', + 'padding': 5, + 'number_next': 1, + 'number_increment': 1 + }) + if scrap_vals: + self.env['ir.sequence'].create(scrap_vals) + @api.model def create_missing_warehouse(self): """ This hook is used to add a warehouse on existing companies @@ -125,6 +140,13 @@ class Company(models.Model): for company in company_without_property: company._create_scrap_location() + @api.model + def create_missing_scrap_sequence(self): + company_ids = self.env['res.company'].search([]) + company_has_scrap_seq = self.env['ir.sequence'].search([('code', '=', 'stock.scrap')]).mapped('company_id') + company_todo_sequence = company_ids - company_has_scrap_seq + company_todo_sequence._create_scrap_sequence() + def _create_per_company_locations(self): self.ensure_one() self._create_transit_location() @@ -132,9 +154,14 @@ class Company(models.Model): self._create_production_location() self._create_scrap_location() + def _create_per_company_sequences(self): + self.ensure_one() + self._create_scrap_sequence() + @api.model def create(self, vals): company = super(Company, self).create(vals) company.sudo()._create_per_company_locations() + company.sudo()._create_per_company_sequences() self.env['stock.warehouse'].sudo().create({'name': company.name, 'code': company.name[:5], 'company_id': company.id, 'partner_id': company.partner_id.id}) return company diff --git a/addons/stock/models/stock_picking.py b/addons/stock/models/stock_picking.py index 17f8793c43e..86e1e4fc835 100644 --- a/addons/stock/models/stock_picking.py +++ b/addons/stock/models/stock_picking.py @@ -1093,7 +1093,7 @@ class Picking(models.Model): 'view_id': view.id, 'views': [(view.id, 'form')], 'type': 'ir.actions.act_window', - 'context': {'default_picking_id': self.id, 'product_ids': products.ids}, + 'context': {'default_picking_id': self.id, 'product_ids': products.ids, 'default_company_id': self.company_id.id}, 'target': 'new', } diff --git a/addons/stock/models/stock_scrap.py b/addons/stock/models/stock_scrap.py index bbc9ee30b7c..85f297fd77f 100644 --- a/addons/stock/models/stock_scrap.py +++ b/addons/stock/models/stock_scrap.py @@ -25,6 +25,7 @@ class StockScrap(models.Model): 'Reference', default=lambda self: _('New'), copy=False, readonly=True, required=True, states={'done': [('readonly', True)]}) + company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.company, required=True, readonly=True) origin = fields.Char(string='Source Document') product_id = fields.Many2one( 'product.product', 'Product', domain=[('type', 'in', ['product', 'consu'])], @@ -39,16 +40,17 @@ class StockScrap(models.Model): states={'done': [('readonly', True)]}, domain="[('product_id', '=', product_id)]") package_id = fields.Many2one( 'stock.quant.package', 'Package', - states={'done': [('readonly', True)]}) + states={'done': [('readonly', True)]}, + domain="[('company_id', '=', company_id)]") owner_id = fields.Many2one('res.partner', 'Owner', states={'done': [('readonly', True)]}) move_id = fields.Many2one('stock.move', 'Scrap Move', readonly=True) - picking_id = fields.Many2one('stock.picking', 'Picking', states={'done': [('readonly', True)]}) + picking_id = fields.Many2one('stock.picking', 'Picking', states={'done': [('readonly', True)]}, domain="[('company_id', '=', company_id)]") location_id = fields.Many2one( - 'stock.location', 'Location', domain="[('usage', '=', 'internal')]", + 'stock.location', 'Location', domain="[('usage', '=', 'internal'), ('company_id', 'in', [company_id, False])]", required=True, states={'done': [('readonly', True)]}, default=_get_default_location_id) scrap_location_id = fields.Many2one( 'stock.location', 'Scrap Location', default=_get_default_scrap_location_id, - domain="[('scrap_location', '=', True)]", required=True, states={'done': [('readonly', True)]}) + domain="[('scrap_location', '=', True), ('company_id', 'in', [company_id, False])]", required=True, states={'done': [('readonly', True)]}) scrap_qty = fields.Float('Quantity', default=1.0, required=True, states={'done': [('readonly', True)]}) state = fields.Selection([ ('draft', 'Draft'), @@ -93,6 +95,7 @@ class StockScrap(models.Model): return { 'name': self.name, 'origin': self.origin or self.picking_id.name or self.name, + 'company_id': self.company_id.id, 'product_id': self.product_id.id, 'product_uom': self.product_uom_id.id, 'product_uom_qty': self.scrap_qty, diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml index cf204581e53..0adb7c6db34 100644 --- a/addons/stock/security/stock_security.xml +++ b/addons/stock/security/stock_security.xml @@ -164,5 +164,13 @@ ['|', ('company_id', '=', False), ('company_id', 'in', company_ids)] + + + stock_scrap_company multi-company + + + [('company_id', 'in', company_ids)] + + diff --git a/addons/stock/views/stock_scrap_views.xml b/addons/stock/views/stock_scrap_views.xml index dec6376bc0b..bc8d43d54ae 100644 --- a/addons/stock/views/stock_scrap_views.xml +++ b/addons/stock/views/stock_scrap_views.xml @@ -53,15 +53,16 @@ - + - + + @@ -121,6 +122,7 @@ + @@ -162,6 +164,7 @@ +