diff --git a/account_credit_control/README.rst b/account_credit_control/README.rst index 4294fdb56..6b3b93c80 100644 --- a/account_credit_control/README.rst +++ b/account_credit_control/README.rst @@ -1,11 +1,21 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +============== Credit Control ============== +Installation +============ + +Just install it + Configuration -------------- +============= Configure the policies and policy levels in ``Accounting > Configuration > -Credit Control > Credit Policies``. +Credit Control > Credit Control Policies``. You can define as many policy levels as you need. Configure a tolerance for the Credit control and a default policy @@ -14,16 +24,59 @@ applied on all partners in each company, under the Accounting tab. You are able to specify a particular policy for one partner or one invoice. Usage ------ +===== -Menu entries are located in ``Accounting > Periodical Processing > Credit -Control``. +Menu entries are located in ``Accounting > Adviser > Credit Control``. Create a new "run" in the ``Credit Control Run`` menu with the controlling date. -Then, use the ``Compute credit lines`` button. All the credit control lines will +Then, use the ``Compute Credit Lines`` button. All the credit control lines will be generated. You can find them in the ``Credit Control Lines`` menu. On each generated line, you have many choices: * Send a email * Print a letter * Change the state (so you can ignore or reopen lines) + + +.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas + :alt: Try me on Runbot + :target: https://runbot.odoo-community.org/runbot/92/10.0 + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues +`_. In case of trouble, please +check there if your issue has already been reported. If you spotted it first, +help us smash it by providing detailed and welcomed feedback. + +Credits +======= + +Images +------ + +* Odoo Community Association: `Icon `_. + +Contributors +------------ + +* Nicolas Bessi (Camptocamp) +* Guewen Baconnier (Camptocamp) +* Sylvain Van Hoof (Okia SPRL) +* Akim Juillerat (Camptocamp + +Maintainer +---------- + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +This module is maintained by the OCA. + +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. + +To contribute to this module, please visit https://odoo-community.org. diff --git a/account_credit_control/__init__.py b/account_credit_control/__init__.py index 531c9f6d3..7b23af6a9 100644 --- a/account_credit_control/__init__.py +++ b/account_credit_control/__init__.py @@ -1,29 +1,5 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from . import mail -from . import run -from . import line -from . import account -from . import partner -from . import policy -from . import company +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import models from . import wizard -from . import invoice diff --git a/account_credit_control/__manifest__.py b/account_credit_control/__manifest__.py index 2c33cdb88..9cfbe9b7b 100644 --- a/account_credit_control/__manifest__.py +++ b/account_credit_control/__manifest__.py @@ -1,51 +1,45 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). {'name': 'Account Credit Control', - 'version': '8.0.0.3.0', - 'author': "Camptocamp,Odoo Community Association (OCA)", + 'version': '10.0.1.0.0', + 'author': "Camptocamp,Odoo Community Association (OCA),Okia", 'maintainer': 'Camptocamp', 'category': 'Finance', - 'complexity': "normal", - 'depends': ['base', - 'account', - 'email_template', - ], - 'website': 'http://www.camptocamp.com', - 'data': ["report/report.xml", - "report/report_credit_control_summary.xml", - "data.xml", - "line_view.xml", - "account_view.xml", - "partner_view.xml", - "policy_view.xml", - "run_view.xml", - "company_view.xml", - "wizard/credit_control_emailer_view.xml", - "wizard/credit_control_marker_view.xml", - "wizard/credit_control_printer_view.xml", - "wizard/credit_control_policy_changer_view.xml", - "security/ir.model.access.csv"], - 'demo': ["credit_control_demo.xml"], - 'tests': [], - 'installable': False, + 'depends': [ + 'base', + 'account', + 'mail', + ], + 'website': 'https://www.camptocamp.com', + 'data': [ + "security/res_groups.xml", + # Reports + "report/report.xml", + "report/report_credit_control_summary.xml", + + # Data + "data/data.xml", + + # Views + "views/account_invoice.xml", + "views/credit_control_line.xml", + "views/credit_control_policy.xml", + "views/credit_control_run.xml", + "views/res_company.xml", + "views/res_partner.xml", + + # Wizards + "wizard/credit_control_emailer_view.xml", + "wizard/credit_control_marker_view.xml", + "wizard/credit_control_printer_view.xml", + "wizard/credit_control_policy_changer_view.xml", + + # Security + "security/ir.model.access.csv", + ], + 'installable': True, 'license': 'AGPL-3', 'application': True } diff --git a/account_credit_control/account.py b/account_credit_control/account.py deleted file mode 100644 index de4758c5f..000000000 --- a/account_credit_control/account.py +++ /dev/null @@ -1,32 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields - - -class AccountAccount(models.Model): - """ Add a link to a credit control policy on account.account """ - - _inherit = "account.account" - - credit_control_line_ids = fields.One2many('credit.control.line', - 'account_id', - string='Credit Lines', - readonly=True) diff --git a/account_credit_control/account_view.xml b/account_credit_control/account_view.xml deleted file mode 100644 index 5873e8ce3..000000000 --- a/account_credit_control/account_view.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - invoice.followup.form.view - account.invoice - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/account_credit_control/company.py b/account_credit_control/company.py deleted file mode 100644 index 8deb708fa..000000000 --- a/account_credit_control/company.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields - - -class ResCompany(models.Model): - """ Add credit control parameters """ - _inherit = 'res.company' - - credit_control_tolerance = fields.Float(string='Credit Control Tolerance', - default=0.1) - # This is not a property on the partner because we cannot search - # on fields.property (subclass fields.function). - credit_policy_id = fields.Many2one('credit.control.policy', - string='Credit Control Policy', - help="The Credit Control Policy used " - "on partners by default. " - "This setting can be overridden" - " on partners or invoices.") diff --git a/account_credit_control/company_view.xml b/account_credit_control/company_view.xml deleted file mode 100644 index feb50c0d5..000000000 --- a/account_credit_control/company_view.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - credit.control.company.form - res.company - - - - - - - - - - diff --git a/account_credit_control/credit_control_demo.xml b/account_credit_control/credit_control_demo.xml deleted file mode 100644 index 107e26628..000000000 --- a/account_credit_control/credit_control_demo.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - X11002-a - B2B Debtors - (test) - - receivable - - - - - - X11002-b - B2C Debtors - (test) - - receivable - - - - - - X11002-c - New Debtors - (test) - - receivable - - - - - diff --git a/account_credit_control/data.xml b/account_credit_control/data.xml deleted file mode 100644 index 95ca87372..000000000 --- a/account_credit_control/data.xml +++ /dev/null @@ -1,230 +0,0 @@ - - - - - Credit Control Email - noreply@localhost - Credit Control: (${object.current_policy_level.name or 'n/a'}) - ${object.get_email() or ''} - - - ${object.get_contact_address().lang or 'en_US'} - - -
- ${object.current_policy_level.custom_mail_text | safe} - ]]>
-
- - - - No follow - - - - - - No follow - - net_days - - - - email - Manual no follow - - Manual no follow - - - - - 3 time policy - - - - 10 days net - - net_days - - - - email - Our records indicate that we have not received the payment of the above mentioned invoice. -If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days. - -Thank you in advance for your anticipated cooperation in this matter. - -Best regards - - - -
- If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.
-
- Thank you in advance for your anticipated cooperation in this matter.
-
- Best regards - ]]>
-
- - - 30 days end of month - - end_of_month - - - - email - Our records indicate that we have not yet received the payment of the above mentioned invoice despite our first reminder. - If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days. - -Thank you in advance for your anticipated cooperation in this matter. - -Best regards - - - If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days.
-
- Thank you in advance for your anticipated cooperation in this matter.
-
- Best regards - ]]>
-
- - - 10 days last reminder - - previous_date - - - - letter - - Our records indicate that we still have not received the payment of the above mentioned invoice despite our two reminders. - If payment have already been sent, please disregard this notice. If not, please proceed with payment. - If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency. - - Should you need us to arrange a payment plan for you, please advise. - A customer account statement is enclosed for you convenience. - - Thank you in advance for your anticipated cooperation in this matter. - - Best regards - - - - If payment have already been sent, please disregard this notice. If not, please proceed with payment.
- If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency.
-
- Should you need us to arrange a payment plan for you, please advise.
- A customer account statement is enclosed for you convenience.
-
- Thank you in advance for your anticipated cooperation in this matter.
-
- Best regards - ]]>
-
- - - - 2 time policy - - - - 30 days end of month - - end_of_month - - - - email - Our records indicate that we have not received the payment of the above mentioned invoice. - If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days. - - Thank you in advance for your anticipated cooperation in this matter. - - Best regards - - - If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.
-
- Thank you in advance for your anticipated cooperation in this matter.
-
- Best regards - ]]>
-
- - - 60 days last reminder - - previous_date - - - - letter - Our records indicate that we still have not received the payment of the above mentioned invoice despite our reminder. - - If payment have already been sent, please disregard this notice. If not, please proceed with payment. - If your payment has not been received in the next 5 days, your file will be transfered to our debt - collection agency. - - Should you need us to arrange a payment plan for you, please advise. - A customer account statement is enclosed for you convenience. - - Thank you in advance for your anticipated cooperation in this matter. - - Best regards - - -
- If payment have already been sent, please disregard this notice. If not, please proceed with payment.
- If your payment has not been received in the next 5 days, your file will be transfered to our debt
- collection agency.
-
- Should you need us to arrange a payment plan for you, please advise.
- A customer account statement is enclosed for you convenience.
-
- Thank you in advance for your anticipated cooperation in this matter.
-
- Best regards - ]]>
-
- - - Credit Control Manager - - - - - Credit Control User - - - - - Credit Control Info - - - - - - - -
-
diff --git a/account_credit_control/data/data.xml b/account_credit_control/data/data.xml new file mode 100644 index 000000000..79a44ce25 --- /dev/null +++ b/account_credit_control/data/data.xml @@ -0,0 +1,224 @@ + + + + + Credit Control Email + ${object.partner_id.company_id.email or ''} + Credit Control: + (${object.current_policy_level.name or 'n/a'}) + + ${object.get_email() or ''} + + + + ${object.get_contact_address().lang or 'en_US'} + + + +
+ ${object.current_policy_level.custom_mail_text | safe} + ]]>
+
+ + + + No follow + + + + + + No follow + + net_days + + + + email + Manual no follow + + Manual no follow + + + + + 3 time policy + + + + 10 days net + + net_days + + + + email + Our records indicate that we have not received the payment of the invoice mentioned below. + If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days. + + Thank you in advance for your anticipated cooperation in this matter. + + Best regards + + + +
+ If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.
+
+ Thank you in advance for your anticipated cooperation in this matter.
+
+ Best regards + ]]>
+
+ + + 30 days end of month + + end_of_month + + + + email + Our records indicate that we have not yet received the payment of the invoice mentioned below despite our first reminder. + If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days. + + Thank you in advance for your anticipated cooperation in this matter. + + Best regards + + + If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days.
+
+ Thank you in advance for your anticipated cooperation in this matter.
+
+ Best regards + ]]>
+
+ + + 10 days last reminder + + previous_date + + + + letter + + Our records indicate that we still have not received the payment of the invoice mentioned below despite our two reminders. + If payment have already been sent, please disregard this notice. If not, please proceed with payment. + If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency. + + Should you need us to arrange a payment plan for you, please advise. + A customer account statement is enclosed for you convenience. + + Thank you in advance for your anticipated cooperation in this matter. + + Best regards + + + + If payment have already been sent, please disregard this notice. If not, please proceed with payment.
+ If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency.
+
+ Should you need us to arrange a payment plan for you, please advise.
+ A customer account statement is enclosed for you convenience.
+
+ Thank you in advance for your anticipated cooperation in this matter.
+
+ Best regards + ]]>
+
+ + + + 2 time policy + + + + 30 days end of month + + end_of_month + + + + email + Our records indicate that we have not received the payment of the invoice mentioned below. + If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days. + + Thank you in advance for your anticipated cooperation in this matter. + + Best regards + + + If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.
+
+ Thank you in advance for your anticipated cooperation in this matter.
+
+ Best regards + ]]>
+
+ + + 60 days last reminder + + previous_date + + + + letter + Our records indicate that we still have not received the payment of the mentioned below invoice despite our reminder. + + If payment have already been sent, please disregard this notice. If not, please proceed with payment. + If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency. + + Should you need us to arrange a payment plan for you, please advise. + A customer account statement is enclosed for you convenience. + + Thank you in advance for your anticipated cooperation in this matter. + + Best regards + + +
+ If payment have already been sent, please disregard this notice. If not, please proceed with payment.
+ If your payment has not been received in the next 5 days, your file will be transfered to our debt
+ collection agency.
+
+ Should you need us to arrange a payment plan for you, please advise.
+ A customer account statement is enclosed for you convenience.
+
+ Thank you in advance for your anticipated cooperation in this matter.
+
+ Best regards + ]]>
+
+ + + + + + +
diff --git a/account_credit_control/i18n/fr.po b/account_credit_control/i18n/fr.po index bda51621f..19512d8a3 100644 --- a/account_credit_control/i18n/fr.po +++ b/account_credit_control/i18n/fr.po @@ -1,42 +1,57 @@ # Translation of Odoo Server. # This file contains the translation of the following modules: -# * account_credit_control -# -# Translators: -# Christophe kryskool , 2015 +# * account_credit_control +# msgid "" msgstr "" -"Project-Id-Version: account-financial-tools (8.0)\n" +"Project-Id-Version: Odoo Server 10.0+e\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-10-03 22:27+0000\n" -"PO-Revision-Date: 2015-09-29 08:56+0000\n" -"Last-Translator: OCA Transbot \n" -"Language-Team: French (http://www.transifex.com/oca/OCA-account-financial-tools-8-0/language/fr/)\n" +"POT-Creation-Date: 2017-03-16 12:32+0000\n" +"PO-Revision-Date: 2017-03-16 13:46+0100\n" +"Last-Translator: <>\n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"Language: fr_BE\n" +"X-Generator: Poedit 1.8.8\n" #. module: account_credit_control #: model:credit.control.policy.level,custom_text:account_credit_control.3_time_3 msgid "" "\n" -" Our records indicate that we still have not received the payment of the above mentioned invoice despite our two reminders.\n" -" If payment have already been sent, please disregard this notice. If not, please proceed with payment.\n" -" If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency.\n" +" Our records indicate that we still have not received the\n" +" payment of the above mentioned invoice despite our two\n" +" reminders.\n" +" If payment have already been sent, please disregard this\n" +" notice. If not, please proceed with payment.\n" +" If your payment has not been received in the next 5 days, your\n" +" file will be transfered to our debt collection agency.\n" "\n" -" Should you need us to arrange a payment plan for you, please advise.\n" -" A customer account statement is enclosed for you convenience.\n" +" Should you need us to arrange a payment plan for you, please\n" +" advise.\n" +" A customer account statement is enclosed for you convenience.\n" "\n" -" Thank you in advance for your anticipated cooperation in this matter.\n" +" Thank you in advance for your anticipated cooperation in this\n" +" matter.\n" "\n" -" Best regards\n" +" Best regards\n" +" " +msgstr "" +"\n" +"Notre comptabilité nous indique que vous avez encore des factures ouvertes malgré nos précédents rappels.\n" +" Si ce courrier à croisé votre paiement veuillez le considérer comme nul et non avenu.\n" +" Si le paiement n'est pas effectué dans les 5 jours votre dossier sera transféré à une société de recouvrement.\n" +"\n" +" Si vous désirez un accord de payment n'hésitez pas à nous contacter advise.\n" +" Un décompte est disponible ci-joint.\n" +"\n" +" En vous remerciant de votre coopération \n" " " -msgstr "\nNotre comptabilité nous indique que vous avez encore des factures ouvertes malgré nos précédents rappels.\n Si ce courrier à croisé votre paiement veuillez le considérer comme nul et non avenu.\n Si le paiement n'est pas effectué dans les 5 jours votre dossier sera transféré à une société de recouvrement.\n\n Si vous désirez un accord de payment n'hésitez pas à nous contacter advise.\n Un décompte est disponible ci-joint.\n\n En vous remerciant de votre coopération \n " #. module: account_credit_control -#: model:email.template,body_html:account_credit_control.email_template_credit_control_base +#: model:mail.template,body_html:account_credit_control.email_template_credit_control_base msgid "" "\n" " Dear ${object.contact_address.name or ''}\n" @@ -45,6 +60,12 @@ msgid "" " ${object.current_policy_level.custom_mail_text | safe}\n" " " msgstr "" +"\n" +" Dear ${object.contact_address.name or ''}\n" +"
\n" +"
\n" +" ${object.current_policy_level.custom_mail_text | safe}\n" +" " #. module: account_credit_control #: model:credit.control.policy.level,name:account_credit_control.3_time_3 @@ -68,67 +89,14 @@ msgid "60 days last reminder" msgstr "Dernier rappel à 60 jours" #. module: account_credit_control -#: model:credit.control.policy.level,custom_mail_text:account_credit_control.no_follow_1 -msgid "

Manual no follow

" -msgstr "" +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document +msgid "Total Due" +msgstr "Total dû" #. module: account_credit_control -#: model:credit.control.policy.level,custom_mail_text:account_credit_control.2_time_1 -msgid "" -"

Our records indicate that we have not received the payment of the invoices mentioned in the attached document.
\n" -" If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.

\n" -" Thank you in advance for your anticipated cooperation in this matter.

\n" -" Best regards\n" -"

" -msgstr "" - -#. module: account_credit_control -#: model:credit.control.policy.level,custom_mail_text:account_credit_control.3_time_1 -msgid "" -"

Our records indicate that we have not received the payment of the invoices mentioned in the attached document.

\n" -" If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.

\n" -" Thank you in advance for your anticipated cooperation in this matter.

\n" -" Best regards\n" -"

" -msgstr "" - -#. module: account_credit_control -#: model:credit.control.policy.level,custom_mail_text:account_credit_control.3_time_2 -msgid "" -"

Our records indicate that we have not yet received the payment of the invoices mentioned in the attached document despite our first reminder.
\n" -" If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days.

\n" -" Thank you in advance for your anticipated cooperation in this matter.

\n" -" Best regards\n" -"

" -msgstr "" - -#. module: account_credit_control -#: model:credit.control.policy.level,custom_mail_text:account_credit_control.2_time_2 -msgid "" -"

Our records indicate that we still have not received the payment of the invoices mentioned in the attached document despite our reminder.\n" -"

\n" -" If payment have already been sent, please disregard this notice. If not, please proceed with payment.
\n" -" If your payment has not been received in the next 5 days, your file will be transfered to our debt
\n" -" collection agency.

\n" -" Should you need us to arrange a payment plan for you, please advise.
\n" -" A customer account statement is enclosed for you convenience.

\n" -" Thank you in advance for your anticipated cooperation in this matter.

\n" -" Best regards\n" -"

" -msgstr "" - -#. module: account_credit_control -#: model:credit.control.policy.level,custom_mail_text:account_credit_control.3_time_3 -msgid "" -"

Our records indicate that we still have not received the payment of the invoices mentioned in the attached document despite our two reminders.
\n" -" If payment have already been sent, please disregard this notice. If not, please proceed with payment.
\n" -" If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency.

\n" -" Should you need us to arrange a payment plan for you, please advise.
\n" -" A customer account statement is enclosed for you convenience.

\n" -" Thank you in advance for your anticipated cooperation in this matter.

\n" -" Best regards\n" -"

" -msgstr "" +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document +msgid "Total Invoiced" +msgstr "Total facturé" #. module: account_credit_control #: model:ir.model,name:account_credit_control.model_credit_control_line @@ -136,7 +104,7 @@ msgid "A credit control line" msgstr "Ligne de relance" #. module: account_credit_control -#: code:addons/account_credit_control/run.py:93 +#: code:addons/account_credit_control/models/credit_control_run.py:94 #, python-format msgid "A credit control line more recent than %s exists at %s" msgstr "Une ligne plus récente que %s existe au %s" @@ -147,33 +115,32 @@ msgid "A credit control policy level" msgstr "Une politique de relance" #. module: account_credit_control -#: code:addons/account_credit_control/run.py:161 +#: code:addons/account_credit_control/models/credit_control_run.py:160 #, python-format -msgid "" -"A credit control run is already running in background, please try later." +msgid "A credit control run is already running in background, please try later." msgstr "Un contrôle de relance est déjà en train de tourner en arrière-plan, merci d'essayer à nouveau plus tard." #. module: account_credit_control -#: code:addons/account_credit_control/run.py:86 +#: code:addons/account_credit_control/models/credit_control_run.py:87 #, python-format msgid "A run has already been executed more recently than %s" msgstr "Un contrôle a déjà été exécuté plus récemment que le %s " #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: field:credit.control.line,account_id:0 #: model:ir.model,name:account_credit_control.model_account_account +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_account_id +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Account" msgstr "Compte" #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form -#: field:credit.control.policy,account_ids:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_account_ids +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form msgid "Accounts" msgstr "Comptes" #. module: account_credit_control -#: field:credit.control.policy,active:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_active msgid "Active" msgstr "Actif" @@ -183,28 +150,28 @@ msgid "Allows to manually change credit level" msgstr "Permet de changer manuellement le niveau de relance" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "An error has occured during the sending of the email." msgstr "Erreur lors de la génération des mails." #. module: account_credit_control -#: code:addons/account_credit_control/policy.py:308 +#: code:addons/account_credit_control/models/credit_control_policy.py:306 #, python-format msgid "Can not get function for computation mode: %s is not implemented" msgstr "Impossible de trouver une fonction pour le mode de calcul: %s n'est pas implémentée" #. module: account_credit_control -#: view:credit.control.emailer:account_credit_control.credit_line_emailer_form -#: view:credit.control.marker:account_credit_control.credit_line_marker_form -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form -#: view:credit.control.printer:account_credit_control.credit_line_printer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_emailer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_printer_form msgid "Cancel" msgstr "Annuler" #. module: account_credit_control -#: view:credit.control.marker:account_credit_control.credit_line_marker_form #: model:ir.actions.act_window,name:account_credit_control.open_credit_line_marker_wizard #: model:ir.actions.act_window,name:account_credit_control.open_credit_line_marker_wizard_menu_action +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form msgid "Change Lines' State" msgstr "Modifier le statut des lignes" @@ -215,12 +182,12 @@ msgid "Change current credit policy" msgstr "Changer la politique de relance courante" #. module: account_credit_control -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form msgid "Change the overdue level of current invoice" msgstr "Changer le niveau de relance de la facture courante" #. module: account_credit_control -#: view:credit.control.marker:account_credit_control.credit_line_marker_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form msgid "Change the state of the selected lines" msgstr "Modifier l'état des lignes sélectionnées." @@ -230,110 +197,101 @@ msgid "Change the state of the selected lines." msgstr "Modifier l'état des lignes sélectionnées." #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: field:credit.control.line,channel:0 -#: field:credit.control.policy.level,channel:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_channel +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_channel +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Channel" msgstr "Canal" #. module: account_credit_control #: model:ir.model,name:account_credit_control.model_res_company msgid "Companies" -msgstr "Société" +msgstr "Sociétés" #. module: account_credit_control -#: field:credit.control.communication,company_id:0 -#: field:credit.control.line,company_id:0 -#: field:credit.control.policy,company_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_company_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_company_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_company_id msgid "Company" msgstr "Société" #. module: account_credit_control -#: view:credit.control.run:account_credit_control.credit_control_run_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_form msgid "Compute Credit Control Lines" msgstr "Calculer les relances" #. module: account_credit_control -#: field:credit.control.policy.level,computation_mode:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_computation_mode msgid "Compute Mode" msgstr "Mode de calcul" #. module: account_credit_control -#: field:credit.control.communication,contact_address:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_contact_address msgid "Contact Address" msgstr "Adresse de contact" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_form -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: view:credit.control.line:account_credit_control.credit_control_line_tree +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_tree msgid "Control Credit Lines" msgstr "Lignes de relance" #. module: account_credit_control -#: field:credit.control.run,date:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_date msgid "Controlling Date" msgstr "Date de contrôle" #. module: account_credit_control -#: field:credit.control.line,date:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_date msgid "Controlling date" msgstr "Date de relance" #. module: account_credit_control -#: field:credit.control.communication,create_uid:0 -#: field:credit.control.emailer,create_uid:0 -#: field:credit.control.line,create_uid:0 -#: field:credit.control.marker,create_uid:0 -#: field:credit.control.policy,create_uid:0 -#: field:credit.control.policy.changer,create_uid:0 -#: field:credit.control.policy.level,create_uid:0 -#: field:credit.control.printer,create_uid:0 -#: field:credit.control.run,create_uid:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_create_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_create_uid msgid "Created by" msgstr "Créé par" #. module: account_credit_control -#: field:credit.control.communication,create_date:0 -#: field:credit.control.emailer,create_date:0 -#: field:credit.control.line,create_date:0 -#: field:credit.control.marker,create_date:0 -#: field:credit.control.policy,create_date:0 -#: field:credit.control.policy.changer,create_date:0 -#: field:credit.control.policy.level,create_date:0 -#: field:credit.control.printer,create_date:0 -#: field:credit.control.run,create_date:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_create_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_create_date msgid "Created on" msgstr "Créé le" #. module: account_credit_control -#: view:account.invoice:account_credit_control.invoice_followup_form_view +#: model:ir.module.category,name:account_credit_control.category_credit_control #: model:ir.ui.menu,name:account_credit_control.base_credit_control_configuration_menu #: model:ir.ui.menu,name:account_credit_control.base_credit_control_menu +#: model:ir.ui.view,arch_db:account_credit_control.invoice_followup_form_view msgid "Credit Control" msgstr "Relances Clients" #. module: account_credit_control -#: model:res.groups,name:account_credit_control.group_account_credit_control_info -msgid "Credit Control Info" -msgstr "Informations de rappel" - -#. module: account_credit_control -#: view:account.invoice:account_credit_control.invoice_followup_form_view -#: field:credit.control.emailer,line_ids:0 -#: field:credit.control.marker,line_ids:0 -#: field:credit.control.printer,line_ids:0 #: model:ir.actions.act_window,name:account_credit_control.credit_control_line_action +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_line_ids +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_line_ids +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_line_ids +#: model:ir.model.fields,field_description:account_credit_control.field_res_partner_credit_control_line_ids #: model:ir.ui.menu,name:account_credit_control.credit_control_line_action_menu -#: field:res.partner,credit_control_line_ids:0 +#: model:ir.ui.view,arch_db:account_credit_control.invoice_followup_form_view msgid "Credit Control Lines" msgstr "Lignes de relance" -#. module: account_credit_control -#: model:res.groups,name:account_credit_control.group_account_credit_control_manager -msgid "Credit Control Manager" -msgstr "Responsable Relance client" - #. module: account_credit_control #: model:ir.actions.act_window,name:account_credit_control.credit_policy_configuration_action #: model:ir.ui.menu,name:account_credit_control.credit_policy_configuration_action_menu @@ -341,8 +299,9 @@ msgid "Credit Control Policies" msgstr "Politique de relance" #. module: account_credit_control -#: field:account.invoice,credit_policy_id:0 -#: field:res.company,credit_policy_id:0 field:res.partner,credit_policy_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_account_invoice_credit_policy_id +#: model:ir.model.fields,field_description:account_credit_control.field_res_company_credit_policy_id +#: model:ir.model.fields,field_description:account_credit_control.field_res_partner_credit_policy_id msgid "Credit Control Policy" msgstr "Politique de relance" @@ -358,26 +317,24 @@ msgid "Credit Control Summary" msgstr "Résumé des relances" #. module: account_credit_control -#: field:res.company,credit_control_tolerance:0 +#: model:ir.model.fields,field_description:account_credit_control.field_res_company_credit_control_tolerance msgid "Credit Control Tolerance" msgstr "Pas de relance inférieure à : " #. module: account_credit_control -#: model:res.groups,name:account_credit_control.group_account_credit_control_user -msgid "Credit Control User" -msgstr "Utilisateur du module de relance" - -#. module: account_credit_control -#: model:email.template,subject:account_credit_control.email_template_credit_control_base -msgid "Credit Control: (${object.current_policy_level.name or 'n/a'})" +#: model:mail.template,subject:account_credit_control.email_template_credit_control_base +msgid "" +"Credit Control:\n" +" (${object.current_policy_level.name or 'n/a'})\n" +" " msgstr "Rappel: (${object.current_policy_level.name or 'n/a'})" #. module: account_credit_control -#: field:account.account,credit_control_line_ids:0 -#: field:account.invoice,credit_control_line_ids:0 -#: field:credit.control.communication,credit_control_line_ids:0 #: model:ir.actions.act_window,name:account_credit_control.act_account_credit_relation_relation #: model:ir.actions.act_window,name:account_credit_control.act_partner_credit_relation_relation +#: model:ir.model.fields,field_description:account_credit_control.field_account_account_credit_control_line_ids +#: model:ir.model.fields,field_description:account_credit_control.field_account_invoice_credit_control_line_ids +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_credit_control_line_ids msgid "Credit Lines" msgstr "Lignes de relance" @@ -387,55 +344,55 @@ msgid "Credit control line generator" msgstr "Générateur de relance" #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form -#: view:credit.control.policy:account_credit_control.credit_control_policy_tree +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_tree msgid "Credit control policy" msgstr "Niveau de relance" #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form msgid "Credit control policy Level" msgstr "Niveau de relance" #. module: account_credit_control -#: view:credit.control.policy.level:account_credit_control.credit_control_policy_level_tree +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_level_tree msgid "Credit control policy level" msgstr "Niveau de relance" #. module: account_credit_control -#: view:credit.control.run:account_credit_control.credit_control_run_form -#: view:credit.control.run:account_credit_control.credit_control_run_tree +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_tree msgid "Credit control run" msgstr "Passe de contrôle de relance" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Credit policy" msgstr "Politique de relance" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Credit policy level" msgstr "Niveau de relance" #. module: account_credit_control -#: field:credit.control.communication,currency_id:0 -#: field:credit.control.line,currency_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_currency_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_currency_id msgid "Currency" msgstr "Devise" #. module: account_credit_control -#: field:credit.control.policy.level,custom_mail_text:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_custom_mail_text msgid "Custom Mail Message" msgstr "Email personnalisé" #. module: account_credit_control -#: field:credit.control.policy.level,custom_text:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_custom_text msgid "Custom Message" msgstr "Message personnalisable" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document msgid "Date due" msgstr "Date d'échéance" @@ -445,48 +402,64 @@ msgid "Define a reminder policy" msgstr "Définir une politique de relance" #. module: account_credit_control -#: field:credit.control.policy.level,delay_days:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_delay_days msgid "Delay (in days)" msgstr "Retard (en jours)" #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form -#: view:credit.control.policy.level:account_credit_control.credit_mangement_policy_level_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_mangement_policy_level_form msgid "Delay Setting" msgstr "Paramétrages jours de retard" #. module: account_credit_control -#: field:credit.control.policy,do_nothing:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_display_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_display_name +msgid "Display Name" +msgstr "Afficher le nom" + +#. module: account_credit_control +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_do_nothing msgid "Do nothing" msgstr "Ignorer" #. module: account_credit_control -#: selection:credit.control.line,state:0 -#: selection:credit.control.marker,name:0 selection:credit.control.run,state:0 +#: selection:credit.control.line,state:0 selection:credit.control.marker,name:0 +#: selection:credit.control.run,state:0 msgid "Done" msgstr "Fait" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search #: selection:credit.control.line,state:0 selection:credit.control.run,state:0 +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Draft" msgstr "Brouillon" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Draft lines have to be triaged." msgstr "Les lignes brouillon doivent être triées" #. module: account_credit_control -#: help:credit.control.line,state:0 +#: model:ir.model.fields,help:account_credit_control.field_credit_control_line_state msgid "" "Draft lines need to be triaged.\n" "Ignored lines are lines for which we do not want to send something.\n" "Draft and ignored lines will be generated again on the next run." -msgstr "Lignes brouillons à traiter.\nLes lignes ignorées ne seront pas traitées.\nLes lignes brouillons ou ignorées seront régénérées lors du prochain contrôle." +msgstr "" +"Lignes brouillons à traiter.\n" +"Les lignes ignorées ne seront pas traitées.\n" +"Les lignes brouillons ou ignorées seront régénérées lors du prochain contrôle." #. module: account_credit_control -#: field:credit.control.line,amount_due:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_amount_due msgid "Due Amount Tax incl." msgstr "Montant dû TTC." @@ -501,12 +474,12 @@ msgid "Due Date, End Of Month" msgstr "Date d'échéance, fin de mois" #. module: account_credit_control -#: field:credit.control.line,balance_due:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_balance_due msgid "Due balance" -msgstr "Montant total" +msgstr "Date d'échéance" #. module: account_credit_control -#: field:credit.control.line,date_due:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_date_due msgid "Due date" msgstr "Date d'échéance" @@ -517,9 +490,9 @@ msgid "Email" msgstr "E-mail" #. module: account_credit_control -#: field:credit.control.policy.level,email_template_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_email_template_id msgid "Email Template" -msgstr "Modèle d'e-mail" +msgstr "Modèle de courriel" #. module: account_credit_control #: selection:credit.control.line,state:0 @@ -527,111 +500,130 @@ msgid "Emailing Error" msgstr "Erreur sur E-mail" #. module: account_credit_control -#: field:credit.control.line,date_entry:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_date_entry msgid "Entry date" msgstr "Date de l'écriture" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search #: selection:credit.control.line,state:0 +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Error" msgstr "Erreur" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Filters" msgstr "Filtres" #. module: account_credit_control -#: help:credit.control.policy,do_nothing:0 +#: model:ir.model.fields,help:account_credit_control.field_credit_control_policy_do_nothing msgid "For policies which should not generate lines or are obsolete" msgstr "Pour les politiques qui ne doivent pas générer de lignes ou sont obsolètes" #. module: account_credit_control -#: field:credit.control.run,line_ids:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_line_ids msgid "Generated lines" -msgstr "Lignes générées" - -#. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search -msgid "Group By..." msgstr "Grouper Par..." #. module: account_credit_control -#: field:credit.control.communication,id:0 field:credit.control.emailer,id:0 -#: field:credit.control.line,id:0 field:credit.control.marker,id:0 -#: field:credit.control.policy,id:0 field:credit.control.policy.changer,id:0 -#: field:credit.control.policy.level,id:0 field:credit.control.printer,id:0 -#: field:credit.control.run,id:0 +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search +msgid "Group By..." +msgstr "Regrouper par..." + +#. module: account_credit_control +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_id msgid "ID" msgstr "ID" #. module: account_credit_control -#: help:credit.control.run,manual_ids:0 -msgid "" -"If a credit control line has been generatedon a policy and the policy has " -"been changed in the meantime, it has to be handled manually" +#: model:ir.model.fields,help:account_credit_control.field_credit_control_run_manual_ids +msgid "If a credit control line has been generatedon a policy and the policy has been changed in the meantime, it has to be handled manually" msgstr "Si la ligne a été générée avec une politique de relance différente elle doit être traitée manuellement" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: selection:credit.control.line,state:0 -#: selection:credit.control.marker,name:0 +#: selection:credit.control.line,state:0 selection:credit.control.marker,name:0 +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Ignored" msgstr "Ignorée" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: field:credit.control.line,invoice_id:0 +#: model:res.groups,name:account_credit_control.group_account_credit_control_info +msgid "Info" +msgstr "Info" + +#. module: account_credit_control #: model:ir.model,name:account_credit_control.model_account_invoice +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_invoice_id +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Invoice" msgstr "Facture" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document msgid "Invoice date" msgstr "Date de facture" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document msgid "Invoice number" msgstr "Numéro de facture" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document msgid "Invoiced amount" msgstr "Total de la facture" #. module: account_credit_control -#: view:account.invoice:account_credit_control.invoice_followup_form_view +#: model:ir.ui.view,arch_db:account_credit_control.invoice_followup_form_view msgid "Issued Lines" msgstr "Lignes de relance" #. module: account_credit_control -#: field:credit.control.communication,write_uid:0 -#: field:credit.control.emailer,write_uid:0 -#: field:credit.control.line,write_uid:0 -#: field:credit.control.marker,write_uid:0 -#: field:credit.control.policy,write_uid:0 -#: field:credit.control.policy.changer,write_uid:0 -#: field:credit.control.policy.level,write_uid:0 -#: field:credit.control.printer,write_uid:0 -#: field:credit.control.run,write_uid:0 -msgid "Last Updated by" -msgstr "Mis à jour par" +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer___last_update +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run___last_update +msgid "Last Modified on" +msgstr "Dernière Modification le" #. module: account_credit_control -#: field:credit.control.communication,write_date:0 -#: field:credit.control.emailer,write_date:0 -#: field:credit.control.line,write_date:0 -#: field:credit.control.marker,write_date:0 -#: field:credit.control.policy,write_date:0 -#: field:credit.control.policy.changer,write_date:0 -#: field:credit.control.policy.level,write_date:0 -#: field:credit.control.printer,write_date:0 -#: field:credit.control.run,write_date:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_write_uid +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_write_uid +msgid "Last Updated by" +msgstr "Dernière mise à jour par" + +#. module: account_credit_control +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_emailer_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_write_date +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_write_date msgid "Last Updated on" -msgstr "Mis à jour le" +msgstr "Dernière mise à jour le" #. module: account_credit_control #: selection:credit.control.line,channel:0 @@ -640,87 +632,93 @@ msgid "Letter" msgstr "Lettre" #. module: account_credit_control -#: field:credit.control.communication,current_policy_level:0 -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: field:credit.control.policy.level,level:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_current_policy_level +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_level +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Level" msgstr "Niveau" #. module: account_credit_control -#: view:credit.control.emailer:account_credit_control.credit_line_emailer_form -#: view:credit.control.marker:account_credit_control.credit_line_marker_form -#: view:credit.control.printer:account_credit_control.credit_line_printer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_emailer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_printer_form msgid "Lines" msgstr "Lignes" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Lines already sent." msgstr "Lignes déjà traitées." #. module: account_credit_control -#: view:credit.control.marker:account_credit_control.credit_line_marker_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form msgid "Lines marker" msgstr "Traiter les lignes" #. module: account_credit_control -#: view:credit.control.printer:account_credit_control.credit_line_printer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_printer_form msgid "Lines report" msgstr "Lignes de relance" #. module: account_credit_control -#: field:credit.control.run,manual_ids:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_manual_ids msgid "Lines to handle manually" msgstr "A traiter manuellement" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Lines which have been ignored from previous runs." msgstr "Lignes ignorées lors des relances précédentes." #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form -#: view:credit.control.policy.level:account_credit_control.credit_mangement_policy_level_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_mangement_policy_level_form msgid "Mail and reporting" msgstr "Lettres et e-mails" #. module: account_credit_control -#: view:credit.control.emailer:account_credit_control.credit_line_emailer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_emailer_form msgid "Mailer" msgstr "Mailer" #. module: account_credit_control -#: view:account.invoice:account_credit_control.invoice_followup_form_view +#: model:res.groups,name:account_credit_control.group_account_credit_control_manager +msgid "Manager" +msgstr "Gestionnaire" + +#. module: account_credit_control +#: model:ir.ui.view,arch_db:account_credit_control.invoice_followup_form_view msgid "Manual Credit Control Policy" msgstr "Politique de relance manuelle" #. module: account_credit_control -#: view:credit.control.run:account_credit_control.credit_control_run_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_form msgid "Manual Lines" msgstr "Lignes manuelles" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Manual change" msgstr "Changement manuel" #. module: account_credit_control +#: model:credit.control.policy.level,custom_mail_text:account_credit_control.no_follow_1 #: model:credit.control.policy.level,custom_text:account_credit_control.no_follow_1 msgid "Manual no follow" msgstr "Ne pas suivre (Manuel)" #. module: account_credit_control -#: field:credit.control.line,manually_overridden:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_manually_overridden msgid "Manually overridden" msgstr "Mise à jour manuelle" #. module: account_credit_control -#: field:credit.control.marker,name:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_marker_name msgid "Mark as" msgstr "Marquer comme" #. module: account_credit_control -#: field:credit.control.printer,mark_as_sent:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_printer_mark_as_sent msgid "Mark letter lines as sent" msgstr "Marquer comme traitées" @@ -740,37 +738,38 @@ msgid "Mass printer" msgstr "Imprimer en masse" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "More..." msgstr "Plus..." #. module: account_credit_control -#: field:credit.control.line,move_line_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_move_line_id msgid "Move line" msgstr "Écriture comptable" #. module: account_credit_control -#: field:credit.control.policy.changer,move_line_ids:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_move_line_ids msgid "Move line to change" msgstr "Écriture comptable à changer" #. module: account_credit_control -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form msgid "Move lines to affect" msgstr "Écriture comptable à traiter" #. module: account_credit_control -#: field:credit.control.policy,name:0 field:credit.control.policy.level,name:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_name +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_name msgid "Name" msgstr "Nom" #. module: account_credit_control -#: field:credit.control.policy.changer,new_policy_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_new_policy_id msgid "New Policy to Apply" msgstr "Nouvelle politique" #. module: account_credit_control -#: field:credit.control.policy.changer,new_policy_level_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_new_policy_level_id msgid "New level to apply" msgstr "Nouveau niveau de relance" @@ -788,7 +787,7 @@ msgid "No follow" msgstr "Pas de suivi" #. module: account_credit_control -#: field:credit.control.policy.changer,do_nothing:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_changer_do_nothing msgid "No follow policy" msgstr "Politique sans suivi" @@ -799,135 +798,266 @@ msgid "No lines will be changed. All the selected lines are already done." msgstr "Aucune ligne ne sera modifiée. Toutes les lignes sélectionnées sont déjà terminées." #. module: account_credit_control -#: help:credit.control.printer,mark_as_sent:0 +#: model:ir.model.fields,help:account_credit_control.field_credit_control_printer_mark_as_sent msgid "Only letter lines will be marked." msgstr "Seules les relances par courrier seront traitées." #. module: account_credit_control -#: view:credit.control.run:account_credit_control.credit_control_run_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_form msgid "Open Credit Control Lines" msgstr "Ouvrir les lignes de relance" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document msgid "Open amount" msgstr "Restant dû" #. module: account_credit_control #: model:credit.control.policy.level,custom_text:account_credit_control.2_time_1 -msgid "" -"Our records indicate that we have not received the payment of the above mentioned invoice.\n" -" If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.\n" -"\n" -" Thank you in advance for your anticipated cooperation in this matter.\n" -"\n" -" Best regards\n" -" " -msgstr "Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n Si ce courrier à croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 10 jours.\n\n En vous remerciant de votre coopération.\n\nSalutations\n " - -#. module: account_credit_control #: model:credit.control.policy.level,custom_text:account_credit_control.3_time_1 msgid "" -"Our records indicate that we have not received the payment of the above mentioned invoice.\n" -"If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.\n" +"Our records indicate that we have not\n" +" received the payment of the above mentioned invoice.\n" +" If it has already been sent, please disregard this notice. If\n" +" not, please proceed with payment within 10 days.\n" "\n" -"Thank you in advance for your anticipated cooperation in this matter.\n" +" Thank you in advance for your anticipated cooperation in this\n" +" matter.\n" "\n" -"Best regards\n" +" Best regards\n" +" " +msgstr "" +"Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n" +" Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 10 jours.\n" +"\n" +" En vous remerciant de votre coopération.\n" +"\n" +"Salutations\n" +" " + +#. module: account_credit_control +#: model:credit.control.policy.level,custom_mail_text:account_credit_control.3_time_1 +msgid "" +"Our records indicate that we have not received the payment of the invoices mentioned in the attached document.
\n" +"
\n" +" If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.
\n" +"
\n" +" Thank you in advance for your anticipated cooperation in this matter.
\n" +"
\n" +" Best regards" +msgstr "" +"Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n" +" Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 10 jours.\n" +"\n" +" En vous remerciant de votre coopération.\n" +"\n" +"Salutations\n" +" " + +#. module: account_credit_control +#: model:credit.control.policy.level,custom_mail_text:account_credit_control.2_time_1 +msgid "" +"Our records indicate that we have not received the payment of the invoices mentioned in the attached document.
\n" +" If it has already been sent, please disregard this notice. If not, please proceed with payment within 10 days.
\n" +"
\n" +" Thank you in advance for your anticipated cooperation in this matter.
\n" +"
\n" +" Best regards" +msgstr "" +"Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n" +" Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 10 jours.\n" +"\n" +" En vous remerciant de votre coopération.\n" +"\n" +"Salutations\n" " " -msgstr "Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 10 jours.\n\n En vous remerciant de votre coopération.\n\nSalutations\n " #. module: account_credit_control #: model:credit.control.policy.level,custom_text:account_credit_control.3_time_2 msgid "" -"Our records indicate that we have not yet received the payment of the above mentioned invoice despite our first reminder.\n" -" If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days.\n" +"Our records indicate that we have not yet\n" +" received the payment of the above mentioned invoice despite our\n" +" first reminder.\n" +" If it has already been sent, please disregard this notice. If\n" +" not, please proceed with payment within 5 days.\n" "\n" -"Thank you in advance for your anticipated cooperation in this matter.\n" +" Thank you in advance for your anticipated cooperation in this\n" +" matter.\n" "\n" -"Best regards\n" +" Best regards\n" +" " +msgstr "" +"Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n" +" Si ce courrier à croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 5 jours.\n" +"\n" +" En vous remerciant de votre coopération.\n" +"\n" +"Salutations\n" +" " + +#. module: account_credit_control +#: model:credit.control.policy.level,custom_mail_text:account_credit_control.3_time_2 +msgid "" +"Our records indicate that we have not yet received the payment of the invoices mentioned in the attached document despite our first reminder.
\n" +" If it has already been sent, please disregard this notice. If not, please proceed with payment within 5 days.
\n" +"
\n" +" Thank you in advance for your anticipated cooperation in this matter.
\n" +"
\n" +" Best regards" +msgstr "" +"Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n" +" Si ce courrier à croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 5 jours.\n" +"\n" +" En vous remerciant de votre coopération.\n" +"\n" +"Salutations\n" " " -msgstr "Notre comptabilité nous informe que les factures ci-dessous n'ont pas été payées malgré un précédent rappel.\n Si ce courrier à croisé votre paiement veuillez le considérer comme nul et non avenu. Sinon, Merci de procéder au paiement dans les 5 jours.\n\n En vous remerciant de votre coopération.\n\nSalutations\n " #. module: account_credit_control #: model:credit.control.policy.level,custom_text:account_credit_control.2_time_2 msgid "" -"Our records indicate that we still have not received the payment of the above mentioned invoice despite our reminder.\n" +"Our records indicate that we still have\n" +" not received the payment of the above mentioned invoice despite\n" +" our reminder.\n" "\n" -" If payment have already been sent, please disregard this notice. If not, please proceed with payment.\n" -" If your payment has not been received in the next 5 days, your file will be transfered to our debt\n" -" collection agency.\n" +" If payment have already been sent, please disregard this\n" +" notice. If not, please proceed with payment.\n" +" If your payment has not been received in the next 5 days, your\n" +" file will be transfered to our debt\n" +" collection agency.\n" "\n" -" Should you need us to arrange a payment plan for you, please advise.\n" -" A customer account statement is enclosed for you convenience.\n" +" Should you need us to arrange a payment plan for you, please\n" +" advise.\n" +" A customer account statement is enclosed for you convenience.\n" "\n" -" Thank you in advance for your anticipated cooperation in this matter.\n" +" Thank you in advance for your anticipated cooperation in this\n" +" matter.\n" "\n" -" Best regards\n" +" Best regards\n" +" " +msgstr "" +"Notre comptabilité nous indique que vous avez encore des factures ouvertes malgré nos précédents rappels.\n" +" Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu.\n" +" Si le paiement n'est pas effectué dans les 5 jours votre dossier sera transféré à une société de recouvrement.\n" +"\n" +" Si vous désirez un accord de paiement n'hésitez pas à nous contacter. \n" +" Un décompte est disponible ci-joint.\n" +"\n" +" En vous remerciant de votre coopération\n" +" " + +#. module: account_credit_control +#: model:credit.control.policy.level,custom_mail_text:account_credit_control.2_time_2 +msgid "" +"Our records indicate that we still have not received the payment of the invoices mentioned in the attached document despite our reminder.\n" +"
\n" +"
\n" +" If payment have already been sent, please disregard this notice. If not, please proceed with payment.
\n" +" If your payment has not been received in the next 5 days, your file will be transfered to our debt
\n" +" collection agency.
\n" +"
\n" +" Should you need us to arrange a payment plan for you, please advise.
\n" +" A customer account statement is enclosed for you convenience.
\n" +"
\n" +" Thank you in advance for your anticipated cooperation in this matter.
\n" +"
\n" +" Best regards" +msgstr "" +"Notre comptabilité nous indique que vous avez encore des factures ouvertes malgré nos précédents rappels.\n" +" Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu.\n" +" Si le paiement n'est pas effectué dans les 5 jours votre dossier sera transféré à une société de recouvrement.\n" +"\n" +" Si vous désirez un accord de paiement n'hésitez pas à nous contacter. \n" +" Un décompte est disponible ci-joint.\n" +"\n" +" En vous remerciant de votre coopération\n" +" " + +#. module: account_credit_control +#: model:credit.control.policy.level,custom_mail_text:account_credit_control.3_time_3 +msgid "" +"Our records indicate that we still have not received the payment of the invoices mentioned in the attached document despite our two reminders.
\n" +" If payment have already been sent, please disregard this notice. If not, please proceed with payment.
\n" +" If your payment has not been received in the next 5 days, your file will be transfered to our debt collection agency.
\n" +"
\n" +" Should you need us to arrange a payment plan for you, please advise.
\n" +" A customer account statement is enclosed for you convenience.
\n" +"
\n" +" Thank you in advance for your anticipated cooperation in this matter.
\n" +"
\n" +" Best regards" +msgstr "" +"Notre comptabilité nous indique que vous avez encore des factures ouvertes malgré nos précédents rappels.\n" +" Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu.\n" +" Si le paiement n'est pas effectué dans les 5 jours votre dossier sera transféré à une société de recouvrement.\n" +"\n" +" Si vous désirez un accord de paiement n'hésitez pas à nous contacter. \n" +" Un décompte est disponible ci-joint.\n" +"\n" +" En vous remerciant de votre coopération\n" " " -msgstr "Notre comptabilité nous indique que vous avez encore des factures ouvertes malgré nos précédents rappels.\n Si ce courrier a croisé votre paiement veuillez le considérer comme nul et non avenu.\n Si le paiement n'est pas effectué dans les 5 jours votre dossier sera transféré à une société de recouvrement.\n\n Si vous désirez un accord de paiement n'hésitez pas à nous contacter. \n Un décompte est disponible ci-joint.\n\n En vous remerciant de votre coopération\n " #. module: account_credit_control #: model:ir.model,name:account_credit_control.model_mail_mail msgid "Outgoing Mails" -msgstr "Courriels envoyés" +msgstr "Courriels à envoyer" #. module: account_credit_control -#: field:credit.control.line,policy_level_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_policy_level_id msgid "Overdue Level" msgstr "Niveau de relance" #. module: account_credit_control -#: field:credit.control.communication,partner_id:0 -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: field:credit.control.line,partner_id:0 #: model:ir.model,name:account_credit_control.model_res_partner +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_partner_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_partner_id +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Partner" -msgstr "Client" +msgstr "Partenaire" #. module: account_credit_control -#: code:addons/account_credit_control/run.py:109 +#: code:addons/account_credit_control/models/credit_control_run.py:108 #, python-format msgid "Please select a policy" -msgstr "Choisissez une politique" +msgstr "Utilisez l'action sur les factures clients" #. module: account_credit_control -#: code:addons/account_credit_control/wizard/credit_control_policy_changer.py:61 +#: code:addons/account_credit_control/wizard/credit_control_policy_changer.py:60 #, python-format msgid "Please use wizard on customer invoices" msgstr "Utilisez l'action sur les factures clients" #. module: account_credit_control -#: view:credit.control.run:account_credit_control.credit_control_run_form -#: field:credit.control.run,policy_ids:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_policy_ids +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_form msgid "Policies" msgstr "Politiques" #. module: account_credit_control -#: code:addons/account_credit_control/run.py:132 +#: code:addons/account_credit_control/models/credit_control_run.py:131 #, python-format msgid "Policy \"%s\" has generated %d Credit Control Lines.
" msgstr "La politique de relance \"%s\" a généré %d lignes de relance.
" #. module: account_credit_control -#: code:addons/account_credit_control/run.py:136 +#: code:addons/account_credit_control/models/credit_control_run.py:135 #, python-format msgid "Policy \"%s\" has not generated any Credit Control Lines.
" msgstr "La politique de relance \"%s\" n'a pas généré de lignes de relance.
" #. module: account_credit_control -#: field:credit.control.policy,level_ids:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_ids msgid "Policy Levels" msgstr "Niveaux de relance" #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form -#: view:credit.control.policy.level:account_credit_control.credit_mangement_policy_level_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_mangement_policy_level_form msgid "Policy level" msgstr "Niveau de relance" #. module: account_credit_control -#: view:credit.control.policy:account_credit_control.credit_control_policy_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_form msgid "Policy levels" msgstr "Niveaux de relance" @@ -937,7 +1067,7 @@ msgid "Previous Reminder" msgstr "Précédent rappel" #. module: account_credit_control -#: view:credit.control.printer:account_credit_control.credit_line_printer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_printer_form msgid "Print" msgstr "Imprimer" @@ -953,36 +1083,35 @@ msgid "Print selected lines" msgstr "Imprimer la sélection" #. module: account_credit_control -#: view:credit.control.printer:account_credit_control.credit_line_printer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_printer_form msgid "Print the selected lines" msgstr "Imprimer la sélection" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search -#: selection:credit.control.line,state:0 -#: selection:credit.control.marker,name:0 +#: selection:credit.control.line,state:0 selection:credit.control.marker,name:0 +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Ready To Send" msgstr "Prêt à l'envoi" #. module: account_credit_control -#: field:credit.control.line,policy_id:0 -#: field:credit.control.policy.level,policy_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_policy_id +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_policy_level_policy_id msgid "Related Policy" msgstr "Niveau de relance" #. module: account_credit_control -#: view:credit.control.run:account_credit_control.credit_control_run_form -#: field:credit.control.run,report:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_report +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_run_form msgid "Report" msgstr "Lettre" #. module: account_credit_control -#: field:credit.control.communication,report_date:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_report_date msgid "Report Date" msgstr "Date du rapport" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Run date" msgstr "Date de relance" @@ -998,148 +1127,142 @@ msgid "Send an email for the selected lines." msgstr "Envoyer les rappels par email." #. module: account_credit_control -#: view:credit.control.emailer:account_credit_control.credit_line_emailer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_emailer_form msgid "Send emails for the selected lines" msgstr "Envoyer un email depuis les lignes de relances sélectionnées" #. module: account_credit_control -#: view:credit.control.emailer:account_credit_control.credit_line_emailer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_emailer_form msgid "Send the emails" msgstr "Envoyer les courriels" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "Sent" -msgstr "Envoyées" +msgstr "Envoyer par email" #. module: account_credit_control -#: field:credit.control.line,mail_message_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_mail_message_id msgid "Sent Email" msgstr "Courriels envoyés" #. module: account_credit_control -#: field:credit.control.line,date_sent:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_date_sent msgid "Sent date" msgstr "Date d'envoi" #. module: account_credit_control -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form msgid "Set current credit level" msgstr "Définir le niveau de relance actuel" #. module: account_credit_control -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form msgid "Set new policy" msgstr "Définir une nouvelle politique de relance" #. module: account_credit_control -#: field:credit.control.line,run_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_run_id msgid "Source" -msgstr "Source" +msgstr "Origine" #. module: account_credit_control -#: field:credit.control.line,state:0 field:credit.control.run,state:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_state +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_run_state msgid "State" msgstr "État" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.ui.view,arch_db:account_credit_control.report_credit_control_summary_document msgid "Summary" msgstr "Listes des factures en attente de règlement" #. module: account_credit_control -#: help:account.invoice,credit_policy_id:0 -msgid "" -"The Credit Control Policy used for this invoice. If nothing is defined, it " -"will use the account setting or the partner setting." +#: model:ir.model.fields,help:account_credit_control.field_account_invoice_credit_policy_id +msgid "The Credit Control Policy used for this invoice. If nothing is defined, it will use the account setting or the partner setting." msgstr "Il s'agit de la politique de relance propre à cette facture Si vide, la politique de relance par défaut sera utilisée." #. module: account_credit_control -#: help:res.partner,credit_policy_id:0 -msgid "" -"The Credit Control Policy used for this partner. This setting can be forced " -"on the invoice. If nothing is defined, it will use the company setting." +#: model:ir.model.fields,help:account_credit_control.field_res_partner_credit_policy_id +msgid "The Credit Control Policy used for this partner. This setting can be forced on the invoice. If nothing is defined, it will use the company setting." msgstr "Politique de relance utilisée pour ce client. (Vous pouvez aussi en définir une autre au niveau d'une des factures de ce client.) Si vide, la politique par défaut (au niveau de la société) sera appliquée." #. module: account_credit_control -#: help:res.company,credit_policy_id:0 -msgid "" -"The Credit Control Policy used on partners by default. This setting can be " -"overridden on partners or invoices." +#: model:ir.model.fields,help:account_credit_control.field_res_company_credit_policy_id +msgid "The Credit Control Policy used on partners by default. This setting can be overridden on partners or invoices." msgstr "Politique de relance par défaut du client. (Ce paramétrage peut être défini plus spécifiquement au niveau de la facture)." #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "The line was deprecated by a manual change of policy on invoice." msgstr "La ligne a été remplacée par un changement manuel de politique sur la facture." #. module: account_credit_control -#: help:credit.control.line,currency_id:0 +#: model:ir.model.fields,help:account_credit_control.field_credit_control_line_currency_id msgid "The optional other currency if it is a multi-currency entry." -msgstr "Les autres devises optionnelles en cas de multi-devises." +msgstr "L'autre devise optionelle si c'est une écriture multi devise." #. module: account_credit_control -#: code:addons/account_credit_control/policy.py:258 +#: code:addons/account_credit_control/models/credit_control_policy.py:256 #, python-format msgid "The smallest level can not be of type Previous Reminder" msgstr "Le premier niveau ne peut pas être basé sur un précédent rappel" #. module: account_credit_control -#: view:credit.control.line:account_credit_control.credit_control_line_search +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_line_search msgid "These lines are ready to send by email or by letter using the Actions." msgstr "Ces lignes sont prêtes à être traitées" #. module: account_credit_control -#: help:credit.control.policy,account_ids:0 +#: model:ir.model.fields,help:account_credit_control.field_credit_control_policy_account_ids msgid "This policy will be active only for the selected accounts" msgstr "Cette politique de relance sera active seulement pour les comptes sélectionnés" #. module: account_credit_control -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form -msgid "" -"This wizard will let you set the overdue policy and level for selected " -"invoices" +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form +msgid "This wizard will let you set the overdue policy and level for selected invoices" msgstr "Cette action vous permet de définir une politique et un niveau de relance pour les factures sélectionnées" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_total_due msgid "Total Due" -msgstr "Total dû" +msgstr "Total Due" #. module: account_credit_control -#: view:website:account_credit_control.report_credit_control_summary_document +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_total_invoiced msgid "Total Invoiced" msgstr "Total facturé" #. module: account_credit_control -#: field:credit.control.communication,user_id:0 +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_communication_user_id +#: model:res.groups,name:account_credit_control.group_account_credit_control_user msgid "User" msgstr "Utilisateur" #. module: account_credit_control -#: view:credit.control.marker:account_credit_control.credit_line_marker_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form msgid "Warning: you will maybe not be able to revert this operation." msgstr "Attention: Cette opération ne peut pas être annulée" #. module: account_credit_control -#: code:addons/account_credit_control/line.py:226 +#: code:addons/account_credit_control/models/credit_control_line.py:229 #, python-format -msgid "" -"You are not allowed to delete a credit control line that is not in draft " -"state." +msgid "You are not allowed to delete a credit control line that is not in draft state." msgstr "Vous ne pouvez pas supprimer une ligne de relance qui n'est pas en brouillon" #. module: account_credit_control -#: code:addons/account_credit_control/policy.py:203 +#: code:addons/account_credit_control/models/credit_control_policy.py:201 #, python-format msgid "" "You can only use a policy set on account %s.\n" "Please choose one of the following policies:\n" " %s" -msgstr "Vous ne pouvez utiliser qu'une politique associée au compte %s.Vous pouvez choisir une des politique suivantes:\n %s" +msgstr "" +"Vous ne pouvez utiliser qu'une politique associée au compte %s.Vous pouvez choisir une des politique suivantes:\n" +" %s" #. module: account_credit_control -#: code:addons/account_credit_control/invoice.py:60 +#: code:addons/account_credit_control/models/account_invoice.py:60 #, python-format msgid "" "You cannot cancel this invoice.\n" @@ -1153,14 +1276,19 @@ msgid "credit control communication" msgstr "Lettre de relance" #. module: account_credit_control -#: field:credit.control.line,level:0 -msgid "credit.control.policy.level" -msgstr "Une politique de relance" +#: model:ir.model,name:account_credit_control.model_credit_control_policy_changer +msgid "credit.control.policy.changer" +msgstr "credit.control.policy.changer" #. module: account_credit_control -#: view:credit.control.emailer:account_credit_control.credit_line_emailer_form -#: view:credit.control.marker:account_credit_control.credit_line_marker_form -#: view:credit.control.policy.changer:account_credit_control.credit_control_policy_changer_form -#: view:credit.control.printer:account_credit_control.credit_line_printer_form +#: model:ir.model.fields,field_description:account_credit_control.field_credit_control_line_level +msgid "credit.control.policy.level" +msgstr "credit.control.policy.level" + +#. module: account_credit_control +#: model:ir.ui.view,arch_db:account_credit_control.credit_control_policy_changer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_emailer_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_marker_form +#: model:ir.ui.view,arch_db:account_credit_control.credit_line_printer_form msgid "or" msgstr "ou" diff --git a/account_credit_control/line_view.xml b/account_credit_control/line_view.xml deleted file mode 100644 index 9538c577b..000000000 --- a/account_credit_control/line_view.xml +++ /dev/null @@ -1,171 +0,0 @@ - - - - credit.control.line.form - credit.control.line - -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- - - Credit Control Lines - credit.control.line - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - credit.control.line.tree - credit.control.line - - - - - - - - - - - - - - - - - - - - - - - - - - Credit Control Lines - ir.actions.act_window - credit.control.line - - form - tree,form - - {'search_default_filter_draft': 1, 'search_default_filter_to_be_sent': 1} - - - - - - - -
-
diff --git a/account_credit_control/mail.py b/account_credit_control/mail.py deleted file mode 100644 index 7ec9be86d..000000000 --- a/account_credit_control/mail.py +++ /dev/null @@ -1,29 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields - - -class Mail(models.Model): - _inherit = 'mail.mail' - - # use HTML fields instead of text - body_html = fields.Html('Rich-text Contents', - help="Rich-text/HTML message") diff --git a/account_credit_control/migrations/0.3/post-migration.py b/account_credit_control/migrations/0.3/post-migration.py deleted file mode 100644 index 0bc929983..000000000 --- a/account_credit_control/migrations/0.3/post-migration.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- encoding: utf-8 -*- -import logging -from openerp import SUPERUSER_ID -from openerp.modules.registry import RegistryManager - -uid = SUPERUSER_ID - -__name__ = 'Change custom_mail_text text field to hmtl field' -_logger = logging.getLogger(__name__) - - -def migrate_replace_text_with_html(cr, registry): - cr.execute("""update credit_control_policy_level set - custom_mail_text=regexp_replace(custom_mail_text, E'[\\n]', - '
','g')""") - cr.execute("""update ir_translation set - value=regexp_replace(value, E'[\\n]','
','g') - where name='credit.control.policy.level,custom_mail_text'""") - - -def migrate(cr, version): - if not version: - # it is the installation of the module - return - registry = RegistryManager.get(cr.dbname) - migrate_replace_text_with_html(cr, registry) diff --git a/account_credit_control/models/__init__.py b/account_credit_control/models/__init__.py new file mode 100644 index 000000000..342e9b8cd --- /dev/null +++ b/account_credit_control/models/__init__.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import account_account +from . import account_invoice +from . import credit_control_line +from . import credit_control_policy +from . import credit_control_run +from . import mail_mail +from . import res_company +from . import res_partner diff --git a/account_credit_control/models/account_account.py b/account_credit_control/models/account_account.py new file mode 100644 index 000000000..2face2a5b --- /dev/null +++ b/account_credit_control/models/account_account.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class AccountAccount(models.Model): + """ Add a link to a credit control policy on account.account """ + + _inherit = "account.account" + + credit_control_line_ids = fields.One2many('credit.control.line', + 'account_id', + string='Credit Lines', + readonly=True) diff --git a/account_credit_control/invoice.py b/account_credit_control/models/account_invoice.py similarity index 66% rename from account_credit_control/invoice.py rename to account_credit_control/models/account_invoice.py index 69b747e8c..5cc66de22 100644 --- a/account_credit_control/invoice.py +++ b/account_credit_control/models/account_invoice.py @@ -1,24 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Vincent Renaville -# Copyright 2013 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields, api, _ +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import _, api, fields, models +from odoo.exceptions import UserError class AccountInvoice(models.Model): @@ -56,7 +41,7 @@ class AccountInvoice(models.Model): ('state', '!=', 'draft')] cc_nondraft_lines = cc_line_obj.search(nondraft_domain) if cc_nondraft_lines: - raise api.Warning( + raise UserError( _('You cannot cancel this invoice.\n' 'A payment reminder has already been ' 'sent to the customer.\n' diff --git a/account_credit_control/line.py b/account_credit_control/models/credit_control_line.py similarity index 86% rename from account_credit_control/line.py rename to account_credit_control/models/credit_control_line.py index 326778870..d052b3669 100644 --- a/account_credit_control/line.py +++ b/account_credit_control/models/credit_control_line.py @@ -1,28 +1,13 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from openerp import models, fields, api, _ +from odoo import _, api, fields, models +from odoo.exceptions import UserError -logger = logging.getLogger('credit.line.control') +logger = logging.getLogger(__name__) class CreditControlLine(models.Model): @@ -40,7 +25,7 @@ class CreditControlLine(models.Model): date = fields.Date(string='Controlling date', required=True, - select=True) + index=True) # maturity date of related move line we do not use # a related field in order to # allow manual changes @@ -130,7 +115,7 @@ class CreditControlLine(models.Model): store=True, readonly=True) - level = fields.Integer('credit.control.policy.level', + level = fields.Integer('Level', related='policy_level_id.level', store=True, readonly=True) @@ -149,8 +134,8 @@ class CreditControlLine(models.Model): data['date_due'] = move_line.date_maturity data['state'] = 'draft' data['channel'] = level.channel - data['invoice_id'] = (move_line.invoice.id if - move_line.invoice else False) + data['invoice_id'] = (move_line.invoice_id.id if + move_line.invoice_id else False) data['partner_id'] = move_line.partner_id.id data['amount_due'] = (move_line.amount_currency or move_line.debit or move_line.credit) @@ -194,7 +179,10 @@ class CreditControlLine(models.Model): new_lines = self.browse() for move_line in lines: - open_amount = move_line.amount_residual_currency + if move_line.currency_id: + open_amount = move_line.amount_residual_currency + else: + open_amount = move_line.amount_residual cur_tolerance = tolerance.get(move_line.currency_id.id, tolerance_base) if check_tolerance and open_amount < cur_tolerance: @@ -204,7 +192,7 @@ class CreditControlLine(models.Model): controlling_date, open_amount) line = self.create(vals) - new_lines += line + new_lines |= line # when we have lines generated earlier in draft, # on the same level, it means that we have left @@ -222,7 +210,7 @@ class CreditControlLine(models.Model): def unlink(self): for line in self: if line.state != 'draft': - raise api.Warning( + raise UserError( _('You are not allowed to delete a credit control ' 'line that is not in draft state.') ) diff --git a/account_credit_control/policy.py b/account_credit_control/models/credit_control_policy.py similarity index 85% rename from account_credit_control/policy.py rename to account_credit_control/models/credit_control_policy.py index 51bda55f2..252712672 100644 --- a/account_credit_control/policy.py +++ b/account_credit_control/models/credit_control_policy.py @@ -1,24 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields, api, _ +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import _, api, fields, models +from odoo.exceptions import UserError, ValidationError class CreditControlPolicy(models.Model): @@ -39,7 +24,7 @@ class CreditControlPolicy(models.Model): 'account.account', string='Accounts', required=True, - domain="[('type', '=', 'receivable')]", + domain="[('internal_type', '=', 'receivable')]", help="This policy will be active only" " for the selected accounts", ) @@ -51,7 +36,7 @@ class CreditControlPolicy(models.Model): self.ensure_one() return [('account_id', 'in', self.account_ids.ids), ('date_maturity', '<=', controlling_date), - ('reconcile_id', '=', False), + ('reconciled', '=', False), ('partner_id', '!=', False)] @api.multi @@ -71,7 +56,7 @@ class CreditControlPolicy(models.Model): move_l_obj = self.env['account.move.line'] user = self.env.user if user.company_id.credit_policy_id.id != self.id: - return move_l_obj.browse() + return move_l_obj domain_line = self._move_lines_domain(controlling_date) return move_l_obj.search(domain_line) @@ -97,11 +82,10 @@ class CreditControlPolicy(models.Model): self.ensure_one() # MARK possible place for a good optimisation my_obj = self.env[model] - move_l_obj = self.env['account.move.line'] default_domain = self._move_lines_domain(controlling_date) - to_add = move_l_obj.browse() - to_remove = move_l_obj.browse() + to_add = self.env['account.move.line'] + to_remove = self.env['account.move.line'] # The lines which are linked to this policy have to be included in the # run for this policy. @@ -110,7 +94,7 @@ class CreditControlPolicy(models.Model): if add_objs: domain = list(default_domain) domain.append((move_relation_field, 'in', add_objs.ids)) - to_add = move_l_obj.search(domain) + to_add = to_add.search(domain) # The lines which are linked to another policy do not have to be # included in the run for this policy. @@ -119,7 +103,7 @@ class CreditControlPolicy(models.Model): if neg_objs: domain = list(default_domain) domain.append((move_relation_field, 'in', neg_objs.ids)) - to_remove = move_l_obj.search(domain) + to_remove = to_remove.search(domain) return to_add, to_remove @api.multi @@ -150,7 +134,7 @@ class CreditControlPolicy(models.Model): the process """ return self._move_lines_subset(controlling_date, 'account.invoice', - 'invoice') + 'invoice_id') @api.multi @api.returns('account.move.line') @@ -177,8 +161,7 @@ class CreditControlPolicy(models.Model): existing credit line but with a different policy. """ self.ensure_one() - move_line_obj = self.env['account.move.line'] - different_lines = move_line_obj.browse() + different_lines = self.env['account.move.line'] if not lines: return different_lines cr = self.env.cr @@ -188,7 +171,7 @@ class CreditControlPolicy(models.Model): (self.id, tuple(lines.ids))) res = cr.fetchall() if res: - return move_line_obj.browse([row[0] for row in res]) + return different_lines.browse([row[0] for row in res]) return different_lines @api.multi @@ -199,7 +182,7 @@ class CreditControlPolicy(models.Model): if account in x.account_ids or x.do_nothing] if self not in allowed: allowed_names = u"\n".join(x.name for x in allowed) - raise api.Warning( + raise UserError( _('You can only use a policy set on ' 'account %s.\n' 'Please choose one of the following ' @@ -229,7 +212,7 @@ class CreditControlPolicyLevel(models.Model): required=True ) delay_days = fields.Integer(string='Delay (in days)', required=True) - email_template_id = fields.Many2one('email.template', + email_template_id = fields.Many2one('mail.template', string='Email Template', required=True) channel = fields.Selection([('letter', 'Letter'), @@ -246,17 +229,20 @@ class CreditControlPolicyLevel(models.Model): 'UNIQUE (policy_id, level)', 'Level must be unique per policy')] - @api.one + @api.multi @api.constrains('level', 'computation_mode') def _check_level_mode(self): """ The smallest level of a policy cannot be computed on the "previous_date". """ - smallest_level = self.search([('policy_id', '=', self.policy_id.id)], - order='level asc', limit=1) - if smallest_level.computation_mode == 'previous_date': - return api.ValidationError(_('The smallest level can not be of ' - 'type Previous Reminder')) + + for policy_level in self: + smallest_level = \ + self.search([('policy_id', '=', policy_level.policy_id.id)], + order='level asc', limit=1) + if smallest_level.computation_mode == 'previous_date': + raise ValidationError(_('The smallest level can not be ' + 'of type Previous Reminder')) @api.multi def _previous_level(self): @@ -294,7 +280,7 @@ class CreditControlPolicyLevel(models.Model): return "(cr_line.date + %(delay)s)::date <= date(%(controlling_date)s)" @api.multi - def _get_sql_date_boundary_for_computation_mode(self, controlling_date): + def _get_sql_date_boundary_for_computation_mode(self): """ Return a where clauses statement for the given controlling date and computation mode of the level """ @@ -321,7 +307,7 @@ class CreditControlPolicyLevel(models.Model): self.ensure_one() move_line_obj = self.env['account.move.line'] if not lines: - return move_line_obj.browse() + return move_line_obj cr = self.env.cr sql = ("SELECT DISTINCT mv_line.id\n" " FROM account_move_line mv_line\n" @@ -337,7 +323,7 @@ class CreditControlPolicyLevel(models.Model): " AND (mv_line.debit IS NOT NULL AND mv_line.debit != 0.0)\n") sql += " AND" _get_sql_date_part = self._get_sql_date_boundary_for_computation_mode - sql += _get_sql_date_part(controlling_date) + sql += _get_sql_date_part() data_dict = {'controlling_date': controlling_date, 'line_ids': tuple(lines.ids), 'delay': self.delay_days} @@ -345,7 +331,7 @@ class CreditControlPolicyLevel(models.Model): res = cr.fetchall() if res: return move_line_obj.browse([row[0] for row in res]) - return move_line_obj.browse() + return move_line_obj @api.multi @api.returns('account.move.line') @@ -355,7 +341,7 @@ class CreditControlPolicyLevel(models.Model): self.ensure_one() move_line_obj = self.env['account.move.line'] if not lines: - return move_line_obj.browse() + return move_line_obj cr = self.env.cr sql = ("SELECT mv_line.id\n" " FROM account_move_line mv_line\n" @@ -377,7 +363,7 @@ class CreditControlPolicyLevel(models.Model): " AND mv_line.id in %(line_ids)s\n") sql += " AND " _get_sql_date_part = self._get_sql_date_boundary_for_computation_mode - sql += _get_sql_date_part(controlling_date) + sql += _get_sql_date_part() previous_level = self._previous_level() data_dict = {'controlling_date': controlling_date, 'line_ids': tuple(lines.ids), @@ -389,15 +375,14 @@ class CreditControlPolicyLevel(models.Model): res = cr.fetchall() if res: return move_line_obj.browse([row[0] for row in res]) - return move_line_obj.browse() + return move_line_obj @api.multi @api.returns('account.move.line') def get_level_lines(self, controlling_date, lines): """ get all move lines in entry lines that match the current level """ self.ensure_one() - move_line_obj = self.env['account.move.line'] - matching_lines = move_line_obj.browse() + matching_lines = self.env['account.move.line'] if self._previous_level() is None: method = self._get_first_level_move_lines else: diff --git a/account_credit_control/run.py b/account_credit_control/models/credit_control_run.py similarity index 71% rename from account_credit_control/run.py rename to account_credit_control/models/credit_control_run.py index c6afb1d1e..4bd4ee2e1 100644 --- a/account_credit_control/run.py +++ b/account_credit_control/models/credit_control_run.py @@ -1,28 +1,13 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from openerp import models, fields, api, _ +from odoo import _, api, fields, models +from odoo.exceptions import UserError -logger = logging.getLogger('credit.control.run') +logger = logging.getLogger(__name__) class CreditControlRun(models.Model): @@ -74,7 +59,7 @@ class CreditControlRun(models.Model): copy=False, ) - @api.multi + @api.model def _check_run_date(self, controlling_date): """ Ensure that there is no credit line in the future using controlling_date @@ -83,33 +68,31 @@ class CreditControlRun(models.Model): runs = self.search([('date', '>', controlling_date)], order='date DESC', limit=1) if runs: - raise api.Warning(_('A run has already been executed more ' - 'recently than %s') % (runs.date)) + raise UserError(_('A run has already been executed more ' + 'recently than %s') % (runs.date)) line_obj = self.env['credit.control.line'] lines = line_obj.search([('date', '>', controlling_date)], order='date DESC', limit=1) if lines: - raise api.Warning(_('A credit control line more ' - 'recent than %s exists at %s') % - (controlling_date, lines.date)) + raise UserError(_('A credit control line more ' + 'recent than %s exists at %s') % + (controlling_date, lines.date)) @api.multi @api.returns('credit.control.line') def _generate_credit_lines(self): """ Generate credit control lines. """ self.ensure_one() - cr_line_obj = self.env['credit.control.line'] - move_line_obj = self.env['account.move.line'] - manually_managed_lines = move_line_obj.browse() + manually_managed_lines = self.env['account.move.line'] self._check_run_date(self.date) policies = self.policy_ids if not policies: - raise api.Warning(_('Please select a policy')) + raise UserError(_('Please select a policy')) report = '' - generated = cr_line_obj.browse() + generated = self.env['credit.control.line'] for policy in policies: if policy.do_nothing: continue @@ -117,11 +100,11 @@ class CreditControlRun(models.Model): manual_lines = policy._lines_different_policy(lines) lines -= manual_lines manually_managed_lines |= manual_lines - policy_lines_generated = cr_line_obj.browse() + policy_lines_generated = self.env['credit.control.line'] if lines: # policy levels are sorted by level # so iteration is in the correct order - create = cr_line_obj.create_or_update_from_mv_lines + create = policy_lines_generated.create_or_update_from_mv_lines for level in reversed(policy.level_ids): level_lines = level.get_level_lines(self.date, lines) policy_lines_generated += create(level_lines, @@ -158,8 +141,8 @@ class CreditControlRun(models.Model): except Exception: # In case of exception openerp will do a rollback # for us and free the lock - raise api.Warning(_('A credit control run is already running' - ' in background, please try later.')) + raise UserError(_('A credit control run is already running ' + 'in background, please try later.')) self._generate_credit_lines() return True diff --git a/account_credit_control/models/mail_mail.py b/account_credit_control/models/mail_mail.py new file mode 100644 index 000000000..3b5f95acb --- /dev/null +++ b/account_credit_control/models/mail_mail.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class Mail(models.Model): + _inherit = 'mail.mail' + + # use HTML fields instead of text + body_html = fields.Html('Rich-text Contents', + help="Rich-text/HTML message") diff --git a/account_credit_control/models/res_company.py b/account_credit_control/models/res_company.py new file mode 100644 index 000000000..4ae6dc332 --- /dev/null +++ b/account_credit_control/models/res_company.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import fields, models + + +class ResCompany(models.Model): + """ Add credit control parameters """ + _inherit = 'res.company' + + credit_control_tolerance = fields.Float(string='Credit Control Tolerance', + default=0.1) + # This is not a property on the partner because we cannot search + # on fields.property (subclass fields.function). + credit_policy_id = fields.Many2one('credit.control.policy', + string='Credit Control Policy', + help="The Credit Control Policy used " + "on partners by default. " + "This setting can be overridden" + " on partners or invoices.") diff --git a/account_credit_control/partner.py b/account_credit_control/models/res_partner.py similarity index 53% rename from account_credit_control/partner.py rename to account_credit_control/models/res_partner.py index 30f81eff2..b43e43d15 100644 --- a/account_credit_control/partner.py +++ b/account_credit_control/models/res_partner.py @@ -1,25 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields, api -from openerp.exceptions import Warning, ValidationError +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import api, fields, models +from odoo.exceptions import UserError, ValidationError class ResPartner(models.Model): @@ -32,7 +16,7 @@ class ResPartner(models.Model): credit_policy_id = fields.Many2one( 'credit.control.policy', string='Credit Control Policy', - domain="[('account_ids', 'in', property_account_receivable)]", + domain="[('account_ids', 'in', property_account_receivable_id)]", help="The Credit Control Policy used for this " "partner. This setting can be forced on the " "invoice. If nothing is defined, it will use " @@ -43,17 +27,17 @@ class ResPartner(models.Model): string='Credit Control Lines', readonly=True) - @api.constrains('credit_policy_id', 'property_account_receivable') + @api.constrains('credit_policy_id', 'property_account_receivable_id') def _check_credit_policy(self): """ Ensure that policy on partner are limited to the account policy """ for partner in self: - if (not partner.property_account_receivable or + if (not partner.property_account_receivable_id or not partner.credit_policy_id): continue - account = partner.property_account_receivable + account = partner.property_account_receivable_id policy = partner.credit_policy_id try: policy.check_policy_against_account(account) - except Warning as err: + except UserError as err: # constrains should raise ValidationError exceptions raise ValidationError(err) diff --git a/account_credit_control/partner_view.xml b/account_credit_control/partner_view.xml deleted file mode 100644 index e2ad144e8..000000000 --- a/account_credit_control/partner_view.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - partner.credit_control.form.view - res.partner - - - - - - - - - - - - diff --git a/account_credit_control/policy_view.xml b/account_credit_control/policy_view.xml deleted file mode 100644 index 7158389f1..000000000 --- a/account_credit_control/policy_view.xml +++ /dev/null @@ -1,131 +0,0 @@ - - - - - credit.control.policy.form - credit.control.policy - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- - - credit.control.policy.tree - credit.control.policy - - - - - - - - - - - - Credit Control Policies - ir.actions.act_window - credit.control.policy - - form - tree,form - - - - - - - credit.mangement.policy.level.form - credit.control.policy.level - -
- - - - - - - - - - - - - - - - - - -
-
- - - credit.control.policy.level.tree - credit.control.policy.level - - - - - - - - - - - -
-
diff --git a/account_credit_control/report/report.xml b/account_credit_control/report/report.xml index 2d24c0862..187969d2e 100644 --- a/account_credit_control/report/report.xml +++ b/account_credit_control/report/report.xml @@ -1,15 +1,12 @@ - - - + + - - - + id="credit_control_summary" + model="credit.control.communication" + string="Credit Control Summary" + report_type="qweb-pdf" + name="account_credit_control.report_credit_control_summary" + file="account_credit_control.report_credit_control_summary" + auto="False" + /> + diff --git a/account_credit_control/report/report_credit_control_summary.xml b/account_credit_control/report/report_credit_control_summary.xml index 1b02093c8..676a5e213 100644 --- a/account_credit_control/report/report_credit_control_summary.xml +++ b/account_credit_control/report/report_credit_control_summary.xml @@ -1,99 +1,104 @@ - - + - - + diff --git a/account_credit_control/run_view.xml b/account_credit_control/run_view.xml deleted file mode 100644 index aa3cd0ea0..000000000 --- a/account_credit_control/run_view.xml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - credit.control.run.tree - credit.control.run - - - - - - - - - - credit.control.run.form - credit.control.run - -
-
-
- - - - - - - - - - - - - - - -
-
-
- - - - Credit Control Run - ir.actions.act_window - credit.control.run - - form - tree,form - - - - - - -
-
diff --git a/account_credit_control/security/ir.model.access.csv b/account_credit_control/security/ir.model.access.csv index a3854b714..979d3b7b8 100644 --- a/account_credit_control/security/ir.model.access.csv +++ b/account_credit_control/security/ir.model.access.csv @@ -1,20 +1,20 @@ -"id","perm_create","perm_unlink","group_id/id","name","model_id/id","perm_read","perm_write" -"account_credit_control.ir_model_access_270",1,1,"group_account_credit_control_manager","credit_control_manager_line","account_credit_control.model_credit_control_line",1,1 -"account_credit_control.ir_model_access_271",1,1,"group_account_credit_control_user","credit_control_user_line","account_credit_control.model_credit_control_line",1,1 -"account_credit_control.ir_model_access_272",0,0,"group_account_credit_control_info","credit_control_info_line","account_credit_control.model_credit_control_line",1,0 -"account_credit_control.ir_model_access_273",1,1,"group_account_credit_control_manager","credit_control_manager_mail_template","email_template.model_email_template",1,1 -"account_credit_control.ir_model_access_275",1,1,"group_account_credit_control_manager","credit_control_manager_mail_message","mail.model_mail_message",1,1 -"account_credit_control.ir_model_access_276",1,0,"group_account_credit_control_user","credit_control_user_mail_message","mail.model_mail_message",1,1 -"account_credit_control.ir_model_access_277",0,0,"group_account_credit_control_info","credit_control_info_mail_message","mail.model_mail_message",1,0 -"account_credit_control.ir_model_access_281",1,1,"group_account_credit_control_manager","credit_control_mananger_run","account_credit_control.model_credit_control_run",1,1 -"account_credit_control.ir_model_access_282",1,1,"group_account_credit_control_user","credit_control_user_run","account_credit_control.model_credit_control_run",1,1 -"account_credit_control.ir_model_access_283",0,0,"group_account_credit_control_info","credit_control_info_run","account_credit_control.model_credit_control_run",1,0 -"account_credit_control.ir_model_access_284",1,1,"group_account_credit_control_manager","credit_control_manager_policy","account_credit_control.model_credit_control_policy",1,1 -"account_credit_control.ir_model_access_285",0,0,"group_account_credit_control_user","credit_control_user_policy","account_credit_control.model_credit_control_policy",1,0 -"account_credit_control.ir_model_access_286",0,0,"group_account_credit_control_info","credit_control_info_policy","account_credit_control.model_credit_control_policy",1,0 -"account_credit_control.ir_model_access_287",1,1,"group_account_credit_control_manager","credit_control_manager_level","account_credit_control.model_credit_control_policy_level",1,1 -"account_credit_control.ir_model_access_288",0,0,"group_account_credit_control_user","credit_control_user_level","account_credit_control.model_credit_control_policy_level",1,0 -"account_credit_control.ir_model_access_289",0,0,"group_account_credit_control_info","credit_control_info_level","account_credit_control.model_credit_control_policy_level",1,0 -"account_credit_control.ir_model_access_290",0,0,"account.group_account_user","credit_control_fin_user_line","account_credit_control.model_credit_control_line",1,0 -"account_credit_control.ir_model_access_291",0,0,"account.group_account_invoice","credit_control_fin_invoice_line","account_credit_control.model_credit_control_line",1,0 -"account_credit_control.ir_model_access_292",1,1,"account.group_account_manager","credit_control_fin_manager_line","account_credit_control.model_credit_control_line",1,1 \ No newline at end of file +id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink +account_credit_control.ir_model_access_270,credit_control_manager_line,account_credit_control.model_credit_control_line,group_account_credit_control_manager,1,1,1,1 +account_credit_control.ir_model_access_271,credit_control_user_line,account_credit_control.model_credit_control_line,group_account_credit_control_user,1,1,1,1 +account_credit_control.ir_model_access_272,credit_control_info_line,account_credit_control.model_credit_control_line,group_account_credit_control_info,1,0,0,0 +account_credit_control.ir_model_access_273,credit_control_manager_mail_template,mail.model_mail_template,group_account_credit_control_manager,1,1,1,1 +account_credit_control.ir_model_access_275,credit_control_manager_mail_message,mail.model_mail_message,group_account_credit_control_manager,1,1,1,1 +account_credit_control.ir_model_access_276,credit_control_user_mail_message,mail.model_mail_message,group_account_credit_control_user,1,1,1,0 +account_credit_control.ir_model_access_277,credit_control_info_mail_message,mail.model_mail_message,group_account_credit_control_info,1,0,0,0 +account_credit_control.ir_model_access_281,credit_control_mananger_run,account_credit_control.model_credit_control_run,group_account_credit_control_manager,1,1,1,1 +account_credit_control.ir_model_access_282,credit_control_user_run,account_credit_control.model_credit_control_run,group_account_credit_control_user,1,1,1,1 +account_credit_control.ir_model_access_283,credit_control_info_run,account_credit_control.model_credit_control_run,group_account_credit_control_info,1,0,0,0 +account_credit_control.ir_model_access_284,credit_control_manager_policy,account_credit_control.model_credit_control_policy,group_account_credit_control_manager,1,1,1,1 +account_credit_control.ir_model_access_285,credit_control_user_policy,account_credit_control.model_credit_control_policy,group_account_credit_control_user,1,0,0,0 +account_credit_control.ir_model_access_286,credit_control_info_policy,account_credit_control.model_credit_control_policy,group_account_credit_control_info,1,0,0,0 +account_credit_control.ir_model_access_287,credit_control_manager_level,account_credit_control.model_credit_control_policy_level,group_account_credit_control_manager,1,1,1,1 +account_credit_control.ir_model_access_288,credit_control_user_level,account_credit_control.model_credit_control_policy_level,group_account_credit_control_user,1,0,0,0 +account_credit_control.ir_model_access_289,credit_control_info_level,account_credit_control.model_credit_control_policy_level,group_account_credit_control_info,1,0,0,0 +account_credit_control.ir_model_access_290,credit_control_fin_user_line,account_credit_control.model_credit_control_line,account.group_account_user,1,0,0,0 +account_credit_control.ir_model_access_291,credit_control_fin_invoice_line,account_credit_control.model_credit_control_line,account.group_account_invoice,1,0,0,0 +account_credit_control.ir_model_access_292,credit_control_fin_manager_line,account_credit_control.model_credit_control_line,account.group_account_manager,1,1,1,1 diff --git a/account_credit_control/security/res_groups.xml b/account_credit_control/security/res_groups.xml new file mode 100644 index 000000000..e7847cc74 --- /dev/null +++ b/account_credit_control/security/res_groups.xml @@ -0,0 +1,25 @@ + + + + Credit Control + + + + + Info + + + + + User + + + + + + Manager + + + + + diff --git a/account_credit_control/tests/__init__.py b/account_credit_control/tests/__init__.py new file mode 100644 index 000000000..c13729caa --- /dev/null +++ b/account_credit_control/tests/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from . import test_credit_control_policy +from . import test_res_partner +from . import test_account_invoice +from . import test_credit_control_run diff --git a/account_credit_control/tests/test_account_invoice.py b/account_credit_control/tests/test_account_invoice.py new file mode 100644 index 000000000..9f920b4c0 --- /dev/null +++ b/account_credit_control/tests/test_account_invoice.py @@ -0,0 +1,111 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from datetime import datetime +from dateutil import relativedelta + +from odoo import fields +from odoo.tests.common import TransactionCase +from odoo.exceptions import UserError + + +class TestAccountInvoice(TransactionCase): + post_install = True + at_install = False + + def test_action_cancel(self): + """ + Test the method action_cancel on invoice + We will create an old invoice, generate a control run + and check if I can unlink this invoice + :return: + """ + journal = self.env['account.invoice']._default_journal() + + account_type_rec = self.env.ref('account.data_account_type_receivable') + account = self.env['account.account'].create({ + 'code': '400001', + 'name': 'Clients (test)', + 'user_type_id': account_type_rec.id, + 'reconcile': True, + }) + + tag_operation = self.env.ref('account.account_tag_operating') + account_type_inc = self.env.ref('account.data_account_type_revenue') + analytic_account = self.env['account.account'].create({ + 'code': '701001', + 'name': 'Ventes en Belgique (test)', + 'user_type_id': account_type_inc.id, + 'reconcile': True, + 'tag_ids': [(6, 0, [tag_operation.id])] + }) + payment_term = self.env.ref('account.account_payment_term_immediate') + + product = self.env['product.product'].create({ + 'name': 'Product test' + }) + + policy = self.env.ref('account_credit_control.credit_control_3_time') + policy.write({ + 'account_ids': [(6, 0, [account.id])] + }) + + # There is a bug with Odoo ... + # The field "credit_policy_id" is considered as an "old field" and + # the field property_account_receivable_id like a "new field" + # The ORM will create the record with old field + # and update the record with new fields. + # However constrains are applied after the first creation. + partner = self.env['res.partner'].create({ + 'name': 'Partner', + 'property_account_receivable_id': account.id, + }) + partner.credit_policy_id = policy.id + + date_invoice = datetime.today() - relativedelta.relativedelta(years=1) + invoice = self.env['account.invoice'].create({ + 'partner_id': partner.id, + 'journal_id': journal.id, + 'type': 'out_invoice', + 'payment_term_id': payment_term.id, + 'date_invoice': fields.Datetime.to_string(date_invoice), + 'date_due': fields.Datetime.to_string(date_invoice), + }) + + invoice.invoice_line_ids.create({ + 'invoice_id': invoice.id, + 'product_id': product.id, + 'name': product.name, + 'account_id': analytic_account.id, + 'quantity': 5, + 'price_unit': 100, + }) + + # Validate the invoice + invoice.action_invoice_open() + + control_run = self.env['credit.control.run'].create({ + 'date': fields.Date.today(), + 'policy_ids': [(6, 0, [policy.id])] + }) + control_run.generate_credit_lines() + + self.assertTrue(len(invoice.credit_control_line_ids), 1) + control_line = invoice.credit_control_line_ids + + control_marker = self.env['credit.control.marker'] + marker_line = control_marker\ + .with_context(active_model='credit.control.line', + active_ids=[control_line.id])\ + ._get_line_ids() + + self.assertIn(control_line, marker_line) + + marker = self.env['credit.control.marker'].create({ + 'name': 'to_be_sent', + 'line_ids': [(6, 0, [control_line.id])] + }) + marker.mark_lines() + + with self.assertRaises(UserError): + invoice.unlink() diff --git a/account_credit_control/tests/test_credit_control_policy.py b/account_credit_control/tests/test_credit_control_policy.py new file mode 100644 index 000000000..c80566c06 --- /dev/null +++ b/account_credit_control/tests/test_credit_control_policy.py @@ -0,0 +1,89 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.exceptions import ValidationError, UserError +from odoo.tests.common import TransactionCase + + +class TestCreditControlPolicy(TransactionCase): + post_install = True + at_install = False + + def test_check_policy_against_account(self): + """ + Test the model check_policy_against_account with several case + :return: + """ + policy = self.env.ref('account_credit_control.credit_control_3_time') + + account_type = self.env.ref('account.data_account_type_receivable') + account = self.env['account.account'].create({ + 'code': '400001', + 'name': 'Test', + 'user_type_id': account_type.id, + 'reconcile': True, + }) + + # The account is not included in the policy + with self.assertRaises(UserError): + policy.check_policy_against_account(account) + + # We set the flag "do_nothing" to True + policy.write({ + 'account_ids': [(5, 0)], + 'do_nothing': True, + }) + result = policy.check_policy_against_account(account) + self.assertTrue(result) + + # We add the account in the policy + policy.write({ + 'account_ids': [(6, 0, [account.id])] + }) + result = policy.check_policy_against_account(account) + self.assertTrue(result) + + def test_check_level_mode(self): + """ + Check the method _check_level_mode on policy level + :return: + """ + level_1 = self.env.ref('account_credit_control.3_time_1') + + with self.assertRaises(ValidationError): + level_1.computation_mode = 'previous_date' + + def test_previous_level(self): + """ + Check the method _previous_level on policy level + :return: + """ + level_1 = self.env.ref('account_credit_control.3_time_1') + level_2 = self.env.ref('account_credit_control.3_time_2') + + previous_level = level_2._previous_level() + self.assertEqual(previous_level, level_1) + + def test_get_sql_date_boundary_for_computation_mode(self): + """ + Check the where clauses statement return by the method + _get_sql_date_boundary_for_computation_mode + according the computation mode + :return: + """ + level_2 = self.env.ref('account_credit_control.3_time_2') + + level_2.computation_mode = 'net_days' + where_clause = level_2._net_days_get_boundary() + result = level_2._get_sql_date_boundary_for_computation_mode() + self.assertEqual(result, where_clause) + + level_2.computation_mode = 'end_of_month' + where_clause = level_2._end_of_month_get_boundary() + result = level_2._get_sql_date_boundary_for_computation_mode() + self.assertEqual(result, where_clause) + + level_2.computation_mode = 'previous_date' + where_clause = level_2._previous_date_get_boundary() + result = level_2._get_sql_date_boundary_for_computation_mode() + self.assertEqual(result, where_clause) diff --git a/account_credit_control/tests/test_credit_control_run.py b/account_credit_control/tests/test_credit_control_run.py new file mode 100644 index 000000000..ac7c83196 --- /dev/null +++ b/account_credit_control/tests/test_credit_control_run.py @@ -0,0 +1,155 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +import re +from datetime import datetime +from dateutil import relativedelta + +from odoo import fields +from odoo.tests.common import TransactionCase +from odoo.exceptions import UserError + + +class TestCreditControlRun(TransactionCase): + post_install = True + at_install = False + + def setUp(self): + super(TestCreditControlRun, self).setUp() + + journal = self.env['account.invoice']._default_journal() + + account_type_rec = self.env.ref('account.data_account_type_receivable') + account = self.env['account.account'].create({ + 'code': '400001', + 'name': 'Clients (test)', + 'user_type_id': account_type_rec.id, + 'reconcile': True, + }) + + tag_operation = self.env.ref('account.account_tag_operating') + account_type_inc = self.env.ref('account.data_account_type_revenue') + analytic_account = self.env['account.account'].create({ + 'code': '701001', + 'name': 'Ventes en Belgique (test)', + 'user_type_id': account_type_inc.id, + 'reconcile': True, + 'tag_ids': [(6, 0, [tag_operation.id])] + }) + payment_term = self.env.ref('account.account_payment_term_immediate') + + product = self.env['product.product'].create({ + 'name': 'Product test' + }) + + self.policy = \ + self.env.ref('account_credit_control.credit_control_3_time') + self.policy.write({ + 'account_ids': [(6, 0, [account.id])] + }) + + # There is a bug with Odoo ... + # The field "credit_policy_id" is considered as an "old field" and + # the field property_account_receivable_id like a "new field" + # The ORM will create the record with old field + # and update the record with new fields. + # However constrains are applied after the first creation. + partner = self.env['res.partner'].create({ + 'name': 'Partner', + 'property_account_receivable_id': account.id, + }) + partner.credit_policy_id = self.policy.id + + date_invoice = datetime.today() - relativedelta.relativedelta(years=1) + self.invoice = self.env['account.invoice'].create({ + 'partner_id': partner.id, + 'journal_id': journal.id, + 'type': 'out_invoice', + 'payment_term_id': payment_term.id, + 'date_invoice': fields.Datetime.to_string(date_invoice), + 'date_due': fields.Datetime.to_string(date_invoice), + }) + + self.invoice.invoice_line_ids.create({ + 'invoice_id': self.invoice.id, + 'product_id': product.id, + 'name': product.name, + 'account_id': analytic_account.id, + 'quantity': 5, + 'price_unit': 100, + }) + + # Validate the invoice + self.invoice.action_invoice_open() + + def test_check_run_date(self): + """ + Create a control run older than the last control run + :return: + """ + control_run = self.env['credit.control.run'].create({ + 'date': fields.Date.today(), + 'policy_ids': [(6, 0, [self.policy.id])] + }) + + with self.assertRaises(UserError): + today = datetime.today() + previous_date = today - relativedelta.relativedelta(days=15) + previous_date_str = fields.Date.to_string(previous_date) + control_run._check_run_date(previous_date_str) + + def test_generate_credit_lines(self): + """ + Test the method generate_credit_lines + :return: + """ + control_run = self.env['credit.control.run'].create({ + 'date': fields.Date.today(), + 'policy_ids': [(6, 0, [self.policy.id])] + }) + + control_run.with_context(lang='en_US').generate_credit_lines() + + self.assertTrue(len(self.invoice.credit_control_line_ids), 1) + self.assertEqual(control_run.state, 'done') + + report_regex = \ + r'

Policy "%s" has generated ' \ + r'\d+ Credit Control Lines.

' % self.policy.name + regex_result = re.match(report_regex, control_run.report) + self.assertIsNotNone(regex_result) + + def test_multi_credit_control_run(self): + """ + Generate several control run + :return: + """ + + six_months = datetime.today() - relativedelta.relativedelta(months=6) + six_months_str = fields.Date.to_string(six_months) + three_months = datetime.today() - relativedelta.relativedelta(months=2) + three_months_str = fields.Date.to_string(three_months) + + # First run + first_control_run = self.env['credit.control.run'].create({ + 'date': six_months_str, + 'policy_ids': [(6, 0, [self.policy.id])] + }) + first_control_run.with_context(lang='en_US').generate_credit_lines() + self.assertTrue(len(self.invoice.credit_control_line_ids), 1) + + # Second run + second_control_run = self.env['credit.control.run'].create({ + 'date': three_months_str, + 'policy_ids': [(6, 0, [self.policy.id])] + }) + second_control_run.with_context(lang='en_US').generate_credit_lines() + self.assertTrue(len(self.invoice.credit_control_line_ids), 2) + + # Last run + last_control_run = self.env['credit.control.run'].create({ + 'date': fields.Date.today(), + 'policy_ids': [(6, 0, [self.policy.id])] + }) + last_control_run.with_context(lang='en_US').generate_credit_lines() + self.assertTrue(len(self.invoice.credit_control_line_ids), 2) diff --git a/account_credit_control/tests/test_res_partner.py b/account_credit_control/tests/test_res_partner.py new file mode 100644 index 000000000..62399c6e4 --- /dev/null +++ b/account_credit_control/tests/test_res_partner.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo.tests.common import TransactionCase +from odoo.exceptions import ValidationError + + +class TestCreditControlPolicyLevel(TransactionCase): + post_install = True + at_install = False + + def test_check_credit_policy(self): + """ + Test the constrains on res.partner + First we try to assign an account and a policy with a wrong policy + (this policy doesn't contains the account of the partner). + After that we add the previous account in the policy and + retry to assign this policy and this account on the partner + :return: + """ + policy = self.env.ref('account_credit_control.credit_control_3_time') + + partner = self.env['res.partner'].create({ + 'name': 'Partner 1', + }) + account = partner.property_account_receivable_id + + with self.assertRaises(ValidationError): + partner.write({ + 'credit_policy_id': policy.id, + }) + + policy.write({ + 'account_ids': [(6, 0, [account.id])] + }) + partner.property_account_receivable_id = account.id + partner.credit_policy_id = policy.id diff --git a/account_credit_control/views/account_invoice.xml b/account_credit_control/views/account_invoice.xml new file mode 100644 index 000000000..2b9dcbbf3 --- /dev/null +++ b/account_credit_control/views/account_invoice.xml @@ -0,0 +1,44 @@ + + + + + + invoice.followup.form.view + account.invoice + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/account_credit_control/views/credit_control_line.xml b/account_credit_control/views/credit_control_line.xml new file mode 100644 index 000000000..74963f679 --- /dev/null +++ b/account_credit_control/views/credit_control_line.xml @@ -0,0 +1,171 @@ + + + + credit.control.line.form + credit.control.line + +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + Credit Control Lines + credit.control.line + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + credit.control.line.tree + credit.control.line + + + + + + + + + + + + + + + + + + + + + + + + + + Credit Control Lines + ir.actions.act_window + credit.control.line + + form + tree,form + + {'search_default_filter_draft': 1, + 'search_default_filter_to_be_sent': 1} + + + + + + + + +
diff --git a/account_credit_control/views/credit_control_policy.xml b/account_credit_control/views/credit_control_policy.xml new file mode 100644 index 000000000..b3651fc90 --- /dev/null +++ b/account_credit_control/views/credit_control_policy.xml @@ -0,0 +1,133 @@ + + + + credit.control.policy.form + credit.control.policy + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + credit.control.policy.tree + credit.control.policy + + + + + + + + + + + + Credit Control Policies + ir.actions.act_window + credit.control.policy + + form + tree,form + + + + + + + credit.mangement.policy.level.form + credit.control.policy.level + +
+ + + + + + + + + + + + + + + + + + +
+
+ + + credit.control.policy.level.tree + credit.control.policy.level + + + + + + + + + + + +
diff --git a/account_credit_control/views/credit_control_run.xml b/account_credit_control/views/credit_control_run.xml new file mode 100644 index 000000000..c01a4d799 --- /dev/null +++ b/account_credit_control/views/credit_control_run.xml @@ -0,0 +1,74 @@ + + + + credit.control.run.tree + credit.control.run + + + + + + + + + + credit.control.run.form + credit.control.run + +
+
+
+ + + + + + + + + + + + + + + +
+
+
+ + + + Credit Control Run + ir.actions.act_window + credit.control.run + + form + tree,form + + + + + + +
diff --git a/account_credit_control/views/res_company.xml b/account_credit_control/views/res_company.xml new file mode 100644 index 000000000..22b71f9cb --- /dev/null +++ b/account_credit_control/views/res_company.xml @@ -0,0 +1,14 @@ + + + + credit.control.company.form + res.company + + + + + + + + + diff --git a/account_credit_control/views/res_partner.xml b/account_credit_control/views/res_partner.xml new file mode 100644 index 000000000..cdb4888ae --- /dev/null +++ b/account_credit_control/views/res_partner.xml @@ -0,0 +1,23 @@ + + + + partner.credit_control.form.view + res.partner + + + + + + + + + + + diff --git a/account_credit_control/wizard/__init__.py b/account_credit_control/wizard/__init__.py index 82938e856..f3c532641 100644 --- a/account_credit_control/wizard/__init__.py +++ b/account_credit_control/wizard/__init__.py @@ -1,23 +1,3 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## from . import credit_control_emailer from . import credit_control_marker from . import credit_control_printer diff --git a/account_credit_control/wizard/credit_control_communication.py b/account_credit_control/wizard/credit_control_communication.py index b60a05f87..d23718555 100644 --- a/account_credit_control/wizard/credit_control_communication.py +++ b/account_credit_control/wizard/credit_control_communication.py @@ -1,27 +1,11 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from openerp import models, fields, api +from odoo import api, fields, models -logger = logging.getLogger('credit.control.line.mailing') +logger = logging.getLogger(__name__) class CreditCommunication(models.TransientModel): @@ -81,13 +65,14 @@ class CreditCommunication(models.TransientModel): balance_field = 'credit_control_line_ids.balance_due' return sum(self.mapped(balance_field)) - @api.one + @api.multi @api.depends('credit_control_line_ids', 'credit_control_line_ids.amount_due', 'credit_control_line_ids.balance_due') def _compute_total(self): - self.total_invoiced = self._get_total() - self.total_due = self._get_total_due() + for communication in self: + communication.total_invoiced = communication._get_total() + communication.total_due = communication._get_total_due() @api.model @api.returns('self', lambda value: value.id) @@ -176,30 +161,21 @@ class CreditCommunication(models.TransientModel): @api.returns('mail.mail') def _generate_emails(self): """ Generate email message using template related to level """ - email_message_obj = self.env['mail.mail'] - # Warning: still using the old-api on 'email.template' because - # the method generate_email() does not follow the cr, uid, ids - # convention and the new api wrapper can't translate the call - email_template_obj = self.pool['email.template'] - att_obj = self.env['ir.attachment'] - emails = email_message_obj.browse() + emails = self.env['mail.mail'] + attachments = self.env['ir.attachment'] required_fields = ['subject', 'body_html', 'email_from', 'email_to'] - cr, uid, context = self.env.cr, self.env.uid, self.env.context for comm in self: template = comm.current_policy_level.email_template_id - email_values = email_template_obj.generate_email(cr, uid, - template.id, - comm.id, - context=context) + email_values = template.generate_email(comm.id) email_values['type'] = 'email' # model is Transient record (self) removed periodically so no point # of storing res_id email_values.pop('model', None) email_values.pop('res_id', None) - email = email_message_obj.create(email_values) + email = emails.create(email_values) state = 'sent' # The mail will not be send, however it will be in the pool, in an @@ -213,7 +189,6 @@ class CreditCommunication(models.TransientModel): comm.credit_control_line_ids.write({'mail_message_id': email.id, 'state': state}) - attachments = att_obj.browse() for att in email_values.get('attachments', []): attach_fname = att[0] attach_datas = att[1] @@ -225,7 +200,7 @@ class CreditCommunication(models.TransientModel): 'res_id': email.id, 'type': 'binary', } - attachments += att_obj.create(data_attach) + attachments |= attachments.create(data_attach) email.write({'attachment_ids': [(6, 0, attachments.ids)]}) emails += email return emails @@ -242,8 +217,7 @@ class CreditCommunication(models.TransientModel): @api.multi @api.returns('credit.control.line') def _mark_credit_line_as_sent(self): - line_obj = self.env['credit.control.line'] - lines = line_obj.browse() + lines = self.env['credit.control.line'] for comm in self: lines |= comm.credit_control_line_ids diff --git a/account_credit_control/wizard/credit_control_emailer.py b/account_credit_control/wizard/credit_control_emailer.py index 61397e583..9c7230954 100644 --- a/account_credit_control/wizard/credit_control_emailer.py +++ b/account_credit_control/wizard/credit_control_emailer.py @@ -1,25 +1,10 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields, api, _ +from odoo import _, api, fields, models +from odoo.exceptions import UserError class CreditControlEmailer(models.TransientModel): @@ -59,7 +44,7 @@ class CreditControlEmailer(models.TransientModel): def email_lines(self): self.ensure_one() if not self.line_ids: - raise api.Warning(_('No credit control lines selected.')) + raise UserError(_('No credit control lines selected.')) comm_obj = self.env['credit.control.communication'] diff --git a/account_credit_control/wizard/credit_control_emailer_view.xml b/account_credit_control/wizard/credit_control_emailer_view.xml index 2c299a64b..272289e4b 100644 --- a/account_credit_control/wizard/credit_control_emailer_view.xml +++ b/account_credit_control/wizard/credit_control_emailer_view.xml @@ -1,54 +1,52 @@ - - - + + - credit.line.emailer.form - credit.control.emailer - -
- - - - - - - - -
-
- -
+ credit.line.emailer.form + credit.control.emailer + +
+ + + + + + + + +
+
+ +
+ res_model="credit.control.emailer" + src_model="credit.control.line" + view_mode="form" + target="new" + key2="client_action_multi" + id="open_credit_line_emailer_wizard_menu_action"/> - Send By Email - credit.control.emailer - form - form - - new - Send an email for the selected lines. + Send By Email + credit.control.emailer + form + form + + new + Send an email for the selected lines. -
-
+ diff --git a/account_credit_control/wizard/credit_control_marker.py b/account_credit_control/wizard/credit_control_marker.py index 516c4febc..edb63e09d 100644 --- a/account_credit_control/wizard/credit_control_marker.py +++ b/account_credit_control/wizard/credit_control_marker.py @@ -1,24 +1,9 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -from openerp import models, fields, api, _ +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +from odoo import _, api, fields, models +from odoo.exceptions import UserError class CreditControlMarker(models.TransientModel): @@ -71,12 +56,12 @@ class CreditControlMarker(models.TransientModel): self.ensure_one() if not self.line_ids: - raise api.Warning(_('No credit control lines selected.')) + raise UserError(_('No credit control lines selected.')) filtered_lines = self._filter_lines(self.line_ids) if not filtered_lines: - raise api.Warning(_('No lines will be changed. ' - 'All the selected lines are already done.')) + raise UserError(_('No lines will be changed. ' + 'All the selected lines are already done.')) self._mark_lines(filtered_lines, self.name) diff --git a/account_credit_control/wizard/credit_control_marker_view.xml b/account_credit_control/wizard/credit_control_marker_view.xml index c32cc8e18..e21f22c11 100644 --- a/account_credit_control/wizard/credit_control_marker_view.xml +++ b/account_credit_control/wizard/credit_control_marker_view.xml @@ -1,39 +1,41 @@ - - - + + - credit.line.marker.form - credit.control.marker - -
- - - - - - - - - - - - - - -
-
- -
+ credit.line.marker.form + credit.control.marker + +
+ + + + + + + + + + + + + + + + +
+
+ +
@@ -46,15 +48,14 @@ id="open_credit_line_marker_wizard_menu_action"/> - Change Lines' State - credit.control.marker - credit.control.line - form - form - - new - Change the state of the selected lines. + Change Lines' State + credit.control.marker + credit.control.line + form + form + + new + Change the state of the selected lines. -
-
+ diff --git a/account_credit_control/wizard/credit_control_policy_changer.py b/account_credit_control/wizard/credit_control_policy_changer.py index 6829d7aff..76ecefb3d 100644 --- a/account_credit_control/wizard/credit_control_policy_changer.py +++ b/account_credit_control/wizard/credit_control_policy_changer.py @@ -1,29 +1,16 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). import logging -from openerp import models, fields, api, _ + +from odoo import _, api, fields, models +from odoo.exceptions import UserError + logger = logging.getLogger(__name__) -class credit_control_policy_changer(models.TransientModel): +class CreditControlPolicyChanger(models.TransientModel): """ Wizard that is run from invoices and allows to set manually a policy Policy are actually apply to related move lines availabe in selection widget @@ -52,18 +39,17 @@ class credit_control_policy_changer(models.TransientModel): context = self.env.context active_ids = context.get('active_ids') invoice_obj = self.env['account.invoice'] - move_line_obj = self.env['account.move.line'] if not active_ids: return False - selected_lines = move_line_obj.browse() + selected_lines = self.env['account.move.line'] for invoice in invoice_obj.browse(active_ids): if invoice.type in ('in_invoice', 'in_refund', 'out_refund'): - raise api.Warning(_('Please use wizard on customer invoices')) + raise UserError(_('Please use wizard on customer invoices')) domain = [('account_id', '=', invoice.account_id.id), ('move_id', '=', invoice.move_id.id), - ('reconcile_id', '=', False)] - move_lines = move_line_obj.search(domain) + ('reconciled', '=', False)] + move_lines = selected_lines.search(domain) selected_lines |= move_lines return selected_lines @@ -96,10 +82,7 @@ class credit_control_policy_changer(models.TransientModel): @api.model def _set_invoice_policy(self, move_lines, policy): """ Force policy on invoice """ - invoice_obj = self.env['account.invoice'] - invoice_ids = set(line.invoice.id for line in move_lines - if line.invoice) - invoices = invoice_obj.browse(invoice_ids) + invoices = move_lines.mapped('invoice_id') invoices.write({'credit_policy_id': policy.id}) @api.model diff --git a/account_credit_control/wizard/credit_control_policy_changer_view.xml b/account_credit_control/wizard/credit_control_policy_changer_view.xml index cee46799d..b4598c387 100644 --- a/account_credit_control/wizard/credit_control_policy_changer_view.xml +++ b/account_credit_control/wizard/credit_control_policy_changer_view.xml @@ -1,54 +1,54 @@ - - + - credit control policy form - credit.control.policy.changer - -
- -
- - Change current credit policy - credit.control.policy.changer - account.invoice - form - form - - new - Allows to manually change credit level + + Change current credit policy + credit.control.policy.changer + account.invoice + form + form + + new + Allows to manually change credit level @@ -60,5 +60,4 @@ key2="client_action_multi" id="action_wizard_credit_policy_changer_menu_action"/> -
-
+ diff --git a/account_credit_control/wizard/credit_control_printer.py b/account_credit_control/wizard/credit_control_printer.py index f6e0bf04d..33798cb38 100644 --- a/account_credit_control/wizard/credit_control_printer.py +++ b/account_credit_control/wizard/credit_control_printer.py @@ -1,25 +1,10 @@ # -*- coding: utf-8 -*- -############################################################################## -# -# Author: Nicolas Bessi, Guewen Baconnier -# Copyright 2012-2014 Camptocamp SA -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# 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 Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## +# Copyright 2012-2017 Camptocamp SA +# Copyright 2017 Okia SPRL (https://okia.be) +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from openerp import models, fields, api, _ +from odoo import _, api, fields, models +from odoo.exceptions import UserError class CreditControlPrinter(models.TransientModel): @@ -57,7 +42,7 @@ class CreditControlPrinter(models.TransientModel): self.ensure_one() comm_obj = self.env['credit.control.communication'] if not self.line_ids: - raise api.Warning(_('No credit control lines selected.')) + raise UserError(_('No credit control lines selected.')) lines = self._get_lines(self.line_ids, self._credit_line_predicate) diff --git a/account_credit_control/wizard/credit_control_printer_view.xml b/account_credit_control/wizard/credit_control_printer_view.xml index 5a388ca9f..47d53db18 100644 --- a/account_credit_control/wizard/credit_control_printer_view.xml +++ b/account_credit_control/wizard/credit_control_printer_view.xml @@ -1,30 +1,29 @@ - - - + + - credit.line.printer.form - credit.control.printer - -
- - - - - - - - - - - -
-
- -
+ credit.line.printer.form + credit.control.printer + +
+ + + + + + + + + + + +
+
+ +
@@ -37,15 +36,14 @@ id="open_credit_line_printer_wizard_menu_action"/> - Print Lines - credit.control.printer - credit.control.line - form - form - - new - Print selected lines + Print Lines + credit.control.printer + credit.control.line + form + form + + new + Print selected lines -
-
+ diff --git a/setup/account_credit_control/odoo/__init__.py b/setup/account_credit_control/odoo/__init__.py new file mode 100644 index 000000000..de40ea7ca --- /dev/null +++ b/setup/account_credit_control/odoo/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/setup/account_credit_control/odoo/addons/__init__.py b/setup/account_credit_control/odoo/addons/__init__.py new file mode 100644 index 000000000..de40ea7ca --- /dev/null +++ b/setup/account_credit_control/odoo/addons/__init__.py @@ -0,0 +1 @@ +__import__('pkg_resources').declare_namespace(__name__) diff --git a/setup/account_credit_control/odoo/addons/account_credit_control b/setup/account_credit_control/odoo/addons/account_credit_control new file mode 120000 index 000000000..378d2519b --- /dev/null +++ b/setup/account_credit_control/odoo/addons/account_credit_control @@ -0,0 +1 @@ +../../../../account_credit_control \ No newline at end of file diff --git a/setup/account_credit_control/setup.py b/setup/account_credit_control/setup.py new file mode 100644 index 000000000..28c57bb64 --- /dev/null +++ b/setup/account_credit_control/setup.py @@ -0,0 +1,6 @@ +import setuptools + +setuptools.setup( + setup_requires=['setuptools-odoo'], + odoo_addon=True, +)