Skip to content
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

[11.0][MIG] mig-account_invoice_overdue_reminder #301

Closed
Closed
Show file tree
Hide file tree
Changes from 60 commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
ebe92a1
Add module account_invoice_overdue_reminder
alexis-via Jun 15, 2020
ef2962b
Switch row and col in pivot view of overdue reminders
alexis-via Jun 19, 2020
452603f
overdue_reminder: explicit error when email is missing
alexis-via Jun 22, 2020
5d0fc07
[FIX] overdue_reminder: don't link mail.template to a wizard record !
alexis-via Sep 11, 2020
3abf8a7
overdue_reminder: use form_view_ref to display customer invoice form …
alexis-via Sep 11, 2020
4c15883
overdue_reminder: Order overdue invoices starting from oldest (NOTE: …
alexis-via Nov 12, 2020
227080d
overdue_reminder: link mails to res.partner
alexis-via Nov 12, 2020
e5b61e8
Add migration script for my previous commit
alexis-via Nov 13, 2020
f897a6e
Improve string and fix translation of selection field
Nov 24, 2020
426956d
Fix translation of selection field
Nov 24, 2020
1efe16a
[UPD] Update account_invoice_overdue_reminder.pot
oca-travis Mar 30, 2021
43283a4
[UPD] README.rst
OCA-git-bot Mar 30, 2021
111fb76
[ADD] icon.png
OCA-git-bot Mar 30, 2021
57e0980
Added translation using Weblate (Italian)
eLBati Apr 7, 2021
a4b6def
Added translation using Weblate (French)
ypapouin Apr 8, 2021
5d65c1d
Translated using Weblate (French)
ypapouin Apr 8, 2021
706b426
Added translation using Weblate (Portuguese)
alvarorib Apr 9, 2021
64b7dd3
Translated using Weblate (Portuguese)
alvarorib Apr 9, 2021
16d47ee
Translated using Weblate (Italian)
eLBati Apr 20, 2021
70c4b60
Translated using Weblate (Italian)
Jun 29, 2021
b246602
Translated using Weblate (Italian)
Jun 29, 2021
f4b7f99
Translated using Weblate (Italian)
sergiocorato Sep 13, 2021
ddfbb64
Translated using Weblate (Italian)
sergiocorato Sep 13, 2021
b339f1c
FIX account_invoice_overdue_reminder preventing to delete template us…
eLBati Jul 13, 2021
4ecd94b
[IMP] account_invoice_overdue_reminder: allow to remove some undesire…
legalsylvain Feb 15, 2022
5ac8e2b
Added translation using Weblate (Turkish)
aaltinisik Apr 2, 2022
6f1bb09
Translated using Weblate (Turkish)
aaltinisik Apr 3, 2022
d3de780
[FIX] account_invoice_overdue_reminder: remove mig script 12.0.2.0.0
alexis-via Apr 4, 2022
ea7c08d
[UPD] Update account_invoice_overdue_reminder.pot
oca-travis Jul 4, 2022
59916be
account_invoice_overdue_reminder 12.0.2.1.0
OCA-git-bot Jul 4, 2022
0fa5c16
Update translation files
oca-transbot Jul 4, 2022
ff61f7d
[UPD] Update account_invoice_overdue_reminder.pot
oca-travis Jul 18, 2022
49926f3
account_invoice_overdue_reminder 12.0.2.1.1
OCA-git-bot Jul 18, 2022
c15c5d0
Update translation files
oca-transbot Jul 18, 2022
f6f4309
[IMP] account_invoice_overdue_reminder: Add credit notes to overdue e…
carmenbianca Oct 27, 2022
b2c23ae
[IMP] account_invoice_overdue_reminder: Remove unreconciled button
carmenbianca Oct 28, 2022
d692ccf
[IMP] account_invoice_overdue_reminder: Change log
carmenbianca Oct 28, 2022
c34cfc0
[FIX] account_invoice_overdue_reminder: Widen restraint to credit notes
carmenbianca Nov 30, 2022
905a025
Translated using Weblate (Italian)
francesco-ooops Dec 30, 2022
5dc20d8
Translated using Weblate (Italian)
francesco-ooops Jan 2, 2023
62d1b03
Translated using Weblate (Italian)
francesco-ooops Jan 26, 2023
925e8cc
Translated using Weblate (Italian)
francesco-ooops Feb 1, 2023
963adf3
[12.0][FIX]account_invoicE_overduE_reminder:Avoid ensure_one errors
Lopsanz Feb 13, 2023
26d6aa6
Translated using Weblate (Italian)
mymage Mar 30, 2023
b46ba17
Translated using Weblate (Italian)
mymage Apr 3, 2023
c0897aa
Translated using Weblate (Italian)
mymage Apr 10, 2023
d2001f8
[UPD] Update account_invoice_overdue_reminder.pot
Apr 30, 2023
2572645
[UPD] changelog
OCA-git-bot Apr 30, 2023
d70c644
[UPD] README.rst
OCA-git-bot Apr 30, 2023
a48cc4d
account_invoice_overdue_reminder 12.0.2.2.0
OCA-git-bot Apr 30, 2023
6708993
Update translation files
weblate Apr 30, 2023
f9bb690
Translated using Weblate (Italian)
mymage Jun 15, 2023
afd5794
[UPD] Update account_invoice_overdue_reminder.pot
Jun 19, 2023
d22c370
account_invoice_overdue_reminder 12.0.2.2.1
OCA-git-bot Jun 19, 2023
e630406
Update translation files
weblate Jun 19, 2023
e7cc409
Added translation using Weblate (Dutch)
bosd Jun 27, 2023
3afcb7a
Translated using Weblate (Dutch)
bosd Jun 27, 2023
4c319ef
Translated using Weblate (Italian)
francesco-ooops Jul 11, 2023
ff7ee0d
Translated using Weblate (Italian)
francesco-ooops Jul 12, 2023
232f123
[MIG] account_invoice_overdue_reminder: Migration to 11.0
Bearnard21 Aug 8, 2023
27f15bd
[FIX] account_invoice_overdue_reminder: datetime fixed
Bearnard21 Aug 25, 2023
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
141 changes: 141 additions & 0 deletions account_invoice_overdue_reminder/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
========================
Overdue Invoice Reminder
========================

.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fcredit--control-lightgray.png?logo=github
:target: https://github.com/OCA/credit-control/tree/12.0/account_invoice_overdue_reminder
:alt: OCA/credit-control
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/credit-control-12-0/credit-control-12-0-account_invoice_overdue_reminder
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png
:target: https://runbot.odoo-community.org/runbot/262/12.0
:alt: Try me on Runbot

|badge1| |badge2| |badge3| |badge4| |badge5|

This Odoo module is designed to send overdue invoice reminders to customers. It handles reminders by e-mail, letter and phone.

This module is an alternative to the OCA module *account_credit_control*. Why another module for invoice reminders ? Because the module *account_credit_control* is quite complex (we experienced that some users find it too complex and eventually stop using it) and its interface is designed to send massive volume of reminders.

This module has been designed from the start with the following priorities:

* **keep control**: you must keep tight control on the overdue invoice reminders that you send. Overdue invoice reminders are part of the communication with your customers, and this is very important to keep a good relation with your customers.
* **usability**: the module is easy to configure and easy to use.
* **no accounting skills needed**: the module can be used by users without accounting skills. It can even be used by salesman!
* **multi-currency**: if you invoice your customer in another currency that your company currency, the invoice reminders only mention the currency of the invoices. And if you invoice a customer with different currencies, the reminder is clear and easy-to-understand by your customer, with a total residual per currency.
* **multi-channel**: supports overdue invoice reminders by e-mail (default), phone and letter.
* **simplicity**: for the developers, the code is small and easy to understand.

The specifications written before starting the development of this module are written in this `document <https://docs.google.com/document/d/1JIIAP5QsItbJ1zLiaGHuR0RAQplEGv3diOl-d4mS__I/edit?usp=sharing>`_ (in French).

The module has one important limitation: it sends a reminder for an invoice when it has past it's *Due Date* (which is in fact the *Final Due Date*): if the invoice has a payment term with several lines, it won't send a reminder before the last term is overdue.

An overdue reminder for a customer always include all the overdue invoices of that customer.

The module supports a clever per-invoice reminder counter mechanism:

* the reminder counter is a property of an invoice,
* the reminder counter of each overdue invoice is incremented when sending a reminder by email or by post. It is not incremented for reminders by phone.
* in an email or a letter, the subject will be *Overdue invoice reminder n°N* where N is the maximum value of the counter of the overdue invoices plus one.

There are two user interfaces to send reminders:

* the **one-by-one** interface, which displays one screen for each customer that has overdue invoices, one after the other. You should use this interface when you have a reasonable volume of reminders to send (less than 100 overdue reminders for example). It gives you a tight control on the reminders and the possibility to easily and rapidly customize the reminder e-mails.
* the **mass** interface, which displays a list view of all customers that have overdue invoices, and you can process several reminders at the same time (via the *Actions* menu).

This video tutorial in English will show you how to configure and use the module: `Youtube link <https://www.youtube.com/watch?v=MaOoVAi7Tc0>`_.

**Table of contents**

.. contents::
:local:

Usage
=====

Of course, before sending invoice reminders, you must import your bank statements and process them, so that you are up-to-date on customer payments.

Then, go to the menu *Invoicing > Accounting > Actions > Overdue Invoice Remind*: you will get the start screen where you can:

* filter the customers that you want to remind (filter by customer or by salesman),
* check that your bank journals are up-to-date,
* choose between the *one-by-one* and *mass* interfaces,
* customize some parameters.

Then follow the process until the end.

You can also start the invoice reminder wizard via the button *Overdue Reminder* on an overdue invoice.

Changelog
=========

12.0.2.2.0 (2023-04-30)
~~~~~~~~~~~~~~~~~~~~~~~

**Features**

- Credit notes have been added to the e-mail summary that are sent to the
customer. They are marked in a different colour.

Furthermore, the button toggle to allow to send a reminder with unreconciled
payments has been removed. The warning remains. (`#226 <https://github.com/OCA/credit-control/issues/226>`_)

Bug Tracker
===========

Bugs are tracked on `GitHub Issues <https://github.com/OCA/credit-control/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 <https://github.com/OCA/credit-control/issues/new?body=module:%20account_invoice_overdue_reminder%0Aversion:%2012.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.

Do not contact contributors directly about support or help with technical issues.

Credits
=======

Authors
~~~~~~~

* Akretion

Contributors
~~~~~~~~~~~~

* Alexis de Lattre <alexis.delattre@akretion.com>

Maintainers
~~~~~~~~~~~

This module is maintained by the OCA.

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

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.

.. |maintainer-alexis-via| image:: https://github.com/alexis-via.png?size=40px
:target: https://github.com/alexis-via
:alt: alexis-via

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-alexis-via|

This module is part of the `OCA/credit-control <https://github.com/OCA/credit-control/tree/12.0/account_invoice_overdue_reminder>`_ project on GitHub.

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.
2 changes: 2 additions & 0 deletions account_invoice_overdue_reminder/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
from . import models
from . import wizard
32 changes: 32 additions & 0 deletions account_invoice_overdue_reminder/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Copyright 2020 Akretion France (http://www.akretion.com/)
# @author: Alexis de Lattre <alexis.delattre@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

{
'name': 'Overdue Invoice Reminder',
'version': '11.0.1.0.0',
'category': 'Accounting',
'license': 'AGPL-3',
'summary': 'Simple mail/letter/phone overdue customer invoice reminder ',
'author': 'Akretion,Odoo Community Association (OCA)',
'maintainers': ['alexis-via'],
'website': 'https://github.com/OCA/credit-control',
'depends': ['account'],
'data': [
'security/ir.model.access.csv',
'security/rule.xml',
'wizard/overdue_reminder_wizard_view.xml',
'views/partner.xml',
'views/report.xml',
'views/report_overdue_reminder.xml',
'views/account_invoice.xml',
'views/account_invoice_overdue_reminder.xml',
'views/overdue_reminder_result.xml',
'views/overdue_reminder_action.xml',
'views/config_settings.xml',
'data/overdue_reminder_result.xml',
'data/mail_template.xml',
],
'installable': True,
'application': True,
}
86 changes: 86 additions & 0 deletions account_invoice_overdue_reminder/data/mail_template.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2020 Akretion France (http://www.akretion.com/)
@author Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->

<odoo noupdate="1">


<record id="overdue_invoice_reminder_mail_template" model="mail.template">
<field name="name">Overdue Invoice Reminder</field>
<field name="model_id" ref="account_invoice_overdue_reminder.model_overdue_reminder_step"/>
<field name="auto_delete" eval="False"/>
<field name="lang">${object.partner_id.lang}</field>
<field name="user_signature" eval="True"/>
<field name="email_from">${object.user_id.email or object.company_id.email}</field>
<field name="email_to">${object.partner_id.email}</field>
<field name="subject">${object.company_id.name} - Overdue invoice reminder n°${object.counter}</field>
<field name="body_html"><![CDATA[
<div style="margin: 0px; padding: 0px; font-size: 13px;">
<p>Dear customer,</p>

<p>According to our books, the following invoices are overdue:</p>

<table style="border-spacing: 0; border-collapse: collapse; width: 100%; text-align: center;">
<tr>
<th style="padding: 5px; border: 1px solid black;">Invoice Number</th>
<th style="padding: 5px; border: 1px solid black;">Invoice Date</th>
<th style="padding: 5px; border: 1px solid black;">Payment Terms</th>
<th style="padding: 5px; border: 1px solid black;">Due Date</th>
<th style="padding: 5px; border: 1px solid black;">Order Ref.</th>
<th style="padding: 5px; border: 1px solid black;">Type</th>
<th style="padding: 5px; border: 1px solid black;">Total</th>
<th style="padding: 5px; border: 1px solid black;">Residual</th>
<th style="padding: 5px; border: 1px solid black;">Past Reminders</th>
</tr>
% for inv in object.invoice_ids.sorted(key='date_invoice'):
<tr style="background-color:
% if inv.type == 'out_refund':
LightGray
% endif
">
<td style="padding: 5px; border: 1px solid black;">${inv.number}</td>
<td style="padding: 5px; border: 1px solid black;">${format_date(inv.date_invoice)}</td>
<td style="padding: 5px; border: 1px solid black;">${inv.payment_term_id.name or ''}</td>
<td style="padding: 5px; border: 1px solid black;">${format_date(inv.date_due)}</td>
<td style="padding: 5px; border: 1px solid black;">${inv.name or ''}</td>
<td style="padding: 5px; border: 1px solid black;">${dict(inv.fields_get(allfields=['type'])['type']['selection'])[inv.type]}</td>
<td style="padding: 5px; border: 1px solid black; text-align: right;">${format_amount(inv.amount_total_signed, inv.currency_id)}</td>
<td style="padding: 5px; border: 1px solid black; text-align: right;">${format_amount(inv.residual_signed, inv.currency_id)}</td>
<td style="padding: 5px; border: 1px solid black;">${inv.overdue_reminder_counter}</td>
</tr>
% endfor
% for (currency, total_residual) in object.total_residual():
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td colspan="2" style="padding: 5px; border: 1px solid black; font-weight: bold; text-align: right;">Total Residual in ${currency.name}:</td>
<td style="padding: 5px; border: 1px solid black; font-weight: bold; text-align: right;">${format_amount(total_residual, currency)}</td>
<td></td>
</tr>
% endfor
</table>

<p>If you made a payment for these invoices a few days ago, please ignore this email.</p>

% if object.company_id.overdue_reminder_attach_invoice:
<p>You will find enclosed the overdue invoices.</p>
% endif

% if object.counter > 2:
<p>Despite several reminders, we are disappointed to see that these overdue invoices are still unpaid. In order to avoid legal proceedings, we urge you to paid these overdue invoices in the next days.</p>
% endif

<p>Regards,</p>

</div>
]]></field>
</record>


</odoo>
47 changes: 47 additions & 0 deletions account_invoice_overdue_reminder/data/overdue_reminder_result.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2020 Akretion France (http://www.akretion.com/)
@author Alexis de Lattre <alexis.delattre@akretion.com>
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
-->

<odoo noupdate="1">


<record id="voicemail" model="overdue.reminder.result">
<field name="name">Message left on voicemail</field>
<field name="sequence">10</field>
</record>

<record id="unreachable" model="overdue.reminder.result">
<field name="name">Unreachable</field>
<field name="sequence">20</field>
</record>

<record id="invoice_not_received" model="overdue.reminder.result">
<field name="name">Invoice not received</field>
<field name="sequence">30</field>
</record>

<record id="invoice_wait_approval" model="overdue.reminder.result">
<field name="name">Invoice waiting approval</field>
<field name="sequence">40</field>
</record>

<record id="invoice_dispute" model="overdue.reminder.result">
<field name="name">Invoice dispute</field>
<field name="sequence">50</field>
</record>

<record id="invoice_in_payment_pipe" model="overdue.reminder.result">
<field name="name">Invoice in payment pipe</field>
<field name="sequence">60</field>
</record>

<record id="invoice_payment_sent" model="overdue.reminder.result">
<field name="name">Payment sent</field>
<field name="sequence">70</field>
</record>


</odoo>
Loading