Skip to content

[ADD] auto_invoice_email: Auto-send posted invoices older than configured days #885

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 1 commit into
base: 18.0
Choose a base branch
from
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
3 changes: 3 additions & 0 deletions auto_invoice_email/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from . import models

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing copyright statement

14 changes: 14 additions & 0 deletions auto_invoice_email/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"name": "Auto Invoice Email",
"version": "1.0",
"summary": "Automatically send posted invoices by email after configured days",
"category": "Accounting",
"author": "Rohit",
"depends": ["account"],
"data": [
"views/res_config_settings_views.xml",
"data/auto_send_cron.xml",
],
"installable": True,
"license": "LGPL-3",
}
12 changes: 12 additions & 0 deletions auto_invoice_email/data/auto_send_cron.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<odoo>
<record id="ir_cron_auto_send_invoices" model="ir.cron">
<field name="name">Auto Send Posted Invoices</field>
<field name="model_id" ref="account.model_account_move"/>
<field name="user_id" ref="base.user_root" />
<field name="state">code</field>
<field name="code">model._auto_send_invoices()</field>
<field name="interval_number">1</field>
<field name="interval_type">days</field>
<field name="active" eval="True" />
</record>
</odoo>
4 changes: 4 additions & 0 deletions auto_invoice_email/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from . import res_config_settings

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missing copyright statment

from . import account_move
22 changes: 22 additions & 0 deletions auto_invoice_email/models/account_move.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import models, api

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Missing copyright statement

from datetime import datetime, timedelta


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

@api.model
def _auto_send_invoices(self):
# Using sudo to access system parameters that are not user-specific and may be restricted
days = int(self.env["ir.config_parameter"].sudo().get_param("auto_invoice_email.days", default=0))
if days <= 0:
return

target_date = datetime.today().date() - timedelta(days=days)
invoices = self.search([("state", "=", "posted"), ("invoice_date", "=", target_date), ("move_type", "in", ("out_invoice", "out_refund"))])
template = self.env.ref("account.email_template_edi_invoice")
for invoice in invoices:
template.with_context(force_send=True).send_mail(invoice.id, force_send=True)
invoice.message_post(body="Invoice automatically sent by cron job.", message_type="comment")
29 changes: 29 additions & 0 deletions auto_invoice_email/models/res_config_settings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.

from odoo import models, fields, api


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

auto_send_invoice_days = fields.Integer(string="Send invoices after (days)")

def set_values(self):
super().set_values()
self.env["ir.config_parameter"].sudo().set_param(
"auto_invoice_email.days", self.auto_send_invoice_days
)

@api.model
def get_values(self):
res = super().get_values()
res.update(
{
"auto_send_invoice_days": int(
self.env["ir.config_parameter"]
.sudo()
.get_param("auto_invoice_email.days", default=0)
)
}
)
return res
14 changes: 14 additions & 0 deletions auto_invoice_email/views/res_config_settings_views.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<odoo>
<record id="view_res_config_settings_inherit_auto_invoice" model="ir.ui.view">
<field name="name">res.config.settings.inherit.auto.invoice</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[@id='invoicing_settings']" position="inside">
<setting id="auto_send_invoice_setting" help="Send invoices automatically after X days">
<field name="auto_send_invoice_days" placeholder="Enter days"/>
</setting>
</xpath>
</field>
</record>
</odoo>