Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions send_invoice_email/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
from . import models
19 changes: 19 additions & 0 deletions send_invoice_email/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
'name': 'Send Invoice Email',
'version': '1.0',
'summary': 'Automatically send invoices by email after configurable days',
'author': 'rodh',
'category': 'Accounting',
"license": "LGPL-3",
'depends': [
'account',
'base',
],
'data': [
'views/res_config_settings_view.xml',
'views/ir_cron_data.xml',
],
'installable': True,
'application': False,
'auto_install': False,
}
2 changes: 2 additions & 0 deletions send_invoice_email/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import res_config_settings
from . import account_move
33 changes: 33 additions & 0 deletions send_invoice_email/models/account_move.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from odoo import fields, models
from datetime import timedelta


class AccountMove(models.Model):
_inherit = 'account.move'

def _send_email_invoice(self):

hour = self.env['ir.config_parameter'].sudo().get_param('send_invoice_email.send_invoice_by_email')

if hour is None:
return

try:
hour = int(hour)
except ValueError:
return

target_date = fields.Datetime.now() - timedelta(hours=hour)

invoices = self.search([
('invoice_date', '<=', target_date.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)
7 changes: 7 additions & 0 deletions send_invoice_email/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from odoo import fields, models


class ResConfigSettings(models.TransientModel):
_inherit = 'res.config.settings'

send_invoice_by_email = fields.Integer(string='Send invoice by email after (days)', config_parameter="send_invoice_email.send_invoice_by_email")
12 changes: 12 additions & 0 deletions send_invoice_email/views/ir_cron_data.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="ir_cron_send_email_invoice" model="ir.cron">
<field name="name">Send Invoice By Email</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="state">code</field>
<field name="code">model._send_email_invoice()</field>
<field name="interval_number">1</field>
<field name="interval_type">hours</field>
<field name="active">True</field>
</record>
</odoo>
19 changes: 19 additions & 0 deletions send_invoice_email/views/res_config_settings_view.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_res_config_settings_view" model="ir.ui.view">
<field name="name">res.config.settings.inherit.view.form</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="account.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//block//setting[@id='total_amount_words']" position="after">
<setting id="automatic_send_invoice">
<label for="send_invoice_by_email" />
<div>
<field name="send_invoice_by_email" class="oe_inline" />
<span>hours</span>
</div>
</setting>
</xpath>
</field>
</record>
</odoo>