17 changed files with 498 additions and 0 deletions
			
			
		| @ -0,0 +1,31 @@ | |||
| Cron Job Failure Notifications v9 | |||
| ================================= | |||
| This module will generate error Logs for Scheduled Actions / Cron jobs running in backend server. | |||
| Purpose of module to have creating history & PDF reports of failure of all jobs in backend. | |||
| 
 | |||
| Features | |||
| ======== | |||
| * Any failure will automatically logged. | |||
| * PDF Report for error logs. | |||
| * Custom Error Logs Scheduled Actions Email Template. | |||
| 
 | |||
| Installation | |||
| ============ | |||
| No other requirements. | |||
| 
 | |||
| To test the module: | |||
| - Activate Developer mode | |||
| - Go to Settings --> Technical --> Automation --> Scheduled actions. | |||
| - Select the record "Test Cron Failure Notification" and check active button. | |||
| - Click the button 'Run Manually'. | |||
| - A log of scheduler failure will be created under the menu 'Logs Scheduled Actions'. | |||
| 
 | |||
| Configuration | |||
| ============= | |||
| To analyse/test the log history of cron failure, | |||
| Go to Settings --> Technical --> Automation --> Logs Scheduled Actions. | |||
| 
 | |||
| Credits | |||
| ======= | |||
| Developer: Mufeeda C K @ cybrosys | |||
| Guidance: Nilmar Shereef @ cybrosys, shereef@cybrosys.in | |||
| @ -0,0 +1,23 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################## | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | |||
| #    Author: Nilmar Shereef(<http://www.cybrosys.com>) | |||
| #    you can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    It is forbidden to publish, distribute, sublicense, or sell copies | |||
| #    of the Software or modified copies of the Software. | |||
| # | |||
| #    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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################## | |||
| import models | |||
| @ -0,0 +1,48 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################## | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | |||
| #    Author: Nilmar Shereef(<http://www.cybrosys.com>) | |||
| #    you can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    It is forbidden to publish, distribute, sublicense, or sell copies | |||
| #    of the Software or modified copies of the Software. | |||
| # | |||
| #    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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################## | |||
| { | |||
|     'name': "Cron Job Failure Notification", | |||
|     'summary': """Cron jobs/Scheduled Actions failure Log Notification & Its PDF Reports""", | |||
|     'description': """ | |||
|         This module will generate error Logs for Scheduled | |||
|         Actions / Cron jobs running in backend server | |||
|     """, | |||
|     'author': "Cybrosys Techno Solution", | |||
|     'website': "http://www.cybrosys.com", | |||
|     'category': 'Extra Tools', | |||
|     'depends': ['base', 'mail', 'web', 'base_setup'], | |||
|     'data': [ | |||
|         'views/logs_scheduled_actions_view.xml', | |||
|         'views/error_log_report_template.xml', | |||
|         'views/report.xml', | |||
|         'views/error_mail_template.xml', | |||
|     ], | |||
|     'demo': [ | |||
|         'demo/ir_cron_demo.xml', | |||
|     ], | |||
|     'images': ['static/description/banner.jpg'], | |||
|     'license': 'AGPL-3', | |||
|     'installable': True, | |||
|     'auto_install': False, | |||
|     'application': False, | |||
| } | |||
| @ -0,0 +1,19 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| 
 | |||
| <openerp> | |||
|     <data noupdate="1"> | |||
|         <record id="test_scheduler_error_mailer" model="ir.cron"> | |||
|             <field name="name">Test Cron Failure Notification</field> | |||
|             <field name="active" eval="False"/> | |||
|             <field name="user_id" ref="base.user_root"/> | |||
|             <field name="interval_number">1</field> | |||
|             <field name="interval_type">hours</field> | |||
|             <field name="numbercall">-1</field> | |||
|             <!-- don't limit the number of calls --> | |||
|             <field name="doall" eval="True"/> | |||
|             <field name="model">ir.cron</field> | |||
|             <field name="function">_test_scheduler_failure</field> | |||
|             <field name="email_template_id" ref="cron_failure_notification.scheduler_error_mailer"/> | |||
|         </record> | |||
|     </data> | |||
| </openerp> | |||
| @ -0,0 +1,23 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################## | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | |||
| #    Author: Nilmar Shereef(<http://www.cybrosys.com>) | |||
| #    you can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    It is forbidden to publish, distribute, sublicense, or sell copies | |||
| #    of the Software or modified copies of the Software. | |||
| # | |||
| #    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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################## | |||
| import logs_scheduled_actions | |||
| @ -0,0 +1,115 @@ | |||
| # -*- coding: utf-8 -*- | |||
| ############################################################################## | |||
| # | |||
| #    Cybrosys Technologies Pvt. Ltd. | |||
| #    Copyright (C) 2009-TODAY Cybrosys Technologies(<http://www.cybrosys.com>). | |||
| #    Author: Nilmar Shereef(<http://www.cybrosys.com>) | |||
| #    you can modify it under the terms of the GNU LESSER | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3), Version 3. | |||
| # | |||
| #    It is forbidden to publish, distribute, sublicense, or sell copies | |||
| #    of the Software or modified copies of the Software. | |||
| # | |||
| #    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 LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details. | |||
| # | |||
| #    You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE | |||
| #    GENERAL PUBLIC LICENSE (LGPL v3) along with this program. | |||
| #    If not, see <http://www.gnu.org/licenses/>. | |||
| # | |||
| ############################################################################## | |||
| import datetime | |||
| import logging | |||
| from openerp import models, fields, api, _ | |||
| from openerp.exceptions import UserError | |||
| 
 | |||
| 
 | |||
| class LogsScheduledActions(models.Model): | |||
|     _description = "Error log" | |||
|     _name = 'logs.action' | |||
|     _inherit = ['mail.thread', 'ir.needaction_mixin', 'ir.cron'] | |||
| 
 | |||
|     name = fields.Char(string="Name", required=True, track_visibility='always') | |||
|     method = fields.Char(string="Method", track_visibility='always') | |||
|     created_by = fields.Many2one('res.users', string="Created by", default=lambda self: self.env.user, index=True) | |||
|     object_action = fields.Char(string="Object", track_visibility='always') | |||
|     exec_date = fields.Datetime(string="Execution Date Time") | |||
|     company_name = fields.Many2one('res.company', string="Company",  default=lambda self: self.env.user.company_id, | |||
|                                    index=True) | |||
|     stages_id = fields.Selection( | |||
|         [('new', 'New'), ('confirm', 'Confirmed'), ('resolved', 'Resolved'), ('cancelled', 'Cancelled')], string="State", default='new') | |||
|     error_details = fields.Char(string="Error details", track_visibility='always') | |||
| 
 | |||
|     @api.multi | |||
|     def action_mail_send(self): | |||
|         self.ensure_one() | |||
|         ir_model_data = self.env['ir.model.data'] | |||
|         template_id = ir_model_data.get_object_reference('cron_failure_notification', | |||
|                                                          'scheduler_error_mailer')[1] | |||
|         try: | |||
|             compose_form_id = ir_model_data.get_object_reference('mail', 'email_compose_message_wizard_form')[1] | |||
|         except ValueError: | |||
|             compose_form_id = False | |||
|         ctx = dict(self.env.context or {}) | |||
|         ctx.update({ | |||
|             'default_model': 'logs.action', | |||
|             'default_res_id': self.ids[0], | |||
|             'default_use_template': bool(template_id), | |||
|             'default_template_id': template_id, | |||
|             'default_composition_mode': 'comment', | |||
|         }) | |||
| 
 | |||
|         return { | |||
|             'name': _('Compose Email'), | |||
|             'type': 'ir.actions.act_window', | |||
|             'view_type': 'form', | |||
|             'view_mode': 'form', | |||
|             'res_model': 'mail.compose.message', | |||
|             'views': [(compose_form_id, 'form')], | |||
|             'view_id': compose_form_id, | |||
|             'target': 'new', | |||
|             'context': ctx, | |||
|         } | |||
| 
 | |||
|     @api.multi | |||
|     def button_confirm_action(self): | |||
|         self.write({'stages_id': 'confirm'}) | |||
| 
 | |||
|     @api.multi | |||
|     def button_resolved_action(self): | |||
|         self.write({'stages_id': 'resolved'}) | |||
| 
 | |||
|     @api.multi | |||
|     def button_cancel_action(self): | |||
|         self.write({'stages_id': 'cancelled'}) | |||
| 
 | |||
| _logger = logging.getLogger(__name__) | |||
| 
 | |||
| 
 | |||
| class IrCron(models.Model): | |||
|     _inherit = "ir.cron" | |||
| 
 | |||
|     @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) | |||
|         self.env['logs.action'].create({ | |||
|             'name': my_cron.name, | |||
|             'method': my_cron.model, | |||
|             'object_action': my_cron.function, | |||
|             'exec_date': datetime.datetime.now(), | |||
|             'error_details': str(job_exception), | |||
|         }) | |||
| 
 | |||
|         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) | |||
| After Width: | Height: | Size: 144 KiB | 
| After Width: | Height: | Size: 50 KiB | 
| After Width: | Height: | Size: 12 KiB | 
| @ -0,0 +1,71 @@ | |||
| <section class="oe_container"> | |||
|     <div class="oe_row oe_spaced"> | |||
|         <h2 class="oe_slogan">Cron Job Failure Notification</h2> | |||
|         <h3 class="oe_slogan"><center>Error Logs for Scheduled Actions/Cron jobs running in backend server.</center></h3> | |||
|         <h4 class="oe_slogan">Cybrosys Technologies , www.cybrosys.com</h4> | |||
| 
 | |||
|     </div> | |||
|     <div> | |||
|         <h4><p>Major Features:</p></h4> | |||
|         <ul> | |||
|            <li style="list-style:none !important;"><span style="color:green;"> →</span>   Creating Failure History for All Jobs in Backend.</li> | |||
|             <li style="list-style:none !important;"><span style="color:green;"> →</span>   Failure Report Will Automatically Logged.</li> | |||
|             <li style="list-style:none !important;"><span style="color:green;"> →</span>   Administrator Can Review Logs.</li> | |||
|             <li style="list-style:none !important;"><span style="color:green;"> →</span>   Send Report to Support/Technical Team by Email Button.</li> | |||
|             <li style="list-style:none !important;"><span style="color:green;"> →</span>   Custom Email Template for Sending Mail with Failure Details.</li> | |||
|         </ul> | |||
|     </div> | |||
| </section> | |||
| 
 | |||
| <section class="oe_container oe_dark"> | |||
|     <h3 class="oe_slogan">Error Logs Scheduled Actions - Form View</h3> | |||
|     <div class="oe_bg_img"> | |||
|         <img class="oe_picture oe_screenshot" src="logs_form_view.png"> | |||
|     </div> | |||
| </section> | |||
| 
 | |||
| <section class="oe_container"> | |||
|     <h3 class="oe_slogan">Print PDF Report- Error Logs Scheduled</h3> | |||
|     <div class="oe_bg_img"> | |||
|         <img class="oe_picture oe_screenshot" src="logs_pdf_report.png"> | |||
|     </div> | |||
| </section> | |||
| 
 | |||
| <section class="oe_container oe_dark"> | |||
|     <h3 class="oe_slogan">Send By Email - Error Logs Scheduled Actions Attaching PDF Report</h3> | |||
|     <div class="oe_bg_img"> | |||
|         <img class="oe_picture oe_screenshot" src="logs_mail_template.png"> | |||
|     </div> | |||
| </section> | |||
| 
 | |||
| <section class="oe_container"> | |||
|     <h3 class="oe_slogan" style="text-align:left;padding-left: 23px;">How to test this module ?</h3> | |||
|     <div> | |||
|         <p> | |||
|             <ul> | |||
|                 <li>Activate Developer mode.</li> | |||
|                 <li>Go to Settings --> Technical --> Automation --> Scheduled actions.</li> | |||
|                 <li>Select the record "Test Cron Failure Notification" and check active button.</li> | |||
|                 <li>Click the button 'Run Manually'.</li> | |||
|                 <li>A log of scheduler failure will be created under the menu 'Logs Scheduled Actions'.</li> | |||
|                 <li>For more details, Please see the README.rst file with this module.</li> | |||
|             </ul> | |||
|         </p> | |||
|     </div> | |||
| </section> | |||
| 
 | |||
| <section class="oe_container oe_dark"> | |||
|     <h2 class="oe_slogan" style="margin-top:20px;" >Need Any Help?</h2> | |||
|     <div class="oe_slogan" style="margin-top:10px !important;"> | |||
|         <a  class="btn btn-primary btn-lg mt8" | |||
|             style="color: #FFFFFF !important;" href="http://www.cybrosys.com"><i | |||
|             class="fa fa-envelope"></i> Email </a> <a | |||
|             class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" | |||
|             href="http://www.cybrosys.com/contact/"><i | |||
|             class="fa fa-phone"></i> Contact Us </a> <a | |||
|             class="btn btn-primary btn-lg mt8" style="color: #FFFFFF !important;" | |||
|             href="http://www.cybrosys.com/odoo-customization-and-installation/"><i | |||
|             class="fa fa-check-square"></i> Request Customization </a> | |||
|     </div> | |||
|             <img src="cybro_logo.png" style="width: 190px; margin-bottom: 20px;" class="center-block"> | |||
| </section> | |||
| After Width: | Height: | Size: 93 KiB | 
| After Width: | Height: | Size: 94 KiB | 
| After Width: | Height: | Size: 41 KiB | 
| @ -0,0 +1,54 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <openerp> | |||
|     <data> | |||
|         <template id="report_log_error"> | |||
|             <t t-call="report.html_container"> | |||
|                 <t t-call="report.internal_layout"> | |||
|                     <div class="page"> | |||
|                         <p t-esc="res_company.name"/> | |||
|                         <h2> | |||
|                         <span t-field="doc.name"/> | |||
|                         </h2> | |||
|                         <table class="table"> | |||
|                             <tbody> | |||
|                                 <tr t-if="doc.object_action"> | |||
|                                     <th>Object:</th> | |||
|                                     <td><span t-field="doc.object_action"/></td> | |||
|                                 </tr> | |||
|                                 <tr t-if="doc.method"> | |||
|                                     <th>Method:</th> | |||
|                                     <td><span t-field="doc.method"/></td> | |||
|                                 </tr> | |||
|                                 <tr t-if="doc.created_by"> | |||
|                                     <th>Responsible user:</th> | |||
|                                     <td><span t-field="doc.created_by"/></td> | |||
|                                 </tr> | |||
|                                 <tr t-if="doc.exec_date"> | |||
|                                     <th>Execution Date Time:</th> | |||
|                                     <td><span t-field="doc.exec_date"/></td> | |||
|                                 </tr> | |||
|                                 <tr t-if="doc.company_name"> | |||
|                                     <th>Company:</th> | |||
|                                     <td><span t-field="doc.company_name"/></td> | |||
|                                 </tr> | |||
|                             </tbody> | |||
|                         </table> | |||
|                         <br/><br/> | |||
|                         <strong><p>Error: </p></strong> | |||
|                         <p t-field="doc.error_details"/> | |||
|                     <div class="oe_structure"/> | |||
|                     </div> | |||
|                 </t> | |||
|             </t> | |||
|         </template> | |||
| 
 | |||
|         <template id="report_logs_details"> | |||
|             <t t-call="report.html_container"> | |||
|                 <t t-foreach="docs" t-as="doc"> | |||
|                     <t t-call="cron_failure_notification.report_log_error" /> | |||
|                 </t> | |||
|             </t> | |||
|         </template> | |||
| 
 | |||
|     </data> | |||
| </openerp> | |||
| @ -0,0 +1,25 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| 
 | |||
| <openerp> | |||
|     <data noupdate="1"> | |||
| 
 | |||
|         <!-- Error Email template  --> | |||
|         <record id="scheduler_error_mailer" model="mail.template"> | |||
|             <field name="name">Scheduler Error</field> | |||
|             <field name="email_from">${object.user_id.email}</field> | |||
|             <field name="subject">'${object.name}' FAILED</field> | |||
|             <field name="report_template" ref="action_report_logs"/> | |||
|             <field name="model_id" ref="cron_failure_notification.model_logs_action"/> | |||
|             <field name="auto_delete" eval="True"/> | |||
|             <field name="body_html"> | |||
|                 <![CDATA[ | |||
|                 Dear Support team,<br> | |||
|                 <p>Here we are attaching error logs from scheduled cron jobs on our server, so please | |||
|                 urgently take action.<br> If you have any question, don't hesitate to contact us.<br></p><br> | |||
|                 Thank You. | |||
|                 ]]> | |||
|             </field> | |||
|         </record> | |||
| 
 | |||
|     </data> | |||
| </openerp> | |||
| @ -0,0 +1,77 @@ | |||
| <?xml version="1.0" encoding="utf-8"?> | |||
| <openerp> | |||
|     <data> | |||
|         <record model="ir.ui.view" id="developer_mode_active_form"> | |||
|             <field name="name">DeveloperMode</field> | |||
|             <field name="model"></field> | |||
|             <field name="inherit_id" ref="web.login"/> | |||
|             <field name="arch" type="xml"> | |||
|                 <xpath expr="//input[@name='redirect']" position='attributes'> | |||
|                     <attribute name="t-att-value">'%s%sdebug=1' % (redirect or '/web', redirect and '?' in redirect and '&' or '?')</attribute> | |||
|                 </xpath> | |||
|             </field> | |||
|         </record> | |||
|         <record id="logs_form_view" model="ir.ui.view"> | |||
|             <field name="name">logs.action.form</field> | |||
|             <field name="model">logs.action</field> | |||
|             <field name="view_type">form</field> | |||
|             <field name="view_type">form</field> | |||
|             <field name="arch" type="xml"> | |||
|                 <form string="Logs"> | |||
|                     <header> | |||
|                         <button name="button_confirm_action" string="Confirm" type="object" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'new')]}"/> | |||
|                         <button name="button_cancel_action" string="Cancel" type="object" attrs="{'invisible': [('stages_id', '!=', 'new')]}"/> | |||
|                         <button name="button_resolved_action" string="Resolve" type="object" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'confirm')]}"/> | |||
|                         <button name="action_mail_send" string="Send By Email" type="object" context="{'send_mail':True}" class="oe_highlight" attrs="{'invisible': [('stages_id', '!=', 'confirm')]}"/> | |||
|                         <field name="stages_id" widget="statusbar"/> | |||
|                     </header> | |||
|                     <sheet string="Logs"> | |||
|                         <group> | |||
|                             <group> | |||
|                                 <field name="name"/> | |||
|                                 <field name="method"/> | |||
|                                 <field name="created_by"/> | |||
|                             </group> | |||
|                             <group> | |||
|                                 <field name="object_action"/> | |||
|                                 <field name="exec_date"/> | |||
|                                 <field name="company_name"/> | |||
|                             </group> | |||
|                         </group> | |||
|                         <notebook> | |||
|                             <page name="error_info" string="Error"> | |||
|                                 <field name="error_details"/> | |||
|                             </page> | |||
|                         </notebook> | |||
|                     </sheet> | |||
|                     <div class="oe_chatter"> | |||
|                         <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/> | |||
|                         <field name="message_ids" widget="mail_thread"/> | |||
|                     </div> | |||
|                 </form> | |||
|             </field> | |||
|         </record> | |||
| 
 | |||
|         <record model="ir.ui.view" id="logs_tree_view"> | |||
|             <field name="name">logs.action.tree</field> | |||
|             <field name="model">logs.action</field> | |||
|             <field name="arch" type="xml"> | |||
|                 <tree string="Logs"> | |||
|                     <field name="name"/> | |||
|                     <field name="exec_date"/> | |||
|                     <field name="stages_id"/> | |||
|                 </tree> | |||
|             </field> | |||
|         </record> | |||
| 
 | |||
|         <record id="ir_cron_act_logs" model="ir.actions.act_window"> | |||
|             <field name="name">Logs Scheduled Actions</field> | |||
|             <field name="res_model">logs.action</field> | |||
|             <field name="view_type">form</field> | |||
|             <field name="view_mode">form,tree</field> | |||
|             <field name="view_id" ref="logs_tree_view"/> | |||
|         </record> | |||
| 
 | |||
|         <menuitem id="menu_ir_cron_logs" action="ir_cron_act_logs" parent="base.menu_automation"/> | |||
|     </data> | |||
| </openerp> | |||
| @ -0,0 +1,12 @@ | |||
| <openerp> | |||
|     <data> | |||
|          <report id="action_report_logs" | |||
|                  model="logs.action" | |||
|                  string="Print Log Scheduled" | |||
|                  report_type="qweb-pdf" | |||
|                  file="cron_failure_notification.report_logs_details" | |||
|                  name="cron_failure_notification.report_logs_details" | |||
|                  menu="True" | |||
|          /> | |||
|     </data> | |||
| </openerp> | |||
					Loading…
					
					
				
		Reference in new issue