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 @@
+