diff --git a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml index a6e5e9ce3f3..6e84747e611 100644 --- a/addons/account_analytic_analysis/account_analytic_analysis_menu.xml +++ b/addons/account_analytic_analysis/account_analytic_analysis_menu.xml @@ -73,7 +73,7 @@ [('state','=','draft')] - + Open Analytic Accounts @@ -84,7 +84,7 @@ [('state','=','open')] - + Pending Analytic Accounts @@ -95,7 +95,7 @@ [('state','=','pending')] - + Simplified View Analytic Accounts @@ -106,7 +106,7 @@ [] - + diff --git a/addons/base_contact/__terp__.py b/addons/base_contact/__terp__.py index a267a7631c0..0923b6324de 100644 --- a/addons/base_contact/__terp__.py +++ b/addons/base_contact/__terp__.py @@ -22,7 +22,9 @@ """, "depends" : ["base"], "init_xml" : [], - "demo_xml" : ["base_contact_demo.xml"], + "demo_xml" : [ + "base_contact_demo.xml" + ], "update_xml" : [ "security/ir.model.access.csv", 'base_contact_view.xml' diff --git a/addons/base_contact/base_contact_demo.xml b/addons/base_contact/base_contact_demo.xml index 00104813896..09cca7acdb6 100644 --- a/addons/base_contact/base_contact_demo.xml +++ b/addons/base_contact/base_contact_demo.xml @@ -1,326 +1,326 @@ - + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -1 - - - - - - - - - - - + + + + + + + + + + + 5 - - - - - - + + + + + + 5 - - - - - - + + + + + + 1 - - + + diff --git a/addons/base_contact/base_contact_view.xml b/addons/base_contact/base_contact_view.xml index 0ae8fda9eda..c06f6323392 100644 --- a/addons/base_contact/base_contact_view.xml +++ b/addons/base_contact/base_contact_view.xml @@ -35,7 +35,7 @@ - +
@@ -103,7 +103,7 @@ - + @@ -222,7 +222,7 @@ form - + diff --git a/addons/crm/crm.py b/addons/crm/crm.py index 0dc516b38a9..761c330d41d 100644 --- a/addons/crm/crm.py +++ b/addons/crm/crm.py @@ -289,6 +289,23 @@ class crm_case_rule(osv.osv): case_obj = self.pool.get('crm.case') cases = case_obj.browse(cr, uid, ids2, context) return case_obj._action(cr, uid, cases, False, context=context) + + + def _check_mail(self, cr, uid, ids, context=None): + caseobj = self.pool.get('crm.case') + emptycase = orm.browse_null() + for rule in self.browse(cr, uid, ids): + if rule.act_mail_body: + try: + caseobj.format_mail(emptycase, rule.act_mail_body) + except (ValueError, KeyError, TypeError): + return False + return True + + _constraints = [ + (_check_mail, 'Error: The mail is not well formated', ['act_mail_body']), + ] + crm_case_rule() def _links_get(self, cr, uid, context={}): @@ -487,7 +504,7 @@ class crm_case(osv.osv): level -= 1 return True - def email_send(self, cr, uid, case, emails, body, context={}): + def format_mail(self, case, body): data = { 'case_id': case.id, 'case_subject': case.name, @@ -501,7 +518,10 @@ class crm_case(osv.osv): 'partner': (case.partner_id and case.partner_id.name) or '/', 'partner_email': (case.partner_address_id and case.partner_address_id.email) or '/', } - body = body % data + return body % data + + def email_send(self, cr, uid, case, emails, body, context={}): + body = self.format_mail(case, body) if case.user_id and case.user_id.address_id and case.user_id.address_id.email: emailfrom = case.user_id.address_id.email else: diff --git a/addons/document/ftpserver/abstracted_fs.py b/addons/document/ftpserver/abstracted_fs.py index 2ff2bdbb41c..bcd271ddeb3 100644 --- a/addons/document/ftpserver/abstracted_fs.py +++ b/addons/document/ftpserver/abstracted_fs.py @@ -9,7 +9,7 @@ import fnmatch import pooler import netsvc -import posix +import os from service import security class abstracted_fs: @@ -491,7 +491,7 @@ class abstracted_fs: r[7] = self.getmtime(node) r[8] = self.getmtime(node) r[9] = self.getmtime(node) - return posix.stat_result(r) + return os.stat_result(r) lstat = stat # --- Wrapper methods around os.path.* diff --git a/addons/hr/__terp__.py b/addons/hr/__terp__.py index 1e5c9ff7e12..993f7584c0f 100644 --- a/addons/hr/__terp__.py +++ b/addons/hr/__terp__.py @@ -40,7 +40,7 @@ Different reports are also provided, mainly for attendance statistics. """, - "depends" : ["base", "crm_configuration", "process"], + "depends" : ["base", "process"], "init_xml" : [], "demo_xml" : [ "hr_demo.xml", diff --git a/addons/hr/process/hr_process.xml b/addons/hr/process/hr_process.xml index bfb0ad21f2a..1afb90f3020 100644 --- a/addons/hr/process/hr_process.xml +++ b/addons/hr/process/hr_process.xml @@ -17,8 +17,6 @@ --> - - @@ -81,4 +79,4 @@ - \ No newline at end of file + diff --git a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml index 00b01f46ed2..3ce0ae29976 100644 --- a/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml +++ b/addons/hr_timesheet_sheet/hr_timesheet_sheet_view.xml @@ -25,7 +25,7 @@ hr_timesheet_sheet.sheet.account form - + @@ -149,17 +149,6 @@ - @@ -201,14 +190,13 @@ - + - + - - + diff --git a/addons/product/product_view.xml b/addons/product/product_view.xml index 30b07fe8f74..62f7b7cd0a1 100644 --- a/addons/product/product_view.xml +++ b/addons/product/product_view.xml @@ -1,10 +1,8 @@ - - product.product.tree product.product diff --git a/addons/profile_service/__terp__.py b/addons/profile_service/__terp__.py index 08021bca61c..680b8ed8d9f 100644 --- a/addons/profile_service/__terp__.py +++ b/addons/profile_service/__terp__.py @@ -48,5 +48,3 @@ "installable":True, } -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/project/project.py b/addons/project/project.py index 3bb08ed8a89..9cca763f8dc 100644 --- a/addons/project/project.py +++ b/addons/project/project.py @@ -120,8 +120,8 @@ class project(osv.osv): 'tasks': fields.one2many('project.task', 'project_id', "Project tasks"), 'parent_id': fields.many2one('project.project', 'Parent Project'), 'child_id': fields.one2many('project.project', 'parent_id', 'Subproject'), - 'planned_hours': fields.function(_calc_planned, method=True, string='Planned hours'), - 'effective_hours': fields.function(_calc_effective, method=True, string='Hours spent'), + 'planned_hours': fields.function(_calc_planned, method=True, string='Planned hours', help="Sum of planned hours of all tasks related to this project."), + 'effective_hours': fields.function(_calc_effective, method=True, string='Hours spent', help="Sum of spent hours of all tasks related to this project."), 'progress_rate': fields.function(_progress_rate, method=True, string='Progress', type='float', help="Percent of tasks closed according to the total of tasks todo."), 'date_start': fields.date('Starting Date'), 'date_end': fields.date('Expected End'), diff --git a/addons/project_timesheet/project_timesheet.py b/addons/project_timesheet/project_timesheet.py index 0b4720e4254..5491bde1c62 100644 --- a/addons/project_timesheet/project_timesheet.py +++ b/addons/project_timesheet/project_timesheet.py @@ -70,7 +70,7 @@ class project_project(osv.osv): def name_get(self, cr, user, ids, context=None): result = [] for project in self.browse(cr, user, ids, context): - if project.category_id: + if project.category_id and projet.category_id.code: result.append((project.id, '['+(project.category_id.code or '')+'] '+project.name)) else: result.append((project.id, '[?] '+project.name))