diff --git a/send_invoice/__init__.py b/send_invoice/__init__.py new file mode 100644 index 00000000000..d6210b1285d --- /dev/null +++ b/send_invoice/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/send_invoice/__manifest__.py b/send_invoice/__manifest__.py new file mode 100644 index 00000000000..16fde1776fc --- /dev/null +++ b/send_invoice/__manifest__.py @@ -0,0 +1,12 @@ +{ + "name": "send invoice via mail", + "version": "1.0", + "author": "gasa", + "license": "LGPL-3", + "depends": ["account"], + "application": True, + "installable": True, + "data": [ + "views/res_config_settings.xml" + ] +} diff --git a/send_invoice/models/__init__.py b/send_invoice/models/__init__.py new file mode 100644 index 00000000000..4d22fc68fb2 --- /dev/null +++ b/send_invoice/models/__init__.py @@ -0,0 +1,4 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import res_config_settings +from . import send_email diff --git a/send_invoice/models/res_config_settings.py b/send_invoice/models/res_config_settings.py new file mode 100644 index 00000000000..c262e70868d --- /dev/null +++ b/send_invoice/models/res_config_settings.py @@ -0,0 +1,8 @@ +from odoo import fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + send_invoice_via_email = fields.Integer(String="send invoice by email", config_parameter="send_invoice.send_invoice_via_email" +) diff --git a/send_invoice/models/send_email.py b/send_invoice/models/send_email.py new file mode 100644 index 00000000000..be847cf7956 --- /dev/null +++ b/send_invoice/models/send_email.py @@ -0,0 +1,35 @@ + +from odoo import models, fields +from datetime import timedelta + + +class SendEmail(models.Model): + _inherit = "account.move" + + def _send_email_invoice(self): + """ + Use sudo() to bypass access rights when reading system parameters. + Using sudo ensures the method can always retrieve the configuration + value regardless of the user's permissions. + """ + hour = self.env['ir.config_parameter'].sudo().get_param('send_invoice.send_invoice_via_email') + if not hour: + return + + try: + hour = int(hour) + except ValueError: + return + + target_date = fields.Datetime.now() - timedelta(hours=hour) + invoices = self.search([ + ('invoice_date', '=', target_date), + ('payment_state', '!=', 'paid'), + ('state', '=', 'posted') + ]) + template = self.env.ref('account.email_template_edi_invoice', raise_if_not_found=False) + if not template: + return + + for invoice in invoices: + template.send_mail(invoice.id, force_send=True) diff --git a/send_invoice/views/ir_corn_send_email.xml b/send_invoice/views/ir_corn_send_email.xml new file mode 100644 index 00000000000..0bcd4a2a6e1 --- /dev/null +++ b/send_invoice/views/ir_corn_send_email.xml @@ -0,0 +1,11 @@ + + + Send Invoice Email + + code + model._send_email_invoice() + 6 + hours + + + diff --git a/send_invoice/views/res_config_settings.xml b/send_invoice/views/res_config_settings.xml new file mode 100644 index 00000000000..b66d4559118 --- /dev/null +++ b/send_invoice/views/res_config_settings.xml @@ -0,0 +1,20 @@ + + + + res.config.settings.inherit.view.form + res.config.settings + + + + + + + + +