diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py
index 82ee32f70..36504c54b 100644
--- a/scheduler_error_mailer/__init__.py
+++ b/scheduler_error_mailer/__init__.py
@@ -1,9 +1,10 @@
# -*- coding: utf-8 -*-
##############################################################################
#
-# Scheduler error mailer module for OpenERP
-# Copyright (C) 2012 Akretion
+# Scheduler Error Mailer module for OpenERP
+# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
# @author: Sébastien Beau
+# @author Alexis de Lattre
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
@@ -20,6 +21,4 @@
#
##############################################################################
-import ir_cron
-# import test_fail_scheduler
-
+from . import ir_cron
diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py
index c477c4e64..b1cb4dfe6 100644
--- a/scheduler_error_mailer/__openerp__.py
+++ b/scheduler_error_mailer/__openerp__.py
@@ -1,8 +1,8 @@
# -*- encoding: utf-8 -*-
##############################################################################
#
-# Scheduler error mailer module for OpenERP
-# Copyright (C) 2012 Akretion
+# Scheduler Error Mailer module for OpenERP
+# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
# @author: Sébastien Beau
# @author David Beal
# @author Alexis de Lattre
@@ -24,18 +24,25 @@
{
- 'name': 'Scheduler error mailer',
+ 'name': 'Scheduler Error Mailer',
+ 'summary': 'Send an e-mail when a scheduler fails',
'version': '1.0',
'category': 'Extra Tools',
'license': 'AGPL-3',
- 'description': """This module adds the possibility to send an e-mail when a scheduler raises an error""",
+ 'description': """
+Scheduler Error Mailer
+======================
+
+This module adds the possibility to send an e-mail when a scheduler raises an error.""",
'author': 'Akretion',
'website': 'http://www.akretion.com/',
'depends': ['email_template'],
- 'init_xml': [],
- 'update_xml': ['ir_cron.xml', 'ir_cron_email_tpl.xml'],
- 'demo_xml': [],
+ 'data': [
+ 'ir_cron.xml',
+ 'ir_cron_email_tpl.xml',
+ ],
+ 'demo': ['ir_cron_demo.xml'],
+ 'images': ['images/scheduler_error_mailer.jpg'],
'installable': True,
'active': False,
}
-
diff --git a/scheduler_error_mailer/images/scheduler_error_mailer.jpg b/scheduler_error_mailer/images/scheduler_error_mailer.jpg
new file mode 100644
index 000000000..a8a3af766
Binary files /dev/null and b/scheduler_error_mailer/images/scheduler_error_mailer.jpg differ
diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py
index 8782eb0b7..770a78fbb 100644
--- a/scheduler_error_mailer/ir_cron.py
+++ b/scheduler_error_mailer/ir_cron.py
@@ -1,8 +1,8 @@
# -*- encoding: utf-8 -*-
#################################################################################
#
-# Scheduler error mailer module for OpenERP
-# Copyright (C) 2012 Akretion
+# Scheduler Error Mailer module for OpenERP
+# Copyright (C) 2012-2013 Akretion (http://www.akretion.com/)
# @author: Sébastien Beau
# @author David Beal
# @author Alexis de Lattre
@@ -22,28 +22,45 @@
#
##############################################################################
-from osv import osv, fields
-from datetime import datetime
+from openerp.osv import orm, fields
+from openerp.tools.translate import _
+import logging
+logger = logging.getLogger(__name__)
-class ir_cron(osv.osv):
+class ir_cron(orm.Model):
_inherit = "ir.cron"
_columns = {
- 'email_template' : fields.many2one('email.template', 'E-mail template'),
+ 'email_template': fields.many2one('email.template',
+ 'Error E-mail Template',
+ help="Select the email template that will be sent when this scheduler fails."),
}
- def _handle_callback_exception(self, cr, uid, model, func, args, job_id, job_exception):
+ def _handle_callback_exception(self, cr, uid, model_name, method_name, args, job_id, job_exception):
- res = super(ir_cron, self)._handle_callback_exception(cr, uid, model, func, args, job_id, job_exception)
+ res = super(ir_cron, self)._handle_callback_exception(cr, uid,
+ model_name, method_name, args, job_id, job_exception)
my_cron = self.browse(cr, uid, job_id)
- if my_cron.email_template.id:
- # we put the job_exception in context to be able to get it inside the mail template
+ if my_cron.email_template:
+ # we put the job_exception in context to be able to print it inside
+ # the email template
context = {'job_exception': job_exception}
- id_mail_messsage = self.pool.get('email.template').send_mail(cr, uid,
- my_cron.email_template.id, my_cron.id, force_send=True, context=context)
+ logger.debug("Sending scheduler error email with context=%s" % context)
+ self.pool['email.template'].send_mail(cr, uid,
+ my_cron.email_template.id, my_cron.id, force_send=True,
+ context=context)
return res
+
+
+class res_users(orm.Model):
+ _inherit = 'res.users'
+
+ def test_scheduler_failure(self, cr, uid, context=None):
+ """This function is used to test and debug this module"""
+ raise orm.except_orm(_('Error :'), _("Task failure with UID = %d." % uid))
+
diff --git a/scheduler_error_mailer/ir_cron.xml b/scheduler_error_mailer/ir_cron.xml
index da3e844d8..ee1bcfd6d 100644
--- a/scheduler_error_mailer/ir_cron.xml
+++ b/scheduler_error_mailer/ir_cron.xml
@@ -1,24 +1,24 @@
-
-
- ir.cron.error.mailer.form
- ir.cron
-
- form
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ ir.cron.error.mailer.form
+ ir.cron
+
+
+
+
+
+
+
+
+
+
diff --git a/scheduler_error_mailer/ir_cron_demo.xml b/scheduler_error_mailer/ir_cron_demo.xml
new file mode 100644
index 000000000..d8453b4bf
--- /dev/null
+++ b/scheduler_error_mailer/ir_cron_demo.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+ Test Scheduler Error Mailer
+
+
+ 1
+ hours
+ -1
+
+
+
+
+
+
+
+
+
diff --git a/scheduler_error_mailer/ir_cron_email_tpl.xml b/scheduler_error_mailer/ir_cron_email_tpl.xml
index 5406d9aaf..8b4a0a7e0 100644
--- a/scheduler_error_mailer/ir_cron_email_tpl.xml
+++ b/scheduler_error_mailer/ir_cron_email_tpl.xml
@@ -1,32 +1,50 @@
-
-
+
-
- Scheduler error
- ${object.user_id.user_email or ''}
- [DB ${object._cr.dbname}] Scheduler '${object.name or ''}' FAILED
- ${object.user_id.user_email or ''}
-
-
-
+
+ Scheduler Error
+ ${object.user_id.user_email or ''}
+ ${object.user_id.user_email or ''}
+ Scheduler '${object.name or ''}' FAILED
+
+
+
-${hasattr(context.get('ctx').get('job_exception'), 'value') and context.get('ctx').get('job_exception').value or context.get('ctx').get('job_exception')}
+OpenERP tried to run the scheduler ${object.name or ''} but it failed. Here is the error message :
-You may check the logs of OpenERP to get more information about this failure.
+
+${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}
+
-The next action on this task is scheduled on ${object.nextcall or ''}.
+You may check the logs of the OpenERP server to get more information about this failure.
---
+Properties of the scheduler ${object.name or ''} :
+
+- Model : ${object.model or ''}
+- Method : ${object.function or ''}
+- Arguments : ${object.args or ''}
+- Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
+- Number of calls : ${object.numbercall or '0'}
+- Repeat missed : ${object.doall}
+- User : ${object.user_id.name or ''}
+
+
+
+--
Automatic e-mail sent by OpenERP. Do not reply.
- ]]>
-
-
+
+
+ ]]>
+
+
+
+
diff --git a/scheduler_error_mailer/static/src/img/icon.png b/scheduler_error_mailer/static/src/img/icon.png
new file mode 100644
index 000000000..6b22abf97
Binary files /dev/null and b/scheduler_error_mailer/static/src/img/icon.png differ
diff --git a/scheduler_error_mailer/test_fail_scheduler.py b/scheduler_error_mailer/test_fail_scheduler.py
deleted file mode 100644
index 937f88e6e..000000000
--- a/scheduler_error_mailer/test_fail_scheduler.py
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- coding: utf-8 -*-
-##############################################################################
-#
-# Scheduler error mailer module for OpenERP
-# Copyright (C) 2012 Akretion
-# @author David Beal
-# @author Alexis de Lattre
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU Affero General Public License as
-# published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU Affero General Public License for more details.
-#
-# You should have received a copy of the GNU Affero General Public License
-# along with this program. If not, see .
-#
-##############################################################################
-
-from osv import fields, osv
-from tools.translate import _
-
-class test_fail_scheduler(osv.osv_memory):
- _name = "test.fail.scheduler"
- _description = "Test scheduler failure"
-
- def test_fail(self, cr, uid, context=None):
- """ This a test fail, only for debugging purpose
- DO NOT UNCOMMENT IMPORT IN init.py IN PRODUCTION ENVIRONNEMENT
- """
-
- raise osv.except_osv(_('Error :'), _("task failure"))
- # context['tytytyty']
-
-test_fail_scheduler()