From d549927afcfa42f5f141d3c468edefadd7228dc8 Mon Sep 17 00:00:00 2001
From: "GPA(OpenERP),VRA(OpenERP)" <>
Date: Mon, 30 Nov 2009 11:52:07 +0530
Subject: [PATCH] [MERGE] Merged Multicompany branch
bzr revid: jvo@tinyerp.com-20091130062207-7yxysaq03yypk2be
---
addons/account/account_invoice_view.xml | 3 +-
addons/account/invoice.py | 6 +-
addons/account/security/account_security.xml | 12 ++
addons/account_budget/crossovered_budget.py | 2 +-
addons/account_voucher/voucher.py | 4 +-
addons/debian/po/sl.po | 41 +++++++
addons/mrp/mrp.py | 14 ++-
addons/mrp/mrp_view.xml | 7 +-
addons/mrp/security/mrp_security.xml | 65 +++++++++++
addons/project/project.py | 1 +
addons/project/project_view.xml | 1 +
addons/purchase/purchase.py | 2 +-
addons/purchase/purchase_view.xml | 2 +-
addons/sale/sale.py | 2 +-
addons/sale/sale_view.xml | 3 +-
addons/stock/security/stock_security.xml | 32 +++++-
addons/stock/stock.py | 12 +-
addons/stock/stock_demo.xml | 110 +++++++++++++++++++
addons/stock/stock_view.xml | 8 ++
19 files changed, 306 insertions(+), 21 deletions(-)
create mode 100644 addons/debian/po/sl.po
diff --git a/addons/account/account_invoice_view.xml b/addons/account/account_invoice_view.xml
index d728eed9ffc..f5beac34601 100644
--- a/addons/account/account_invoice_view.xml
+++ b/addons/account/account_invoice_view.xml
@@ -63,6 +63,7 @@
+
@@ -288,7 +289,7 @@
-
+
diff --git a/addons/account/invoice.py b/addons/account/invoice.py
index fa55c444dd1..232e583da32 100644
--- a/addons/account/invoice.py
+++ b/addons/account/invoice.py
@@ -314,9 +314,7 @@ class account_invoice(osv.osv):
'state': lambda *a: 'draft',
'journal_id': _get_journal,
'currency_id': _get_currency,
- 'company_id': lambda self, cr, uid, context: \
- self.pool.get('res.users').browse(cr, uid, uid,
- context=context).company_id.id,
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.invoice', c),
'reference_type': lambda *a: 'none',
'check_total': lambda *a: 0.0,
}
@@ -1079,7 +1077,7 @@ class account_invoice_line(osv.osv):
'invoice_line_tax_id': fields.many2many('account.tax', 'account_invoice_line_tax', 'invoice_line_id', 'tax_id', 'Taxes', domain=[('parent_id','=',False)]),
'note': fields.text('Notes'),
'account_analytic_id': fields.many2one('account.analytic.account', 'Analytic Account'),
- 'company_id': fields.related('invoice_id','company_id',type='many2one',object='res.company',string='Company')
+ 'company_id': fields.related('invoice_id','company_id',type='many2one',relation='res.company',string='Company')
}
_defaults = {
'quantity': lambda *a: 1,
diff --git a/addons/account/security/account_security.xml b/addons/account/security/account_security.xml
index 396e195ac5a..f551d77ccaa 100644
--- a/addons/account/security/account_security.xml
+++ b/addons/account/security/account_security.xml
@@ -46,6 +46,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -59,6 +60,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -70,6 +72,7 @@
child_of
user.company_id.id
+ ['|','|',('company_id','=',False),('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id])]
@@ -82,6 +85,7 @@
child_of
user.company_id.id
+ ['|','|',('company_id','=',False),('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id])]
@@ -93,6 +97,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -105,6 +110,7 @@
=
False
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -117,6 +123,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -130,6 +137,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -142,6 +150,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -154,6 +163,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -166,6 +176,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
@@ -178,6 +189,7 @@
child_of
user.company_id.id
+ ['|',('company_id','=',False),('company_id','child_of',[user.company_id.id])]
diff --git a/addons/account_budget/crossovered_budget.py b/addons/account_budget/crossovered_budget.py
index 694ac6c1a8d..b350b15e9f3 100644
--- a/addons/account_budget/crossovered_budget.py
+++ b/addons/account_budget/crossovered_budget.py
@@ -49,7 +49,7 @@ class account_budget_post(osv.osv):
}
_defaults = {
'sequence': lambda *a: 1,
- 'company_id': lambda self,cr,uid,c: self.pool.get('res.users').browse(cr, uid, uid, c).company_id.id,
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.budget.post', c)
}
_order = "sequence, name"
diff --git a/addons/account_voucher/voucher.py b/addons/account_voucher/voucher.py
index 7493f24c18a..4c550cc11bd 100755
--- a/addons/account_voucher/voucher.py
+++ b/addons/account_voucher/voucher.py
@@ -133,9 +133,7 @@ class account_voucher(osv.osv):
'type': _get_type,
'reference_type': lambda *a: 'none',
'journal_id':_get_journal,
- 'company_id': lambda self, cr, uid, context: \
- self.pool.get('res.users').browse(cr, uid, uid,
- context=context).company_id.id,
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'account.voucher', c),
'currency_id': _get_currency,
}
diff --git a/addons/debian/po/sl.po b/addons/debian/po/sl.po
new file mode 100644
index 00000000000..4bb62d9c492
--- /dev/null
+++ b/addons/debian/po/sl.po
@@ -0,0 +1,41 @@
+# Slovenian translation for openobject-addons
+# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009
+# This file is distributed under the same license as the openobject-addons package.
+# FIRST AUTHOR , 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: openobject-addons\n"
+"Report-Msgid-Bugs-To: FULL NAME \n"
+"POT-Creation-Date: 2009-08-24 22:41+0300\n"
+"PO-Revision-Date: 2009-11-26 12:58+0000\n"
+"Last-Translator: Simon Vidmar \n"
+"Language-Team: Slovenian \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Launchpad-Export-Date: 2009-11-27 04:51+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
+
+#. Type: string
+#. Description
+#: ../openerp-server.templates:1001
+msgid "Dedicated system account for the Open ERP server:"
+msgstr "Posebni sistemski račun za strežnik OpenERP:"
+
+#. Type: string
+#. Description
+#: ../openerp-server.templates:1001
+msgid ""
+"The Open ERP server must use a dedicated account for its operation so that "
+"the system's security is not compromised by running it with superuser "
+"privileges."
+msgstr ""
+"Strežnik OpenERP mora uporabljati posebni račun zato, da varnost strežnika "
+"ni ogrožena pri delovanju s posebnimi sistemskimi pravicami."
+
+#. Type: string
+#. Description
+#: ../openerp-server.templates:1001
+msgid "Please choose that account's username."
+msgstr "Prosim, izberite uporabniško ime tega računa."
diff --git a/addons/mrp/mrp.py b/addons/mrp/mrp.py
index 1dbf4f07009..71a4fd29328 100644
--- a/addons/mrp/mrp.py
+++ b/addons/mrp/mrp.py
@@ -63,12 +63,14 @@ class mrp_workcenter(osv.osv):
help="Complete this only if you want automatic analytic accounting entries on production orders."),
'costs_journal_id': fields.many2one('account.analytic.journal', 'Analytic Journal'),
'costs_general_account_id': fields.many2one('account.account', 'General Account', domain=[('type','<>','view')]),
+ 'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'active': lambda *a: 1,
'type': lambda *a: 'machine',
'time_efficiency': lambda *a: 1.0,
'capacity_per_cycle': lambda *a: 1.0,
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.workcenter', c)
}
mrp_workcenter()
@@ -199,7 +201,8 @@ class mrp_bom(osv.osv):
'revision_ids': fields.one2many('mrp.bom.revision', 'bom_id', 'BoM Revisions'),
'revision_type': fields.selection([('numeric','numeric indices'),('alpha','alphabetical indices')], 'Index type'),
'child_ids': fields.function(_child_compute,relation='mrp.bom', method=True, string="BoM Hierarchy", type='many2many'),
- 'child_complete_ids': fields.function(_child_compute,relation='mrp.bom', method=True, string="BoM Hierarchy", type='many2many')
+ 'child_complete_ids': fields.function(_child_compute,relation='mrp.bom', method=True, string="BoM Hierarchy", type='many2many'),
+ 'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'active': lambda *a: 1,
@@ -207,6 +210,7 @@ class mrp_bom(osv.osv):
'product_qty': lambda *a: 1.0,
'product_rounding': lambda *a: 1.0,
'type': lambda *a: 'normal',
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.bom', c)
}
_order = "sequence"
_sql_constraints = [
@@ -442,6 +446,7 @@ class mrp_production(osv.osv):
'sale_name': fields.function(_sale_name_calc, method=True, type='char', string='Sale Name'),
'sale_ref': fields.function(_sale_ref_calc, method=True, type='char', string='Sale Ref'),
+ 'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'priority': lambda *a: '1',
@@ -449,6 +454,7 @@ class mrp_production(osv.osv):
'date_planned': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'product_qty': lambda *a: 1.0,
'name': lambda x,y,z,c: x.pool.get('ir.sequence').get(y,z,'mrp.production') or '/',
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.production', c),
}
_order = 'date_planned asc, priority desc';
def unlink(self, cr, uid, ids, context=None):
@@ -825,6 +831,7 @@ class mrp_procurement(osv.osv):
help='When a procurement is created the state is set to \'Draft\'.\n If the procurement is confirmed, the state is set to \'Confirmed\'.\
\nAfter confirming the state is set to \'Running\'.\n If any exception arises in the order then the state is set to \'Exception\'.\n Once the exception is removed the state becomes \'Ready\'.\n It is in \'Waiting\'. state when the procurement is waiting for another one to finish.'),
'note' : fields.text('Note'),
+ 'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'state': lambda *a: 'draft',
@@ -832,6 +839,7 @@ class mrp_procurement(osv.osv):
'date_planned': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'close_move': lambda *a: 0,
'procure_method': lambda *a: 'make_to_order',
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'mrp.procurement', c)
}
def unlink(self, cr, uid, ids, context=None):
@@ -1191,7 +1199,8 @@ class stock_warehouse_orderpoint(osv.osv):
"a requisition to bring the virtual stock to the Max Quantity."),
'qty_multiple': fields.integer('Qty Multiple', required=True,
help="The requisition quantity will by rounded up to this multiple."),
- 'procurement_id': fields.many2one('mrp.procurement', 'Purchase Order')
+ 'procurement_id': fields.many2one('mrp.procurement', 'Purchase Order'),
+ 'company_id': fields.many2one('res.company','Company',required=True),
}
_defaults = {
'active': lambda *a: 1,
@@ -1199,6 +1208,7 @@ class stock_warehouse_orderpoint(osv.osv):
'qty_multiple': lambda *a: 1,
'name': lambda x,y,z,c: x.pool.get('ir.sequence').get(y,z,'mrp.warehouse.orderpoint') or '',
'product_uom': lambda sel, cr, uid, context: context.get('product_uom', False),
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.warehouse.orderpoint', c)
}
def onchange_warehouse_id(self, cr, uid, ids, warehouse_id, context={}):
if warehouse_id:
diff --git a/addons/mrp/mrp_view.xml b/addons/mrp/mrp_view.xml
index c415a12d7c3..98e6fe5b907 100644
--- a/addons/mrp/mrp_view.xml
+++ b/addons/mrp/mrp_view.xml
@@ -109,6 +109,7 @@
+
@@ -235,6 +236,7 @@
+
@@ -457,10 +459,9 @@
-
-
+
@@ -697,6 +698,7 @@
+
@@ -843,6 +845,7 @@
+
diff --git a/addons/mrp/security/mrp_security.xml b/addons/mrp/security/mrp_security.xml
index 8cd84d7df6b..cfb31f7d05d 100644
--- a/addons/mrp/security/mrp_security.xml
+++ b/addons/mrp/security/mrp_security.xml
@@ -15,6 +15,71 @@
+
+
+ mrp_procurement multi-company
+
+
+
+
+
+ child_of
+ user.company_id.id
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+
+ stock_warehouse.orderpoint multi-company
+
+
+
+
+
+ child_of
+ user.company_id.id
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+
+ mrp_production multi-company
+
+
+
+
+
+ child_of
+ user.company_id.id
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+
+ mrp_workcenter multi-company
+
+
+
+
+
+ child_of
+ user.company_id.id
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
+
+
+ mrp_bom multi-company
+
+
+
+
+
+ child_of
+ user.company_id.id
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+
+
diff --git a/addons/project/project.py b/addons/project/project.py
index 43572ecae7d..9b97b08c433 100644
--- a/addons/project/project.py
+++ b/addons/project/project.py
@@ -441,6 +441,7 @@ class project_work(osv.osv):
'task_id': fields.many2one('project.task', 'Task', ondelete='cascade', required=True),
'hours': fields.float('Time Spent'),
'user_id': fields.many2one('res.users', 'Done by', required=True),
+ 'company_id': fields.related('task_id','company_id',type='many2one',relation='res.company',string='Company')
}
_defaults = {
'user_id': lambda obj,cr,uid,context: uid,
diff --git a/addons/project/project_view.xml b/addons/project/project_view.xml
index cdc7670b8fd..05a46c6cc5f 100644
--- a/addons/project/project_view.xml
+++ b/addons/project/project_view.xml
@@ -193,6 +193,7 @@
+
diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py
index f2063354cad..b40e4b08a84 100644
--- a/addons/purchase/purchase.py
+++ b/addons/purchase/purchase.py
@@ -449,7 +449,7 @@ class purchase_order_line(osv.osv):
'notes': fields.text('Notes'),
'order_id': fields.many2one('purchase.order', 'Order Ref', select=True, required=True, ondelete='cascade'),
'account_analytic_id':fields.many2one('account.analytic.account', 'Analytic Account',),
- 'company_id': fields.related('order_id','company_id',type='many2one',object='res.company',string='Company')
+ 'company_id': fields.related('order_id','company_id',type='many2one',relation='res.company',string='Company')
}
_defaults = {
'product_qty': lambda *a: 1.0
diff --git a/addons/purchase/purchase_view.xml b/addons/purchase/purchase_view.xml
index 37577dd5844..0f093d9ca05 100644
--- a/addons/purchase/purchase_view.xml
+++ b/addons/purchase/purchase_view.xml
@@ -228,7 +228,7 @@
-
+
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 3d58d4a0350..79b763ea235 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -768,7 +768,7 @@ class sale_order_line(osv.osv):
'state': fields.selection([('draft', 'Draft'), ('confirmed', 'Confirmed'), ('done', 'Done'), ('cancel', 'Cancelled'), ('exception', 'Exception')], 'State', required=True, readonly=True),
'order_partner_id': fields.related('order_id', 'partner_id', type='many2one', relation='res.partner', string='Customer'),
'salesman_id':fields.related('order_id','user_id',type='many2one',relation='res.users',string='Salesman'),
- 'company_id': fields.related('order_id','company_id',type='many2one',object='res.company',string='Company')
+ 'company_id': fields.related('order_id','company_id',type='many2one',relation='res.company',string='Company')
}
_order = 'sequence, id'
_defaults = {
diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml
index 590ddb445db..f2803952f5b 100644
--- a/addons/sale/sale_view.xml
+++ b/addons/sale/sale_view.xml
@@ -131,6 +131,7 @@
on_change="product_id_change(parent.pricelist_id,product_id,product_uom_qty,product_uom,product_uos_qty,product_uos,name,parent.partner_id, 'lang' in context and context['lang'], False, parent.date_order, product_packaging, parent.fiscal_position)"
domain="[('product_id','=',product_id)]"
groups="base.group_extended"/>
+
@@ -425,7 +426,7 @@
-
+
diff --git a/addons/stock/security/stock_security.xml b/addons/stock/security/stock_security.xml
index 793e06c90cb..2d91d958957 100644
--- a/addons/stock/security/stock_security.xml
+++ b/addons/stock/security/stock_security.xml
@@ -17,18 +17,33 @@
-
+
+
+
+ stock_picking multi-company
+
+
+
+
+
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+ child_of
+ user.company_id.id
+
+
+
+
Warehouse multi-company
+
['|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id])]
-
Location multi-company
@@ -40,6 +55,18 @@
['|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id])]
+
+ stock_move multi-company
+
+
+
+
+
+ ['|',('company_id','child_of',[user.company_id.id]),('company_id','=',False)]
+ child_of
+ user.company_id.id
+
+
Inventory Line multi-company
@@ -62,5 +89,6 @@
['|',('company_id.child_ids','child_of',[user.company_id.id]),('company_id','child_of',[user.company_id.id])]
+
diff --git a/addons/stock/stock.py b/addons/stock/stock.py
index 9a7123f06da..3e95a99cc5d 100644
--- a/addons/stock/stock.py
+++ b/addons/stock/stock.py
@@ -168,6 +168,7 @@ class stock_location(osv.osv):
'parent_right': fields.integer('Right Parent', select=1),
'stock_real_value': fields.function(_product_value, method=True, type='float', string='Real Stock Value', multi="stock"),
'stock_virtual_value': fields.function(_product_value, method=True, type='float', string='Virtual Stock Value', multi="stock"),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
}
_defaults = {
'active': lambda *a: 1,
@@ -179,7 +180,8 @@ class stock_location(osv.osv):
'posx': lambda *a: 0,
'posy': lambda *a: 0,
'posz': lambda *a: 0,
- 'icon': lambda *a: False
+ 'icon': lambda *a: False,
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.location', c)
}
def chained_location_get(self, cr, uid, location, partner=None, product=None, context={}):
@@ -474,6 +476,7 @@ class stock_picking(osv.osv):
("2binvoiced", "To Be Invoiced"),
("none", "Not from Picking")], "Invoice Status",
select=True, required=True, readonly=True, states={'draft': [('readonly', False)]}),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
}
_defaults = {
'name': lambda self, cr, uid, context: '/',
@@ -483,6 +486,8 @@ class stock_picking(osv.osv):
'type': lambda *a: 'in',
'invoice_state': lambda *a: 'none',
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock_picking', c)
+
}
def copy(self, cr, uid, id, default=None, context={}):
@@ -995,6 +1000,7 @@ class stock_move(osv.osv):
\nThe state is \'Waiting\' if the move is waiting for another one.'),
'price_unit': fields.float('Unit Price',
digits=(16, int(config['price_accuracy']))),
+ 'company_id': fields.many2one('res.company', 'Company', required=True),
}
_constraints = [
(_check_tracking,
@@ -1034,6 +1040,7 @@ class stock_move(osv.osv):
'product_qty': lambda *a: 1.0,
'date_planned': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
'date': lambda *a: time.strftime('%Y-%m-%d %H:%M:%S'),
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.move', c)
}
def _auto_init(self, cursor, context):
@@ -1376,6 +1383,7 @@ class stock_inventory(osv.osv):
'date_done': fields.datetime('Date done'),
'inventory_line_id': fields.one2many('stock.inventory.line', 'inventory_id', 'Inventories', readonly=True, states={'draft': [('readonly', False)]}),
'move_ids': fields.many2many('stock.move', 'stock_inventory_move_rel', 'inventory_id', 'move_id', 'Created Moves'),
+ 'company_id': fields.many2one('res.company','Company',required=True),
'state': fields.selection( (('draft', 'Draft'), ('done', 'Done'), ('cancel','Cancelled')), 'State', readonly=True),
'company_id': fields.many2one('res.company','Company',required=True),
}
@@ -1482,7 +1490,7 @@ class stock_warehouse(osv.osv):
'lot_output_id': fields.many2one('stock.location', 'Location Output', required=True),
}
_defaults = {
- 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', c)
+ 'company_id': lambda self,cr,uid,c: self.pool.get('res.company')._company_default_get(cr, uid, 'stock.inventory', c),
}
stock_warehouse()
diff --git a/addons/stock/stock_demo.xml b/addons/stock/stock_demo.xml
index f876815b690..1bd15c68ce1 100644
--- a/addons/stock/stock_demo.xml
+++ b/addons/stock/stock_demo.xml
@@ -184,5 +184,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml
index a2dfb9d5e5d..e487f132a47 100644
--- a/addons/stock/stock_view.xml
+++ b/addons/stock/stock_view.xml
@@ -57,6 +57,7 @@
@@ -529,6 +532,7 @@
+
@@ -628,6 +632,7 @@
+
@@ -840,6 +845,7 @@
+
@@ -1025,6 +1031,7 @@
+
@@ -1276,6 +1283,7 @@
+