diff --git a/addons/project/res_config.py b/addons/project/res_config.py
index e7699a61ec8..187ad0327d8 100644
--- a/addons/project/res_config.py
+++ b/addons/project/res_config.py
@@ -27,11 +27,11 @@ class project_configuration(osv.osv_memory):
_inherit = 'res.config.settings'
_columns = {
- 'module_project_mrp': fields.boolean('Generate tasks from sale orders',
+ 'module_sale_service': fields.boolean('Generate tasks from sale orders',
help='This feature automatically creates project tasks from service products in sale orders. '
'More precisely, tasks are created for procurement lines with product of type \'Service\', '
'procurement method \'Make to Order\', and supply method \'Manufacture\'.\n'
- '-This installs the module project_mrp.'),
+ '-This installs the module sale_service.'),
'module_pad': fields.boolean("Use integrated collaborative note pads on task",
help='Lets the company customize which Pad installation should be used to link to new pads '
'(for example: http://ietherpad.com/).\n'
diff --git a/addons/project/res_config_view.xml b/addons/project/res_config_view.xml
index f190fba3b3a..16dce54d88b 100644
--- a/addons/project/res_config_view.xml
+++ b/addons/project/res_config_view.xml
@@ -33,8 +33,8 @@
-
-
+
+
diff --git a/addons/report/models/report.py b/addons/report/models/report.py
index cbbee7fcebd..17635688063 100644
--- a/addons/report/models/report.py
+++ b/addons/report/models/report.py
@@ -134,14 +134,15 @@ class Report(osv.Model):
website = None
if request and hasattr(request, 'website'):
website = request.website
- values.update({
- 'time': time,
- 'translate_doc': translate_doc,
- 'editable': True, # Will active inherit_branding
- 'user': user,
- 'res_company': user.company_id,
- 'website': website,
- })
+ values.update(
+ time=time,
+ translate_doc=translate_doc,
+ editable=True, # Will active inherit_branding
+ user=user,
+ res_company=user.company_id,
+ website=website,
+ editable_no_editor=True,
+ )
return view_obj.render(cr, uid, template, values, context=context)
#--------------------------------------------------------------------------
diff --git a/addons/sale/res_config.py b/addons/sale/res_config.py
index 94fd74e035e..f4892598332 100644
--- a/addons/sale/res_config.py
+++ b/addons/sale/res_config.py
@@ -122,7 +122,7 @@ Example: 10% for retailers, promotion of 5 EUR on this product, etc."""),
def onchange_task_work(self, cr, uid, ids, task_work, context=None):
return {'value': {
'module_project_timesheet': task_work,
- 'module_project_mrp': task_work,
+ 'module_sale_service': task_work,
}}
def onchange_timesheet(self, cr, uid, ids, timesheet, context=None):
diff --git a/addons/sale/sale.py b/addons/sale/sale.py
index 45c32a33b22..964fa1584ba 100644
--- a/addons/sale/sale.py
+++ b/addons/sale/sale.py
@@ -686,7 +686,7 @@ class sale_order(osv.osv):
def procurement_needed(self, cr, uid, ids, context=None):
#when sale is installed only, there is no need to create procurements, that's only
- #further installed modules (project_mrp, sale_stock) that will change this.
+ #further installed modules (sale_service, sale_stock) that will change this.
sale_line_obj = self.pool.get('sale.order.line')
res = []
for order in self.browse(cr, uid, ids, context=context):
@@ -839,7 +839,7 @@ class sale_order_line(osv.osv):
def need_procurement(self, cr, uid, ids, context=None):
#when sale is installed only, there is no need to create procurements, that's only
- #further installed modules (project_mrp, sale_stock) that will change this.
+ #further installed modules (sale_service, sale_stock) that will change this.
return False
def _amount_line(self, cr, uid, ids, field_name, arg, context=None):
diff --git a/addons/project_mrp/__init__.py b/addons/sale_service/__init__.py
similarity index 98%
rename from addons/project_mrp/__init__.py
rename to addons/sale_service/__init__.py
index c0c3172c29f..d6bf9f9551c 100644
--- a/addons/project_mrp/__init__.py
+++ b/addons/sale_service/__init__.py
@@ -19,6 +19,6 @@
#
##############################################################################
-import project_mrp
+import models
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
diff --git a/addons/project_mrp/__openerp__.py b/addons/sale_service/__openerp__.py
similarity index 95%
rename from addons/project_mrp/__openerp__.py
rename to addons/sale_service/__openerp__.py
index 3730ec74113..85ea8df0735 100644
--- a/addons/project_mrp/__openerp__.py
+++ b/addons/sale_service/__openerp__.py
@@ -50,8 +50,8 @@ completed.
'website': 'http://www.openerp.com',
'images': ['images/product.jpeg', 'images/task_from_SO.jpeg'],
'depends': ['project', 'procurement', 'sale', 'procurement_jit'],
- 'data': ['project_mrp_view.xml'], #'process/project_mrp_process.xml'
- 'demo': ['project_mrp_demo.xml'],
+ 'data': ['views/sale_service_view.xml'],
+ 'demo': ['demo/sale_service_demo.xml'],
'test': ['test/project_task_procurement.yml'],
'installable': True,
'auto_install': False,
diff --git a/addons/project_mrp/project_mrp_demo.xml b/addons/sale_service/demo/sale_service_demo.xml
similarity index 100%
rename from addons/project_mrp/project_mrp_demo.xml
rename to addons/sale_service/demo/sale_service_demo.xml
diff --git a/addons/project_mrp/i18n/ar.po b/addons/sale_service/i18n/ar.po
similarity index 100%
rename from addons/project_mrp/i18n/ar.po
rename to addons/sale_service/i18n/ar.po
diff --git a/addons/project_mrp/i18n/bg.po b/addons/sale_service/i18n/bg.po
similarity index 100%
rename from addons/project_mrp/i18n/bg.po
rename to addons/sale_service/i18n/bg.po
diff --git a/addons/project_mrp/i18n/bs.po b/addons/sale_service/i18n/bs.po
similarity index 100%
rename from addons/project_mrp/i18n/bs.po
rename to addons/sale_service/i18n/bs.po
diff --git a/addons/project_mrp/i18n/ca.po b/addons/sale_service/i18n/ca.po
similarity index 100%
rename from addons/project_mrp/i18n/ca.po
rename to addons/sale_service/i18n/ca.po
diff --git a/addons/project_mrp/i18n/cs.po b/addons/sale_service/i18n/cs.po
similarity index 100%
rename from addons/project_mrp/i18n/cs.po
rename to addons/sale_service/i18n/cs.po
diff --git a/addons/project_mrp/i18n/da.po b/addons/sale_service/i18n/da.po
similarity index 100%
rename from addons/project_mrp/i18n/da.po
rename to addons/sale_service/i18n/da.po
diff --git a/addons/project_mrp/i18n/de.po b/addons/sale_service/i18n/de.po
similarity index 100%
rename from addons/project_mrp/i18n/de.po
rename to addons/sale_service/i18n/de.po
diff --git a/addons/project_mrp/i18n/el.po b/addons/sale_service/i18n/el.po
similarity index 100%
rename from addons/project_mrp/i18n/el.po
rename to addons/sale_service/i18n/el.po
diff --git a/addons/project_mrp/i18n/es.po b/addons/sale_service/i18n/es.po
similarity index 100%
rename from addons/project_mrp/i18n/es.po
rename to addons/sale_service/i18n/es.po
diff --git a/addons/project_mrp/i18n/es_AR.po b/addons/sale_service/i18n/es_AR.po
similarity index 100%
rename from addons/project_mrp/i18n/es_AR.po
rename to addons/sale_service/i18n/es_AR.po
diff --git a/addons/project_mrp/i18n/es_CR.po b/addons/sale_service/i18n/es_CR.po
similarity index 100%
rename from addons/project_mrp/i18n/es_CR.po
rename to addons/sale_service/i18n/es_CR.po
diff --git a/addons/project_mrp/i18n/es_EC.po b/addons/sale_service/i18n/es_EC.po
similarity index 100%
rename from addons/project_mrp/i18n/es_EC.po
rename to addons/sale_service/i18n/es_EC.po
diff --git a/addons/project_mrp/i18n/es_MX.po b/addons/sale_service/i18n/es_MX.po
similarity index 100%
rename from addons/project_mrp/i18n/es_MX.po
rename to addons/sale_service/i18n/es_MX.po
diff --git a/addons/project_mrp/i18n/es_VE.po b/addons/sale_service/i18n/es_VE.po
similarity index 100%
rename from addons/project_mrp/i18n/es_VE.po
rename to addons/sale_service/i18n/es_VE.po
diff --git a/addons/project_mrp/i18n/et.po b/addons/sale_service/i18n/et.po
similarity index 100%
rename from addons/project_mrp/i18n/et.po
rename to addons/sale_service/i18n/et.po
diff --git a/addons/project_mrp/i18n/fi.po b/addons/sale_service/i18n/fi.po
similarity index 100%
rename from addons/project_mrp/i18n/fi.po
rename to addons/sale_service/i18n/fi.po
diff --git a/addons/project_mrp/i18n/fr.po b/addons/sale_service/i18n/fr.po
similarity index 100%
rename from addons/project_mrp/i18n/fr.po
rename to addons/sale_service/i18n/fr.po
diff --git a/addons/project_mrp/i18n/gl.po b/addons/sale_service/i18n/gl.po
similarity index 100%
rename from addons/project_mrp/i18n/gl.po
rename to addons/sale_service/i18n/gl.po
diff --git a/addons/project_mrp/i18n/gu.po b/addons/sale_service/i18n/gu.po
similarity index 100%
rename from addons/project_mrp/i18n/gu.po
rename to addons/sale_service/i18n/gu.po
diff --git a/addons/project_mrp/i18n/hr.po b/addons/sale_service/i18n/hr.po
similarity index 100%
rename from addons/project_mrp/i18n/hr.po
rename to addons/sale_service/i18n/hr.po
diff --git a/addons/project_mrp/i18n/hu.po b/addons/sale_service/i18n/hu.po
similarity index 100%
rename from addons/project_mrp/i18n/hu.po
rename to addons/sale_service/i18n/hu.po
diff --git a/addons/project_mrp/i18n/id.po b/addons/sale_service/i18n/id.po
similarity index 100%
rename from addons/project_mrp/i18n/id.po
rename to addons/sale_service/i18n/id.po
diff --git a/addons/project_mrp/i18n/it.po b/addons/sale_service/i18n/it.po
similarity index 100%
rename from addons/project_mrp/i18n/it.po
rename to addons/sale_service/i18n/it.po
diff --git a/addons/project_mrp/i18n/ja.po b/addons/sale_service/i18n/ja.po
similarity index 100%
rename from addons/project_mrp/i18n/ja.po
rename to addons/sale_service/i18n/ja.po
diff --git a/addons/project_mrp/i18n/ko.po b/addons/sale_service/i18n/ko.po
similarity index 100%
rename from addons/project_mrp/i18n/ko.po
rename to addons/sale_service/i18n/ko.po
diff --git a/addons/project_mrp/i18n/lt.po b/addons/sale_service/i18n/lt.po
similarity index 100%
rename from addons/project_mrp/i18n/lt.po
rename to addons/sale_service/i18n/lt.po
diff --git a/addons/project_mrp/i18n/lv.po b/addons/sale_service/i18n/lv.po
similarity index 100%
rename from addons/project_mrp/i18n/lv.po
rename to addons/sale_service/i18n/lv.po
diff --git a/addons/project_mrp/i18n/mk.po b/addons/sale_service/i18n/mk.po
similarity index 100%
rename from addons/project_mrp/i18n/mk.po
rename to addons/sale_service/i18n/mk.po
diff --git a/addons/project_mrp/i18n/mn.po b/addons/sale_service/i18n/mn.po
similarity index 100%
rename from addons/project_mrp/i18n/mn.po
rename to addons/sale_service/i18n/mn.po
diff --git a/addons/project_mrp/i18n/nb.po b/addons/sale_service/i18n/nb.po
similarity index 100%
rename from addons/project_mrp/i18n/nb.po
rename to addons/sale_service/i18n/nb.po
diff --git a/addons/project_mrp/i18n/nl.po b/addons/sale_service/i18n/nl.po
similarity index 100%
rename from addons/project_mrp/i18n/nl.po
rename to addons/sale_service/i18n/nl.po
diff --git a/addons/project_mrp/i18n/nl_BE.po b/addons/sale_service/i18n/nl_BE.po
similarity index 100%
rename from addons/project_mrp/i18n/nl_BE.po
rename to addons/sale_service/i18n/nl_BE.po
diff --git a/addons/project_mrp/i18n/pl.po b/addons/sale_service/i18n/pl.po
similarity index 100%
rename from addons/project_mrp/i18n/pl.po
rename to addons/sale_service/i18n/pl.po
diff --git a/addons/project_mrp/i18n/pt.po b/addons/sale_service/i18n/pt.po
similarity index 100%
rename from addons/project_mrp/i18n/pt.po
rename to addons/sale_service/i18n/pt.po
diff --git a/addons/project_mrp/i18n/pt_BR.po b/addons/sale_service/i18n/pt_BR.po
similarity index 100%
rename from addons/project_mrp/i18n/pt_BR.po
rename to addons/sale_service/i18n/pt_BR.po
diff --git a/addons/project_mrp/i18n/ro.po b/addons/sale_service/i18n/ro.po
similarity index 100%
rename from addons/project_mrp/i18n/ro.po
rename to addons/sale_service/i18n/ro.po
diff --git a/addons/project_mrp/i18n/ru.po b/addons/sale_service/i18n/ru.po
similarity index 100%
rename from addons/project_mrp/i18n/ru.po
rename to addons/sale_service/i18n/ru.po
diff --git a/addons/project_mrp/i18n/project_mrp.pot b/addons/sale_service/i18n/sale_service.pot
similarity index 100%
rename from addons/project_mrp/i18n/project_mrp.pot
rename to addons/sale_service/i18n/sale_service.pot
diff --git a/addons/project_mrp/i18n/sl.po b/addons/sale_service/i18n/sl.po
similarity index 100%
rename from addons/project_mrp/i18n/sl.po
rename to addons/sale_service/i18n/sl.po
diff --git a/addons/project_mrp/i18n/sq.po b/addons/sale_service/i18n/sq.po
similarity index 100%
rename from addons/project_mrp/i18n/sq.po
rename to addons/sale_service/i18n/sq.po
diff --git a/addons/project_mrp/i18n/sv.po b/addons/sale_service/i18n/sv.po
similarity index 100%
rename from addons/project_mrp/i18n/sv.po
rename to addons/sale_service/i18n/sv.po
diff --git a/addons/project_mrp/i18n/tlh.po b/addons/sale_service/i18n/tlh.po
similarity index 100%
rename from addons/project_mrp/i18n/tlh.po
rename to addons/sale_service/i18n/tlh.po
diff --git a/addons/project_mrp/i18n/tr.po b/addons/sale_service/i18n/tr.po
similarity index 100%
rename from addons/project_mrp/i18n/tr.po
rename to addons/sale_service/i18n/tr.po
diff --git a/addons/project_mrp/i18n/uk.po b/addons/sale_service/i18n/uk.po
similarity index 100%
rename from addons/project_mrp/i18n/uk.po
rename to addons/sale_service/i18n/uk.po
diff --git a/addons/project_mrp/i18n/vi.po b/addons/sale_service/i18n/vi.po
similarity index 100%
rename from addons/project_mrp/i18n/vi.po
rename to addons/sale_service/i18n/vi.po
diff --git a/addons/project_mrp/i18n/zh_CN.po b/addons/sale_service/i18n/zh_CN.po
similarity index 100%
rename from addons/project_mrp/i18n/zh_CN.po
rename to addons/sale_service/i18n/zh_CN.po
diff --git a/addons/project_mrp/i18n/zh_TW.po b/addons/sale_service/i18n/zh_TW.po
similarity index 100%
rename from addons/project_mrp/i18n/zh_TW.po
rename to addons/sale_service/i18n/zh_TW.po
diff --git a/addons/sale_service/models/__init__.py b/addons/sale_service/models/__init__.py
new file mode 100644
index 00000000000..d9728749476
--- /dev/null
+++ b/addons/sale_service/models/__init__.py
@@ -0,0 +1 @@
+import sale_service
\ No newline at end of file
diff --git a/addons/project_mrp/project_mrp.py b/addons/sale_service/models/sale_service.py
similarity index 99%
rename from addons/project_mrp/project_mrp.py
rename to addons/sale_service/models/sale_service.py
index 651aa7dda48..bcce63cf66d 100644
--- a/addons/project_mrp/project_mrp.py
+++ b/addons/sale_service/models/sale_service.py
@@ -151,7 +151,7 @@ class sale_order_line(osv.osv):
_inherit = 'sale.order.line'
def need_procurement(self, cr, uid, ids, context=None):
- #when sale is installed alone, there is no need to create procurements, but with project_mrp
+ #when sale is installed alone, there is no need to create procurements, but with sale_service
#we must create a procurement for each service that has the auto_create_task boolean set to True.
for line in self.browse(cr, uid, ids, context=context):
if line.product_id and line.product_id.type == 'service' and line.product_id.auto_create_task:
diff --git a/addons/project_mrp/security/ir.model.access.csv b/addons/sale_service/security/ir.model.access.csv
similarity index 100%
rename from addons/project_mrp/security/ir.model.access.csv
rename to addons/sale_service/security/ir.model.access.csv
diff --git a/addons/project_mrp/test/project_task_procurement.yml b/addons/sale_service/test/project_task_procurement.yml
similarity index 100%
rename from addons/project_mrp/test/project_task_procurement.yml
rename to addons/sale_service/test/project_task_procurement.yml
diff --git a/addons/project_mrp/project_mrp_view.xml b/addons/sale_service/views/sale_service_view.xml
similarity index 90%
rename from addons/project_mrp/project_mrp_view.xml
rename to addons/sale_service/views/sale_service_view.xml
index 90ab6682cd5..0865d95fa0e 100644
--- a/addons/project_mrp/project_mrp_view.xml
+++ b/addons/sale_service/views/sale_service_view.xml
@@ -14,7 +14,7 @@
product.form.view.inheritproduct.template
-
+
@@ -34,8 +34,8 @@
-
- project.mrp.form.view.inherit
+
+ sale.service.form.view.inheritproject.task
diff --git a/addons/sale_stock/res_config.py b/addons/sale_stock/res_config.py
index 8c1d5c87f99..f702ca81929 100644
--- a/addons/sale_stock/res_config.py
+++ b/addons/sale_stock/res_config.py
@@ -35,7 +35,7 @@ class sale_configuration(osv.osv_memory):
help='Lets you transfer the entries under tasks defined for Project Management to '
'the Timesheet line entries for particular date and particular user with the effect of creating, editing and deleting either ways '
'and to automatically creates project tasks from procurement lines.\n'
- '-This installs the modules project_timesheet and project_mrp.'),
+ '-This installs the modules project_timesheet and sale_service.'),
'default_order_policy': fields.selection(
[('manual', 'Invoice based on sales orders'), ('picking', 'Invoice based on deliveries')],
'The default invoicing method is', default_model='sale.order',
@@ -50,7 +50,7 @@ class sale_configuration(osv.osv_memory):
implied_group='sale.group_mrp_properties',
help="Allows you to tag sales order lines with properties."),
'module_project_timesheet': fields.boolean("Project Timesheet"),
- 'module_project_mrp': fields.boolean("Project MRP"),
+ 'module_sale_service': fields.boolean("Sale Service"),
'group_route_so_lines': fields.boolean('Choose MTO, drop shipping,... on sales order lines',
implied_group='sale_stock.group_route_so_lines',
help="Allows you to choose a delivery route on sales order lines"),
@@ -63,7 +63,7 @@ class sale_configuration(osv.osv_memory):
def default_get(self, cr, uid, fields, context=None):
res = super(sale_configuration, self).default_get(cr, uid, fields, context)
# task_work, time_unit depend on other fields
- res['task_work'] = res.get('module_project_mrp') and res.get('module_project_timesheet')
+ res['task_work'] = res.get('module_sale_service') and res.get('module_project_timesheet')
return res
def get_default_sale_config(self, cr, uid, ids, context=None):
diff --git a/addons/sale_stock/res_config_view.xml b/addons/sale_stock/res_config_view.xml
index 89c2f191915..69824ffdd5a 100644
--- a/addons/sale_stock/res_config_view.xml
+++ b/addons/sale_stock/res_config_view.xml
@@ -38,7 +38,7 @@
-
+
diff --git a/addons/stock/procurement.py b/addons/stock/procurement.py
index 04564bda56f..e9a4a46e3d0 100644
--- a/addons/stock/procurement.py
+++ b/addons/stock/procurement.py
@@ -78,7 +78,7 @@ class procurement_rule(osv.osv):
class procurement_order(osv.osv):
_inherit = "procurement.order"
_columns = {
- 'location_id': fields.many2one('stock.location', 'Procurement Location'), # not required because task may create procurements that aren't linked to a location with project_mrp
+ 'location_id': fields.many2one('stock.location', 'Procurement Location'), # not required because task may create procurements that aren't linked to a location with sale_service
'partner_dest_id': fields.many2one('res.partner', 'Customer Address', help="In case of dropshipping, we need to know the destination address more precisely"),
'move_ids': fields.one2many('stock.move', 'procurement_id', 'Moves', help="Moves created by the procurement"),
'move_dest_id': fields.many2one('stock.move', 'Destination Move', help="Move which caused (created) the procurement"),
diff --git a/addons/website/static/src/css/editor.css b/addons/website/static/src/css/editor.css
index 7d8b1e609e8..f60530c3f0c 100644
--- a/addons/website/static/src/css/editor.css
+++ b/addons/website/static/src/css/editor.css
@@ -472,13 +472,14 @@ ul.oe_menu_editor .disclose {
right: 0;
z-index: 1000;
height: 100%;
+ background: #2f3129;
+ color: white;
}
.oe_ace_view_editor .oe_ace_view_editor_title {
width: 100%;
padding-top: 0;
padding-left: 0;
height: 30px;
- background: #2f3129;
}
.oe_ace_view_editor .oe_ace_view_editor_title .oe_view_list {
width: 50%;
@@ -496,13 +497,16 @@ ul.oe_menu_editor .disclose {
}
.oe_ace_view_editor .ace_editor {
position: absolute;
- top: 30px;
+ top: 50px;
right: 0;
left: 0;
}
.oe_ace_view_editor .ace_editor .ace_gutter {
cursor: ew-resize;
}
+.oe_ace_view_editor #ace-view-id {
+ padding: 0 1em;
+}
.oe_ace_view_editor.oe_ace_open {
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=97);
opacity: 0.97;
diff --git a/addons/website/static/src/css/editor.sass b/addons/website/static/src/css/editor.sass
index d39b6abd453..07340c62698 100644
--- a/addons/website/static/src/css/editor.sass
+++ b/addons/website/static/src/css/editor.sass
@@ -408,6 +408,7 @@ $highlighted_text_color: #ffffff
/* ---- ACE EDITOR ---- {{{ */
$editorbar_height: 30px
+$infobar_height: 20px
// TODO Fix => might break with themes
.oe_ace_view_editor
@@ -416,12 +417,13 @@ $editorbar_height: 30px
right: 0
z-index: 1000
height: 100%
+ background: #2F3129
+ color: white
.oe_ace_view_editor_title
width: 100%
padding-top: 0
padding-left: 0
height: $editorbar_height
- background: #2F3129
.oe_view_list
width: 50%
height: $editorbar_height
@@ -432,12 +434,14 @@ $editorbar_height: 30px
@include editor-font
.ace_editor
position: absolute
- top: $editorbar_height
+ top: $editorbar_height + $infobar_height
right: 0
// bottom property is set programmatically
left: 0
.ace_gutter
cursor: ew-resize
+ #ace-view-id
+ padding: 0 1em
&.oe_ace_open
+opacity(0.97)
&.oe_ace_closed
diff --git a/addons/website/static/src/js/website.ace.js b/addons/website/static/src/js/website.ace.js
index 27e5cd60e62..72ed6f2df9e 100644
--- a/addons/website/static/src/js/website.ace.js
+++ b/addons/website/static/src/js/website.ace.js
@@ -1,6 +1,7 @@
(function () {
'use strict';
+ var _t = openerp._t;
var hash = "#advanced-view-editor";
var website = openerp.website;
@@ -65,12 +66,11 @@
website.ace.ViewOption = openerp.Widget.extend({
template: 'website.ace_view_option',
init: function (parent, options) {
- var indent = "- ";
this.view_id = options.id;
this.view_name = options.name;
- for (var i = 0; iFormat
diff --git a/openerp/addons/base/ir/ir_qweb.py b/openerp/addons/base/ir/ir_qweb.py
index bb6c8cb2847..f0d15fad609 100644
--- a/openerp/addons/base/ir/ir_qweb.py
+++ b/openerp/addons/base/ir/ir_qweb.py
@@ -257,8 +257,13 @@ class QWeb(orm.AbstractModel):
uid = qwebcontext.get('request') and qwebcontext['request'].uid or None
can_see = self.user_has_groups(cr, uid, groups=attribute_value) if cr and uid else False
if not can_see:
+ if qwebcontext.get('editable') and not qwebcontext.get('editable_no_editor'):
+ errmsg = _("Editor disabled because some content can not be seen by a user who does not belong to the groups %s")
+ raise openerp.http.Retry(
+ _("User does not belong to groups %s") % attribute_value, {
+ 'editable_no_editor': errmsg % attribute_value
+ })
return ''
- continue
if isinstance(attribute_value, unicode):
attribute_value = attribute_value.encode("utf8")
@@ -302,7 +307,7 @@ class QWeb(orm.AbstractModel):
for current_node in element.childNodes:
try:
g_inner.append(self.render_node(current_node, qwebcontext))
- except QWebException:
+ except (QWebException, openerp.http.Retry):
raise
except Exception:
template = qwebcontext.get('__template__')
diff --git a/openerp/addons/base/res/res_config.py b/openerp/addons/base/res/res_config.py
index 5bbd377f29d..767d9fcd705 100644
--- a/openerp/addons/base/res/res_config.py
+++ b/openerp/addons/base/res/res_config.py
@@ -221,10 +221,10 @@ class res_config_installer(osv.osv_memory, res_config_module_installation_mixin)
_install_if = {
('sale','crm'): ['sale_crm'],
- ('sale','project'): ['project_mrp'],
+ ('sale','project'): ['sale_service'],
}
- will install both ``sale_crm`` and ``project_mrp`` if all of
+ will install both ``sale_crm`` and ``sale_service`` if all of
``sale``, ``crm`` and ``project`` are selected for installation.
Hook methods
diff --git a/openerp/http.py b/openerp/http.py
index 98a6556570a..44df279bdb9 100644
--- a/openerp/http.py
+++ b/openerp/http.py
@@ -1037,6 +1037,15 @@ mimetypes.add_type('application/font-woff', '.woff')
mimetypes.add_type('application/vnd.ms-fontobject', '.eot')
mimetypes.add_type('application/x-font-ttf', '.ttf')
+class Retry(RuntimeError):
+ """ Exception raised during QWeb rendering to signal that the rendering
+ should be retried with the provided ``render_updates`` dict merged into
+ the previous rendering context
+ """
+ def __init__(self, name, render_updates=None):
+ super(Retry, self).__init__(name)
+ self.updates = render_updates or {}
+
class Response(werkzeug.wrappers.Response):
""" Response object passed through controller route chain.
@@ -1077,7 +1086,13 @@ class Response(werkzeug.wrappers.Response):
def render(self):
view_obj = request.registry["ir.ui.view"]
uid = self.uid or request.uid or openerp.SUPERUSER_ID
- return view_obj.render(request.cr, uid, self.template, self.qcontext, context=request.context)
+ while True:
+ try:
+ return view_obj.render(
+ request.cr, uid, self.template, self.qcontext,
+ context=request.context)
+ except Retry, e:
+ self.qcontext.update(e.updates)
def flatten(self):
self.response.append(self.render())
diff --git a/openerp/osv/orm.py b/openerp/osv/orm.py
index 1ada929482d..0a23dda61e3 100644
--- a/openerp/osv/orm.py
+++ b/openerp/osv/orm.py
@@ -1704,8 +1704,8 @@ class BaseModel(object):
:return: True if the current user is a member of one of the
given groups
"""
- return any([self.pool.get('res.users').has_group(cr, uid, group_ext_id)
- for group_ext_id in groups.split(',')])
+ return any(self.pool['res.users'].has_group(cr, uid, group_ext_id)
+ for group_ext_id in groups.split(','))
def _get_default_form_view(self, cr, user, context=None):
""" Generates a default single-line form view using all fields