From 55cd6a63797278ca200e455ac3a97b50622cca75 Mon Sep 17 00:00:00 2001 From: sebastien beau Date: Thu, 24 Feb 2011 16:51:23 +0100 Subject: [PATCH 01/16] [INIT] intial import --- scheduler_error_mailer/__init__.py | 23 +++++++++++ scheduler_error_mailer/__openerp__.py | 38 ++++++++++++++++++ scheduler_error_mailer/ir_cron.py | 55 +++++++++++++++++++++++++++ scheduler_error_mailer/ir_cron.xml | 28 ++++++++++++++ 4 files changed, 144 insertions(+) create mode 100644 scheduler_error_mailer/__init__.py create mode 100644 scheduler_error_mailer/__openerp__.py create mode 100644 scheduler_error_mailer/ir_cron.py create mode 100644 scheduler_error_mailer/ir_cron.xml diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py new file mode 100644 index 000000000..78a455ba8 --- /dev/null +++ b/scheduler_error_mailer/__init__.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Asterisk Click2Dial module for OpenERP +# Copyright (C) 2010 Sébastien BEAU +# +# 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 . +# +############################################################################## + +import ir_cron + diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py new file mode 100644 index 000000000..aead8b9fd --- /dev/null +++ b/scheduler_error_mailer/__openerp__.py @@ -0,0 +1,38 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# Model module for OpenERP +# Copyright (C) 2010 Sébastien BEAU +# +# 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 . +# +############################################################################## + + +{ + 'name': 'Scheduler Error Mailer', + 'version': '0.1', + 'category': 'Generic Modules/Others', + 'license': 'AGPL-3', + 'description': """This module dfkdsjfkdsjkfjksadd the posibility to send a email when a scheduler raise an error""", + 'author': 'Akretion', + 'website': 'http://www.akretion.com/', + 'depends': ['poweremail'], + 'init_xml': [], + 'update_xml': ['ir_cron.xml'], + 'demo_xml': [], + 'installable': True, + 'active': False, +} + diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py new file mode 100644 index 000000000..510f11c8f --- /dev/null +++ b/scheduler_error_mailer/ir_cron.py @@ -0,0 +1,55 @@ +# -*- encoding: utf-8 -*- +################################################################################# +# # +# Model module for OpenERP # +# Copyright (C) 2010 Sébastien BEAU # +# # +# 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 osv, fields +import netsvc + + +class ir_cron(osv.osv, netsvc.Agent): + _inherit = "ir.cron" + + _columns = { + 'email_to' : fields.char('TO', size=256, help="If an error occure with this scheduler an email will be send"), + 'message' : fields.text('Message', help="If an error occure with this scheduler this message will be send via email"), + 'send_email' : fields.boolean('Active'), + 'email_account' : fields.many2one('poweremail.core_accounts', 'FROM') + } + + def _handle_callback_exception(self, cr, uid, model, func, args, job_id, job_exception): + res = super(ir_cron, self)._handle_callback_exception(cr, uid, model, func, args, job_id, job_exception) + job = self.read(cr, uid, job_id, ['send_email', 'message', 'email_TO', 'email_account', 'name']) + #TODO USE POWEREMAIL TEMPLATE + if job['send_email']: + addresses = {'To' : job['email_TO']} + mail_obj = self.pool.get('poweremail.mailbox') + id = mail_obj.create(cr, uid, { + 'pem_to' : job['email_TO'], + 'pem_subject' : "OPENERP : error when excecuting scheduler " + job["name"], + 'pem_body_text' : job['message'], + 'pem_account_id' : job['email_account'][0], + 'mail_type' : 'text/plain', + 'folder' : 'outbox', + 'state' :'na', + }) + mail_obj.send_this_mail(cr, uid, [id]) + return res +ir_cron() + diff --git a/scheduler_error_mailer/ir_cron.xml b/scheduler_error_mailer/ir_cron.xml new file mode 100644 index 000000000..33a6d3dfe --- /dev/null +++ b/scheduler_error_mailer/ir_cron.xml @@ -0,0 +1,28 @@ + + + + + + + ir.cron.error.mailer.form + ir.cron + + form + + + + + + + + + + + + + + From c8b32713848716e8ac3bf3bfb62333265cacd231 Mon Sep 17 00:00:00 2001 From: David BEAL Date: Mon, 4 Jun 2012 13:13:04 +0200 Subject: [PATCH 02/16] Now uses an email template instead of a simple mail Add a default e-mail template Add the code we used to test the failure of scheduler (the import directive is commented) --- scheduler_error_mailer/__init__.py | 6 +- scheduler_error_mailer/__openerp__.py | 19 +++-- scheduler_error_mailer/ir_cron.py | 76 +++++++++---------- scheduler_error_mailer/ir_cron.xml | 8 +- scheduler_error_mailer/ir_cron_email_tpl.xml | 32 ++++++++ scheduler_error_mailer/test_fail_scheduler.py | 39 ++++++++++ 6 files changed, 123 insertions(+), 57 deletions(-) create mode 100644 scheduler_error_mailer/ir_cron_email_tpl.xml create mode 100644 scheduler_error_mailer/test_fail_scheduler.py diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py index 78a455ba8..82ee32f70 100644 --- a/scheduler_error_mailer/__init__.py +++ b/scheduler_error_mailer/__init__.py @@ -1,8 +1,9 @@ # -*- coding: utf-8 -*- ############################################################################## # -# Asterisk Click2Dial module for OpenERP -# Copyright (C) 2010 Sébastien BEAU +# Scheduler error mailer module for OpenERP +# Copyright (C) 2012 Akretion +# @author: Sébastien Beau # # 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,4 +21,5 @@ ############################################################################## import ir_cron +# import test_fail_scheduler diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py index aead8b9fd..c477c4e64 100644 --- a/scheduler_error_mailer/__openerp__.py +++ b/scheduler_error_mailer/__openerp__.py @@ -1,8 +1,11 @@ # -*- encoding: utf-8 -*- ############################################################################## # -# Model module for OpenERP -# Copyright (C) 2010 Sébastien BEAU +# Scheduler error mailer module for OpenERP +# Copyright (C) 2012 Akretion +# @author: Sébastien Beau +# @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 @@ -21,16 +24,16 @@ { - 'name': 'Scheduler Error Mailer', - 'version': '0.1', - 'category': 'Generic Modules/Others', + 'name': 'Scheduler error mailer', + 'version': '1.0', + 'category': 'Extra Tools', 'license': 'AGPL-3', - 'description': """This module dfkdsjfkdsjkfjksadd the posibility to send a email when a scheduler raise an error""", + 'description': """This module adds the possibility to send an e-mail when a scheduler raises an error""", 'author': 'Akretion', 'website': 'http://www.akretion.com/', - 'depends': ['poweremail'], + 'depends': ['email_template'], 'init_xml': [], - 'update_xml': ['ir_cron.xml'], + 'update_xml': ['ir_cron.xml', 'ir_cron_email_tpl.xml'], 'demo_xml': [], 'installable': True, 'active': False, diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py index 510f11c8f..8782eb0b7 100644 --- a/scheduler_error_mailer/ir_cron.py +++ b/scheduler_error_mailer/ir_cron.py @@ -1,55 +1,49 @@ # -*- encoding: utf-8 -*- ################################################################################# -# # -# Model module for OpenERP # -# Copyright (C) 2010 Sébastien BEAU # -# # -# 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 . # -# # -################################################################################# +# +# Scheduler error mailer module for OpenERP +# Copyright (C) 2012 Akretion +# @author: Sébastien Beau +# @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 osv, fields -import netsvc +from datetime import datetime -class ir_cron(osv.osv, netsvc.Agent): +class ir_cron(osv.osv): _inherit = "ir.cron" _columns = { - 'email_to' : fields.char('TO', size=256, help="If an error occure with this scheduler an email will be send"), - 'message' : fields.text('Message', help="If an error occure with this scheduler this message will be send via email"), - 'send_email' : fields.boolean('Active'), - 'email_account' : fields.many2one('poweremail.core_accounts', 'FROM') + 'email_template' : fields.many2one('email.template', 'E-mail template'), } + def _handle_callback_exception(self, cr, uid, model, func, args, job_id, job_exception): + res = super(ir_cron, self)._handle_callback_exception(cr, uid, model, func, args, job_id, job_exception) - job = self.read(cr, uid, job_id, ['send_email', 'message', 'email_TO', 'email_account', 'name']) - #TODO USE POWEREMAIL TEMPLATE - if job['send_email']: - addresses = {'To' : job['email_TO']} - mail_obj = self.pool.get('poweremail.mailbox') - id = mail_obj.create(cr, uid, { - 'pem_to' : job['email_TO'], - 'pem_subject' : "OPENERP : error when excecuting scheduler " + job["name"], - 'pem_body_text' : job['message'], - 'pem_account_id' : job['email_account'][0], - 'mail_type' : 'text/plain', - 'folder' : 'outbox', - 'state' :'na', - }) - mail_obj.send_this_mail(cr, uid, [id]) - return res -ir_cron() + 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 + 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) + + return res diff --git a/scheduler_error_mailer/ir_cron.xml b/scheduler_error_mailer/ir_cron.xml index 33a6d3dfe..da3e844d8 100644 --- a/scheduler_error_mailer/ir_cron.xml +++ b/scheduler_error_mailer/ir_cron.xml @@ -1,7 +1,6 @@ @@ -16,10 +15,7 @@ - - - - + diff --git a/scheduler_error_mailer/ir_cron_email_tpl.xml b/scheduler_error_mailer/ir_cron_email_tpl.xml new file mode 100644 index 000000000..5406d9aaf --- /dev/null +++ b/scheduler_error_mailer/ir_cron_email_tpl.xml @@ -0,0 +1,32 @@ + + + + + + + + + Scheduler error + ${object.user_id.user_email or ''} + [DB ${object._cr.dbname}] Scheduler '${object.name or ''}' FAILED + ${object.user_id.user_email or ''} + + + + + + diff --git a/scheduler_error_mailer/test_fail_scheduler.py b/scheduler_error_mailer/test_fail_scheduler.py new file mode 100644 index 000000000..937f88e6e --- /dev/null +++ b/scheduler_error_mailer/test_fail_scheduler.py @@ -0,0 +1,39 @@ +# -*- 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() From e3cab38e7d0cef4ea467f112524d63657d86ee91 Mon Sep 17 00:00:00 2001 From: Alexis de Lattre Date: Sun, 29 Sep 2013 23:54:55 +0200 Subject: [PATCH 03/16] Port to OpenERP 7.0. Add logo and screenshot. Add demo scheduler and test/debug function. --- scheduler_error_mailer/__init__.py | 9 ++- scheduler_error_mailer/__openerp__.py | 23 +++--- .../images/scheduler_error_mailer.jpg | Bin 0 -> 29784 bytes scheduler_error_mailer/ir_cron.py | 47 ++++++++---- scheduler_error_mailer/ir_cron.xml | 34 ++++----- scheduler_error_mailer/ir_cron_demo.xml | 27 +++++++ scheduler_error_mailer/ir_cron_email_tpl.xml | 68 +++++++++++------- .../static/src/img/icon.png | Bin 0 -> 5032 bytes scheduler_error_mailer/test_fail_scheduler.py | 39 ---------- 9 files changed, 140 insertions(+), 107 deletions(-) create mode 100644 scheduler_error_mailer/images/scheduler_error_mailer.jpg create mode 100644 scheduler_error_mailer/ir_cron_demo.xml create mode 100644 scheduler_error_mailer/static/src/img/icon.png delete mode 100644 scheduler_error_mailer/test_fail_scheduler.py 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 0000000000000000000000000000000000000000..a8a3af766a54c209723d9be24d05c1302ad01bbb GIT binary patch literal 29784 zcmeEu1z254n&`RM#YqSnG)QoQOM-^r2^QQfxVv8@5Fj{#5Zv8^OMu|+PH?!m2Df*+ zdwM46H?uqYX7_#X?e^s>s?I4n_4{9c)j4-lcZ*__y#N3IOgt2>w3kt_>iA z%@Yyy>ks(L4+IB~fQSS}MnOe`HK@D?z=7c5;Sk^v5fKnztvzA&0K$Dl>_@D^NDt)o zz!bJPY(9}`$du2^T5uJH52)Dn?R-&C@$d-CqXIFR6$mrPk#N^cU%+m78>e@PVV{_~9==l4|>Dl?kHd4$h5K+6iRl5 z16+N(VN^USjwR~DUqJg6vVRUR-~S`X{tDRN;Fgybiq!>iL6 zbHid%4TtSpQ(%PfRLP=GiFq%GpjajayecUx-I!I|AB?w3#!tMw&N68vl63Xs*|Tz z?*6q^!43$Ffy77zINCfWo`! zD@jb6szN_o`N}}1d>r~1t1JjEvqnuPGSSbkd5|>GF&{OEG-lZ_SUH|Eilw;IR+rdY za=+6Jm)d%}M)SMHI1!UF+EqclOO&X)3d$oJfC`$8(zSTfZtwQ?Q1XfYIF*?0hJ*qN zJSzLeI77jwU5Z1F*qyG9HJrLcT!d08()pB7YH8W+8tsk!W2OClgVDk_^`Epd0^j%o zl7#Ty5+pa~5v5hNqbKg%mDOS6h9Ucb3n(6kz9NW=P`<;?(f9!t4XtzKZN-}U$Vxm9 zR<_8LIKbcCm$%b8HBDjC=H+*3bN{-^fMu5FQa)oWEkH=fN)zW}vw#T5@+*ToK=Z*J zAdIW4CDgU^I3ypNH~@i;#LnG|GchJBmBM2<-us(SZWQ4P@+zW!GZIZIxM@jYJtp88 zCq{o~1O>>MBZ?lB=(w8F3Mhy(Lpha^J3zAj5LLT{_~n9;2FG)#=?ph08B?GpGkG_(sL)ZZ@ML0_Oxu$H|4RS)V@m7Z ziioF|t6>aXMfy$kL(!TNvHU`Fc(>yp6%~0g&d`kkblVVUlMF+4)#&cKcDgKc#p6j? zd|_cK*VT|xXmZYMJXd9#n}9hpiPywRo61v)PL|s0K&b&m3-T3!7%IrJ1$H}5qUe+! z^WeCBG|ri~%V}MaG?{F`{zAmY2ef*BfVEk`4>$Fazqs*`L9wdQH6E+9qmR;_^!P0h z!Q08(nM?YiHEmNZgL8SLo8u0^NcEM>)Wa-&6dKe^@6Q8VVcTkmf1Q9|MvteBJup31 zLkmj367f20p=7j=9^^YaU4D1tIf=FXonMfXq-}YAMlJYR;83kZhgvC0Gf8(RTtigP zA%3&(*RAD~@k+6(0NOXmhH@a}fjRos)f9ziiZf3IQi@!{UxiUuR6W$_vZSnK&*vKM zHW*t>T$#jy==gV9%Ir31m_FQmtRX#>@cKhLw&XqK=g4F{OwFsL?CoY-5B;k?8F22d zrt?r}4YWP*Nd$n^Cd{b*M90^uC~_RGQ@Acnf%pjl_}g|I$cIab1Aiq@4RF=bp#X%#{SdcFwfJKa<-I%L#Sl~R zn{kJfd#3bqRQSqU#9@9W2&+DGt6?tu^x3J*e8S5~ddv>%^e$JnsaiMH` z$ed%{Xz@}(T}E?{rhty7mg){zsc;~i-I~eY#CvZu@zMEFCQA7P{|?F^m7xu5cfoWC zX=AyI7f}m@2gasjj+}LN;yjkK5Onlg&PrQT<7F}ubFTQ^HsARk9Ij#4EL>qZX>a6i z!U4~V0YqR>yq~b-@z{FQk_T_5hIV(6>BuKu*U;)2sYC>0ULF$uOH3Q{v;#(!SoN?1 z!)02F75ZUyrmZ>7&%|qz#NKX4U>PXYdpWC4yVSB~LXN`1xH;D38#Co0+9Jz z2s)4R-7Ms%r#`$;?F&&&PZLFVX@2bshTooS1Wb%VM(xE+K+_onp^m)CmI7Q6iBW|;C@19iP_7xoIgH{hEf8J5&k_}g zR>Y4yu6}75f^ONF%_6=e-llFn2ScYKc>Zi<)CV)gq;!KVz4ixe9M$?Rz< zCXr^WX$cmOKCXKJ2^K$Cb4=waX^gYuX~KJgd5hI5353fCWbh$UiBZVNx(TCF9{G!EWylbQF%%w@c=V49nn$uw}rbxH$79!^PB5Y7XZ!lI%4BdQq-afDm|2cOvYUXVs`m z7)U${Blu`xo2#T5?TrL10%%mO-mrQbW zwW_+xU01JKcbNH^LcB)b97_eIPPFkBF- zydEiZOpq-%V?kM*Bhz!z7PGO-B!xC=6379IAa8!U+6)d*7$4=*QXa$v<1tpH)k6LH zY(4Kl-|m3xz|--9P^_1A11W=+O9H>K9&TV`L#_gTfC@!uiPj>M} zbh$OEV|x*q5?70zqLb~z8pb!i*ArBlR!S_wU7EDnNjHYA5j3~(kbudJgDd0Ng$M-? zf;XPG?g;9V86Dq_P#){t7_rtr`#f4@yQ_lv(cq@!reGDT+ErUNq4CSQeQ0f`_W59= zI!vetBRuF*tCAik&)9JmMt%D9P@Kk?pO7AW= zUv^*FJm`Gov6ukD1y59BQ+Jy5TaJRx~Xw=M^G z_7w_kpeV3`)A~)|D%0MZ)auEWVLx?c?72G7>0pD@HT&LXu%e1$HkV{k@FS$G55C>$=VU&Ld7&qM@ zK53$boCgbjUbyxBxbQ*nS`>h>b$-+IKFo=f-tQs1rAT*-?Qw^E@6M4lWR3aoSa_xn znLgtxQx{qU=)jsHm(LH{-hSdh!SQ7&L+E~{6h!^u4sbz7cgTbM8>5EroZSJbS!Zil zcffriyw750C8zFpz>vb#(Yre!Fyo5<4%ndcyb!qq+T;)m|6OQE1T;PBvex%zV=378 z;NZlEf*q4uYRi4?SPVt&z(Nw>%OS+X|9Xb;JzAVqljR{~&ENs2kw3Vhg&Q#GSA6JE zb5SYX|LwF;$ao5e3M-G}M+AE_8HJ4N{D=?nA5oEt2JDrQz=h{x{if12`Hi9^?i?_s-|XiNYSCN;O?Wf^zu_Hl;c@j87^`lA#4BSWQ@Qyw6^NE#>I zL_rAwEZ0o-oLvZeJ!D*zZH~S4Q+lXs{#zj0SC}fo-LIJ>KVggOzC`!q#)nU%2-Q`E z5gZZjx1?ft49E9Z)%YHMvUIfNm5;s8XCZXjE+=_d7TMUyu`X( zyU{n#?aw?KUS>}Il6BRRrF+d z^XZ|)rr?J?L-efSE@1HnT$K4Fu3o%7?C{b) zU#^3jCg|6lHBn(Tg-ko+pB_!c#XnZ8pnIf%+~v6nhXPL9l+c$hnd^3UP-p06aQQx2 z11GVHwcmY1a!y!t&p!Wi}5LI}QC zG7Y0I_WFxXq;5WQzPs@tyTLo*y3BEzt|=w^egOHd`2jt?rHu0qxbeWc!HaSBG*YW# ze$sivhjoKbqPZZ1!+b)t>1dF>`Slwq&)d;gHibQDL8xiM2+_Xw5dg`t%)^S(d2v0? z`a#Dv#%M_^T>Vh#djxyBwk?Z>hw|E{N4>dBH!+KqwMT6V`0x89aj=CLBJ5Cj$is4Y zbA)v_J#VC=mc4Z-4|`Nt!lRK^A$E z|4{f22;%>EVrbz}fpB$h}o#>Oy1v&QX&gAd@<;Vj(9iFuCaGmYZvgw+d(iXlKs*Ehf zLLXfz*w`dnHe6Rs`IO#USSugsCN`4d=#)464SkExRT7~Y1SY>8b5%e!7tlwZ^g7`REd7=L zMxpe@L`Lw7j1L}_3h04)$h?#`B}wlPf23H3ka#3vVL*~!6~46L;2M*GCli=u;8?C0 z2S4iIeLZI*gXBK+FyXUSiv=jzWCh&@tyIqI6NiX1V%KAoj0n0G+7|E2#c}uCM-A03 zG;&?7hu|`BS^5OB#qI<$4n6I)Gg_C{!TYu_TU-HGKCyeia5|^g$ zbhPlWrQH90w~+I-oO_!$XUd06Y^~MM%$Zbd2~qMgDgdA?@rp6#RJa^5k4BsQmSCEu z-_tIg0f+qP!~MtsH(z8VZ_42(YhxATHJ{`p8;5ofg=gB}6r&U)*c6YRJ}fik`>4GC zq$e%utvG^jY6J>2F+!GLF}z6FG^aA_!%$JTdC>G~l%2Q7?wJ1|VC$3Ym$$9F6h!X- zC`6A^E}tJDAnWmFXEGiSD`zsQElVa?S>O$xUZItF?k!zP6(LEmh-ItJowB8JTi1C9 zq!o$0F=7%J>3B^Q-8b?XcXkqBW^+LW20e^J#y&#++6qwXx4jH+dqv-=9?-)26d#TM zYZW%LZ3pOE*m?6Ae_cW#_STGstB9*zn%InujW8Ho)>87g>D)Ybb~{2tgS|gzP69`Z z-ioEfZVR~u{)>=6YNCS5I%zDw?5pt|P8U*hv=7OgmW3*O#Ks8sutZ)zxrX$@LA@-xmLPaSL&ShrX zDaK@-nQE(g_`1>*UMYVLuyIk?|!X zc7`++nUXTzw+-gPYQT&g_3iWIRC<3o03N{fMh)(Q-JbpJwzo*(9WYjX;~0Ghh?pIJ zlU6DVe_bagfH_xQD&UpGAQ>U!d@mF4gfg$+4Ke33_6{g6hiq6XH*5mU`rwJMw4qf# zGIvWyM?3PTNJ|7XSIomp7RKlAL6I9^x3p!Q3xX_I7xU|aMpMEL!l2H)Vzjoz^8lSQ z{EOE$g%96d`*B#MY{9gV2uEzq9q`s!e%xfS*+&mXFx`x zi*lioYel)HuEO2AY)a$BPT~3tMON?;d-sMZTjb}(FBFZihrPcJHQvz18FDmvVs(PS zBg@;AB>gE<(;Etp+UykrX?b_X-E=Yxi7WtrRZcg}^i!U&R91WV8nm21jsyfXlLf!tz)JhoCjo?QQRim6(V!N=ii^j- zERdwvN0p%FS|9HfCKRfxL>9tJkP6?}9gzI~BKY?l$XPQJJf2^;y{^6k@Wo?tVa}pE z71isU{zoQ4mUd-$Xryw-_RzLi= z%$vHOFt_24r1{8Ul>P@AXb#7}{~2rlpA9DZM;`qP8h^m%A6WLkh9_Os!>`X^EZ@X* z2egk5{!9(Jiyv!;f0U4aM}S_dYcwb{j7pHIpl0Up0&o(5VRB}&-2VwHciFKl34M{WYfjGrLL0v&;WJ$nW`|gZ&`8*z2Dt7|Y7JY{U(G`8ylAe-;;{ z-CB4!mq3yk3dzeQ?;G0o$?Ma1w>MO~QGJV{@g z#8DUv3gvlYzx2P=J_BFpc!uoiJLEhc@-s=%S!Gtt2Yh6~hHoTEKT)k5<$XYu%l~D2 zeupmkXHv7YQ#|8f%MakC@2xSeB_IzOeqVC2i*<7;c&#M(2e9Qjb5R8%4UqqY!&Pn6vV=(fJ}x6Dn@3c<4tSX52%4)|Gs2>&)w0ovf&DDnAK z19Dx^23W9f_~)S!YSVw$aj6(EhXJOIr<<}KLwX@Q3nTFwWH%pg`)}y{?|@%#cvBBv zSl=XE%GY04!|v0Q+`@GIB&D20SKQw-oPTYoC}8|shjqwrBLlB~ z>q`6Ww+=B_pZ?O*HD#^o)Ou6sfz=%VQwpCUQrv&(Bl3G^(%%M?Lzr#)bvmI7zjl$k z_^qq>??e4Li9a#%Cr|t-9e?VHKQ-ommhEWz)#A~@S^RDz34b?JfdcNZWsDBY=w)I2 zZUvv*T-^axDQ>|=`t!@ZRoNj4To1*%d-35ujX$|0~Z|z z@y(sxcE6n7^iA$toQ6G83I$QpJG=UKun80JtyFo^=QAhhe=Kr~Rql0a#o!5g@z%YH zU3p_eAbnUA2ax|eNl_WL%-+Yp^1D#1#BI8EZ@*o za)Nu)N=_Afqyy&NSNL{5ups*-cD%nK$ecptS+_$FJ1ab6nZY_dC12P%7TSZK0^H@_uU^AA?A5c$(1GR0KFsC;3n{JX@#E zSjb~K%k<<^^UcL-(FC*I=hKX{NB}%BoGfXBG*?N%9bme7(3;~PW$rp7ZEA#?78wEG zK*zJX0-w}M?o{Q$i$u`r?1+K>Q*JR!|#V6j#KnU{~ns!1w&RMdCG-F3orHHu&@ z+#$TCDXyolzf-e>pn3Ih6d)K}L5UyU(;d0)N-LM{uGU1PFI2@PqwB?Z8|Hl(#%_I! zjg~udVa2hrk~~crqp~Yq7TFDaW&zn&K>bET#>&pMd!8}8SBhQft*O8Zk!F65aZVXx z4CNQsYnOCi+Sb@Kid;*gig*rB$t>5_9upvpuvR-DE<+2?HQRQi(`yx2*75bQX!VM( zm(hwZAmU!TFlCMqFG(j@T(;p$?SX&es=M(RRk<3D0Iv4)Pf!Bj!S`#rh;uXKeXp^z zkI_;_$FqHg#gQ%=A{77JU0w}k^2$PD4)}vNQGxB?SgVeTR5}jtkW38i{&*Dn- zq`xVwxWDMMKHKa z0($Pf@7HcAva~U>PH1JlZ!P-8BW_PiDve$-B}Ul5S4=gz^4>vX(=_#G_p7rilZW#> z>PoZN++Zu%F8hXt6P*v5OZ@WuvohE03-0@(#8n4DXM}!bN(j4OlcvBW^4(dt-)h57 z*9T|?h8-roUb6C~-2QdU_ zBZEl>cCusj8I2B}9C4(r^kkmDz4!cOeW{F%y)PRN5AS+j^*g=$&3a!NeV55sb|oo3 z5%bQqRMRP-v}|@-C}&mH&CGOKg;Exp;c$f3hS$>MrGfZy^79jO6uU;0dyK{x2pWN~%2@Z3lu#-b%%$z!aFje^wPmg!09og>_=L?*ha zq!ty`eXAU4A*gXg9eGPMEiNRhK##(q#cVQ9=g`ZGEr~u*1Q#**EwGbmevcaT zQP7^F#`|tZo;|{AUUsBl&ilOqlmHtP;kxsSFqBw1bU(0C3$LStHmgTxQ=TdKLi$Ma zy1=KC5*-s$oP?nvL3*@Uig1VN4Q&9&6V$3PN<=YnAPhN2GG|(Xsdc*f>y#g0(sC5I zSsnh7bgcFAI-IZJP$!Vd(LL_PT4-pS@~w0x@<&2=dvqC{*VytJzH)sVF%itXXdV7`Q4nr4#)UQ z3K5iPW(K15K8n_LzS({vhXveY9W+aj{ghJ^ZQc~+jjPPdC?jU)+6fNtDEJcjjGj(H zl^m6*k6wa=jVlGJvQw1lv+Bx)q??b6LJmrFBCSBLhdr45UodR&s95J`;Wx71$RI^H zu(K7Uhj&2URmT2FdK|vRAB?^66r{87#%s%Qd%O;|;S^VdDnyMNUc8+$l_4u=eEenF zm84{0_Op|h)jOU}8T!h>;9U#H-dUo>Qejhz=*m`J-npsS3e2XU!7TEp^b9B-I%%9f zjaM#5FVeBmt;k%VR()0j&-4?xLmC7TxJD)O$ip_cqh<;AW`y)c$^Cr%{B~brT+)HM zvQpt-c>lX89k#gR^#s=_K|v zbA6+l?n=CL56@tSHx(SL9>$BOI`M*68OS^32&d>6E`T!6is2;N$XX>~sROaW!D`9` z@hUWC=v5#ZGU0v+WD0M*-~hD1V%+%0bGXweonl}FFa7L(07sGQ?Ec(rCm&NCH&IO4 znBv&qHE(~<`L7hO@<3`mLu0J$yDoFc%HCj)nI_PnZf2jBVQ2z4RXS-1(Zk=;(F1CcP*CE%5v ze9JOqFuKy@DT!DZ6({n+iVR^_FC=fJ1_#tAYCCz$S5;9y&b(a7jbf;ajGIWv*G%x> z$RiHCP`a3?oPS;-&gIPg%3+h_bEZAmSJcqBW4NMtSw>t~)O#-7+wSj^2l;QZAm4um zzS@SJOF)hCMrC*+J6Y(+>rpRO5@TQ4iU9D0Wr+m7+8QY#L_+`(7RUJ1)?+zeiKe@`AEK%ORbol=)2R#E;)=ZNy*4H~lz5%D6lQcre?Nk_p_>P*3tY2PX%jM_(81o?%< z(KI>=Kl0|j);NwYG%*}*`xV@)$7y6UN!Jre}bhpT56oxz1M)176(s zYe9W_Lkpig#<6{)uy?8&&!fz#ns%(G-&Ra!m()teg=Ax2RiK@rU3ffiI>{!|GlxkT!4JtbBQ;+U_jTo8Fx}%IuTQ9 zW`K5=W37HP%Uxp0!A1F7*mSvozPBM1jN$tXnmArWCL5oZEY0bSdnPe(pPP5Ca5zEgP8|zyA&dXE09*pOG!qceom3#8=JW0Xb z@pjDQAzb?x9Y*xMl`wHw&`fHec4Yo)nJJS(qU%V%ZfyBIwX&+ubT>SCECDzXJyQF< z7;lcJ@UEW8KUkIpTh|CK=-ePHbYaEL3eyk+wvsG8=nz-P_eTmNrNmA?2vyamEUMxK z?dHUcA0rp`rZPblbb@pi&<__91Fr2(9P%&!uBQGwvigtO{YPXt=@%J(@S_X^6$pxHiqU7}qydHucJL;;T5F6()* zDip^m;no#)ddxHBAoULD?19uQ^qZ*z?;RG72L!Kn?f`$HY?v!x3yZ`WU(-r1xf%vh zi$(ES3pJM;8X7uvWzT78%uqD89e(xq4T${e+qMWwUiT)cv%Y|m-JC+chK@o8VQ<~- zf4;?K!U5rJHbE01XVZ58D)*~9fNur1EjxIwSc&sl9L_pc=|vY&QYo7ReDt1BD*Qi~ zfkDiw>Z-WOthv8M3=bGgf{A?HStKoV|8H<)9+ODS2ZMNes$8%AU&+hf7DB!>UEcd8 zFp&{&QnX}h6hjdzruNM@mvnUq;e!$_r`FRgdECaE!ja@4;+{STV73e3ye54iCNz+* zxhp42wU{gjn0^Q3<%8~Z4ZqXcg2x>sC;fCCDk+4BOBjjpp3o7qxm5E=XuETn9xYU= zqrc5rCHA0}5REZEGdzt0WEE`ow998GK!FXJ7b&_=mZQD#rMDGBvhAp#4Az`sb7R@MaPtk)}{sCt}&6@@udzdqH7($*p}GBV07f`>}Q zSriz+M!N{zA+p}nP&J>%UhnH^S0IL2ewATG<`Dwj=r9>u$!rZxEs+eW%k0cMz-;tQ zZQT1Dg~6*r2l5cZ6%yA0JNtQs5zHKTb7y;F19NBUy)DVm{nEjJjNV+!&9+ zxFt-J^!UwGiqZ27FS~pVLh>+KZBvdF+q^BVsuGBY1?smrEgA>Y43!W{JOUb`Fd|-Z zNAkoo4ml*1fb3XkYb?7gr6j`(?q|fY0@)SDcYyM*iW(*^cfeNXZ@v{mB=sX8gw)g| z)tDDe7VlG0w@Gb{#wRIVLn!>z>VyX@3PQ~?Z&h(Km9$dl+NWDZSj`riLn5>}30MDA z=6kHSJ!7dBe~8m$HQVe>rEiZR)k=^4^DlPd@`cLK#E)?)|0s5tRBNMeISx+HCYzHfG^Td zdC!`0=la#7hGc@s!Z9pPZ!pw~cUxoZ1E>?_g*=tsYIRk-T4ptpQ}y#&0w8xzvip%3 z2)rp8GqY4;m~2#I$tpShXigOm{dqDQG9m0`f8xYbML95U>Nor`sJ9l1J_}W#z}Tp- zoyfgDaFuOyS8-S{U2uyijsn3?4*K7TS^Ymy4|?~5qx**-rLu5;+Z6#;411#_zeWk= z9WWl;SY^Er)A1f;hxtx_2>3?aE3|X%>Dv-gV8JJ`-SedP7=c9(2w}bg>`0yzEzr+w zN}CGLVH8XYvX_4uvRSE0*TqZ8k7*`F3&;N%;w5;scn5?M8Qoq(&RSr{ZK8sKaEpb7 z@Y{326|w22CbF9YNJnP6H{~q%*)Q52>wNgHlgXn^MLzAnIft1CzgrH=ge%z6bOC&A zCS}IspaSm;A`1n$|K+j%3#a+#(0`!YeI0W^62QKNP^dwApH_T95R=EcDkv(a0@Z!cfC|r zxqc+L@p$%1q`2fJr@s3RFn=a+wp9N;v*8XX@`-WSCuP5BFnj3P9M3PhvrAqb!V$G- zY{eZ}qZ`YM*44sk`GwrnwOnv?}#o z-xu=@Wes_Xjscdf<|+~ya2mmu*?P>POGUvA^WL*IrZ><}xJYtWEN9k{hT6QaD@Ni+<>gb7 z0$Q0xq=Bb4Hnz&*zDqi|-^}%oMAb5EBIpfzBFB|7F_JT%y7q44Y2QPj;FLSBoqmX zMiwoF?YXyCH~N2A!;L64B&tDY5vB^0fD#rLYu)Qz;u`ug96AAcb6n+c;j}lK(n)x2 zj=8dQ(r^}!J2FqOK57ugE7jiqHMP0x+fn2I7S8~0_L*)Khvl_F&Nq>aeqwH6NBKwI zY`L?g*v=kvhVUUqpDk~xHme!nMYFc4<}&!}-pjq5l_6jzLI{%_05`I~I=~nY9f&iW zRCj;H(R=EGk)MaUC5DF7P04RN@Jy+ZyG3Uj`dn~^)c919z5OS4sN`c+L+`Mw~!3UsPtOjm_DfQ@y)(~S3)a8}aNcx|3i zTV&n!vzB_{HmlQIpIih8oCXei$HBs>d)V>GHBW77y4Bt8%qDZ=ptTm4uxhQgXEDr< z=kicXz&w7~;}Kp^fw(*3z^XKE#Zg1d%ZRn!H5(*JKG6B3bTDFWg}f;IubaGK3%C5R zH#BS@j}#Q0e&3oy1$r$Vl9bJnIqJ8g;nSr#wB9?o4X9AKu`!B5;ve zb=%OKk$x?7rTpHQ|1`;-`ld5pwDE&*d0-np(1glEoEU|P#Hx#p%k<7%>| zS|hH%;aR}fcGqqq334b8{6yJcD=uDa8N^hSDmME?P)?beO0UzmiaaY-YzbX)?U>s1 z^XE(tRKiZtlDc9UOxIlLKRxRG*t3WpRSq93c(g||^@k=~jU(JeMru*CY_GQJ`Cy7#s0gwODvZRBg=gIfY3O}gBk40*9& zlAwy23|1p0XoM=X8lLn-*o%;DR{MpciOQ~AE8$Tg9_MSK00jC{Fc0*L>!2BKaq(k^ zFDw&Q4p?YfW==s5`cYmL&{E4lm7oZux0TWwhnjVdYt0eLD5p6;OuoidFuXvrsnr#P zznJK#&k!!z`1tTm?^E%o-da!d5blW&d7CFiH%~hE+cFoF@b9*&bsHo2jvL%(2*IPr z>Vw>uzPttxMVz0GEcaX#?LM*G(=RpO@S3)+d?O@q0P-OxHZ*i6{l3fI?p*zawrrHN z%QJc9rF2J(A{=2^lz{!)-H-<JOmuk zF7~f2pPDESS()>TQR}dZsjG>IJza@GxWqi?h#>J$uS($lw7P{??rMj;VA$hS%Y$m; zLiHUN@w6#>bCT=y3|}6_I8g|{PfjT~_QHn}o&e^7zbn$)x+K|bJl?U08KGrzN-xh| z!I|wrj{waMC1RR3>5gZQYsh`i0rz4fTcDEyx zP*+vMR-YI74OPI5aC3(%WpL9{D7Sq17kSS2v+APet0glJ2}zJC(TH;T4B!PJi7WGO zxg5v-57mYqY(4U~-LAmDIS{YmcHdol$WHF%Xg6wq0H1L1 zrEZjch@AK4Mj_Rqmp@a53L4}pj~TJl;6d>;mZ*jI>#Zr=7w6kD(aIwhJ0lu#j`)#? zUpp!CW4`xzwDKbO`Gh3X3OPEcurG(>zFNB4tS$pk(vz4q*|EEcX= zGEbjor|7K9x-Z*s80Mo}wQHN#f!L<6+QYy@D?3juJX5=8LksT|-0`vfAs>s*z*$C5 z>GbJGMI)33xJGb)g!sz|ru{Z#CaaSKTciG)L_N@49b-Zlm_~2bSM2E?aTuGhaj9!k z5^fM=`5W5HrYnr~3}O{{t2O$z$9oBJ=**s7xz>E^!7@a4c0wsc^E=-bI>Rwzn>l(@>)b%l$T3hr>id^8|_N zquzNd>=%zQh^;9KjWa&eK2j-R@)3IYU5Thsxub<}&kB!I@ff8=kd7SPAdhMh)V&*@ z&nKOkAYRMOj7xo=!w3Z-ZSavtdHs<%xk2Qh6fg~YDC72w{^tAK#vOCBPS7m*-T>E1 z@y;R4hs~>d7s%1i26?>atfGj`Bcau1CP|c-ACckLtLvDGp-#`vXnsE?Q=Wj3S=E3{ zeIUB+siC^z(|0rK(rOF6K}$iaY+Mo-O2RaI$y3dPQt=W&K9UK&#J zac+GQ;mUi2SfvixQrHKm+5zI>eu4}fz+U_}iV_b8vkHMZ?8RvR*{W#Ri6za>AP+ro zfFnQs%=%OVe&JWi)|GCw>U9Rc$YcAiW`xnA1_R^A)$ZAIB@sj4#LeLYo08CAsk2R}d`fT9|n@Hubp%d4F)w8s07R~8lLhI6*e zKK$U=3vq}NP+sx2ktMblBEiM&G1cZ9DJjV+tBtf|o;ch!2>let``X*t62OC^%DC*S zv!0i{_^4>f$%()%)#vY2HPYKlYhlRw_LdCKcB6i<;_M~BP@1q{X(mAZ(%E<-I$7Hs_&5+ znGGAMeT1TAC$V9Q+_T}29nMjMZZj(HiXG922-OMqupN~dn_MUyJv_zS<-mHPy4)cZ zwEOzy@n=1?(YiC);N~$ZUo%|?Bxiq1@7dnSe?f|vIB!(O3m&Ru)&a->B70BCp zu7wgFDrtkTFB!dQ&!yDbXWgA@kq*lz4$ZuRkDp1^KNjbR%le&yAl%Mt_ukv3TcszQ zzZ9i^DKgW7XmhQKcVR~@u>n)2 z@o!gWG;%brdgv_G-&nsMdBV6f%8cFBW9TP0XAtcI*x*13XtslkoR^X`6b|Z5!p+k* z4+d?rA*BJRW$4&SQlN&&g%Gc#c4}rH`vJoPf$CFB){*tWU1b)|Z0uzdY>A+rs*Psd z`GPKiO3rHEO3(Y_6>8ttj|=^azJ6nfk&R30La_*syDl^zqRj>;ncbpHLbZ%$zHYzb zicc45%vKRs4uQ=A7g*uHVV%#JXdujA&@wlgF&Cs!&`>}RYl%!}h!A=m=`CZQxDs}< zFf7`u0ojt5Ig|WY$tds-e=gw%YsEx!9tUP#B;DwitN@ ztLQC8$RL6Gm6JQxo)j%s_^GHC?kDdS&9mq#DfEA^Nv*XLLaT|aSw&Y#9Tp-^nC;In zbF=(DF^PZwy<~daY}-hA-(IoIIKon(UZSpTqB07MI~*XN(Ja-8dJD)Hv(gLN8L+Pm zB4PxzhnlSr#ZX$78|j0!h3wFyH{H-bvYQ_1Xm$+Ewi5a$`jF!ADj}8<*{`BUhB)Qh ze)XC)Epl}Wog3D6{aASE5lNCwBYL#LP?NuE!%ZqlHR&uZv$Sec{ZMgI0DElJ9R+<7 zzsTPDf#|3E>Y}Spl&H{?;|6&OzR)q*BkrXzCwVPP2v^1TJwu^-6wu9e0Prl`Dq!(5 z6!bGaAy+q3^o3_mz`-vQrF1o;ewCVLfqvl9VIJitd;k2kXxQoCYtgEtZ?XMqhVQAH zsa2pIMCY!nq%m^}qi(*VBC#WW?)xUkWaA{vZd&NH?9t!zdQc+vq(-x{s%t zwD-^m6-2qJuzDo9oftw|De#5)$vRh1_I%b3w{2raNAbi_vE0Xq@Mv%3R>KguhDfa> z9MIPmz2f#2BBJdgff=#LoMS74S|>EJ9$Xs(kPr!y4D5SPM)mQusfhpFp5yV2`*KWG zbfK)CWe(?*Pl%nA(NV{NO*2Lgxx-+wyPdv$2=3}YA~WU}dKnx8r>5fU`P!vv&hY!D z+)>EtJ+LoO?@>e~)1#53FQykoX-kxiT7nB`%-zqc{(;g*fdUjow0T`_kD9;?WaM1zEI1WBNd4g zyl_76yzU)7XV5Z=?{E+0b?82Moy(qm%tPddNC+4%8lFOns6V!DZ(B-nMy(TaoHHkH zQA|F-pOd6Kb4AXfx^CqqspXWu#V5NFf*jf30i_u~l(SBPwOaoM#%=?3#$f8Xe(%d# zlXw#)zls+zRAqdI@N-VZ4lWGJ;4AK3Wu2)zU`EjTm}SA_YPQON$nCJ6x6^9;;~jt& zew!+I!FvZx$^Urq+9m$g{L+nIocjFWVfaN-$~y=1BnmCP9G5ulg>FZ(Sjn#}a-c2( zKBvKnveDM$$0M0dmBXAE0?&x1VNTe_tz$j!MU~G{b?yMegCFMpBODpqIQ8#N@$~Kh z*jahl%JP%B(t%*$lae+2+*!@`(?Fw8X#5L{$84yy)6ss%x+&Q%^<;jII7jxJCEX=e z**5*Rxlo^@n>{y&v%>ImO~?u84(J}d{rXe6a70VwZ@3z-I&dnpUVi%}czIxAOpD_v z!8n4jWf0?j51bnwc%jHSW^Lg|miZ%f%{2u}?a>ydZ&~jE_OaX&*!$4_u#GV}vg^b< zV2AeStIK}oUoZ$6Z0ZnPcZ0-jv8Ec2Q_15$6(~v=@ zRS?_Y5UCb3?ova8qi2@t!G#|=UJH>J5(t`X+nJ#nY&p$FZ#cCj=SYKrSE6)l>@13- z+!_00u;(9@|0O>T-TI!3??P);)$yFh+??xiQG@MluCcMM4T}Ux*^8?VSUVPWgH|<=MH0y=*x`sWkc@d z>@%B3n!uPZ!cEZB(&%AYgDJ%kNov|o2hjv7%(qC0c8FAX{NO8l$ty-@otao2uc9uSO{!Et=&~7EzRs9WQv)&5Utm>ux;Cz zuk7BM{5uLxo`|_KqlP+ZS9X&J7I+?$GQ0wJbaBwEepB3|aEL zlav-o56wHt?xVfT3`&(8(2Zjpb&eqHlDPfDL!9%q-C&&Lg(teI?^)+ed;AeVSwW~V zXDumU-ZH~^n;jBN7YgU6I{F;jp{+P9YIi2+VQ>B8Mm^eewxDE$?W=XAjefY*ys})& zgpq9+*b*sSpilfVQKaygyl=auhwMuu{mJCUT$dnHJ*sUvp5DDMslOl5_rfEiDcisK zhmmrKlOo=n@36bL9*;YgYfko%!cM4UkrhJUNYHHtRc%K3baBWh7n3uF?no2lhfI;0+ zI@czWqITA|sUB6#!x8Mtk{0Uai*+bc67AZp;(|4elS{ID`Ob*L5mxkjtw{|%$0;Cz;0Ro*X|#ATSSsW;xvwUOU_ZD`;*uenqWCJQm}%%-Qgw(nx(^O>77r zBZOa>P!=d8Q*u)5UU_1IJEm?Gzw8j=*$KUQmX55^8e|W}6!dc{`Yj3d>2$dG>6^W)3gA&$<&h3EJ z+eQQw%udkWv?8zT>VSf2;w8Qt?f9I~M3qT@L2@nQWuv4jAZmFavzypw@N_ zksp}hJ+qu%8CaBDdDW~_E>3hNSlBR+8ogrsidO3+%NwNYt0PW5BG#ia@-$ULQ{#E2 zE_R>%_%ToC^K~sLAh5IO9{T)`g77ERl&ZK~N_l+Hn|Gz=l01o{QPX*CL9N}AjQCax+hws7+trX;FG=RaJxa(*+(}`8x1;=5;78tIvyoR1g=vwbn^jqv zEMEJ8A0Hh39&f8v_)1mGZrCiRK?DZmP14>&&u`v8Sxyw9UPcb@Y^Z;a-VQ9EChmbM z*aAuIYd5P>nm1+{fq6HBd{IarXa~wID6rnXI&nw{CVGdLu#+}G_+AiuZh8T#wM2cU zkd3Taymz}ZD7nFsb4gvf=XO5zvWPm>L-?_rxthuOD8jfxLs@L$u!UIqgd9e~Wb7f+ zaIcb23cS@wuvgdGLUJNKvoUIBN@?HxBbV>Uuubh!CiE2T&5g4$F%$&L)}n?SJ?(V8 z?_H2k)+SS@@r~AsQ5`sB(xR+7vAn00XtMDvGr;?)<$LG5r_-RIIh2gOFO%yW`5t3g zs(4xN>hV`Ula`;ZpvC7YY`Oa>XB(6w&pH|W(8Ge{kGZO}iU{-aH*F~9le$>L9_+#7 zU4rSIPa5i97b2Ckblw8BYyEUo3o6CdU(A~DQAU#ts_(qeK8w1-nu4Va%HoX9+@x8j zMn>Sn7i&i~h@=U$O9?(?GUVJ7qsInPFCHe<6~n=E!7RrxHb{laquPYvDa zFg-WfG0m#7&KbDGP0A=cAXyP4px(R>T*uTOB-~>AB?@o4Wba5Du7#F7y*?uB4T-KV z(6e%MF9ZnIcjbMo|fqu@T;^KreQN>6H2i(hjcA0LloqL24LLAR_JEM0AIOSIh{xaP&C zbMHRX(#K*o8L9Elj>1M$WgR*zDuB;oFjBnX42wthVC;~l=lM)0NanT9se@9{rg{>7 zN!ePHGx6D*rtf#C*ZEa2rlx!Op}`Ia9?oV^;x_LMyCD8gFo_zox zRdXSWe%yI0Gq=4Pyr>CHt`#308t13*;aj+F_l)1G9!SH<&l}BT&=;8M5t!Nu8yb6% z*|IcuJJqu`c3Regs}nYS!LRAvJbVxLE%QL~z88seYSva*SIv#(`7>T-xb`w*aL0}(zd7FP=%8Im9r2*uzOvzK#{i05D_^_JI=AxU3N(Mx?-c$TV zGc1=|3&!I%P&V(QUY(pvM=sO>iK6BbQLx%0Nc-VHd8sE9uaF}RgjR0|ovGV0b6kfUZn|T&&F-%VzrS(L+%OmbbvCnNYXB$a z!y@Sdvzd zeR!g`BrG)9@P1XBF6!2-N22FUq(6g=15|D@noa=h^Wm#swM&VsgxD|(AW?mfuzC~z z1@CP3ThAU|fdY13odApdx6YTFkU0fdoqhn0LQ;Q$TmZ1lUtTu>cnALI=U;U~PSiAW zV*cJeTUmf@)l9a|Lde=_L4yX0Ja41wNCyG*3giK-W>x`X(y0%>?=7XFF|&dNz^l5j z0~izIg%6{~*>r%KhCN*F%aqA`Way^hk(H1lkZfwQ?El+F$9LHd)SPXL|sw|q!oTAqWi2aL4K_+`726- z|JQT=p`iB9atr^4-~Y?}2)A519>-l{cI5m~UHxzB^NIlRPlijV_~a-eAMvDa7cFnh N(RfMZ6wk-L{{YH#n!f-5 literal 0 HcmV?d00001 diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py index 8782eb0b7..80b427c31 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,49 @@ # ############################################################################## -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 - 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) + 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, + 'dbname': cr.dbname, + } + + 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..d0bd7859b 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 ''} + [DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED + + + + +

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

+ + +${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'} + + +

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.
+Database : ${ctx.get('dbname')} +

+ + ]]>
+
+ +
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 0000000000000000000000000000000000000000..6b22abf97322d7e40e7a605b813376aad99937f9 GIT binary patch literal 5032 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 yv1*|EnN!URIR7saFr*9I3zQ&NEv<0000 -# @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() From 4e3e7898644da6306285fc733daf2416d0d7191d Mon Sep 17 00:00:00 2001 From: Sandy Carter Date: Fri, 14 Mar 2014 13:45:14 -0400 Subject: [PATCH 04/16] Generate .pot files --- .../i18n/scheduler_error_mailer.pot | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 scheduler_error_mailer/i18n/scheduler_error_mailer.pot diff --git a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot new file mode 100644 index 000000000..c83ab22af --- /dev/null +++ b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot @@ -0,0 +1,16 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-03-14 17:41+0000\n" +"PO-Revision-Date: 2014-03-14 17:41+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + From 0fa82435059c95bd68169d61419baa7f5666fde4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Sat, 12 Jul 2014 12:02:52 +0200 Subject: [PATCH 05/16] move all modules to __unported__ on master branch and set installable=False --- scheduler_error_mailer/__init__.py | 24 ------ scheduler_error_mailer/__openerp__.py | 48 ------------ .../i18n/scheduler_error_mailer.pot | 16 ---- .../images/scheduler_error_mailer.jpg | Bin 29784 -> 0 bytes scheduler_error_mailer/ir_cron.py | 70 ------------------ scheduler_error_mailer/ir_cron.xml | 24 ------ scheduler_error_mailer/ir_cron_demo.xml | 27 ------- scheduler_error_mailer/ir_cron_email_tpl.xml | 50 ------------- .../static/src/img/icon.png | Bin 5032 -> 0 bytes 9 files changed, 259 deletions(-) delete mode 100644 scheduler_error_mailer/__init__.py delete mode 100644 scheduler_error_mailer/__openerp__.py delete mode 100644 scheduler_error_mailer/i18n/scheduler_error_mailer.pot delete mode 100644 scheduler_error_mailer/images/scheduler_error_mailer.jpg delete mode 100644 scheduler_error_mailer/ir_cron.py delete mode 100644 scheduler_error_mailer/ir_cron.xml delete mode 100644 scheduler_error_mailer/ir_cron_demo.xml delete mode 100644 scheduler_error_mailer/ir_cron_email_tpl.xml delete mode 100644 scheduler_error_mailer/static/src/img/icon.png diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py deleted file mode 100644 index 36504c54b..000000000 --- a/scheduler_error_mailer/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# 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 -# 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 . import ir_cron diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py deleted file mode 100644 index b1cb4dfe6..000000000 --- a/scheduler_error_mailer/__openerp__.py +++ /dev/null @@ -1,48 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# 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 -# -# 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 . -# -############################################################################## - - -{ - 'name': 'Scheduler Error Mailer', - 'summary': 'Send an e-mail when a scheduler fails', - 'version': '1.0', - 'category': 'Extra Tools', - 'license': 'AGPL-3', - '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'], - '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/i18n/scheduler_error_mailer.pot b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot deleted file mode 100644 index c83ab22af..000000000 --- a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot +++ /dev/null @@ -1,16 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-03-14 17:41+0000\n" -"PO-Revision-Date: 2014-03-14 17:41+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - diff --git a/scheduler_error_mailer/images/scheduler_error_mailer.jpg b/scheduler_error_mailer/images/scheduler_error_mailer.jpg deleted file mode 100644 index a8a3af766a54c209723d9be24d05c1302ad01bbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29784 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 N(RfMZ6wk-L{{YH#n!f-5 diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py deleted file mode 100644 index 80b427c31..000000000 --- a/scheduler_error_mailer/ir_cron.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- encoding: utf-8 -*- -################################################################################# -# -# 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 -# -# 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 openerp.osv import orm, fields -from openerp.tools.translate import _ -import logging - -logger = logging.getLogger(__name__) - -class ir_cron(orm.Model): - _inherit = "ir.cron" - - _columns = { - '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_name, method_name, 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: - # we put the job_exception in context to be able to print it inside - # the email template - context = { - 'job_exception': job_exception, - 'dbname': cr.dbname, - } - - 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 deleted file mode 100644 index ee1bcfd6d..000000000 --- a/scheduler_error_mailer/ir_cron.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - 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 deleted file mode 100644 index d8453b4bf..000000000 --- a/scheduler_error_mailer/ir_cron_demo.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - - - 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 deleted file mode 100644 index d0bd7859b..000000000 --- a/scheduler_error_mailer/ir_cron_email_tpl.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - Scheduler Error - ${object.user_id.user_email or ''} - ${object.user_id.user_email or ''} - [DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED - - - - -

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

- - -${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'} - - -

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.
-Database : ${ctx.get('dbname')} -

- - ]]>
-
- -
-
diff --git a/scheduler_error_mailer/static/src/img/icon.png b/scheduler_error_mailer/static/src/img/icon.png deleted file mode 100644 index 6b22abf97322d7e40e7a605b813376aad99937f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5032 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 yv1*|EnN!URIR7saFr*9I3zQ&NEv<0000 Date: Tue, 16 Sep 2014 13:03:36 +0200 Subject: [PATCH 06/16] [MIG] scheduler_error_mailer: Migration to v8 --- scheduler_error_mailer/__init__.py | 24 ++++++ scheduler_error_mailer/__openerp__.py | 48 +++++++++++ .../i18n/scheduler_error_mailer.pot | 76 ++++++++++++++++++ .../images/scheduler_error_mailer.jpg | Bin 0 -> 29784 bytes scheduler_error_mailer/ir_cron.py | 75 +++++++++++++++++ scheduler_error_mailer/ir_cron.xml | 24 ++++++ scheduler_error_mailer/ir_cron_demo.xml | 26 ++++++ scheduler_error_mailer/ir_cron_email_tpl.xml | 50 ++++++++++++ .../static/description/icon.png | Bin 0 -> 5032 bytes 9 files changed, 323 insertions(+) create mode 100644 scheduler_error_mailer/__init__.py create mode 100644 scheduler_error_mailer/__openerp__.py create mode 100644 scheduler_error_mailer/i18n/scheduler_error_mailer.pot create mode 100644 scheduler_error_mailer/images/scheduler_error_mailer.jpg create mode 100644 scheduler_error_mailer/ir_cron.py create mode 100644 scheduler_error_mailer/ir_cron.xml create mode 100644 scheduler_error_mailer/ir_cron_demo.xml create mode 100644 scheduler_error_mailer/ir_cron_email_tpl.xml create mode 100644 scheduler_error_mailer/static/description/icon.png diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py new file mode 100644 index 000000000..36504c54b --- /dev/null +++ b/scheduler_error_mailer/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# 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 +# 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 . import ir_cron diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py new file mode 100644 index 000000000..d8dd3eb36 --- /dev/null +++ b/scheduler_error_mailer/__openerp__.py @@ -0,0 +1,48 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# 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 +# +# 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 . +# +############################################################################## + + +{ + 'name': 'Scheduler Error Mailer', + 'summary': 'Send an e-mail when a scheduler fails', + 'version': '8.0.1.0.0', + 'category': 'Extra Tools', + 'license': 'AGPL-3', + 'description': """ +Scheduler Error Mailer +====================== + +This module adds the possibility to send an e-mail when a scheduler raises +an error.""", + 'author': "Akretion,Odoo Community Association (OCA)", + 'website': 'http://www.akretion.com/', + 'depends': ['email_template'], + 'data': [ + 'ir_cron.xml', + 'ir_cron_email_tpl.xml', + ], + 'demo': ['ir_cron_demo.xml'], + 'images': ['images/scheduler_error_mailer.jpg'], + 'installable': True, +} diff --git a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot new file mode 100644 index 000000000..95fe5ca84 --- /dev/null +++ b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot @@ -0,0 +1,76 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 8.0rc1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-09-18 11:55+0000\n" +"PO-Revision-Date: 2014-09-18 11:55+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: scheduler_error_mailer +#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "\n" +"
\n" +"\n" +"

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

You may check the logs of the OpenERP server to get more information about this failure.

\n" +"\n" +"

Properties of the scheduler ${object.name or ''} :

\n" +"
    \n" +"
  • Model : ${object.model or ''}
  • \n" +"
  • Method : ${object.function or ''}
  • \n" +"
  • Arguments : ${object.args or ''}
  • \n" +"
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n" +"
  • Number of calls : ${object.numbercall or '0'}
  • \n" +"
  • Repeat missed : ${object.doall}
  • \n" +"
  • User : ${object.user_id.name or ''}
  • \n" +"
\n" +"\n" +"

\n" +"--
\n" +"Automatic e-mail sent by OpenERP. Do not reply.
\n" +"Database : ${ctx.get('dbname')}\n" +"

\n" +"
\n" +" " +msgstr "" + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:74 +#, python-format +msgid "Error :" +msgstr "" + +#. module: scheduler_error_mailer +#: field:ir.cron,email_template:0 +msgid "Error E-mail Template" +msgstr "" + +#. module: scheduler_error_mailer +#: help:ir.cron,email_template:0 +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "" + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:75 +#, python-format +msgid "Task failure with UID = %d." +msgstr "" + +#. module: scheduler_error_mailer +#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "" 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 0000000000000000000000000000000000000000..a8a3af766a54c209723d9be24d05c1302ad01bbb GIT binary patch literal 29784 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 N(RfMZ6wk-L{{YH#n!f-5 literal 0 HcmV?d00001 diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py new file mode 100644 index 000000000..17b0f2c30 --- /dev/null +++ b/scheduler_error_mailer/ir_cron.py @@ -0,0 +1,75 @@ +# -*- encoding: utf-8 -*- +############################################################################## +# +# 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 +# +# 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 openerp import SUPERUSER_ID +from openerp.osv import orm, fields +from openerp.tools.translate import _ +import logging + + +_logger = logging.getLogger(__name__) + + +class ir_cron(orm.Model): + _inherit = "ir.cron" + + _columns = { + '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_name, method_name, + 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: + # we put the job_exception in context to be able to print it inside + # the email template + context = { + 'job_exception': job_exception, + 'dbname': cr.dbname, + } + + _logger.debug("Sending scheduler error email with context=%s", + context) + + self.pool['email.template'].send_mail( + cr, SUPERUSER_ID, my_cron.email_template.id, my_cron.id, + force_send=True, context=context) + + return res + + 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 new file mode 100644 index 000000000..ee1bcfd6d --- /dev/null +++ b/scheduler_error_mailer/ir_cron.xml @@ -0,0 +1,24 @@ + + + + + + + + + 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..4c6fc5e7b --- /dev/null +++ b/scheduler_error_mailer/ir_cron_demo.xml @@ -0,0 +1,26 @@ + + + + + + + + + Test Scheduler Error Mailer + + + 1 + hours + -1 + + + ir.cron + _test_scheduler_failure + + + + diff --git a/scheduler_error_mailer/ir_cron_email_tpl.xml b/scheduler_error_mailer/ir_cron_email_tpl.xml new file mode 100644 index 000000000..d0bd7859b --- /dev/null +++ b/scheduler_error_mailer/ir_cron_email_tpl.xml @@ -0,0 +1,50 @@ + + + + + + + + + Scheduler Error + ${object.user_id.user_email or ''} + ${object.user_id.user_email or ''} + [DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED + + + + +

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

+ + +${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'} + + +

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.
+Database : ${ctx.get('dbname')} +

+ + ]]>
+
+ +
+
diff --git a/scheduler_error_mailer/static/description/icon.png b/scheduler_error_mailer/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6b22abf97322d7e40e7a605b813376aad99937f9 GIT binary patch literal 5032 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 yv1*|EnN!URIR7saFr*9I3zQ&NEv<0000 Date: Mon, 15 Sep 2014 21:44:29 +0200 Subject: [PATCH 07/16] [FIX] renamed 'email_template' m2o field in 'email_template_id' in scheduler_error_mailer module --- scheduler_error_mailer/ir_cron.py | 5 +++-- scheduler_error_mailer/ir_cron.xml | 2 +- scheduler_error_mailer/ir_cron_demo.xml | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py index 17b0f2c30..649c55e51 100644 --- a/scheduler_error_mailer/ir_cron.py +++ b/scheduler_error_mailer/ir_cron.py @@ -35,9 +35,10 @@ class ir_cron(orm.Model): _inherit = "ir.cron" _columns = { - 'email_template': fields.many2one( + 'email_template_id': fields.many2one( 'email.template', 'Error E-mail Template', + oldname="email_template", help="Select the email template that will be " "sent when this scheduler fails."), } @@ -50,7 +51,7 @@ class ir_cron(orm.Model): my_cron = self.browse(cr, uid, job_id) - if my_cron.email_template: + if my_cron.email_template_id: # we put the job_exception in context to be able to print it inside # the email template context = { diff --git a/scheduler_error_mailer/ir_cron.xml b/scheduler_error_mailer/ir_cron.xml index ee1bcfd6d..74a3d3edf 100644 --- a/scheduler_error_mailer/ir_cron.xml +++ b/scheduler_error_mailer/ir_cron.xml @@ -14,7 +14,7 @@ - + diff --git a/scheduler_error_mailer/ir_cron_demo.xml b/scheduler_error_mailer/ir_cron_demo.xml index 4c6fc5e7b..4c108040c 100644 --- a/scheduler_error_mailer/ir_cron_demo.xml +++ b/scheduler_error_mailer/ir_cron_demo.xml @@ -17,9 +17,9 @@ hours -1 - ir.cron _test_scheduler_failure + From f51913a9a200964b6ce5f7cefb2383bbeecc4fd7 Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Wed, 16 Sep 2015 16:27:11 +0200 Subject: [PATCH 08/16] fix scheduler_error_mailer --- scheduler_error_mailer/ir_cron.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py index 649c55e51..548728bf4 100644 --- a/scheduler_error_mailer/ir_cron.py +++ b/scheduler_error_mailer/ir_cron.py @@ -63,7 +63,7 @@ class ir_cron(orm.Model): context) self.pool['email.template'].send_mail( - cr, SUPERUSER_ID, my_cron.email_template.id, my_cron.id, + cr, SUPERUSER_ID, my_cron.email_template_id.id, my_cron.id, force_send=True, context=context) return res From 1360fa7e90f7a9736fbf5608bbc023ad61776b8d Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Mon, 5 Oct 2015 05:30:46 -0400 Subject: [PATCH 09/16] OCA Transbot updated translations from Transifex --- scheduler_error_mailer/i18n/en.po | 79 +++++++++++++++++++++++++++ scheduler_error_mailer/i18n/pt_BR.po | 80 ++++++++++++++++++++++++++++ scheduler_error_mailer/i18n/sl.po | 80 ++++++++++++++++++++++++++++ 3 files changed, 239 insertions(+) create mode 100644 scheduler_error_mailer/i18n/en.po create mode 100644 scheduler_error_mailer/i18n/pt_BR.po create mode 100644 scheduler_error_mailer/i18n/sl.po diff --git a/scheduler_error_mailer/i18n/en.po b/scheduler_error_mailer/i18n/en.po new file mode 100644 index 000000000..002a624c9 --- /dev/null +++ b/scheduler_error_mailer/i18n/en.po @@ -0,0 +1,79 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-29 11:14+0000\n" +"PO-Revision-Date: 2015-09-18 13:56+0000\n" +"Last-Translator: OCA Transbot \n" +"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: en\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: scheduler_error_mailer +#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +"
\n" +"\n" +"

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

You may check the logs of the OpenERP server to get more information about this failure.

\n" +"\n" +"

Properties of the scheduler ${object.name or ''} :

\n" +"
    \n" +"
  • Model : ${object.model or ''}
  • \n" +"
  • Method : ${object.function or ''}
  • \n" +"
  • Arguments : ${object.args or ''}
  • \n" +"
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n" +"
  • Number of calls : ${object.numbercall or '0'}
  • \n" +"
  • Repeat missed : ${object.doall}
  • \n" +"
  • User : ${object.user_id.name or ''}
  • \n" +"
\n" +"\n" +"

\n" +"--
\n" +"Automatic e-mail sent by OpenERP. Do not reply.
\n" +"Database : ${ctx.get('dbname')}\n" +"

\n" +"
\n" +" " +msgstr "\n
\n\n

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n\n\n${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n\n\n

You may check the logs of the OpenERP server to get more information about this failure.

\n\n

Properties of the scheduler ${object.name or ''} :

\n
    \n
  • Model : ${object.model or ''}
  • \n
  • Method : ${object.function or ''}
  • \n
  • Arguments : ${object.args or ''}
  • \n
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n
  • Number of calls : ${object.numbercall or '0'}
  • \n
  • Repeat missed : ${object.doall}
  • \n
  • User : ${object.user_id.name or ''}
  • \n
\n\n

\n--
\nAutomatic e-mail sent by OpenERP. Do not reply.
\nDatabase : ${ctx.get('dbname')}\n

\n
\n " + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:75 +#, python-format +msgid "Error :" +msgstr "Error :" + +#. module: scheduler_error_mailer +#: field:ir.cron,email_template_id:0 +msgid "Error E-mail Template" +msgstr "Error E-mail Template" + +#. module: scheduler_error_mailer +#: help:ir.cron,email_template_id:0 +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "Select the email template that will be sent when this scheduler fails." + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:76 +#, python-format +msgid "Task failure with UID = %d." +msgstr "Task failure with UID = %d." + +#. module: scheduler_error_mailer +#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" diff --git a/scheduler_error_mailer/i18n/pt_BR.po b/scheduler_error_mailer/i18n/pt_BR.po new file mode 100644 index 000000000..4ad2412b1 --- /dev/null +++ b/scheduler_error_mailer/i18n/pt_BR.po @@ -0,0 +1,80 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +# Armando Vulcano Junior , 2015 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-29 11:14+0000\n" +"PO-Revision-Date: 2015-09-18 23:44+0000\n" +"Last-Translator: Armando Vulcano Junior \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: scheduler_error_mailer +#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +"
\n" +"\n" +"

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

You may check the logs of the OpenERP server to get more information about this failure.

\n" +"\n" +"

Properties of the scheduler ${object.name or ''} :

\n" +"
    \n" +"
  • Model : ${object.model or ''}
  • \n" +"
  • Method : ${object.function or ''}
  • \n" +"
  • Arguments : ${object.args or ''}
  • \n" +"
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n" +"
  • Number of calls : ${object.numbercall or '0'}
  • \n" +"
  • Repeat missed : ${object.doall}
  • \n" +"
  • User : ${object.user_id.name or ''}
  • \n" +"
\n" +"\n" +"

\n" +"--
\n" +"Automatic e-mail sent by OpenERP. Do not reply.
\n" +"Database : ${ctx.get('dbname')}\n" +"

\n" +"
\n" +" " +msgstr "" + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:75 +#, python-format +msgid "Error :" +msgstr "Erro" + +#. module: scheduler_error_mailer +#: field:ir.cron,email_template_id:0 +msgid "Error E-mail Template" +msgstr "Modelo de Erro de E-mail" + +#. module: scheduler_error_mailer +#: help:ir.cron,email_template_id:0 +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "Selecione o modelo de email que será enviado quando o agendador falhar." + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:76 +#, python-format +msgid "Task failure with UID = %d." +msgstr "Tarefa falhou com UID = %d." + +#. module: scheduler_error_mailer +#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "[DB ${ctx.get('dbname')}] Agendador '${object.name or ''}' FALHOU" diff --git a/scheduler_error_mailer/i18n/sl.po b/scheduler_error_mailer/i18n/sl.po new file mode 100644 index 000000000..821a93011 --- /dev/null +++ b/scheduler_error_mailer/i18n/sl.po @@ -0,0 +1,80 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +# Matjaž Mozetič , 2015 +msgid "" +msgstr "" +"Project-Id-Version: server-tools (8.0)\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-09-29 11:14+0000\n" +"PO-Revision-Date: 2015-09-26 07:36+0000\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: scheduler_error_mailer +#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +"
\n" +"\n" +"

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

You may check the logs of the OpenERP server to get more information about this failure.

\n" +"\n" +"

Properties of the scheduler ${object.name or ''} :

\n" +"
    \n" +"
  • Model : ${object.model or ''}
  • \n" +"
  • Method : ${object.function or ''}
  • \n" +"
  • Arguments : ${object.args or ''}
  • \n" +"
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n" +"
  • Number of calls : ${object.numbercall or '0'}
  • \n" +"
  • Repeat missed : ${object.doall}
  • \n" +"
  • User : ${object.user_id.name or ''}
  • \n" +"
\n" +"\n" +"

\n" +"--
\n" +"Automatic e-mail sent by OpenERP. Do not reply.
\n" +"Database : ${ctx.get('dbname')}\n" +"

\n" +"
\n" +" " +msgstr "\n
\n\n

OpenERP je poskušal zagnati razporejevalec ${object.name or ''} v podatkovni bazi ${ctx.get('dbname')} , a ni uspel. Obvestilo o napaki:

\n\n\n${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n\n\n

Preverite dnevnike OpenERP strežnika za pridobitev več informacij o težavi.

\n\n

Lastnosti razporejevalca ${object.name or ''} :

\n
    \n
  • Model : ${object.model or ''}
  • \n
  • Metoda : ${object.function or ''}
  • \n
  • Argumenti : ${object.args or ''}
  • \n
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n
  • Število klicev : ${object.numbercall or '0'}
  • \n
  • Zgrešene ponovitve : ${object.doall}
  • \n
  • Uporabnik : ${object.user_id.name or ''}
  • \n
\n\n

\n--
\nSamodejno sporočilo poslano iz OpenERP. Ne odgovarjajte.
\nPodatkovna baza : ${ctx.get('dbname')}\n

\n
\n " + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:75 +#, python-format +msgid "Error :" +msgstr "Napaka:" + +#. module: scheduler_error_mailer +#: field:ir.cron,email_template_id:0 +msgid "Error E-mail Template" +msgstr "Predloga obvestila o napaki" + +#. module: scheduler_error_mailer +#: help:ir.cron,email_template_id:0 +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "Izberite predlogo za razpošiljanje ob napakah razporejevalca." + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/ir_cron.py:76 +#, python-format +msgid "Task failure with UID = %d." +msgstr "Napaka pri opravilu UID = %d." + +#. module: scheduler_error_mailer +#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "[DB ${ctx.get('dbname')}] Razporejevalec '${object.name or ''}' NEUSPEŠEN" From 57cf861147c6d01829baf5114b3753c85d884523 Mon Sep 17 00:00:00 2001 From: "Atchuthan, Sodexis" Date: Wed, 18 May 2016 16:23:01 +0530 Subject: [PATCH 10/16] [MIG][9.0] scheduler_error_mailer --- scheduler_error_mailer/README.rst | 67 ++++++++++++++++ scheduler_error_mailer/__init__.py | 26 +------ scheduler_error_mailer/__openerp__.py | 47 +++--------- .../{ => data}/ir_cron_email_tpl.xml | 38 +++++----- scheduler_error_mailer/demo/ir_cron_demo.xml | 27 +++++++ scheduler_error_mailer/ir_cron.py | 76 ------------------- scheduler_error_mailer/ir_cron.xml | 24 ------ scheduler_error_mailer/ir_cron_demo.xml | 26 ------- scheduler_error_mailer/models/__init__.py | 6 ++ scheduler_error_mailer/models/ir_cron.py | 55 ++++++++++++++ scheduler_error_mailer/views/ir_cron.xml | 22 ++++++ 11 files changed, 212 insertions(+), 202 deletions(-) create mode 100644 scheduler_error_mailer/README.rst rename scheduler_error_mailer/{ => data}/ir_cron_email_tpl.xml (58%) create mode 100644 scheduler_error_mailer/demo/ir_cron_demo.xml delete mode 100644 scheduler_error_mailer/ir_cron.py delete mode 100644 scheduler_error_mailer/ir_cron.xml delete mode 100644 scheduler_error_mailer/ir_cron_demo.xml create mode 100644 scheduler_error_mailer/models/__init__.py create mode 100644 scheduler_error_mailer/models/ir_cron.py create mode 100644 scheduler_error_mailer/views/ir_cron.xml diff --git a/scheduler_error_mailer/README.rst b/scheduler_error_mailer/README.rst new file mode 100644 index 000000000..269dec34c --- /dev/null +++ b/scheduler_error_mailer/README.rst @@ -0,0 +1,67 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +====================== +Scheduler Error Mailer +====================== + +This module adds the possibility to send an e-mail when a scheduler raises +an error. + +Configuration +============= + +To configure this module, you need to: + +#. Go to Settings -> Technical -> Automation -> Scheduled Actions +#. Choose the scheduled Actions you want to send the error email and select the E-mail Template in the Error E-mail Template field. + +Usage +===== + +To use this module, you need to: + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/149/9.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smashing it by providing a detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Sébastien BEAU +* David Beal +* Alexis de Lattre +* Sodexis + + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/scheduler_error_mailer/__init__.py b/scheduler_error_mailer/__init__.py index 36504c54b..cca6d9455 100644 --- a/scheduler_error_mailer/__init__.py +++ b/scheduler_error_mailer/__init__.py @@ -1,24 +1,6 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# 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 -# 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 . -# -############################################################################## +# © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre +# © 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import ir_cron +from . import models diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__openerp__.py index d8dd3eb36..cee08d1c7 100644 --- a/scheduler_error_mailer/__openerp__.py +++ b/scheduler_error_mailer/__openerp__.py @@ -1,48 +1,21 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# 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 -# -# 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 . -# -############################################################################## - +# -*- coding: utf-8 -*- +# © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre +# © 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { 'name': 'Scheduler Error Mailer', - 'summary': 'Send an e-mail when a scheduler fails', - 'version': '8.0.1.0.0', + 'version': '9.0.1.0.0', 'category': 'Extra Tools', 'license': 'AGPL-3', - 'description': """ -Scheduler Error Mailer -====================== - -This module adds the possibility to send an e-mail when a scheduler raises -an error.""", - 'author': "Akretion,Odoo Community Association (OCA)", + 'author': "Akretion,Sodexis,Odoo Community Association (OCA)", 'website': 'http://www.akretion.com/', - 'depends': ['email_template'], + 'depends': ['mail'], 'data': [ - 'ir_cron.xml', - 'ir_cron_email_tpl.xml', + 'data/ir_cron_email_tpl.xml', + 'views/ir_cron.xml', ], - 'demo': ['ir_cron_demo.xml'], + 'demo': ['demo/ir_cron_demo.xml'], 'images': ['images/scheduler_error_mailer.jpg'], 'installable': True, } diff --git a/scheduler_error_mailer/ir_cron_email_tpl.xml b/scheduler_error_mailer/data/ir_cron_email_tpl.xml similarity index 58% rename from scheduler_error_mailer/ir_cron_email_tpl.xml rename to scheduler_error_mailer/data/ir_cron_email_tpl.xml index d0bd7859b..b8e6a2598 100644 --- a/scheduler_error_mailer/ir_cron_email_tpl.xml +++ b/scheduler_error_mailer/data/ir_cron_email_tpl.xml @@ -1,21 +1,24 @@ - - - - - - Scheduler Error - ${object.user_id.user_email or ''} - ${object.user_id.user_email or ''} - [DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED - - - + + + + + Scheduler Error + ${object.user_id.email or ''} + ${object.user_id.email or ''} + [DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED + + + +

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

@@ -43,8 +46,9 @@ Automatic e-mail sent by OpenERP. Do not reply.
Database : ${ctx.get('dbname')}

- ]]>
-
+ ]]> +
+
-
-
+ + diff --git a/scheduler_error_mailer/demo/ir_cron_demo.xml b/scheduler_error_mailer/demo/ir_cron_demo.xml new file mode 100644 index 000000000..08368e8e7 --- /dev/null +++ b/scheduler_error_mailer/demo/ir_cron_demo.xml @@ -0,0 +1,27 @@ + + + + + + + + Test Scheduler Error Mailer + + + 1 + hours + -1 + + + ir.cron + _test_scheduler_failure + + + + + diff --git a/scheduler_error_mailer/ir_cron.py b/scheduler_error_mailer/ir_cron.py deleted file mode 100644 index 548728bf4..000000000 --- a/scheduler_error_mailer/ir_cron.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# 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 -# -# 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 openerp import SUPERUSER_ID -from openerp.osv import orm, fields -from openerp.tools.translate import _ -import logging - - -_logger = logging.getLogger(__name__) - - -class ir_cron(orm.Model): - _inherit = "ir.cron" - - _columns = { - 'email_template_id': fields.many2one( - 'email.template', - 'Error E-mail Template', - oldname="email_template", - help="Select the email template that will be " - "sent when this scheduler fails."), - } - - 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_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 print it inside - # the email template - context = { - 'job_exception': job_exception, - 'dbname': cr.dbname, - } - - _logger.debug("Sending scheduler error email with context=%s", - context) - - self.pool['email.template'].send_mail( - cr, SUPERUSER_ID, my_cron.email_template_id.id, my_cron.id, - force_send=True, context=context) - - return res - - 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 deleted file mode 100644 index 74a3d3edf..000000000 --- a/scheduler_error_mailer/ir_cron.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - 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 deleted file mode 100644 index 4c108040c..000000000 --- a/scheduler_error_mailer/ir_cron_demo.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - Test Scheduler Error Mailer - - - 1 - hours - -1 - - ir.cron - _test_scheduler_failure - - - - - diff --git a/scheduler_error_mailer/models/__init__.py b/scheduler_error_mailer/models/__init__.py new file mode 100644 index 000000000..91c8e5e18 --- /dev/null +++ b/scheduler_error_mailer/models/__init__.py @@ -0,0 +1,6 @@ +# -*- coding: utf-8 -*- +# © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre +# © 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import ir_cron diff --git a/scheduler_error_mailer/models/ir_cron.py b/scheduler_error_mailer/models/ir_cron.py new file mode 100644 index 000000000..a6134be15 --- /dev/null +++ b/scheduler_error_mailer/models/ir_cron.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +# © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre +# © 2016 Sodexis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from openerp import models, fields, api, _ +from openerp.exceptions import UserError +import logging + + +_logger = logging.getLogger(__name__) + + +class IrCron(models.Model): + _inherit = "ir.cron" + + email_template_id = fields.Many2one( + comodel_name="mail.template", + string="Error E-mail Template", + help="Select the email template that will be sent when " + "this scheduler fails." + ) + + @api.model + def _handle_callback_exception( + self, model_name, method_name, args, job_id, job_exception): + res = super(IrCron, self)._handle_callback_exception( + model_name, method_name, args, job_id, job_exception) + + my_cron = self.browse(job_id) + + if my_cron.email_template_id: + # we put the job_exception in context to be able to print it inside + # the email template + context = { + 'job_exception': job_exception, + 'dbname': self._cr.dbname, + } + + _logger.debug( + "Sending scheduler error email with context=%s", context) + + self.env['mail.template'].browse( + my_cron.email_template_id.id + ).with_context(context).sudo().send_mail( + my_cron.id, force_send=True) + + return res + + @api.model + def _test_scheduler_failure(self): + """This function is used to test and debug this module""" + + raise UserError( + _("Task failure with UID = %d.") % self._uid) diff --git a/scheduler_error_mailer/views/ir_cron.xml b/scheduler_error_mailer/views/ir_cron.xml new file mode 100644 index 000000000..3ade1e1b8 --- /dev/null +++ b/scheduler_error_mailer/views/ir_cron.xml @@ -0,0 +1,22 @@ + + + + + + + ir.cron.error.mailer.form + ir.cron + + + + + + + + + From 65fdf0d17d8aa54dac72fc3ff69440f9c3738b7e Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sun, 7 Aug 2016 16:38:16 -0400 Subject: [PATCH 11/16] OCA Transbot updated translations from Transifex --- scheduler_error_mailer/i18n/en.po | 79 --------------------------- scheduler_error_mailer/i18n/pt_BR.po | 40 +++++++------- scheduler_error_mailer/i18n/sl.po | 42 ++++++++------- scheduler_error_mailer/i18n/zh_CN.po | 81 ++++++++++++++++++++++++++++ 4 files changed, 124 insertions(+), 118 deletions(-) delete mode 100644 scheduler_error_mailer/i18n/en.po create mode 100644 scheduler_error_mailer/i18n/zh_CN.po diff --git a/scheduler_error_mailer/i18n/en.po b/scheduler_error_mailer/i18n/en.po deleted file mode 100644 index 002a624c9..000000000 --- a/scheduler_error_mailer/i18n/en.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * scheduler_error_mailer -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: server-tools (8.0)\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 13:56+0000\n" -"Last-Translator: OCA Transbot \n" -"Language-Team: English (http://www.transifex.com/oca/OCA-server-tools-8-0/language/en/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: en\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -#. module: scheduler_error_mailer -#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer -msgid "" -"\n" -"
\n" -"\n" -"

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" -"\n" -"\n" -"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" -"\n" -"\n" -"

You may check the logs of the OpenERP server to get more information about this failure.

\n" -"\n" -"

Properties of the scheduler ${object.name or ''} :

\n" -"
    \n" -"
  • Model : ${object.model or ''}
  • \n" -"
  • Method : ${object.function or ''}
  • \n" -"
  • Arguments : ${object.args or ''}
  • \n" -"
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n" -"
  • Number of calls : ${object.numbercall or '0'}
  • \n" -"
  • Repeat missed : ${object.doall}
  • \n" -"
  • User : ${object.user_id.name or ''}
  • \n" -"
\n" -"\n" -"

\n" -"--
\n" -"Automatic e-mail sent by OpenERP. Do not reply.
\n" -"Database : ${ctx.get('dbname')}\n" -"

\n" -"
\n" -" " -msgstr "\n
\n\n

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n\n\n${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n\n\n

You may check the logs of the OpenERP server to get more information about this failure.

\n\n

Properties of the scheduler ${object.name or ''} :

\n
    \n
  • Model : ${object.model or ''}
  • \n
  • Method : ${object.function or ''}
  • \n
  • Arguments : ${object.args or ''}
  • \n
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n
  • Number of calls : ${object.numbercall or '0'}
  • \n
  • Repeat missed : ${object.doall}
  • \n
  • User : ${object.user_id.name or ''}
  • \n
\n\n

\n--
\nAutomatic e-mail sent by OpenERP. Do not reply.
\nDatabase : ${ctx.get('dbname')}\n

\n
\n " - -#. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:75 -#, python-format -msgid "Error :" -msgstr "Error :" - -#. module: scheduler_error_mailer -#: field:ir.cron,email_template_id:0 -msgid "Error E-mail Template" -msgstr "Error E-mail Template" - -#. module: scheduler_error_mailer -#: help:ir.cron,email_template_id:0 -msgid "Select the email template that will be sent when this scheduler fails." -msgstr "Select the email template that will be sent when this scheduler fails." - -#. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:76 -#, python-format -msgid "Task failure with UID = %d." -msgstr "Task failure with UID = %d." - -#. module: scheduler_error_mailer -#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer -msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" -msgstr "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" diff --git a/scheduler_error_mailer/i18n/pt_BR.po b/scheduler_error_mailer/i18n/pt_BR.po index 4ad2412b1..beacbdd1c 100644 --- a/scheduler_error_mailer/i18n/pt_BR.po +++ b/scheduler_error_mailer/i18n/pt_BR.po @@ -3,15 +3,15 @@ # * scheduler_error_mailer # # Translators: -# Armando Vulcano Junior , 2015 +# OCA Transbot , 2016 msgid "" msgstr "" -"Project-Id-Version: server-tools (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-18 23:44+0000\n" -"Last-Translator: Armando Vulcano Junior \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/oca/OCA-server-tools-8-0/language/pt_BR/)\n" +"POT-Creation-Date: 2016-08-06 02:49+0000\n" +"PO-Revision-Date: 2016-08-06 02:49+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Portuguese (Brazil) (https://www.transifex.com/oca/teams/23907/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -19,9 +19,10 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #. module: scheduler_error_mailer -#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer +#: model:mail.template,body_html:scheduler_error_mailer.scheduler_error_mailer msgid "" "\n" +" \n" "
\n" "\n" "

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" @@ -49,32 +50,33 @@ msgid "" "Database : ${ctx.get('dbname')}\n" "

\n" "
\n" -" " +" \n" +" " msgstr "" #. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:75 -#, python-format -msgid "Error :" -msgstr "Erro" - -#. module: scheduler_error_mailer -#: field:ir.cron,email_template_id:0 +#: model:ir.model.fields,field_description:scheduler_error_mailer.field_ir_cron_email_template_id msgid "Error E-mail Template" msgstr "Modelo de Erro de E-mail" #. module: scheduler_error_mailer -#: help:ir.cron,email_template_id:0 +#: model:ir.model.fields,help:scheduler_error_mailer.field_ir_cron_email_template_id msgid "Select the email template that will be sent when this scheduler fails." -msgstr "Selecione o modelo de email que será enviado quando o agendador falhar." +msgstr "" +"Selecione o modelo de email que será enviado quando o agendador falhar." #. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:76 +#: code:addons/scheduler_error_mailer/models/ir_cron.py:55 #, python-format msgid "Task failure with UID = %d." msgstr "Tarefa falhou com UID = %d." #. module: scheduler_error_mailer -#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer +#: model:mail.template,subject:scheduler_error_mailer.scheduler_error_mailer msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" msgstr "[DB ${ctx.get('dbname')}] Agendador '${object.name or ''}' FALHOU" + +#. module: scheduler_error_mailer +#: model:ir.model,name:scheduler_error_mailer.model_ir_cron +msgid "ir.cron" +msgstr "" diff --git a/scheduler_error_mailer/i18n/sl.po b/scheduler_error_mailer/i18n/sl.po index 821a93011..13ac3181b 100644 --- a/scheduler_error_mailer/i18n/sl.po +++ b/scheduler_error_mailer/i18n/sl.po @@ -3,15 +3,15 @@ # * scheduler_error_mailer # # Translators: -# Matjaž Mozetič , 2015 +# OCA Transbot , 2016 msgid "" msgstr "" -"Project-Id-Version: server-tools (8.0)\n" +"Project-Id-Version: Odoo Server 9.0c\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-09-29 11:14+0000\n" -"PO-Revision-Date: 2015-09-26 07:36+0000\n" -"Last-Translator: Matjaž Mozetič \n" -"Language-Team: Slovenian (http://www.transifex.com/oca/OCA-server-tools-8-0/language/sl/)\n" +"POT-Creation-Date: 2016-08-06 02:49+0000\n" +"PO-Revision-Date: 2016-08-06 02:49+0000\n" +"Last-Translator: OCA Transbot , 2016\n" +"Language-Team: Slovenian (https://www.transifex.com/oca/teams/23907/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" @@ -19,9 +19,10 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" #. module: scheduler_error_mailer -#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer +#: model:mail.template,body_html:scheduler_error_mailer.scheduler_error_mailer msgid "" "\n" +" \n" "
\n" "\n" "

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" @@ -49,32 +50,33 @@ msgid "" "Database : ${ctx.get('dbname')}\n" "

\n" "
\n" -" " -msgstr "\n
\n\n

OpenERP je poskušal zagnati razporejevalec ${object.name or ''} v podatkovni bazi ${ctx.get('dbname')} , a ni uspel. Obvestilo o napaki:

\n\n\n${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n\n\n

Preverite dnevnike OpenERP strežnika za pridobitev več informacij o težavi.

\n\n

Lastnosti razporejevalca ${object.name or ''} :

\n
    \n
  • Model : ${object.model or ''}
  • \n
  • Metoda : ${object.function or ''}
  • \n
  • Argumenti : ${object.args or ''}
  • \n
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n
  • Število klicev : ${object.numbercall or '0'}
  • \n
  • Zgrešene ponovitve : ${object.doall}
  • \n
  • Uporabnik : ${object.user_id.name or ''}
  • \n
\n\n

\n--
\nSamodejno sporočilo poslano iz OpenERP. Ne odgovarjajte.
\nPodatkovna baza : ${ctx.get('dbname')}\n

\n
\n " - -#. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:75 -#, python-format -msgid "Error :" -msgstr "Napaka:" +" \n" +" " +msgstr "" #. module: scheduler_error_mailer -#: field:ir.cron,email_template_id:0 +#: model:ir.model.fields,field_description:scheduler_error_mailer.field_ir_cron_email_template_id msgid "Error E-mail Template" msgstr "Predloga obvestila o napaki" #. module: scheduler_error_mailer -#: help:ir.cron,email_template_id:0 +#: model:ir.model.fields,help:scheduler_error_mailer.field_ir_cron_email_template_id msgid "Select the email template that will be sent when this scheduler fails." msgstr "Izberite predlogo za razpošiljanje ob napakah razporejevalca." #. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:76 +#: code:addons/scheduler_error_mailer/models/ir_cron.py:55 #, python-format msgid "Task failure with UID = %d." msgstr "Napaka pri opravilu UID = %d." #. module: scheduler_error_mailer -#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer +#: model:mail.template,subject:scheduler_error_mailer.scheduler_error_mailer msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" -msgstr "[DB ${ctx.get('dbname')}] Razporejevalec '${object.name or ''}' NEUSPEŠEN" +msgstr "" +"[DB ${ctx.get('dbname')}] Razporejevalec '${object.name or ''}' NEUSPEŠEN" + +#. module: scheduler_error_mailer +#: model:ir.model,name:scheduler_error_mailer.model_ir_cron +msgid "ir.cron" +msgstr "" diff --git a/scheduler_error_mailer/i18n/zh_CN.po b/scheduler_error_mailer/i18n/zh_CN.po new file mode 100644 index 000000000..f312e6e0c --- /dev/null +++ b/scheduler_error_mailer/i18n/zh_CN.po @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +# Jeffery Chenn , 2016 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 9.0c\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2016-08-31 11:58+0000\n" +"PO-Revision-Date: 2016-08-31 11:58+0000\n" +"Last-Translator: Jeffery Chenn , 2016\n" +"Language-Team: Chinese (China) (https://www.transifex.com/oca/teams/23907/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: scheduler_error_mailer +#: model:mail.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +" \n" +"
\n" +"\n" +"

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

\n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

You may check the logs of the OpenERP server to get more information about this failure.

\n" +"\n" +"

Properties of the scheduler ${object.name or ''} :

\n" +"
    \n" +"
  • Model : ${object.model or ''}
  • \n" +"
  • Method : ${object.function or ''}
  • \n" +"
  • Arguments : ${object.args or ''}
  • \n" +"
  • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
  • \n" +"
  • Number of calls : ${object.numbercall or '0'}
  • \n" +"
  • Repeat missed : ${object.doall}
  • \n" +"
  • User : ${object.user_id.name or ''}
  • \n" +"
\n" +"\n" +"

\n" +"--
\n" +"Automatic e-mail sent by OpenERP. Do not reply.
\n" +"Database : ${ctx.get('dbname')}\n" +"

\n" +"
\n" +" \n" +" " +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,field_description:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Error E-mail Template" +msgstr "错误E-mail 模板" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,help:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "" + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/models/ir_cron.py:55 +#, python-format +msgid "Task failure with UID = %d." +msgstr "" + +#. module: scheduler_error_mailer +#: model:mail.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model,name:scheduler_error_mailer.model_ir_cron +msgid "ir.cron" +msgstr "" From 0f8efd24cfeee461b21b84f4eca8683d423ab536 Mon Sep 17 00:00:00 2001 From: MonsieurB Date: Fri, 3 Feb 2017 15:20:33 +0100 Subject: [PATCH 12/16] migrate to V10 --- scheduler_error_mailer/README.rst | 2 +- .../{__openerp__.py => __manifest__.py} | 2 +- scheduler_error_mailer/data/ir_cron_email_tpl.xml | 12 +++--------- scheduler_error_mailer/i18n/pt_BR.po | 6 +++--- .../i18n/scheduler_error_mailer.pot | 6 +++--- scheduler_error_mailer/i18n/sl.po | 6 +++--- scheduler_error_mailer/i18n/zh_CN.po | 6 +++--- scheduler_error_mailer/models/ir_cron.py | 4 ++-- 8 files changed, 19 insertions(+), 25 deletions(-) rename scheduler_error_mailer/{__openerp__.py => __manifest__.py} (95%) diff --git a/scheduler_error_mailer/README.rst b/scheduler_error_mailer/README.rst index 269dec34c..9ba801de4 100644 --- a/scheduler_error_mailer/README.rst +++ b/scheduler_error_mailer/README.rst @@ -24,7 +24,7 @@ To use this module, you need to: .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/149/9.0 + :target: https://runbot.odoo-community.org/runbot/149/10.0 Bug Tracker =========== diff --git a/scheduler_error_mailer/__openerp__.py b/scheduler_error_mailer/__manifest__.py similarity index 95% rename from scheduler_error_mailer/__openerp__.py rename to scheduler_error_mailer/__manifest__.py index cee08d1c7..0da065b2b 100644 --- a/scheduler_error_mailer/__openerp__.py +++ b/scheduler_error_mailer/__manifest__.py @@ -5,7 +5,7 @@ { 'name': 'Scheduler Error Mailer', - 'version': '9.0.1.0.0', + 'version': '10.0.1.0.0', 'category': 'Extra Tools', 'license': 'AGPL-3', 'author': "Akretion,Sodexis,Odoo Community Association (OCA)", diff --git a/scheduler_error_mailer/data/ir_cron_email_tpl.xml b/scheduler_error_mailer/data/ir_cron_email_tpl.xml index b8e6a2598..4e760765a 100644 --- a/scheduler_error_mailer/data/ir_cron_email_tpl.xml +++ b/scheduler_error_mailer/data/ir_cron_email_tpl.xml @@ -1,10 +1,4 @@ - @@ -21,13 +15,13 @@ -

OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

+

Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'} -

You may check the logs of the OpenERP server to get more information about this failure.

+

You may check the logs of the Odoo server to get more information about this failure.

Properties of the scheduler ${object.name or ''} :

    @@ -42,7 +36,7 @@ ${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get

    --
    -Automatic e-mail sent by OpenERP. Do not reply.
    +Automatic e-mail sent by Odoo. Do not reply.
    Database : ${ctx.get('dbname')}

    diff --git a/scheduler_error_mailer/i18n/pt_BR.po b/scheduler_error_mailer/i18n/pt_BR.po index beacbdd1c..231579b1e 100644 --- a/scheduler_error_mailer/i18n/pt_BR.po +++ b/scheduler_error_mailer/i18n/pt_BR.po @@ -25,13 +25,13 @@ msgid "" " \n" "
    \n" "\n" -"

    OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" "\n" "${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" "\n" "\n" -"

    You may check the logs of the OpenERP server to get more information about this failure.

    \n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" "\n" "

    Properties of the scheduler ${object.name or ''} :

    \n" "
      \n" @@ -46,7 +46,7 @@ msgid "" "\n" "

      \n" "--
      \n" -"Automatic e-mail sent by OpenERP. Do not reply.
      \n" +"Automatic e-mail sent by Odoo. Do not reply.
      \n" "Database : ${ctx.get('dbname')}\n" "

      \n" "
    \n" diff --git a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot index 95fe5ca84..0b55c781e 100644 --- a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot +++ b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot @@ -20,13 +20,13 @@ msgstr "" msgid "\n" "
    \n" "\n" -"

    OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" "\n" "${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" "\n" "\n" -"

    You may check the logs of the OpenERP server to get more information about this failure.

    \n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" "\n" "

    Properties of the scheduler ${object.name or ''} :

    \n" "
      \n" @@ -41,7 +41,7 @@ msgid "\n" "\n" "

      \n" "--
      \n" -"Automatic e-mail sent by OpenERP. Do not reply.
      \n" +"Automatic e-mail sent by Odoo. Do not reply.
      \n" "Database : ${ctx.get('dbname')}\n" "

      \n" "
    \n" diff --git a/scheduler_error_mailer/i18n/sl.po b/scheduler_error_mailer/i18n/sl.po index 13ac3181b..3f6d1f5a0 100644 --- a/scheduler_error_mailer/i18n/sl.po +++ b/scheduler_error_mailer/i18n/sl.po @@ -25,13 +25,13 @@ msgid "" " \n" "
    \n" "\n" -"

    OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" "\n" "${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" "\n" "\n" -"

    You may check the logs of the OpenERP server to get more information about this failure.

    \n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" "\n" "

    Properties of the scheduler ${object.name or ''} :

    \n" "
      \n" @@ -46,7 +46,7 @@ msgid "" "\n" "

      \n" "--
      \n" -"Automatic e-mail sent by OpenERP. Do not reply.
      \n" +"Automatic e-mail sent by Odoo. Do not reply.
      \n" "Database : ${ctx.get('dbname')}\n" "

      \n" "
    \n" diff --git a/scheduler_error_mailer/i18n/zh_CN.po b/scheduler_error_mailer/i18n/zh_CN.po index f312e6e0c..39488e991 100644 --- a/scheduler_error_mailer/i18n/zh_CN.po +++ b/scheduler_error_mailer/i18n/zh_CN.po @@ -25,13 +25,13 @@ msgid "" " \n" "
    \n" "\n" -"

    OpenERP tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" "\n" "${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" "\n" "\n" -"

    You may check the logs of the OpenERP server to get more information about this failure.

    \n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" "\n" "

    Properties of the scheduler ${object.name or ''} :

    \n" "
      \n" @@ -46,7 +46,7 @@ msgid "" "\n" "

      \n" "--
      \n" -"Automatic e-mail sent by OpenERP. Do not reply.
      \n" +"Automatic e-mail sent by Odoo. Do not reply.
      \n" "Database : ${ctx.get('dbname')}\n" "

      \n" "
    \n" diff --git a/scheduler_error_mailer/models/ir_cron.py b/scheduler_error_mailer/models/ir_cron.py index a6134be15..efb2a4bed 100644 --- a/scheduler_error_mailer/models/ir_cron.py +++ b/scheduler_error_mailer/models/ir_cron.py @@ -3,8 +3,8 @@ # © 2016 Sodexis # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields, api, _ -from openerp.exceptions import UserError +from odoo import models, fields, api, _ +from odoo.exceptions import UserError import logging From 582deb07117907b5dd3eb5a1da8fb36336797f28 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 11 Feb 2017 01:20:14 -0500 Subject: [PATCH 13/16] OCA Transbot updated translations from Transifex --- scheduler_error_mailer/i18n/de.po | 83 ++++++++++++++++++++++++++++++ scheduler_error_mailer/i18n/es.po | 84 +++++++++++++++++++++++++++++++ 2 files changed, 167 insertions(+) create mode 100644 scheduler_error_mailer/i18n/de.po create mode 100644 scheduler_error_mailer/i18n/es.po diff --git a/scheduler_error_mailer/i18n/de.po b/scheduler_error_mailer/i18n/de.po new file mode 100644 index 000000000..04a086156 --- /dev/null +++ b/scheduler_error_mailer/i18n/de.po @@ -0,0 +1,83 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +# Niki Waibel , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-08 03:37+0000\n" +"PO-Revision-Date: 2017-02-08 03:37+0000\n" +"Last-Translator: Niki Waibel , 2017\n" +"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: scheduler_error_mailer +#: model:mail.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +" \n" +"
    \n" +"\n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" +"\n" +"

    Properties of the scheduler ${object.name or ''} :

    \n" +"
      \n" +"
    • Model : ${object.model or ''}
    • \n" +"
    • Method : ${object.function or ''}
    • \n" +"
    • Arguments : ${object.args or ''}
    • \n" +"
    • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
    • \n" +"
    • Number of calls : ${object.numbercall or '0'}
    • \n" +"
    • Repeat missed : ${object.doall}
    • \n" +"
    • User : ${object.user_id.name or ''}
    • \n" +"
    \n" +"\n" +"

    \n" +"--
    \n" +"Automatic e-mail sent by Odoo. Do not reply.
    \n" +"Database : ${ctx.get('dbname')}\n" +"

    \n" +"
    \n" +" \n" +" " +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,field_description:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Error E-mail Template" +msgstr "Fehler e-Mail Vorlage" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,help:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "" +"Wähle die e-Mail Vorlage welche bei einem Fehler dieses Schedulers gesendet " +"wird." + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/models/ir_cron.py:55 +#, python-format +msgid "Task failure with UID = %d." +msgstr "Task Fehler von UID = %d." + +#. module: scheduler_error_mailer +#: model:mail.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FEHLER" + +#. module: scheduler_error_mailer +#: model:ir.model,name:scheduler_error_mailer.model_ir_cron +msgid "ir.cron" +msgstr "ir.cron" diff --git a/scheduler_error_mailer/i18n/es.po b/scheduler_error_mailer/i18n/es.po new file mode 100644 index 000000000..bc390a1be --- /dev/null +++ b/scheduler_error_mailer/i18n/es.po @@ -0,0 +1,84 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +# OCA Transbot , 2017 +# Fernando Lara , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2017-02-22 00:55+0000\n" +"PO-Revision-Date: 2017-02-22 00:55+0000\n" +"Last-Translator: Fernando Lara , 2017\n" +"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: scheduler_error_mailer +#: model:mail.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +" \n" +"
    \n" +"\n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" +"\n" +"

    Properties of the scheduler ${object.name or ''} :

    \n" +"
      \n" +"
    • Model : ${object.model or ''}
    • \n" +"
    • Method : ${object.function or ''}
    • \n" +"
    • Arguments : ${object.args or ''}
    • \n" +"
    • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
    • \n" +"
    • Number of calls : ${object.numbercall or '0'}
    • \n" +"
    • Repeat missed : ${object.doall}
    • \n" +"
    • User : ${object.user_id.name or ''}
    • \n" +"
    \n" +"\n" +"

    \n" +"--
    \n" +"Automatic e-mail sent by Odoo. Do not reply.
    \n" +"Database : ${ctx.get('dbname')}\n" +"

    \n" +"
    \n" +" \n" +" " +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,field_description:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Error E-mail Template" +msgstr "Plantilla de correo electrónico de error" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,help:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "" +"Seleccione la plantilla de correo electrónico que se enviará cuando falla " +"este planificador." + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/models/ir_cron.py:55 +#, python-format +msgid "Task failure with UID = %d." +msgstr "Error de Tarea con UID = %d." + +#. module: scheduler_error_mailer +#: model:mail.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model,name:scheduler_error_mailer.model_ir_cron +msgid "ir.cron" +msgstr "ir.cron" From 7145dd2040b83d8582cea713b6a9b10db3d5546d Mon Sep 17 00:00:00 2001 From: Andy Teijelo Date: Tue, 21 Mar 2017 17:17:08 -0400 Subject: [PATCH 14/16] [FIX] scheduler error mailer font typo (#765) * [FIX] scheduler_error_mailer font typo * [REM] Deleting scheduler_error_mailer.pot --- .../data/ir_cron_email_tpl.xml | 2 +- scheduler_error_mailer/i18n/de.po | 2 +- scheduler_error_mailer/i18n/es.po | 2 +- scheduler_error_mailer/i18n/pt_BR.po | 2 +- .../i18n/scheduler_error_mailer.pot | 76 ------------------- scheduler_error_mailer/i18n/sl.po | 2 +- scheduler_error_mailer/i18n/zh_CN.po | 2 +- 7 files changed, 6 insertions(+), 82 deletions(-) delete mode 100644 scheduler_error_mailer/i18n/scheduler_error_mailer.pot diff --git a/scheduler_error_mailer/data/ir_cron_email_tpl.xml b/scheduler_error_mailer/data/ir_cron_email_tpl.xml index 4e760765a..a6696e59f 100644 --- a/scheduler_error_mailer/data/ir_cron_email_tpl.xml +++ b/scheduler_error_mailer/data/ir_cron_email_tpl.xml @@ -13,7 +13,7 @@ +

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    diff --git a/scheduler_error_mailer/i18n/de.po b/scheduler_error_mailer/i18n/de.po index 04a086156..0d3289f65 100644 --- a/scheduler_error_mailer/i18n/de.po +++ b/scheduler_error_mailer/i18n/de.po @@ -23,7 +23,7 @@ msgstr "" msgid "" "\n" " \n" -"
    \n" +"
    \n" "\n" "

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" diff --git a/scheduler_error_mailer/i18n/es.po b/scheduler_error_mailer/i18n/es.po index bc390a1be..886bd77ea 100644 --- a/scheduler_error_mailer/i18n/es.po +++ b/scheduler_error_mailer/i18n/es.po @@ -24,7 +24,7 @@ msgstr "" msgid "" "\n" " \n" -"
    \n" +"
    \n" "\n" "

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" diff --git a/scheduler_error_mailer/i18n/pt_BR.po b/scheduler_error_mailer/i18n/pt_BR.po index 231579b1e..299bdd685 100644 --- a/scheduler_error_mailer/i18n/pt_BR.po +++ b/scheduler_error_mailer/i18n/pt_BR.po @@ -23,7 +23,7 @@ msgstr "" msgid "" "\n" " \n" -"
    \n" +"
    \n" "\n" "

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" diff --git a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot b/scheduler_error_mailer/i18n/scheduler_error_mailer.pot deleted file mode 100644 index 0b55c781e..000000000 --- a/scheduler_error_mailer/i18n/scheduler_error_mailer.pot +++ /dev/null @@ -1,76 +0,0 @@ -# Translation of Odoo Server. -# This file contains the translation of the following modules: -# * scheduler_error_mailer -# -msgid "" -msgstr "" -"Project-Id-Version: Odoo Server 8.0rc1\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-18 11:55+0000\n" -"PO-Revision-Date: 2014-09-18 11:55+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: scheduler_error_mailer -#: model:email.template,body_html:scheduler_error_mailer.scheduler_error_mailer -msgid "\n" -"
    \n" -"\n" -"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" -"\n" -"\n" -"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" -"\n" -"\n" -"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" -"\n" -"

    Properties of the scheduler ${object.name or ''} :

    \n" -"
      \n" -"
    • Model : ${object.model or ''}
    • \n" -"
    • Method : ${object.function or ''}
    • \n" -"
    • Arguments : ${object.args or ''}
    • \n" -"
    • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
    • \n" -"
    • Number of calls : ${object.numbercall or '0'}
    • \n" -"
    • Repeat missed : ${object.doall}
    • \n" -"
    • User : ${object.user_id.name or ''}
    • \n" -"
    \n" -"\n" -"

    \n" -"--
    \n" -"Automatic e-mail sent by Odoo. Do not reply.
    \n" -"Database : ${ctx.get('dbname')}\n" -"

    \n" -"
    \n" -" " -msgstr "" - -#. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:74 -#, python-format -msgid "Error :" -msgstr "" - -#. module: scheduler_error_mailer -#: field:ir.cron,email_template:0 -msgid "Error E-mail Template" -msgstr "" - -#. module: scheduler_error_mailer -#: help:ir.cron,email_template:0 -msgid "Select the email template that will be sent when this scheduler fails." -msgstr "" - -#. module: scheduler_error_mailer -#: code:addons/scheduler_error_mailer/ir_cron.py:75 -#, python-format -msgid "Task failure with UID = %d." -msgstr "" - -#. module: scheduler_error_mailer -#: model:email.template,subject:scheduler_error_mailer.scheduler_error_mailer -msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" -msgstr "" diff --git a/scheduler_error_mailer/i18n/sl.po b/scheduler_error_mailer/i18n/sl.po index 3f6d1f5a0..cfe317484 100644 --- a/scheduler_error_mailer/i18n/sl.po +++ b/scheduler_error_mailer/i18n/sl.po @@ -23,7 +23,7 @@ msgstr "" msgid "" "\n" " \n" -"
    \n" +"
    \n" "\n" "

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" diff --git a/scheduler_error_mailer/i18n/zh_CN.po b/scheduler_error_mailer/i18n/zh_CN.po index 39488e991..0d3711e24 100644 --- a/scheduler_error_mailer/i18n/zh_CN.po +++ b/scheduler_error_mailer/i18n/zh_CN.po @@ -23,7 +23,7 @@ msgstr "" msgid "" "\n" " \n" -"
    \n" +"
    \n" "\n" "

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" "\n" From a20f063edece83578b6cc621caa27e37843904f8 Mon Sep 17 00:00:00 2001 From: OCA Transbot Date: Sat, 3 Mar 2018 13:35:14 +0100 Subject: [PATCH 15/16] OCA Transbot updated translations from Transifex --- scheduler_error_mailer/i18n/hr.po | 81 +++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 scheduler_error_mailer/i18n/hr.po diff --git a/scheduler_error_mailer/i18n/hr.po b/scheduler_error_mailer/i18n/hr.po new file mode 100644 index 000000000..ad49ae240 --- /dev/null +++ b/scheduler_error_mailer/i18n/hr.po @@ -0,0 +1,81 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * scheduler_error_mailer +# +# Translators: +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-03-02 18:41+0000\n" +"PO-Revision-Date: 2018-03-02 18:41+0000\n" +"Last-Translator: Bole , 2018\n" +"Language-Team: Croatian (https://www.transifex.com/oca/teams/23907/hr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hr\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: scheduler_error_mailer +#: model:mail.template,body_html:scheduler_error_mailer.scheduler_error_mailer +msgid "" +"\n" +" \n" +"
    \n" +"\n" +"

    Odoo tried to run the scheduler ${object.name or ''} in the database ${ctx.get('dbname')} but it failed. Here is the error message :

    \n" +"\n" +"\n" +"${ctx.get('job_exception') and ctx.get('job_exception').value or 'Failed to get the error message from the context.'}\n" +"\n" +"\n" +"

    You may check the logs of the Odoo server to get more information about this failure.

    \n" +"\n" +"

    Properties of the scheduler ${object.name or ''} :

    \n" +"
      \n" +"
    • Model : ${object.model or ''}
    • \n" +"
    • Method : ${object.function or ''}
    • \n" +"
    • Arguments : ${object.args or ''}
    • \n" +"
    • Interval : ${object.interval_number or '0'} ${object.interval_type or ''}
    • \n" +"
    • Number of calls : ${object.numbercall or '0'}
    • \n" +"
    • Repeat missed : ${object.doall}
    • \n" +"
    • User : ${object.user_id.name or ''}
    • \n" +"
    \n" +"\n" +"

    \n" +"--
    \n" +"Automatic e-mail sent by Odoo. Do not reply.
    \n" +"Database : ${ctx.get('dbname')}\n" +"

    \n" +"
    \n" +" \n" +" " +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,field_description:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Error E-mail Template" +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model.fields,help:scheduler_error_mailer.field_ir_cron_email_template_id +msgid "Select the email template that will be sent when this scheduler fails." +msgstr "" + +#. module: scheduler_error_mailer +#: code:addons/scheduler_error_mailer/models/ir_cron.py:55 +#, python-format +msgid "Task failure with UID = %d." +msgstr "" + +#. module: scheduler_error_mailer +#: model:mail.template,subject:scheduler_error_mailer.scheduler_error_mailer +msgid "[DB ${ctx.get('dbname')}] Scheduler '${object.name or ''}' FAILED" +msgstr "" + +#. module: scheduler_error_mailer +#: model:ir.model,name:scheduler_error_mailer.model_ir_cron +msgid "ir.cron" +msgstr "ir.cron" From f6a4361f9b607c4d5c29db9ccb42e1fbdc299208 Mon Sep 17 00:00:00 2001 From: Achref Mhadhbi Date: Thu, 21 Jun 2018 12:15:53 +0200 Subject: [PATCH 16/16] [MIG] scheduler_error_mailer: Migration to 11.0 --- scheduler_error_mailer/README.rst | 3 ++- scheduler_error_mailer/__manifest__.py | 2 +- scheduler_error_mailer/demo/ir_cron_demo.xml | 6 ++++-- scheduler_error_mailer/models/__init__.py | 2 +- scheduler_error_mailer/models/ir_cron.py | 18 +++++++++--------- scheduler_error_mailer/views/ir_cron.xml | 3 ++- 6 files changed, 19 insertions(+), 15 deletions(-) diff --git a/scheduler_error_mailer/README.rst b/scheduler_error_mailer/README.rst index 9ba801de4..db7417404 100644 --- a/scheduler_error_mailer/README.rst +++ b/scheduler_error_mailer/README.rst @@ -24,7 +24,7 @@ To use this module, you need to: .. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas :alt: Try me on Runbot - :target: https://runbot.odoo-community.org/runbot/149/10.0 + :target: https://runbot.odoo-community.org/runbot/149/11.0 Bug Tracker =========== @@ -49,6 +49,7 @@ Contributors * David Beal * Alexis de Lattre * Sodexis +* Achraf Mhadhbi Maintainer diff --git a/scheduler_error_mailer/__manifest__.py b/scheduler_error_mailer/__manifest__.py index 0da065b2b..5c10761f2 100644 --- a/scheduler_error_mailer/__manifest__.py +++ b/scheduler_error_mailer/__manifest__.py @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- # © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre # © 2016 Sodexis +# © 2018 bloopark systems () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). { diff --git a/scheduler_error_mailer/demo/ir_cron_demo.xml b/scheduler_error_mailer/demo/ir_cron_demo.xml index 08368e8e7..80e3c88cb 100644 --- a/scheduler_error_mailer/demo/ir_cron_demo.xml +++ b/scheduler_error_mailer/demo/ir_cron_demo.xml @@ -3,6 +3,7 @@ scheduler_error_mailer for Odoo Copyright (C) 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre Copyright (C) 2016 Sodexis + Copyright (C) 2018 bloopark systems () The licence is in the file __openerp__.py --> @@ -18,8 +19,9 @@ -1 - ir.cron - _test_scheduler_failure + + code + model._test_scheduler_failure() diff --git a/scheduler_error_mailer/models/__init__.py b/scheduler_error_mailer/models/__init__.py index 91c8e5e18..151e123d9 100644 --- a/scheduler_error_mailer/models/__init__.py +++ b/scheduler_error_mailer/models/__init__.py @@ -1,6 +1,6 @@ -# -*- coding: utf-8 -*- # © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre # © 2016 Sodexis +# © 2018 bloopark systems () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from . import ir_cron diff --git a/scheduler_error_mailer/models/ir_cron.py b/scheduler_error_mailer/models/ir_cron.py index efb2a4bed..9eedcfa23 100644 --- a/scheduler_error_mailer/models/ir_cron.py +++ b/scheduler_error_mailer/models/ir_cron.py @@ -1,9 +1,9 @@ -# -*- coding: utf-8 -*- # © 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre # © 2016 Sodexis +# © 2018 bloopark systems () # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from odoo import models, fields, api, _ +from odoo import _, api, fields, models from odoo.exceptions import UserError import logging @@ -22,11 +22,12 @@ class IrCron(models.Model): ) @api.model - def _handle_callback_exception( - self, model_name, method_name, args, job_id, job_exception): - res = super(IrCron, self)._handle_callback_exception( - model_name, method_name, args, job_id, job_exception) - + def _handle_callback_exception(self, cron_name, server_action_id, job_id, + job_exception): + res = super(IrCron, self)._handle_callback_exception(cron_name, + server_action_id, + job_id, + job_exception) my_cron = self.browse(job_id) if my_cron.email_template_id: @@ -49,7 +50,6 @@ class IrCron(models.Model): @api.model def _test_scheduler_failure(self): - """This function is used to test and debug this module""" - + """This function is used to test and debug this module.""" raise UserError( _("Task failure with UID = %d.") % self._uid) diff --git a/scheduler_error_mailer/views/ir_cron.xml b/scheduler_error_mailer/views/ir_cron.xml index 3ade1e1b8..a6ee1f9da 100644 --- a/scheduler_error_mailer/views/ir_cron.xml +++ b/scheduler_error_mailer/views/ir_cron.xml @@ -3,6 +3,7 @@ scheduler_error_mailer for Odoo Copyright (C) 2012-2013 Akretion Sébastien BEAU,David Beal,Alexis de Lattre Copyright (C) 2016 Sodexis + Copyright (C) 2018 bloopark systems () The licence is in the file __openerp__.py --> @@ -11,7 +12,7 @@ ir.cron.error.mailer.form ir.cron - +