diff --git a/addons/crm_configuration/crm_config.py b/addons/crm_configuration/crm_config.py
index 8091fe3d4a4..697a82d19c3 100644
--- a/addons/crm_configuration/crm_config.py
+++ b/addons/crm_configuration/crm_config.py
@@ -49,9 +49,14 @@ class crm_case_stage(osv.osv):
_name = "crm.case.stage"
_description = "Stage of case"
_rec_name = 'name'
+ _order = "sequence"
_columns = {
'name': fields.char('Stage Name', size=64, required=True, translate=True),
'section_id': fields.many2one('crm.case.section', 'Case Section'),
+ 'sequence': fields.integer('Sequence'),
+ }
+ _defaults = {
+ 'sequence': lambda *args: 1
}
crm_case_stage()
diff --git a/addons/crm_configuration/crm_config_view.xml b/addons/crm_configuration/crm_config_view.xml
index 93a74249d08..03b70146083 100644
--- a/addons/crm_configuration/crm_config_view.xml
+++ b/addons/crm_configuration/crm_config_view.xml
@@ -72,6 +72,7 @@
tree
+
@@ -85,6 +86,7 @@
diff --git a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
index d706a3eb25d..74968a2baec 100644
--- a/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
+++ b/addons/hr_timesheet_invoice/wizard/hr_timesheet_invoice_create.py
@@ -158,6 +158,7 @@ class invoice_create(wizard.interface):
pool.get('account.invoice.line').create(cr, uid, curr_line)
strids = ','.join(map(str, data['ids']))
cr.execute("update account_analytic_line set invoice_id=%%s WHERE account_id = %%s and id IN (%s)" % strids, (last_invoice,account.id,))
+ pool.get('account.invoice').button_reset_taxes(cr, uid, [last_invoice], context)
return {
'domain': "[('id','in', ["+','.join(map(str,invoices))+"])]",
diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
index 5c4f6def59f..1aa4673ce8a 100644
--- a/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
+++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet.py
@@ -437,23 +437,21 @@ class hr_attendance(osv.osv):
def _sheet(self, cursor, user, ids, name, args, context):
sheet_obj = self.pool.get('hr_timesheet_sheet.sheet')
-
- cursor.execute('SELECT a.id, COALESCE(MAX(s.id), 0) \
+ cursor.execute("SELECT a.id, COALESCE(MAX(s.id), 0) \
FROM hr_timesheet_sheet_sheet s \
LEFT JOIN (hr_attendance a \
LEFT JOIN hr_employee e \
ON (a.employee_id = e.id)) \
- ON (s.date_to >= a.name \
- AND s.date_from <= a.name \
+ ON (s.date_to >= to_date(to_char(a.name, 'YYYY-MM-dd'),'YYYY-MM-dd') \
+ AND s.date_from <= to_date(to_char(a.name, 'YYYY-MM-dd'),'YYYY-MM-dd') \
AND s.user_id = e.user_id) \
- WHERE a.id in (' + ','.join([str(x) for x in ids]) + ') \
- GROUP BY a.id')
+ WHERE a.id in (" + ",".join([str(x) for x in ids]) + ") \
+ GROUP BY a.id")
res = dict(cursor.fetchall())
sheet_names = {}
for sheet_id, name in sheet_obj.name_get(cursor, user, res.values(),
context=context):
sheet_names[sheet_id] = name
-
for line_id in {}.fromkeys(ids):
sheet_id = res.get(line_id, False)
if sheet_id:
@@ -527,11 +525,11 @@ class hr_attendance(osv.osv):
if 'sheet_id' in context:
ts = self.pool.get('hr_timesheet_sheet.sheet').browse(cr, uid, context['sheet_id'])
if ts.state not in ('draft', 'new'):
- raise osv.except_osv(_('Error !'), _('You can not modify an entry in a confirmed timesheet !'))
+ raise osv.except_osv(_('Error !'), _('You cannot modify an entry in a confirmed timesheet !'))
res = super(hr_attendance,self).create(cr, uid, vals, context=context)
if 'sheet_id' in context:
if context['sheet_id'] != self.browse(cr, uid, res, context=context).sheet_id.id:
- raise osv.except_osv(_('UserError'), _('You can not enter an attendance ' \
+ raise osv.except_osv(_('UserError'), _('You cannot enter an attendance ' \
'date outside the current timesheet dates!'))
return res
@@ -545,14 +543,14 @@ class hr_attendance(osv.osv):
if 'sheet_id' in context:
for attendance in self.browse(cr, uid, ids, context=context):
if context['sheet_id'] != attendance.sheet_id.id:
- raise osv.except_osv(_('UserError'), _('You can not enter an attendance ' \
+ raise osv.except_osv(_('UserError'), _('You cannot enter an attendance ' \
'date outside the current timesheet dates!'))
return res
def _check(self, cr, uid, ids):
for att in self.browse(cr, uid, ids):
if att.sheet_id and att.sheet_id.state not in ('draft', 'new'):
- raise osv.except_osv(_('Error !'), _('You can not modify an entry in a confirmed timesheet !'))
+ raise osv.except_osv(_('Error !'), _('You cannot modify an entry in a confirmed timesheet !'))
return True
hr_attendance()
diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py
index b785e9d9d7b..536cd0a5b09 100644
--- a/addons/project_timesheet/project_timesheet.py
+++ b/addons/project_timesheet/project_timesheet.py
@@ -80,7 +80,7 @@ class project_work(osv.osv):
if line_id in list_avail_ids:
obj = self.pool.get('hr.analytic.timesheet')
if 'name' in vals:
- vals_line['name'] = '%s: %s' % (task.name, vals['name'] or '/')
+ vals_line['name'] = '%s: %s' % (tools.ustr(task.name), tools.ustr(vals['name']) or '/')
if 'user_id' in vals:
vals_line['user_id'] = vals['user_id']
if 'date' in vals:
diff --git a/addons/sale/security/ir.model.access.csv b/addons/sale/security/ir.model.access.csv
index d1d440185f9..6f3e7ac5bf0 100644
--- a/addons/sale/security/ir.model.access.csv
+++ b/addons/sale/security/ir.model.access.csv
@@ -17,3 +17,5 @@
"access_sale_order_line_mrp_user","sale.order.line mrp worker","model_sale_order_line","mrp.group_mrp_user",1,0,0,0
"access_sale_order_stock_worker","sale.order stock worker","model_sale_order","stock.group_stock_user",1,0,0,0
"access_sale_order_line_stock_worker","sale.order.line stock worker","model_sale_order_line","stock.group_stock_user",1,0,0,0
+"access_sale_order_manager","sale.order.manager","model_sale_order","group_sale_manager",1,1,1,1
+"access_sale_order_line_manager","sale.order.line.manager","model_sale_order_line","group_sale_manager",1,1,1,1